Esempio n. 1
0
        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;
                    }
                }
            }
        }
Esempio n. 2
0
        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;
                }
            }
        }