コード例 #1
0
        public static IEnumerable <GamelogicEngineCoil> GetCoils(this MachineDescription md)
        {
            var leftFlipperCoil      = string.Empty;
            var rightFlipperCoil     = string.Empty;
            var leftFlipperHoldCoil  = string.Empty;
            var rightFlipperHoldCoil = string.Empty;

            var coils = md.Coils.Select(coil => {
                var gleCoil = new GamelogicEngineCoil(coil.Name, int.Parse(coil.HardwareNumber));

                if (Regex.Match(coil.Name, "(l(eft)?_?flipper|flipper_?l(eft)?_?(main)?)$", RegexOptions.IgnoreCase).Success)
                {
                    gleCoil.Description       = "Left Flipper";
                    gleCoil.PlayfieldItemHint = "^(LeftFlipper|LFlipper|FlipperLeft|FlipperL)$";
                    leftFlipperCoil           = coil.Name;
                }
                else if (Regex.Match(coil.Name, "(l(eft)?_?flipper|flipper_?l(eft)?)_?hold$", RegexOptions.IgnoreCase).Success)
                {
                    gleCoil.Description = "Left Flipper (hold)";
                    leftFlipperHoldCoil = coil.Name;
                }
                else if (Regex.Match(coil.Name, "(r(ight)?_?flipper|flipper_?r(ight)?_?(main)?)$", RegexOptions.IgnoreCase).Success)
                {
                    gleCoil.Description       = "Right Flipper";
                    gleCoil.PlayfieldItemHint = "^(RightFlipper|RFlipper|FlipperRight|FlipperR)$";
                    rightFlipperCoil          = coil.Name;
                }
                else if (Regex.Match(coil.Name, "(r(ight)?_?flipper|flipper_?r(ight)?)_?hold$", RegexOptions.IgnoreCase).Success)
                {
                    gleCoil.Description  = "Right Flipper (hold)";
                    rightFlipperHoldCoil = coil.Name;
                }
                else if (Regex.Match(coil.Name, "trough_?eject", RegexOptions.IgnoreCase).Success)
                {
                    gleCoil.Description    = "Trough Eject";
                    gleCoil.DeviceHint     = "^Trough\\s*\\d?";
                    gleCoil.DeviceItemHint = "eject";
                }

                return(gleCoil);
            }).ToArray();

            foreach (var coil in coils)
            {
                if (coil.Id == leftFlipperHoldCoil)
                {
                    coil.MainCoilIdOfHoldCoil = leftFlipperCoil;
                }
                else if (coil.Id == rightFlipperHoldCoil)
                {
                    coil.MainCoilIdOfHoldCoil = rightFlipperCoil;
                }
            }

            return(coils);
        }
コード例 #2
0
        public static IEnumerable <GamelogicEngineSwitch> GetSwitches(this MachineDescription md)
        {
            return(md.Switches.Select(sw => {
                var gleSw = new GamelogicEngineSwitch(sw.Name, int.Parse(sw.HardwareNumber))
                {
                    NormallyClosed = sw.SwitchType.ToLower() == "nc"
                };

                if (Regex.Match(sw.Name, "l(eft)?_?flipper|flipper_?l(eft)?", RegexOptions.IgnoreCase).Success)
                {
                    gleSw.Description = "Left Flipper Button";
                    gleSw.InputActionHint = InputConstants.ActionLeftFlipper;
                }
                if (Regex.Match(sw.Name, "r(ight)?_?flipper|flipper_?r(ight)?", RegexOptions.IgnoreCase).Success)
                {
                    gleSw.Description = "Right Flipper Button";
                    gleSw.InputActionHint = InputConstants.ActionRightFlipper;
                }
                else if (Regex.Match(sw.Name, "plunger", RegexOptions.IgnoreCase).Success)
                {
                    gleSw.Description = "Plunger Button";
                    gleSw.InputActionHint = InputConstants.ActionPlunger;
                }
                else if (Regex.Match(sw.Name, "start", RegexOptions.IgnoreCase).Success)
                {
                    gleSw.Description = "Start Button";
                    gleSw.InputActionHint = InputConstants.ActionStartGame;
                }
                else if (Regex.Match(sw.Name, "trough_?jam", RegexOptions.IgnoreCase).Success)
                {
                    gleSw.Description = "Trough: Jam Switch";
                    gleSw.DeviceHint = "^Trough\\s*\\d?";
                    gleSw.DeviceItemHint = "jam";
                }
                else
                {
                    var troughSwitchMatch = Regex.Match(sw.Name, "trough_?(\\d+)", RegexOptions.IgnoreCase);
                    if (troughSwitchMatch.Success)
                    {
                        var num = troughSwitchMatch.Groups[1].Value;
                        gleSw.Description = $"Trough {num}";
                        gleSw.DeviceHint = "^Trough\\s*\\d?";
                        gleSw.DeviceItemHint = num;
                    }
                }

                return gleSw;
            }));
        }
コード例 #3
0
ファイル: SampleDsp1.cs プロジェクト: harnold/cobe
        public MachineDescription CreateMachineDescription()
        {
            CreateMachineRegisters();
            CreateMachineInstructions();

            machineDescription = new MachineDescription();

            foreach (Register reg in machineRegisters)
                machineDescription.Registers.Add(reg);

            foreach (Instruction instr in machineInstructions)
                machineDescription.Instructions.Add(instr);

            machineDescription.ExecutionUnits = 6;

            return machineDescription;
        }
コード例 #4
0
ファイル: GACodeGeneratorTester.cs プロジェクト: harnold/cobe
        public GACodeGeneratorTester(
            IMachineDescriptionProvider mdp,
            IProgramGraphProvider pgp, int k,
            GAInstructionSelectorConfiguration isConfig,
            GASchedulerConfiguration scConfig,
            TextWriter textWriter,
            TextWriter dataWriter)
        {
            machineDescription = mdp.CreateMachineDescription();
            programGraph = pgp.CreateUnrolledProgramGraph(k);

            codeGenerator = new GACodeGenerator(isConfig, scConfig);
            iSelector = codeGenerator.InstructionSelector;
            scheduler = codeGenerator.Scheduler;

            this.textWriter = textWriter;
            this.dataWriter = dataWriter;
        }
コード例 #5
0
 public static IEnumerable <GamelogicEngineLamp> GetLights(this MachineDescription md)
 {
     // todo color
     return(md.Lights.Select(light => new GamelogicEngineLamp(light.Name, int.Parse(light.HardwareChannelColor))));
 }