public void Update(int targetGuid, int targetHealthPercent) { Update(targetGuid, targetHealthPercent, Targets); if (CombatCreatureGuid.Updated(reader)) { Update(CombatCreatureGuid.Value, 100f, Creatures); } if (CombatDamageTakenGuid.Updated(reader)) { Update(CombatDamageTakenGuid.Value, 100f, DamageTaken); } if (CombatDamageDoneGuid.Updated(reader)) { Update(CombatDamageDoneGuid.Value, 100f, DamageDone); } if (CombatDeadGuid.Updated(reader)) { Update(CombatDeadGuid.Value, 0, Creatures); Update(CombatDeadGuid.Value, 0, Deads); if (DamageTaken.Exists(x => x.Guid == CombatDeadGuid.Value)) { Update(CombatDeadGuid.Value, 0, DamageTaken); } if (DamageDone.Exists(x => x.Guid == CombatDeadGuid.Value)) { Update(CombatDeadGuid.Value, 0, DamageDone); } if (Targets.Exists(x => x.Guid == CombatDeadGuid.Value)) { Update(CombatDeadGuid.Value, 0, Targets); } if (Targets.Exists(x => x.Guid == CombatDeadGuid.Value) && (DamageDone.Exists(x => x.Guid == CombatDeadGuid.Value) || DamageTaken.Exists(x => x.Guid == CombatDeadGuid.Value))) { KillCredit?.Invoke(this, EventArgs.Empty); } } }
protected override void Observe() { List <GameObject> currentTargets = GameManager.singleton.Players.FindAll(player => Vector3.Distance(player.transform.position, transform.position) < ObserveRadius && Utils.IsFreeBetweenPlayer(player, transform.position + Offset)); foreach (GameObject newTarget in currentTargets) { if (Targets.Exists(x => x == newTarget)) { CallEvent(new TargetStay(gameObject, newTarget)); } else { CallEvent(new TargetEnter(gameObject, newTarget)); } } foreach (GameObject oldTarget in Targets) { if (oldTarget != null && !currentTargets.Exists(x => x == oldTarget)) { CallEvent(new TargetOut(gameObject, oldTarget)); } } if (currentTargets.Count == 0) { if (NearestTarget != null) { NearestTarget = null; CallEvent(new AllTargetsEnd(gameObject)); } } else { GameObject target = Utils.FindNearestGameObject(currentTargets, transform.position); if (NearestTarget == null) { CallEvent(new FirstTarget(gameObject, target)); } NearestTarget = target; } }