public void Execute(ref Navigation nav, Ship current_ship) { switch (command_type) { case CommandType.turn: nav.AddRotation(new FuzzyVector(current_ship.low_ai.CalculateTurn(desired_state.Orientation * Vector3.forward), .5f)); return; case CommandType.main_dv: nav.SetThrottle(1); return; case CommandType.rcs_dv: nav.AddTranslation(new FuzzyVector((desired_state.Velocity - current_ship.Velocity).normalized, .5f)); return; case CommandType.hold_orientation: if (first) { desired_state.Orientation = current_ship.Orientation; first = false; } nav.AddRotation(new FuzzyVector(current_ship.low_ai.CalculateTurn(desired_state.Orientation * Vector3.forward), .5f)); return; case CommandType.stay_locked: nav.AddRotation(new FuzzyVector(current_ship.low_ai.CalculateTurn(desired_state.Target.Position - current_ship.Position), .5f)); return; case CommandType.wait: default: return; } }
/// <summary> Turns in a given direction </summary> /// <param name="tgt_dir"> to turn to in world space </param> public void ApplyTurn(Vector3 tgt_dir, float importance) { navigator.AddRotation(CalculateTurn(tgt_dir), importance); }