From 59e6e73b204d9d921d00988a5f4008d28f9df3f1 Mon Sep 17 00:00:00 2001 From: Miguel Astor Date: Tue, 11 Aug 2026 22:35:28 -0400 Subject: [PATCH] TO SQUASH: Fixed collision issues with the shark. --- Assets/Prefabs/Shark.prefab | 7 +++ Assets/Scenes/Game.unity | 48 +++++++++++++++-- Assets/Scripts/Game/Player.cs | 55 +++++++++++++++++++- Assets/Scripts/Game/PlayerGun.cs | 9 +--- Assets/Scripts/Game/Shark.cs | 36 +++++++++++-- ProjectSettings/ProjectAuditorSettings.asset | 34 ++++++++++++ 6 files changed, 171 insertions(+), 18 deletions(-) diff --git a/Assets/Prefabs/Shark.prefab b/Assets/Prefabs/Shark.prefab index 7403d85..907d591 100644 --- a/Assets/Prefabs/Shark.prefab +++ b/Assets/Prefabs/Shark.prefab @@ -305,5 +305,12 @@ MonoBehaviour: angrySound: {fileID: 8300000, guid: cc18c0832a7994c78bf33a2384a65f50, type: 3} tiredSound: {fileID: 8300000, guid: bd98ba95bc1ff6961a95e12400cd71ce, type: 3} deathSound: {fileID: 8300000, guid: e5a1c23ef78e24350938cbaa612817bb, type: 3} + hitSound: {fileID: 8300000, guid: 0535a1781b9d2e8018f56aa45b71932a, type: 3} player: {fileID: 0} gameBoardSpriteRenderer: {fileID: 0} + normalMaxSpeed: 2.5 + turnRateDegreesPerSecond: 180 + speedChangeRate: 4 + targetReachedDistance: 0.15 + alignmentThresholdDegrees: 5 + targetTimeoutSeconds: 2 diff --git a/Assets/Scenes/Game.unity b/Assets/Scenes/Game.unity index 9037e97..50fab75 100644 --- a/Assets/Scenes/Game.unity +++ b/Assets/Scenes/Game.unity @@ -1499,7 +1499,8 @@ GameObject: - component: {fileID: 1002905790} - component: {fileID: 1002905792} - component: {fileID: 1002905791} - - component: {fileID: 1002905793} + - component: {fileID: 1002905794} + - component: {fileID: 1002905795} m_Layer: 0 m_Name: Player m_TagString: Player @@ -1667,8 +1668,35 @@ MonoBehaviour: magnetTop: {fileID: 797752166} magnetBottom: {fileID: 1573512371} ballSpawner: {fileID: 240489636} ---- !u!58 &1002905793 -CircleCollider2D: +--- !u!50 &1002905794 +Rigidbody2D: + serializedVersion: 5 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1002905789} + m_BodyType: 0 + m_Simulated: 1 + m_UseFullKinematicContacts: 0 + m_UseAutoMass: 0 + m_Mass: 1 + m_LinearDamping: 0 + m_AngularDamping: 0.05 + m_GravityScale: 0 + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_Interpolate: 0 + m_SleepingMode: 1 + m_CollisionDetection: 0 + m_Constraints: 0 +--- !u!61 &1002905795 +BoxCollider2D: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} @@ -1697,12 +1725,22 @@ CircleCollider2D: m_CallbackLayers: serializedVersion: 2 m_Bits: 4294967295 - m_IsTrigger: 1 + m_IsTrigger: 0 m_UsedByEffector: 0 m_CompositeOperation: 0 m_CompositeOrder: 0 m_Offset: {x: 0, y: 0} - m_Radius: 0.5 + m_SpriteTilingProperty: + border: {x: 0, y: 0, z: 0, w: 0} + pivot: {x: 0, y: 0} + oldSize: {x: 0, y: 0} + newSize: {x: 0, y: 0} + adaptiveTilingThreshold: 0 + drawMode: 0 + adaptiveTiling: 0 + m_AutoTiling: 0 + m_Size: {x: 0.5, y: 0.5} + m_EdgeRadius: 0 --- !u!1 &1009138782 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Scripts/Game/Player.cs b/Assets/Scripts/Game/Player.cs index d868245..54021c4 100644 --- a/Assets/Scripts/Game/Player.cs +++ b/Assets/Scripts/Game/Player.cs @@ -98,6 +98,8 @@ public class Player : MonoBehaviour private float magnetTimer = 0.0f; + private bool killedByShark = false; + // Start is called once before the first execution of Update after the MonoBehaviour is created void Start() { @@ -148,8 +150,11 @@ public class Player : MonoBehaviour } // Update is called once per frame - void Update() + void FixedUpdate() { + // Foce reset the rotation. + transform.rotation = Quaternion.identity; + if (damageTimer > 0.0f) { damageTimer -= Time.fixedDeltaTime; @@ -233,6 +238,12 @@ public class Player : MonoBehaviour gameOver = false; // Reset gameOver to prevent multiple coroutine starts } + if (killedByShark) + { + killedByShark = false; // Reset the flag to prevent multiple sound plays. + StartCoroutine(Revive()); + } + if (magnetTimer > 0.0f) { magnetTimer -= Time.deltaTime; @@ -275,6 +286,29 @@ public class Player : MonoBehaviour return false; } + private IEnumerator Revive() + { + yield return new WaitForSeconds(1.0f); + if (lives > 0) + { + audioSource.PlayOneShot(killed); + yield return new WaitForSeconds(1.0f); + canFire = true; + exploding = false; + gunAnimator.SetTrigger("revived"); + + SpriteRenderer[] renderers = GetComponentsInChildren(); + foreach (SpriteRenderer renderer in renderers) + { + renderer.enabled = true; + } + } + else + { + gameOver = true; + } + } + private IEnumerator EndGame() { musicManager.pauseMusic(); @@ -455,4 +489,23 @@ public class Player : MonoBehaviour canFire = true; // Allow firing again after bar hit } + + void OnCollisionEnter2D(Collision2D collision) + { + if (collision.gameObject.CompareTag("Shark")) + { + if (exploding) + { + return; + } + + killedByShark = true; + lives--; + Explode(); + } + else + { + Physics2D.IgnoreCollision(collision.collider, GetComponent(), true); + } + } } diff --git a/Assets/Scripts/Game/PlayerGun.cs b/Assets/Scripts/Game/PlayerGun.cs index 910dd6e..c4ad339 100644 --- a/Assets/Scripts/Game/PlayerGun.cs +++ b/Assets/Scripts/Game/PlayerGun.cs @@ -17,13 +17,6 @@ public class PlayerGun : MonoBehaviour public void AnimationFinished() { - if (player.lives > 0) - { - animator.SetTrigger("revived"); - } - else - { - spriteRenderer.enabled = false; - } + spriteRenderer.enabled = false; } } diff --git a/Assets/Scripts/Game/Shark.cs b/Assets/Scripts/Game/Shark.cs index 09addb7..dc3aa39 100644 --- a/Assets/Scripts/Game/Shark.cs +++ b/Assets/Scripts/Game/Shark.cs @@ -11,6 +11,8 @@ public class Shark : MonoBehaviour public AudioClip deathSound; + public AudioClip hitSound; + public Player player; public SpriteRenderer gameBoardSpriteRenderer; @@ -113,10 +115,10 @@ public class Shark : MonoBehaviour Bounds sharkBounds = sharkSpriteRenderer.bounds; Bounds boardBounds = gameBoardBounds.Value; - float minX = boardBounds.min.x + sharkBounds.size.x; - float maxX = boardBounds.max.x - sharkBounds.size.x; - float minY = boardBounds.min.y + sharkBounds.size.y; - float maxY = boardBounds.max.y - sharkBounds.size.y; + float minX = boardBounds.min.x + (2.0f * sharkBounds.size.x); + float maxX = boardBounds.max.x - (2.0f * sharkBounds.size.x); + float minY = boardBounds.min.y + (2.0f * sharkBounds.size.y); + float maxY = boardBounds.max.y - (2.0f * sharkBounds.size.y); // Fallback to board center if the shrunken region collapses. if (minX > maxX) @@ -286,4 +288,30 @@ public class Shark : MonoBehaviour ); Destroy(gameObject); } + void OnTriggerEnter2D(Collider2D other) + { + if(other.gameObject.CompareTag("Bar")) + { + if (!audioSource.isPlaying) + { + audioSource.PlayOneShot(hitSound); + } + + // Destroy all bar segments when the ball hits a bar. + var barSegments = GameObject.FindGameObjectsWithTag("Bar"); + + foreach (var barSegment in barSegments) + { + Destroy(barSegment); + } + + // Notify the player that the bar has been hit. + var player = GameObject.FindGameObjectWithTag("Player"); + + if (player != null) + { + player.GetComponent().OnBarHit(); + } + } + } } diff --git a/ProjectSettings/ProjectAuditorSettings.asset b/ProjectSettings/ProjectAuditorSettings.asset index e34a87a..9abc029 100644 --- a/ProjectSettings/ProjectAuditorSettings.asset +++ b/ProjectSettings/ProjectAuditorSettings.asset @@ -34,3 +34,37 @@ MonoBehaviour: - Key: LoadInBackGroundClipSizeThresholdBytes Value: 204800 CurrentParamsIndex: 0 +--- !u!114 &2 +MonoBehaviour: + m_ObjectHideFlags: 53 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 0} + m_Name: + m_EditorClassIdentifier: UnityEditor.ProjectAuditorModule:Unity.ProjectAuditor.Editor:ProjectAuditorSettings + Rules: + rules: [] + DiagnosticParams: + paramsStack: + - PlatformGroup: + m_String: Unknown + m_SerializedParams: + - Key: StreamingAssetsFolderSizeLimit + Value: 50 + - Key: SpriteAtlasEmptySpaceLimit + Value: 50 + - Key: TextureStreamingMipmapsSizeLimit + Value: 4000 + - Key: StreamingClipThresholdBytes + Value: 218294 + - Key: LongDecompressedClipThresholdBytes + Value: 204800 + - Key: LongCompressedMobileClipThresholdBytes + Value: 204800 + - Key: LoadInBackGroundClipSizeThresholdBytes + Value: 204800 + CurrentParamsIndex: 0