Skip to content
This repository was archived by the owner on Jan 24, 2023. It is now read-only.

Commit eb44862

Browse files
committed
Fixed not being able to recreate a wing menu after it has been destroyed.
1 parent 06d2c47 commit eb44862

File tree

3 files changed

+29
-5
lines changed

3 files changed

+29
-5
lines changed

UI/UiElement.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ public UiElement(GameObject original, Transform parent, string name, bool defaul
4848
RectTransform = GameObject.GetComponent<RectTransform>();
4949
}
5050

51-
public void Destroy()
51+
public virtual void Destroy()
5252
{
5353
Object.Destroy(GameObject);
5454
}

UI/Wings/ReMirroredWingMenu.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,8 +74,8 @@ public ReMirroredWingMenu AddSubMenu(string text, string tooltip, Sprite sprite
7474

7575
public void Destroy()
7676
{
77-
UnityEngine.Object.Destroy(_leftMenu.GameObject);
78-
UnityEngine.Object.Destroy(_rightMenu.GameObject);
77+
_leftMenu.Destroy();
78+
_rightMenu.Destroy();
7979

8080
_leftMenu = null;
8181
_rightMenu = null;

UI/Wings/ReWingMenu.cs

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ private static GameObject WingMenuPrefab
3737

3838
private readonly Wing _wing;
3939
private readonly string _menuName;
40-
40+
4141
public ReWingMenu(string text, bool left = true) : base(WingMenuPrefab, (left ? QuickMenuEx.LeftWing : QuickMenuEx.RightWing).field_Public_RectTransform_0, text, false)
4242
{
4343
_menuName = GetCleanName(text);
@@ -82,31 +82,55 @@ public ReWingMenu(string text, bool left = true) : base(WingMenuPrefab, (left ?
8282
uiPage.field_Private_Boolean_1 = true;
8383
uiPage.field_Protected_MenuStateController_0 = menuStateCtrl;
8484
uiPage.field_Private_List_1_UIPage_0 = new Il2CppSystem.Collections.Generic.List<UIPage>();
85-
uiPage.field_Private_List_1_UIPage_0.Add(uiPage);
85+
uiPage.field_Private_List_1_UIPage_0.Add(uiPage); // what is this for? I forgot
8686

8787
menuStateCtrl.field_Private_Dictionary_2_String_UIPage_0.Add(uiPage.field_Public_String_0, uiPage);
8888
}
8989

9090
public void Open()
9191
{
92+
if (!GameObject)
93+
throw new NullReferenceException("This wing menu has been destroyed.");
94+
9295
_wing.field_Private_MenuStateController_0.PushPage(_menuName);
9396
}
9497

9598
public ReWingButton AddButton(string text, string tooltip, Action onClick, Sprite sprite = null, bool arrow = true, bool background = true, bool separator = false)
9699
{
100+
if (!GameObject)
101+
throw new NullReferenceException("This wing menu has been destroyed.");
102+
97103
return new ReWingButton(text, tooltip, onClick, Container, sprite, arrow, background, separator);
98104
}
99105

100106
public ReWingToggle AddToggle(string text, string tooltip, Action<bool> onToggle, bool defaultValue = false)
101107
{
108+
if (!GameObject)
109+
throw new NullReferenceException("This wing menu has been destroyed.");
110+
102111
return new ReWingToggle(text, tooltip, onToggle, Container, defaultValue);
103112
}
104113

105114
public ReWingMenu AddSubMenu(string text, string tooltip)
106115
{
116+
if (!GameObject)
117+
throw new NullReferenceException("This wing menu has been destroyed.");
118+
107119
var menu = new ReWingMenu(text, _wing._wingType == WingType.Left);
108120
AddButton(text, tooltip, menu.Open);
109121
return menu;
110122
}
123+
124+
public override void Destroy()
125+
{
126+
if (!GameObject)
127+
return;
128+
129+
var menuStateCtrl = _wing.GetComponent<MenuStateController>();
130+
var uiPage = GameObject.GetComponent<UIPage>();
131+
menuStateCtrl.field_Private_Dictionary_2_String_UIPage_0.Remove(uiPage.field_Public_String_0);
132+
133+
UnityEngine.Object.Destroy(GameObject);
134+
}
111135
}
112136
}

0 commit comments

Comments
 (0)