ofb/Assets/Scripts/TambourineBehavior.cs

115 lines
4.3 KiB
C#
Raw Permalink Normal View History

2023-04-11 19:55:24 -07:00
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TambourineBehavior : MonoBehaviour {
private Rigidbody2D rb;
// private float timer;
private Animator animator;
private GameObject collidedObject;
private float timeLerped = 0.0f;
private float timeToLerp = 0.2f;
2023-04-11 19:55:24 -07:00
private GameObject player;
public bool pinned = false;
public AudioSource tambourineHitSound;
2023-04-11 19:55:24 -07:00
private bool returnToPlayer = false;
2023-04-11 19:55:24 -07:00
void Awake() {
this.gameObject.GetComponent<CircleCollider2D>().enabled = true;
2023-04-11 19:55:24 -07:00
rb = this.gameObject.GetComponent<Rigidbody2D>();
animator = this.gameObject.transform.GetChild(0).gameObject.GetComponent<Animator>();
2023-04-11 19:55:24 -07:00
player = GameObject.FindGameObjectWithTag("Player");
}
void Start() {
this.gameObject.transform.localScale = new Vector2(transform.localScale.x * player.GetComponent<PlayerBehavior>().forward, transform.localScale.y);
2023-04-11 19:55:24 -07:00
StartCoroutine(CheckToDestroy());
}
void Update() {
if (player == null) {
DestroySelf();
} else {
if (collidedObject != null && collidedObject.tag != "grappleSurface" && !returnToPlayer) {
rb.constraints = RigidbodyConstraints2D.FreezeAll;
timeLerped += Time.deltaTime;
this.gameObject.transform.position = Vector2.Lerp(this.gameObject.transform.position, collidedObject.transform.position, timeLerped/timeToLerp);
if (this.gameObject.transform.position.x == collidedObject.transform.position.x && this.gameObject.transform.position.y == collidedObject.transform.position.y && !animator.GetBool("pinned")) {
pinned = true;
animator.SetBool("pinned", true);
tambourineHitSound.Play();
}
} else if (returnToPlayer) {
Destroy(rb);
Destroy(this.gameObject.GetComponent<CircleCollider2D>());
animator.SetBool("pinned", false);
pinned = false;
timeLerped += Time.deltaTime;
this.gameObject.transform.position = Vector2.Lerp(this.gameObject.transform.position, player.transform.position, timeLerped/0.1f);
if (this.gameObject.transform.position.x == player.transform.position.x && this.gameObject.transform.position.y == player.transform.position.y) {
player.GetComponent<PlayerBehavior>().SetHasTambourine(true);
Destroy(this.gameObject);
}
}
2023-04-11 19:55:24 -07:00
}
}
void OnTriggerEnter2D(Collider2D col) {
if (col.tag == "Enemy") {
this.gameObject.GetComponent<BoxCollider2D>().enabled = false;
collidedObject = col.gameObject;
this.gameObject.GetComponent<CircleCollider2D>().enabled = false;
2023-05-06 18:12:32 -07:00
collidedObject.GetComponent<EnemyPatrol>().TogglePin(true, this);
} else if (col.tag == "Projectile") {
this.gameObject.GetComponent<BoxCollider2D>().enabled = false;
collidedObject = col.gameObject;
this.gameObject.GetComponent<CircleCollider2D>().enabled = false;
2023-04-11 19:55:24 -07:00
collidedObject.GetComponent<ProjectileBehavior>().Pin();
}
2023-04-11 19:55:24 -07:00
}
void OnCollisionEnter2D(Collision2D col) {
if (col.gameObject.tag == "wall") {
DestroySelf();
}
}
IEnumerator CheckToDestroy() {
yield return new WaitForSeconds(3f);
2023-04-11 19:55:24 -07:00
if (!player.GetComponent<PlayerBehavior>().grapplingRope.isGrappling) {
DestroySelf();
}
}
public void DestroySelf() {
if (player != null) {
timeLerped = 0.0f;
returnToPlayer = true;
}
2023-04-11 19:55:24 -07:00
if (collidedObject != null && collidedObject.tag == "Enemy") {
2023-05-06 18:12:32 -07:00
EnemyPatrol enemy = collidedObject.GetComponent<EnemyPatrol>();
if (!enemy.isPlayingDefeatAnimation) {
enemy.TogglePin(false, this);
}
2023-04-11 19:55:24 -07:00
} else if (collidedObject != null && collidedObject.tag == "Projectile") {
collidedObject.GetComponent<ProjectileBehavior>().Explode();
}
if (player == null) {
Destroy(this.gameObject);
} else {
player.GetComponent<PlayerBehavior>().grapplingGun.ReleaseGrapple();
}
2023-04-11 19:55:24 -07:00
}
}