diff --git a/Assets/Scripts/PlayerBehavior.cs b/Assets/Scripts/PlayerBehavior.cs index cd48bd8..64c8cae 100644 --- a/Assets/Scripts/PlayerBehavior.cs +++ b/Assets/Scripts/PlayerBehavior.cs @@ -37,6 +37,10 @@ public class PlayerBehavior : MonoBehaviour [Header("Cymbals:")] private float cymbalActiveTime = 0f; + [SerializeField] + private float cymbalBounceForce = 10f; + [SerializeField] + private float cymbalHitboxRange = 1.2f; [SerializeField] AudioSource cymbalAudio; [Header("Grappling:")] @@ -57,7 +61,8 @@ public class PlayerBehavior : MonoBehaviour AudioSource audioSource; - void Awake() { + void Awake() + { // initialize _rb = GetComponent(); @@ -72,37 +77,46 @@ public class PlayerBehavior : MonoBehaviour playerIsAlive = true; } - void Start() { + void Start() + { gameUI.UpdateInstrumentUI(); currentDash = dashTime; } - void Update() { - if (playerIsAlive) { - if (this.cymbalActiveTime < 0) { + void Update() + { + if (playerIsAlive) + { + if (this.cymbalActiveTime < 0) + { this.gameUI.ToggleCymbal(true); } this.cymbalActiveTime -= Time.deltaTime; // throw tambourine unlockedTambourine = StateController.Instance.HasTambourine(); - if (playerInput.actions["ThrowTambourine"].WasPressedThisFrame()) { + if (playerInput.actions["ThrowTambourine"].WasPressedThisFrame()) + { ThrowTambourine(); } // grapple tambourine = GameObject.FindGameObjectWithTag("tambourine"); - if (playerInput.actions["Grapple"].WasPressedThisFrame()) { + if (playerInput.actions["Grapple"].WasPressedThisFrame()) + { AttemptGrapple(); } - if (playerInput.actions["Grapple"].WasReleasedThisFrame() && grapplingRope.isGrappling) { + if (playerInput.actions["Grapple"].WasReleasedThisFrame() && grapplingRope.isGrappling) + { LetGoOfGrapple(); } // clarinet unlockedClarinet = StateController.Instance.HasClarinet(); - if (unlockedClarinet) { - if (playerInput.actions["ClarinetDive"].WasPressedThisFrame() && !isInWater && !playerController.IsGrounded() && !isDash) { + if (unlockedClarinet) + { + if (playerInput.actions["ClarinetDive"].WasPressedThisFrame() && !isInWater && !playerController.IsGrounded() && !isDash) + { isDash = true; this.gameUI.ToggleClarinet(false); playerInput.DeactivateInput(); @@ -110,8 +124,10 @@ public class PlayerBehavior : MonoBehaviour clarinetAudio.Play(); } - if (!playerController.IsGrounded() && isDash && (currentDash < dashTime)) { - if (!forceAdded) { + if (!playerController.IsGrounded() && isDash && (currentDash < dashTime)) + { + if (!forceAdded) + { dashVec = new Vector2(0.5f * forward, -1f) * dashForce; _rb.AddForce(dashVec, ForceMode2D.Impulse); forceAdded = true; @@ -119,9 +135,11 @@ public class PlayerBehavior : MonoBehaviour currentDash += Time.deltaTime; } - else if ((currentDash >= dashTime)) { + else if ((currentDash >= dashTime)) + { // dash ends - if (!isInWater) { + if (!isInWater) + { isDash = false; this.gameUI.ToggleClarinet(true); forceAdded = false; @@ -131,7 +149,8 @@ public class PlayerBehavior : MonoBehaviour currentDash = 0.0f; dashVec = Vector2.zero; } - else { + else + { isDash = false; this.gameUI.ToggleClarinet(true); forceAdded = false; @@ -141,14 +160,22 @@ public class PlayerBehavior : MonoBehaviour } } - if (StateController.Instance.HasCymbal()) { - if (this.playerInput.actions["CymbalCrash"].WasPressedThisFrame()) { - // Play the sound - this.gameUI.ToggleCymbal(false); - cymbalAudio.Play(); + if (StateController.Instance.HasCymbal()) + { + if (this.playerInput.actions["CymbalCrash"].WasPressedThisFrame()) + { + if (this.HasProjectileInRange()) + { - // Set the cymbal active for the equivalent of one second - this.cymbalActiveTime = 1; + this.gameUI.ToggleCymbal(false); + cymbalAudio.Play(); + + Vector2 curVel = this.playerController.RB.velocity; + this.playerController.RB.velocity = new Vector2(curVel.x, 0); + this.playerController.RB.AddForce(new Vector2(0, this.cymbalBounceForce), ForceMode2D.Impulse); + // Set the cymbal active for the equivalent of one second + this.cymbalActiveTime = 0.1f; + } } } @@ -156,28 +183,36 @@ public class PlayerBehavior : MonoBehaviour } } - void Animate() { + void Animate() + { // start walking - if (playerInput.actions["Move"].WasPressedThisFrame()) { + if (playerInput.actions["Move"].WasPressedThisFrame()) + { animator.SetBool("Walking", true); } // return to idle animation - if (playerInput.actions["Move"].WasReleasedThisFrame()) { + if (playerInput.actions["Move"].WasReleasedThisFrame()) + { animator.SetBool("Walking", false); } } - void OnMove(InputValue value) { - if (playerIsAlive) { + void OnMove(InputValue value) + { + if (playerIsAlive) + { _hInput = value.Get().x; - if (_hInput < 0) { - if (forward != -1) { + if (_hInput < 0) + { + if (forward != -1) + { // if character hasnt already flipped FlipRenderer(); } forward = -1; } - else if (_hInput > 0) { + else if (_hInput > 0) + { if (forward != 1) { // if character hasnt already flipped FlipRenderer(); @@ -188,53 +223,68 @@ public class PlayerBehavior : MonoBehaviour } - void FlipRenderer() { + void FlipRenderer() + { GetComponent().flipX = !GetComponent().flipX; } - void ThrowTambourine() { - if (unlockedTambourine && hasTambourine && !grapplingRope.isGrappling) { + void ThrowTambourine() + { + if (unlockedTambourine && hasTambourine && !grapplingRope.isGrappling) + { launcher.ThrowTambourine(forward); SetHasTambourine(false); } } - public void SetHasTambourine(bool state) { + public void SetHasTambourine(bool state) + { hasTambourine = state; gameUI.ToggleTambourine(state); } - void AttemptGrapple() { - if (tambourine != null) { // grapple to tambourine - if (!grapplingRope.isGrappling && tambourine.GetComponent().pinned) { + void AttemptGrapple() + { + if (tambourine != null) + { // grapple to tambourine + if (!grapplingRope.isGrappling && tambourine.GetComponent().pinned) + { grapplingGun.GrappleToTambourine(tambourine); grapplingRope.isGrappling = true; } } - else { - if (grappleSurface != null) { + else + { + if (grappleSurface != null) + { grapplingGun.GrappleToSurface(grappleSurface.transform.position); grapplingRope.isGrappling = true; } } } - void LetGoOfGrapple() { + void LetGoOfGrapple() + { bool currentlyPaused = StateController.Instance.isPaused; - if (grapplingRope.isGrappling && !currentlyPaused) { - if (tambourine != null) { + if (grapplingRope.isGrappling && !currentlyPaused) + { + if (tambourine != null) + { tambourine.GetComponent().DestroySelf(); } grapplingGun.ReleaseGrapple(); } } - void Bounce() { + void Bounce() + { Vector2 reflect; - if (Mathf.Abs(saveVelocity.y) < 1f && hasBounced) { + if (Mathf.Abs(saveVelocity.y) < 1f && hasBounced) + { reflect = Vector2.zero; } - else { + else + { reflect = new Vector2(saveVelocity.x * reflectForce, -(saveVelocity.y) * reflectForce); hasBounced = true; } @@ -243,44 +293,73 @@ public class PlayerBehavior : MonoBehaviour isDash = false; } - void Water() { - if(isDash) { + void Water() + { + if (isDash) + { saveVelocity = _rb.velocity / velocityCut; - if (isDash) { + if (isDash) + { dashVec = new Vector2(1f * forward, -1f) * (dashForce / velocityCut); _rb.AddForce(dashVec, ForceMode2D.Force); } } - else { + else + { playerController.FloatGravity(waterGravity); } } - void OnTriggerEnter2D(Collider2D col) { - if (col.tag == "grappleSurface") { + bool HasProjectileInRange() + { + GameObject[] objs = GameObject.FindGameObjectsWithTag("Projectile"); + foreach (GameObject proj in objs) + { + float distance = Vector2.Distance(proj.transform.position, this.transform.position); + Debug.Log($"Distance: {distance}"); + if (distance <= this.cymbalHitboxRange) + { + Debug.Log("Yes"); + return true; + } + } + Debug.Log("No"); + return false; + } + + void OnTriggerEnter2D(Collider2D col) + { + if (col.tag == "grappleSurface") + { grappleSurface = col.gameObject; } - else if (col.tag == "instaDeath") { + else if (col.tag == "instaDeath") + { StartCoroutine(DestroyPlayer()); } - else if (col.tag == "spawnPoint") { + else if (col.tag == "spawnPoint") + { StateController.Instance.spawnPoint.GetComponent().DeactivateSpawnPoint(); col.GetComponent().ActivateSpawnPoint(); } - else if (col.tag == "Trumpet") { + else if (col.tag == "Trumpet") + { this.playerController.in_range = true; this.playerController.enemy = col.transform.parent.gameObject; } - else if (col.tag == "water") { + else if (col.tag == "water") + { isInWater = true; Water(); } - else if (col.tag == "bouncePad") { + else if (col.tag == "bouncePad") + { // Assign the player's velocity to zero so that the player can // bounce on the same jump pad this.playerController.RB.velocity = Vector2.zero; Bouncepad pad = col.GetComponent(); - switch (pad.Direction()) { + switch (pad.Direction()) + { case Bouncepad.Facing.Left: this.playerController.RB.AddForce( new Vector2(-pad.bounceForce, pad.verticalModifier * pad.bounceForce), @@ -297,15 +376,19 @@ public class PlayerBehavior : MonoBehaviour } } - void OnTriggerExit2D(Collider2D col) { - if (col.tag == "grappleSurface") { + void OnTriggerExit2D(Collider2D col) + { + if (col.tag == "grappleSurface") + { grappleSurface = null; } - else if (col.tag == "Trumpet") { + else if (col.tag == "Trumpet") + { this.playerController.in_range = false; this.playerController.enemy = null; } - else if (col.tag == "water") { + else if (col.tag == "water") + { isInWater = false; isDash = false; hasBounced = false; @@ -315,45 +398,45 @@ public class PlayerBehavior : MonoBehaviour } } - void OnCollisionEnter2D(Collision2D collision) { - if (collision.gameObject.tag == "Enemy" || collision.gameObject.tag == "ProjectileEnemy") { - if (collision.transform.position.y < transform.position.y) { + void OnCollisionEnter2D(Collision2D collision) + { + if (collision.gameObject.tag == "Enemy" || collision.gameObject.tag == "ProjectileEnemy") + { + if (collision.transform.position.y < transform.position.y) + { _rb.AddForce(Vector2.up * 8, ForceMode2D.Impulse); collision.gameObject.GetComponent().DefeatEnemy(); } - else { + else + { StartCoroutine(DestroyPlayer()); } } - else if (collision.gameObject.tag == "Projectile") { - Destroy(collision.gameObject); - if (this.cymbalActiveTime > 0) { - Vector2 projVel = collision.gameObject.GetComponent().velocity; - collision.gameObject.GetComponent().velocity = - new Vector2( - -projVel.x, - -projVel.y - ); - } - else { - StartCoroutine(DestroyPlayer()); - } + else if (collision.gameObject.tag == "Projectile") + { + StartCoroutine(DestroyPlayer()); } //stupid stuff for claude's house - else if (collision.gameObject.tag == "SirJacques") { + else if (collision.gameObject.tag == "SirJacques") + { Destroy(collision.gameObject); } - else if (collision.gameObject.tag == "Door") { + else if (collision.gameObject.tag == "Door") + { StateController.Instance.RespawnPlayer(); } - else if (collision.gameObject.tag == "bouncy") { + else if (collision.gameObject.tag == "bouncy") + { Bounce(); } } - IEnumerator DestroyPlayer() { - if (playerIsAlive) { - if (grapplingRope.isGrappling) { + IEnumerator DestroyPlayer() + { + if (playerIsAlive) + { + if (grapplingRope.isGrappling) + { LetGoOfGrapple(); } playerIsAlive = false; @@ -368,9 +451,12 @@ public class PlayerBehavior : MonoBehaviour // destroy all tambourines GameObject[] currentTambourines = GameObject.FindGameObjectsWithTag("tambourine"); - if (currentTambourines != null) { - foreach (GameObject tambourine in currentTambourines) { - if (tambourine != null) { + if (currentTambourines != null) + { + foreach (GameObject tambourine in currentTambourines) + { + if (tambourine != null) + { tambourine.GetComponent().DestroySelf(); } } diff --git a/Assets/Scripts/ProjectileBehavior.cs b/Assets/Scripts/ProjectileBehavior.cs index a055cd4..a47c0f2 100644 --- a/Assets/Scripts/ProjectileBehavior.cs +++ b/Assets/Scripts/ProjectileBehavior.cs @@ -2,21 +2,26 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; -public class ProjectileBehavior : MonoBehaviour { +public class ProjectileBehavior : MonoBehaviour +{ public bool pinned = false; - public void Explode() { + public void Explode() + { Destroy(this.gameObject); } - public void Pin() { + public void Pin() + { this.gameObject.GetComponent().constraints = RigidbodyConstraints2D.FreezeAll; this.gameObject.GetComponent().enabled = false; } - public void OnCollisionEnter2D(Collision2D col) { - if (col.gameObject.tag == "wall") { + public void OnCollisionEnter2D(Collision2D col) + { + if (col.gameObject.tag == "wall") + { Explode(); } } diff --git a/Assets/Scripts/ProjectileEnemy.cs b/Assets/Scripts/ProjectileEnemy.cs index 5206ebb..6dd5cfd 100644 --- a/Assets/Scripts/ProjectileEnemy.cs +++ b/Assets/Scripts/ProjectileEnemy.cs @@ -2,23 +2,26 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; -public class ProjectileEnemy : MonoBehaviour { +public class ProjectileEnemy : MonoBehaviour +{ [SerializeField] GameObject projectile; [SerializeField] GameObject firePoint; - [SerializeField] [Range(0.1f, 3f)] float fireSpeed; + [SerializeField][Range(0.1f, 3f)] float fireSpeed; [SerializeField] float projectileSpeed; // Start is called before the first frame update - void Start() { + void Start() + { StartCoroutine(Fire()); } - IEnumerator Fire() { - yield return new WaitForSeconds(1/fireSpeed); + IEnumerator Fire() + { + yield return new WaitForSeconds(1 / fireSpeed); GameObject newProjectile = Instantiate(projectile, firePoint.transform.position, firePoint.transform.rotation); newProjectile.GetComponent().AddRelativeForce(new Vector2(projectileSpeed, 0)); - newProjectile.transform.Rotate(new Vector3(0,0,-90)); + newProjectile.transform.Rotate(new Vector3(0, 0, -90)); StartCoroutine(Fire()); } } diff --git a/Assets/Scripts/StateController.cs b/Assets/Scripts/StateController.cs index 50c5648..e94782c 100644 --- a/Assets/Scripts/StateController.cs +++ b/Assets/Scripts/StateController.cs @@ -41,12 +41,16 @@ public class StateController : MonoBehaviour [Header("Unlocked Items")] public UnlockedItems itemProgression = UnlockedItems.None; + public bool projectileInRange = false; + void Awake() { if (Instance == null) { Instance = this; - } else { + } + else + { Destroy(this.gameObject); return; } @@ -54,7 +58,8 @@ public class StateController : MonoBehaviour SceneManager.sceneLoaded += OnSceneLoaded; } - void Start() { + void Start() + { if (this.inDebugMode) { debugCanvas = GameObject.Find("DebugCanvas"); @@ -180,7 +185,8 @@ public class StateController : MonoBehaviour void TogglePauseMenu(bool showPauseMenu) { - if (pauseMenuCanvas != null) { + if (pauseMenuCanvas != null) + { pauseMenuCanvas.SetActive(showPauseMenu); } } @@ -198,7 +204,8 @@ public class StateController : MonoBehaviour { foreach (GameObject enemy in enemiesInScene) { - if (enemy.GetComponent().isPlayingDefeatAnimation) { + if (enemy.GetComponent().isPlayingDefeatAnimation) + { enemy.SetActive(false); } enemy.SetActive(true);