public OptionsManager(TabPage tabControl) { // rom version GroupBox groupBoxRomVersion = tabControl.Controls["groupBoxRomVersion"] as GroupBox; RadioButton radioButtonRomVersionUS = groupBoxRomVersion.Controls["radioButtonRomVersionUS"] as RadioButton; radioButtonRomVersionUS.Checked = Config.Version == RomVersion.US; radioButtonRomVersionUS.Click += (sender, e) => { Config.Version = RomVersion.US; }; RadioButton radioButtonRomVersionJP = groupBoxRomVersion.Controls["radioButtonRomVersionJP"] as RadioButton; radioButtonRomVersionJP.Checked = Config.Version == RomVersion.JP; radioButtonRomVersionJP.Click += (sender, e) => { Config.Version = RomVersion.JP; }; RadioButton radioButtonRomVersionPAL = groupBoxRomVersion.Controls["radioButtonRomVersionPAL"] as RadioButton; radioButtonRomVersionPAL.Checked = Config.Version == RomVersion.PAL; radioButtonRomVersionPAL.Click += (sender, e) => { Config.Version = RomVersion.PAL; }; // goto/retrieve offsets GroupBox groupBoxGotoRetrieveOffsets = tabControl.Controls["groupBoxGotoRetrieveOffsets"] as GroupBox; BetterTextbox textBoxGotoAbove = groupBoxGotoRetrieveOffsets.Controls["textBoxGotoAbove"] as BetterTextbox; textBoxGotoAbove.LostFocus += (sender, e) => textBoxGotoRetrieve_LostFocus( sender, ref GotoRetrieveConfig.GotoAboveOffset, GotoRetrieveConfig.GotoAboveDefault); BetterTextbox textBoxGotoInfront = groupBoxGotoRetrieveOffsets.Controls["textBoxGotoInfront"] as BetterTextbox; textBoxGotoInfront.LostFocus += (sender, e) => textBoxGotoRetrieve_LostFocus( sender, ref GotoRetrieveConfig.GotoInfrontOffset, GotoRetrieveConfig.GotoInfrontDefault); BetterTextbox textBoxRetrieveAbove = groupBoxGotoRetrieveOffsets.Controls["textBoxRetrieveAbove"] as BetterTextbox; textBoxRetrieveAbove.LostFocus += (sender, e) => textBoxGotoRetrieve_LostFocus( sender, ref GotoRetrieveConfig.RetrieveAboveOffset, GotoRetrieveConfig.RetrieveAboveDefault); BetterTextbox textBoxRetrieveInfront = groupBoxGotoRetrieveOffsets.Controls["textBoxRetrieveInfront"] as BetterTextbox; textBoxRetrieveInfront.LostFocus += (sender, e) => textBoxGotoRetrieve_LostFocus( sender, ref GotoRetrieveConfig.RetrieveInfrontOffset, GotoRetrieveConfig.RetrieveInfrontDefault); // position controller relative angle GroupBox groupBoxPositionControllerRelativeAngle = tabControl.Controls["groupBoxPositionControllerRelativeAngle"] as GroupBox; RadioButton radioButtonPositionControllerRelativeAngleRecommended = groupBoxPositionControllerRelativeAngle.Controls["radioButtonPositionControllerRelativeAngleRecommended"] as RadioButton; radioButtonPositionControllerRelativeAngleRecommended.Click += (sender, e) => PositionControllerRelativityConfig.Relativity = PositionControllerRelativity.Recommended; RadioButton radioButtonPositionControllerRelativeAngleMario = groupBoxPositionControllerRelativeAngle.Controls["radioButtonPositionControllerRelativeAngleMario"] as RadioButton; radioButtonPositionControllerRelativeAngleMario.Click += (sender, e) => PositionControllerRelativityConfig.Relativity = PositionControllerRelativity.Mario; RadioButton radioButtonPositionControllerRelativeAngleCustom = groupBoxPositionControllerRelativeAngle.Controls["radioButtonPositionControllerRelativeAngleCustom"] as RadioButton; radioButtonPositionControllerRelativeAngleCustom.Click += (sender, e) => PositionControllerRelativityConfig.Relativity = PositionControllerRelativity.Custom; BetterTextbox textBoxPositionControllerRelativeAngleCustom = groupBoxPositionControllerRelativeAngle.Controls["textBoxPositionControllerRelativeAngleCustom"] as BetterTextbox; textBoxPositionControllerRelativeAngleCustom.LostFocus += (sender, e) => { double value; if (double.TryParse((sender as TextBox).Text, out value)) { PositionControllerRelativityConfig.CustomAngle = value; } else { (sender as TextBox).Text = PositionControllerRelativityConfig.CustomAngle.ToString(); } }; // object slot overlays GroupBox groupBoxShowOverlay = tabControl.Controls["groupBoxShowOverlay"] as GroupBox; List <CheckBox> overlaysCheckboxes = new List <CheckBox>(); CheckBox checkBoxShowOverlayHeldObject = groupBoxShowOverlay.Controls["checkBoxShowOverlayHeldObject"] as CheckBox; checkBoxShowOverlayHeldObject.CheckedChanged += (sender, e) => OverlayConfig.ShowOverlayHeldObject = checkBoxShowOverlayHeldObject.Checked; overlaysCheckboxes.Add(checkBoxShowOverlayHeldObject); CheckBox checkBoxShowOverlayStoodOnObject = groupBoxShowOverlay.Controls["checkBoxShowOverlayStoodOnObject"] as CheckBox; checkBoxShowOverlayStoodOnObject.CheckedChanged += (sender, e) => OverlayConfig.ShowOverlayStoodOnObject = checkBoxShowOverlayStoodOnObject.Checked; overlaysCheckboxes.Add(checkBoxShowOverlayStoodOnObject); CheckBox checkBoxShowOverlayInteractionObject = groupBoxShowOverlay.Controls["checkBoxShowOverlayInteractionObject"] as CheckBox; checkBoxShowOverlayInteractionObject.CheckedChanged += (sender, e) => OverlayConfig.ShowOverlayInteractionObject = checkBoxShowOverlayInteractionObject.Checked; overlaysCheckboxes.Add(checkBoxShowOverlayInteractionObject); CheckBox checkBoxShowOverlayUsedObject = groupBoxShowOverlay.Controls["checkBoxShowOverlayUsedObject"] as CheckBox; checkBoxShowOverlayUsedObject.CheckedChanged += (sender, e) => OverlayConfig.ShowOverlayUsedObject = checkBoxShowOverlayUsedObject.Checked; overlaysCheckboxes.Add(checkBoxShowOverlayUsedObject); CheckBox checkBoxShowOverlayClosestObject = groupBoxShowOverlay.Controls["checkBoxShowOverlayClosestObject"] as CheckBox; checkBoxShowOverlayClosestObject.CheckedChanged += (sender, e) => OverlayConfig.ShowOverlayClosestObject = checkBoxShowOverlayClosestObject.Checked; overlaysCheckboxes.Add(checkBoxShowOverlayClosestObject); CheckBox checkBoxShowOverlayCameraObject = groupBoxShowOverlay.Controls["checkBoxShowOverlayCameraObject"] as CheckBox; checkBoxShowOverlayCameraObject.CheckedChanged += (sender, e) => OverlayConfig.ShowOverlayCameraObject = checkBoxShowOverlayCameraObject.Checked; overlaysCheckboxes.Add(checkBoxShowOverlayCameraObject); CheckBox checkBoxShowOverlayCameraHackObject = groupBoxShowOverlay.Controls["checkBoxShowOverlayCameraHackObject"] as CheckBox; checkBoxShowOverlayCameraHackObject.CheckedChanged += (sender, e) => OverlayConfig.ShowOverlayCameraHackObject = checkBoxShowOverlayCameraHackObject.Checked; overlaysCheckboxes.Add(checkBoxShowOverlayCameraHackObject); CheckBox checkBoxShowOverlayFloorObject = groupBoxShowOverlay.Controls["checkBoxShowOverlayFloorObject"] as CheckBox; checkBoxShowOverlayFloorObject.CheckedChanged += (sender, e) => OverlayConfig.ShowOverlayFloorObject = checkBoxShowOverlayFloorObject.Checked; overlaysCheckboxes.Add(checkBoxShowOverlayFloorObject); CheckBox checkBoxShowOverlayWallObject = groupBoxShowOverlay.Controls["checkBoxShowOverlayWallObject"] as CheckBox; checkBoxShowOverlayWallObject.CheckedChanged += (sender, e) => OverlayConfig.ShowOverlayWallObject = checkBoxShowOverlayWallObject.Checked; overlaysCheckboxes.Add(checkBoxShowOverlayWallObject); CheckBox checkBoxShowOverlayCeilingObject = groupBoxShowOverlay.Controls["checkBoxShowOverlayCeilingObject"] as CheckBox; checkBoxShowOverlayCeilingObject.CheckedChanged += (sender, e) => OverlayConfig.ShowOverlayCeilingObject = checkBoxShowOverlayCeilingObject.Checked; overlaysCheckboxes.Add(checkBoxShowOverlayCeilingObject); CheckBox checkBoxShowOverlayParentObject = groupBoxShowOverlay.Controls["checkBoxShowOverlayParentObject"] as CheckBox; checkBoxShowOverlayParentObject.CheckedChanged += (sender, e) => OverlayConfig.ShowOverlayParentObject = checkBoxShowOverlayParentObject.Checked; groupBoxShowOverlay.Click += (sender, e) => { bool newChecked = !overlaysCheckboxes.All(checkbox => checkbox.Checked); overlaysCheckboxes.ForEach(checkbox => checkbox.Checked = newChecked); }; // FPS GroupBox groupBoxFPS = tabControl.Controls["groupBoxFPS"] as GroupBox; BetterTextbox betterTextboxFPS = groupBoxFPS.Controls["betterTextboxFPS"] as BetterTextbox; betterTextboxFPS.AddLostFocusAction( () => { uint value; if (uint.TryParse(betterTextboxFPS.Text, out value)) { RefreshRateConfig.RefreshRateFreq = value; } else { betterTextboxFPS.Text = RefreshRateConfig.RefreshRateFreq.ToString(); } }); // miscellaneous CheckBox checkBoxStartSlotIndexOne = tabControl.Controls["checkBoxStartSlotIndexOne"] as CheckBox; checkBoxStartSlotIndexOne.Click += (sender, e) => OptionsConfig.SlotIndexsFromOne = checkBoxStartSlotIndexOne.Checked; CheckBox checkBoxMoveCamWithPu = tabControl.Controls["checkBoxMoveCamWithPu"] as CheckBox; checkBoxMoveCamWithPu.Click += (sender, e) => OptionsConfig.MoveCameraWithPu = checkBoxMoveCamWithPu.Checked; CheckBox checkBoxScaleDiagonalPositionControllerButtons = tabControl.Controls["checkBoxScaleDiagonalPositionControllerButtons"] as CheckBox; checkBoxScaleDiagonalPositionControllerButtons.Click += (sender, e) => OptionsConfig.ScaleDiagonalPositionControllerButtons = checkBoxScaleDiagonalPositionControllerButtons.Checked; CheckBox checkBoxExcludeDustForClosestObject = tabControl.Controls["checkBoxExcludeDustForClosestObject"] as CheckBox; checkBoxExcludeDustForClosestObject.Click += (sender, e) => OptionsConfig.ExcludeDustForClosestObject = checkBoxExcludeDustForClosestObject.Checked; CheckBox checkBoxNeutralizeTrianglesWith21 = tabControl.Controls["checkBoxNeutralizeTrianglesWith21"] as CheckBox; checkBoxNeutralizeTrianglesWith21.Click += (sender, e) => OptionsConfig.NeutralizeTrianglesWith21 = checkBoxNeutralizeTrianglesWith21.Checked; CheckBox checkBoxUseMisalignmentOffsetForDistanceToLine = tabControl.Controls["checkBoxUseMisalignmentOffsetForDistanceToLine"] as CheckBox; checkBoxUseMisalignmentOffsetForDistanceToLine.Click += (sender, e) => OptionsConfig.UseMisalignmentOffsetForDistanceToLine = checkBoxUseMisalignmentOffsetForDistanceToLine.Checked; }
public OptionsManager(TabPage tabControl, Control cogControl) { _savedSettingsTextList = new List <string>() { "Display Yaw Angles as Unsigned", "Variable Values Flush Right", "Start Slot Index From 1", "Offset Goto/Retrieve Functions", "PU Controller Moves Camera", "Scale Diagonal Position Controller Buttons", "Exclude Dust for Closest Object", "Use Misalignment Offset For Distance To Line", "Don't Round Values to 0", "Display as Hex Uses Memory", "Neutralize Triangles with 0x15", "Cloning Updates Holp Type", "Use In-Game Trig for Angle Logic", }; _savedSettingsGetterList = new List <Func <bool> >() { () => SavedSettingsConfig.DisplayYawAnglesAsUnsigned, () => SavedSettingsConfig.VariableValuesFlushRight, () => SavedSettingsConfig.StartSlotIndexsFromOne, () => SavedSettingsConfig.OffsetGotoRetrieveFunctions, () => SavedSettingsConfig.MoveCameraWithPu, () => SavedSettingsConfig.ScaleDiagonalPositionControllerButtons, () => SavedSettingsConfig.ExcludeDustForClosestObject, () => SavedSettingsConfig.UseMisalignmentOffsetForDistanceToLine, () => SavedSettingsConfig.DontRoundValuesToZero, () => SavedSettingsConfig.DisplayAsHexUsesMemory, () => SavedSettingsConfig.NeutralizeTrianglesWith0x15, () => SavedSettingsConfig.CloningUpdatesHolpType, () => SavedSettingsConfig.UseInGameTrigForAngleLogic, }; _savedSettingsSetterList = new List <Action <bool> >() { (bool value) => SavedSettingsConfig.DisplayYawAnglesAsUnsigned = value, (bool value) => SavedSettingsConfig.VariableValuesFlushRight = value, (bool value) => SavedSettingsConfig.StartSlotIndexsFromOne = value, (bool value) => SavedSettingsConfig.OffsetGotoRetrieveFunctions = value, (bool value) => SavedSettingsConfig.MoveCameraWithPu = value, (bool value) => SavedSettingsConfig.ScaleDiagonalPositionControllerButtons = value, (bool value) => SavedSettingsConfig.ExcludeDustForClosestObject = value, (bool value) => SavedSettingsConfig.UseMisalignmentOffsetForDistanceToLine = value, (bool value) => SavedSettingsConfig.DontRoundValuesToZero = value, (bool value) => SavedSettingsConfig.DisplayAsHexUsesMemory = value, (bool value) => SavedSettingsConfig.NeutralizeTrianglesWith0x15 = value, (bool value) => SavedSettingsConfig.CloningUpdatesHolpType = value, (bool value) => SavedSettingsConfig.UseInGameTrigForAngleLogic = value, }; _savedSettingsCheckedListBox = tabControl.Controls["checkedListBoxSavedSettings"] as CheckedListBox; for (int i = 0; i < _savedSettingsTextList.Count; i++) { _savedSettingsCheckedListBox.Items.Add(_savedSettingsTextList[i], _savedSettingsGetterList[i]()); } _savedSettingsCheckedListBox.ItemCheck += (sender, e) => { _savedSettingsSetterList[e.Index](e.NewValue == CheckState.Checked); }; Button buttonOptionsResetSavedSettings = tabControl.Controls["buttonOptionsResetSavedSettings"] as Button; buttonOptionsResetSavedSettings.Click += (sender, e) => SavedSettingsConfig.ResetSavedSettings(); _savedSettingsItemList = _savedSettingsTextList.ConvertAll(text => new ToolStripMenuItem(text)); for (int i = 0; i < _savedSettingsItemList.Count; i++) { ToolStripMenuItem item = _savedSettingsItemList[i]; Action <bool> setter = _savedSettingsSetterList[i]; Func <bool> getter = _savedSettingsGetterList[i]; item.Click += (sender, e) => { bool newValue = !getter(); setter(newValue); item.Checked = newValue; }; item.Checked = getter(); } ToolStripMenuItem resetSavedSettingsItem = new ToolStripMenuItem(buttonOptionsResetSavedSettings.Text); resetSavedSettingsItem.Click += (sender, e) => SavedSettingsConfig.ResetSavedSettings(); ToolStripMenuItem goToOptionsTabItem = new ToolStripMenuItem("Go to Options Tab"); goToOptionsTabItem.Click += (sender, e) => Config.TabControlMain.SelectedTab = Config.TabControlMain.TabPages["tabPageOptions"]; cogControl.ContextMenuStrip = new ContextMenuStrip(); cogControl.Click += (sender, e) => cogControl.ContextMenuStrip.Show(Cursor.Position); _savedSettingsItemList.ForEach(item => cogControl.ContextMenuStrip.Items.Add(item)); cogControl.ContextMenuStrip.Items.Add(new ToolStripSeparator()); cogControl.ContextMenuStrip.Items.Add(resetSavedSettingsItem); cogControl.ContextMenuStrip.Items.Add(goToOptionsTabItem); // goto/retrieve offsets GroupBox groupBoxGotoRetrieveOffsets = tabControl.Controls["groupBoxGotoRetrieveOffsets"] as GroupBox; BetterTextbox textBoxGotoAbove = groupBoxGotoRetrieveOffsets.Controls["textBoxGotoAbove"] as BetterTextbox; textBoxGotoAbove.LostFocus += (sender, e) => textBoxGotoRetrieve_LostFocus( sender, ref GotoRetrieveConfig.GotoAboveOffset, GotoRetrieveConfig.GotoAboveDefault); BetterTextbox textBoxGotoInfront = groupBoxGotoRetrieveOffsets.Controls["textBoxGotoInfront"] as BetterTextbox; textBoxGotoInfront.LostFocus += (sender, e) => textBoxGotoRetrieve_LostFocus( sender, ref GotoRetrieveConfig.GotoInfrontOffset, GotoRetrieveConfig.GotoInfrontDefault); BetterTextbox textBoxRetrieveAbove = groupBoxGotoRetrieveOffsets.Controls["textBoxRetrieveAbove"] as BetterTextbox; textBoxRetrieveAbove.LostFocus += (sender, e) => textBoxGotoRetrieve_LostFocus( sender, ref GotoRetrieveConfig.RetrieveAboveOffset, GotoRetrieveConfig.RetrieveAboveDefault); BetterTextbox textBoxRetrieveInfront = groupBoxGotoRetrieveOffsets.Controls["textBoxRetrieveInfront"] as BetterTextbox; textBoxRetrieveInfront.LostFocus += (sender, e) => textBoxGotoRetrieve_LostFocus( sender, ref GotoRetrieveConfig.RetrieveInfrontOffset, GotoRetrieveConfig.RetrieveInfrontDefault); // position controller relative angle GroupBox groupBoxPositionControllerRelativeAngle = tabControl.Controls["groupBoxPositionControllerRelativeAngle"] as GroupBox; RadioButton radioButtonPositionControllerRelativeAngleRecommended = groupBoxPositionControllerRelativeAngle.Controls["radioButtonPositionControllerRelativeAngleRecommended"] as RadioButton; radioButtonPositionControllerRelativeAngleRecommended.Click += (sender, e) => PositionControllerRelativityConfig.Relativity = PositionControllerRelativity.Recommended; RadioButton radioButtonPositionControllerRelativeAngleMario = groupBoxPositionControllerRelativeAngle.Controls["radioButtonPositionControllerRelativeAngleMario"] as RadioButton; radioButtonPositionControllerRelativeAngleMario.Click += (sender, e) => PositionControllerRelativityConfig.Relativity = PositionControllerRelativity.Mario; RadioButton radioButtonPositionControllerRelativeAngleCustom = groupBoxPositionControllerRelativeAngle.Controls["radioButtonPositionControllerRelativeAngleCustom"] as RadioButton; radioButtonPositionControllerRelativeAngleCustom.Click += (sender, e) => PositionControllerRelativityConfig.Relativity = PositionControllerRelativity.Custom; BetterTextbox textBoxPositionControllerRelativeAngleCustom = groupBoxPositionControllerRelativeAngle.Controls["textBoxPositionControllerRelativeAngleCustom"] as BetterTextbox; textBoxPositionControllerRelativeAngleCustom.LostFocus += (sender, e) => { double value; if (double.TryParse((sender as TextBox).Text, out value)) { PositionControllerRelativityConfig.CustomAngle = value; } else { (sender as TextBox).Text = PositionControllerRelativityConfig.CustomAngle.ToString(); } }; // object slot overlays List <string> objectSlotOverlayTextList = new List <string>() { "Held Object", "Stood On Object", "Ridden Object", "Interaction Object", "Used Object", "Closest Object", "Camera Object", "Camera Hack Object", "Floor Object", "Wall Object", "Ceiling Object", "Collision Object", "Parent Object", "Child Object", }; List <Func <bool> > objectSlotOverlayGetterList = new List <Func <bool> >() { () => OverlayConfig.ShowOverlayHeldObject, () => OverlayConfig.ShowOverlayStoodOnObject, () => OverlayConfig.ShowOverlayRiddenObject, () => OverlayConfig.ShowOverlayInteractionObject, () => OverlayConfig.ShowOverlayUsedObject, () => OverlayConfig.ShowOverlayClosestObject, () => OverlayConfig.ShowOverlayCameraObject, () => OverlayConfig.ShowOverlayCameraHackObject, () => OverlayConfig.ShowOverlayFloorObject, () => OverlayConfig.ShowOverlayWallObject, () => OverlayConfig.ShowOverlayCeilingObject, () => OverlayConfig.ShowOverlayCollisionObject, () => OverlayConfig.ShowOverlayParentObject, () => OverlayConfig.ShowOverlayChildObject, }; List <Action <bool> > objectSlotOverlaySetterList = new List <Action <bool> >() { (bool value) => OverlayConfig.ShowOverlayHeldObject = value, (bool value) => OverlayConfig.ShowOverlayStoodOnObject = value, (bool value) => OverlayConfig.ShowOverlayRiddenObject = value, (bool value) => OverlayConfig.ShowOverlayInteractionObject = value, (bool value) => OverlayConfig.ShowOverlayUsedObject = value, (bool value) => OverlayConfig.ShowOverlayClosestObject = value, (bool value) => OverlayConfig.ShowOverlayCameraObject = value, (bool value) => OverlayConfig.ShowOverlayCameraHackObject = value, (bool value) => OverlayConfig.ShowOverlayFloorObject = value, (bool value) => OverlayConfig.ShowOverlayWallObject = value, (bool value) => OverlayConfig.ShowOverlayCeilingObject = value, (bool value) => OverlayConfig.ShowOverlayCollisionObject = value, (bool value) => OverlayConfig.ShowOverlayParentObject = value, (bool value) => OverlayConfig.ShowOverlayChildObject = value, }; CheckedListBox checkedListBoxObjectSlotOverlaysToShow = tabControl.Controls["checkedListBoxObjectSlotOverlaysToShow"] as CheckedListBox; for (int i = 0; i < objectSlotOverlayTextList.Count; i++) { checkedListBoxObjectSlotOverlaysToShow.Items.Add(objectSlotOverlayTextList[i], objectSlotOverlayGetterList[i]()); } checkedListBoxObjectSlotOverlaysToShow.ItemCheck += (sender, e) => { objectSlotOverlaySetterList[e.Index](e.NewValue == CheckState.Checked); }; Action <bool> setAllObjectSlotOverlays = (bool value) => { int specialCount = 2; int totalCount = checkedListBoxObjectSlotOverlaysToShow.Items.Count; for (int i = 0; i < totalCount - specialCount; i++) { checkedListBoxObjectSlotOverlaysToShow.SetItemChecked(i, value); } }; ControlUtilities.AddContextMenuStripFunctions( checkedListBoxObjectSlotOverlaysToShow, new List <string>() { "Set All On", "Set All Off" }, new List <Action>() { () => setAllObjectSlotOverlays(true), () => setAllObjectSlotOverlays(false), }); // FPS GroupBox groupBoxFPS = tabControl.Controls["groupBoxFPS"] as GroupBox; BetterTextbox betterTextboxFPS = groupBoxFPS.Controls["betterTextboxFPS"] as BetterTextbox; betterTextboxFPS.AddLostFocusAction( () => { uint value; if (uint.TryParse(betterTextboxFPS.Text, out value)) { RefreshRateConfig.RefreshRateFreq = value; } else { betterTextboxFPS.Text = RefreshRateConfig.RefreshRateFreq.ToString(); } }); }