示例#1
0
        public void Patrol(AIBrain brain)
        {
            if (currentNode == -1)
            {
                currentNode = Random.Range(0, path.points.Length);
                brain.MoveTo(path.points[currentNode]);
                return;
            }

            Vector3 target = path.points[currentNode].position;
            float   dist   = Vector3.Distance(gameObject.transform.position, target);

            if (dist < path.radius)
            {
                if (Random.Range(0, 100) < path.reverseChance)
                {
                    forwards = !forwards;
                }

                if (forwards)
                {
                    currentNode++;
                }
                else
                {
                    currentNode--;
                }
                currentNode = currentNode % path.points.Length;

                brain.MoveTo(path.points[currentNode], true);
            }
        }
示例#2
0
        public override AIAction Execute(AIBrain brain)
        {
            if (npcTarget == null)
            {
                Evaluate(brain);
            }

            brain.target = npcTarget;
            //Debug.Log("Executing Power: " + name + " Ch:" + npcTarget.name);
            Character caster = brain.character;

            caster.target = brain.target;

            if (!WithinRange(caster))
            {
                brain.MoveTo(caster.target.transform);
                brain.countDown    = 0.5f;
                brain.closingRange = range;
                return(null);
            }

            if (CanUse(brain.character))
            {
                UpdateAction(brain);
            }

            return(this);
        }
示例#3
0
        public override AIAction Execute(AIBrain brain)
        {
            string     msg    = "+MV:";
            GameObject target = null;

            switch (follow)
            {
            case FollowTarget.Player:
                target = GetPlayer();
                break;

            case FollowTarget.Target:
                target = brain.character.target.gameObject;
                break;
            }

            if (target)
            {
                Vector3 dir = brain.character.transform.position - target.transform.position;
                dir.y = 0;
                dir.Normalize();
                Vector3 targetPoint = target.transform.position + dir * distance;
                brain.MoveTo(targetPoint);
                msg += "(" + (int)targetPoint.x + "," + (int)targetPoint.z + ")";
            }

            brain.AddDebugMsg(msg);

            return(this);
        }
示例#4
0
        // activate the power using AI
        protected void OnDoPower(AIBrain brain)
        {
            Character caster = brain.character;

            brain.MoveTo(caster.transform);
            OnStart(caster);

            // instant powers release the key immediately. Others, we let energy or duration end it.
            if (IsInstant())
            {
                OnEnd(caster);
            }
        }
示例#5
0
        // AI Utility functions
        protected void OnUpdateRanged(AIBrain brain)
        {
            Character caster = brain.character;
            Character target = brain.target;

            caster.target = target;

            if (target == null)
            {
                return;
            }

            if (!WithinRange(caster))
            {
                brain.MoveTo(target.transform);
                brain.countDown    = 1.0f;
                brain.closingRange = range;
            }
            else
            {
                OnDoPower(brain);
            }
        }