Пример #1
0
        /// <summary>Execute the graph in the given blackboard.</summary>
        public override AIGraphResult Run(AIBlackboard blackboard)
        {
            // Save blackboard while executing.
            _blackboard = blackboard;
            // Get current state from blackboard.
            object state;

            if (!_blackboard.variables.TryGetValue("CurrentState" + GetInstanceID(), out state))
            {
                return(null);
            }
            // Execute state.
            FSMStateNode currentState = state as FSMStateNode;

            currentState.Run();
            // Get transition if any.
            FSMStateNode newState = currentState.GetTransition();

            if (newState != null)
            {
                currentState.Exit();
                _blackboard.variables["CurrentState" + GetInstanceID()] = newState;
                newState.Enter();
            }

            // Nullify references to the blackboard.
            _blackboard = null;
            return(null);
        }
Пример #2
0
 /// <summary>Init the graph in the given blackboard.</summary>
 public override void Init(AIBlackboard blackboard)
 {
     // Save blackboard while executing.
     _blackboard = blackboard;
     _blackboard.variables["CurrentState" + GetInstanceID()] = _entryState;
     // Trigger enter on root.
     _entryState.Enter();
 }
Пример #3
0
        /// <summary>Execute the behavior tree in the blackboard.</summary>
        public override AIGraphResult Run(AIBlackboard blackboard)
        {
            // Save blackboard while executing.
            _blackboard = blackboard;
            // Execute root.
            BTGraphResult result = root.Run();

            // Nullify references to the blackboard.
            _blackboard = null;
            // Return result.
            return(result);
        }
Пример #4
0
        public override void Enter()
        {
            // Check if machine has been initialized.
            AIBlackboard blackboard  = (graph as FSMGraph).Blackboard;
            object       initialized = null;

            blackboard.variables.TryGetValue("Init" + GetInstanceID(), out initialized);
            // If machine hasn't been initialized it is time to do so.
            if (initialized == null)
            {
                _tree.Init((graph as FSMGraph).Blackboard);
                blackboard.variables["Init" + GetInstanceID()] = true;
            }
        }
Пример #5
0
 /// <summary>Initialize the behavior tree and the blackboard.</summary>
 public override void Init(AIBlackboard blackboard)
 {
     // Save blackboard while executing.
     _blackboard = blackboard;
     // Init all nodes.
     foreach (Node node in nodes)
     {
         BTNode btNode = node as BTNode;
         // If node is of BTNode type prepare it for execution.
         if (btNode != null)
         {
             btNode.Prepare();
         }
     }
 }
    public override bool AttackCondition()
    {
        float distanceToPlayer = AIBlackboard.DistanceToPlayer2D(transform.position);

        if (distanceToPlayer < minDistance)
        {
            if (AIBlackboard.PlayerLookingAtMe(transform.position))
            {
                scanTime        = Time.time;
                closeRangeState = CloseRangeStates.HitScanning;
                return(true);
            }
        }

        return(false);
    }
Пример #7
0
    // Public Methods
    public void Start()
    {
        m_perceptionRangeCollider = GetComponent <SphereCollider>();

        m_blackboard = new AIBlackboard();

        foreach (var behaviour in m_behaviours)
        {
            behaviour.LoadTasks();
            behaviour.m_parentAI = this;
            behaviour.RegisterBlackboardEntries();
            behaviour.Start();
        }

        m_blackboard.Initialised = true;
    }
Пример #8
0
        /// <summary>Execute the subtree node.</summary>
        protected override BTGraphResult InternalRun()
        {
            // Check if machine has been initialized.
            AIBlackboard blackboard  = BT.Blackboard;
            object       initialized = null;

            blackboard.variables.TryGetValue("Init" + GetInstanceID(), out initialized);
            // If machine hasn't been initialized it is time to do so.
            if (initialized == null)
            {
                _tree.Init(blackboard);
                blackboard.variables["Init" + GetInstanceID()] = true;
            }

            // Execute and return isolating running statuses.
            BTGraphResult result = _tree.Run(blackboard) as BTGraphResult;

            return(result.IsRunning ? BTGraphResult.Success : result);
        }
    // Update is called once per frame
    void Update()
    {
        if (inGameOver)
        {
            if (Time.time - gameOverTimer > 1)
            {
                firePlayAgainText.enabled = true;

                if (playerInput.inputActions.Fire.triggered)
                {
                    UnityEngine.SceneManagement.SceneManager.LoadScene(0);
                }
            }

            return;
        }

        if (inGloryMode)
        {
            if (Time.time - gloryKillRelease > 2f)
            {
                inGloryMode          = false;
                killedTarget         = false;
                handImageUI.enabled  = true;
                punchImageUI.enabled = false;
                return;
            }

            if (!killedTarget)
            {
                Vector3 dir = fpsCamera.transform.forward;

                characterController.Move(dir * 15 * Time.deltaTime);
                if (AIBlackboard.SqrtDistanceVector3(transform.position, gloryKillable.transform.position) < 1)
                {
                    EmitExplosion(fpsCamera.transform.position + fpsCamera.transform.forward * 0.5f);
                    gloryKillable.GloryKillIt();
                    killedTarget    = true;
                    gloryDelayTimer = Time.time;
                    gloryKillAudio.PlayOneShot(gloryKillAudio.clip);
                }
            }

            if (gloryKillable.monster.healthyState != Monster.HealthyState.Staggered && !killedTarget)
            {
                inGloryMode          = false;
                killedTarget         = false;
                handImageUI.enabled  = true;
                punchImageUI.enabled = false;
                return;
            }

            if (killedTarget && Time.time - gloryDelayTimer > 0.3f)
            {
                killedTarget         = false;
                inGloryMode          = false;
                handImageUI.enabled  = true;
                punchImageUI.enabled = false;
            }
            else
            {
                return;
            }
        }

        FpsCamera_Rotation();

        FpsMove();
        FpsInteract();

        FpsWeapon();

        BobWeapon();

        ScanGloryKill();

        if (UnityEngine.InputSystem.Keyboard.current.digit9Key.wasPressedThisFrame)
        {
            AIBlackboard.instance.Sensor_PlayerNear2D(AIBlackboard.playerPosition3D);
        }
    }
Пример #10
0
 private void Awake()
 {
     AIBlackboard.instance = this;
     monsters = new List <Monster>();
 }
Пример #11
0
 private void Awake()
 {
     _current = this;
 }
 private void Start()
 {
     player     = AIManager.SquadManager.player;
     blackboard = controller.Blackboard;
 }
Пример #13
0
    public override void RunBehavior()
    {
        switch (simpleState)
        {
        case SimpleStates.Idle:
            break;

        case SimpleStates.BecomingAware:
            if (Time.time - awareDelayTimer > fuzzyDelay)
            {
                simpleState = SimpleStates.AwareOfPlayer;
            }
            break;

        case SimpleStates.AwareOfPlayer:

            Vector3 fVelocity = navMeshAgent.velocity;

            float d_p = AIBlackboard.DistanceToPlayer2D(transform.position);

            if (AIBlackboard.DistanceToPlayer2D(transform.position) > distanceFromPlayer)
            {
                fVelocity = Vector3.MoveTowards(fVelocity, AIBlackboard.DirectionToPlayer2D(transform.position), Time.deltaTime * 100 * aggressiveness);
            }

            if (d_p < tooCloseToPlayer)
            {
                fVelocity += -AIBlackboard.DirectionToPlayer2D(transform.position).normalized *playerSeparation;
            }

            if (monsterAttack != null)
            {
                if (monsterAttack.AttackCondition() && monsterAttack.HasAttackCooled())
                {
                    simpleState = SimpleStates.Attack;
                    monsterAware.PlayOneShot(monsterAware.clip, 0.3f);
                }
                else if (monsterAttack.CooldownLeft() < fear)
                {
                    fVelocity = Vector3.MoveTowards(fVelocity, -AIBlackboard.DirectionToPlayer2D(transform.position), Time.deltaTime * 40 * fear);
                }
            }

            fVelocity.x = Mathf.Clamp(fVelocity.x, -maxSpeed, maxSpeed);
            fVelocity.y = Mathf.Clamp(fVelocity.y, -maxSpeed, maxSpeed);
            fVelocity.z = Mathf.Clamp(fVelocity.z, -maxSpeed, maxSpeed);

            navMeshAgent.velocity = fVelocity;

            break;

        case SimpleStates.Attack:
            if (monsterAttack != null)
            {
                if (monsterAttack.RunAttack())
                {
                    simpleState = SimpleStates.AwareOfPlayer;
                }
            }
            break;
        }
    }