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); }
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; })); }
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; }
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; }
public static IEnumerable <GamelogicEngineLamp> GetLights(this MachineDescription md) { // todo color return(md.Lights.Select(light => new GamelogicEngineLamp(light.Name, int.Parse(light.HardwareChannelColor)))); }