void OnDestroy() { foreach (WeightPadTrigger pad in weightPads) { if (pad && pad.rigids.ContainsKey(rigid)) { print("Weight pad exit from " + pad.gameObject.name); pad.rigidsOnPad.Remove(rigid); pad.rigids.Remove(rigid); foreach (Rigidbody2D r in stackWith) { if (!r) { continue; } StackWeightManager s = r.GetComponent <StackWeightManager>(); s.stackAmount--; if (s.stackAmount <= 0) { pad.rigidsOnPad.Remove(r); pad.rigids.Remove(r); } } stackWith.Clear(); } } }
IEnumerator DelayRemove(Rigidbody2D rigid) { float timestamp = Time.time; while (Time.time - timestamp <= removeDelayTime && !rigidsOnPad.Contains(rigid)) { yield return(null); } if (rigid && rigids.ContainsKey(rigid) && !rigidsOnPad.Contains(rigid)) { rigids.Remove(rigid); StackWeightManager stackManager = rigid.GetComponent <StackWeightManager>(); if (stackManager) { stackManager.isOnPad = false; foreach (Rigidbody2D r in stackManager.stackWith) { if (!r) { continue; } StackWeightManager s = r.GetComponent <StackWeightManager>(); s.stackAmount--; if (s.stackAmount <= 0) { rigidsOnPad.Remove(r); rigids.Remove(r); } } stackManager.stackWith.Clear(); } } }
// Start is called before the first frame update void Awake() { if (instance == null) { instance = this; } }
void OnCollisionEnter2D(Collision2D col) { Rigidbody2D rigid = col.collider.GetComponent <Rigidbody2D>(); if (rigid) { rigidsOnPad.Add(rigid); StackWeightManager stackManager = rigid.GetComponent <StackWeightManager>(); if (stackManager) { stackManager.isOnPad = true; } } }
void OnCollisionEnter2D(Collision2D col) { Rigidbody2D colRigid = col.collider.GetComponent <Rigidbody2D>(); if (colRigid) { foreach (WeightPadTrigger pad in weightPads) { if (pad.rigids.ContainsKey(colRigid)) { print("Weight pad stay in " + pad.gameObject.name); if (!pad.rigidsOnPad.Contains(rigid)) { StackWeightManager stackedPad = colRigid.GetComponent <StackWeightManager>(); stackedPad.stackWith.Add(rigid); stackAmount++; pad.rigidsOnPad.Add(rigid); pad.rigids[rigid] = Vector3.down; } } } } }