Shake obj before vanish

This commit is contained in:
Soulaha Balde 2022-10-23 18:36:32 -04:00
parent b95d04923c
commit 5b1d030d3d
2 changed files with 34 additions and 2 deletions

View File

@ -42,6 +42,8 @@ public class GrappleHook : MonoBehaviour
private bool grappled = false, grappling = false, boosted = false, changingLength = false, isStunned = false; private bool grappled = false, grappling = false, boosted = false, changingLength = false, isStunned = false;
float changingLengthDir = 0; float changingLengthDir = 0;
private Vector3 currGrappleEndPos; private Vector3 currGrappleEndPos;
private GameObject hookedTo; // The obj we are hooked to
public GameObject HookedTo{get => hookedTo; set => hookedTo = value;}
#region private methods #region private methods
void Start() void Start()
@ -136,6 +138,7 @@ public class GrappleHook : MonoBehaviour
if(hit.transform.tag.Equals("Vanishing")){ if(hit.transform.tag.Equals("Vanishing")){
hit.transform.gameObject.GetComponent<Vanisher>().Begin(this); hit.transform.gameObject.GetComponent<Vanisher>().Begin(this);
} }
hookedTo = hit.transform.gameObject;
currGrappleEndPos = transform.position; currGrappleEndPos = transform.position;
} }
@ -145,6 +148,7 @@ public class GrappleHook : MonoBehaviour
lr.enabled = false; lr.enabled = false;
boosted = false; boosted = false;
Destroy(joint); Destroy(joint);
hookedTo = this.gameObject;
} }
private Vector2 WorldToUI(Vector3 point){ private Vector2 WorldToUI(Vector3 point){

View File

@ -8,21 +8,41 @@ public class Vanisher : MonoBehaviour
private float timeToVanish; private float timeToVanish;
[SerializeField] [SerializeField]
private float timeToAppear; private float timeToAppear;
private float timer = 0;
private GrappleHook grapple; private GrappleHook grapple;
private bool isVanishing = false; private bool isVanishing = false;
private Vector3 originalPos;
//TODO represent obj is breaking //TODO represent obj is breaking
private void Start() {
originalPos = transform.localPosition;
}
private void Update() {
timer += Time.deltaTime;
if(isVanishing){//Shake
float speed = timer / timeToVanish;
float x = Random.Range(-.5f, .5f) * speed * .01f;
float y = Random.Range(-.5f, .5f) * speed * .01f;
transform.localPosition += new Vector3(x, y, originalPos.z);
}
}
public void Begin(GrappleHook grapple){ public void Begin(GrappleHook grapple){
if(isVanishing)return;
this.grapple = grapple; this.grapple = grapple;
if(isVanishing)return;
Invoke("Vanish", timeToVanish); Invoke("Vanish", timeToVanish);
isVanishing = true; isVanishing = true;
originalPos = transform.localPosition;
timer = 0;
} }
private void Vanish(){ private void Vanish(){
grapple.Unhook(); grapple?.Unhook();
gameObject.SetActive(false); gameObject.SetActive(false);
Invoke("Appear", timeToAppear); Invoke("Appear", timeToAppear);
isVanishing = false; isVanishing = false;
timer = 0;
transform.localPosition = originalPos;
} }
private void Appear(){ private void Appear(){
@ -34,4 +54,12 @@ public class Vanisher : MonoBehaviour
Begin(other.gameObject.GetComponent<GrappleHook>()); Begin(other.gameObject.GetComponent<GrappleHook>());
} }
} }
private void OnCollisionExit(Collision other) {
if(other.gameObject.tag.Equals("Player")){
if(!grapple.HookedTo.Equals(this.gameObject)){
grapple = null;
}
}
}
} }