コード例 #1
0
        public override System.Type Tick()
        {
            if (proximity.target != null)
            {
                behavior.previousState = typeof(ShipFiringState);

                if (proximity.target == targeting.target)
                {
                    Debug.Log("Turn to Circling");
                    return(typeof(ShipCirclingState));
                }
                Debug.Log("Turn to Evading");
                return(typeof(ShipEvadingState));
            }

            if (!behavior.targeting.targetLocked)
            {
                Debug.Log("Turn to Tracking");
                return(typeof(ShipTrackingState));
            }

            if (behavior.targeting.target == null)
            {
                Debug.Log("Turn to Standby");
                return(typeof(ShipStandbyState));
            }

            movement.trackTarget(targeting.target);
            movement.move();
            primaryweapon.fire();
            return(null);
        }
コード例 #2
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);
        }
コード例 #3
0
        public override System.Type Tick()
        {
            if (proximity.target != null)
            {
                behavior.previousState = typeof(ShipStandbyState);

                if (proximity.target == targeting.target)
                {
                    Debug.Log("Turn to Circling");
                    return(typeof(ShipCirclingState));
                }
                Debug.Log("Turn to Evading");
                return(typeof(ShipEvadingState));
            }

            if (targeting.target != null)
            {
                Debug.Log("Turn to Tracking");
                return(typeof(ShipTrackingState));
            }

            movement.move();
            return(null);
        }
コード例 #4
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);
        }