public void ApplyDamage(float damage, GameObject sender = null, bool stagger = false) { baseSettings.health -= damage; EnableHitGUI(true); if (sender != null) { memory.lastDamager = sender; if (GetComponent <BehaviorDesigner.Runtime.BehaviorTree>()) { BehaviorDesigner.Runtime.SharedGameObject lastSender = (BehaviorDesigner.Runtime.SharedGameObject)sender; BehaviorDesigner.Runtime.SharedVector3 lastSenderPosition = (BehaviorDesigner.Runtime.SharedVector3)sender.transform.position; GetComponent <BehaviorDesigner.Runtime.BehaviorTree>().SetVariable("target", lastSender); GetComponent <BehaviorDesigner.Runtime.BehaviorTree>().SetVariable("last_target_position", lastSenderPosition); GetComponent <BehaviorDesigner.Runtime.BehaviorTree>().SendEvent("Damaged"); } // float dir = GetDirection(sender); } StartCoroutine(PlaySound(SoundType.loss)); if (baseSettings.health <= 0) { baseSettings.health = 0; Death(); } baseSettings.OnDamaged.Invoke(); }
public void CallTarget(Vector3 lastPosition) { currentTime = Time.time; if (lastTime != currentTime) { if ((currentTime - lastTime) < attackInfo.notifyCooldown) { currentTime = lastTime; return; } currentTime = lastTime; } BehaviorDesigner.Runtime.SharedVector3 pos = (BehaviorDesigner.Runtime.SharedVector3)lastPosition; Collider[] hits = Physics.OverlapSphere(this.transform.position, attackInfo.notifyDistance, attackInfo.notifyLayers); foreach (Collider hit in hits) { if (hit.transform.root.GetComponent <BehaviorDesigner.Runtime.BehaviorTree>()) { hit.transform.root.GetComponent <BehaviorDesigner.Runtime.BehaviorTree>().SetVariable("last_target_position", pos); hit.transform.root.GetComponent <BehaviorDesigner.Runtime.BehaviorTree>().SendEvent(attackInfo.callEvent); } } }