// Use this for initialization // Update is called once per frame void Update() { switch (currState) { case TurretStates.Inactive: if (Vector3.Distance(PlayerCar.s_instance.transform.position, gameObject.transform.position) < LOS) { currState = TurretStates.LookingAtPlayer; } break; case TurretStates.LookingAtPlayer: if (Vector3.Distance(PlayerCar.s_instance.transform.position, gameObject.transform.position) > LOS) { currState = TurretStates.Inactive; } TurretFaceTarget(new Vector3(PlayerCar.s_instance.transform.position.x, PlayerCar.s_instance.transform.position.y + .5f, PlayerCar.s_instance.transform.position.z)); if (killPlayer) { ShootAtPlayer(); } break; } }
protected override void Start() { base.Start(); currentState = TurretStates.Idle; nextFireTime = Time.time + fireRate; }
public override void Alert(Vector3 alertSource) { if (state == TurretStates.PATROL) { state = TurretStates.ALERTED; nextAttack = Time.time + 1.0f; } }
private void ChangeState(TurretStates NewState) { switch (currentstate) { } switch (NewState) { } currentstate = NewState; }
private void Start() { GridSizeX = 2; GridSizeY = 2; completed = false; Name = "Turret"; ObjRadius = 40; state = TurretStates.Idle; units = GameObject.FindGameObjectWithTag("Units").GetComponent <UnitHandler>(); }
private void Update() { if (state == TurretStates.Passive) { return; } GetTargetInRange(); if (target == null) { state = TurretStates.Idle; } else { ShootTarget(); } }
public override void SetTask(int taskId) { switch (GetEnumFromId <TurretTasks>(taskId)) { case TurretTasks.Defensive: if (state == TurretStates.Passive) { state = TurretStates.Idle; } break; case TurretTasks.Passive: state = TurretStates.Passive; target = null; break; } }
private void SetState(TurretStates newState) { switch (newState) { case TurretStates.Idle: currentState = TurretStates.Idle; InitIdleState(); break; case TurretStates.Engaging: currentState = TurretStates.Engaging; InitEngagingState(); break; case TurretStates.Rotating: currentState = TurretStates.Rotating; InitRotatingState(); break; } }
// Use this for initialization // Update is called once per frame void Update() { switch (currState) { case TurretStates.Inactive: if (Vector3.Distance(PlayerCar.s_instance.transform.position, gameObject.transform.position) < LOS) { currState = TurretStates.LookingAtPlayer; } break; case TurretStates.LookingAtPlayer: if (Vector3.Distance (PlayerCar.s_instance.transform.position, gameObject.transform.position) > LOS) { currState = TurretStates.Inactive; } TurretFaceTarget (new Vector3(PlayerCar.s_instance.transform.position.x,PlayerCar.s_instance.transform.position.y+.5f,PlayerCar.s_instance.transform.position.z)); if (killPlayer) { ShootAtPlayer (); } break; } }
/// <summary> /// Exits the overriden state of the turret and gives back control to the turret's AI /// </summary> public void exitOverride() { if (currentState == TurretStates.Overriden) { currentState = TurretStates.Idle; } }
/// <summary> /// Transitions the turret into idle state and resets it's roation /// </summary> private void transitionIntoIdle() { currentState = TurretStates.Idle; // Reset rotation of the head of the turret Vector3 currentRotation = transform.rotation.eulerAngles; currentRotation.x = 0; currentRotation.z = 0; transform.rotation = Quaternion.Euler(currentRotation); }
/// <summary> /// Overrides the turret to continually fire at a certain position until /// the turret is no longer overriden /// </summary> /// <param name="positionToFireAt">Position to fire at.</param> public void enterOverride(Vector3 positionToFireAt) { currentState = TurretStates.Overriden; overridenPositionToFireAt = positionToFireAt; }
/// <summary> /// Behvaior the turret will execute when it is in its idle state. /// Will look for target /// </summary> private void idleStateUpdate() { //If we can now see our target if (getClosestVisibleTarget() != null) { currentState = TurretStates.AttackingTarget; return; } //Spin around in an attempt to find the target transform.Rotate(new Vector3(0, 45*Time.deltaTime*Time.timeScale,0)); }
private void Update() { if (target == null) { target = GameObject.FindGameObjectWithTag("Player").transform; } if (isDead) { if (!deadParticles.IsAlive()) { Destroy(this.gameObject); } return; } switch (state) { case TurretStates.PATROL: { // Rotate slowly to analize the environment. patrolForward = Quaternion.AngleAxis(patrolSense * speed * 5.0f * Time.deltaTime, transform.up) * patrolForward; // Use this variable to aim where the turret is rotating. shotPrediction = transform.position + (transform.up * 1.25f) + patrolForward; Aim(); // Check if the turret sees the player with frecuency. if (Time.time > timeToCheck) { if (LookForTarget() == true) { state = TurretStates.ALERTED; stateTime = Time.time + 0.5f; } else { // Check if where the turret looks is a very close obstacle, and change the direction. RaycastHit hit; if (Physics.Raycast(attackSource.position, attackSource.forward, out hit, 2.0f)) { patrolSense = patrolSense * -1.0f; } timeToCheck = Time.time + 0.25f; } } break; } case TurretStates.ALERTED: { if (Time.time > timeToCheck) { PredictShot(); } Aim(); Attack(); // Wait a little before check again if the turret sees the target. if (Time.time > stateTime && Time.time > timeToCheck) { if (LookForTarget() == false) { state = TurretStates.DESPERATE; stateTime = Time.time + 5.0f; } else { timeToCheck = Time.time + 0.25f; } } break; } case TurretStates.DESPERATE: { if (Time.time > stateTime) { state = TurretStates.PATROL; } else { // Desperate attack... Attack(); // ... and check again if the turret sees the player. if (Time.time > timeToCheck) { if (LookForTarget() == true) { state = TurretStates.ALERTED; stateTime = Time.time + 0.5f; } else { timeToCheck = Time.time + 0.25f; } } } break; } } }
private void Start() { state = TurretStates.PATROL; patrolForward = transform.forward; }
public override void Alert(Vector3 alertSource) { state = TurretStates.ALERTED; stateTime = Time.time + 0.5f; }
void Update() { if (target == null) { target = GameObject.FindGameObjectWithTag("Player").transform; } if (isDead) { if (!deadParticles.IsAlive()) { Destroy(this.gameObject); } return; } switch (state) { case TurretStates.PATROL: { patrolForward = Quaternion.AngleAxis(patrolSense * speed * 5.0f * Time.deltaTime, transform.up) * patrolForward; shotPrediction = transform.position + transform.up + patrolForward; Aim(); if (Time.time > timeToCheck) { if (LookForTarget() == true) { state = TurretStates.ALERTED; nextAttack = Time.time + 1.0f; timeToCheck = Time.time + 1.0f; } else { RaycastHit hit; if (Physics.Raycast(attackSource.position, attackSource.forward, out hit, 2.0f)) { patrolSense = patrolSense * -1.0f; } timeToCheck = Time.time + 0.25f; } } break; } case TurretStates.ALERTED: { shotPrediction = target.position; Aim(); Attack(); if (Time.time > timeToCheck) { if (LookForTarget() == false) { state = TurretStates.PATROL; timeToCheck = Time.time + 1.0f; } else { timeToCheck = Time.time + 0.25f; } } break; } } }