public override void Start() { base.Start(); if (debugOnly) { if (GetComponent <Fighter>()) { Debug.LogError("Fighter Script found on PlayerAI"); } if (GetComponent <EnemyAI>()) { Debug.LogError("EnemyAI Script found on PlayerAI"); } if (GetComponent <InputHandler>()) { Debug.LogError("InputHandler Script found on PlayerAI"); } } cc = GetComponent <PlayerController2D>(); AIStates = new PlayerAIStates(); }
// Update is called once per frame void Update() { UpdateEdgeDetection(); if (recentlyAttacked && lockMovement != true) { print("recovery time set: " + recoveryTimer); recoveryTime = 0; lockMovement = true; } else if (recentlyAttacked) { print("recovering"); recoveryTime += Time.deltaTime; if (recoveryTime > recoveryTimer) { print("recovered"); lockMovement = recentlyAttacked = false; } } switch (AIStates) { case PlayerAIStates.Idle: // Recieves no inputs // insert timer AIStates = PlayerAIStates.Walking; break; case PlayerAIStates.Walking: Move(); if (wallDetected) { if (cc.m_Grounded) { jump = true; } } break; } if (!lockMovement) { Move(); } }
/// <summary> /// Updates state machine actual state, and starts everything needed. /// </summary> /// <param name="newState">State to change to.</param> public void ChangeState(PlayerAIStates newState) { if (controlledLocally && actualState == newState) { return; } if ((actualState == PlayerAIStates.AttackingPlayer || actualState == PlayerAIStates.AttackingTower || actualState == PlayerAIStates.Fleeing) && newState != PlayerAIStates.Fleeing) { this.GetComponent <Rigidbody>().velocity = Vector3.zero; playerManager.StopShooting(); } actualState = newState; navMeshAgent.stoppingDistance = 0; switch (actualState) { case PlayerAIStates.None: target = null; targetPanel = null; break; case PlayerAIStates.Moving: movementDirectionCounter = maxMovementDirectionTime; playerManager.ChangeState(PlayerStates.Moving); break; case PlayerAIStates.MovingToPanel: navMeshAgent.SetDestination(targetPanel.transform.position); break; case PlayerAIStates.OcuppyingPanel: playerManager.StopMoving(); occupyingPanelCounter = 1; break; case PlayerAIStates.AttackingPlayer: case PlayerAIStates.AttackingTower: navMeshAgent.stoppingDistance = 7; navMeshAgent.SetDestination(enemyTower.transform.position); playerManager.StopMoving(); playerManager.StartShoot(); attackMovementCounter = maxAttackMovementTime; break; } }
/// <summary> /// Updates state machine actual state, and starts everything needed. /// </summary> /// <param name="newState">State to change to.</param> public void ChangeState(PlayerAIStates newState) { if (controlledLocally && actualState == newState) return; if ((actualState == PlayerAIStates.AttackingPlayer || actualState == PlayerAIStates.AttackingTower || actualState == PlayerAIStates.Fleeing) && newState != PlayerAIStates.Fleeing) { this.GetComponent<Rigidbody>().velocity = Vector3.zero; playerManager.StopShooting(); } actualState = newState; navMeshAgent.stoppingDistance = 0; switch (actualState) { case PlayerAIStates.None: target = null; targetPanel = null; break; case PlayerAIStates.Moving: movementDirectionCounter = maxMovementDirectionTime; playerManager.ChangeState(PlayerStates.Moving); break; case PlayerAIStates.MovingToPanel: navMeshAgent.SetDestination(targetPanel.transform.position); break; case PlayerAIStates.OcuppyingPanel: playerManager.StopMoving(); occupyingPanelCounter = 1; break; case PlayerAIStates.AttackingPlayer: case PlayerAIStates.AttackingTower: navMeshAgent.stoppingDistance = 7; navMeshAgent.SetDestination(enemyTower.transform.position); playerManager.StopMoving(); playerManager.StartShoot(); attackMovementCounter = maxAttackMovementTime; break; } }