//set the attack target locally public virtual void SetTargetLocal(FactionEntity newTarget, Vector3 newTargetPosition) { lastTargetPosition = newTargetPosition; //mark the last position of the target lineOfSight.IsActive = false; //initially mark the attacker as not inside the LOS of the target if (newTarget != null) //if there's an attack target { if (newTarget != Target) //if this is a different target than the last one assigned { Target = newTarget; //set new target damage.UpdateCurrentDamage(Target); //update the current damage value to apply to the target in an attack } } else if (!requireTarget) //no target assigned but this is allowed for this attacker { terrainAttackActive = true; //incoming terrain attack } if (direct == false) //if the attack type is in-direct (attack is done by launching attack objects) { attackObjectLauncher.Activate(); } wasInTargetRange = false; //new target, check to reload damage dealt: if (reloadDealtDamage == true) { dealtDamage = 0; } //events: targetLockedEvent.Invoke(); CustomEvents.OnAttackTargetLocked(this, Target, GetTargetPosition()); ResetDelay(); //reload the attack delay }