public void Init(ZACommons commons, EventDriver eventDriver) { var shipControl = (ShipControlCommons)commons; seeker.Init(shipControl, shipUp: shipControl.ShipUp, shipForward: shipControl.ShipForward); cruiser.Init(shipControl); velocimeter.Reset(); VTicks = 0; FullBurnTriggerLast = eventDriver.TimeSinceStart; eventDriver.Schedule(0, Run); }
private void Start(ShipControlCommons shipControl, EventDriver eventDriver) { shipControl.Reset(gyroOverride: true); if (MINING_ROLL_RPM > 0.0f) { shipControl.GyroControl.SetAxisVelocityRPM(GyroControl.Roll, MINING_ROLL_RPM); } seeker.Init(shipControl, shipUp: shipControl.ShipUp, shipForward: shipControl.ShipForward); cruiser.Init(shipControl, localForward: Base6Directions.Direction.Forward); if (Mode != MINING) { Mode = MINING; eventDriver.Schedule(0, Mine); } }
public void Start(ZACommons commons, EventDriver eventDriver) { var shipControl = (ShipControlCommons)commons; shipControl.Reset(gyroOverride: true, thrusterEnable: null); forwardCruiser.Init(shipControl, localForward: shipControl.ShipForward); upCruiser.Init(shipControl, localForward: shipControl.ShipUp); leftCruiser.Init(shipControl, localForward: Base6Directions.GetLeft(shipControl.ShipUp, shipControl.ShipForward)); eventDriver.Schedule(0, Run); }
public void Burn(ZACommons commons, EventDriver eventDriver) { if (ShouldAbort(commons, eventDriver, Modes.Burning, false)) { return; } var shipControl = (ShipControlCommons)commons; var controller = GetShipController(shipControl); if (controller == null) { return; } var gravity = controller.GetNaturalGravity(); if (gravity.LengthSquared() > 0.0) { // Override gyro, disable "bottom" thrusters shipControl.Reset(gyroOverride: true, thrusterEnable: true, thrusterCondition: ThrusterCondition); shipControl.ThrustControl.Enable(Base6Directions.GetFlippedDirection(BrakeDirection), false); var down = shipControl.ShipBlockOrientation.TransformDirection(BrakeDirection); seeker.Init(shipControl, shipUp: Base6Directions.GetPerpendicular(down), shipForward: down); if (Autodrop) { // "forward" & "right" var forward = Base6Directions.GetPerpendicular(BrakeDirection); var right = Base6Directions.GetCross(forward, BrakeDirection); // Actual orientations don't matter // Just as long as they're planar & perpendicular to down LongCruiser.Init(shipControl, localForward: forward); LatCruiser.Init(shipControl, localForward: right); } Mode = Modes.Gliding; eventDriver.Schedule(FramesPerRun, Glide); } else { cruiser.Cruise(shipControl, VTVLHELPER_BURN_SPEED, condition: ThrusterCondition); eventDriver.Schedule(FramesPerRun, Burn); } }
public void Start(ZACommons commons, EventDriver eventDriver) { var shipControl = (ShipControlCommons)commons; shipControl.Reset(gyroOverride: true, thrusterEnable: null); var forward = shipControl.ShipBlockOrientation.TransformDirection(LocalForward); seeker.Init(shipControl, shipUp: Base6Directions.GetPerpendicular(forward), shipForward: forward); cruiser.Init(shipControl, localForward: LocalForward); eventDriver.Schedule(0, Run); }
public void HandleCommand(ZACommons commons, EventDriver eventDriver, string argument) { argument = argument.Trim().ToLower(); var parts = argument.Split(new char[] { ' ' }, 10); if (parts.Length < 2) { return; } var command = parts[0]; var subcommand = parts[1]; if (command == "drop") { var shipControl = (ShipControlCommons)commons; if (subcommand == "start") { ThrusterCondition = parts.Length > 2 ? ParseThrusterFlags(parts[2]) : null; shipControl.Reset(gyroOverride: false, thrusterEnable: true, thrusterCondition: ThrusterCondition); cruiser.Init(shipControl, localForward: BurnDirection); if (Mode != Modes.Burning) { Mode = Modes.Burning; Autodrop = false; eventDriver.Schedule(0, Burn); } SaveLastCommand(commons, argument); } else if (subcommand == "brake" || subcommand == "descend") { ThrusterCondition = parts.Length > 2 ? ParseThrusterFlags(parts[2]) : null; shipControl.Reset(gyroOverride: true, thrusterEnable: true, thrusterCondition: ThrusterCondition); var down = shipControl.ShipBlockOrientation.TransformDirection(BrakeDirection); seeker.Init(shipControl, shipUp: Base6Directions.GetPerpendicular(down), shipForward: down); cruiser.Init(shipControl, localForward: BrakeDirection); if (Mode != Modes.Braking) { Mode = Modes.Braking; eventDriver.Schedule(FramesPerRun, Brake); } SaveLastCommand(commons, argument); } else if (subcommand == "abort" || subcommand == "stop" || subcommand == "reset") { Reset(shipControl); } else if (subcommand == "auto") { // Defaults ThrusterCondition = null; AutoThrusterCondition = null; TargetElevation = 1000.0; // From arguments if (parts.Length > 2) { if (double.TryParse(parts[2], out TargetElevation)) { TargetElevation = Math.Max(0.0, TargetElevation); } else { TargetElevation = 1000.0; } } if (parts.Length > 3) { ThrusterCondition = ParseThrusterFlags(parts[3]); } BrakingElevation = TargetElevation; if (parts.Length > 4) { if (double.TryParse(parts[4], out BrakingElevation)) { BrakingElevation = Math.Max(TargetElevation, BrakingElevation); } else { BrakingElevation = TargetElevation; } } if (parts.Length > 5) { AutoThrusterCondition = ParseThrusterFlags(parts[5]); } MinimumSpeed = VTVLHELPER_MINIMUM_SPEED; if (parts.Length > 6) { if (double.TryParse(parts[6], out MinimumSpeed)) { MinimumSpeed = Math.Max(1.0, MinimumSpeed); } else { MinimumSpeed = VTVLHELPER_MINIMUM_SPEED; } } DropTarget = null; if (parts.Length > 9) { double x, y, z; if (double.TryParse(parts[7], out x) && double.TryParse(parts[8], out y) && double.TryParse(parts[9], out z)) { DropTarget = new Vector3D(x, y, z); } } shipControl.Reset(gyroOverride: false, thrusterEnable: true, thrusterCondition: ThrusterCondition); cruiser.Init(shipControl, localForward: BurnDirection); if (Mode != Modes.Burning) { Mode = Modes.Burning; Autodrop = true; eventDriver.Schedule(0, Burn); } SaveLastCommand(commons, argument); } } else if (command == "launch") { var shipControl = (ShipControlCommons)commons; if (subcommand == "start") { ThrusterCondition = parts.Length > 2 ? ParseThrusterFlags(parts[2]) : null; shipControl.Reset(gyroOverride: true, thrusterEnable: true, thrusterCondition: ThrusterCondition); var forward = shipControl.ShipBlockOrientation.TransformDirection(LaunchDirection); seeker.Init(shipControl, shipUp: Base6Directions.GetPerpendicular(forward), shipForward: forward); cruiser.Init(shipControl, localForward: LaunchDirection); if (Mode != Modes.Launching) { Mode = Modes.Launching; eventDriver.Schedule(FramesPerRun, Launch); } SaveLastCommand(commons, argument); } else if (subcommand == "abort" || subcommand == "stop" || subcommand == "reset") { Reset(shipControl); } } else if (command == "orbit") { var shipControl = (ShipControlCommons)commons; if (subcommand == "start") { OrbitInit(shipControl); if (Mode != Modes.Orbiting) { OrbitTicks = 0; Mode = Modes.Orbiting; eventDriver.Schedule(0, OrbitOn); } SaveLastCommand(commons, argument); } else if (subcommand == "abort" || subcommand == "stop" || subcommand == "reset") { ResetOrbit(shipControl); } } }