public override void Update() { if (GameControl.IsGameOver() || destroyed || IsStunned()) { return; } //get player as target target = GameControl.GetPlayer(); if (target != null && !target.thisObj.activeInHierarchy) { target = null; } //reduce the attack cooldown currentCD -= Time.deltaTime; contactCurrentCD -= Time.deltaTime; //base.Update(); //if shootPeriodically, then shoot if (shootPeriodically) { ShootTarget(); } //if there's not target, reset the turret to origin if (target == null) { ResetTurret(); return; } //calculate the target dist, this is for later use float targetDist = Vector3.Distance(thisT.position, target.thisT.position); //now depend on the unit behaviour, act accordingly if (behaviour == _Behaviour.Aggressive) { EngageHostile(targetDist); //engage the target } else if (behaviour == _Behaviour.Aggressive_Trigger) { //if target is close enough to trigger a respond, set behaviour to aggressive if (Vector3.Distance(thisT.position, target.thisT.position) <= aggroRange) { behaviour = _Behaviour.Aggressive; } } else if (behaviour == _Behaviour.StandGuard) { if (guardTriggered) //if the unit is aggro'ed { EngageHostile(targetDist); //engage the target //this line is irrelevant atm since anchor to point is not in used //if(anchorToPoint) dist=Vector3.Distance(anchorPoint, target.thisT.position); //if target is out of range already, set aggro status to false if (targetDist > aggroRange * 2) { guardTriggered = false; //if(anchorToPoint) GenerateNewAnchor(); } } else { //if(anchorToPoint) MoveToPoint(currentAnchor, 0.5f); //if target is close enough to aggor the unit, set guardTriggered to true so the target can be engaged in next frame if (targetDist <= aggroRange) { guardTriggered = true; } } } }