internal static ParsingResult TryParse(string input, out Octave octave) { octave = null; if (string.IsNullOrWhiteSpace(input)) { return(ParsingResult.EmptyInputString); } var match = ParsingUtilities.Match(input, Patterns); if (match == null) { return(ParsingResult.NotMatched); } int octaveNumber; if (!ParsingUtilities.ParseInt(match, OctaveNumberGroupName, Octave.Middle.Number, out octaveNumber) || octaveNumber < Octave.MinOctaveNumber || octaveNumber > Octave.MaxOctaveNumber) { return(ParsingResult.Error(OctaveIsOutOfRange)); } octave = Octave.Get(octaveNumber); return(ParsingResult.Parsed); }
public override void InitializeTab() { base.InitializeTab(); // Pu Controller initialize and register click events buttonPuConHome.Click += (sender, e) => PuUtilities.SetMarioPu(0, 0, 0); buttonPuConZnQpu.Click += (sender, e) => PuUtilities.TranslateMarioPu(0, 0, -4); buttonPuConZpQpu.Click += (sender, e) => PuUtilities.TranslateMarioPu(0, 0, 4); buttonPuConXnQpu.Click += (sender, e) => PuUtilities.TranslateMarioPu(-4, 0, 0); buttonPuConXpQpu.Click += (sender, e) => PuUtilities.TranslateMarioPu(4, 0, 0); buttonPuConZnPu.Click += (sender, e) => PuUtilities.TranslateMarioPu(0, 0, -1); buttonPuConZpPu.Click += (sender, e) => PuUtilities.TranslateMarioPu(0, 0, 1); buttonPuConXnPu.Click += (sender, e) => PuUtilities.TranslateMarioPu(-1, 0, 0); buttonPuConXpPu.Click += (sender, e) => PuUtilities.TranslateMarioPu(1, 0, 0); ControlUtilities.InitializeThreeDimensionController( CoordinateSystem.Euler, false, groupBoxMarioPu, "MarioPu", (float hOffset, float vOffset, float nOffset, bool useQpu) => { int hOffsetInt = ParsingUtilities.ParseInt(hOffset); int vOffsetInt = ParsingUtilities.ParseInt(vOffset); int nOffsetInt = ParsingUtilities.ParseInt(nOffset); int multiplier = useQpu ? 4 : 1; PuUtilities.TranslateMarioPu( hOffsetInt * multiplier, nOffsetInt * multiplier, -1 * vOffsetInt * multiplier); }); }
public WatchVariableControlPrecursor(XElement element) { /// Watchvariable params string typeName = (element.Attribute(XName.Get("type"))?.Value); string specialType = element.Attribute(XName.Get("specialType"))?.Value; BaseAddressTypeEnum baseAddressType = WatchVariableUtilities.GetBaseAddressType(element.Attribute(XName.Get("base")).Value); uint?offsetUS = ParsingUtilities.ParseHexNullable(element.Attribute(XName.Get("offsetUS"))?.Value); uint?offsetJP = ParsingUtilities.ParseHexNullable(element.Attribute(XName.Get("offsetJP"))?.Value); uint?offsetSH = ParsingUtilities.ParseHexNullable(element.Attribute(XName.Get("offsetSH"))?.Value); uint?offsetEU = ParsingUtilities.ParseHexNullable(element.Attribute(XName.Get("offsetEU"))?.Value); uint?offsetDefault = ParsingUtilities.ParseHexNullable(element.Attribute(XName.Get("offset"))?.Value); uint?mask = element.Attribute(XName.Get("mask")) != null ? (uint?)ParsingUtilities.ParseHex(element.Attribute(XName.Get("mask")).Value) : null; int?shift = element.Attribute(XName.Get("shift")) != null? int.Parse(element.Attribute(XName.Get("shift")).Value) : (int?)null; bool handleMapping = (element.Attribute(XName.Get("handleMapping")) != null) ? bool.Parse(element.Attribute(XName.Get("handleMapping")).Value) : true; string name = element.Value; WatchVar = new WatchVariable( name, typeName, specialType, baseAddressType, offsetUS, offsetJP, offsetSH, offsetEU, offsetDefault, mask, shift, handleMapping); Name = name; Subclass = WatchVariableUtilities.GetSubclass(element.Attribute(XName.Get("subclass"))?.Value); GroupList = WatchVariableUtilities.ParseVariableGroupList(element.Attribute(XName.Get("groupList"))?.Value); BackgroundColor = (element.Attribute(XName.Get("color")) != null) ? ColorUtilities.GetColorFromString(element.Attribute(XName.Get("color")).Value) : (Color?)null; string displayTypeName = (element.Attribute(XName.Get("display"))?.Value); DisplayType = displayTypeName != null ? TypeUtilities.StringToType[displayTypeName] : null; RoundingLimit = (element.Attribute(XName.Get("round")) != null) ? ParsingUtilities.ParseInt(element.Attribute(XName.Get("round")).Value) : (int?)null; UseHex = (element.Attribute(XName.Get("useHex")) != null) ? bool.Parse(element.Attribute(XName.Get("useHex")).Value) : (bool?)null; InvertBool = element.Attribute(XName.Get("invertBool")) != null? bool.Parse(element.Attribute(XName.Get("invertBool")).Value) : (bool?)null; IsYaw = (element.Attribute(XName.Get("yaw")) != null) ? bool.Parse(element.Attribute(XName.Get("yaw")).Value) : (bool?)null; Coordinate = element.Attribute(XName.Get("coord")) != null? WatchVariableUtilities.GetCoordinate(element.Attribute(XName.Get("coord")).Value) : (Coordinate?)null; FixedAddresses = element.Attribute(XName.Get("fixed")) != null? ParsingUtilities.ParseHexList(element.Attribute(XName.Get("fixed")).Value) : null; VerifyState(); }
internal static ParsingResult TryParse(string input, out Interval interval) { interval = null; if (string.IsNullOrWhiteSpace(input)) { return(ParsingResult.EmptyInputString); } var match = ParsingUtilities.Match(input, Patterns); if (match == null) { return(ParsingResult.NotMatched); } int halfSteps; if (!ParsingUtilities.ParseInt(match, HalfStepsGroupName, 0, out halfSteps) || !IntervalUtilities.IsIntervalValid(halfSteps)) { return(ParsingResult.Error(HalfStepsNumberIsOutOfRange)); } interval = Interval.FromHalfSteps(halfSteps); return(ParsingResult.Parsed); }
private void ChangeMapPosition(int xSign, int ySign) { int positionChange = ParsingUtilities.ParseInt(_mapGui.MapBoundsPositionTextBox.Text); int xChange = positionChange * xSign; int yChange = positionChange * ySign; int newX = _mapGui.GLControl.Left - xChange; int newY = _mapGui.GLControl.Top + yChange; _mapGui.GLControl.Location = new Point(newX, newY); }
private void ChangeMapZoom(int sign) { int change = ParsingUtilities.ParseInt(_mapGui.MapBoundsZoomTextBox.Text); int zoomChange = change * sign; int newX = _mapGui.GLControl.Left - zoomChange; int newY = _mapGui.GLControl.Top - zoomChange; int newWidth = _mapGui.GLControl.Width + 2 * zoomChange; int newHeight = _mapGui.GLControl.Height + 2 * zoomChange; _mapGui.GLControl.SetBounds(newX, newY, newWidth, newHeight); }
public static VarHackContainer CreateFromXml( VarHackFlowLayoutPanel varHackPanel, XElement element) { int xPos = ParsingUtilities.ParseInt(element.Attribute(XName.Get("xPos")).Value); int yPos = ParsingUtilities.ParseInt(element.Attribute(XName.Get("yPos")).Value); string specialType = element.Attribute(XName.Get("specialType"))?.Value; if (specialType != null) { return(new VarHackContainer( varHackPanel, 0 /* creationIndex */, false /* useDefaults */, specialType, true /* noNumIn */, null /* varNameIn */, null /* addressIn */, null /* memoryTypeIn */, null /* useHexIn */, null /* pointerOffsetIn */, xPos, yPos)); } else { string varName = element.Attribute(XName.Get("name")).Value; uint address = ParsingUtilities.ParseHex(element.Attribute(XName.Get("address")).Value); Type type = TypeUtilities.StringToType[element.Attribute(XName.Get("type")).Value]; bool useHex = ParsingUtilities.ParseBool(element.Attribute(XName.Get("useHex")).Value); uint? pointerOffset = ParsingUtilities.ParseHexNullable(element.Attribute(XName.Get("pointerOffset"))?.Value); bool noNum = ParsingUtilities.ParseBool(element.Attribute(XName.Get("noNum")).Value); return(new VarHackContainer( varHackPanel, 0 /* creationIndex */, false /* useDefaults */, null /* sepcialTypeIn */, noNum, varName, address, type, useHex, pointerOffset, xPos, yPos)); } }
public PuManager(string varFilePath, TabPage tabControl, WatchVariableFlowLayoutPanel watchVariablePanel) : base(varFilePath, watchVariablePanel, ALL_VAR_GROUPS, VISIBLE_VAR_GROUPS) { SplitContainer splitContainerFile = tabControl.Controls["splitContainerPu"] as SplitContainer; _puController = splitContainerFile.Panel1.Controls["groupBoxPuController"] as GroupBox; // Pu Controller initialize and register click events _puController.Controls["buttonPuConHome"].Click += (sender, e) => PuUtilities.SetMarioPu(0, 0, 0); _puController.Controls["buttonPuConZnQpu"].Click += (sender, e) => PuUtilities.TranslateMarioPu(0, 0, -4); _puController.Controls["buttonPuConZpQpu"].Click += (sender, e) => PuUtilities.TranslateMarioPu(0, 0, 4); _puController.Controls["buttonPuConXnQpu"].Click += (sender, e) => PuUtilities.TranslateMarioPu(-4, 0, 0); _puController.Controls["buttonPuConXpQpu"].Click += (sender, e) => PuUtilities.TranslateMarioPu(4, 0, 0); _puController.Controls["buttonPuConZnPu"].Click += (sender, e) => PuUtilities.TranslateMarioPu(0, 0, -1); _puController.Controls["buttonPuConZpPu"].Click += (sender, e) => PuUtilities.TranslateMarioPu(0, 0, 1); _puController.Controls["buttonPuConXnPu"].Click += (sender, e) => PuUtilities.TranslateMarioPu(-1, 0, 0); _puController.Controls["buttonPuConXpPu"].Click += (sender, e) => PuUtilities.TranslateMarioPu(1, 0, 0); GroupBox groupBoxMarioPu = splitContainerFile.Panel1.Controls["groupBoxMarioPu"] as GroupBox; ControlUtilities.InitializeThreeDimensionController( CoordinateSystem.Euler, false, groupBoxMarioPu, groupBoxMarioPu.Controls["buttonMarioPuXn"] as Button, groupBoxMarioPu.Controls["buttonMarioPuXp"] as Button, groupBoxMarioPu.Controls["buttonMarioPuZn"] as Button, groupBoxMarioPu.Controls["buttonMarioPuZp"] as Button, groupBoxMarioPu.Controls["buttonMarioPuXnZn"] as Button, groupBoxMarioPu.Controls["buttonMarioPuXnZp"] as Button, groupBoxMarioPu.Controls["buttonMarioPuXpZn"] as Button, groupBoxMarioPu.Controls["buttonMarioPuXpZp"] as Button, groupBoxMarioPu.Controls["buttonMarioPuYp"] as Button, groupBoxMarioPu.Controls["buttonMarioPuYn"] as Button, groupBoxMarioPu.Controls["textBoxMarioPuXZ"] as TextBox, groupBoxMarioPu.Controls["textBoxMarioPuY"] as TextBox, groupBoxMarioPu.Controls["checkBoxMarioPuQpu"] as CheckBox, (float hOffset, float vOffset, float nOffset, bool useQpu) => { int hOffsetInt = ParsingUtilities.ParseInt(hOffset); int vOffsetInt = ParsingUtilities.ParseInt(vOffset); int nOffsetInt = ParsingUtilities.ParseInt(nOffset); int multiplier = useQpu ? 4 : 1; PuUtilities.TranslateMarioPu( hOffsetInt * multiplier, nOffsetInt * multiplier, -1 * vOffsetInt * multiplier); }); }
internal static ParsingResult TryParse(string input, out MetricTimeSpan timeSpan) { timeSpan = null; if (string.IsNullOrWhiteSpace(input)) { return(ParsingResult.EmptyInputString); } var match = ParsingUtilities.Match(input, Patterns); if (match == null) { return(ParsingResult.NotMatched); } int hours; if (!ParsingUtilities.ParseInt(match, HoursGroupName, 0, out hours)) { return(new ParsingResult(HoursIsOutOfRange)); } int minutes; if (!ParsingUtilities.ParseInt(match, MinutesGroupName, 0, out minutes)) { return(new ParsingResult(MinutesIsOutOfRange)); } int seconds; if (!ParsingUtilities.ParseInt(match, SecondsGroupName, 0, out seconds)) { return(new ParsingResult(SecondsIsOutOfRange)); } int milliseconds; if (!ParsingUtilities.ParseInt(match, MillisecondsGroupName, 0, out milliseconds)) { return(new ParsingResult(MillisecondsIsOutOfRange)); } timeSpan = new MetricTimeSpan(hours, minutes, seconds, milliseconds); return(ParsingResult.Parsed); }
internal static ParsingResult TryParse(string input, out Interval interval) { interval = null; if (string.IsNullOrWhiteSpace(input)) { return(ParsingResult.EmptyInputString); } var match = ParsingUtilities.Match(input, Patterns, ignoreCase: false); if (match == null) { return(ParsingResult.NotMatched); } var intervalQualityGroup = match.Groups[IntervalQualityGroupName]; if (!intervalQualityGroup.Success) { int halfSteps; if (!ParsingUtilities.ParseInt(match, HalfStepsGroupName, 0, out halfSteps) || !IntervalUtilities.IsIntervalValid(halfSteps)) { return(ParsingResult.Error(HalfStepsNumberIsOutOfRange)); } interval = Interval.FromHalfSteps(halfSteps); return(ParsingResult.Parsed); } var intervalQuality = IntervalQualitiesByLetters[intervalQualityGroup.Value]; int intervalNumber; if (!ParsingUtilities.ParseInt(match, IntervalNumberGroupName, 0, out intervalNumber) || intervalNumber < 1) { return(ParsingResult.Error(IntervalNumberIsOutOfRange)); } interval = Interval.Get(intervalQuality, intervalNumber); return(ParsingResult.Parsed); }
internal static ParsingResult TryParse(string input, out Note note) { note = null; if (string.IsNullOrWhiteSpace(input)) { return(ParsingResult.EmptyInputString); } var match = ParsingUtilities.Match(input, Patterns); if (match == null) { return(ParsingResult.NotMatched); } var noteNameGroup = match.Groups[NoteNameGroupName]; NoteName noteName; var noteNameParsingResult = NoteNameParser.TryParse(noteNameGroup.Value, out noteName); if (noteNameParsingResult.Status != ParsingStatus.Parsed) { return(noteNameParsingResult); } int octaveNumber; if (!ParsingUtilities.ParseInt(match, OctaveGroupName, Octave.Middle.Number, out octaveNumber)) { return(ParsingResult.Error(OctaveIsOutOfRange)); } if (!NoteUtilities.IsNoteValid(noteName, octaveNumber)) { return(ParsingResult.Error(NoteIsOutOfRange)); } note = Note.Get(noteName, octaveNumber); return(ParsingResult.Parsed); }
private void PasteTriangles() { List <List <string> > lines = ParsingUtilities.ParseLines(Clipboard.GetText()); if (lines.Count != 10) { return; } int numWords = lines[0].Count; if (numWords == 0) { return; } if (lines.Any(line => line.Count != numWords)) { return; } for (int wordIndex = 0; wordIndex < numWords; wordIndex++) { uint triAddress = ParsingUtilities.ParseHexNullable(lines[0][wordIndex]) ?? 0; List <int> coords = lines.Skip(1).ToList().ConvertAll(line => ParsingUtilities.ParseInt(line[wordIndex])); TriangleOffsetsConfig.SetX1((short)coords[0], triAddress); TriangleOffsetsConfig.SetY1((short)coords[1], triAddress); TriangleOffsetsConfig.SetZ1((short)coords[2], triAddress); TriangleOffsetsConfig.SetX2((short)coords[3], triAddress); TriangleOffsetsConfig.SetY2((short)coords[4], triAddress); TriangleOffsetsConfig.SetZ2((short)coords[5], triAddress); TriangleOffsetsConfig.SetX3((short)coords[6], triAddress); TriangleOffsetsConfig.SetY3((short)coords[7], triAddress); TriangleOffsetsConfig.SetZ3((short)coords[8], triAddress); UpdateBasedOnCoordinates( triAddress, coords[0], coords[1], coords[2], coords[3], coords[4], coords[5], coords[6], coords[7], coords[8]); } }
public static List <uint> GetObjectAddresses() { List <uint> addresses = new List <uint>(); Func <int, uint> getOffset = (int i) => (uint)i * 0x260; for (int i = 0; i < 6; i++) { addresses.Add(TtcObjectConfig.TtcRotatingBlockAddress + getOffset(i)); } for (int i = 0; i < 2; i++) { addresses.Add(TtcObjectConfig.TtcRotatingTriangularPrismAddress + getOffset(i)); } for (int i = 0; i < 4; i++) { addresses.Add(TtcObjectConfig.TtcPendulumAddress + getOffset(i)); } for (int i = 0; i < 5; i++) { addresses.Add(TtcObjectConfig.TtcTreadmill1Address + getOffset(i)); } for (int i = 0; i < 12; i++) { addresses.Add(TtcObjectConfig.TtcPusherAddress + getOffset(i)); } for (int i = 0; i < 5; i++) { addresses.Add(TtcObjectConfig.TtcCog1Address + getOffset(i)); } for (int i = 0; i < 2; i++) { addresses.Add(TtcObjectConfig.TtcSpinningTriangleAddress + getOffset(i)); } for (int i = 0; i < 1; i++) { addresses.Add(TtcObjectConfig.TtcPitBlockAddress + getOffset(i)); } for (int i = 0; i < 2; i++) { addresses.Add(TtcObjectConfig.TtcHandAddress + getOffset(i)); } for (int i = 0; i < 14; i++) { addresses.Add(TtcObjectConfig.TtcSpinnerAddress + getOffset(i)); } for (int i = 0; i < 6; i++) { addresses.Add(TtcObjectConfig.TtcWheelAddress + getOffset(i)); } for (int i = 0; i < 2; i++) { addresses.Add(TtcObjectConfig.TtcElevatorAddress + getOffset(i)); } for (int i = 0; i < 1; i++) { addresses.Add(TtcObjectConfig.TtcCog2Address + getOffset(i)); } for (int i = 0; i < 2; i++) { addresses.Add(TtcObjectConfig.TtcTreadmill2Address + getOffset(i)); } for (int i = 0; i < 1; i++) { addresses.Add(TtcObjectConfig.TtcThwompAddress + getOffset(i)); } for (int i = 0; i < 2; i++) { if (i == 0) { addresses.Add(TtcObjectConfig.TtcAmp1Address); } if (i == 1) { addresses.Add(TtcObjectConfig.TtcAmp2Address); } } List <ObjectDataModel> bobombs = Config.ObjectSlotsManager.GetLoadedObjectsWithName("Bob-omb"); bobombs.Sort((obj1, obj2) => { string label1 = Config.ObjectSlotsManager.GetSlotLabelFromObject(obj1); string label2 = Config.ObjectSlotsManager.GetSlotLabelFromObject(obj2); int pos1 = ParsingUtilities.ParseInt(label1); int pos2 = ParsingUtilities.ParseInt(label2); return(pos1 - pos2); }); for (int i = 0; i < bobombs.Count; i++) { addresses.Add(bobombs[i].Address); } return(addresses); }
public static List <TtcObject> CreateRngObjectsFromGame(TtcRng rng, List <int> dustFrames = null) { Func <int, uint> getOffset = (int i) => (uint)i * 0x260; List <TtcObject> rngObjects = new List <TtcObject>(); for (int i = 0; i < 6; i++) { rngObjects.Add(new TtcRotatingBlock(rng, TtcObjectConfig.TtcRotatingBlockAddress + getOffset(i)).SetIndex(i + 1)); } for (int i = 0; i < 2; i++) { rngObjects.Add(new TtcRotatingTriangularPrism(rng, TtcObjectConfig.TtcRotatingTriangularPrismAddress + getOffset(i)).SetIndex(i + 1)); } for (int i = 0; i < 4; i++) { rngObjects.Add(new TtcPendulum(rng, TtcObjectConfig.TtcPendulumAddress + getOffset(i)).SetIndex(i + 1)); } for (int i = 0; i < 5; i++) { rngObjects.Add(new TtcTreadmill(rng, TtcObjectConfig.TtcTreadmill1Address + getOffset(i)).SetIndex(i + 1)); } for (int i = 0; i < 12; i++) { rngObjects.Add(new TtcPusher(rng, TtcObjectConfig.TtcPusherAddress + getOffset(i)).SetIndex(i + 1)); } for (int i = 0; i < 5; i++) { rngObjects.Add(new TtcCog(rng, TtcObjectConfig.TtcCog1Address + getOffset(i)).SetIndex(i + 1)); } for (int i = 0; i < 2; i++) { rngObjects.Add(new TtcSpinningTriangle(rng, TtcObjectConfig.TtcSpinningTriangleAddress + getOffset(i)).SetIndex(i + 1)); } for (int i = 0; i < 1; i++) { rngObjects.Add(new TtcPitBlock(rng, TtcObjectConfig.TtcPitBlockAddress + getOffset(i)).SetIndex(i + 1)); } for (int i = 0; i < 2; i++) { rngObjects.Add(new TtcHand(rng, TtcObjectConfig.TtcHandAddress + getOffset(i)).SetIndex(i + 1)); } for (int i = 0; i < 14; i++) { rngObjects.Add(new TtcSpinner(rng, TtcObjectConfig.TtcSpinnerAddress + getOffset(i)).SetIndex(i + 1)); } for (int i = 0; i < 6; i++) { rngObjects.Add(new TtcWheel(rng, TtcObjectConfig.TtcWheelAddress + getOffset(i)).SetIndex(i + 1)); } for (int i = 0; i < 2; i++) { rngObjects.Add(new TtcElevator(rng, TtcObjectConfig.TtcElevatorAddress + getOffset(i)).SetIndex(i + 1)); } for (int i = 0; i < 1; i++) { rngObjects.Add(new TtcCog(rng, TtcObjectConfig.TtcCog2Address + getOffset(i)).SetIndex(i + 6)); } for (int i = 0; i < 2; i++) { rngObjects.Add(new TtcTreadmill(rng, TtcObjectConfig.TtcTreadmill2Address + getOffset(i)).SetIndex(i + 6)); } for (int i = 0; i < 1; i++) { rngObjects.Add(new TtcThwomp(rng, TtcObjectConfig.TtcThwompAddress + getOffset(i)).SetIndex(i + 1)); } for (int i = 0; i < 2; i++) { if (i == 0) { rngObjects.Add(new TtcAmp(rng, TtcObjectConfig.TtcAmp1Address).SetIndex(i + 1)); } if (i == 1) { rngObjects.Add(new TtcAmp(rng, TtcObjectConfig.TtcAmp2Address).SetIndex(i + 1)); } } List <ObjectDataModel> bobombs = Config.ObjectSlotsManager.GetLoadedObjectsWithName("Bob-omb"); bobombs.Sort((obj1, obj2) => { string label1 = Config.ObjectSlotsManager.GetSlotLabelFromObject(obj1); string label2 = Config.ObjectSlotsManager.GetSlotLabelFromObject(obj2); int pos1 = ParsingUtilities.ParseInt(label1); int pos2 = ParsingUtilities.ParseInt(label2); return(pos1 - pos2); }); for (int i = 0; i < bobombs.Count; i++) { rngObjects.Add(new TtcBobomb(rng, bobombs[i].Address).SetIndex(i + 1)); } for (int i = 0; i < 1; i++) { TtcDust dust = new TtcDust(rng).SetIndex(i + 1) as TtcDust; if (dustFrames != null) { dust.AddDustFrames(dustFrames); } rngObjects.Add(dust); } return(rngObjects); }
internal static ParsingResult TryParseChordName(Match match, NoteName rootNoteName, out Chord chord) { chord = null; // Quality?quality = null; var qualityGroup = match.Groups[ChordQualityGroupName]; if (qualityGroup.Success) { quality = GroupsQualities.FirstOrDefault(gq => match.Groups[gq.Key].Success).Value; } // var extensionIntervalNumber = -1; IntervalQuality?extensionIntervalQuality = null; var extensionGroup = match.Groups[ExtensionGroupName]; if (extensionGroup.Success && !string.IsNullOrWhiteSpace(extensionGroup.Value)) { if (match.Groups[ExtensionQualityGroupName].Success) { extensionIntervalQuality = GroupsExtensionQualities.FirstOrDefault(gq => match.Groups[gq.Key].Success).Value; } if (!ParsingUtilities.ParseInt(match, ExtensionNumberGroupName, -1, out extensionIntervalNumber) || extensionIntervalNumber < 5) { return(ParsingResult.Error(ExtensionNumberIsOutOfRange)); } } if (quality == Quality.HalfDiminished || quality == Quality.Dominant) { if (extensionIntervalNumber >= 0 && extensionIntervalNumber != 7) { return(ParsingResult.Error(HalfDiminishedOrDominantIsNotSeventh)); } if (extensionIntervalNumber < 0) { extensionIntervalNumber = 7; } } var extensionNotes = new List <NoteName>(); var extensionNumbers = new List <int>(); if (extensionIntervalNumber >= 0) { var extensionNotesDictionary = GetExtensionNotes(quality, rootNoteName, extensionIntervalNumber, extensionIntervalQuality); extensionNotes.AddRange(extensionNotesDictionary.Keys); extensionNumbers.AddRange(extensionNotesDictionary.Values); } if (quality == Quality.HalfDiminished) { quality = Quality.Diminished; } else if (quality == Quality.Dominant) { quality = Quality.Major; } if (quality == null) { quality = Quality.Major; } // var notes = new List <NoteName>(Chord.GetByTriad(rootNoteName, ChordQualities[quality.Value]).NotesNames); notes.AddRange(extensionNotes); extensionNumbers.InsertRange(0, new[] { 1, 3, 5 }); if (extensionIntervalNumber == 5) { notes.Clear(); notes.AddRange(new[] { rootNoteName, extensionNotes.First() }); extensionNumbers.Clear(); extensionNumbers.AddRange(new[] { 1, 5 }); } // var alteredToneGroup = match.Groups[AlteredToneGroupName]; if (alteredToneGroup.Success) { int alteredToneNumber; if (!ParsingUtilities.ParseInt(match, AlteredToneNumberGroupName, -1, out alteredToneNumber)) { return(ParsingResult.Error(AlteredToneNumberIsOutOfRange)); } var transposeBy = 0; var accidental = match.Groups[AlteredToneAccidentalGroupName].Value; switch (accidental) { case "#": case "+": transposeBy = 1; break; case "b": case "-": transposeBy = -1; break; } var maxExtensionNumber = extensionNumbers.Max(); if (maxExtensionNumber < alteredToneNumber) { var extensionNotesDictionary = GetExtensionNotes(quality, rootNoteName, alteredToneNumber, null) .Where(kv => kv.Value > maxExtensionNumber); notes.AddRange(extensionNotesDictionary.Select(kv => kv.Key)); extensionNumbers.AddRange(extensionNotesDictionary.Select(kv => kv.Value)); } var index = extensionNumbers.IndexOf(alteredToneNumber); if (index >= 0) { notes[index] = notes[index].Transpose(Interval.FromHalfSteps(transposeBy)); } } // var suspendedGroup = match.Groups[SuspendedGroupName]; if (suspendedGroup.Success) { int suspensionNumber; if (!ParsingUtilities.ParseInt(match, SuspendedNumberGroupName, -1, out suspensionNumber) || suspensionNumber != 2 && suspensionNumber != 4) { return(ParsingResult.Error(SuspensionNumberIsOutOfRange)); } var interval = suspensionNumber == 2 ? Interval.Get(IntervalQuality.Major, 2) : Interval.Get(IntervalQuality.Perfect, 4); notes[1] = rootNoteName.Transpose(interval); } // var addedToneGroup = match.Groups[AddedToneGroupName]; if (addedToneGroup.Success) { int addedToneNumber; if (!ParsingUtilities.ParseInt(match, AddedToneNumberGroupName, -1, out addedToneNumber)) { return(ParsingResult.Error(AddedToneNumberIsOutOfRange)); } var interval = Interval.IsPerfect(addedToneNumber) ? Interval.Get(IntervalQuality.Perfect, addedToneNumber) : Interval.Get(IntervalQuality.Major, addedToneNumber); notes.Add(rootNoteName.Transpose(interval)); } // var bassNoteNameGroup = match.Groups[BassNoteNameGroupName]; if (bassNoteNameGroup.Success) { NoteName bassNoteName; var bassNoteNameParsingResult = NoteNameParser.TryParse(bassNoteNameGroup.Value, out bassNoteName); if (bassNoteNameParsingResult.Status != ParsingStatus.Parsed) { return(bassNoteNameParsingResult); } notes.Insert(0, bassNoteName); } // chord = new Chord(notes); return(ParsingResult.Parsed); }
internal static ParsingResult TryParse(string input, out MusicalTimeSpan timeSpan) { timeSpan = null; if (string.IsNullOrWhiteSpace(input)) { return(ParsingResult.EmptyInputString); } var match = ParsingUtilities.Match(input, Patterns); if (match == null) { return(ParsingResult.NotMatched); } // Fraction long numerator; if (!ParsingUtilities.ParseLong(match, NumeratorGroupName, 1, out numerator)) { return(new ParsingResult(NumeratorIsOutOfRange)); } long denominator; if (!ParsingUtilities.ParseLong(match, DenominatorGroupName, 1, out denominator)) { return(new ParsingResult(DenominatorIsOutOfRange)); } var fractionMnemonicGroup = match.Groups[FractionMnemonicGroupName]; if (fractionMnemonicGroup.Success) { var fractionDefinition = Fractions[fractionMnemonicGroup.Value]; numerator = fractionDefinition.Item1; denominator = fractionDefinition.Item2; } // Tuplet int tupletNotesCount; if (!ParsingUtilities.ParseInt(match, TupletNotesCountGroupName, 1, out tupletNotesCount)) { return(new ParsingResult(TupletNotesCountIsOutOfRange)); } int tupletSpaceSize; if (!ParsingUtilities.ParseInt(match, TupletSpaceSizeGroupName, 1, out tupletSpaceSize)) { return(new ParsingResult(TupletSpaceSizeIsOutOfRange)); } var tupletMnemonicGroup = match.Groups[TupletMnemonicGroupName]; if (tupletMnemonicGroup.Success) { var tupletDefinition = Tuplets[tupletMnemonicGroup.Value]; tupletNotesCount = tupletDefinition.Item1; tupletSpaceSize = tupletDefinition.Item2; } // Dots var dotsGroup = match.Groups[DotsGroupName]; var dots = dotsGroup.Success ? dotsGroup.Value.Length : 0; // timeSpan = new MusicalTimeSpan(numerator, denominator).Dotted(dots).Tuplet(tupletNotesCount, tupletSpaceSize); return(ParsingResult.Parsed); }
private void AddItemsToContextMenuStrip() { ToolStripMenuItem resetVariablesItem = new ToolStripMenuItem("Reset Variables"); resetVariablesItem.Click += (sender, e) => ResetVariables(); ToolStripMenuItem clearAllButHighlightedItem = new ToolStripMenuItem("Clear All But Highlighted"); clearAllButHighlightedItem.Click += (sender, e) => ClearAllButHighlightedVariables(); ToolStripMenuItem fixVerticalScrollItem = new ToolStripMenuItem("Fix Vertical Scroll"); fixVerticalScrollItem.Click += (sender, e) => FixVerticalScroll(); ToolStripMenuItem addCustomVariablesItem = new ToolStripMenuItem("Add Custom Variables"); addCustomVariablesItem.Click += (sender, e) => { VariableCreationForm form = new VariableCreationForm(); form.Initialize(this); form.Show(); }; ToolStripMenuItem addMappingVariablesItem = new ToolStripMenuItem("Add Mapping Variables"); addMappingVariablesItem.Click += (sender, e) => AddVariables(MappingConfig.GetVariables()); ToolStripMenuItem addDummyVariableItem = new ToolStripMenuItem("Add Dummy Variable..."); List <string> types = new List <string>(TypeUtilities.InGameTypeList); types.Add("string"); foreach (string typeString in types) { ToolStripMenuItem typeItem = new ToolStripMenuItem(typeString); addDummyVariableItem.DropDownItems.Add(typeItem); typeItem.Click += (sender, e) => { int numEntries = 1; if (KeyboardUtilities.IsCtrlHeld()) { string numEntriesString = DialogUtilities.GetStringFromDialog(labelText: "Enter Num Vars:"); if (numEntriesString == null) { return; } int parsed = ParsingUtilities.ParseInt(numEntriesString); parsed = Math.Max(parsed, 0); numEntries = parsed; } List <WatchVariableControl> controls = new List <WatchVariableControl>(); for (int i = 0; i < numEntries; i++) { string specialType = WatchVariableSpecialUtilities.AddDummyEntry(typeString); WatchVariable watchVariable = new WatchVariable( name: specialType, memoryTypeName: null, specialType: specialType, baseAddressType: BaseAddressTypeEnum.None, offsetUS: null, offsetJP: null, offsetSH: null, offsetEU: null, offsetDefault: null, mask: null, shift: null, handleMapping: true); WatchVariableControlPrecursor precursor = new WatchVariableControlPrecursor( name: specialType, watchVar: watchVariable, subclass: typeString == "string" ? WatchVariableSubclass.String : WatchVariableSubclass.Number, backgroundColor: null, displayType: null, roundingLimit: null, useHex: null, invertBool: null, isYaw: null, coordinate: null, groupList: new List <VariableGroup>() { VariableGroup.Custom }); WatchVariableControl control = precursor.CreateWatchVariableControl(); controls.Add(control); } AddVariables(controls); }; } ToolStripMenuItem openSaveClearItem = new ToolStripMenuItem("Open / Save / Clear ..."); ControlUtilities.AddDropDownItems( openSaveClearItem, new List <string>() { "Open", "Open as Pop Out", "Save in Place", "Save As", "Clear" }, new List <Action>() { () => OpenVariables(), () => OpenVariablesAsPopOut(), () => SaveVariablesInPlace(), () => SaveVariables(), () => ClearVariables(), }); ToolStripMenuItem doToAllVariablesItem = new ToolStripMenuItem("Do to all variables..."); WatchVariableSelectionUtilities.CreateSelectionToolStripItems( () => GetCurrentVariableControls(), this) .ForEach(item => doToAllVariablesItem.DropDownItems.Add(item)); ToolStripMenuItem filterVariablesItem = new ToolStripMenuItem("Filter Variables..."); _filteringDropDownItems = _allGroups.ConvertAll(varGroup => CreateFilterItem(varGroup)); UpdateFilterItemCheckedStatuses(); _filteringDropDownItems.ForEach(item => filterVariablesItem.DropDownItems.Add(item)); filterVariablesItem.DropDown.MouseEnter += (sender, e) => { filterVariablesItem.DropDown.AutoClose = false; }; filterVariablesItem.DropDown.MouseLeave += (sender, e) => { filterVariablesItem.DropDown.AutoClose = true; filterVariablesItem.DropDown.Close(); }; ContextMenuStrip.Items.Add(resetVariablesItem); ContextMenuStrip.Items.Add(clearAllButHighlightedItem); ContextMenuStrip.Items.Add(fixVerticalScrollItem); ContextMenuStrip.Items.Add(addCustomVariablesItem); ContextMenuStrip.Items.Add(addMappingVariablesItem); ContextMenuStrip.Items.Add(addDummyVariableItem); ContextMenuStrip.Items.Add(openSaveClearItem); ContextMenuStrip.Items.Add(doToAllVariablesItem); ContextMenuStrip.Items.Add(filterVariablesItem); }