Skip to content

Commit 8fff8bf

Browse files
committed
Refactored the state pattern by setting the enum for which state inside of the script instead of from the inspector
1 parent 3e93c11 commit 8fff8bf

File tree

6 files changed

+30
-9
lines changed

6 files changed

+30
-9
lines changed

Assets/Patterns/6. State/Menu/Scripts/MenuController.cs

+3-6
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,9 @@ void Start()
4040
continue;
4141
}
4242

43+
//Inject a reference to this script into all menus
44+
menu.InitState(menuController: this);
45+
4346
//Check if this key already exists, because it means we have forgotten to give a menu its unique key
4447
if (menuDictionary.ContainsKey(menu.state))
4548
{
@@ -51,12 +54,6 @@ void Start()
5154
menuDictionary.Add(menu.state, menu);
5255
}
5356

54-
//Inject a reference to this script into all menus
55-
foreach (MenuState state in menuDictionary.Keys)
56-
{
57-
menuDictionary[state].InitState(menuController: this);
58-
}
59-
6057
//Deactivate all menus
6158
foreach (MenuState state in menuDictionary.Keys)
6259
{

Assets/Patterns/6. State/Menu/Scripts/State/GameMenu.cs

+6
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,11 @@ namespace State.Menu
77
public class GameMenu : _MenuState
88
{
99
//Specific for this state
10+
public override void InitState(MenuController menuController)
11+
{
12+
base.InitState(menuController);
13+
14+
state = MenuController.MenuState.Game;
15+
}
1016
}
1117
}

Assets/Patterns/6. State/Menu/Scripts/State/HelpMenu.cs

+6
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,11 @@ namespace State.Menu
77
public class HelpMenu : _MenuState
88
{
99
//Specific for this state
10+
public override void InitState(MenuController menuController)
11+
{
12+
base.InitState(menuController);
13+
14+
state = MenuController.MenuState.Help;
15+
}
1016
}
1117
}

Assets/Patterns/6. State/Menu/Scripts/State/MainMenu.cs

+7
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,13 @@ namespace State.Menu
77
public class MainMenu : _MenuState
88
{
99
//Specific for this state
10+
public override void InitState(MenuController menuController)
11+
{
12+
base.InitState(menuController);
13+
14+
state = MenuController.MenuState.Main;
15+
}
16+
1017
public void JumpToSettings()
1118
{
1219
menuController.SetActiveState(MenuController.MenuState.Settings);

Assets/Patterns/6. State/Menu/Scripts/State/SettingsMenu.cs

+5
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,11 @@ namespace State.Menu
77
public class SettingsMenu : _MenuState
88
{
99
//Specific for this state
10+
public override void InitState(MenuController menuController)
11+
{
12+
base.InitState(menuController);
1013

14+
state = MenuController.MenuState.Settings;
15+
}
1116
}
1217
}

Assets/Patterns/6. State/Menu/Scripts/State/_MenuState.cs

+3-3
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,15 @@ namespace State.Menu
77
//This is the parent class to all states
88
public class _MenuState : MonoBehaviour
99
{
10-
//Which state is this? You have to manually set it in the inspector (you could also set it from the child)
11-
public MenuController.MenuState state;
10+
//Which state is this?
11+
public MenuController.MenuState state { get; protected set; }
1212

1313

1414
protected MenuController menuController;
1515

1616

1717
//Dependency injection of the MenuController to make it easier to reference it from each menu
18-
public void InitState(MenuController menuController)
18+
public virtual void InitState(MenuController menuController)
1919
{
2020
this.menuController = menuController;
2121
}

0 commit comments

Comments
 (0)