コード例 #1
0
 public override TaskResult run(BehaviourTreeController.TreeStatus controller)
 {
     if (hasReadyResult(controller))
     {
         return(lastResult);
     }
     foreach (BehaviourTreeTaskRuntime t in children)
     {
         TaskResult result = t.run(controller);
         if (result == TaskResult.SUCCESS)
         {
             return(lastResult = TaskResult.FAIL);
         }
         else if (result == TaskResult.FAIL)
         {
             return(lastResult = TaskResult.SUCCESS);
         }
         else
         {
             return(lastResult = TaskResult.RUNNING);
         }
     }
     lastResult = TaskResult.FAIL;
     return(TaskResult.FAIL);
 }
コード例 #2
0
        public override TaskResult run(BehaviourTreeController.TreeStatus controller)
        {
            if (hasReadyResult(controller))
            {
                return(lastResult);
            }
            bool hasSuccess = false;
            bool hasRunning = false;

            foreach (BehaviourTreeTaskRuntime t in children)
            {
                TaskResult result = t.run(controller);
                if (result == TaskResult.SUCCESS)
                {
                    hasSuccess = true;
                }
                else if (result == TaskResult.RUNNING)
                {
                    hasRunning = true;
                }
            }
            if (hasRunning)
            {
                lastResult = TaskResult.RUNNING;
            }
            else if (hasSuccess)
            {
                lastResult = TaskResult.SUCCESS;
            }
            else
            {
                lastResult = TaskResult.FAIL;
            }
            return(lastResult);
        }
コード例 #3
0
        public override TaskResult run(BehaviourTreeController.TreeStatus controller)
        {
            if (hasReadyResult(controller))
            {
                return(lastResult);
            }

            if (target.value == null)
            {
                return(lastResult = TaskResult.FAIL);
            }

            //attack event
            Base.Events.GameEventID eventID = eventType.value as Base.Events.GameEventID;
            if (eventID == null)
            {
                return(lastResult = TaskResult.FAIL);
            }

            //call event
            Base.Events.AttackTargetEvent attackEvent = new Events.AttackTargetEvent(eventID);
            attackEvent.DispatchGlobally = false;
            attackEvent.attackTarget     = target.value;
            attackEvent.Sender           = controller.agent.transform.GetInstanceID();
            GlobalDataContainer.It.eventsManager.dispatchEvent(attackEvent);

            //cache result
            return(lastResult = TaskResult.SUCCESS);
        }
コード例 #4
0
        public override TaskResult run(BehaviourTreeController.TreeStatus controller)
        {
            if (hasReadyResult(controller))
            {
                return(lastResult);
            }

            if (target.value == null)
            {
                return(lastResult = TaskResult.FAIL);
            }

            Vector3 dir = new Vector3(useXAxis?target.value.position.x - controller.agent.AgentKinematics.position.x:0,
                                      useYAxis ? target.value.position.y - controller.agent.AgentKinematics.position.y : 0,
                                      useZAxis ? target.value.position.z - controller.agent.AgentKinematics.position.z : 0);

            if (dir.magnitude <= distance.value)
            {
                if (resetAgentVelocity)
                {
                    controller.agent.AgentKinematics.velocity = Vector3.zero;
                }
                return(lastResult = TaskResult.SUCCESS);
            }

            //cache result
            return(lastResult = TaskResult.FAIL);
        }
コード例 #5
0
        public override TaskResult run(BehaviourTreeController.TreeStatus controller)
        {
            if (hasReadyResult(controller))
            {
                return(lastResult);
            }
            if (target.value != null && yourself == false)
            {
                Base.Game.IIsAlive control = target.value.GetComponent <Base.Game.IIsAlive>();
                if (control.isAlive())
                {
                    return(lastResult = TaskResult.SUCCESS);
                }
                return(lastResult = TaskResult.FAIL);
            }
            else if (yourself)
            {
                Base.Game.IIsAlive control = controller.agent.GetComponent <Base.Game.IIsAlive>();
                if (control.isAlive())
                {
                    return(lastResult = TaskResult.SUCCESS);
                }
                return(lastResult = TaskResult.FAIL);
            }

            //cache result
            return(lastResult = TaskResult.FAIL);
        }
コード例 #6
0
 public override TaskResult run(BehaviourTreeController.TreeStatus controller)
 {
     if (hasReadyResult(controller))
     {
         return(lastResult);
     }
     Debug.Log(messageToLog + " and from log text: " + logText.value);
     //cache result
     lastResult = TaskResult.SUCCESS;
     return(TaskResult.SUCCESS);
 }
コード例 #7
0
        public override TaskResult run(BehaviourTreeController.TreeStatus controller)
        {
            if (hasReadyResult(controller))
            {
                return(lastResult);
            }

            //we need to look at our target, force it on instant
            controller.agent.AgentKinematics.velocity = targetVelocity.value;
            //cache result
            return(lastResult = TaskResult.SUCCESS);
        }
コード例 #8
0
        public override TaskResult run(BehaviourTreeController.TreeStatus controller)
        {
            if (hasReadyResult(controller))
            {
                return(lastResult);
            }

            if (flag.value)
            {
                if (resetFlag)
                {
                    flag.value = false;
                }
                return(lastResult = TaskResult.SUCCESS);
            }

            //cache result
            return(lastResult = TaskResult.FAIL);
        }
コード例 #9
0
        public override TaskResult run(BehaviourTreeController.TreeStatus controller)
        {
            if (hasReadyResult(controller))
            {
                return(lastResult);
            }
            if (target.value != null)
            {
                return(lastResult = TaskResult.SUCCESS);
            }

            GameObject found = null;

            //find target
            if (useTag)
            {
                found = GameObject.FindGameObjectWithTag(targetTag);
                if (found != null)
                {
                    if (useName && !found.name.Equals(targetName))
                    {
                        return(lastResult = TaskResult.FAIL);
                    }
                    target.value = found.transform;
                    return(lastResult = TaskResult.SUCCESS);
                }
            }

            if (useName)
            {
                found = GameObject.Find(targetName);
                if (found != null)
                {
                    target.value = found.transform;
                    return(lastResult = TaskResult.SUCCESS);
                }
                return(lastResult = TaskResult.FAIL);
            }
            //cache result
            return(lastResult = TaskResult.FAIL);
        }
コード例 #10
0
        public override TaskResult run(BehaviourTreeController.TreeStatus controller)
        {
            if (hasReadyResult(controller))
            {
                return(lastResult);
            }

            if (target.value == null)
            {
                return(lastResult = TaskResult.FAIL);
            }

            Transform targetPos = target.value;
            float     speed     = moveSpeed.value;

            //target direction
            Vector3 dir = new Vector3(targetPos.position.x - controller.agent.AgentKinematics.position.x, 0, targetPos.position.z - controller.agent.AgentKinematics.position.z);

            //check if are within a radius
            if (dir.magnitude <= targetRadius)
            {
                //already on place
                controller.agent.AgentKinematics.velocity = Vector3.zero;
                controller.agent.AgentKinematics.rotation = 0;
                return(lastResult = TaskResult.SUCCESS);
            }

            //still need to move
            Vector3 velocity = dir.normalized * speed;

            Debug.DrawLine(controller.agent.AgentKinematics.position,
                           controller.agent.AgentKinematics.position + velocity, Color.red, 0.1f);
            //we need to look at our target, force it on instant
            controller.agent.AgentKinematics.velocity    = velocity;
            controller.agent.AgentKinematics.orientation = Base.AI.Agents.KinematicData.DirectionToOrientation(dir.normalized);
            controller.agent.AgentKinematics.rotation    = 0;
            //cache result
            return(lastResult = TaskResult.RUNNING);
        }
コード例 #11
0
        public override TaskResult run(BehaviourTreeController.TreeStatus controller)
        {
            if (hasReadyResult(controller))
            {
                return(lastResult);
            }

            if (target.value == null)
            {
                return(lastResult = TaskResult.FAIL);
            }

            //attack event
            Base.Events.GameEventID eventID = eventType.value as Base.Events.GameEventID;
            if (eventID == null)
            {
                return(lastResult = TaskResult.FAIL);
            }

            //call event
            Base.Events.DealDamageEvent dealEvent = new Events.DealDamageEvent(eventID);
            if (dealToYourself)
            {
                dealEvent.damageTarget = controller.agent.transform;
            }
            else
            {
                dealEvent.damageTarget = target.value;
            }
            Base.Game.DamageSourceInfo damagesource = new Game.DamageSourceInfo();
            damagesource.damageSources.Add(new Base.Game.DamageSourceInfo.SourceValue(Base.Game.DamageSourceInfo.DamageSource.DEFAULT, 100));

            dealEvent.damageValue = damagesource;
            GlobalDataContainer.It.eventsManager.dispatchEvent(dealEvent);

            //cache result
            return(lastResult = TaskResult.SUCCESS);
        }
コード例 #12
0
ファイル: TimerTask.cs プロジェクト: Qilli/GameHelpingSystems
        public override TaskResult run(BehaviourTreeController.TreeStatus controller)
        {
            if (hasReadyResult(controller))
            {
                return(lastResult);
            }

            if (counter > 0 && !repeatTimer)
            {
                return(lastResult = TaskResult.FAIL);
            }

            timer += Time.deltaTime;
            if (timer > targetTimer.value)
            {
                timer = 0;
                counter++;
                return(lastResult = TaskResult.SUCCESS);
            }

            //cache result
            return(lastResult = TaskResult.FAIL);
        }
コード例 #13
0
 public override TaskResult run(BehaviourTreeController.TreeStatus controller)
 {
     return(children[0].run(controller));
 }
コード例 #14
0
 protected bool hasReadyResult(BehaviourTreeController.TreeStatus controller)
 {
     return(lastResult != TaskResult.NONE && lastResult != TaskResult.RUNNING && controller.fullTreeTraversalOnRunning == false);
 }
コード例 #15
0
 public virtual TaskResult run(BehaviourTreeController.TreeStatus controller)
 {
     return(TaskResult.SUCCESS);
 }