/// <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); }
/// <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(); }
/// <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); }
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; } }
/// <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); }
// 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; }
/// <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); } }
private void Awake() { AIBlackboard.instance = this; monsters = new List <Monster>(); }
private void Awake() { _current = this; }
private void Start() { player = AIManager.SquadManager.player; blackboard = controller.Blackboard; }
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; } }