Implement Fort Fight minigame (#75)

Co-authored-by: Michal Pikulski <michal.a.pikulski@gmail.com>
Reviewed-on: #75
This commit is contained in:
2025-12-04 01:18:29 +00:00
parent bb8d600af2
commit e60d516e7e
127 changed files with 21544 additions and 128 deletions

View File

@@ -13,17 +13,19 @@ namespace AppleHills.Editor
private static PlayerFollowerSettings _playerFollowerSettings;
private static InteractionSettings _interactionSettings;
private static DivingMinigameSettings _divingMinigameSettings;
private static Minigames.FortFight.Core.FortFightSettings _fortFightSettings;
// Static constructor will be called when Unity loads/reloads scripts
static EditorSettingsProvider()
{
LoadAllSettings();
// Set up the delegates in SettingsAccess
// Set up the delegates in SettingsAccess (includes Fort Fight)
AppleHills.SettingsAccess.SetupEditorProviders(
GetPlayerStopDistance,
GetPlayerStopDistanceDirectInteraction,
GetPuzzlePromptRange
GetPuzzlePromptRange,
GetWeakPointExplosionRadius
);
// Subscribe to asset changes to auto-refresh when settings are modified
@@ -55,12 +57,14 @@ namespace AppleHills.Editor
_playerFollowerSettings = AssetDatabase.LoadAssetAtPath<PlayerFollowerSettings>("Assets/Settings/PlayerFollowerSettings.asset");
_interactionSettings = AssetDatabase.LoadAssetAtPath<InteractionSettings>("Assets/Settings/InteractionSettings.asset");
_divingMinigameSettings = AssetDatabase.LoadAssetAtPath<DivingMinigameSettings>("Assets/Settings/MinigameSettings.asset");
_fortFightSettings = AssetDatabase.LoadAssetAtPath<Minigames.FortFight.Core.FortFightSettings>("Assets/Settings/FortFightSettings.asset");
// Re-register the delegates in case they were lost
AppleHills.SettingsAccess.SetupEditorProviders(
GetPlayerStopDistance,
GetPlayerStopDistanceDirectInteraction,
GetPuzzlePromptRange
GetPuzzlePromptRange,
GetWeakPointExplosionRadius
);
Logging.Debug("Editor settings loaded for Scene View use");
@@ -88,6 +92,12 @@ namespace AppleHills.Editor
return _interactionSettings?.DefaultPuzzlePromptRange ?? 3.0f;
}
// Fort Fight delegate methods
private static float GetWeakPointExplosionRadius()
{
return _fortFightSettings?.WeakPointExplosionRadius ?? 2.5f;
}
// Other utility methods
public static T GetSettings<T>() where T : BaseSettings
{
@@ -97,6 +107,8 @@ namespace AppleHills.Editor
return _interactionSettings as T;
else if (typeof(T) == typeof(DivingMinigameSettings))
return _divingMinigameSettings as T;
else if (typeof(T) == typeof(Minigames.FortFight.Core.FortFightSettings))
return _fortFightSettings as T;
return null;
}

View File

@@ -10,7 +10,7 @@ namespace AppleHills.Core.Settings.Editor
{
private Vector2 scrollPosition;
private List<BaseSettings> allSettings = new List<BaseSettings>();
private string[] tabNames = new string[] { "Player & Follower", "Interaction & Items", "Diving Minigame", "Card System", "Card Sorting", "Bird Pooper", "Statue Dressup" };
private string[] tabNames = new string[] { "Player & Follower", "Interaction & Items", "Diving Minigame", "Card System", "Card Sorting", "Bird Pooper", "Statue Dressup", "Fort Fight" };
private int selectedTab = 0;
private Dictionary<string, SerializedObject> serializedSettingsObjects = new Dictionary<string, SerializedObject>();
private GUIStyle headerStyle;
@@ -52,6 +52,7 @@ namespace AppleHills.Core.Settings.Editor
CreateSettingsIfMissing<CardSortingSettings>("CardSortingSettings");
CreateSettingsIfMissing<BirdPooperSettings>("BirdPooperSettings");
CreateSettingsIfMissing<StatueDressupSettings>("StatueDressupSettings");
CreateSettingsIfMissing<Minigames.FortFight.Core.FortFightSettings>("FortFightSettings");
}
private void CreateSettingsIfMissing<T>(string fileName) where T : BaseSettings
@@ -130,6 +131,9 @@ namespace AppleHills.Core.Settings.Editor
case 6: // Statue Dressup
DrawSettingsEditor<StatueDressupSettings>();
break;
case 7: // Fort Fight
DrawSettingsEditor<Minigames.FortFight.Core.FortFightSettings>();
break;
}
EditorGUILayout.EndScrollView();