private void OnDisableCoil(object sender, DisableCoilRequest e) { if (_coilNames.ContainsKey(e.CoilNumber)) { Logger.Info($"<-- coil {e.CoilNumber} ({_coilNames[e.CoilNumber]}): false"); _player.Queue(() => OnCoilChanged?.Invoke(this, new CoilEventArgs(_coilNames[e.CoilNumber], false))); } else { Logger.Error("Unmapped MPF coil " + e.CoilNumber); } }
public void Switch(string id, bool normallyClosed) { switch (id) { case SwLeftFlipper: // todo remove when solenoids are done if (normallyClosed) { _leftFlipper?.RotateToEnd(); } else { _leftFlipper?.RotateToStart(); } OnCoilChanged?.Invoke(this, new CoilEventArgs(CoilLeftFlipper, normallyClosed)); break; case SwRightFlipper: // todo remove when solenoids are done if (normallyClosed) { _rightFlipper?.RotateToEnd(); } else { _rightFlipper?.RotateToStart(); } OnCoilChanged?.Invoke(this, new CoilEventArgs(CoilRightFlipper, normallyClosed)); break; case SwPlunger: OnCoilChanged?.Invoke(this, new CoilEventArgs(CoilAutoPlunger, normallyClosed)); break; case SwCreateBall: { if (normallyClosed) { _ballManager.CreateBall(new DebugBallCreator()); } break; } } }
private void OnPulseCoil(object sender, PulseCoilRequest e) { if (_coilNames.ContainsKey(e.CoilNumber)) { var coilId = _coilNames[e.CoilNumber]; _player.ScheduleAction(e.PulseMs * 10, () => { Logger.Info($"<-- coil {coilId} ({e.CoilNumber}): false (pulse)"); OnCoilChanged?.Invoke(this, new CoilEventArgs(coilId, false)); }); Logger.Info($"<-- coil {e.CoilNumber} ({coilId}): true (pulse {e.PulseMs}ms)"); _player.Queue(() => OnCoilChanged?.Invoke(this, new CoilEventArgs(coilId, true))); } else { Logger.Error("Unmapped MPF coil " + e.CoilNumber); } }
public void OnInit(Player player, TableApi tableApi, BallManager ballManager) { _player = player; _ballManager = ballManager; OnDisplaysRequested?.Invoke(this, new RequestedDisplays(new DisplayConfig(DisplayDmd, DmdWidth, DmdHeight))); // debug print stuff OnCoilChanged += DebugPrintCoil; // eject ball onto playfield OnCoilChanged?.Invoke(this, new CoilEventArgs(CoilTroughEject, true)); _player.ScheduleAction(100, () => OnCoilChanged?.Invoke(this, new CoilEventArgs(CoilTroughEject, false))); _playfieldComponent = GetComponentInChildren <PlayfieldComponent>(); OnStarted?.Invoke(this, EventArgs.Empty); }
private void Flip(string id, bool isClosed) { switch (id) { case SwLeftFlipper: #if DUAL_WOUND_FLIPPERS if (isClosed) { OnCoilChanged?.Invoke(this, new CoilEventArgs(CoilLeftFlipperMain, true)); } else { OnCoilChanged?.Invoke(this, _player.SwitchStatusesClosed[SwLeftFlipperEos] ? new CoilEventArgs(CoilLeftFlipperHold, false) : new CoilEventArgs(CoilLeftFlipperMain, false) ); } #else if (_flippersEnabled) { Wait(FlipperLag, () => OnCoilChanged?.Invoke(this, new CoilEventArgs(CoilLeftFlipperMain, isClosed))); } #endif break; case SwLeftFlipperEos: #if DUAL_WOUND_FLIPPERS if (isClosed) { OnCoilChanged?.Invoke(this, new CoilEventArgs(CoilLeftFlipperMain, false)); OnCoilChanged?.Invoke(this, new CoilEventArgs(CoilLeftFlipperHold, true)); } #endif break; case SwRightFlipper: #if DUAL_WOUND_FLIPPERS if (isClosed) { OnCoilChanged?.Invoke(this, new CoilEventArgs(CoilRightFlipperMain, true)); } else { OnCoilChanged?.Invoke(this, _player.SwitchStatusesClosed[SwRightFlipperEos] ? new CoilEventArgs(CoilRightFlipperHold, false) : new CoilEventArgs(CoilRightFlipperMain, false) ); } #else if (_flippersEnabled) { Wait(FlipperLag, () => OnCoilChanged?.Invoke(this, new CoilEventArgs(CoilRightFlipperMain, isClosed))); } #endif break; case SwRightFlipperEos: #if DUAL_WOUND_FLIPPERS if (isClosed) { OnCoilChanged?.Invoke(this, new CoilEventArgs(CoilRightFlipperMain, false)); OnCoilChanged?.Invoke(this, new CoilEventArgs(CoilRightFlipperHold, true)); } #endif break; } }
public void SetCoil(string n, bool value) { OnCoilChanged?.Invoke(this, new CoilEventArgs(n, value)); }
public void Switch(string id, bool isClosed) { if (!_switchTime.ContainsKey(id)) { _switchTime[id] = new Stopwatch(); } if (isClosed) { _switchTime[id].Restart(); } else { _switchTime[id].Stop(); } Logger.Info("Switch {0} is {1}.", id, isClosed ? "closed" : "open after " + _switchTime[id].ElapsedMilliseconds + "ms"); switch (id) { case SwLeftFlipper: case SwLeftFlipperEos: case SwRightFlipper: case SwRightFlipperEos: Flip(id, isClosed); break; case SwTrough4: if (isClosed) { OnCoilChanged?.Invoke(this, new CoilEventArgs(CoilTroughEject, true)); _player.ScheduleAction(100, () => OnCoilChanged?.Invoke(this, new CoilEventArgs(CoilTroughEject, false))); } break; case SwRedBumper: OnLampChanged?.Invoke(this, new LampEventArgs(LampRedBumper, isClosed ? 1 : 0)); break; case SwCreateBall: { if (isClosed) { _ballManager.CreateBall(new DebugBallCreator(630, _playfieldComponent.Height / 2f, _playfieldComponent.TableHeight)); } break; } case SwCannon: { SetCoil(CoilMotorStart, true); break; } case SwMotorStart: { if (isClosed) { SetCoil(CoilMotorStart, false); } break; } case SwMotorEnd: { break; } } OnSwitchChanged?.Invoke(this, new SwitchEventArgs2(id, isClosed)); }
public void Switch(string id, bool normallyClosed) { _switchStatus[id] = normallyClosed; if (!_switchTime.ContainsKey(id)) { _switchTime[id] = new Stopwatch(); } if (normallyClosed) { _switchTime[id].Restart(); } else { _switchTime[id].Stop(); } Logger.Info("Switch {0} is {1}.", id, normallyClosed ? "closed" : "open after " + _switchTime[id].ElapsedMilliseconds + "ms"); switch (id) { case SwLeftFlipper: if (normallyClosed) { OnCoilChanged?.Invoke(this, new CoilEventArgs(CoilLeftFlipperMain, true)); } else { OnCoilChanged?.Invoke(this, _switchStatus[SwLeftFlipperEos] ? new CoilEventArgs(CoilLeftFlipperHold, false) : new CoilEventArgs(CoilLeftFlipperMain, false) ); } break; case SwLeftFlipperEos: OnCoilChanged?.Invoke(this, new CoilEventArgs(CoilLeftFlipperMain, false)); OnCoilChanged?.Invoke(this, new CoilEventArgs(CoilLeftFlipperHold, true)); break; case SwRightFlipper: if (normallyClosed) { OnCoilChanged?.Invoke(this, new CoilEventArgs(CoilRightFlipperMain, true)); } else { OnCoilChanged?.Invoke(this, _switchStatus[SwRightFlipperEos] ? new CoilEventArgs(CoilRightFlipperHold, false) : new CoilEventArgs(CoilRightFlipperMain, false) ); } break; case SwRightFlipperEos: OnCoilChanged?.Invoke(this, new CoilEventArgs(CoilRightFlipperMain, false)); OnCoilChanged?.Invoke(this, new CoilEventArgs(CoilRightFlipperHold, true)); break; case SwPlunger: OnCoilChanged?.Invoke(this, new CoilEventArgs(CoilAutoPlunger, normallyClosed)); break; case SwCreateBall: { if (normallyClosed) { _ballManager.CreateBall(new DebugBallCreator()); } break; } } }