public void RunContinuousLogic() { program.WriteText($"Mode:{Mode}", true); program.WriteText($"State:{State}", true); program.WriteText($"Stage:{Stage}", true); DisplayControl(); SoundControl(); if (Mode == ModeMachine.SimpleOpen) { SimpleLightControl(); } else { AirlockLightControl(); } if (Mode != ModeMachine.Stop && Sequences.Count > Stage) { Sequence = Sequences[Stage]; program.WriteText($"Sequence:{Sequence}", true); Staging(Sequence); } if (Sleep > 0) { program.WriteText($"Sleep:{Sleep/6}", true); } }
public void Initialize() { stateMachine = new StateMachine(this); actionMachine = new ActionMachine(this); ChangeState(BodyType.Up, StateType.Idle); ChangeState(BodyType.Low, StateType.Idle); }
public void Initialize() { stateMachine = new StateMachine(this); actionMachine = new ActionMachine(this); ChangeState(BodyType.Up, StateType.Idle); ChangeState(BodyType.Low, StateType.Idle); RotationModel(bodyTransform, transform); RefreshEquips(); }
private void Staging(ActionMachine action) { bool state = true; switch (action) { case ActionMachine.Open: state = true; doors.ForEach(delegate(IMyDoor block) { block.OpenDoor(); if (block.OpenRatio < 1 - Epsilon) { state = false; } }); if (state) { Stage++; openned = true; } break; case ActionMachine.OpenInt: state = true; doors.ForEach(delegate(IMyDoor block) { if (block.CustomName.ToLower().Contains("int")) { block.OpenDoor(); if (block.OpenRatio < 1 - Epsilon) { state = false; } } }); if (state) { Stage++; openned = true; } break; case ActionMachine.OpenExt: state = true; doors.ForEach(delegate(IMyDoor block) { if (block.CustomName.ToLower().Contains("ext")) { block.OpenDoor(); if (block.OpenRatio < 1 - Epsilon) { state = false; } } }); if (state) { Stage++; openned = true; } break; case ActionMachine.Close: state = true; doors.ForEach(delegate(IMyDoor block) { block.CloseDoor(); if (block.OpenRatio > 0 + Epsilon) { state = false; } }); if (state) { Stage++; openned = false; } break; case ActionMachine.CloseInt: state = true; doors.ForEach(delegate(IMyDoor block) { if (block.CustomName.ToLower().Contains("int")) { block.CloseDoor(); if (block.OpenRatio > 0 + Epsilon) { state = false; } } }); if (state) { Stage++; openned = false; } break; case ActionMachine.CloseExt: state = true; doors.ForEach(delegate(IMyDoor block) { if (block.CustomName.ToLower().Contains("ext")) { block.CloseDoor(); if (block.OpenRatio > 0 + Epsilon) { state = false; } } }); if (state) { Stage++; openned = false; } break; case ActionMachine.Lock: doors.ForEach(delegate(IMyDoor block) { block.ApplyAction("OnOff_Off"); }); Stage++; break; case ActionMachine.LockInt: doors.ForEach(delegate(IMyDoor block) { if (block.CustomName.ToLower().Contains("int")) { block.ApplyAction("OnOff_Off"); } }); Stage++; break; case ActionMachine.LockExt: doors.ForEach(delegate(IMyDoor block) { if (block.CustomName.ToLower().Contains("ext")) { block.ApplyAction("OnOff_Off"); } }); Stage++; break; case ActionMachine.Unlock: doors.ForEach(delegate(IMyDoor block) { block.ApplyAction("OnOff_On"); }); Stage++; break; case ActionMachine.UnlockInt: doors.ForEach(delegate(IMyDoor block) { if (block.CustomName.ToLower().Contains("int")) { block.ApplyAction("OnOff_On"); } }); Stage++; break; case ActionMachine.UnlockExt: doors.ForEach(delegate(IMyDoor block) { if (block.CustomName.ToLower().Contains("ext")) { block.ApplyAction("OnOff_On"); } }); Stage++; break; case ActionMachine.Pressure: airvent.ApplyAction("Depressurize_Off"); state = true; airvent.ForEach(delegate(IMyAirVent block) { VentStatus status = block.Status; if (block.GetOxygenLevel() < 1 - Epsilon) { state = false; } WriteText($"Status:{status}", true); WriteText($"Pressure:{block.GetOxygenLevel() * 100}", true); }); if (state) { Stage++; } break; case ActionMachine.Depressure: airvent.ApplyAction("Depressurize_On"); state = true; airvent.ForEach(delegate(IMyAirVent block) { VentStatus status = block.Status; if (block.GetOxygenLevel() > 0 + Epsilon) { state = false; } WriteText($"Status:{status}", true); WriteText($"Pressure:{block.GetOxygenLevel() * 100}", true); }); if (state) { Stage++; } break; case ActionMachine.Sleep: Sleep--; WriteText($"Sleep:{Sleep}", true); if (Sleep <= 0) { Stage++; } break; case ActionMachine.SleepInit: Sleep = program.MyProperty.timer; Stage++; break; case ActionMachine.Start: State = StateMachine.Running; Stage++; break; case ActionMachine.Stop: State = StateMachine.Stop; Sleep = 0; Stage++; break; case ActionMachine.Terminated: Stage++; break; case ActionMachine.TerminatedInt: Stage++; break; case ActionMachine.TerminatedExt: Stage++; break; } }
private void Staging(ActionMachine action) { bool closed = true; float position_target = 0f; float velocity = 0f; switch (action) { case ActionMachine.LockBottom: velocity = -MyProperty.locker_velocity; position_target = MyProperty.locker_position_min; bottom_mergers.On(); bottom_pistons.Velocity(velocity); WriteText($"Bottom mergers: On", true); WriteText($"Velocity: {velocity}", true); WriteText($"Target Position={position_target}", true); closed = true; bottom_pistons.ForEach(delegate(IMyPistonBase block) { WriteText($"Position={block.CurrentPosition}", true); }); if (bottom_pistons.IsLessPosition(position_target)) { Stage++; } break; case ActionMachine.UnlockBottom: closed = true; top_mergers.ForEach(delegate(IMyShipMergeBlock block) { if (!block.IsConnected) { closed = false; } }); if (!closed) { WriteText($"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", true); WriteText($"Security: Top mergers is Off", true); } else { velocity = MyProperty.locker_velocity; position_target = MyProperty.locker_position_max; bottom_mergers.Off(); bottom_pistons.Velocity(velocity); WriteText($"Bottom mergers: Off", true); WriteText($"Velocity: {velocity}", true); WriteText($"Target Position={position_target}", true); closed = true; bottom_pistons.ForEach(delegate(IMyPistonBase block) { WriteText($"Position={block.CurrentPosition}", true); }); if (bottom_pistons.IsMorePosition(position_target)) { Stage++; } } break; case ActionMachine.LockTop: velocity = -MyProperty.locker_velocity; position_target = MyProperty.locker_position_min; top_mergers.On(); top_pistons.Velocity(velocity); WriteText($"Bottom mergers: On", true); WriteText($"Velocity: {velocity}", true); WriteText($"Target Position={position_target}", true); closed = true; top_pistons.ForEach(delegate(IMyPistonBase block) { WriteText($"Position={block.CurrentPosition}", true); }); if (top_pistons.IsLessPosition(position_target)) { connector.Lock(); Stage++; } break; case ActionMachine.UnlockTop: closed = true; bottom_mergers.ForEach(delegate(IMyShipMergeBlock block) { if (!block.IsConnected) { closed = false; } }); if (!closed) { WriteText($"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", true); WriteText($"Security: Bottom mergers is Off", true); } else { velocity = MyProperty.locker_velocity; position_target = MyProperty.locker_position_max; top_mergers.Off(); top_pistons.Velocity(velocity); connector.Unlock(); WriteText($"Top mergers: Off", true); WriteText($"Connector: Unlock", true); WriteText($"Velocity: {velocity}", true); WriteText($"Target Position={position_target}", true); closed = true; top_pistons.ForEach(delegate(IMyPistonBase block) { WriteText($"Position={block.CurrentPosition}", true); }); if (top_pistons.IsMorePosition(position_target)) { Stage++; } } break; case ActionMachine.Down: levage_pistons.On(); WriteText($"Piston Levage: On", true); velocity = MyProperty.elevator_velocity_min; if (Mode == ModeMachine.Up) { velocity = MyProperty.elevator_velocity_max; } WriteText($"Piston Velocity: {velocity}", true); levage_pistons.Velocity(velocity); position_target = MyProperty.elevator_position_max; WriteText($"Target Position={position_target}", true); levage_pistons.ForEach(delegate(IMyPistonBase block) { WriteText($"Position={block.CurrentPosition}", true); }); //projector_count = projector.List[0].RemainingBlocks; if (levage_pistons.IsMorePosition(position_target)) { Stage++; } break; case ActionMachine.Up: levage_pistons.On(); WriteText($"Piston Levage: On", true); velocity = -MyProperty.elevator_velocity_max; if (Mode == ModeMachine.Up) { velocity = -MyProperty.elevator_velocity_min; } WriteText($"Piston Velocity: {velocity}", true); levage_pistons.Velocity(velocity); position_target = MyProperty.elevator_position_min; WriteText($"Target Position={position_target}", true); levage_pistons.ForEach(delegate(IMyPistonBase block) { WriteText($"Position={block.CurrentPosition}", true); }); //projector_count = projector.List[0].RemainingBlocks; if (levage_pistons.IsLessPosition(position_target + 0.1f)) { Stage++; } break; case ActionMachine.StartWelder: projector.On(); welders.On(); WriteText($"Welders: On", true); Stage++; break; case ActionMachine.StopWelder: welders.Off(); projector.Off(); WriteText($"Welders: Off", true); Stage++; break; case ActionMachine.StartGrinder: grinders.On(); //projector.On(); WriteText($"Grinders: On", true); Stage++; break; case ActionMachine.StopGrinder: grinders.Off(); //projector.Off(); WriteText($"Grinders: Off", true); Stage++; break; case ActionMachine.Terminated: Cycle -= 1; if (Cycle == 0) { Mode = ModeMachine.Stop; } Stage = 0; break; case ActionMachine.Start: MyProperty.Load(); light.On(); drills.On(); Stage++; break; case ActionMachine.Stop: projector.Off(); light.Off(); drills.Off(); Stage++; break; } }