static MyWarhead() { var slider = new MyTerminalControlSlider <MyWarhead>("DetonationTime", MySpaceTexts.TerminalControlPanel_Warhead_DetonationTime, MySpaceTexts.TerminalControlPanel_Warhead_DetonationTime); slider.SetLogLimits(1, 60 * 60); slider.DefaultValue = 10; slider.Enabled = (x) => !x.IsCountingDown; slider.Getter = (x) => x.DetonationTime; slider.Setter = (x, v) => MySyncWarhead.SetTimer(x, v * 1000); slider.Writer = (x, sb) => MyValueFormatter.AppendTimeExact(Math.Max(x.m_countdownMs, 1000) / 1000, sb); slider.EnableActions(); MyTerminalControlFactory.AddControl(slider); var startButton = new MyTerminalControlButton <MyWarhead>( "StartCountdown", MySpaceTexts.TerminalControlPanel_Warhead_StartCountdown, MySpaceTexts.TerminalControlPanel_Warhead_StartCountdown, (b) => MySyncWarhead.StartCountdown(b)); startButton.EnableAction(); MyTerminalControlFactory.AddControl(startButton); var stopButton = new MyTerminalControlButton <MyWarhead>( "StopCountdown", MySpaceTexts.TerminalControlPanel_Warhead_StopCountdown, MySpaceTexts.TerminalControlPanel_Warhead_StopCountdown, (b) => MySyncWarhead.StopCountdown(b)); stopButton.EnableAction(); MyTerminalControlFactory.AddControl(stopButton); MyTerminalControlFactory.AddControl(new MyTerminalControlSeparator <MyWarhead>()); var safetyCheckbox = new MyTerminalControlCheckbox <MyWarhead>( "Safety", MySpaceTexts.TerminalControlPanel_Warhead_Safety, MySpaceTexts.TerminalControlPanel_Warhead_SafetyTooltip, MySpaceTexts.TerminalControlPanel_Warhead_SwitchTextDisarmed, MySpaceTexts.TerminalControlPanel_Warhead_SwitchTextArmed); safetyCheckbox.Getter = (x) => !x.IsArmed; safetyCheckbox.Setter = (x, v) => MySyncWarhead.SetArm(x, !v); safetyCheckbox.EnableAction(); MyTerminalControlFactory.AddControl(safetyCheckbox); var detonateButton = new MyTerminalControlButton <MyWarhead>( "Detonate", MySpaceTexts.TerminalControlPanel_Warhead_Detonate, MySpaceTexts.TerminalControlPanel_Warhead_Detonate, (b) => MySyncWarhead.Detonate(b)); detonateButton.Enabled = (x) => x.IsArmed; detonateButton.EnableAction(); MyTerminalControlFactory.AddControl(detonateButton); }
/// <summary> /// Returns true if the warhead should explode /// </summary> public bool Countdown(int frameMs) { if (!IsFunctional) { return(false); } m_countdownMs -= frameMs; // Update emissivity if ((m_countdownMs % BlinkDelay) < frameMs) { m_countdownEmissivityColor = !m_countdownEmissivityColor; UpdateEmissivity(); } // Update clients' countdown every five seconds (but only if there's no interpolation, which should take care of the timer sync) if (true && Sync.IsServer && (m_countdownMs % 5000) < frameMs) { MySyncWarhead.SyncClientTimers(this); } RaisePropertiesChanged(); return(m_countdownMs <= 0); }