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(); } }
protected override void Disable() { if (soundBlock != null) { soundBlock.Stop(); } }
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(); } }
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); } } } }
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)); }
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(); } } } }
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; } } }
//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"); } } }