Exemple #1
0
        public override System.Type Tick()
        {
            if (proximity.target != targeting.target &&
                proximity.target != null)
            {
                Debug.Log("Turn to Evading");
                storedState            = behavior.previousState;
                behavior.previousState = typeof(ShipCirclingState);
                return(typeof(ShipEvadingState));
            }

            if (circlingTimer >= circlingTime)
            {
                Debug.Log("Turn to Previous State");
                circlingTimer = 0f;

                if (storedState == null)
                {
                    return(behavior.previousState);
                }

                System.Type previousState = storedState;
                storedState = null;
                return(previousState);
            }

            circlingTimer += Time.deltaTime;

            Quaternion evadeAngle;

            if (proximity.relativeAngle >= 0f)
            {
                evadeAngle = Quaternion.AngleAxis(proximity.shipAngle - circlingMagnitude, Vector3.forward);
                movement.rotate(evadeAngle);
            }
            else
            {
                evadeAngle = Quaternion.AngleAxis(proximity.shipAngle + circlingMagnitude, Vector3.forward);
                movement.rotate(evadeAngle);
            }

            movement.move();
            return(null);
        }
        public override System.Type Tick()
        {
            if (targeting.target != null)
            {
                Debug.Log("Turn to Tracking");
                return(typeof(TurretTrackingState));
            }

            movement.rotate(originialRotation);
            return(null);
        }
Exemple #3
0
        public override System.Type Tick()
        {
            if (proximity.target == null)
            {
                Debug.Log("Turn to Previous State");
                return(behavior.previousState);
            }

            // We normalized the angle between the ship and the obstacle in proximity sensor, meaning that if the angle is positve, the obstacle is "above/right", and if the angle is negative, the obstacle is "below/left"
            Quaternion evadeAngle;

            if (proximity.relativeAngle >= 0f)
            {
                evadeAngle = Quaternion.AngleAxis(proximity.shipAngle - evademagnitude, Vector3.forward);
            }
            else
            {
                evadeAngle = Quaternion.AngleAxis(proximity.shipAngle + evademagnitude, Vector3.forward);
            }

            movement.rotate(evadeAngle);
            movement.move();
            return(null);
        }