コード例 #1
0
 public void setSound(IMySoundBlock speaker, bool value)
 {
     speaker.SelectedSound = "Alert 1";
     speaker.LoopPeriod    = soundLength;
     if (value)
     {
         if (alarmStarted == null)
         {
             ITerminalAction action;
             action = speaker.GetActionWithName("OnOff_On");
             action.Apply(speaker);
             alarmStarted = DateTime.Now;
             speaker.Play();
         }
         else
         {
             TimeSpan delta = DateTime.Now.Subtract(alarmStarted.Value);   // If the warning time has elapsed, start the welders
             if (delta.TotalSeconds > (soundLength - .9))
             {
                 ITerminalAction action;
                 action = speaker.GetActionWithName("OnOff_On");
                 action.Apply(speaker);
                 alarmStarted = DateTime.Now;
                 speaker.Play();
             }
         }
     }
     else
     {
         alarmStarted = null;
         speaker.Stop();
     }
 }
コード例 #2
0
 protected override void Disable()
 {
     if (soundBlock != null)
     {
         soundBlock.Stop();
     }
 }
コード例 #3
0
 public void setSound(IMySoundBlock speaker, bool value)
 {
     speakerGroup.GetBlocksOfType <IMySoundBlock>(speakerList);
     speaker.SelectedSound = soundName;
     speaker.LoopPeriod    = loopTime;
     if (value)
     {
         if (endLoop == null)
         {
             ITerminalAction action;
             action = speaker.GetActionWithName("OnOff_On");
             action.Apply(speaker);
             endLoop = DateTime.Now.AddSeconds(loopTime);
             speaker.Play();
         }
         else
         {
             if (endLoop <= DateTime.Now)
             {
                 ITerminalAction action;
                 action = speaker.GetActionWithName("OnOff_On");
                 action.Apply(speaker);
                 endLoop = DateTime.Now;
                 speaker.Play();
             }
         }
     }
     else
     {
         endLoop = null;
         speaker.Stop();
     }
 }
コード例 #4
0
 private void UpdateFurnaceState()
 {
     if (furnaceDoor == null)
     {
         return;
     }
     if (furnaceState != FurnaceState.Working && furnaceDoor.Status == DoorStatus.Open)
     {
         var grids = FindGridsInsideFurnace();
         ChangeFurnaceState(grids.Count == 0 ? FurnaceState.Waiting : FurnaceState.LoadedUp);
     }
     else if (furnaceDoor.Status == DoorStatus.Closed)
     {
         if (furnaceState == FurnaceState.Working)
         {
             if (furnaceWorkingCountdown == 0)
             {
                 SetFurnaceDoorsEnabled(true);
                 ChangeFurnaceState(FurnaceState.Waiting);
                 speaker.Stop();
                 furnaceOutput.MoveAllContentsTo(output);
                 foreach (var spotlight in furnaceSpotlights)
                 {
                     spotlight.Intensity = 1.0f;
                 }
             }
             else
             {
                 furnaceWorkingCountdown--;
             }
         }
         else
         {
             var grids = FindGridsInsideFurnace();
             if (grids.Count > 0)
             {
                 SetFurnaceDoorsEnabled(false);
                 speaker.Play();                         // Has the lava sound on it
                 PlayRandomAudio(AudioClip.WeCrushDown, AudioClip.WhereIsThatFrom, AudioClip.DontBreatheIn);
                 MeltGrids(grids);
                 ChangeFurnaceState(FurnaceState.Working);
                 furnaceWorkingCountdown = FurnaceWorkingTime;
                 foreach (var spotlight in furnaceSpotlights)
                 {
                     spotlight.Intensity = 4.9f;
                 }
             }
             else
             {
                 ChangeFurnaceState(FurnaceState.Waiting);
             }
         }
     }
 }
コード例 #5
0
        private void Restore(IBlockConfiguration block, IMySoundBlock soundBlock)
        {
            soundBlock.Enabled = block.GetBooleanStyle(nameof(IMySoundBlock.Enabled), true);
            // TODO: Currently assuming that sound blocks are off by default.
            // https://support.keenswh.com/spaceengineers/general/topic/improvements-to-imysoundblock-interface
            var selectedSound = block.GetStringStyle(nameof(IMySoundBlock.SelectedSound));

            if (selectedSound != soundBlock.SelectedSound)
            {
                soundBlock.Stop();
                soundBlock.SelectedSound = selectedSound;
            }
            soundBlock.Volume     = block.GetSingleStyle(nameof(IMySoundBlock.Volume), 1);
            soundBlock.Range      = block.GetSingleStyle(nameof(IMySoundBlock.Range), 1);
            soundBlock.LoopPeriod = block.GetSingleStyle(nameof(IMySoundBlock.LoopPeriod));
        }
コード例 #6
0
        public void Main(string argument, UpdateType updateSource)
        {
            Runtime.UpdateFrequency = UpdateFrequency.Update10;
            IMyTextPanel display = GridTerminalSystem.GetBlockWithName("LCD Panel [Status]") as IMyTextPanel;

            IMyBlockGroup hangarLights = GridTerminalSystem.GetBlockGroupWithName("Hangar Lights");

            IMyBlockGroup hangarDoors = GridTerminalSystem.GetBlockGroupWithName("Hangar Doors");

            List <IMyTerminalBlock> doors = new List <IMyTerminalBlock>();

            hangarDoors.GetBlocksOfType <IMyAirtightHangarDoor>(doors);

            bool missing = false;

            if (hangarDoors == null) //Returns if doors not found
            {
                Echo("Doors not found");
                missing = true;
            }

            List <IMyTerminalBlock> lights = new List <IMyTerminalBlock>();

            hangarLights.GetBlocksOfType <IMyInteriorLight>(lights);

            if (hangarLights == null) //Returns if lights not found
            {
                Echo("Lights not found");
                missing = true;
            }

            IMyTimerBlock timer = GridTerminalSystem.GetBlockWithName("[Hangar] Timer Block") as IMyTimerBlock;

            if (timer == null) //Returns if timer not found
            {
                Echo("Timer not found");
                missing = true;
            }

            IMyAirVent vent = GridTerminalSystem.GetBlockWithName("[Hangar] Air Vent") as IMyAirVent;

            if (vent == null) //Returns if vent not found
            {
                Echo("Vent not found");
                missing = true;
            }

            IMySoundBlock speaker = GridTerminalSystem.GetBlockWithName("[Hangar] Sound Block") as IMySoundBlock;

            if (speaker == null) //Returns if speaker not found
            {
                Echo("Speaker not found");
                missing = true;
            }

            if (missing == true)
            {
                return;
            }

            UnifyLights(lights);               //Turns all lights on

            speaker.SelectedSound = "Alert 1"; //Set speaker sound

            if (!timer.IsCountingDown)         //Program will skip over if the timer is counting down
            {
                if (timer.TriggerDelay == 10)  //Program will disable timer if the timer is set to 10 (end of hanagar door stage).
                {
                    NormalLights(lights);
                    display.FontSize = 4.4F;
                    Echo("All is well");
                    display.WritePublicTitle("All is well");
                    timer.Enabled      = true;
                    timer.TriggerDelay = 15;
                    speaker.LoopPeriod = 10;
                    speaker.Stop();
                    Runtime.UpdateFrequency = UpdateFrequency.None;
                }
                else //Program will start hangar toggle process else wise
                {
                    if (vent.CanPressurize && !vent.Depressurize) //If the vent needs to depressurize, start depressurize sequence
                    {
                        vent.Depressurize  = true;
                        timer.Enabled      = true;
                        timer.TriggerDelay = 15;
                        timer.StartCountdown();
                        speaker.LoopPeriod = 25;
                        speaker.Play();
                        WarningLights(lights);
                        return;
                    }
                    WarningLights(lights);
                    ToggleDoors(doors);
                    display.FontSize = 3;
                    Echo("!!!CAUTION!!!");
                    display.WritePublicTitle("!!!CAUTION!!!");
                    timer.TriggerDelay = 10;
                    timer.StartCountdown();
                    vent.Depressurize = false;
                    if (speaker.LoopPeriod != 25)
                    {
                        speaker.LoopPeriod = 10;
                        speaker.Play();
                    }
                }
            }
        }
コード例 #7
0
        void Main(string arg, UpdateType uType)
        {
            if (uType == UpdateType.Update1)
            {
                Tick++;

                /*   if (radio.Listen())
                 * {
                 *         radar.correctedTargetLocation = radio.targetpos;
                 *         radar.Lock();
                 *         (gts.GetBlockWithName("Cockpit") as IMyCockpit).GetSurface(0).WriteText("radio", false);
                 *         if (radar.Locked)
                 *         {
                 *                 sound.Play();
                 *                 sound.Play();
                 *                 LASER_GUIDED = false;
                 *         }
                 * }*/
                radar.Update();
                lcd.WriteText("LOCKED: " + radar.Locked, false);
                lcd.WriteText("\nTarget: " + radar.CurrentTarget.Name + ", tick: " + radar.LastLockTick, true);
                lcd.WriteText("\nDistance: " + Math.Round(radar.TargetDistance), true);
                lcd.WriteText("\nVelocity: " + Math.Round(radar.CurrentTarget.Velocity.Length()), true);
                if (radar.Locked)
                {
                    arta.AimCannons(radar.correctedTargetLocation, radar.CurrentTarget.Velocity);
                }
                foreach (Torpedo t in Torpedos)
                {
                    if (t.status == 2)
                    {
                        t.Update(radar.CurrentTarget, CENTER_SHOT ? radar.CurrentTarget.Position : radar.T, cockpit.GetPosition(), cockpit.WorldMatrix.Forward);
                    }
                }
                if (WolfPack)
                {
                    if ((Tick - WolfPackStart + 1) % WOLF_PACK_WELDING_TIME == 0)
                    {
                        CleanGarbage();
                        InitializeTorpedos();
                    }
                    if ((radar.Locked) && ((Tick - WolfPackStart - 1) % WOLF_PACK_WELDING_TIME == 0))
                    {
                        foreach (Torpedo t in Torpedos)
                        {
                            Echo("\nTry Launch: ");
                            Echo("\nWPI: " + WolfPackIndex);
                            if (t.status == 1)
                            {
                                WolfPackIndex--;
                                t.Launch(WolfPackDelays[WolfPackIndex]);
                                break;
                            }
                        }
                        if (WolfPackIndex <= 0)
                        {
                            WolfPack = false;
                        }
                    }
                }
                Echo("Runtime: " + Runtime.LastRunTimeMs);
            }
            else
            {
                switch (arg)
                {
                case "Lock":
                    radar.Lock(true, 20000);
                    if (radar.Locked)
                    {
                        arta.AimPoint = radar.CurrentTarget.Position;
                        sound.Play();
                        sound.Play();
                        LASER_GUIDED            = false;
                        Runtime.UpdateFrequency = UpdateFrequency.Update1;
                    }
                    else
                    {
                        lcd.WriteText("NO TARGET", false);
                        Runtime.UpdateFrequency = UpdateFrequency.None;
                    }
                    break;

                case "RadioON":
                    radio.TurnON();
                    Runtime.UpdateFrequency = UpdateFrequency.Update1;
                    break;

                case "Laser":
                    LASER_GUIDED            = true;
                    Runtime.UpdateFrequency = UpdateFrequency.Update1;
                    break;

                case "CenterShot":
                    CENTER_SHOT = !CENTER_SHOT;
                    break;

                case "Init":
                    CleanGarbage();
                    InitializeTorpedos();
                    break;

                case "SpotterCam":
                    SpotterCam = gts.GetBlockWithName("SpotterCam") as IMyCameraBlock;
                    if (SpotterCam != null)
                    {
                        SpotterCam.EnableRaycast = true;
                        Echo("SpotterCam detected");
                    }
                    break;

                case "Spot":
                    if (SpotterCam != null)
                    {
                        Echo("Spotting");
                        MyDetectedEntityInfo spotterInfo = SpotterCam.Raycast(15000, 0, 0);
                        if (!spotterInfo.IsEmpty())
                        {
                            Echo("Target Spotted");
                            radar.correctedTargetLocation = spotterInfo.Position;
                            radar.Lock();
                            if (radar.Locked)
                            {
                                Echo("Target Locked");
                                Runtime.UpdateFrequency = UpdateFrequency.Update1;
                                sound.Play();
                                sound.Stop();
                                sound.Play();
                                sound.Stop();
                                LASER_GUIDED = false;
                            }
                        }
                    }
                    break;

                case "Stop":
                    radar.StopLock();
                    Runtime.UpdateFrequency = UpdateFrequency.None;
                    break;

                case "Launch":
                    if ((radar.Locked) || (LASER_GUIDED))
                    {
                        foreach (Torpedo t in Torpedos)
                        {
                            Echo("\nTry Launch: ");
                            if (t.status == 1)
                            {
                                Echo("1 go");
                                t.Launch();
                                break;
                            }
                        }
                    }
                    else
                    {
                        Echo("No Target Lock");
                    }
                    break;

                case "Test":
                    Echo("\n Test:" + VerticalDelay(5000.0f, 1700.0f, 300));
                    break;

                case "CCT":
                    Runtime.UpdateFrequency = UpdateFrequency.Update1;
                    arta.tensor_calculation = true;
                    arta.tensor_calc_step   = 0;
                    break;

                case "Pack":
                    if (radar.Locked)
                    {
                        WolfPackDelays.Clear();
                        WolfPackDelays.Add(LAUNCH_DELAY);
                        for (int x = 0; x < WOLF_PACK_COUNT - 1; x++)
                        {
                            WolfPackDelays.Add(VerticalDelay((float)radar.TargetDistance, (float)(WOLF_PACK_WELDING_TIME - WOLF_PACK_INTERVAL) * 1.666667f, WolfPackDelays[WolfPackDelays.Count - 1]));
                        }
                        WolfPack      = true;
                        WolfPackStart = Tick;
                        WolfPackIndex = WOLF_PACK_COUNT;
                    }
                    break;

                default:
                    break;
                }
            }
        }
コード例 #8
0
        //Main Functions

        public void SwitchRedAlert()
        {
            List <IMyLightingBlock> rotatLights  = GetRotatingLights();
            List <IMyLightingBlock> alarmLights  = GetAlarmLights();
            List <IMyLightingBlock> switchLights = GetSwtchLights();
            List <IMyLightingBlock> otherLights  = GetOtherLights();
            List <IMyLightingBlock> sredLights   = GetSredLights();
            IMySoundBlock           alarmBlock   = GridTerminalSystem.GetBlockWithName(SOUND_BLOCK) as IMySoundBlock;

            onAlert = !onAlert;

            if (onAlert)     // turn the <s> F*****g Furries </s> on
            {
                ChangeLightsColor(otherLights, new Color(60, 0, 0));
                ChangeLightsColor(switchLights, new Color(0, 0, 255));
                ChangeLightsColor(alarmLights, new Color(0, 0, 255));
                ChangeLightsColor(sredLights, new Color(60, 0, 0));
                ChangeLightsStatus(rotatLights, true);
                ChangeLightsStatus(alarmLights, true);
                if (alarmBlock != null)
                {
                    alarmBlock.Play();
                }
                foreach (IMyLightingBlock l in otherLights)
                {
                    l.BlinkLength          = 50f;
                    l.BlinkIntervalSeconds = 2;
                }
                foreach (IMyLightingBlock l in switchLights)
                {
                    l.BlinkLength          = 50f;
                    l.BlinkIntervalSeconds = 2;
                }
                SetWeapons(true);
                CloseAllDoors();
                Output("\nRED ALERT");
                if (EnergyControl != null)
                {
                    EnergyControl.TryRun("COMBAT");
                }
            }
            else     // turn the <s> F*****g Furries </s> off
            {
                ChangeLightsColor(otherLights, new Color(255, 255, 255));
                ChangeLightsColor(switchLights, new Color(255, 255, 255));
                ChangeLightsColor(sredLights, new Color(255, 255, 255));
                ChangeLightsStatus(rotatLights, false);
                ChangeLightsStatus(alarmLights, false);
                if (alarmBlock != null)
                {
                    alarmBlock.Stop();
                }
                foreach (IMyLightingBlock l in otherLights)
                {
                    l.BlinkIntervalSeconds = 0;
                    l.BlinkOffset          = 50f;
                }
                foreach (IMyLightingBlock l in switchLights)
                {
                    l.BlinkIntervalSeconds = 0;
                }
                Output("\nIN ORDER");
                if (EnergyControl != null)
                {
                    EnergyControl.TryRun("NORMAL");
                }
            }
        }