PLEASE launch game from the main menu scene, otherwise persistent data will not load correctly
96 lines
3.5 KiB
C#
96 lines
3.5 KiB
C#
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.5f;
|
|
|
|
private GameObject player;
|
|
|
|
public bool pinned = false;
|
|
public AudioSource tambourineHitSound;
|
|
|
|
|
|
void Awake() {
|
|
this.gameObject.GetComponent<CircleCollider2D>().enabled = true;
|
|
rb = this.gameObject.GetComponent<Rigidbody2D>();
|
|
animator = this.gameObject.GetComponent<Animator>();
|
|
player = GameObject.FindGameObjectWithTag("Player");
|
|
}
|
|
|
|
|
|
void Start() {
|
|
// rb.AddForce(new Vector2(horizSpeed, vertSpeed), ForceMode2D.Impulse);
|
|
StartCoroutine(CheckToDestroy());
|
|
}
|
|
|
|
void Update() {
|
|
// if (Input.GetKeyUp(KeyCode.K)) {
|
|
// Destroy(this.gameObject);
|
|
// }
|
|
if (collidedObject != null && collidedObject.tag != "grappleSurface") {
|
|
rb.constraints = RigidbodyConstraints2D.FreezeAll;
|
|
// this.gameObject.transform.position = col.transform.position;
|
|
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 && !pinned) {
|
|
animator.SetBool("pinned", true);
|
|
pinned = true;
|
|
tambourineHitSound.Play();
|
|
} else {
|
|
// print("pinned, but not same position: " + this.gameObject.transform.position + " / " + collidedObject.transform.position);
|
|
}
|
|
}
|
|
}
|
|
|
|
void OnTriggerEnter2D(Collider2D col) {
|
|
print(col.tag);
|
|
if (col.tag == "Enemy") {
|
|
collidedObject = col.gameObject;
|
|
print("Pinning to enemy");
|
|
this.gameObject.GetComponent<CircleCollider2D>().enabled = false;
|
|
collidedObject.GetComponent<EnemyPatrol>().pinned = true;
|
|
collidedObject.GetComponent<EnemyPatrol>().TogglePin(true);
|
|
} else if (col.tag == "Projectile") {
|
|
collidedObject = col.gameObject;
|
|
print("pinned to projectile");
|
|
this.gameObject.GetComponent<CircleCollider2D>().enabled = false;
|
|
collidedObject.GetComponent<ProjectileBehavior>().Pin();
|
|
}
|
|
}
|
|
|
|
void OnCollisionEnter2D(Collision2D col) {
|
|
if (col.gameObject.tag == "wall") {
|
|
DestroySelf();
|
|
}
|
|
}
|
|
|
|
IEnumerator CheckToDestroy() {
|
|
yield return new WaitForSeconds(5f);
|
|
print("waited 5");
|
|
if (!player.GetComponent<PlayerBehavior>().grapplingRope.isGrappling) {
|
|
DestroySelf();
|
|
}
|
|
}
|
|
|
|
public void DestroySelf() {
|
|
if (collidedObject != null && collidedObject.tag == "Enemy") {
|
|
collidedObject.GetComponent<EnemyPatrol>().pinned = false;
|
|
collidedObject.GetComponent<EnemyPatrol>().TogglePin(false);
|
|
} else if (collidedObject != null && collidedObject.tag == "Projectile") {
|
|
collidedObject.GetComponent<ProjectileBehavior>().Explode();
|
|
}
|
|
player.GetComponent<PlayerBehavior>().hasTambourine = true;
|
|
player.GetComponent<PlayerBehavior>().grapplingGun.ReleaseGrapple();
|
|
Destroy(this.gameObject);
|
|
}
|
|
}
|