コード例 #1
0
 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);
     }
 }
コード例 #2
0
        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;
            }
            }
        }
コード例 #3
0
 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);
     }
 }
コード例 #4
0
        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);
        }
コード例 #5
0
        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;
            }
        }
コード例 #6
0
 public void SetCoil(string n, bool value)
 {
     OnCoilChanged?.Invoke(this, new CoilEventArgs(n, value));
 }
コード例 #7
0
        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));
        }
コード例 #8
0
        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;
            }
            }
        }