Beispiel #1
0
            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);
                }
            }
Beispiel #2
0
    public void Initialize()
    {
        stateMachine  = new StateMachine(this);
        actionMachine = new ActionMachine(this);

        ChangeState(BodyType.Up, StateType.Idle);
        ChangeState(BodyType.Low, StateType.Idle);
    }
Beispiel #3
0
    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();
    }
Beispiel #4
0
            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;
                }
            }
Beispiel #5
0
        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;
            }
        }