private void DoNpcActions(NPCStateController controller) { foreach (NPCActions_SO nPCAction in nPCActions) { nPCAction.Act(controller); } }
private bool WayPointChange(NPCStateController controller) { //Patrol Action if (controller.NavMeshAgent.remainingDistance <= controller.NavMeshAgent.stoppingDistance && !controller.NavMeshAgent.pathPending) { return(true); } else { return(false); } }
private bool TimeDone(NPCStateController controller) { if (controller.checkCountDownElapsed(controller.enemyStats.idleTime)) { // Debug.Log("Time is up"); return(true); } else { return(false); } }
private bool TargetInRange(NPCStateController controller) { if (controller.ChaseTarget != null) { if (Vector3.Distance(controller.transform.position, controller.ChaseTarget.transform.position) <= 3.5f) { return(true); } else { return(false); } } return(false); }
private void Chase(NPCStateController controller) { if (controller.ChaseTarget != null) { controller.NavMeshAgent.destination = controller.ChaseTarget.position; if (Vector3.Distance(controller.NavMeshAgent.transform.position, controller.ChaseTarget.position) <= 3.5f) { controller.NavMeshAgent.isStopped = true; } else { controller.NavMeshAgent.isStopped = false; } } }
private void Attack(NPCStateController controller) { if (controller.ChaseTarget != null) { controller.NavMeshAgent.destination = controller.ChaseTarget.position; if (Vector3.Distance(controller.NavMeshAgent.transform.position, controller.ChaseTarget.position) <= 3.5f) { if (controller.TimerAttack(controller.enemyStats.attackRate)) { Debug.Log("Attack"); Instantiate(controller.AttackObj, controller.Eyes.transform); } } } }
private void CheckTransistions(NPCStateController controller) { //Checking for every decision from the translation foreach (NPCTransition transistion in transitions) { bool decisionSucceeded = transistion.decision.Decide(controller); if (decisionSucceeded) { controller.TransistionToState(transistion.trueState); } else { controller.TransistionToState(transistion.falseState); } } }
private void Patrol(NPCStateController controller) { //randomMode should be inside controller controller.WayPointIndex = pointIndex; // Debug.unityLogger.Log("Entered Patrol Action"); controller.NavMeshAgent.destination = controller.WayPoints[pointIndex].position; controller.NavMeshAgent.isStopped = false; if (controller.NavMeshAgent.remainingDistance <= controller.NavMeshAgent.stoppingDistance && !controller.NavMeshAgent.pathPending) { if (randomMode) { pointIndex = UnityEngine.Random.Range(0, controller.WayPoints.Count); } pointIndex = (pointIndex + 1) % controller.WayPoints.Count; } }
private bool Look(NPCStateController controller) { //CHANGE THIS BASED ON ENEMYSTATS COLLISIONSPHERE RaycastHit hit; Debug.DrawRay(controller.Eyes.position, controller.Eyes.forward.normalized * controller.enemyStats.lookRange, Color.green); if (Physics.SphereCast(controller.Eyes.position, controller.enemyStats.lookSphereCastRadius, controller.Eyes.forward, out hit, controller.enemyStats.lookRange) && hit.collider.CompareTag("Player")) { controller.ChaseTarget = hit.transform; return(true); } else { return(false); } }
public override bool Decide(NPCStateController controller) { bool chaseTargetIsActive = controller.ChaseTarget.gameObject.activeSelf; return(chaseTargetIsActive); }
public override bool Decide(NPCStateController controller) { bool timerIsDone = TimeDone(controller); return(timerIsDone); }
public override void Act(NPCStateController controller) { Patrol(controller); }
//Edit this later for using a gameobject that has collision sphere public override bool Decide(NPCStateController controller) { bool targetVisible = Look(controller); return(targetVisible); }
private void OnEnable() { controller = GetComponentInParent <NPCStateController>(); }
public override void Act(NPCStateController controller) { Chase(controller); }
public override bool Decide(NPCStateController controller) { bool wayPointChange = WayPointChange(controller); return(wayPointChange); }
public override bool Decide(NPCStateController controller) { bool targetDetected = controller.IsplayerIn; return(targetDetected); }
public void UpdateState(NPCStateController controller) { DoNpcActions(controller); CheckTransistions(controller); }
public abstract bool Decide(NPCStateController controller);
private bool Scan(NPCStateController controller) { controller.NavMeshAgent.isStopped = true; controller.transform.Rotate(0, controller.enemyStats.searchingTurnSpeed * Time.deltaTime, 0); return(controller.checkCountDownElapsed(controller.enemyStats.searchDuration)); }
public override bool Decide(NPCStateController controller) { bool noEnemyInSight = Scan(controller); return(noEnemyInSight); }
public NPCStateTalking(NPCStateController controller) { this.controller = controller; }
public NPCStateIdle(NPCStateController controller) { this.controller = controller; }
public override void Act(NPCStateController controller) { Attack(controller); }
public abstract void Act(NPCStateController controller);
public override bool Decide(NPCStateController controller) { bool targetInRange = TargetInRange(controller); return(targetInRange); }
private void Idle(NPCStateController controller) { Debug.Log("Idle"); controller.NavMeshAgent.isStopped = true; }