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); }
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 (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); }
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); }