Example #1
0
    // 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;
    }
Example #3
0
 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;
    }
Example #5
0
    private void Start()
    {
        GridSizeX = 2;
        GridSizeY = 2;

        completed = false;
        Name      = "Turret";
        ObjRadius = 40;

        state = TurretStates.Idle;

        units = GameObject.FindGameObjectWithTag("Units").GetComponent <UnitHandler>();
    }
Example #6
0
    private void Update()
    {
        if (state == TurretStates.Passive)
        {
            return;
        }

        GetTargetInRange();
        if (target == null)
        {
            state = TurretStates.Idle;
        }
        else
        {
            ShootTarget();
        }
    }
Example #7
0
    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;
        }
    }
Example #9
0
    // 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));
        }
Example #14
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;
        }
        }
    }
Example #15
0
 private void Start()
 {
     state         = TurretStates.PATROL;
     patrolForward = transform.forward;
 }
Example #16
0
 public override void Alert(Vector3 alertSource)
 {
     state     = TurretStates.ALERTED;
     stateTime = Time.time + 0.5f;
 }
Example #17
0
    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;
        }
        }
    }