diff --git a/.idea/.idea.AppleHillsProduction/.idea/.gitignore b/.idea/.idea.AppleHillsProduction/.idea/.gitignore
deleted file mode 100644
index ba380b5b..00000000
--- a/.idea/.idea.AppleHillsProduction/.idea/.gitignore
+++ /dev/null
@@ -1,13 +0,0 @@
-# Default ignored files
-/shelf/
-/workspace.xml
-# Rider ignored files
-/modules.xml
-/projectSettingsUpdater.xml
-/contentModel.xml
-/.idea.AppleHillsProduction.iml
-# Editor-based HTTP Client requests
-/httpRequests/
-# Datasource local storage ignored files
-/dataSources/
-/dataSources.local.xml
diff --git a/.idea/.idea.AppleHillsProduction/.idea/encodings.xml b/.idea/.idea.AppleHillsProduction/.idea/encodings.xml
deleted file mode 100644
index df87cf95..00000000
--- a/.idea/.idea.AppleHillsProduction/.idea/encodings.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/.idea/.idea.AppleHillsProduction/.idea/indexLayout.xml b/.idea/.idea.AppleHillsProduction/.idea/indexLayout.xml
deleted file mode 100644
index 7b08163c..00000000
--- a/.idea/.idea.AppleHillsProduction/.idea/indexLayout.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/.idea.AppleHillsProduction/.idea/vcs.xml b/.idea/.idea.AppleHillsProduction/.idea/vcs.xml
deleted file mode 100644
index 35eb1ddf..00000000
--- a/.idea/.idea.AppleHillsProduction/.idea/vcs.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/Assets/AddressableAssetsData/AssetGroups/Settings.asset b/Assets/AddressableAssetsData/AssetGroups/Settings.asset
index cac13c80..a8802282 100644
--- a/Assets/AddressableAssetsData/AssetGroups/Settings.asset
+++ b/Assets/AddressableAssetsData/AssetGroups/Settings.asset
@@ -45,6 +45,11 @@ MonoBehaviour:
m_ReadOnly: 0
m_SerializedLabels: []
FlaggedDuringContentUpdateRestriction: 0
+ - m_GUID: 60eb7d51afc72e845836d38e77462855
+ m_Address: Settings/FortFightSettings
+ m_ReadOnly: 0
+ m_SerializedLabels: []
+ FlaggedDuringContentUpdateRestriction: 0
- m_GUID: 8f5195fb013895049a19488fd4d8f2a1
m_Address: Settings/InteractionSettings
m_ReadOnly: 0
diff --git a/Assets/Data/Minigames/FortFight.meta b/Assets/Data/Minigames/FortFight.meta
new file mode 100644
index 00000000..ef2138de
--- /dev/null
+++ b/Assets/Data/Minigames/FortFight.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 119c34a520b135848916bca00d03b9eb
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Data/Minigames/FortFight/CeilingFan.asset b/Assets/Data/Minigames/FortFight/CeilingFan.asset
new file mode 100644
index 00000000..597717d0
--- /dev/null
+++ b/Assets/Data/Minigames/FortFight/CeilingFan.asset
@@ -0,0 +1,20 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 973f02063e5446598db4cbffdbf8f113, type: 3}
+ m_Name: CeilingFan
+ m_EditorClassIdentifier: AppleHillsScripts::Minigames.FortFight.Data.ProjectileData
+ projectileName: CeilingFan
+ prefab: {fileID: 0}
+ baseDamage: 25
+ cooldownTime: 4
+ icon: {fileID: -765527507412255412, guid: f70246e6148769846aaea223ec0c2a55, type: 3}
+ description:
diff --git a/Assets/Data/Minigames/FortFight/CeilingFan.asset.meta b/Assets/Data/Minigames/FortFight/CeilingFan.asset.meta
new file mode 100644
index 00000000..c132b0b3
--- /dev/null
+++ b/Assets/Data/Minigames/FortFight/CeilingFan.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: ac7c85630db3d7246b832aea2e4c9191
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 11400000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Data/Minigames/FortFight/Toaster.asset b/Assets/Data/Minigames/FortFight/Toaster.asset
new file mode 100644
index 00000000..e3d2b87a
--- /dev/null
+++ b/Assets/Data/Minigames/FortFight/Toaster.asset
@@ -0,0 +1,20 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 973f02063e5446598db4cbffdbf8f113, type: 3}
+ m_Name: Toaster
+ m_EditorClassIdentifier: AppleHillsScripts::Minigames.FortFight.Data.ProjectileData
+ projectileName: Toaster
+ prefab: {fileID: 0}
+ baseDamage: 20
+ cooldownTime: 3
+ icon: {fileID: 6674386295937086461, guid: 3bd1c178a78fcd144965cd1731dc309b, type: 3}
+ description:
diff --git a/Assets/Data/Minigames/FortFight/Toaster.asset.meta b/Assets/Data/Minigames/FortFight/Toaster.asset.meta
new file mode 100644
index 00000000..2bbdaabb
--- /dev/null
+++ b/Assets/Data/Minigames/FortFight/Toaster.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: d84011b72b4f68342be14648246bc31b
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 11400000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Data/Minigames/FortFight/TrashBag.asset b/Assets/Data/Minigames/FortFight/TrashBag.asset
new file mode 100644
index 00000000..34341a89
--- /dev/null
+++ b/Assets/Data/Minigames/FortFight/TrashBag.asset
@@ -0,0 +1,20 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 973f02063e5446598db4cbffdbf8f113, type: 3}
+ m_Name: TrashBag
+ m_EditorClassIdentifier: AppleHillsScripts::Minigames.FortFight.Data.ProjectileData
+ projectileName: TrashBag
+ prefab: {fileID: 0}
+ baseDamage: 15
+ cooldownTime: 6
+ icon: {fileID: 3452003437791708593, guid: 4c13556eeb918624c9dd3d7e4086242e, type: 3}
+ description:
diff --git a/Assets/Data/Minigames/FortFight/TrashBag.asset.meta b/Assets/Data/Minigames/FortFight/TrashBag.asset.meta
new file mode 100644
index 00000000..35a6859a
--- /dev/null
+++ b/Assets/Data/Minigames/FortFight/TrashBag.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 23c4aa179d002af4080ec9d7fa22d2ba
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 11400000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Data/Minigames/FortFight/Vacumm.asset b/Assets/Data/Minigames/FortFight/Vacumm.asset
new file mode 100644
index 00000000..758c8f13
--- /dev/null
+++ b/Assets/Data/Minigames/FortFight/Vacumm.asset
@@ -0,0 +1,20 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 973f02063e5446598db4cbffdbf8f113, type: 3}
+ m_Name: Vacumm
+ m_EditorClassIdentifier: AppleHillsScripts::Minigames.FortFight.Data.ProjectileData
+ projectileName: Vacumm
+ prefab: {fileID: 0}
+ baseDamage: 30
+ cooldownTime: 5
+ icon: {fileID: 8766740682603709380, guid: b0a0abcb5fec95649b581307eca6a444, type: 3}
+ description:
diff --git a/Assets/Data/Minigames/FortFight/Vacumm.asset.meta b/Assets/Data/Minigames/FortFight/Vacumm.asset.meta
new file mode 100644
index 00000000..59c5b633
--- /dev/null
+++ b/Assets/Data/Minigames/FortFight/Vacumm.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 457fd1232d5781743a87fc2a308e9446
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 11400000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Data/Settings/SceneOrientationConfig.asset b/Assets/Data/Settings/SceneOrientationConfig.asset
index 830b7713..6fe6cc00 100644
--- a/Assets/Data/Settings/SceneOrientationConfig.asset
+++ b/Assets/Data/Settings/SceneOrientationConfig.asset
@@ -25,3 +25,5 @@ MonoBehaviour:
requiredOrientation: 1
- sceneName: StatueDecoration
requiredOrientation: 1
+ - sceneName: FortFight
+ requiredOrientation: 1
diff --git a/Assets/Editor/Settings/EditorSettingsProvider.cs b/Assets/Editor/Settings/EditorSettingsProvider.cs
index 356955b9..b1c436eb 100644
--- a/Assets/Editor/Settings/EditorSettingsProvider.cs
+++ b/Assets/Editor/Settings/EditorSettingsProvider.cs
@@ -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("Assets/Settings/PlayerFollowerSettings.asset");
_interactionSettings = AssetDatabase.LoadAssetAtPath("Assets/Settings/InteractionSettings.asset");
_divingMinigameSettings = AssetDatabase.LoadAssetAtPath("Assets/Settings/MinigameSettings.asset");
+ _fortFightSettings = AssetDatabase.LoadAssetAtPath("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() 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;
}
diff --git a/Assets/Editor/Settings/SettingsEditorWindow.cs b/Assets/Editor/Settings/SettingsEditorWindow.cs
index a17d1804..b69fb677 100644
--- a/Assets/Editor/Settings/SettingsEditorWindow.cs
+++ b/Assets/Editor/Settings/SettingsEditorWindow.cs
@@ -10,7 +10,7 @@ namespace AppleHills.Core.Settings.Editor
{
private Vector2 scrollPosition;
private List allSettings = new List();
- 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 serializedSettingsObjects = new Dictionary();
private GUIStyle headerStyle;
@@ -52,6 +52,7 @@ namespace AppleHills.Core.Settings.Editor
CreateSettingsIfMissing("CardSortingSettings");
CreateSettingsIfMissing("BirdPooperSettings");
CreateSettingsIfMissing("StatueDressupSettings");
+ CreateSettingsIfMissing("FortFightSettings");
}
private void CreateSettingsIfMissing(string fileName) where T : BaseSettings
@@ -130,6 +131,9 @@ namespace AppleHills.Core.Settings.Editor
case 6: // Statue Dressup
DrawSettingsEditor();
break;
+ case 7: // Fort Fight
+ DrawSettingsEditor();
+ break;
}
EditorGUILayout.EndScrollView();
diff --git a/Assets/Prefabs/Minigames/FortFight.meta b/Assets/Prefabs/Minigames/FortFight.meta
new file mode 100644
index 00000000..06344027
--- /dev/null
+++ b/Assets/Prefabs/Minigames/FortFight.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 44868bc8b3350d94fb55014db90c912d
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Prefabs/Minigames/FortFight/Blocks.meta b/Assets/Prefabs/Minigames/FortFight/Blocks.meta
new file mode 100644
index 00000000..712d57f0
--- /dev/null
+++ b/Assets/Prefabs/Minigames/FortFight/Blocks.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 4a1aef5c4f1311742ad0f7272dc50443
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Prefabs/Minigames/FortFight/Blocks/BaseBlock.prefab b/Assets/Prefabs/Minigames/FortFight/Blocks/BaseBlock.prefab
new file mode 100644
index 00000000..400ceaeb
--- /dev/null
+++ b/Assets/Prefabs/Minigames/FortFight/Blocks/BaseBlock.prefab
@@ -0,0 +1,220 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &7086906997932553204
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 4854439941706829338}
+ - component: {fileID: 1733951774359296854}
+ m_Layer: 0
+ m_Name: SpriteRenderer
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &4854439941706829338
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 7086906997932553204}
+ serializedVersion: 2
+ m_LocalRotation: {x: -0, y: -0, z: -0.0045017465, w: 0.99998987}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 2, y: 2, z: 2}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 6512041784125052745}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: -0.516}
+--- !u!212 &1733951774359296854
+SpriteRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 7086906997932553204}
+ m_Enabled: 1
+ m_CastShadows: 0
+ m_ReceiveShadows: 0
+ m_DynamicOccludee: 1
+ m_StaticShadowCaster: 0
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 0
+ m_RayTraceProcedural: 0
+ m_RayTracingAccelStructBuildFlagsOverride: 0
+ m_RayTracingAccelStructBuildFlags: 1
+ m_SmallMeshCulling: 1
+ m_ForceMeshLod: -1
+ m_MeshLodSelectionBias: 0
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 2100000, guid: 9dfc825aed78fcd4ba02077103263b40, type: 2}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 0
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_GlobalIlluminationMeshLod: 0
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+ m_Sprite: {fileID: -4331849829665928538, guid: 8be45455b29f80241a3b8aae36291752, type: 3}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_FlipX: 0
+ m_FlipY: 0
+ m_DrawMode: 0
+ m_Size: {x: 0.16, y: 0.16}
+ m_AdaptiveModeThreshold: 0.5
+ m_SpriteTileMode: 0
+ m_WasSpriteAssigned: 1
+ m_MaskInteraction: 0
+ m_SpriteSortPoint: 0
+--- !u!1 &7520512795364559713
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 6512041784125052745}
+ - component: {fileID: 2825398552764198077}
+ - component: {fileID: 3408275740391398529}
+ - component: {fileID: 7748443280095270292}
+ m_Layer: 0
+ m_Name: BaseBlock
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &6512041784125052745
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 7520512795364559713}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 4854439941706829338}
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!50 &2825398552764198077
+Rigidbody2D:
+ serializedVersion: 5
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 7520512795364559713}
+ m_BodyType: 0
+ m_Simulated: 1
+ m_UseFullKinematicContacts: 0
+ m_UseAutoMass: 0
+ m_Mass: 1
+ m_LinearDamping: 0
+ m_AngularDamping: 0.05
+ m_GravityScale: 1
+ m_Material: {fileID: 0}
+ m_IncludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_ExcludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_Interpolate: 0
+ m_SleepingMode: 1
+ m_CollisionDetection: 0
+ m_Constraints: 0
+--- !u!61 &3408275740391398529
+BoxCollider2D:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 7520512795364559713}
+ m_Enabled: 1
+ serializedVersion: 3
+ m_Density: 1
+ m_Material: {fileID: 0}
+ m_IncludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_ExcludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_LayerOverridePriority: 0
+ m_ForceSendLayers:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_ForceReceiveLayers:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_ContactCaptureLayers:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_CallbackLayers:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_IsTrigger: 0
+ m_UsedByEffector: 0
+ m_CompositeOperation: 0
+ m_CompositeOrder: 0
+ m_Offset: {x: 0.01736021, y: 0.008680344}
+ m_SpriteTilingProperty:
+ border: {x: 0, y: 0, z: 0, w: 0}
+ pivot: {x: 0, y: 0}
+ oldSize: {x: 0, y: 0}
+ newSize: {x: 0, y: 0}
+ adaptiveTilingThreshold: 0
+ drawMode: 0
+ adaptiveTiling: 0
+ m_AutoTiling: 0
+ m_Size: {x: 5.3053894, y: 2.093708}
+ m_EdgeRadius: 0
+--- !u!114 &7748443280095270292
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 7520512795364559713}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: ace8ce8bea324389a9955e63081ccff7, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: AppleHillsScripts::Minigames.FortFight.Fort.FortBlock
+ material: 0
+ size: 1
+ isWeakPoint: 0
+ explosionRadius: 2.5
+ explosionDamage: 50
+ weakPointVisualIndicator: {fileID: 0}
+ explosionEffectPrefab: {fileID: 0}
+ spriteRenderer: {fileID: 1733951774359296854}
diff --git a/Assets/Prefabs/Minigames/FortFight/Blocks/BaseBlock.prefab.meta b/Assets/Prefabs/Minigames/FortFight/Blocks/BaseBlock.prefab.meta
new file mode 100644
index 00000000..d1c48e2f
--- /dev/null
+++ b/Assets/Prefabs/Minigames/FortFight/Blocks/BaseBlock.prefab.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 415d91c38289d6d48b9e02617c0077ff
+PrefabImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Prefabs/Minigames/FortFight/Blocks/Block_Cardboard.prefab b/Assets/Prefabs/Minigames/FortFight/Blocks/Block_Cardboard.prefab
new file mode 100644
index 00000000..57d66d52
--- /dev/null
+++ b/Assets/Prefabs/Minigames/FortFight/Blocks/Block_Cardboard.prefab
@@ -0,0 +1,71 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1001 &5808897296274173900
+PrefabInstance:
+ m_ObjectHideFlags: 0
+ serializedVersion: 2
+ m_Modification:
+ serializedVersion: 3
+ m_TransformParent: {fileID: 0}
+ m_Modifications:
+ - target: {fileID: 1733951774359296854, guid: 415d91c38289d6d48b9e02617c0077ff, type: 3}
+ propertyPath: m_Color.b
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 1733951774359296854, guid: 415d91c38289d6d48b9e02617c0077ff, type: 3}
+ propertyPath: m_Color.g
+ value: 0.7391078
+ objectReference: {fileID: 0}
+ - target: {fileID: 1733951774359296854, guid: 415d91c38289d6d48b9e02617c0077ff, type: 3}
+ propertyPath: m_Color.r
+ value: 1
+ objectReference: {fileID: 0}
+ - target: {fileID: 6512041784125052745, guid: 415d91c38289d6d48b9e02617c0077ff, type: 3}
+ propertyPath: m_LocalPosition.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 6512041784125052745, guid: 415d91c38289d6d48b9e02617c0077ff, type: 3}
+ propertyPath: m_LocalPosition.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 6512041784125052745, guid: 415d91c38289d6d48b9e02617c0077ff, type: 3}
+ propertyPath: m_LocalPosition.z
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 6512041784125052745, guid: 415d91c38289d6d48b9e02617c0077ff, type: 3}
+ propertyPath: m_LocalRotation.w
+ value: 1
+ objectReference: {fileID: 0}
+ - target: {fileID: 6512041784125052745, guid: 415d91c38289d6d48b9e02617c0077ff, type: 3}
+ propertyPath: m_LocalRotation.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 6512041784125052745, guid: 415d91c38289d6d48b9e02617c0077ff, type: 3}
+ propertyPath: m_LocalRotation.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 6512041784125052745, guid: 415d91c38289d6d48b9e02617c0077ff, type: 3}
+ propertyPath: m_LocalRotation.z
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 6512041784125052745, guid: 415d91c38289d6d48b9e02617c0077ff, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 6512041784125052745, guid: 415d91c38289d6d48b9e02617c0077ff, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 6512041784125052745, guid: 415d91c38289d6d48b9e02617c0077ff, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.z
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 7520512795364559713, guid: 415d91c38289d6d48b9e02617c0077ff, type: 3}
+ propertyPath: m_Name
+ value: BaseBlock Variant
+ objectReference: {fileID: 0}
+ m_RemovedComponents: []
+ m_RemovedGameObjects: []
+ m_AddedGameObjects: []
+ m_AddedComponents: []
+ m_SourcePrefab: {fileID: 100100000, guid: 415d91c38289d6d48b9e02617c0077ff, type: 3}
diff --git a/Assets/Prefabs/Minigames/FortFight/Blocks/Block_Cardboard.prefab.meta b/Assets/Prefabs/Minigames/FortFight/Blocks/Block_Cardboard.prefab.meta
new file mode 100644
index 00000000..9d5a27e2
--- /dev/null
+++ b/Assets/Prefabs/Minigames/FortFight/Blocks/Block_Cardboard.prefab.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 2a284fee98d5d9043ac5a6ae12b9be4a
+PrefabImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Prefabs/Minigames/FortFight/Blocks/Block_Glass.prefab b/Assets/Prefabs/Minigames/FortFight/Blocks/Block_Glass.prefab
new file mode 100644
index 00000000..bfdad8c9
--- /dev/null
+++ b/Assets/Prefabs/Minigames/FortFight/Blocks/Block_Glass.prefab
@@ -0,0 +1,75 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1001 &3300878914999042762
+PrefabInstance:
+ m_ObjectHideFlags: 0
+ serializedVersion: 2
+ m_Modification:
+ serializedVersion: 3
+ m_TransformParent: {fileID: 0}
+ m_Modifications:
+ - target: {fileID: 1733951774359296854, guid: 415d91c38289d6d48b9e02617c0077ff, type: 3}
+ propertyPath: m_Color.b
+ value: 1
+ objectReference: {fileID: 0}
+ - target: {fileID: 1733951774359296854, guid: 415d91c38289d6d48b9e02617c0077ff, type: 3}
+ propertyPath: m_Color.g
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 1733951774359296854, guid: 415d91c38289d6d48b9e02617c0077ff, type: 3}
+ propertyPath: m_Color.r
+ value: 0.68275356
+ objectReference: {fileID: 0}
+ - target: {fileID: 6512041784125052745, guid: 415d91c38289d6d48b9e02617c0077ff, type: 3}
+ propertyPath: m_LocalPosition.x
+ value: -1.46451
+ objectReference: {fileID: 0}
+ - target: {fileID: 6512041784125052745, guid: 415d91c38289d6d48b9e02617c0077ff, type: 3}
+ propertyPath: m_LocalPosition.y
+ value: -0.36305
+ objectReference: {fileID: 0}
+ - target: {fileID: 6512041784125052745, guid: 415d91c38289d6d48b9e02617c0077ff, type: 3}
+ propertyPath: m_LocalPosition.z
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 6512041784125052745, guid: 415d91c38289d6d48b9e02617c0077ff, type: 3}
+ propertyPath: m_LocalRotation.w
+ value: 1
+ objectReference: {fileID: 0}
+ - target: {fileID: 6512041784125052745, guid: 415d91c38289d6d48b9e02617c0077ff, type: 3}
+ propertyPath: m_LocalRotation.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 6512041784125052745, guid: 415d91c38289d6d48b9e02617c0077ff, type: 3}
+ propertyPath: m_LocalRotation.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 6512041784125052745, guid: 415d91c38289d6d48b9e02617c0077ff, type: 3}
+ propertyPath: m_LocalRotation.z
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 6512041784125052745, guid: 415d91c38289d6d48b9e02617c0077ff, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 6512041784125052745, guid: 415d91c38289d6d48b9e02617c0077ff, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 6512041784125052745, guid: 415d91c38289d6d48b9e02617c0077ff, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.z
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 7520512795364559713, guid: 415d91c38289d6d48b9e02617c0077ff, type: 3}
+ propertyPath: m_Name
+ value: BaseBlock Variant
+ objectReference: {fileID: 0}
+ - target: {fileID: 7748443280095270292, guid: 415d91c38289d6d48b9e02617c0077ff, type: 3}
+ propertyPath: material
+ value: 2
+ objectReference: {fileID: 0}
+ m_RemovedComponents: []
+ m_RemovedGameObjects: []
+ m_AddedGameObjects: []
+ m_AddedComponents: []
+ m_SourcePrefab: {fileID: 100100000, guid: 415d91c38289d6d48b9e02617c0077ff, type: 3}
diff --git a/Assets/Prefabs/Minigames/FortFight/Blocks/Block_Glass.prefab.meta b/Assets/Prefabs/Minigames/FortFight/Blocks/Block_Glass.prefab.meta
new file mode 100644
index 00000000..17ab5c11
--- /dev/null
+++ b/Assets/Prefabs/Minigames/FortFight/Blocks/Block_Glass.prefab.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 39e9717047cc0594aad150b00f191858
+PrefabImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Prefabs/Minigames/FortFight/Blocks/Block_Steel.prefab b/Assets/Prefabs/Minigames/FortFight/Blocks/Block_Steel.prefab
new file mode 100644
index 00000000..b8066d14
--- /dev/null
+++ b/Assets/Prefabs/Minigames/FortFight/Blocks/Block_Steel.prefab
@@ -0,0 +1,79 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1001 &3542555417085833802
+PrefabInstance:
+ m_ObjectHideFlags: 0
+ serializedVersion: 2
+ m_Modification:
+ serializedVersion: 3
+ m_TransformParent: {fileID: 0}
+ m_Modifications:
+ - target: {fileID: 1733951774359296854, guid: 415d91c38289d6d48b9e02617c0077ff, type: 3}
+ propertyPath: m_Color.b
+ value: 0.990566
+ objectReference: {fileID: 0}
+ - target: {fileID: 1733951774359296854, guid: 415d91c38289d6d48b9e02617c0077ff, type: 3}
+ propertyPath: m_Color.g
+ value: 0.5618454
+ objectReference: {fileID: 0}
+ - target: {fileID: 1733951774359296854, guid: 415d91c38289d6d48b9e02617c0077ff, type: 3}
+ propertyPath: m_Color.r
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 6512041784125052745, guid: 415d91c38289d6d48b9e02617c0077ff, type: 3}
+ propertyPath: m_LocalPosition.x
+ value: -1.46451
+ objectReference: {fileID: 0}
+ - target: {fileID: 6512041784125052745, guid: 415d91c38289d6d48b9e02617c0077ff, type: 3}
+ propertyPath: m_LocalPosition.y
+ value: -0.36305
+ objectReference: {fileID: 0}
+ - target: {fileID: 6512041784125052745, guid: 415d91c38289d6d48b9e02617c0077ff, type: 3}
+ propertyPath: m_LocalPosition.z
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 6512041784125052745, guid: 415d91c38289d6d48b9e02617c0077ff, type: 3}
+ propertyPath: m_LocalRotation.w
+ value: 1
+ objectReference: {fileID: 0}
+ - target: {fileID: 6512041784125052745, guid: 415d91c38289d6d48b9e02617c0077ff, type: 3}
+ propertyPath: m_LocalRotation.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 6512041784125052745, guid: 415d91c38289d6d48b9e02617c0077ff, type: 3}
+ propertyPath: m_LocalRotation.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 6512041784125052745, guid: 415d91c38289d6d48b9e02617c0077ff, type: 3}
+ propertyPath: m_LocalRotation.z
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 6512041784125052745, guid: 415d91c38289d6d48b9e02617c0077ff, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 6512041784125052745, guid: 415d91c38289d6d48b9e02617c0077ff, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 6512041784125052745, guid: 415d91c38289d6d48b9e02617c0077ff, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.z
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 7520512795364559713, guid: 415d91c38289d6d48b9e02617c0077ff, type: 3}
+ propertyPath: m_Name
+ value: BaseBlock Variant
+ objectReference: {fileID: 0}
+ - target: {fileID: 7748443280095270292, guid: 415d91c38289d6d48b9e02617c0077ff, type: 3}
+ propertyPath: size
+ value: 1
+ objectReference: {fileID: 0}
+ - target: {fileID: 7748443280095270292, guid: 415d91c38289d6d48b9e02617c0077ff, type: 3}
+ propertyPath: material
+ value: 1
+ objectReference: {fileID: 0}
+ m_RemovedComponents: []
+ m_RemovedGameObjects: []
+ m_AddedGameObjects: []
+ m_AddedComponents: []
+ m_SourcePrefab: {fileID: 100100000, guid: 415d91c38289d6d48b9e02617c0077ff, type: 3}
diff --git a/Assets/Prefabs/Minigames/FortFight/Blocks/Block_Steel.prefab.meta b/Assets/Prefabs/Minigames/FortFight/Blocks/Block_Steel.prefab.meta
new file mode 100644
index 00000000..1c3a09d0
--- /dev/null
+++ b/Assets/Prefabs/Minigames/FortFight/Blocks/Block_Steel.prefab.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: cdd6daf258d61574fbc64bed0f42daf9
+PrefabImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Prefabs/Minigames/FortFight/Blocks/Block_Weakpoint.prefab b/Assets/Prefabs/Minigames/FortFight/Blocks/Block_Weakpoint.prefab
new file mode 100644
index 00000000..08ee353f
--- /dev/null
+++ b/Assets/Prefabs/Minigames/FortFight/Blocks/Block_Weakpoint.prefab
@@ -0,0 +1,79 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1001 &4844830117807925294
+PrefabInstance:
+ m_ObjectHideFlags: 0
+ serializedVersion: 2
+ m_Modification:
+ serializedVersion: 3
+ m_TransformParent: {fileID: 0}
+ m_Modifications:
+ - target: {fileID: 1733951774359296854, guid: 415d91c38289d6d48b9e02617c0077ff, type: 3}
+ propertyPath: m_Color.b
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 1733951774359296854, guid: 415d91c38289d6d48b9e02617c0077ff, type: 3}
+ propertyPath: m_Color.g
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 1733951774359296854, guid: 415d91c38289d6d48b9e02617c0077ff, type: 3}
+ propertyPath: m_Color.r
+ value: 1
+ objectReference: {fileID: 0}
+ - target: {fileID: 6512041784125052745, guid: 415d91c38289d6d48b9e02617c0077ff, type: 3}
+ propertyPath: m_LocalPosition.x
+ value: -1.46451
+ objectReference: {fileID: 0}
+ - target: {fileID: 6512041784125052745, guid: 415d91c38289d6d48b9e02617c0077ff, type: 3}
+ propertyPath: m_LocalPosition.y
+ value: -0.36305
+ objectReference: {fileID: 0}
+ - target: {fileID: 6512041784125052745, guid: 415d91c38289d6d48b9e02617c0077ff, type: 3}
+ propertyPath: m_LocalPosition.z
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 6512041784125052745, guid: 415d91c38289d6d48b9e02617c0077ff, type: 3}
+ propertyPath: m_LocalRotation.w
+ value: 1
+ objectReference: {fileID: 0}
+ - target: {fileID: 6512041784125052745, guid: 415d91c38289d6d48b9e02617c0077ff, type: 3}
+ propertyPath: m_LocalRotation.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 6512041784125052745, guid: 415d91c38289d6d48b9e02617c0077ff, type: 3}
+ propertyPath: m_LocalRotation.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 6512041784125052745, guid: 415d91c38289d6d48b9e02617c0077ff, type: 3}
+ propertyPath: m_LocalRotation.z
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 6512041784125052745, guid: 415d91c38289d6d48b9e02617c0077ff, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 6512041784125052745, guid: 415d91c38289d6d48b9e02617c0077ff, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 6512041784125052745, guid: 415d91c38289d6d48b9e02617c0077ff, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.z
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 7520512795364559713, guid: 415d91c38289d6d48b9e02617c0077ff, type: 3}
+ propertyPath: m_Name
+ value: BaseBlock Variant
+ objectReference: {fileID: 0}
+ - target: {fileID: 7748443280095270292, guid: 415d91c38289d6d48b9e02617c0077ff, type: 3}
+ propertyPath: isWeakPoint
+ value: 1
+ objectReference: {fileID: 0}
+ - target: {fileID: 7748443280095270292, guid: 415d91c38289d6d48b9e02617c0077ff, type: 3}
+ propertyPath: explosionRadius
+ value: 5
+ objectReference: {fileID: 0}
+ m_RemovedComponents: []
+ m_RemovedGameObjects: []
+ m_AddedGameObjects: []
+ m_AddedComponents: []
+ m_SourcePrefab: {fileID: 100100000, guid: 415d91c38289d6d48b9e02617c0077ff, type: 3}
diff --git a/Assets/Prefabs/Minigames/FortFight/Blocks/Block_Weakpoint.prefab.meta b/Assets/Prefabs/Minigames/FortFight/Blocks/Block_Weakpoint.prefab.meta
new file mode 100644
index 00000000..0c27244a
--- /dev/null
+++ b/Assets/Prefabs/Minigames/FortFight/Blocks/Block_Weakpoint.prefab.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 6985c12e95c1a814485e55be3d36a243
+PrefabImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Prefabs/Minigames/FortFight/Forts.meta b/Assets/Prefabs/Minigames/FortFight/Forts.meta
new file mode 100644
index 00000000..049b1c94
--- /dev/null
+++ b/Assets/Prefabs/Minigames/FortFight/Forts.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 1c4af8148f9e1de458911c141d295db6
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Prefabs/Minigames/FortFight/Forts/SimpleFort.prefab b/Assets/Prefabs/Minigames/FortFight/Forts/SimpleFort.prefab
new file mode 100644
index 00000000..1e3cc518
--- /dev/null
+++ b/Assets/Prefabs/Minigames/FortFight/Forts/SimpleFort.prefab
@@ -0,0 +1,387 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &2303456945894359403
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 8064621895759812076}
+ - component: {fileID: 8938858301725152068}
+ m_Layer: 0
+ m_Name: SimpleFort
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &8064621895759812076
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2303456945894359403}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: -0.04, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 1731851162938573245}
+ - {fileID: 7350060303235597263}
+ - {fileID: 2023440682477717019}
+ - {fileID: 7643340122397420652}
+ - {fileID: 5247826848215981902}
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &8938858301725152068
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2303456945894359403}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 05031222348c421ab564757f52f24952, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: AppleHillsScripts::Minigames.FortFight.Fort.FortController
+ fortName: SimpleFort
+ showDebugInfo: 1
+--- !u!1001 &100308143899281775
+PrefabInstance:
+ m_ObjectHideFlags: 0
+ serializedVersion: 2
+ m_Modification:
+ serializedVersion: 3
+ m_TransformParent: {fileID: 8064621895759812076}
+ m_Modifications:
+ - target: {fileID: 2190174229508730571, guid: cdd6daf258d61574fbc64bed0f42daf9, type: 3}
+ propertyPath: m_Size.x
+ value: 10.338011
+ objectReference: {fileID: 0}
+ - target: {fileID: 2190174229508730571, guid: cdd6daf258d61574fbc64bed0f42daf9, type: 3}
+ propertyPath: m_Offset.x
+ value: 0.077272415
+ objectReference: {fileID: 0}
+ - target: {fileID: 6446786228975401259, guid: cdd6daf258d61574fbc64bed0f42daf9, type: 3}
+ propertyPath: m_Name
+ value: Block_Steel (1)
+ objectReference: {fileID: 0}
+ - target: {fileID: 7743593083879499011, guid: cdd6daf258d61574fbc64bed0f42daf9, type: 3}
+ propertyPath: m_LocalPosition.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 7743593083879499011, guid: cdd6daf258d61574fbc64bed0f42daf9, type: 3}
+ propertyPath: m_LocalPosition.y
+ value: 6.54
+ objectReference: {fileID: 0}
+ - target: {fileID: 7743593083879499011, guid: cdd6daf258d61574fbc64bed0f42daf9, type: 3}
+ propertyPath: m_LocalPosition.z
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 7743593083879499011, guid: cdd6daf258d61574fbc64bed0f42daf9, type: 3}
+ propertyPath: m_LocalRotation.w
+ value: 1
+ objectReference: {fileID: 0}
+ - target: {fileID: 7743593083879499011, guid: cdd6daf258d61574fbc64bed0f42daf9, type: 3}
+ propertyPath: m_LocalRotation.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 7743593083879499011, guid: cdd6daf258d61574fbc64bed0f42daf9, type: 3}
+ propertyPath: m_LocalRotation.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 7743593083879499011, guid: cdd6daf258d61574fbc64bed0f42daf9, type: 3}
+ propertyPath: m_LocalRotation.z
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 7743593083879499011, guid: cdd6daf258d61574fbc64bed0f42daf9, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 7743593083879499011, guid: cdd6daf258d61574fbc64bed0f42daf9, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 7743593083879499011, guid: cdd6daf258d61574fbc64bed0f42daf9, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.z
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 8248272390735150160, guid: cdd6daf258d61574fbc64bed0f42daf9, type: 3}
+ propertyPath: m_LocalScale.x
+ value: 3.875
+ objectReference: {fileID: 0}
+ - target: {fileID: 8248272390735150160, guid: cdd6daf258d61574fbc64bed0f42daf9, type: 3}
+ propertyPath: m_LocalPosition.y
+ value: 0
+ objectReference: {fileID: 0}
+ m_RemovedComponents: []
+ m_RemovedGameObjects: []
+ m_AddedGameObjects: []
+ m_AddedComponents: []
+ m_SourcePrefab: {fileID: 100100000, guid: cdd6daf258d61574fbc64bed0f42daf9, type: 3}
+--- !u!4 &7643340122397420652 stripped
+Transform:
+ m_CorrespondingSourceObject: {fileID: 7743593083879499011, guid: cdd6daf258d61574fbc64bed0f42daf9, type: 3}
+ m_PrefabInstance: {fileID: 100308143899281775}
+ m_PrefabAsset: {fileID: 0}
+--- !u!1001 &1265740765784495692
+PrefabInstance:
+ m_ObjectHideFlags: 0
+ serializedVersion: 2
+ m_Modification:
+ serializedVersion: 3
+ m_TransformParent: {fileID: 8064621895759812076}
+ m_Modifications:
+ - target: {fileID: 5012833389701777835, guid: 39e9717047cc0594aad150b00f191858, type: 3}
+ propertyPath: m_Name
+ value: Block_Glass
+ objectReference: {fileID: 0}
+ - target: {fileID: 8615518451581982083, guid: 39e9717047cc0594aad150b00f191858, type: 3}
+ propertyPath: m_LocalPosition.x
+ value: 3.83
+ objectReference: {fileID: 0}
+ - target: {fileID: 8615518451581982083, guid: 39e9717047cc0594aad150b00f191858, type: 3}
+ propertyPath: m_LocalPosition.y
+ value: 2.6999998
+ objectReference: {fileID: 0}
+ - target: {fileID: 8615518451581982083, guid: 39e9717047cc0594aad150b00f191858, type: 3}
+ propertyPath: m_LocalPosition.z
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 8615518451581982083, guid: 39e9717047cc0594aad150b00f191858, type: 3}
+ propertyPath: m_LocalRotation.w
+ value: 0.70710784
+ objectReference: {fileID: 0}
+ - target: {fileID: 8615518451581982083, guid: 39e9717047cc0594aad150b00f191858, type: 3}
+ propertyPath: m_LocalRotation.x
+ value: -0
+ objectReference: {fileID: 0}
+ - target: {fileID: 8615518451581982083, guid: 39e9717047cc0594aad150b00f191858, type: 3}
+ propertyPath: m_LocalRotation.y
+ value: -0
+ objectReference: {fileID: 0}
+ - target: {fileID: 8615518451581982083, guid: 39e9717047cc0594aad150b00f191858, type: 3}
+ propertyPath: m_LocalRotation.z
+ value: 0.70710576
+ objectReference: {fileID: 0}
+ - target: {fileID: 8615518451581982083, guid: 39e9717047cc0594aad150b00f191858, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 8615518451581982083, guid: 39e9717047cc0594aad150b00f191858, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 8615518451581982083, guid: 39e9717047cc0594aad150b00f191858, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.z
+ value: 90
+ objectReference: {fileID: 0}
+ m_RemovedComponents: []
+ m_RemovedGameObjects: []
+ m_AddedGameObjects: []
+ m_AddedComponents: []
+ m_SourcePrefab: {fileID: 100100000, guid: 39e9717047cc0594aad150b00f191858, type: 3}
+--- !u!4 &7350060303235597263 stripped
+Transform:
+ m_CorrespondingSourceObject: {fileID: 8615518451581982083, guid: 39e9717047cc0594aad150b00f191858, type: 3}
+ m_PrefabInstance: {fileID: 1265740765784495692}
+ m_PrefabAsset: {fileID: 0}
+--- !u!1001 &1354166924051577144
+PrefabInstance:
+ m_ObjectHideFlags: 0
+ serializedVersion: 2
+ m_Modification:
+ serializedVersion: 3
+ m_TransformParent: {fileID: 8064621895759812076}
+ m_Modifications:
+ - target: {fileID: 775237956681103493, guid: 2a284fee98d5d9043ac5a6ae12b9be4a, type: 3}
+ propertyPath: m_LocalPosition.x
+ value: -3.76
+ objectReference: {fileID: 0}
+ - target: {fileID: 775237956681103493, guid: 2a284fee98d5d9043ac5a6ae12b9be4a, type: 3}
+ propertyPath: m_LocalPosition.y
+ value: 2.76
+ objectReference: {fileID: 0}
+ - target: {fileID: 775237956681103493, guid: 2a284fee98d5d9043ac5a6ae12b9be4a, type: 3}
+ propertyPath: m_LocalPosition.z
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 775237956681103493, guid: 2a284fee98d5d9043ac5a6ae12b9be4a, type: 3}
+ propertyPath: m_LocalRotation.w
+ value: 0.70710784
+ objectReference: {fileID: 0}
+ - target: {fileID: 775237956681103493, guid: 2a284fee98d5d9043ac5a6ae12b9be4a, type: 3}
+ propertyPath: m_LocalRotation.x
+ value: -0
+ objectReference: {fileID: 0}
+ - target: {fileID: 775237956681103493, guid: 2a284fee98d5d9043ac5a6ae12b9be4a, type: 3}
+ propertyPath: m_LocalRotation.y
+ value: -0
+ objectReference: {fileID: 0}
+ - target: {fileID: 775237956681103493, guid: 2a284fee98d5d9043ac5a6ae12b9be4a, type: 3}
+ propertyPath: m_LocalRotation.z
+ value: 0.70710576
+ objectReference: {fileID: 0}
+ - target: {fileID: 775237956681103493, guid: 2a284fee98d5d9043ac5a6ae12b9be4a, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 775237956681103493, guid: 2a284fee98d5d9043ac5a6ae12b9be4a, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 775237956681103493, guid: 2a284fee98d5d9043ac5a6ae12b9be4a, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.z
+ value: 90
+ objectReference: {fileID: 0}
+ - target: {fileID: 4090222677377819821, guid: 2a284fee98d5d9043ac5a6ae12b9be4a, type: 3}
+ propertyPath: m_Name
+ value: Block_Cardboard
+ objectReference: {fileID: 0}
+ m_RemovedComponents: []
+ m_RemovedGameObjects: []
+ m_AddedGameObjects: []
+ m_AddedComponents: []
+ m_SourcePrefab: {fileID: 100100000, guid: 2a284fee98d5d9043ac5a6ae12b9be4a, type: 3}
+--- !u!4 &1731851162938573245 stripped
+Transform:
+ m_CorrespondingSourceObject: {fileID: 775237956681103493, guid: 2a284fee98d5d9043ac5a6ae12b9be4a, type: 3}
+ m_PrefabInstance: {fileID: 1354166924051577144}
+ m_PrefabAsset: {fileID: 0}
+--- !u!1001 &5888217250810535977
+PrefabInstance:
+ m_ObjectHideFlags: 0
+ serializedVersion: 2
+ m_Modification:
+ serializedVersion: 3
+ m_TransformParent: {fileID: 8064621895759812076}
+ m_Modifications:
+ - target: {fileID: 27624381625230900, guid: 6985c12e95c1a814485e55be3d36a243, type: 3}
+ propertyPath: m_LocalPosition.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 1829341962646880103, guid: 6985c12e95c1a814485e55be3d36a243, type: 3}
+ propertyPath: m_LocalScale.x
+ value: 0.5
+ objectReference: {fileID: 0}
+ - target: {fileID: 1829341962646880103, guid: 6985c12e95c1a814485e55be3d36a243, type: 3}
+ propertyPath: m_LocalPosition.x
+ value: 0.04000002
+ objectReference: {fileID: 0}
+ - target: {fileID: 1829341962646880103, guid: 6985c12e95c1a814485e55be3d36a243, type: 3}
+ propertyPath: m_LocalPosition.y
+ value: 3.2
+ objectReference: {fileID: 0}
+ - target: {fileID: 1829341962646880103, guid: 6985c12e95c1a814485e55be3d36a243, type: 3}
+ propertyPath: m_LocalPosition.z
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 1829341962646880103, guid: 6985c12e95c1a814485e55be3d36a243, type: 3}
+ propertyPath: m_LocalRotation.w
+ value: 1
+ objectReference: {fileID: 0}
+ - target: {fileID: 1829341962646880103, guid: 6985c12e95c1a814485e55be3d36a243, type: 3}
+ propertyPath: m_LocalRotation.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 1829341962646880103, guid: 6985c12e95c1a814485e55be3d36a243, type: 3}
+ propertyPath: m_LocalRotation.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 1829341962646880103, guid: 6985c12e95c1a814485e55be3d36a243, type: 3}
+ propertyPath: m_LocalRotation.z
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 1829341962646880103, guid: 6985c12e95c1a814485e55be3d36a243, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 1829341962646880103, guid: 6985c12e95c1a814485e55be3d36a243, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 1829341962646880103, guid: 6985c12e95c1a814485e55be3d36a243, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.z
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 3126186265912943439, guid: 6985c12e95c1a814485e55be3d36a243, type: 3}
+ propertyPath: m_Name
+ value: Block_Weakpoint
+ objectReference: {fileID: 0}
+ m_RemovedComponents: []
+ m_RemovedGameObjects: []
+ m_AddedGameObjects: []
+ m_AddedComponents: []
+ m_SourcePrefab: {fileID: 100100000, guid: 6985c12e95c1a814485e55be3d36a243, type: 3}
+--- !u!4 &5247826848215981902 stripped
+Transform:
+ m_CorrespondingSourceObject: {fileID: 1829341962646880103, guid: 6985c12e95c1a814485e55be3d36a243, type: 3}
+ m_PrefabInstance: {fileID: 5888217250810535977}
+ m_PrefabAsset: {fileID: 0}
+--- !u!1001 &8602561888576316184
+PrefabInstance:
+ m_ObjectHideFlags: 0
+ serializedVersion: 2
+ m_Modification:
+ serializedVersion: 3
+ m_TransformParent: {fileID: 8064621895759812076}
+ m_Modifications:
+ - target: {fileID: 6446786228975401259, guid: cdd6daf258d61574fbc64bed0f42daf9, type: 3}
+ propertyPath: m_Name
+ value: Block_Steel
+ objectReference: {fileID: 0}
+ - target: {fileID: 7743593083879499011, guid: cdd6daf258d61574fbc64bed0f42daf9, type: 3}
+ propertyPath: m_LocalPosition.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 7743593083879499011, guid: cdd6daf258d61574fbc64bed0f42daf9, type: 3}
+ propertyPath: m_LocalPosition.y
+ value: 1.05
+ objectReference: {fileID: 0}
+ - target: {fileID: 7743593083879499011, guid: cdd6daf258d61574fbc64bed0f42daf9, type: 3}
+ propertyPath: m_LocalPosition.z
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 7743593083879499011, guid: cdd6daf258d61574fbc64bed0f42daf9, type: 3}
+ propertyPath: m_LocalRotation.w
+ value: 1
+ objectReference: {fileID: 0}
+ - target: {fileID: 7743593083879499011, guid: cdd6daf258d61574fbc64bed0f42daf9, type: 3}
+ propertyPath: m_LocalRotation.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 7743593083879499011, guid: cdd6daf258d61574fbc64bed0f42daf9, type: 3}
+ propertyPath: m_LocalRotation.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 7743593083879499011, guid: cdd6daf258d61574fbc64bed0f42daf9, type: 3}
+ propertyPath: m_LocalRotation.z
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 7743593083879499011, guid: cdd6daf258d61574fbc64bed0f42daf9, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 7743593083879499011, guid: cdd6daf258d61574fbc64bed0f42daf9, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 7743593083879499011, guid: cdd6daf258d61574fbc64bed0f42daf9, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.z
+ value: 0
+ objectReference: {fileID: 0}
+ m_RemovedComponents: []
+ m_RemovedGameObjects: []
+ m_AddedGameObjects: []
+ m_AddedComponents: []
+ m_SourcePrefab: {fileID: 100100000, guid: cdd6daf258d61574fbc64bed0f42daf9, type: 3}
+--- !u!4 &2023440682477717019 stripped
+Transform:
+ m_CorrespondingSourceObject: {fileID: 7743593083879499011, guid: cdd6daf258d61574fbc64bed0f42daf9, type: 3}
+ m_PrefabInstance: {fileID: 8602561888576316184}
+ m_PrefabAsset: {fileID: 0}
diff --git a/Assets/Prefabs/Minigames/FortFight/Forts/SimpleFort.prefab.meta b/Assets/Prefabs/Minigames/FortFight/Forts/SimpleFort.prefab.meta
new file mode 100644
index 00000000..dab01be1
--- /dev/null
+++ b/Assets/Prefabs/Minigames/FortFight/Forts/SimpleFort.prefab.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 1481432e299ad794e937cb82505cfbb2
+PrefabImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scenes/MiniGames/FortFight.unity b/Assets/Scenes/MiniGames/FortFight.unity
index bddd4be5..e0c418d0 100644
--- a/Assets/Scenes/MiniGames/FortFight.unity
+++ b/Assets/Scenes/MiniGames/FortFight.unity
@@ -119,7 +119,7 @@ NavMeshSettings:
debug:
m_Flags: 0
m_NavMeshData: {fileID: 0}
---- !u!1 &580848252
+--- !u!1 &56781261
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
@@ -127,9 +127,3204 @@ GameObject:
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- - component: {fileID: 580848255}
- - component: {fileID: 580848254}
- - component: {fileID: 580848253}
+ - component: {fileID: 56781262}
+ - component: {fileID: 56781264}
+ - component: {fileID: 56781263}
+ m_Layer: 5
+ m_Name: Handle
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &56781262
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 56781261}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 475319672}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 0, y: 0}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 20, y: 0}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &56781263
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 56781261}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: 10913, guid: 0000000000000000f000000000000000, type: 0}
+ m_Type: 0
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 1
+--- !u!222 &56781264
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 56781261}
+ m_CullTransparentMesh: 1
+--- !u!1 &92149714
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 92149715}
+ - component: {fileID: 92149716}
+ m_Layer: 0
+ m_Name: Visual
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &92149715
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 92149714}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: -10, y: 1.5, z: 0}
+ m_LocalScale: {x: 1.2903013, y: 1.2903013, z: 1.2903013}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 1009687014}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!212 &92149716
+SpriteRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 92149714}
+ m_Enabled: 1
+ m_CastShadows: 0
+ m_ReceiveShadows: 0
+ m_DynamicOccludee: 1
+ m_StaticShadowCaster: 0
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 0
+ m_RayTraceProcedural: 0
+ m_RayTracingAccelStructBuildFlagsOverride: 0
+ m_RayTracingAccelStructBuildFlags: 1
+ m_SmallMeshCulling: 1
+ m_ForceMeshLod: -1
+ m_MeshLodSelectionBias: 0
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 2100000, guid: 9dfc825aed78fcd4ba02077103263b40, type: 2}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 0
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_GlobalIlluminationMeshLod: 0
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+ m_Sprite: {fileID: 757812146, guid: e4404d33f1649de418cc3741cd06bb8c, type: 3}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_FlipX: 0
+ m_FlipY: 0
+ m_DrawMode: 0
+ m_Size: {x: 4.18, y: 6.62}
+ m_AdaptiveModeThreshold: 0.5
+ m_SpriteTileMode: 0
+ m_WasSpriteAssigned: 1
+ m_MaskInteraction: 0
+ m_SpriteSortPoint: 0
+--- !u!1 &123702485
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 123702486}
+ - component: {fileID: 123702488}
+ - component: {fileID: 123702487}
+ m_Layer: 5
+ m_Name: Percentage
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &123702486
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 123702485}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 1366022892}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 1, y: 0}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 0, y: 50}
+ m_Pivot: {x: 0.5, y: 0}
+--- !u!114 &123702487
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 123702485}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_text: 100%
+ m_isRightToLeft: 0
+ m_fontAsset: {fileID: 11400000, guid: 4aca0db6ec111b5418bdc747168f9474, type: 2}
+ m_sharedMaterial: {fileID: -1441574381962284772, guid: 4aca0db6ec111b5418bdc747168f9474, type: 2}
+ m_fontSharedMaterials: []
+ m_fontMaterial: {fileID: 0}
+ m_fontMaterials: []
+ m_fontColor32:
+ serializedVersion: 2
+ rgba: 4294967295
+ m_fontColor: {r: 1, g: 1, b: 1, a: 1}
+ m_enableVertexGradient: 0
+ m_colorMode: 3
+ m_fontColorGradient:
+ topLeft: {r: 1, g: 1, b: 1, a: 1}
+ topRight: {r: 1, g: 1, b: 1, a: 1}
+ bottomLeft: {r: 1, g: 1, b: 1, a: 1}
+ bottomRight: {r: 1, g: 1, b: 1, a: 1}
+ m_fontColorGradientPreset: {fileID: 0}
+ m_spriteAsset: {fileID: 0}
+ m_tintAllSprites: 0
+ m_StyleSheet: {fileID: 0}
+ m_TextStyleHashCode: -1183493901
+ m_overrideHtmlColors: 0
+ m_faceColor:
+ serializedVersion: 2
+ rgba: 4294967295
+ m_fontSize: 36
+ m_fontSizeBase: 36
+ m_fontWeight: 400
+ m_enableAutoSizing: 0
+ m_fontSizeMin: 18
+ m_fontSizeMax: 72
+ m_fontStyle: 1
+ m_HorizontalAlignment: 2
+ m_VerticalAlignment: 512
+ m_textAlignment: 65535
+ m_characterSpacing: 0
+ m_wordSpacing: 0
+ m_lineSpacing: 0
+ m_lineSpacingMax: 0
+ m_paragraphSpacing: 0
+ m_charWidthMaxAdj: 0
+ m_TextWrappingMode: 1
+ m_wordWrappingRatios: 0.4
+ m_overflowMode: 0
+ m_linkedTextComponent: {fileID: 0}
+ parentLinkedComponent: {fileID: 0}
+ m_enableKerning: 0
+ m_ActiveFontFeatures: 6e72656b
+ m_enableExtraPadding: 0
+ checkPaddingRequired: 0
+ m_isRichText: 1
+ m_EmojiFallbackSupport: 1
+ m_parseCtrlCharacters: 1
+ m_isOrthographic: 1
+ m_isCullingEnabled: 0
+ m_horizontalMapping: 0
+ m_verticalMapping: 0
+ m_uvLineOffset: 0
+ m_geometrySortingOrder: 0
+ m_IsTextObjectScaleStatic: 0
+ m_VertexBufferAutoSizeReduction: 0
+ m_useMaxVisibleDescender: 1
+ m_pageToDisplay: 1
+ m_margin: {x: 0, y: 0, z: 0, w: 0}
+ m_isUsingLegacyAnimationComponent: 0
+ m_isVolumetricText: 0
+ m_hasFontAssetChanged: 0
+ m_baseMaterial: {fileID: 0}
+ m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
+--- !u!222 &123702488
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 123702485}
+ m_CullTransparentMesh: 1
+--- !u!1 &137730096
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 137730097}
+ m_Layer: 5
+ m_Name: Fill Area
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &137730097
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 137730096}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 1755632907}
+ m_Father: {fileID: 579665402}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0.25}
+ m_AnchorMax: {x: 1, y: 0.75}
+ m_AnchoredPosition: {x: -5, y: 0}
+ m_SizeDelta: {x: -20, y: 0}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!1 &198234815
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 198234816}
+ - component: {fileID: 198234818}
+ - component: {fileID: 198234817}
+ m_Layer: 5
+ m_Name: Text (TMP)
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &198234816
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 198234815}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 1410755664}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 1, y: 1}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 0, y: 0}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &198234817
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 198234815}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_text: Play Alone
+ m_isRightToLeft: 0
+ m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
+ m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
+ m_fontSharedMaterials: []
+ m_fontMaterial: {fileID: 0}
+ m_fontMaterials: []
+ m_fontColor32:
+ serializedVersion: 2
+ rgba: 4281479730
+ m_fontColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
+ m_enableVertexGradient: 0
+ m_colorMode: 3
+ m_fontColorGradient:
+ topLeft: {r: 1, g: 1, b: 1, a: 1}
+ topRight: {r: 1, g: 1, b: 1, a: 1}
+ bottomLeft: {r: 1, g: 1, b: 1, a: 1}
+ bottomRight: {r: 1, g: 1, b: 1, a: 1}
+ m_fontColorGradientPreset: {fileID: 0}
+ m_spriteAsset: {fileID: 0}
+ m_tintAllSprites: 0
+ m_StyleSheet: {fileID: 0}
+ m_TextStyleHashCode: -1183493901
+ m_overrideHtmlColors: 0
+ m_faceColor:
+ serializedVersion: 2
+ rgba: 4294967295
+ m_fontSize: 50
+ m_fontSizeBase: 50
+ m_fontWeight: 400
+ m_enableAutoSizing: 0
+ m_fontSizeMin: 18
+ m_fontSizeMax: 72
+ m_fontStyle: 0
+ m_HorizontalAlignment: 2
+ m_VerticalAlignment: 512
+ m_textAlignment: 65535
+ m_characterSpacing: 0
+ m_wordSpacing: 0
+ m_lineSpacing: 0
+ m_lineSpacingMax: 0
+ m_paragraphSpacing: 0
+ m_charWidthMaxAdj: 0
+ m_TextWrappingMode: 1
+ m_wordWrappingRatios: 0.4
+ m_overflowMode: 0
+ m_linkedTextComponent: {fileID: 0}
+ parentLinkedComponent: {fileID: 0}
+ m_enableKerning: 0
+ m_ActiveFontFeatures: 6e72656b
+ m_enableExtraPadding: 0
+ checkPaddingRequired: 0
+ m_isRichText: 1
+ m_EmojiFallbackSupport: 1
+ m_parseCtrlCharacters: 1
+ m_isOrthographic: 1
+ m_isCullingEnabled: 0
+ m_horizontalMapping: 0
+ m_verticalMapping: 0
+ m_uvLineOffset: 0
+ m_geometrySortingOrder: 0
+ m_IsTextObjectScaleStatic: 0
+ m_VertexBufferAutoSizeReduction: 0
+ m_useMaxVisibleDescender: 1
+ m_pageToDisplay: 1
+ m_margin: {x: 0, y: 0, z: 0, w: 0}
+ m_isUsingLegacyAnimationComponent: 0
+ m_isVolumetricText: 0
+ m_hasFontAssetChanged: 0
+ m_baseMaterial: {fileID: 0}
+ m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
+--- !u!222 &198234818
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 198234815}
+ m_CullTransparentMesh: 1
+--- !u!1 &204905894
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 204905895}
+ m_Layer: 0
+ m_Name: SpawnPoints
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &204905895
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 204905894}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: -12.2, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 1009687014}
+ - {fileID: 799036564}
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &298557364
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 298557365}
+ - component: {fileID: 298557367}
+ - component: {fileID: 298557366}
+ m_Layer: 5
+ m_Name: Background
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &298557365
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 298557364}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 2036414579}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 1, y: 1}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 0, y: 0}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &298557366
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 298557364}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
+ m_Material: {fileID: 0}
+ m_Color: {r: 0, g: 0, b: 0, a: 0.4117647}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: 0}
+ m_Type: 0
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 1
+--- !u!222 &298557367
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 298557364}
+ m_CullTransparentMesh: 1
+--- !u!1 &377753195
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 377753196}
+ - component: {fileID: 377753197}
+ m_Layer: 0
+ m_Name: Visual
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &377753196
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 377753195}
+ serializedVersion: 2
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 10, y: 3.4, z: 0}
+ m_LocalScale: {x: 16.29907, y: 16.29907, z: 16.29907}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 799036564}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!212 &377753197
+SpriteRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 377753195}
+ m_Enabled: 1
+ m_CastShadows: 0
+ m_ReceiveShadows: 0
+ m_DynamicOccludee: 1
+ m_StaticShadowCaster: 0
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 0
+ m_RayTraceProcedural: 0
+ m_RayTracingAccelStructBuildFlagsOverride: 0
+ m_RayTracingAccelStructBuildFlags: 1
+ m_SmallMeshCulling: 1
+ m_ForceMeshLod: -1
+ m_MeshLodSelectionBias: 0
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 2100000, guid: 9dfc825aed78fcd4ba02077103263b40, type: 2}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 0
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_GlobalIlluminationMeshLod: 0
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+ m_Sprite: {fileID: -2691095878991102790, guid: 77ab3d770c92d5344b36eee3293a0f94, type: 3}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_FlipX: 1
+ m_FlipY: 0
+ m_DrawMode: 0
+ m_Size: {x: 4.18, y: 6.62}
+ m_AdaptiveModeThreshold: 0.5
+ m_SpriteTileMode: 0
+ m_WasSpriteAssigned: 1
+ m_MaskInteraction: 0
+ m_SpriteSortPoint: 0
+--- !u!1 &403289338
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 403289339}
+ - component: {fileID: 403289341}
+ - component: {fileID: 403289340}
+ m_Layer: 5
+ m_Name: Background
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &403289339
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 403289338}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 579665402}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0.25}
+ m_AnchorMax: {x: 1, y: 0.75}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 0, y: 0}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &403289340
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 403289338}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0}
+ m_Type: 1
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 1
+--- !u!222 &403289341
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 403289338}
+ m_CullTransparentMesh: 1
+--- !u!1 &475319671
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 475319672}
+ m_Layer: 5
+ m_Name: Handle Slide Area
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &475319672
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 475319671}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 56781262}
+ m_Father: {fileID: 579665402}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 1, y: 1}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: -20, y: 0}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!1 &490925382
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 490925383}
+ - component: {fileID: 490925385}
+ - component: {fileID: 490925384}
+ m_Layer: 5
+ m_Name: Background
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &490925383
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 490925382}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 1337135607}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0.25}
+ m_AnchorMax: {x: 1, y: 0.75}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 0, y: 0}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &490925384
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 490925382}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0}
+ m_Type: 1
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 1
+--- !u!222 &490925385
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 490925382}
+ m_CullTransparentMesh: 1
+--- !u!1 &501271718
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 501271719}
+ - component: {fileID: 501271721}
+ - component: {fileID: 501271720}
+ m_Layer: 5
+ m_Name: Fill
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &501271719
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 501271718}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 1345415458}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 0, y: 0}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 10, y: 0}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &501271720
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 501271718}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
+ m_Material: {fileID: 0}
+ m_Color: {r: 0.072806716, g: 1, b: 0, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
+ m_Type: 1
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 1
+--- !u!222 &501271721
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 501271718}
+ m_CullTransparentMesh: 1
+--- !u!1 &527493406
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 527493407}
+ - component: {fileID: 527493409}
+ - component: {fileID: 527493408}
+ m_Layer: 5
+ m_Name: Text (TMP)
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &527493407
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 527493406}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 552665970}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 1, y: 1}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 0, y: 0}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &527493408
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 527493406}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_text: Play together
+ m_isRightToLeft: 0
+ m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
+ m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
+ m_fontSharedMaterials: []
+ m_fontMaterial: {fileID: 0}
+ m_fontMaterials: []
+ m_fontColor32:
+ serializedVersion: 2
+ rgba: 4281479730
+ m_fontColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
+ m_enableVertexGradient: 0
+ m_colorMode: 3
+ m_fontColorGradient:
+ topLeft: {r: 1, g: 1, b: 1, a: 1}
+ topRight: {r: 1, g: 1, b: 1, a: 1}
+ bottomLeft: {r: 1, g: 1, b: 1, a: 1}
+ bottomRight: {r: 1, g: 1, b: 1, a: 1}
+ m_fontColorGradientPreset: {fileID: 0}
+ m_spriteAsset: {fileID: 0}
+ m_tintAllSprites: 0
+ m_StyleSheet: {fileID: 0}
+ m_TextStyleHashCode: -1183493901
+ m_overrideHtmlColors: 0
+ m_faceColor:
+ serializedVersion: 2
+ rgba: 4294967295
+ m_fontSize: 50
+ m_fontSizeBase: 50
+ m_fontWeight: 400
+ m_enableAutoSizing: 0
+ m_fontSizeMin: 18
+ m_fontSizeMax: 72
+ m_fontStyle: 0
+ m_HorizontalAlignment: 2
+ m_VerticalAlignment: 512
+ m_textAlignment: 65535
+ m_characterSpacing: 0
+ m_wordSpacing: 0
+ m_lineSpacing: 0
+ m_lineSpacingMax: 0
+ m_paragraphSpacing: 0
+ m_charWidthMaxAdj: 0
+ m_TextWrappingMode: 1
+ m_wordWrappingRatios: 0.4
+ m_overflowMode: 0
+ m_linkedTextComponent: {fileID: 0}
+ parentLinkedComponent: {fileID: 0}
+ m_enableKerning: 0
+ m_ActiveFontFeatures: 6e72656b
+ m_enableExtraPadding: 0
+ checkPaddingRequired: 0
+ m_isRichText: 1
+ m_EmojiFallbackSupport: 1
+ m_parseCtrlCharacters: 1
+ m_isOrthographic: 1
+ m_isCullingEnabled: 0
+ m_horizontalMapping: 0
+ m_verticalMapping: 0
+ m_uvLineOffset: 0
+ m_geometrySortingOrder: 0
+ m_IsTextObjectScaleStatic: 0
+ m_VertexBufferAutoSizeReduction: 0
+ m_useMaxVisibleDescender: 1
+ m_pageToDisplay: 1
+ m_margin: {x: 0, y: 0, z: 0, w: 0}
+ m_isUsingLegacyAnimationComponent: 0
+ m_isVolumetricText: 0
+ m_hasFontAssetChanged: 0
+ m_baseMaterial: {fileID: 0}
+ m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
+--- !u!222 &527493409
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 527493406}
+ m_CullTransparentMesh: 1
+--- !u!1 &534849266
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 534849268}
+ - component: {fileID: 534849267}
+ m_Layer: 0
+ m_Name: FortDamageTester
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!114 &534849267
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 534849266}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 74f26236978245cdaf33909a7c242cbf, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: AppleHillsScripts::Minigames.FortFight.FortFightPhase2Tester
+ enableKeyboardControls: 1
+ testDamageAmount: 25
+ autoTestOnStart: 0
+ autoTestDelay: 2
+--- !u!4 &534849268
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 534849266}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 812.7291, y: 1202.7446, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &552665969
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 552665970}
+ - component: {fileID: 552665973}
+ - component: {fileID: 552665972}
+ - component: {fileID: 552665971}
+ m_Layer: 5
+ m_Name: TwoPlayerButton
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &552665970
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 552665969}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 527493407}
+ m_Father: {fileID: 2036414579}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0.8, y: 0.5}
+ m_AnchorMax: {x: 0.8, y: 0.5}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 200, y: 200}
+ m_Pivot: {x: 1, y: 0.5}
+--- !u!114 &552665971
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 552665969}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Button
+ m_Navigation:
+ m_Mode: 3
+ m_WrapAround: 0
+ m_SelectOnUp: {fileID: 0}
+ m_SelectOnDown: {fileID: 0}
+ m_SelectOnLeft: {fileID: 0}
+ m_SelectOnRight: {fileID: 0}
+ m_Transition: 1
+ m_Colors:
+ m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+ m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+ m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
+ m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+ m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
+ m_ColorMultiplier: 1
+ m_FadeDuration: 0.1
+ m_SpriteState:
+ m_HighlightedSprite: {fileID: 0}
+ m_PressedSprite: {fileID: 0}
+ m_SelectedSprite: {fileID: 0}
+ m_DisabledSprite: {fileID: 0}
+ m_AnimationTriggers:
+ m_NormalTrigger: Normal
+ m_HighlightedTrigger: Highlighted
+ m_PressedTrigger: Pressed
+ m_SelectedTrigger: Selected
+ m_DisabledTrigger: Disabled
+ m_Interactable: 1
+ m_TargetGraphic: {fileID: 552665972}
+ m_OnClick:
+ m_PersistentCalls:
+ m_Calls: []
+--- !u!114 &552665972
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 552665969}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
+ m_Type: 1
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 1
+--- !u!222 &552665973
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 552665969}
+ m_CullTransparentMesh: 1
+--- !u!1 &570857720
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 570857724}
+ - component: {fileID: 570857723}
+ - component: {fileID: 570857722}
+ - component: {fileID: 570857721}
+ m_Layer: 0
+ m_Name: Ground
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!61 &570857721
+BoxCollider2D:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 570857720}
+ m_Enabled: 1
+ serializedVersion: 3
+ m_Density: 1
+ m_Material: {fileID: 0}
+ m_IncludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_ExcludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_LayerOverridePriority: 0
+ m_ForceSendLayers:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_ForceReceiveLayers:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_ContactCaptureLayers:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_CallbackLayers:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_IsTrigger: 0
+ m_UsedByEffector: 0
+ m_CompositeOperation: 0
+ m_CompositeOrder: 0
+ m_Offset: {x: 0, y: 0}
+ m_SpriteTilingProperty:
+ border: {x: 0, y: 0, z: 0, w: 0}
+ pivot: {x: 0.5, y: 0.5}
+ oldSize: {x: 2.68, y: 1.07}
+ newSize: {x: 2.68, y: 1.07}
+ adaptiveTilingThreshold: 0.5
+ drawMode: 0
+ adaptiveTiling: 0
+ m_AutoTiling: 0
+ m_Size: {x: 2.68, y: 1.07}
+ m_EdgeRadius: 0
+--- !u!50 &570857722
+Rigidbody2D:
+ serializedVersion: 5
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 570857720}
+ m_BodyType: 2
+ m_Simulated: 1
+ m_UseFullKinematicContacts: 0
+ m_UseAutoMass: 0
+ m_Mass: 1
+ m_LinearDamping: 0
+ m_AngularDamping: 0.05
+ m_GravityScale: 1
+ m_Material: {fileID: 0}
+ m_IncludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_ExcludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_Interpolate: 0
+ m_SleepingMode: 1
+ m_CollisionDetection: 0
+ m_Constraints: 0
+--- !u!212 &570857723
+SpriteRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 570857720}
+ m_Enabled: 1
+ m_CastShadows: 0
+ m_ReceiveShadows: 0
+ m_DynamicOccludee: 1
+ m_StaticShadowCaster: 0
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 0
+ m_RayTraceProcedural: 0
+ m_RayTracingAccelStructBuildFlagsOverride: 0
+ m_RayTracingAccelStructBuildFlags: 1
+ m_SmallMeshCulling: 1
+ m_ForceMeshLod: -1
+ m_MeshLodSelectionBias: 0
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 2100000, guid: 9dfc825aed78fcd4ba02077103263b40, type: 2}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 0
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_GlobalIlluminationMeshLod: 0
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+ m_Sprite: {fileID: -4331849829665928538, guid: 8be45455b29f80241a3b8aae36291752, type: 3}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_FlipX: 0
+ m_FlipY: 0
+ m_DrawMode: 0
+ m_Size: {x: 2.68, y: 1.07}
+ m_AdaptiveModeThreshold: 0.5
+ m_SpriteTileMode: 0
+ m_WasSpriteAssigned: 1
+ m_MaskInteraction: 0
+ m_SpriteSortPoint: 0
+--- !u!4 &570857724
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 570857720}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 2.7, y: -17.58, z: 0}
+ m_LocalScale: {x: 45.294563, y: 9.947111, z: 2.6263}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &579665401
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 579665402}
+ - component: {fileID: 579665403}
+ m_Layer: 5
+ m_Name: Slider
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &579665402
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 579665401}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 403289339}
+ - {fileID: 137730097}
+ - {fileID: 475319672}
+ m_Father: {fileID: 1209958791}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0.5}
+ m_AnchorMax: {x: 1, y: 0.5}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 0, y: 67.7}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &579665403
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 579665401}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 67db9e8f0e2ae9c40bc1e2b64352a6b4, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Slider
+ m_Navigation:
+ m_Mode: 3
+ m_WrapAround: 0
+ m_SelectOnUp: {fileID: 0}
+ m_SelectOnDown: {fileID: 0}
+ m_SelectOnLeft: {fileID: 0}
+ m_SelectOnRight: {fileID: 0}
+ m_Transition: 1
+ m_Colors:
+ m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+ m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+ m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
+ m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+ m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
+ m_ColorMultiplier: 1
+ m_FadeDuration: 0.1
+ m_SpriteState:
+ m_HighlightedSprite: {fileID: 0}
+ m_PressedSprite: {fileID: 0}
+ m_SelectedSprite: {fileID: 0}
+ m_DisabledSprite: {fileID: 0}
+ m_AnimationTriggers:
+ m_NormalTrigger: Normal
+ m_HighlightedTrigger: Highlighted
+ m_PressedTrigger: Pressed
+ m_SelectedTrigger: Selected
+ m_DisabledTrigger: Disabled
+ m_Interactable: 0
+ m_TargetGraphic: {fileID: 56781263}
+ m_FillRect: {fileID: 1755632907}
+ m_HandleRect: {fileID: 56781262}
+ m_Direction: 0
+ m_MinValue: 0
+ m_MaxValue: 1
+ m_WholeNumbers: 0
+ m_Value: 1
+ m_OnValueChanged:
+ m_PersistentCalls:
+ m_Calls: []
+--- !u!1 &601402837
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 601402838}
+ - component: {fileID: 601402840}
+ - component: {fileID: 601402839}
+ m_Layer: 5
+ m_Name: Name
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &601402838
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 601402837}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 1366022892}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 1}
+ m_AnchorMax: {x: 1, y: 1}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 0, y: 50}
+ m_Pivot: {x: 0.5, y: 1}
+--- !u!114 &601402839
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 601402837}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_text: PLAYER 1
+ m_isRightToLeft: 0
+ m_fontAsset: {fileID: 11400000, guid: 4aca0db6ec111b5418bdc747168f9474, type: 2}
+ m_sharedMaterial: {fileID: -1441574381962284772, guid: 4aca0db6ec111b5418bdc747168f9474, type: 2}
+ m_fontSharedMaterials: []
+ m_fontMaterial: {fileID: 0}
+ m_fontMaterials: []
+ m_fontColor32:
+ serializedVersion: 2
+ rgba: 4294967295
+ m_fontColor: {r: 1, g: 1, b: 1, a: 1}
+ m_enableVertexGradient: 0
+ m_colorMode: 3
+ m_fontColorGradient:
+ topLeft: {r: 1, g: 1, b: 1, a: 1}
+ topRight: {r: 1, g: 1, b: 1, a: 1}
+ bottomLeft: {r: 1, g: 1, b: 1, a: 1}
+ bottomRight: {r: 1, g: 1, b: 1, a: 1}
+ m_fontColorGradientPreset: {fileID: 0}
+ m_spriteAsset: {fileID: 0}
+ m_tintAllSprites: 0
+ m_StyleSheet: {fileID: 0}
+ m_TextStyleHashCode: -1183493901
+ m_overrideHtmlColors: 0
+ m_faceColor:
+ serializedVersion: 2
+ rgba: 4294967295
+ m_fontSize: 36
+ m_fontSizeBase: 36
+ m_fontWeight: 400
+ m_enableAutoSizing: 0
+ m_fontSizeMin: 18
+ m_fontSizeMax: 72
+ m_fontStyle: 1
+ m_HorizontalAlignment: 2
+ m_VerticalAlignment: 512
+ m_textAlignment: 65535
+ m_characterSpacing: 0
+ m_wordSpacing: 0
+ m_lineSpacing: 0
+ m_lineSpacingMax: 0
+ m_paragraphSpacing: 0
+ m_charWidthMaxAdj: 0
+ m_TextWrappingMode: 1
+ m_wordWrappingRatios: 0.4
+ m_overflowMode: 0
+ m_linkedTextComponent: {fileID: 0}
+ parentLinkedComponent: {fileID: 0}
+ m_enableKerning: 0
+ m_ActiveFontFeatures: 6e72656b
+ m_enableExtraPadding: 0
+ checkPaddingRequired: 0
+ m_isRichText: 1
+ m_EmojiFallbackSupport: 1
+ m_parseCtrlCharacters: 1
+ m_isOrthographic: 1
+ m_isCullingEnabled: 0
+ m_horizontalMapping: 0
+ m_verticalMapping: 0
+ m_uvLineOffset: 0
+ m_geometrySortingOrder: 0
+ m_IsTextObjectScaleStatic: 0
+ m_VertexBufferAutoSizeReduction: 0
+ m_useMaxVisibleDescender: 1
+ m_pageToDisplay: 1
+ m_margin: {x: 0, y: 0, z: 0, w: 0}
+ m_isUsingLegacyAnimationComponent: 0
+ m_isVolumetricText: 0
+ m_hasFontAssetChanged: 0
+ m_baseMaterial: {fileID: 0}
+ m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
+--- !u!222 &601402840
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 601402837}
+ m_CullTransparentMesh: 1
+--- !u!1 &630420671
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 630420672}
+ - component: {fileID: 630420675}
+ - component: {fileID: 630420674}
+ m_Layer: 0
+ m_Name: Player2_Cam
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &630420672
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 630420671}
+ serializedVersion: 2
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 15.07, y: -12.2, z: -10}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &630420674
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 630420671}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b617507da6d07e749b7efdb34e1173e1, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ TrackerSettings:
+ BindingMode: 4
+ PositionDamping: {x: 2, y: 0.5, z: 1}
+ AngularDampingMode: 0
+ RotationDamping: {x: 1, y: 1, z: 1}
+ QuaternionDamping: 1
+ FollowOffset: {x: 0, y: 0, z: -10}
+--- !u!114 &630420675
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 630420671}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: f9dfa5b682dcd46bda6128250e975f58, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ Priority:
+ Enabled: 1
+ m_Value: 10
+ OutputChannel: 1
+ StandbyUpdate: 2
+ m_StreamingVersion: 20241001
+ m_LegacyPriority: 0
+ Target:
+ TrackingTarget: {fileID: 799036564}
+ LookAtTarget: {fileID: 0}
+ CustomLookAtTarget: 0
+ Lens:
+ FieldOfView: 60
+ OrthographicSize: 15
+ NearClipPlane: 0.3
+ FarClipPlane: 1000
+ Dutch: 0
+ ModeOverride: 0
+ PhysicalProperties:
+ GateFit: 2
+ SensorSize: {x: 21.946, y: 16.002}
+ LensShift: {x: 0, y: 0}
+ FocusDistance: 10
+ Iso: 200
+ ShutterSpeed: 0.005
+ Aperture: 16
+ BladeCount: 5
+ Curvature: {x: 2, y: 11}
+ BarrelClipping: 0.25
+ Anamorphism: 0
+ BlendHint: 0
+--- !u!1 &679262289
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 679262290}
+ - component: {fileID: 679262292}
+ - component: {fileID: 679262291}
+ m_Layer: 5
+ m_Name: Handle
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &679262290
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 679262289}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 1572990037}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 0, y: 0}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 20, y: 0}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &679262291
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 679262289}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: 10913, guid: 0000000000000000f000000000000000, type: 0}
+ m_Type: 0
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 1
+--- !u!222 &679262292
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 679262289}
+ m_CullTransparentMesh: 1
+--- !u!1 &692393850
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 692393851}
+ - component: {fileID: 692393853}
+ - component: {fileID: 692393852}
+ m_Layer: 5
+ m_Name: Text (TMP)
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &692393851
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 692393850}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 2036414579}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 1}
+ m_AnchorMax: {x: 1, y: 1}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 0, y: 150}
+ m_Pivot: {x: 0.5, y: 1}
+--- !u!114 &692393852
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 692393850}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_text: Choose mode
+ m_isRightToLeft: 0
+ m_fontAsset: {fileID: 11400000, guid: 4aca0db6ec111b5418bdc747168f9474, type: 2}
+ m_sharedMaterial: {fileID: -1441574381962284772, guid: 4aca0db6ec111b5418bdc747168f9474, type: 2}
+ m_fontSharedMaterials: []
+ m_fontMaterial: {fileID: 0}
+ m_fontMaterials: []
+ m_fontColor32:
+ serializedVersion: 2
+ rgba: 4294967295
+ m_fontColor: {r: 1, g: 1, b: 1, a: 1}
+ m_enableVertexGradient: 0
+ m_colorMode: 3
+ m_fontColorGradient:
+ topLeft: {r: 1, g: 1, b: 1, a: 1}
+ topRight: {r: 1, g: 1, b: 1, a: 1}
+ bottomLeft: {r: 1, g: 1, b: 1, a: 1}
+ bottomRight: {r: 1, g: 1, b: 1, a: 1}
+ m_fontColorGradientPreset: {fileID: 0}
+ m_spriteAsset: {fileID: 0}
+ m_tintAllSprites: 0
+ m_StyleSheet: {fileID: 0}
+ m_TextStyleHashCode: -1183493901
+ m_overrideHtmlColors: 0
+ m_faceColor:
+ serializedVersion: 2
+ rgba: 4294967295
+ m_fontSize: 100
+ m_fontSizeBase: 100
+ m_fontWeight: 400
+ m_enableAutoSizing: 0
+ m_fontSizeMin: 18
+ m_fontSizeMax: 72
+ m_fontStyle: 1
+ m_HorizontalAlignment: 2
+ m_VerticalAlignment: 512
+ m_textAlignment: 65535
+ m_characterSpacing: 0
+ m_wordSpacing: 0
+ m_lineSpacing: 0
+ m_lineSpacingMax: 0
+ m_paragraphSpacing: 0
+ m_charWidthMaxAdj: 0
+ m_TextWrappingMode: 1
+ m_wordWrappingRatios: 0.4
+ m_overflowMode: 0
+ m_linkedTextComponent: {fileID: 0}
+ parentLinkedComponent: {fileID: 0}
+ m_enableKerning: 0
+ m_ActiveFontFeatures: 6e72656b
+ m_enableExtraPadding: 0
+ checkPaddingRequired: 0
+ m_isRichText: 1
+ m_EmojiFallbackSupport: 1
+ m_parseCtrlCharacters: 1
+ m_isOrthographic: 1
+ m_isCullingEnabled: 0
+ m_horizontalMapping: 0
+ m_verticalMapping: 0
+ m_uvLineOffset: 0
+ m_geometrySortingOrder: 0
+ m_IsTextObjectScaleStatic: 0
+ m_VertexBufferAutoSizeReduction: 0
+ m_useMaxVisibleDescender: 1
+ m_pageToDisplay: 1
+ m_margin: {x: 0, y: 0, z: 0, w: 0}
+ m_isUsingLegacyAnimationComponent: 0
+ m_isVolumetricText: 0
+ m_hasFontAssetChanged: 0
+ m_baseMaterial: {fileID: 0}
+ m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
+--- !u!222 &692393853
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 692393850}
+ m_CullTransparentMesh: 1
+--- !u!1 &716790031
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 716790032}
+ - component: {fileID: 716790034}
+ - component: {fileID: 716790033}
+ m_Layer: 5
+ m_Name: Percentage
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &716790032
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 716790031}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 1209958791}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 1, y: 0}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 0, y: 50}
+ m_Pivot: {x: 0.5, y: 0}
+--- !u!114 &716790033
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 716790031}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_text: 100%
+ m_isRightToLeft: 0
+ m_fontAsset: {fileID: 11400000, guid: 4aca0db6ec111b5418bdc747168f9474, type: 2}
+ m_sharedMaterial: {fileID: -1441574381962284772, guid: 4aca0db6ec111b5418bdc747168f9474, type: 2}
+ m_fontSharedMaterials: []
+ m_fontMaterial: {fileID: 0}
+ m_fontMaterials: []
+ m_fontColor32:
+ serializedVersion: 2
+ rgba: 4294967295
+ m_fontColor: {r: 1, g: 1, b: 1, a: 1}
+ m_enableVertexGradient: 0
+ m_colorMode: 3
+ m_fontColorGradient:
+ topLeft: {r: 1, g: 1, b: 1, a: 1}
+ topRight: {r: 1, g: 1, b: 1, a: 1}
+ bottomLeft: {r: 1, g: 1, b: 1, a: 1}
+ bottomRight: {r: 1, g: 1, b: 1, a: 1}
+ m_fontColorGradientPreset: {fileID: 0}
+ m_spriteAsset: {fileID: 0}
+ m_tintAllSprites: 0
+ m_StyleSheet: {fileID: 0}
+ m_TextStyleHashCode: -1183493901
+ m_overrideHtmlColors: 0
+ m_faceColor:
+ serializedVersion: 2
+ rgba: 4294967295
+ m_fontSize: 36
+ m_fontSizeBase: 36
+ m_fontWeight: 400
+ m_enableAutoSizing: 0
+ m_fontSizeMin: 18
+ m_fontSizeMax: 72
+ m_fontStyle: 1
+ m_HorizontalAlignment: 2
+ m_VerticalAlignment: 512
+ m_textAlignment: 65535
+ m_characterSpacing: 0
+ m_wordSpacing: 0
+ m_lineSpacing: 0
+ m_lineSpacingMax: 0
+ m_paragraphSpacing: 0
+ m_charWidthMaxAdj: 0
+ m_TextWrappingMode: 1
+ m_wordWrappingRatios: 0.4
+ m_overflowMode: 0
+ m_linkedTextComponent: {fileID: 0}
+ parentLinkedComponent: {fileID: 0}
+ m_enableKerning: 0
+ m_ActiveFontFeatures: 6e72656b
+ m_enableExtraPadding: 0
+ checkPaddingRequired: 0
+ m_isRichText: 1
+ m_EmojiFallbackSupport: 1
+ m_parseCtrlCharacters: 1
+ m_isOrthographic: 1
+ m_isCullingEnabled: 0
+ m_horizontalMapping: 0
+ m_verticalMapping: 0
+ m_uvLineOffset: 0
+ m_geometrySortingOrder: 0
+ m_IsTextObjectScaleStatic: 0
+ m_VertexBufferAutoSizeReduction: 0
+ m_useMaxVisibleDescender: 1
+ m_pageToDisplay: 1
+ m_margin: {x: 0, y: 0, z: 0, w: 0}
+ m_isUsingLegacyAnimationComponent: 0
+ m_isVolumetricText: 0
+ m_hasFontAssetChanged: 0
+ m_baseMaterial: {fileID: 0}
+ m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
+--- !u!222 &716790034
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 716790031}
+ m_CullTransparentMesh: 1
+--- !u!1 &756408839
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 756408840}
+ - component: {fileID: 756408843}
+ - component: {fileID: 756408842}
+ - component: {fileID: 756408841}
+ m_Layer: 5
+ m_Name: Button
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &756408840
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 756408839}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 1866142928}
+ m_Father: {fileID: 2046658386}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 0, y: 0}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 0, y: 0}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &756408841
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 756408839}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Button
+ m_Navigation:
+ m_Mode: 3
+ m_WrapAround: 0
+ m_SelectOnUp: {fileID: 0}
+ m_SelectOnDown: {fileID: 0}
+ m_SelectOnLeft: {fileID: 0}
+ m_SelectOnRight: {fileID: 0}
+ m_Transition: 1
+ m_Colors:
+ m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+ m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+ m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
+ m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+ m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
+ m_ColorMultiplier: 1
+ m_FadeDuration: 0.1
+ m_SpriteState:
+ m_HighlightedSprite: {fileID: 0}
+ m_PressedSprite: {fileID: 0}
+ m_SelectedSprite: {fileID: 0}
+ m_DisabledSprite: {fileID: 0}
+ m_AnimationTriggers:
+ m_NormalTrigger: Normal
+ m_HighlightedTrigger: Highlighted
+ m_PressedTrigger: Pressed
+ m_SelectedTrigger: Selected
+ m_DisabledTrigger: Disabled
+ m_Interactable: 1
+ m_TargetGraphic: {fileID: 756408842}
+ m_OnClick:
+ m_PersistentCalls:
+ m_Calls: []
+--- !u!114 &756408842
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 756408839}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
+ m_Type: 1
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 1
+--- !u!222 &756408843
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 756408839}
+ m_CullTransparentMesh: 1
+--- !u!1 &799036563
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 799036564}
+ m_Layer: 0
+ m_Name: Player2_Spawn
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &799036564
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 799036563}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 15.07, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 377753196}
+ m_Father: {fileID: 204905895}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &846792101
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 846792102}
+ - component: {fileID: 846792105}
+ - component: {fileID: 846792104}
+ m_Layer: 0
+ m_Name: Player1_Cam
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &846792102
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 846792101}
+ serializedVersion: 2
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: -16.1, y: -12.2, z: -10}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &846792104
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 846792101}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b617507da6d07e749b7efdb34e1173e1, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ TrackerSettings:
+ BindingMode: 4
+ PositionDamping: {x: 2, y: 0.5, z: 1}
+ AngularDampingMode: 0
+ RotationDamping: {x: 1, y: 1, z: 1}
+ QuaternionDamping: 1
+ FollowOffset: {x: 0, y: 0, z: -10}
+--- !u!114 &846792105
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 846792101}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: f9dfa5b682dcd46bda6128250e975f58, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ Priority:
+ Enabled: 1
+ m_Value: 10
+ OutputChannel: 1
+ StandbyUpdate: 2
+ m_StreamingVersion: 20241001
+ m_LegacyPriority: 0
+ Target:
+ TrackingTarget: {fileID: 1009687014}
+ LookAtTarget: {fileID: 0}
+ CustomLookAtTarget: 0
+ Lens:
+ FieldOfView: 60
+ OrthographicSize: 15
+ NearClipPlane: 0.3
+ FarClipPlane: 1000
+ Dutch: 0
+ ModeOverride: 0
+ PhysicalProperties:
+ GateFit: 2
+ SensorSize: {x: 21.946, y: 16.002}
+ LensShift: {x: 0, y: 0}
+ FocusDistance: 10
+ Iso: 200
+ ShutterSpeed: 0.005
+ Aperture: 16
+ BladeCount: 5
+ Curvature: {x: 2, y: 11}
+ BarrelClipping: 0.25
+ Anamorphism: 0
+ BlendHint: 0
+--- !u!1 &858149303
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 858149305}
+ - component: {fileID: 858149304}
+ m_Layer: 0
+ m_Name: WideCam
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!114 &858149304
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 858149303}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: f9dfa5b682dcd46bda6128250e975f58, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ Priority:
+ Enabled: 1
+ m_Value: 10
+ OutputChannel: 1
+ StandbyUpdate: 2
+ m_StreamingVersion: 20241001
+ m_LegacyPriority: 0
+ Target:
+ TrackingTarget: {fileID: 0}
+ LookAtTarget: {fileID: 0}
+ CustomLookAtTarget: 0
+ Lens:
+ FieldOfView: 60
+ OrthographicSize: 25
+ NearClipPlane: 0.3
+ FarClipPlane: 1000
+ Dutch: 0
+ ModeOverride: 0
+ PhysicalProperties:
+ GateFit: 2
+ SensorSize: {x: 21.946, y: 16.002}
+ LensShift: {x: 0, y: 0}
+ FocusDistance: 10
+ Iso: 200
+ ShutterSpeed: 0.005
+ Aperture: 16
+ BladeCount: 5
+ Curvature: {x: 2, y: 11}
+ BarrelClipping: 0.25
+ Anamorphism: 0
+ BlendHint: 0
+--- !u!4 &858149305
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 858149303}
+ serializedVersion: 2
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: -10}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &868008367
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 868008368}
+ - component: {fileID: 868008370}
+ - component: {fileID: 868008369}
+ m_Layer: 5
+ m_Name: TurnIndicator_Title
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &868008368
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 868008367}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 1787332576}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 0, y: 0}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 500, y: 200}
+ m_Pivot: {x: 0.5, y: 1}
+--- !u!114 &868008369
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 868008367}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_text: Turn 1
+ m_isRightToLeft: 0
+ m_fontAsset: {fileID: 11400000, guid: 4aca0db6ec111b5418bdc747168f9474, type: 2}
+ m_sharedMaterial: {fileID: -1441574381962284772, guid: 4aca0db6ec111b5418bdc747168f9474, type: 2}
+ m_fontSharedMaterials: []
+ m_fontMaterial: {fileID: 0}
+ m_fontMaterials: []
+ m_fontColor32:
+ serializedVersion: 2
+ rgba: 4294967295
+ m_fontColor: {r: 1, g: 1, b: 1, a: 1}
+ m_enableVertexGradient: 0
+ m_colorMode: 3
+ m_fontColorGradient:
+ topLeft: {r: 1, g: 1, b: 1, a: 1}
+ topRight: {r: 1, g: 1, b: 1, a: 1}
+ bottomLeft: {r: 1, g: 1, b: 1, a: 1}
+ bottomRight: {r: 1, g: 1, b: 1, a: 1}
+ m_fontColorGradientPreset: {fileID: 0}
+ m_spriteAsset: {fileID: 0}
+ m_tintAllSprites: 0
+ m_StyleSheet: {fileID: 0}
+ m_TextStyleHashCode: -1183493901
+ m_overrideHtmlColors: 0
+ m_faceColor:
+ serializedVersion: 2
+ rgba: 4294967295
+ m_fontSize: 150
+ m_fontSizeBase: 150
+ m_fontWeight: 400
+ m_enableAutoSizing: 0
+ m_fontSizeMin: 18
+ m_fontSizeMax: 72
+ m_fontStyle: 1
+ m_HorizontalAlignment: 2
+ m_VerticalAlignment: 1024
+ m_textAlignment: 65535
+ m_characterSpacing: 0
+ m_wordSpacing: 0
+ m_lineSpacing: 0
+ m_lineSpacingMax: 0
+ m_paragraphSpacing: 0
+ m_charWidthMaxAdj: 0
+ m_TextWrappingMode: 1
+ m_wordWrappingRatios: 0.4
+ m_overflowMode: 0
+ m_linkedTextComponent: {fileID: 0}
+ parentLinkedComponent: {fileID: 0}
+ m_enableKerning: 0
+ m_ActiveFontFeatures: 6e72656b
+ m_enableExtraPadding: 0
+ checkPaddingRequired: 0
+ m_isRichText: 1
+ m_EmojiFallbackSupport: 1
+ m_parseCtrlCharacters: 1
+ m_isOrthographic: 1
+ m_isCullingEnabled: 0
+ m_horizontalMapping: 0
+ m_verticalMapping: 0
+ m_uvLineOffset: 0
+ m_geometrySortingOrder: 0
+ m_IsTextObjectScaleStatic: 0
+ m_VertexBufferAutoSizeReduction: 0
+ m_useMaxVisibleDescender: 1
+ m_pageToDisplay: 1
+ m_margin: {x: 0, y: 0, z: 0, w: 0}
+ m_isUsingLegacyAnimationComponent: 0
+ m_isVolumetricText: 0
+ m_hasFontAssetChanged: 0
+ m_baseMaterial: {fileID: 0}
+ m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
+--- !u!222 &868008370
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 868008367}
+ m_CullTransparentMesh: 1
+--- !u!1 &878268907
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 878268908}
+ - component: {fileID: 878268911}
+ - component: {fileID: 878268910}
+ - component: {fileID: 878268909}
+ - component: {fileID: 878268912}
+ m_Layer: 0
+ m_Name: ForFightGameManager
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &878268908
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 878268907}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &878268909
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 878268907}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: d82cbd88db94eec4ba7c19ef60b9fbbc, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: AppleHillsScripts::Minigames.FortFight.AI.FortFightAIController
+ aiThinkTime: 2
+--- !u!114 &878268910
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 878268907}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: c0b22cad084c0ba44b522474269c2c4b, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: AppleHillsScripts::Minigames.FortFight.Core.TurnManager
+--- !u!114 &878268911
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 878268907}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 517ef0a4f14e16f42987a95684371b73, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: AppleHillsScripts::Minigames.FortFight.Core.FortFightGameManager
+ turnManager: {fileID: 878268910}
+ aiController: {fileID: 878268909}
+ fortManager: {fileID: 878268912}
+ modeSelectionPage: {fileID: 2036414581}
+ gameplayPage: {fileID: 1585033674}
+--- !u!114 &878268912
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 878268907}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 47c585eb15414e8f802a6e31cbc6f501, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: AppleHillsScripts::Minigames.FortFight.Core.FortManager
+ premadeFortPrefabs:
+ - {fileID: 2303456945894359403, guid: 1481432e299ad794e937cb82505cfbb2, type: 3}
+ debugPlayerFortPrefab: {fileID: 0}
+ debugEnemyFortPrefab: {fileID: 0}
+ playerSpawnPoint: {fileID: 1009687014}
+ enemySpawnPoint: {fileID: 799036564}
+ useDebugForts: 0
+--- !u!1 &1007359450
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1007359451}
+ m_Layer: 0
+ m_Name: ------ Environment ------
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &1007359451
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1007359450}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 2.61582, y: -7.73078, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1009687013
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1009687014}
+ m_Layer: 0
+ m_Name: Player1_Spawn
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &1009687014
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1009687013}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: -16.1, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 92149715}
+ m_Father: {fileID: 204905895}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1156219948
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1156219952}
+ - component: {fileID: 1156219951}
+ - component: {fileID: 1156219950}
+ - component: {fileID: 1156219949}
+ m_Layer: 5
+ m_Name: MainCanvas
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!114 &1156219949
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1156219948}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.GraphicRaycaster
+ m_IgnoreReversedGraphics: 1
+ m_BlockingObjects: 0
+ m_BlockingMask:
+ serializedVersion: 2
+ m_Bits: 4294967295
+--- !u!114 &1156219950
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1156219948}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.CanvasScaler
+ m_UiScaleMode: 1
+ m_ReferencePixelsPerUnit: 100
+ m_ScaleFactor: 1
+ m_ReferenceResolution: {x: 1920, y: 10808}
+ m_ScreenMatchMode: 0
+ m_MatchWidthOrHeight: 0
+ m_PhysicalUnit: 3
+ m_FallbackScreenDPI: 96
+ m_DefaultSpriteDPI: 96
+ m_DynamicPixelsPerUnit: 1
+ m_PresetInfoIsWorld: 0
+--- !u!223 &1156219951
+Canvas:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1156219948}
+ m_Enabled: 1
+ serializedVersion: 3
+ m_RenderMode: 0
+ m_Camera: {fileID: 0}
+ m_PlaneDistance: 100
+ m_PixelPerfect: 0
+ m_ReceivesEvents: 1
+ m_OverrideSorting: 0
+ m_OverridePixelPerfect: 0
+ m_SortingBucketNormalizedSize: 0
+ m_VertexColorAlwaysGammaSpace: 0
+ m_AdditionalShaderChannelsFlag: 25
+ m_UpdateRectTransformForStandalone: 0
+ m_SortingLayerID: 0
+ m_SortingOrder: 0
+ m_TargetDisplay: 0
+--- !u!224 &1156219952
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1156219948}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 0, y: 0, z: 0}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 2036414579}
+ - {fileID: 1585033672}
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 0, y: 0}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 0, y: 0}
+ m_Pivot: {x: 0, y: 0}
+--- !u!1 &1192355915
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1192355916}
+ - component: {fileID: 1192355918}
+ - component: {fileID: 1192355917}
+ m_Layer: 5
+ m_Name: TurnIndicator_Description
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &1192355916
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1192355915}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 1787332576}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 0, y: 0}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 500, y: 100}
+ m_Pivot: {x: 0.5, y: 1}
+--- !u!114 &1192355917
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1192355915}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_text: Player's turn
+ m_isRightToLeft: 0
+ m_fontAsset: {fileID: 11400000, guid: 4aca0db6ec111b5418bdc747168f9474, type: 2}
+ m_sharedMaterial: {fileID: -1441574381962284772, guid: 4aca0db6ec111b5418bdc747168f9474, type: 2}
+ m_fontSharedMaterials: []
+ m_fontMaterial: {fileID: 0}
+ m_fontMaterials: []
+ m_fontColor32:
+ serializedVersion: 2
+ rgba: 4294967295
+ m_fontColor: {r: 1, g: 1, b: 1, a: 1}
+ m_enableVertexGradient: 0
+ m_colorMode: 3
+ m_fontColorGradient:
+ topLeft: {r: 1, g: 1, b: 1, a: 1}
+ topRight: {r: 1, g: 1, b: 1, a: 1}
+ bottomLeft: {r: 1, g: 1, b: 1, a: 1}
+ bottomRight: {r: 1, g: 1, b: 1, a: 1}
+ m_fontColorGradientPreset: {fileID: 0}
+ m_spriteAsset: {fileID: 0}
+ m_tintAllSprites: 0
+ m_StyleSheet: {fileID: 0}
+ m_TextStyleHashCode: -1183493901
+ m_overrideHtmlColors: 0
+ m_faceColor:
+ serializedVersion: 2
+ rgba: 4294967295
+ m_fontSize: 75
+ m_fontSizeBase: 75
+ m_fontWeight: 400
+ m_enableAutoSizing: 0
+ m_fontSizeMin: 18
+ m_fontSizeMax: 72
+ m_fontStyle: 0
+ m_HorizontalAlignment: 2
+ m_VerticalAlignment: 256
+ m_textAlignment: 65535
+ m_characterSpacing: 0
+ m_wordSpacing: 0
+ m_lineSpacing: 0
+ m_lineSpacingMax: 0
+ m_paragraphSpacing: 0
+ m_charWidthMaxAdj: 0
+ m_TextWrappingMode: 1
+ m_wordWrappingRatios: 0.4
+ m_overflowMode: 0
+ m_linkedTextComponent: {fileID: 0}
+ parentLinkedComponent: {fileID: 0}
+ m_enableKerning: 0
+ m_ActiveFontFeatures: 6e72656b
+ m_enableExtraPadding: 0
+ checkPaddingRequired: 0
+ m_isRichText: 1
+ m_EmojiFallbackSupport: 1
+ m_parseCtrlCharacters: 1
+ m_isOrthographic: 1
+ m_isCullingEnabled: 0
+ m_horizontalMapping: 0
+ m_verticalMapping: 0
+ m_uvLineOffset: 0
+ m_geometrySortingOrder: 0
+ m_IsTextObjectScaleStatic: 0
+ m_VertexBufferAutoSizeReduction: 0
+ m_useMaxVisibleDescender: 1
+ m_pageToDisplay: 1
+ m_margin: {x: 0, y: 0, z: 0, w: 0}
+ m_isUsingLegacyAnimationComponent: 0
+ m_isVolumetricText: 0
+ m_hasFontAssetChanged: 0
+ m_baseMaterial: {fileID: 0}
+ m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
+--- !u!222 &1192355918
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1192355915}
+ m_CullTransparentMesh: 1
+--- !u!1 &1205967276
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1205967277}
+ - component: {fileID: 1205967279}
+ - component: {fileID: 1205967278}
+ m_Layer: 5
+ m_Name: Text (TMP)
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &1205967277
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1205967276}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 1355330056}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 1, y: 1}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 0, y: 0}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &1205967278
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1205967276}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_text: PigMan Is thinking.....
+ m_isRightToLeft: 0
+ m_fontAsset: {fileID: 11400000, guid: 4aca0db6ec111b5418bdc747168f9474, type: 2}
+ m_sharedMaterial: {fileID: -1441574381962284772, guid: 4aca0db6ec111b5418bdc747168f9474, type: 2}
+ m_fontSharedMaterials: []
+ m_fontMaterial: {fileID: 0}
+ m_fontMaterials: []
+ m_fontColor32:
+ serializedVersion: 2
+ rgba: 4294967295
+ m_fontColor: {r: 1, g: 1, b: 1, a: 1}
+ m_enableVertexGradient: 0
+ m_colorMode: 3
+ m_fontColorGradient:
+ topLeft: {r: 1, g: 1, b: 1, a: 1}
+ topRight: {r: 1, g: 1, b: 1, a: 1}
+ bottomLeft: {r: 1, g: 1, b: 1, a: 1}
+ bottomRight: {r: 1, g: 1, b: 1, a: 1}
+ m_fontColorGradientPreset: {fileID: 0}
+ m_spriteAsset: {fileID: 0}
+ m_tintAllSprites: 0
+ m_StyleSheet: {fileID: 0}
+ m_TextStyleHashCode: -1183493901
+ m_overrideHtmlColors: 0
+ m_faceColor:
+ serializedVersion: 2
+ rgba: 4294967295
+ m_fontSize: 97.2
+ m_fontSizeBase: 97.2
+ m_fontWeight: 400
+ m_enableAutoSizing: 0
+ m_fontSizeMin: 18
+ m_fontSizeMax: 72
+ m_fontStyle: 0
+ m_HorizontalAlignment: 2
+ m_VerticalAlignment: 512
+ m_textAlignment: 65535
+ m_characterSpacing: 0
+ m_wordSpacing: 0
+ m_lineSpacing: 0
+ m_lineSpacingMax: 0
+ m_paragraphSpacing: 0
+ m_charWidthMaxAdj: 0
+ m_TextWrappingMode: 1
+ m_wordWrappingRatios: 0.4
+ m_overflowMode: 0
+ m_linkedTextComponent: {fileID: 0}
+ parentLinkedComponent: {fileID: 0}
+ m_enableKerning: 0
+ m_ActiveFontFeatures: 6e72656b
+ m_enableExtraPadding: 0
+ checkPaddingRequired: 0
+ m_isRichText: 1
+ m_EmojiFallbackSupport: 1
+ m_parseCtrlCharacters: 1
+ m_isOrthographic: 1
+ m_isCullingEnabled: 0
+ m_horizontalMapping: 0
+ m_verticalMapping: 0
+ m_uvLineOffset: 0
+ m_geometrySortingOrder: 0
+ m_IsTextObjectScaleStatic: 0
+ m_VertexBufferAutoSizeReduction: 0
+ m_useMaxVisibleDescender: 1
+ m_pageToDisplay: 1
+ m_margin: {x: 0, y: 0, z: 0, w: 0}
+ m_isUsingLegacyAnimationComponent: 0
+ m_isVolumetricText: 0
+ m_hasFontAssetChanged: 0
+ m_baseMaterial: {fileID: 0}
+ m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
+--- !u!222 &1205967279
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1205967276}
+ m_CullTransparentMesh: 1
+--- !u!1 &1209958790
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1209958791}
+ - component: {fileID: 1209958794}
+ - component: {fileID: 1209958793}
+ - component: {fileID: 1209958792}
+ m_Layer: 5
+ m_Name: Player2_HP
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &1209958791
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1209958790}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 1817075752}
+ - {fileID: 579665402}
+ - {fileID: 716790032}
+ m_Father: {fileID: 1286877329}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 1, y: 1}
+ m_AnchorMax: {x: 1, y: 1}
+ m_AnchoredPosition: {x: -50, y: -50}
+ m_SizeDelta: {x: 700, y: 150}
+ m_Pivot: {x: 1, y: 1}
+--- !u!114 &1209958792
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1209958790}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: ed9e5253aa2a40c9a9028767466456b1, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: AppleHillsScripts::Minigames.FortFight.UI.FortHealthUI
+ hpSlider: {fileID: 579665403}
+ hpPercentageText: {fileID: 716790033}
+ fortNameText: {fileID: 1817075753}
+ fillImage: {fileID: 1755632908}
+ healthyColor: {r: 0, g: 1, b: 0, a: 1}
+ damagedColor: {r: 1, g: 0.92156863, b: 0.015686275, a: 1}
+ criticalColor: {r: 1, g: 0, b: 0, a: 1}
+ autoBindToFort: 1
+ isPlayerFort: 0
+ fortManager: {fileID: 0}
+--- !u!114 &1209958793
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1209958790}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 0.392}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0}
+ m_Type: 1
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 1
+--- !u!222 &1209958794
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1209958790}
+ m_CullTransparentMesh: 1
+--- !u!1 &1250953778
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1250953779}
+ m_Layer: 0
+ m_Name: ------ Testing & Temp ------
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &1250953779
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1250953778}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 812.7291, y: 1202.7446, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1277046013
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1277046016}
+ - component: {fileID: 1277046015}
+ - component: {fileID: 1277046014}
m_Layer: 0
m_Name: EventSystem
m_TagString: Untagged
@@ -137,18 +3332,18 @@ GameObject:
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
---- !u!114 &580848253
+--- !u!114 &1277046014
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 580848252}
+ m_GameObject: {fileID: 1277046013}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 01614664b831546d2ae94a42149d80ac, type: 3}
m_Name:
- m_EditorClassIdentifier:
+ m_EditorClassIdentifier: Unity.InputSystem::UnityEngine.InputSystem.UI.InputSystemUIInputModule
m_SendPointerHoverToParent: 1
m_MoveRepeatDelay: 0.5
m_MoveRepeatRate: 0.1
@@ -168,28 +3363,28 @@ MonoBehaviour:
m_PointerBehavior: 0
m_CursorLockBehavior: 0
m_ScrollDeltaPerTick: 6
---- !u!114 &580848254
+--- !u!114 &1277046015
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 580848252}
+ m_GameObject: {fileID: 1277046013}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3}
m_Name:
- m_EditorClassIdentifier:
+ m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.EventSystems.EventSystem
m_FirstSelected: {fileID: 0}
m_sendNavigationEvents: 1
m_DragThreshold: 10
---- !u!4 &580848255
+--- !u!4 &1277046016
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 580848252}
+ m_GameObject: {fileID: 1277046013}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
@@ -198,6 +3393,827 @@ Transform:
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1286877328
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1286877329}
+ m_Layer: 5
+ m_Name: HealthBars
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &1286877329
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1286877328}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 1366022892}
+ - {fileID: 1209958791}
+ m_Father: {fileID: 1585033672}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 1, y: 1}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 0, y: 0}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!1 &1337135606
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1337135607}
+ - component: {fileID: 1337135608}
+ m_Layer: 5
+ m_Name: Slider
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &1337135607
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1337135606}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 490925383}
+ - {fileID: 1345415458}
+ - {fileID: 1572990037}
+ m_Father: {fileID: 1366022892}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0.5}
+ m_AnchorMax: {x: 1, y: 0.5}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 0, y: 67.7}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &1337135608
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1337135606}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 67db9e8f0e2ae9c40bc1e2b64352a6b4, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Slider
+ m_Navigation:
+ m_Mode: 3
+ m_WrapAround: 0
+ m_SelectOnUp: {fileID: 0}
+ m_SelectOnDown: {fileID: 0}
+ m_SelectOnLeft: {fileID: 0}
+ m_SelectOnRight: {fileID: 0}
+ m_Transition: 1
+ m_Colors:
+ m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+ m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+ m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
+ m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+ m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
+ m_ColorMultiplier: 1
+ m_FadeDuration: 0.1
+ m_SpriteState:
+ m_HighlightedSprite: {fileID: 0}
+ m_PressedSprite: {fileID: 0}
+ m_SelectedSprite: {fileID: 0}
+ m_DisabledSprite: {fileID: 0}
+ m_AnimationTriggers:
+ m_NormalTrigger: Normal
+ m_HighlightedTrigger: Highlighted
+ m_PressedTrigger: Pressed
+ m_SelectedTrigger: Selected
+ m_DisabledTrigger: Disabled
+ m_Interactable: 0
+ m_TargetGraphic: {fileID: 679262291}
+ m_FillRect: {fileID: 501271719}
+ m_HandleRect: {fileID: 679262290}
+ m_Direction: 0
+ m_MinValue: 0
+ m_MaxValue: 1
+ m_WholeNumbers: 0
+ m_Value: 1
+ m_OnValueChanged:
+ m_PersistentCalls:
+ m_Calls: []
+--- !u!1 &1345415457
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1345415458}
+ m_Layer: 5
+ m_Name: Fill Area
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &1345415458
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1345415457}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 501271719}
+ m_Father: {fileID: 1337135607}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0.25}
+ m_AnchorMax: {x: 1, y: 0.75}
+ m_AnchoredPosition: {x: -5, y: 0}
+ m_SizeDelta: {x: -20, y: 0}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!1 &1355330055
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1355330056}
+ - component: {fileID: 1355330058}
+ - component: {fileID: 1355330057}
+ m_Layer: 5
+ m_Name: AiActionPanel
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &1355330056
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1355330055}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 1205967277}
+ m_Father: {fileID: 1585033672}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0.5, y: 0.5}
+ m_AnchorMax: {x: 0.5, y: 0.5}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 500, y: 300}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &1355330057
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1355330055}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
+ m_Material: {fileID: 0}
+ m_Color: {r: 0, g: 0, b: 0, a: 0.5019608}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: 0}
+ m_Type: 0
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 1
+--- !u!222 &1355330058
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1355330055}
+ m_CullTransparentMesh: 1
+--- !u!1 &1366022891
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1366022892}
+ - component: {fileID: 1366022894}
+ - component: {fileID: 1366022893}
+ - component: {fileID: 1366022895}
+ m_Layer: 5
+ m_Name: Player1_HP
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &1366022892
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1366022891}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 601402838}
+ - {fileID: 1337135607}
+ - {fileID: 123702486}
+ m_Father: {fileID: 1286877329}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 1}
+ m_AnchorMax: {x: 0, y: 1}
+ m_AnchoredPosition: {x: 50, y: -50}
+ m_SizeDelta: {x: 700, y: 150}
+ m_Pivot: {x: 0, y: 1}
+--- !u!114 &1366022893
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1366022891}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 0.392}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0}
+ m_Type: 1
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 1
+--- !u!222 &1366022894
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1366022891}
+ m_CullTransparentMesh: 1
+--- !u!114 &1366022895
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1366022891}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: ed9e5253aa2a40c9a9028767466456b1, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: AppleHillsScripts::Minigames.FortFight.UI.FortHealthUI
+ hpSlider: {fileID: 1337135608}
+ hpPercentageText: {fileID: 123702487}
+ fortNameText: {fileID: 601402839}
+ fillImage: {fileID: 501271720}
+ healthyColor: {r: 0, g: 1, b: 0, a: 1}
+ damagedColor: {r: 1, g: 0.92156863, b: 0.015686275, a: 1}
+ criticalColor: {r: 1, g: 0, b: 0, a: 1}
+ autoBindToFort: 1
+ isPlayerFort: 1
+ fortManager: {fileID: 0}
+--- !u!1 &1410755663
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1410755664}
+ - component: {fileID: 1410755667}
+ - component: {fileID: 1410755666}
+ - component: {fileID: 1410755665}
+ m_Layer: 5
+ m_Name: SinglePlayerButton
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &1410755664
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1410755663}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 198234816}
+ m_Father: {fileID: 2036414579}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0.2, y: 0.5}
+ m_AnchorMax: {x: 0.2, y: 0.5}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 200, y: 200}
+ m_Pivot: {x: 0, y: 0.5}
+--- !u!114 &1410755665
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1410755663}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Button
+ m_Navigation:
+ m_Mode: 3
+ m_WrapAround: 0
+ m_SelectOnUp: {fileID: 0}
+ m_SelectOnDown: {fileID: 0}
+ m_SelectOnLeft: {fileID: 0}
+ m_SelectOnRight: {fileID: 0}
+ m_Transition: 1
+ m_Colors:
+ m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+ m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+ m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
+ m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+ m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
+ m_ColorMultiplier: 1
+ m_FadeDuration: 0.1
+ m_SpriteState:
+ m_HighlightedSprite: {fileID: 0}
+ m_PressedSprite: {fileID: 0}
+ m_SelectedSprite: {fileID: 0}
+ m_DisabledSprite: {fileID: 0}
+ m_AnimationTriggers:
+ m_NormalTrigger: Normal
+ m_HighlightedTrigger: Highlighted
+ m_PressedTrigger: Pressed
+ m_SelectedTrigger: Selected
+ m_DisabledTrigger: Disabled
+ m_Interactable: 1
+ m_TargetGraphic: {fileID: 1410755666}
+ m_OnClick:
+ m_PersistentCalls:
+ m_Calls: []
+--- !u!114 &1410755666
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1410755663}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
+ m_Type: 1
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 1
+--- !u!222 &1410755667
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1410755663}
+ m_CullTransparentMesh: 1
+--- !u!1 &1572990036
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1572990037}
+ m_Layer: 5
+ m_Name: Handle Slide Area
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &1572990037
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1572990036}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 679262290}
+ m_Father: {fileID: 1337135607}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 1, y: 1}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: -20, y: 0}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!1 &1582224592
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1582224593}
+ m_Layer: 0
+ m_Name: ------ Cameras ------
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &1582224593
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1582224592}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: -18.22685, y: -11.62115, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1585033671
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1585033672}
+ - component: {fileID: 1585033673}
+ - component: {fileID: 1585033674}
+ m_Layer: 5
+ m_Name: MinigameHUD
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &1585033672
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1585033671}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 1787332576}
+ - {fileID: 2046658386}
+ - {fileID: 1355330056}
+ - {fileID: 1286877329}
+ m_Father: {fileID: 1156219952}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 1, y: 1}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 0, y: 0}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!225 &1585033673
+CanvasGroup:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1585033671}
+ m_Enabled: 1
+ m_Alpha: 1
+ m_Interactable: 1
+ m_BlocksRaycasts: 1
+ m_IgnoreParentGroups: 0
+--- !u!114 &1585033674
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1585033671}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: e22e2729514a5ee40bb2d4c23fbeb75f, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: AppleHillsScripts::Minigames.FortFight.UI.GameplayPage
+ PageName: MinigameHUD
+ transitionDuration: 0.3
+ turnIndicatorText: {fileID: 868008369}
+ currentPlayerText: {fileID: 1192355917}
+ takeActionButton: {fileID: 756408841}
+ actionButtonText: {fileID: 1866142929}
+ canvasGroup: {fileID: 1585033673}
+ playerActionPanel: {fileID: 2046658385}
+ aiTurnPanel: {fileID: 1355330055}
+--- !u!1 &1674657451
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1674657453}
+ - component: {fileID: 1674657452}
+ m_Layer: 0
+ m_Name: CameraController
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!114 &1674657452
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1674657451}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: aa30fcfc16ed44d59edd73fd0224d03c, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: AppleHillsScripts::Minigames.FortFight.Core.CameraController
+ wideViewCamera: {fileID: 858149304}
+ playerOneCamera: {fileID: 846792105}
+ playerTwoCamera: {fileID: 630420675}
+ turnManager: {fileID: 878268910}
+ useWideViewTransitions: 1
+--- !u!4 &1674657453
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1674657451}
+ serializedVersion: 2
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 2.14554, y: -3.91706, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1755632906
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1755632907}
+ - component: {fileID: 1755632909}
+ - component: {fileID: 1755632908}
+ m_Layer: 5
+ m_Name: Fill
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &1755632907
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1755632906}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 137730097}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 0, y: 0}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 10, y: 0}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &1755632908
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1755632906}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
+ m_Material: {fileID: 0}
+ m_Color: {r: 0.072806716, g: 1, b: 0, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
+ m_Type: 1
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 1
+--- !u!222 &1755632909
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1755632906}
+ m_CullTransparentMesh: 1
+--- !u!1 &1760833214
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1760833216}
+ m_Layer: 0
+ m_Name: DebugHelper
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &1760833216
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1760833214}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1787332575
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1787332576}
+ - component: {fileID: 1787332577}
+ m_Layer: 5
+ m_Name: TurnIndicators
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &1787332576
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1787332575}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 868008368}
+ - {fileID: 1192355916}
+ m_Father: {fileID: 1585033672}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0.5, y: 1}
+ m_AnchorMax: {x: 0.5, y: 1}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 500, y: 150}
+ m_Pivot: {x: 0.5, y: 1}
+--- !u!114 &1787332577
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1787332575}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.VerticalLayoutGroup
+ m_Padding:
+ m_Left: 0
+ m_Right: 0
+ m_Top: 0
+ m_Bottom: 0
+ m_ChildAlignment: 0
+ m_Spacing: 0
+ m_ChildForceExpandWidth: 1
+ m_ChildForceExpandHeight: 1
+ m_ChildControlWidth: 0
+ m_ChildControlHeight: 0
+ m_ChildScaleWidth: 0
+ m_ChildScaleHeight: 0
+ m_ReverseArrangement: 0
--- !u!1 &1810521056
GameObject:
m_ObjectHideFlags: 0
@@ -337,7 +4353,7 @@ Camera:
far clip plane: 1000
field of view: 60
orthographic: 1
- orthographic size: 15
+ orthographic size: 25
m_Depth: -1
m_CullingMask:
serializedVersion: 2
@@ -362,13 +4378,13 @@ Transform:
m_GameObject: {fileID: 1810521056}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
- m_LocalPosition: {x: -34.3, y: -36.3, z: -10}
+ m_LocalPosition: {x: 0, y: 0, z: -10}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!1 &2103114174
+--- !u!1 &1817075751
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
@@ -376,109 +4392,461 @@ GameObject:
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- - component: {fileID: 2103114178}
- - component: {fileID: 2103114177}
- - component: {fileID: 2103114176}
- - component: {fileID: 2103114175}
- m_Layer: 0
- m_Name: CinemachineCamera
+ - component: {fileID: 1817075752}
+ - component: {fileID: 1817075754}
+ - component: {fileID: 1817075753}
+ m_Layer: 5
+ m_Name: Name
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
---- !u!114 &2103114175
+--- !u!224 &1817075752
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1817075751}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 1209958791}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 1}
+ m_AnchorMax: {x: 1, y: 1}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 0, y: 50}
+ m_Pivot: {x: 0.5, y: 1}
+--- !u!114 &1817075753
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 2103114174}
+ m_GameObject: {fileID: 1817075751}
m_Enabled: 1
m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: f453f694addf4275988fac205bc91968, type: 3}
+ m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
m_Name:
- m_EditorClassIdentifier:
- BoundingShape2D: {fileID: 0}
- Damping: 3
- SlowingDistance: 20
- OversizeWindow:
- Enabled: 0
- MaxWindowSize: 0
- Padding: 0
- m_LegacyMaxWindowSize: -2
---- !u!114 &2103114176
+ m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_text: PLAYER 2
+ m_isRightToLeft: 0
+ m_fontAsset: {fileID: 11400000, guid: 4aca0db6ec111b5418bdc747168f9474, type: 2}
+ m_sharedMaterial: {fileID: -1441574381962284772, guid: 4aca0db6ec111b5418bdc747168f9474, type: 2}
+ m_fontSharedMaterials: []
+ m_fontMaterial: {fileID: 0}
+ m_fontMaterials: []
+ m_fontColor32:
+ serializedVersion: 2
+ rgba: 4294967295
+ m_fontColor: {r: 1, g: 1, b: 1, a: 1}
+ m_enableVertexGradient: 0
+ m_colorMode: 3
+ m_fontColorGradient:
+ topLeft: {r: 1, g: 1, b: 1, a: 1}
+ topRight: {r: 1, g: 1, b: 1, a: 1}
+ bottomLeft: {r: 1, g: 1, b: 1, a: 1}
+ bottomRight: {r: 1, g: 1, b: 1, a: 1}
+ m_fontColorGradientPreset: {fileID: 0}
+ m_spriteAsset: {fileID: 0}
+ m_tintAllSprites: 0
+ m_StyleSheet: {fileID: 0}
+ m_TextStyleHashCode: -1183493901
+ m_overrideHtmlColors: 0
+ m_faceColor:
+ serializedVersion: 2
+ rgba: 4294967295
+ m_fontSize: 36
+ m_fontSizeBase: 36
+ m_fontWeight: 400
+ m_enableAutoSizing: 0
+ m_fontSizeMin: 18
+ m_fontSizeMax: 72
+ m_fontStyle: 1
+ m_HorizontalAlignment: 2
+ m_VerticalAlignment: 512
+ m_textAlignment: 65535
+ m_characterSpacing: 0
+ m_wordSpacing: 0
+ m_lineSpacing: 0
+ m_lineSpacingMax: 0
+ m_paragraphSpacing: 0
+ m_charWidthMaxAdj: 0
+ m_TextWrappingMode: 1
+ m_wordWrappingRatios: 0.4
+ m_overflowMode: 0
+ m_linkedTextComponent: {fileID: 0}
+ parentLinkedComponent: {fileID: 0}
+ m_enableKerning: 0
+ m_ActiveFontFeatures: 6e72656b
+ m_enableExtraPadding: 0
+ checkPaddingRequired: 0
+ m_isRichText: 1
+ m_EmojiFallbackSupport: 1
+ m_parseCtrlCharacters: 1
+ m_isOrthographic: 1
+ m_isCullingEnabled: 0
+ m_horizontalMapping: 0
+ m_verticalMapping: 0
+ m_uvLineOffset: 0
+ m_geometrySortingOrder: 0
+ m_IsTextObjectScaleStatic: 0
+ m_VertexBufferAutoSizeReduction: 0
+ m_useMaxVisibleDescender: 1
+ m_pageToDisplay: 1
+ m_margin: {x: 0, y: 0, z: 0, w: 0}
+ m_isUsingLegacyAnimationComponent: 0
+ m_isVolumetricText: 0
+ m_hasFontAssetChanged: 0
+ m_baseMaterial: {fileID: 0}
+ m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
+--- !u!222 &1817075754
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1817075751}
+ m_CullTransparentMesh: 1
+--- !u!1 &1866142927
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1866142928}
+ - component: {fileID: 1866142930}
+ - component: {fileID: 1866142929}
+ m_Layer: 5
+ m_Name: Text (TMP)
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &1866142928
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1866142927}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 756408840}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 1, y: 1}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 0, y: 0}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &1866142929
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 2103114174}
+ m_GameObject: {fileID: 1866142927}
m_Enabled: 1
m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: b617507da6d07e749b7efdb34e1173e1, type: 3}
+ m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
m_Name:
- m_EditorClassIdentifier:
- TrackerSettings:
- BindingMode: 4
- PositionDamping: {x: 2, y: 0.5, z: 1}
- AngularDampingMode: 0
- RotationDamping: {x: 1, y: 1, z: 1}
- QuaternionDamping: 1
- FollowOffset: {x: 0, y: 0, z: -10}
---- !u!114 &2103114177
+ m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_text: Take Action
+ m_isRightToLeft: 0
+ m_fontAsset: {fileID: 11400000, guid: 4aca0db6ec111b5418bdc747168f9474, type: 2}
+ m_sharedMaterial: {fileID: -1441574381962284772, guid: 4aca0db6ec111b5418bdc747168f9474, type: 2}
+ m_fontSharedMaterials: []
+ m_fontMaterial: {fileID: 0}
+ m_fontMaterials: []
+ m_fontColor32:
+ serializedVersion: 2
+ rgba: 4278190080
+ m_fontColor: {r: 0, g: 0, b: 0, a: 1}
+ m_enableVertexGradient: 0
+ m_colorMode: 3
+ m_fontColorGradient:
+ topLeft: {r: 1, g: 1, b: 1, a: 1}
+ topRight: {r: 1, g: 1, b: 1, a: 1}
+ bottomLeft: {r: 1, g: 1, b: 1, a: 1}
+ bottomRight: {r: 1, g: 1, b: 1, a: 1}
+ m_fontColorGradientPreset: {fileID: 0}
+ m_spriteAsset: {fileID: 0}
+ m_tintAllSprites: 0
+ m_StyleSheet: {fileID: 0}
+ m_TextStyleHashCode: -1183493901
+ m_overrideHtmlColors: 0
+ m_faceColor:
+ serializedVersion: 2
+ rgba: 4294967295
+ m_fontSize: 62.4
+ m_fontSizeBase: 62.4
+ m_fontWeight: 400
+ m_enableAutoSizing: 0
+ m_fontSizeMin: 18
+ m_fontSizeMax: 72
+ m_fontStyle: 1
+ m_HorizontalAlignment: 2
+ m_VerticalAlignment: 512
+ m_textAlignment: 65535
+ m_characterSpacing: 0
+ m_wordSpacing: 0
+ m_lineSpacing: 0
+ m_lineSpacingMax: 0
+ m_paragraphSpacing: 0
+ m_charWidthMaxAdj: 0
+ m_TextWrappingMode: 1
+ m_wordWrappingRatios: 0.4
+ m_overflowMode: 0
+ m_linkedTextComponent: {fileID: 0}
+ parentLinkedComponent: {fileID: 0}
+ m_enableKerning: 0
+ m_ActiveFontFeatures: 6e72656b
+ m_enableExtraPadding: 0
+ checkPaddingRequired: 0
+ m_isRichText: 1
+ m_EmojiFallbackSupport: 1
+ m_parseCtrlCharacters: 1
+ m_isOrthographic: 1
+ m_isCullingEnabled: 0
+ m_horizontalMapping: 0
+ m_verticalMapping: 0
+ m_uvLineOffset: 0
+ m_geometrySortingOrder: 0
+ m_IsTextObjectScaleStatic: 0
+ m_VertexBufferAutoSizeReduction: 0
+ m_useMaxVisibleDescender: 1
+ m_pageToDisplay: 1
+ m_margin: {x: 0, y: 0, z: 0, w: 0}
+ m_isUsingLegacyAnimationComponent: 0
+ m_isVolumetricText: 0
+ m_hasFontAssetChanged: 0
+ m_baseMaterial: {fileID: 0}
+ m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
+--- !u!222 &1866142930
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1866142927}
+ m_CullTransparentMesh: 1
+--- !u!1 &2036414578
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 2036414579}
+ - component: {fileID: 2036414580}
+ - component: {fileID: 2036414581}
+ m_Layer: 5
+ m_Name: ModeSelectionPage
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &2036414579
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2036414578}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 298557365}
+ - {fileID: 692393851}
+ - {fileID: 1410755664}
+ - {fileID: 552665970}
+ m_Father: {fileID: 1156219952}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0.2, y: 0.2}
+ m_AnchorMax: {x: 0.8, y: 0.8}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 0, y: 0}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!225 &2036414580
+CanvasGroup:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2036414578}
+ m_Enabled: 1
+ m_Alpha: 1
+ m_Interactable: 1
+ m_BlocksRaycasts: 1
+ m_IgnoreParentGroups: 0
+--- !u!114 &2036414581
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 2103114174}
+ m_GameObject: {fileID: 2036414578}
m_Enabled: 1
m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: f9dfa5b682dcd46bda6128250e975f58, type: 3}
+ m_Script: {fileID: 11500000, guid: 3c1ab5687204db54eaa4ea7f812b3c06, type: 3}
m_Name:
- m_EditorClassIdentifier:
- Priority:
- Enabled: 0
- m_Value: 0
- OutputChannel: 1
- StandbyUpdate: 2
- m_StreamingVersion: 20241001
- m_LegacyPriority: 0
- Target:
- TrackingTarget: {fileID: 0}
- LookAtTarget: {fileID: 0}
- CustomLookAtTarget: 0
- Lens:
- FieldOfView: 60
- OrthographicSize: 15
- NearClipPlane: 0.3
- FarClipPlane: 1000
- Dutch: 0
- ModeOverride: 0
- PhysicalProperties:
- GateFit: 2
- SensorSize: {x: 21.946, y: 16.002}
- LensShift: {x: 0, y: 0}
- FocusDistance: 10
- Iso: 200
- ShutterSpeed: 0.005
- Aperture: 16
- BladeCount: 5
- Curvature: {x: 2, y: 11}
- BarrelClipping: 0.25
- Anamorphism: 0
- BlendHint: 0
---- !u!4 &2103114178
+ m_EditorClassIdentifier: AppleHillsScripts::Minigames.FortFight.UI.ModeSelectionPage
+ PageName: ModeSelectionPAge
+ transitionDuration: 0.3
+ singlePlayerButton: {fileID: 1410755665}
+ twoPlayerButton: {fileID: 552665971}
+ titleText: {fileID: 692393850}
+ canvasGroup: {fileID: 2036414580}
+--- !u!1 &2046658385
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 2046658386}
+ - component: {fileID: 2046658387}
+ m_Layer: 5
+ m_Name: PlayerActionPanel
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &2046658386
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2046658385}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 756408840}
+ m_Father: {fileID: 1585033672}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0.5, y: 0.5}
+ m_AnchorMax: {x: 0.5, y: 0.5}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 300, y: 300}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &2046658387
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2046658385}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.VerticalLayoutGroup
+ m_Padding:
+ m_Left: 0
+ m_Right: 0
+ m_Top: 0
+ m_Bottom: 0
+ m_ChildAlignment: 0
+ m_Spacing: 0
+ m_ChildForceExpandWidth: 1
+ m_ChildForceExpandHeight: 1
+ m_ChildControlWidth: 1
+ m_ChildControlHeight: 1
+ m_ChildScaleWidth: 0
+ m_ChildScaleHeight: 0
+ m_ReverseArrangement: 0
+--- !u!1 &2071632754
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 2071632755}
+ m_Layer: 0
+ m_Name: Player1_Setup
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &2071632755
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 2103114174}
+ m_GameObject: {fileID: 2071632754}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
- m_LocalPosition: {x: -34.3, y: -36.3, z: -10}
+ m_LocalPosition: {x: -0.11511, y: -3.77069, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &2124351764
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 2124351765}
+ m_Layer: 0
+ m_Name: ------ Managers & Controllers -----
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &2124351765
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2124351764}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 2.14554, y: -3.91706, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
@@ -489,5 +4857,19 @@ SceneRoots:
m_ObjectHideFlags: 0
m_Roots:
- {fileID: 1810521061}
- - {fileID: 580848255}
- - {fileID: 2103114178}
+ - {fileID: 1156219952}
+ - {fileID: 1277046016}
+ - {fileID: 2124351765}
+ - {fileID: 1674657453}
+ - {fileID: 878268908}
+ - {fileID: 1007359451}
+ - {fileID: 570857724}
+ - {fileID: 204905895}
+ - {fileID: 1250953779}
+ - {fileID: 534849268}
+ - {fileID: 1760833216}
+ - {fileID: 2071632755}
+ - {fileID: 1582224593}
+ - {fileID: 846792102}
+ - {fileID: 630420672}
+ - {fileID: 858149305}
diff --git a/Assets/Scripts/Core/GameManager.cs b/Assets/Scripts/Core/GameManager.cs
index 02f75cfd..e238829f 100644
--- a/Assets/Scripts/Core/GameManager.cs
+++ b/Assets/Scripts/Core/GameManager.cs
@@ -5,6 +5,7 @@ using AppleHills.Core.Settings;
using Core.Lifecycle;
using Core.Settings;
using Input;
+using Minigames.FortFight.Core;
using UnityEngine;
namespace Core
@@ -173,7 +174,9 @@ namespace Core
var sortingGameSettings = SettingsProvider.Instance.LoadSettingsSynchronous();
var birdPooperSettings = SettingsProvider.Instance.LoadSettingsSynchronous();
var statueDressupSettings = SettingsProvider.Instance.LoadSettingsSynchronous();
-
+ var fortFightSettings = SettingsProvider.Instance.LoadSettingsSynchronous();
+
+
// Register settings with service locator
if (playerSettings != null)
{
@@ -244,10 +247,21 @@ namespace Core
{
Debug.LogError("Failed to load StatueDressupSettings");
}
+
+ if (fortFightSettings != null)
+ {
+ ServiceLocator.Register(fortFightSettings);
+ Logging.Debug("FortFightSettings registered successfully");
+ }
+ else
+ {
+ Debug.LogError("Failed to load FortFightSettings");
+ }
// Log success
_settingsLoaded = playerSettings != null && interactionSettings != null && minigameSettings != null
- && cardSystemSettings != null && birdPooperSettings != null && statueDressupSettings != null;
+ && cardSystemSettings != null && birdPooperSettings != null && statueDressupSettings != null
+ && fortFightSettings != null;
if (_settingsLoaded)
{
Logging.Debug("All settings loaded and registered with ServiceLocator");
@@ -312,5 +326,8 @@ namespace Core
public float PlayerStopDistance => GetSettings()?.PlayerStopDistance ?? 6.0f;
public float PlayerStopDistanceDirectInteraction => GetSettings()?.PlayerStopDistanceDirectInteraction ?? 2.0f;
public float DefaultPuzzlePromptRange => GetSettings()?.DefaultPuzzlePromptRange ?? 3.0f;
+
+ // Fort Fight Settings
+ public float WeakPointExplosionRadius => GetSettings()?.WeakPointExplosionRadius ?? 2.5f;
}
}
diff --git a/Assets/Scripts/Core/Settings/SettingsInterfaces.cs b/Assets/Scripts/Core/Settings/SettingsInterfaces.cs
index 93c79dcb..35b030ab 100644
--- a/Assets/Scripts/Core/Settings/SettingsInterfaces.cs
+++ b/Assets/Scripts/Core/Settings/SettingsInterfaces.cs
@@ -213,4 +213,30 @@ namespace AppleHills.Core.Settings
string StateSaveKey { get; }
int MaxSavedDecorations { get; }
}
+
+ ///
+ /// Interface for Fort Fight minigame settings
+ ///
+ public interface IFortFightSettings
+ {
+ // Block configurations
+ System.Collections.Generic.List MaterialConfigs { get; }
+ System.Collections.Generic.List SizeConfigs { get; }
+
+ // Weak point settings
+ float WeakPointExplosionRadius { get; }
+ float WeakPointExplosionDamage { get; }
+ float WeakPointExplosionForce { get; }
+
+ // Fort settings
+ float FortDefeatThreshold { get; }
+ float PhysicsGravityScale { get; }
+
+ // Visual settings
+ Color DamageColorTint { get; }
+
+ // Helper methods
+ Minigames.FortFight.Settings.BlockMaterialConfig GetMaterialConfig(Minigames.FortFight.Data.BlockMaterial material);
+ Minigames.FortFight.Settings.BlockSizeConfig GetSizeConfig(Minigames.FortFight.Data.BlockSize size);
+ }
}
diff --git a/Assets/Scripts/Core/SettingsAccess.cs b/Assets/Scripts/Core/SettingsAccess.cs
index f2c9d4d2..0d2ec83c 100644
--- a/Assets/Scripts/Core/SettingsAccess.cs
+++ b/Assets/Scripts/Core/SettingsAccess.cs
@@ -15,12 +15,14 @@ namespace AppleHills
private static GetSettingsValueDelegate getPlayerStopDistanceProvider;
private static GetSettingsValueDelegate getPlayerStopDistanceDirectInteractionProvider;
private static GetSettingsValueDelegate getPuzzlePromptRangeProvider;
+ private static GetSettingsValueDelegate getWeakPointExplosionRadiusProvider;
// Editor-only method to set up providers - will be called from editor code
public static void SetupEditorProviders(
GetSettingsValueDelegate playerStopDistanceProvider,
GetSettingsValueDelegate playerStopDistanceDirectInteractionProvider,
- GetSettingsValueDelegate puzzlePromptRangeProvider)
+ GetSettingsValueDelegate puzzlePromptRangeProvider,
+ GetSettingsValueDelegate weakPointExplosionRadiusProvider)
{
#if UNITY_EDITOR
if (!Application.isPlaying)
@@ -28,6 +30,7 @@ namespace AppleHills
getPlayerStopDistanceProvider = playerStopDistanceProvider;
getPlayerStopDistanceDirectInteractionProvider = playerStopDistanceDirectInteractionProvider;
getPuzzlePromptRangeProvider = puzzlePromptRangeProvider;
+ getWeakPointExplosionRadiusProvider = weakPointExplosionRadiusProvider;
}
#endif
}
@@ -73,6 +76,19 @@ namespace AppleHills
return GameManager.Instance.DefaultPuzzlePromptRange;
}
+ // Fort Fight Settings
+ public static float GetWeakPointExplosionRadius()
+ {
+ #if UNITY_EDITOR
+ if (!Application.isPlaying && getWeakPointExplosionRadiusProvider != null)
+ {
+ return getWeakPointExplosionRadiusProvider();
+ }
+ #endif
+
+ return GameManager.Instance.WeakPointExplosionRadius;
+ }
+
// Add more methods as needed for other settings
}
}
diff --git a/Assets/Scripts/Minigames/FortFight.meta b/Assets/Scripts/Minigames/FortFight.meta
new file mode 100644
index 00000000..8eb6dab0
--- /dev/null
+++ b/Assets/Scripts/Minigames/FortFight.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 39b2d9cda7ea6d745a490a155fc6f9ca
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Minigames/FortFight/AI.meta b/Assets/Scripts/Minigames/FortFight/AI.meta
new file mode 100644
index 00000000..eb3a9f6b
--- /dev/null
+++ b/Assets/Scripts/Minigames/FortFight/AI.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: fccff300fcb6488419e3871d8f59fb95
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Minigames/FortFight/AI/FortFightAIController.cs b/Assets/Scripts/Minigames/FortFight/AI/FortFightAIController.cs
new file mode 100644
index 00000000..2d43e75a
--- /dev/null
+++ b/Assets/Scripts/Minigames/FortFight/AI/FortFightAIController.cs
@@ -0,0 +1,111 @@
+using System.Collections;
+using Core;
+using Core.Lifecycle;
+using Minigames.FortFight.Core;
+using Minigames.FortFight.Data;
+using UnityEngine;
+
+namespace Minigames.FortFight.AI
+{
+ ///
+ /// AI controller for the PigMan opponent.
+ /// Phase 1: Stubbed implementation - just simulates taking a turn.
+ /// Phase 4: Full implementation with trajectory calculation and target selection.
+ ///
+ public class FortFightAIController : ManagedBehaviour
+ {
+ [Header("AI Settings (Stubbed)")]
+ [SerializeField] private float aiThinkTime = 1.5f; // Time AI "thinks" before acting
+
+ private TurnManager turnManager;
+ private bool isThinking = false;
+
+ #region Initialization
+
+ ///
+ /// Initialize the AI controller
+ ///
+ public void Initialize()
+ {
+ // Get reference to turn manager
+ turnManager = FindFirstObjectByType();
+
+ if (turnManager == null)
+ {
+ Logging.Error("[FortFightAIController] TurnManager not found!");
+ return;
+ }
+
+ // Subscribe to turn events
+ turnManager.OnTurnStarted += OnTurnStarted;
+
+ Logging.Debug("[FortFightAIController] AI initialized");
+ }
+
+ #endregion
+
+ #region Turn Handling
+
+ ///
+ /// Called when a new turn starts
+ ///
+ private void OnTurnStarted(PlayerData currentPlayer, TurnState turnState)
+ {
+ // Only act if it's AI's turn
+ if (turnState == TurnState.AITurn && !isThinking)
+ {
+ StartCoroutine(ExecuteAITurn());
+ }
+ }
+
+ ///
+ /// Execute the AI's turn (stubbed for Phase 1)
+ ///
+ private IEnumerator ExecuteAITurn()
+ {
+ isThinking = true;
+
+ Logging.Debug($"[FortFightAIController] AI is thinking... (for {aiThinkTime}s)");
+
+ // Simulate AI "thinking"
+ yield return new WaitForSeconds(aiThinkTime);
+
+ // STUBBED: Perform AI action
+ Logging.Debug("[FortFightAIController] AI takes action! (STUBBED - no actual projectile fired yet)");
+
+ // End AI turn
+ isThinking = false;
+
+ if (turnManager != null)
+ {
+ turnManager.EndTurn();
+ }
+ }
+
+ #endregion
+
+ #region Cleanup
+
+ internal override void OnManagedDestroy()
+ {
+ base.OnManagedDestroy();
+
+ if (turnManager != null)
+ {
+ turnManager.OnTurnStarted -= OnTurnStarted;
+ }
+ }
+
+ #endregion
+
+ #region Future Implementation (Phase 4)
+
+ // TODO Phase 4: Implement ballistic trajectory calculation
+ // TODO Phase 4: Implement target selection logic
+ // TODO Phase 4: Implement shot deviation system
+ // TODO Phase 4: Implement ammunition selection
+
+ #endregion
+ }
+}
+
diff --git a/Assets/Scripts/Minigames/FortFight/AI/FortFightAIController.cs.meta b/Assets/Scripts/Minigames/FortFight/AI/FortFightAIController.cs.meta
new file mode 100644
index 00000000..c5cfd8de
--- /dev/null
+++ b/Assets/Scripts/Minigames/FortFight/AI/FortFightAIController.cs.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: d82cbd88db94eec4ba7c19ef60b9fbbc
\ No newline at end of file
diff --git a/Assets/Scripts/Minigames/FortFight/Core.meta b/Assets/Scripts/Minigames/FortFight/Core.meta
new file mode 100644
index 00000000..a29f05b2
--- /dev/null
+++ b/Assets/Scripts/Minigames/FortFight/Core.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 461e23829a7d28547bfabd54136aff7b
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Minigames/FortFight/Core/AmmunitionManager.cs b/Assets/Scripts/Minigames/FortFight/Core/AmmunitionManager.cs
new file mode 100644
index 00000000..a82de188
--- /dev/null
+++ b/Assets/Scripts/Minigames/FortFight/Core/AmmunitionManager.cs
@@ -0,0 +1,284 @@
+using System;
+using System.Collections.Generic;
+using Core;
+using Core.Lifecycle;
+using Minigames.FortFight.Data;
+using UnityEngine;
+
+namespace Minigames.FortFight.Core
+{
+ ///
+ /// Manages ammunition selection and cooldowns for Fort Fight.
+ /// Tracks which ammo types are available and handles cooldown timers.
+ ///
+ public class AmmunitionManager : ManagedBehaviour
+ {
+ #region Inspector Properties
+
+ [Header("Available Ammunition")]
+ [Tooltip("All projectile types available in this game")]
+ [SerializeField] private List availableAmmo = new List();
+
+ [Header("Starting Ammo")]
+ [Tooltip("Default selected ammo at game start")]
+ [SerializeField] private ProjectileData defaultAmmo;
+
+ [Header("Debug")]
+ [SerializeField] private bool showDebugLogs = true;
+
+ #endregion
+
+ #region Events
+
+ ///
+ /// Fired when ammo selection changes. Parameters: (ProjectileData selectedAmmo)
+ ///
+ public event Action OnAmmoSelected;
+
+ ///
+ /// Fired when ammo is used and enters cooldown. Parameters: (ProjectileData ammo, float cooldownTime)
+ ///
+ public event Action OnAmmoCooldownStarted;
+
+ ///
+ /// Fired when ammo cooldown completes. Parameters: (ProjectileData ammo)
+ ///
+ public event Action OnAmmoCooldownCompleted;
+
+ #endregion
+
+ #region State
+
+ private Dictionary cooldowns = new Dictionary();
+ private ProjectileData selectedAmmo;
+
+ public ProjectileData SelectedAmmo => selectedAmmo;
+ public IReadOnlyList AvailableAmmo => availableAmmo;
+
+ #endregion
+
+ #region Lifecycle
+
+ internal override void OnManagedStart()
+ {
+ base.OnManagedStart();
+
+ // Initialize cooldowns to 0
+ foreach (var ammo in availableAmmo)
+ {
+ cooldowns[ammo] = 0f;
+ }
+
+ // Select default ammo
+ if (defaultAmmo != null)
+ {
+ SelectAmmo(defaultAmmo);
+ }
+ else if (availableAmmo.Count > 0)
+ {
+ SelectAmmo(availableAmmo[0]);
+ }
+ }
+
+ private void Update()
+ {
+ // Update cooldown timers
+ List completedCooldowns = new List();
+
+ foreach (var kvp in cooldowns)
+ {
+ if (kvp.Value > 0f)
+ {
+ cooldowns[kvp.Key] = Mathf.Max(0f, kvp.Value - Time.deltaTime);
+
+ // Check if cooldown just completed
+ if (cooldowns[kvp.Key] == 0f)
+ {
+ completedCooldowns.Add(kvp.Key);
+ }
+ }
+ }
+
+ // Fire events for completed cooldowns
+ foreach (var ammo in completedCooldowns)
+ {
+ string ammoName = GetAmmoName(ammo);
+ if (showDebugLogs) Logging.Debug($"[AmmunitionManager] {ammoName} cooldown completed");
+ OnAmmoCooldownCompleted?.Invoke(ammo);
+ }
+ }
+
+ #endregion
+
+ #region Ammo Selection
+
+ ///
+ /// Select ammunition type (if available - not on cooldown)
+ ///
+ public bool SelectAmmo(ProjectileData ammo)
+ {
+ if (ammo == null)
+ {
+ Logging.Warning("[AmmunitionManager] Attempted to select null ammo");
+ return false;
+ }
+
+ if (!availableAmmo.Contains(ammo))
+ {
+ string ammoName = GetAmmoName(ammo);
+ Logging.Warning($"[AmmunitionManager] {ammoName} not in available ammo list");
+ return false;
+ }
+
+ if (!IsAmmoAvailable(ammo))
+ {
+ string ammoName = GetAmmoName(ammo);
+ if (showDebugLogs) Logging.Debug($"[AmmunitionManager] {ammoName} is on cooldown");
+ return false;
+ }
+
+ selectedAmmo = ammo;
+ string selectedName = GetAmmoName(ammo);
+ if (showDebugLogs) Logging.Debug($"[AmmunitionManager] Selected ammo: {selectedName}");
+
+ OnAmmoSelected?.Invoke(ammo);
+ return true;
+ }
+
+ ///
+ /// Check if ammo is available (not on cooldown)
+ ///
+ public bool IsAmmoAvailable(ProjectileData ammo)
+ {
+ if (!cooldowns.ContainsKey(ammo))
+ {
+ return true;
+ }
+
+ return cooldowns[ammo] <= 0f;
+ }
+
+ ///
+ /// Get remaining cooldown time for ammo
+ ///
+ public float GetCooldownRemaining(ProjectileData ammo)
+ {
+ if (!cooldowns.ContainsKey(ammo))
+ {
+ return 0f;
+ }
+
+ return cooldowns[ammo];
+ }
+
+ #endregion
+
+ #region Ammo Usage
+
+ ///
+ /// Use current ammo (trigger cooldown)
+ ///
+ public void UseAmmo()
+ {
+ if (selectedAmmo == null)
+ {
+ Logging.Warning("[AmmunitionManager] No ammo selected to use");
+ return;
+ }
+
+ UseAmmo(selectedAmmo);
+ }
+
+ ///
+ /// Use specific ammo (trigger cooldown)
+ ///
+ public void UseAmmo(ProjectileData ammo)
+ {
+ if (ammo == null) return;
+
+ if (!cooldowns.ContainsKey(ammo))
+ {
+ cooldowns[ammo] = 0f;
+ }
+
+ // Start cooldown
+ cooldowns[ammo] = ammo.cooldownTime;
+
+ string ammoName = GetAmmoName(ammo);
+ if (showDebugLogs) Logging.Debug($"[AmmunitionManager] {ammoName} used - cooldown: {ammo.cooldownTime}s");
+
+ OnAmmoCooldownStarted?.Invoke(ammo, ammo.cooldownTime);
+ }
+
+ #endregion
+
+ #region Public API
+
+ ///
+ /// Add ammo to available list (for unlocks/powerups)
+ ///
+ public void AddAmmo(ProjectileData ammo)
+ {
+ if (!availableAmmo.Contains(ammo))
+ {
+ availableAmmo.Add(ammo);
+ cooldowns[ammo] = 0f;
+
+ string ammoName = GetAmmoName(ammo);
+ if (showDebugLogs) Logging.Debug($"[AmmunitionManager] Added ammo: {ammoName}");
+ }
+ }
+
+ ///
+ /// Remove ammo from available list
+ ///
+ public void RemoveAmmo(ProjectileData ammo)
+ {
+ if (availableAmmo.Contains(ammo))
+ {
+ availableAmmo.Remove(ammo);
+ cooldowns.Remove(ammo);
+
+ // If this was selected, select first available
+ if (selectedAmmo == ammo && availableAmmo.Count > 0)
+ {
+ SelectAmmo(availableAmmo[0]);
+ }
+
+ string ammoName = GetAmmoName(ammo);
+ if (showDebugLogs) Logging.Debug($"[AmmunitionManager] Removed ammo: {ammoName}");
+ }
+ }
+
+ ///
+ /// Reset all cooldowns
+ ///
+ public void ResetAllCooldowns()
+ {
+ foreach (var ammo in cooldowns.Keys)
+ {
+ cooldowns[ammo] = 0f;
+ }
+
+ if (showDebugLogs) Logging.Debug("[AmmunitionManager] All cooldowns reset");
+ }
+
+ #endregion
+
+ #region Helpers
+
+ ///
+ /// Get display name for ammo (uses displayName or prefab name as fallback)
+ ///
+ private string GetAmmoName(ProjectileData ammo)
+ {
+ if (ammo == null) return "Unknown";
+ if (!string.IsNullOrEmpty(ammo.displayName)) return ammo.displayName;
+ if (ammo.prefab != null) return ammo.prefab.name;
+ return "Unknown Ammo";
+ }
+
+ #endregion
+ }
+}
+
diff --git a/Assets/Scripts/Minigames/FortFight/Core/AmmunitionManager.cs.meta b/Assets/Scripts/Minigames/FortFight/Core/AmmunitionManager.cs.meta
new file mode 100644
index 00000000..71b8c793
--- /dev/null
+++ b/Assets/Scripts/Minigames/FortFight/Core/AmmunitionManager.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 4701ebc78fda468e9d8f3cf7fa7ee9f3
+timeCreated: 1764682641
\ No newline at end of file
diff --git a/Assets/Scripts/Minigames/FortFight/Core/CameraController.cs b/Assets/Scripts/Minigames/FortFight/Core/CameraController.cs
new file mode 100644
index 00000000..40608091
--- /dev/null
+++ b/Assets/Scripts/Minigames/FortFight/Core/CameraController.cs
@@ -0,0 +1,209 @@
+using Core;
+using Core.Lifecycle;
+using Minigames.FortFight.Data;
+using Unity.Cinemachine;
+using UnityEngine;
+
+namespace Minigames.FortFight.Core
+{
+ ///
+ /// Manages camera states and transitions for the Fort Fight minigame.
+ /// Subscribes to turn events and switches camera views accordingly.
+ /// Uses Cinemachine for smooth camera blending.
+ ///
+ public class CameraController : ManagedBehaviour
+ {
+ #region Inspector References
+
+ [Header("Cinemachine Cameras")]
+ [Tooltip("Virtual camera showing wide battlefield view (both forts)")]
+ [SerializeField] private CinemachineCamera wideViewCamera;
+
+ [Tooltip("Player One's dedicated camera (position this in the scene for Player 1's view)")]
+ [SerializeField] private CinemachineCamera playerOneCamera;
+
+ [Tooltip("Player Two's dedicated camera (position this in the scene for Player 2's view)")]
+ [SerializeField] private CinemachineCamera playerTwoCamera;
+
+ [Header("References")]
+ [Tooltip("Turn manager to subscribe to turn events")]
+ [SerializeField] private TurnManager turnManager;
+
+ [Header("Settings")]
+ [Tooltip("Use wide view between turns (optional transition)")]
+ [SerializeField] private bool useWideViewTransitions;
+
+ #endregion
+
+ #region Public Properties
+
+ public CinemachineCamera WideViewCamera => wideViewCamera;
+ public CinemachineCamera PlayerOneCamera => playerOneCamera;
+ public CinemachineCamera PlayerTwoCamera => playerTwoCamera;
+
+ #endregion
+
+ #region Lifecycle
+
+ internal override void OnManagedAwake()
+ {
+ base.OnManagedAwake();
+
+ // Validate references
+ if (wideViewCamera == null)
+ {
+ Logging.Error("[CameraController] Wide view camera not assigned!");
+ }
+
+ if (playerOneCamera == null)
+ {
+ Logging.Error("[CameraController] Player One camera not assigned!");
+ }
+
+ if (playerTwoCamera == null)
+ {
+ Logging.Error("[CameraController] Player Two camera not assigned!");
+ }
+
+ if (turnManager == null)
+ {
+ Logging.Error("[CameraController] Turn manager not assigned!");
+ }
+ }
+
+ internal override void OnManagedStart()
+ {
+ base.OnManagedStart();
+
+ // Subscribe to turn events
+ if (turnManager != null)
+ {
+ turnManager.OnTurnStarted += HandleTurnStarted;
+ turnManager.OnTurnEnded += HandleTurnEnded;
+
+ Logging.Debug("[CameraController] Subscribed to turn events");
+ }
+
+ // Start in wide view
+ ShowWideView();
+ }
+
+ internal override void OnManagedDestroy()
+ {
+ base.OnManagedDestroy();
+
+ // Unsubscribe from events
+ if (turnManager != null)
+ {
+ turnManager.OnTurnStarted -= HandleTurnStarted;
+ turnManager.OnTurnEnded -= HandleTurnEnded;
+ }
+ }
+
+ #endregion
+
+ #region Event Handlers
+
+ ///
+ /// Called when a player's turn starts - activate their dedicated camera
+ ///
+ private void HandleTurnStarted(PlayerData player, TurnState turnState)
+ {
+ Logging.Debug($"[CameraController] Turn started for {player.PlayerName} (Index: {player.PlayerIndex})");
+
+ // Activate the appropriate player camera based on player index
+ if (player.PlayerIndex == 0)
+ {
+ // Player One's turn
+ ActivateCamera(playerOneCamera);
+ }
+ else if (player.PlayerIndex == 1)
+ {
+ // Player Two's turn
+ ActivateCamera(playerTwoCamera);
+ }
+ else
+ {
+ Logging.Warning($"[CameraController] Unknown player index: {player.PlayerIndex}, defaulting to wide view");
+ ActivateCamera(wideViewCamera);
+ }
+ }
+
+ ///
+ /// Called when a player's turn ends - optionally switch to wide view for transition
+ ///
+ private void HandleTurnEnded(PlayerData player)
+ {
+ Logging.Debug($"[CameraController] Turn ended for {player.PlayerName}");
+
+ // Optional: briefly show wide view between turns
+ if (useWideViewTransitions)
+ {
+ ActivateCamera(wideViewCamera);
+ }
+ }
+
+ ///
+ /// Activate a specific camera by setting its priority highest
+ ///
+ private void ActivateCamera(CinemachineCamera camera)
+ {
+ if (camera == null) return;
+
+ // Set all cameras to low priority
+ if (wideViewCamera != null) wideViewCamera.Priority.Value = 10;
+ if (playerOneCamera != null) playerOneCamera.Priority.Value = 10;
+ if (playerTwoCamera != null) playerTwoCamera.Priority.Value = 10;
+
+ // Set target camera to high priority
+ camera.Priority.Value = 20;
+
+ Logging.Debug($"[CameraController] Activated camera: {camera.gameObject.name}");
+ }
+
+ #endregion
+
+ #region Public API
+
+ ///
+ /// Manually switch to wide view (useful for game start/end)
+ ///
+ public void ShowWideView()
+ {
+ ActivateCamera(wideViewCamera);
+ }
+
+ ///
+ /// Manually switch to a specific player's camera
+ ///
+ public void ShowPlayerCamera(int playerIndex)
+ {
+ if (playerIndex == 0)
+ {
+ ActivateCamera(playerOneCamera);
+ }
+ else if (playerIndex == 1)
+ {
+ ActivateCamera(playerTwoCamera);
+ }
+ }
+
+ #endregion
+
+ #region Editor Helpers
+
+#if UNITY_EDITOR
+ private void OnValidate()
+ {
+ // Auto-find TurnManager if not assigned
+ if (turnManager == null)
+ {
+ turnManager = FindFirstObjectByType();
+ }
+ }
+#endif
+
+ #endregion
+ }
+}
+
diff --git a/Assets/Scripts/Minigames/FortFight/Core/CameraController.cs.meta b/Assets/Scripts/Minigames/FortFight/Core/CameraController.cs.meta
new file mode 100644
index 00000000..beb588cf
--- /dev/null
+++ b/Assets/Scripts/Minigames/FortFight/Core/CameraController.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: aa30fcfc16ed44d59edd73fd0224d03c
+timeCreated: 1764674161
\ No newline at end of file
diff --git a/Assets/Scripts/Minigames/FortFight/Core/FortFightGameManager.cs b/Assets/Scripts/Minigames/FortFight/Core/FortFightGameManager.cs
new file mode 100644
index 00000000..32dd5366
--- /dev/null
+++ b/Assets/Scripts/Minigames/FortFight/Core/FortFightGameManager.cs
@@ -0,0 +1,263 @@
+using System;
+using Core;
+using UnityEngine;
+using Core.Lifecycle;
+using Minigames.FortFight.AI;
+using Minigames.FortFight.Data;
+using Minigames.FortFight.UI;
+
+namespace Minigames.FortFight.Core
+{
+ ///
+ /// Main game manager for Fort Fight minigame.
+ /// Orchestrates game flow, mode selection, and coordinates between systems.
+ /// Singleton pattern for easy access.
+ ///
+ public class FortFightGameManager : ManagedBehaviour
+ {
+ #region Singleton
+
+ private static FortFightGameManager _instance;
+ public static FortFightGameManager Instance => _instance;
+
+ #endregion
+
+ #region Inspector References
+
+ [Header("Core Systems")]
+ [SerializeField] private TurnManager turnManager;
+ [SerializeField] private FortFightAIController aiController;
+ [SerializeField] private FortManager fortManager;
+
+ [Header("UI References")]
+ [SerializeField] private ModeSelectionPage modeSelectionPage;
+ [SerializeField] private GameplayPage gameplayPage;
+
+ #endregion
+
+ #region Events
+
+ ///
+ /// Fired when game mode is selected and game is starting
+ ///
+ public event Action OnGameModeSelected;
+
+ ///
+ /// Fired when the game actually starts (after mode selection)
+ ///
+ public event Action OnGameStarted;
+
+ ///
+ /// Fired when game ends
+ ///
+ public event Action OnGameEnded;
+
+ #endregion
+
+ #region State
+
+ private FortFightGameMode currentGameMode;
+ private PlayerData playerOne;
+ private PlayerData playerTwo;
+ private bool isGameActive = false;
+
+ public FortFightGameMode CurrentGameMode => currentGameMode;
+ public bool IsGameActive => isGameActive;
+
+ #endregion
+
+ #region Lifecycle
+
+ internal override void OnManagedAwake()
+ {
+ base.OnManagedAwake();
+
+ // Set singleton
+ if (_instance != null && _instance != this)
+ {
+ Logging.Warning("[FortFightGameManager] Multiple instances detected! Destroying duplicate.");
+ Destroy(gameObject);
+ return;
+ }
+ _instance = this;
+
+ // Validate references
+ ValidateReferences();
+ }
+
+ internal override void OnManagedStart()
+ {
+ base.OnManagedStart();
+
+ // Show mode selection page
+ ShowModeSelection();
+ }
+
+ internal override void OnManagedDestroy()
+ {
+ base.OnManagedDestroy();
+
+ if (_instance == this)
+ {
+ _instance = null;
+ }
+
+ // Clear events
+ OnGameModeSelected = null;
+ OnGameStarted = null;
+ OnGameEnded = null;
+ }
+
+ #endregion
+
+ #region Validation
+
+ private void ValidateReferences()
+ {
+ if (turnManager == null)
+ {
+ Logging.Error("[FortFightGameManager] TurnManager reference not assigned!");
+ }
+
+ if (aiController == null)
+ {
+ Logging.Warning("[FortFightGameManager] AIController reference not assigned! AI mode will not work.");
+ }
+
+ if (modeSelectionPage == null)
+ {
+ Logging.Error("[FortFightGameManager] ModeSelectionPage reference not assigned!");
+ }
+
+ if (gameplayPage == null)
+ {
+ Logging.Error("[FortFightGameManager] GameplayPage reference not assigned!");
+ }
+ }
+
+ #endregion
+
+ #region Game Flow
+
+ ///
+ /// Show the mode selection screen
+ ///
+ private void ShowModeSelection()
+ {
+ if (modeSelectionPage != null)
+ {
+ modeSelectionPage.gameObject.SetActive(true);
+ modeSelectionPage.TransitionIn();
+ Logging.Debug("[FortFightGameManager] Showing mode selection page");
+ }
+
+ if (gameplayPage != null)
+ {
+ gameplayPage.gameObject.SetActive(false);
+ }
+ }
+
+ ///
+ /// Called when player selects a game mode
+ ///
+ public void SelectGameMode(FortFightGameMode mode)
+ {
+ currentGameMode = mode;
+
+ Logging.Debug($"[FortFightGameManager] Game mode selected: {mode}");
+ OnGameModeSelected?.Invoke(mode);
+
+ // Initialize players based on mode
+ InitializePlayers();
+
+ // Transition to gameplay
+ StartGame();
+ }
+
+ ///
+ /// Initialize player data based on selected game mode
+ ///
+ private void InitializePlayers()
+ {
+ playerOne = new PlayerData("Player", false, 0);
+
+ if (currentGameMode == FortFightGameMode.SinglePlayer)
+ {
+ playerTwo = new PlayerData("PigMan AI", true, 1);
+ }
+ else
+ {
+ playerTwo = new PlayerData("Player 2", false, 1);
+ }
+
+ Logging.Debug($"[FortFightGameManager] Players initialized - P1: {playerOne.PlayerName}, P2: {playerTwo.PlayerName}");
+
+ // Spawn forts for both players
+ if (fortManager != null)
+ {
+ fortManager.SpawnForts();
+ Logging.Debug("[FortFightGameManager] Forts spawned for both players");
+ }
+ else
+ {
+ Logging.Warning("[FortFightGameManager] FortManager not assigned! Forts will not spawn.");
+ }
+ }
+
+ ///
+ /// Start the game
+ ///
+ private void StartGame()
+ {
+ // Hide mode selection, show gameplay
+ if (modeSelectionPage != null)
+ {
+ modeSelectionPage.TransitionOut();
+ }
+
+ if (gameplayPage != null)
+ {
+ gameplayPage.gameObject.SetActive(true);
+ gameplayPage.TransitionIn();
+ }
+
+ // Initialize turn manager
+ if (turnManager != null)
+ {
+ turnManager.Initialize(playerOne, playerTwo);
+ turnManager.StartGame();
+ }
+
+ // Initialize AI if in single player mode
+ if (currentGameMode == FortFightGameMode.SinglePlayer && aiController != null)
+ {
+ aiController.Initialize();
+ }
+
+ isGameActive = true;
+ OnGameStarted?.Invoke();
+
+ Logging.Debug("[FortFightGameManager] Game started!");
+ }
+
+ ///
+ /// End the game
+ ///
+ public void EndGame()
+ {
+ isGameActive = false;
+
+ if (turnManager != null)
+ {
+ turnManager.SetGameOver();
+ }
+
+ OnGameEnded?.Invoke();
+
+ Logging.Debug("[FortFightGameManager] Game ended");
+ }
+
+ #endregion
+ }
+}
+
diff --git a/Assets/Scripts/Minigames/FortFight/Core/FortFightGameManager.cs.meta b/Assets/Scripts/Minigames/FortFight/Core/FortFightGameManager.cs.meta
new file mode 100644
index 00000000..98375a9a
--- /dev/null
+++ b/Assets/Scripts/Minigames/FortFight/Core/FortFightGameManager.cs.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: 517ef0a4f14e16f42987a95684371b73
\ No newline at end of file
diff --git a/Assets/Scripts/Minigames/FortFight/Core/FortFightSettings.cs b/Assets/Scripts/Minigames/FortFight/Core/FortFightSettings.cs
new file mode 100644
index 00000000..2a7ea743
--- /dev/null
+++ b/Assets/Scripts/Minigames/FortFight/Core/FortFightSettings.cs
@@ -0,0 +1,111 @@
+using System.Collections.Generic;
+using System.Linq;
+using AppleHills.Core.Settings;
+using Minigames.FortFight.Data;
+using Minigames.FortFight.Settings;
+using UnityEngine;
+
+namespace Minigames.FortFight.Core
+{
+ ///
+ /// Settings for the Fort Fight minigame.
+ /// Contains all configurable gameplay values for balancing.
+ ///
+ [CreateAssetMenu(fileName = "FortFightSettings", menuName = "AppleHills/Settings/Fort Fight", order = 8)]
+ public class FortFightSettings : BaseSettings, IFortFightSettings
+ {
+ [Header("Block Material Configurations")]
+ [Tooltip("HP and mass configurations for each material type")]
+ [SerializeField] private List materialConfigs = new List
+ {
+ new BlockMaterialConfig { material = BlockMaterial.Cardboard, baseHp = 20f, baseMass = 0.5f },
+ new BlockMaterialConfig { material = BlockMaterial.Metal, baseHp = 50f, baseMass = 2f },
+ new BlockMaterialConfig { material = BlockMaterial.Glass, baseHp = 15f, baseMass = 0.8f }
+ };
+
+ [Header("Block Size Configurations")]
+ [Tooltip("HP and mass multipliers for each size type")]
+ [SerializeField] private List sizeConfigs = new List
+ {
+ new BlockSizeConfig { size = BlockSize.Small, hpMultiplier = 1f, massMultiplier = 0.5f },
+ new BlockSizeConfig { size = BlockSize.Medium, hpMultiplier = 1.5f, massMultiplier = 1f },
+ new BlockSizeConfig { size = BlockSize.Large, hpMultiplier = 2f, massMultiplier = 2f }
+ };
+
+ [Header("Weak Point Settings")]
+ [Tooltip("Radius of explosion effect from weak points")]
+ [SerializeField] private float weakPointExplosionRadius = 2.5f;
+
+ [Tooltip("Base damage dealt by weak point explosion")]
+ [SerializeField] private float weakPointExplosionDamage = 50f;
+
+ [Tooltip("Force applied to blocks hit by weak point explosion")]
+ [SerializeField] private float weakPointExplosionForce = 300f;
+
+ [Header("Fort Configuration")]
+ [Tooltip("HP percentage threshold for fort defeat (0.3 = 30%)")]
+ [SerializeField] private float fortDefeatThreshold = 0.3f;
+
+ [Tooltip("Global gravity scale for all blocks")]
+ [SerializeField] private float physicsGravityScale = 1f;
+
+ [Header("Visual Settings")]
+ [Tooltip("Color tint applied to damaged blocks")]
+ [SerializeField] private Color damageColorTint = new Color(0.5f, 0.5f, 0.5f);
+
+ #region IFortFightSettings Implementation
+
+ public List MaterialConfigs => materialConfigs;
+ public List SizeConfigs => sizeConfigs;
+
+ public float WeakPointExplosionRadius => weakPointExplosionRadius;
+ public float WeakPointExplosionDamage => weakPointExplosionDamage;
+ public float WeakPointExplosionForce => weakPointExplosionForce;
+
+ public float FortDefeatThreshold => fortDefeatThreshold;
+ public float PhysicsGravityScale => physicsGravityScale;
+
+ public Color DamageColorTint => damageColorTint;
+
+ public BlockMaterialConfig GetMaterialConfig(BlockMaterial material)
+ {
+ return materialConfigs.FirstOrDefault(c => c.material == material);
+ }
+
+ public BlockSizeConfig GetSizeConfig(BlockSize size)
+ {
+ return sizeConfigs.FirstOrDefault(c => c.size == size);
+ }
+
+ #endregion
+
+ #region Validation
+
+ private void OnValidate()
+ {
+ // Ensure defeat threshold is between 0 and 1
+ fortDefeatThreshold = Mathf.Clamp01(fortDefeatThreshold);
+
+ // Ensure all materials are configured
+ foreach (BlockMaterial material in System.Enum.GetValues(typeof(BlockMaterial)))
+ {
+ if (!materialConfigs.Any(c => c.material == material))
+ {
+ Debug.LogWarning($"[FortFightSettings] Missing configuration for material: {material}");
+ }
+ }
+
+ // Ensure all sizes are configured
+ foreach (BlockSize size in System.Enum.GetValues(typeof(BlockSize)))
+ {
+ if (!sizeConfigs.Any(c => c.size == size))
+ {
+ Debug.LogWarning($"[FortFightSettings] Missing configuration for size: {size}");
+ }
+ }
+ }
+
+ #endregion
+ }
+}
+
diff --git a/Assets/Scripts/Minigames/FortFight/Core/FortFightSettings.cs.meta b/Assets/Scripts/Minigames/FortFight/Core/FortFightSettings.cs.meta
new file mode 100644
index 00000000..f549fb53
--- /dev/null
+++ b/Assets/Scripts/Minigames/FortFight/Core/FortFightSettings.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: eaaa527529c5438f80d27ff95c7c7930
+timeCreated: 1764669847
\ No newline at end of file
diff --git a/Assets/Scripts/Minigames/FortFight/Core/FortManager.cs b/Assets/Scripts/Minigames/FortFight/Core/FortManager.cs
new file mode 100644
index 00000000..08cc87b2
--- /dev/null
+++ b/Assets/Scripts/Minigames/FortFight/Core/FortManager.cs
@@ -0,0 +1,267 @@
+using System;
+using Core;
+using Core.Lifecycle;
+using UnityEngine;
+using Minigames.FortFight.Data;
+using Minigames.FortFight.Fort;
+
+namespace Minigames.FortFight.Core
+{
+ ///
+ /// Manages fort prefab spawning and references during gameplay.
+ ///
+ public class FortManager : ManagedBehaviour
+ {
+ #region Inspector Properties
+
+ [Header("Fort Prefabs")]
+ [SerializeField] private GameObject[] premadeFortPrefabs;
+ [Tooltip("Leave empty to spawn random forts. Assign specific prefabs for testing.")]
+ [SerializeField] private GameObject debugPlayerFortPrefab;
+ [SerializeField] private GameObject debugEnemyFortPrefab;
+
+ [Header("Spawn Points")]
+ [SerializeField] private Transform playerSpawnPoint;
+ [SerializeField] private Transform enemySpawnPoint;
+
+ [Header("Settings")]
+ [SerializeField] private bool useDebugForts = false;
+
+ #endregion
+
+ #region Events
+
+ ///
+ /// Fired when player fort is spawned
+ ///
+ public event Action OnPlayerFortSpawned;
+
+ ///
+ /// Fired when enemy fort is spawned
+ ///
+ public event Action OnEnemyFortSpawned;
+
+ #endregion
+
+ #region Properties
+
+ public FortController PlayerFort { get; private set; }
+ public FortController EnemyFort { get; private set; }
+
+ #endregion
+
+ #region Lifecycle
+
+ internal override void OnManagedAwake()
+ {
+ base.OnManagedAwake();
+
+ // Validate spawn points
+ if (playerSpawnPoint == null)
+ {
+ Logging.Error("[FortManager] Player spawn point not assigned!");
+ }
+
+ if (enemySpawnPoint == null)
+ {
+ Logging.Error("[FortManager] Enemy spawn point not assigned!");
+ }
+
+ // Validate fort prefabs
+ if (premadeFortPrefabs == null || premadeFortPrefabs.Length == 0)
+ {
+ Logging.Warning("[FortManager] No premade fort prefabs assigned! Add at least one fort prefab.");
+ }
+ }
+
+ internal override void OnManagedDestroy()
+ {
+ base.OnManagedDestroy();
+
+ OnPlayerFortSpawned = null;
+ OnEnemyFortSpawned = null;
+ }
+
+ #endregion
+
+ #region Spawning
+
+ ///
+ /// Spawn forts for both player and enemy at game start
+ ///
+ public void SpawnForts()
+ {
+ Logging.Debug("[FortManager] Spawning forts for both players");
+
+ // Spawn player fort
+ if (useDebugForts && debugPlayerFortPrefab != null)
+ {
+ PlayerFort = SpawnFort(debugPlayerFortPrefab, playerSpawnPoint, "Player Fort");
+ }
+ else
+ {
+ PlayerFort = SpawnRandomFort(playerSpawnPoint, "Player Fort");
+ }
+
+ if (PlayerFort != null)
+ {
+ OnPlayerFortSpawned?.Invoke(PlayerFort);
+ }
+
+ // Spawn enemy fort
+ if (useDebugForts && debugEnemyFortPrefab != null)
+ {
+ EnemyFort = SpawnFort(debugEnemyFortPrefab, enemySpawnPoint, "Enemy Fort");
+ }
+ else
+ {
+ EnemyFort = SpawnRandomFort(enemySpawnPoint, "Enemy Fort");
+ }
+
+ if (EnemyFort != null)
+ {
+ OnEnemyFortSpawned?.Invoke(EnemyFort);
+ }
+ }
+
+ ///
+ /// Spawn a random fort from the premade prefabs array
+ ///
+ public FortController SpawnRandomFort(Transform spawnPoint, string overrideName = null)
+ {
+ if (premadeFortPrefabs == null || premadeFortPrefabs.Length == 0)
+ {
+ Logging.Error("[FortManager] Cannot spawn random fort - no prefabs available!");
+ return null;
+ }
+
+ GameObject randomPrefab = premadeFortPrefabs[UnityEngine.Random.Range(0, premadeFortPrefabs.Length)];
+ return SpawnFort(randomPrefab, spawnPoint, overrideName);
+ }
+
+ ///
+ /// Spawn a specific fort prefab
+ ///
+ public FortController SpawnFort(GameObject fortPrefab, Transform spawnPoint, string overrideName = null)
+ {
+ if (fortPrefab == null)
+ {
+ Logging.Error("[FortManager] Cannot spawn fort - prefab is null!");
+ return null;
+ }
+
+ if (spawnPoint == null)
+ {
+ Logging.Error("[FortManager] Cannot spawn fort - spawn point is null!");
+ return null;
+ }
+
+ // Instantiate fort
+ GameObject fortInstance = Instantiate(fortPrefab, spawnPoint.position, Quaternion.identity, spawnPoint);
+ fortInstance.name = overrideName ?? fortPrefab.name;
+
+ // Get FortController
+ FortController controller = fortInstance.GetComponent();
+ if (controller == null)
+ {
+ Logging.Error($"[FortManager] Fort prefab {fortPrefab.name} is missing FortController component!");
+ Destroy(fortInstance);
+ return null;
+ }
+
+ // Fort will self-initialize in Start() and register with this manager
+ Logging.Debug($"[FortManager] Spawned fort: {controller.FortName} at {spawnPoint.name} (will self-initialize)");
+
+ return controller;
+ }
+
+ #endregion
+
+ #region Fort Registration
+
+ ///
+ /// Called by FortController when it finishes initialization.
+ /// Determines if player/enemy fort and fires appropriate events.
+ ///
+ public void RegisterFort(FortController fort)
+ {
+ if (fort == null)
+ {
+ Logging.Error("[FortManager] Cannot register null fort!");
+ return;
+ }
+
+ // Determine if this is player or enemy fort by checking which spawn point it's under
+ bool isPlayerFort = fort.transform.IsChildOf(playerSpawnPoint);
+ bool isEnemyFort = fort.transform.IsChildOf(enemySpawnPoint);
+
+ if (isPlayerFort)
+ {
+ PlayerFort = fort;
+ Logging.Debug($"[FortManager] Registered PLAYER fort: {fort.FortName}");
+ OnPlayerFortSpawned?.Invoke(fort);
+ }
+ else if (isEnemyFort)
+ {
+ EnemyFort = fort;
+ Logging.Debug($"[FortManager] Registered ENEMY fort: {fort.FortName}");
+ OnEnemyFortSpawned?.Invoke(fort);
+ }
+ else
+ {
+ Logging.Warning($"[FortManager] Fort {fort.FortName} is not under player or enemy spawn point! Cannot determine fort type.");
+ }
+ }
+
+ #endregion
+
+ #region Cleanup
+
+ ///
+ /// Destroy all spawned forts (for game restart)
+ ///
+ public void ClearForts()
+ {
+ Logging.Debug("[FortManager] Clearing all forts");
+
+ if (PlayerFort != null)
+ {
+ Destroy(PlayerFort.gameObject);
+ PlayerFort = null;
+ }
+
+ if (EnemyFort != null)
+ {
+ Destroy(EnemyFort.gameObject);
+ EnemyFort = null;
+ }
+ }
+
+ #endregion
+
+ #region Queries
+
+ ///
+ /// Get fort for a specific player
+ ///
+ public FortController GetFortForPlayer(PlayerData player)
+ {
+ if (player == null) return null;
+
+ return player.PlayerIndex == 0 ? PlayerFort : EnemyFort;
+ }
+
+ ///
+ /// Get opponent's fort
+ ///
+ public FortController GetOpponentFort(PlayerData player)
+ {
+ if (player == null) return null;
+
+ return player.PlayerIndex == 0 ? EnemyFort : PlayerFort;
+ }
+
+ #endregion
+ }
+}
+
diff --git a/Assets/Scripts/Minigames/FortFight/Core/FortManager.cs.meta b/Assets/Scripts/Minigames/FortFight/Core/FortManager.cs.meta
new file mode 100644
index 00000000..3512ded5
--- /dev/null
+++ b/Assets/Scripts/Minigames/FortFight/Core/FortManager.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 47c585eb15414e8f802a6e31cbc6f501
+timeCreated: 1764592116
\ No newline at end of file
diff --git a/Assets/Scripts/Minigames/FortFight/Core/ProjectileTurnAction.cs b/Assets/Scripts/Minigames/FortFight/Core/ProjectileTurnAction.cs
new file mode 100644
index 00000000..63170a92
--- /dev/null
+++ b/Assets/Scripts/Minigames/FortFight/Core/ProjectileTurnAction.cs
@@ -0,0 +1,125 @@
+using Core;
+using Minigames.FortFight.Projectiles;
+using UnityEngine;
+
+namespace Minigames.FortFight.Core
+{
+ ///
+ /// Turn action for projectile launching.
+ /// Enables slingshot, waits for player to launch, waits for projectile to complete.
+ ///
+ public class ProjectileTurnAction
+ {
+ private SlingshotController slingshot;
+ private AmmunitionManager ammoManager;
+ private ProjectileBase activeProjectile;
+ private bool launchComplete = false;
+ private bool projectileSettled = false;
+ private float settleTimer = 0f;
+ private float settleDelay = 2.5f; // Wait 2.5s after impact before ending turn
+
+ public bool IsComplete => projectileSettled;
+
+ public ProjectileTurnAction(SlingshotController slingshot, AmmunitionManager ammoManager)
+ {
+ this.slingshot = slingshot;
+ this.ammoManager = ammoManager;
+ }
+
+ ///
+ /// Execute the turn action - enable slingshot and wait for launch
+ ///
+ public void Execute()
+ {
+ Logging.Debug("[ProjectileTurnAction] Executing - enabling slingshot");
+
+ // Enable slingshot
+ if (slingshot != null)
+ {
+ slingshot.Enable();
+
+ // Subscribe to launch event
+ slingshot.OnProjectileLaunched += HandleProjectileLaunched;
+ }
+ }
+
+ ///
+ /// Update the action (check if projectile has settled)
+ ///
+ public void Update()
+ {
+ if (!launchComplete) return;
+
+ // Check if projectile is destroyed or stopped
+ if (activeProjectile == null)
+ {
+ // Projectile destroyed - start settle timer
+ if (settleTimer == 0f)
+ {
+ Logging.Debug("[ProjectileTurnAction] Projectile destroyed - starting settle timer");
+ }
+
+ settleTimer += Time.deltaTime;
+
+ if (settleTimer >= settleDelay)
+ {
+ projectileSettled = true;
+ Logging.Debug("[ProjectileTurnAction] Turn action complete");
+ }
+ }
+ else
+ {
+ // Check if projectile has stopped moving
+ Rigidbody2D rb = activeProjectile.GetComponent();
+ if (rb != null && rb.linearVelocity.magnitude < 0.5f)
+ {
+ settleTimer += Time.deltaTime;
+
+ if (settleTimer >= settleDelay)
+ {
+ projectileSettled = true;
+ Logging.Debug("[ProjectileTurnAction] Projectile settled - turn action complete");
+ }
+ }
+ else
+ {
+ // Reset settle timer if still moving
+ settleTimer = 0f;
+ }
+ }
+ }
+
+ ///
+ /// Cancel the action (disable slingshot)
+ ///
+ public void Cancel()
+ {
+ if (slingshot != null)
+ {
+ slingshot.Disable();
+ slingshot.OnProjectileLaunched -= HandleProjectileLaunched;
+ }
+ }
+
+ private void HandleProjectileLaunched(ProjectileBase projectile)
+ {
+ Logging.Debug($"[ProjectileTurnAction] Projectile launched: {projectile.gameObject.name}");
+
+ launchComplete = true;
+ activeProjectile = projectile;
+
+ // Disable slingshot after launch
+ if (slingshot != null)
+ {
+ slingshot.Disable();
+ }
+
+ // Trigger cooldown for used ammo
+ if (ammoManager != null)
+ {
+ ammoManager.UseAmmo();
+ }
+ }
+ }
+}
+
diff --git a/Assets/Scripts/Minigames/FortFight/Core/ProjectileTurnAction.cs.meta b/Assets/Scripts/Minigames/FortFight/Core/ProjectileTurnAction.cs.meta
new file mode 100644
index 00000000..e663607d
--- /dev/null
+++ b/Assets/Scripts/Minigames/FortFight/Core/ProjectileTurnAction.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: ac54e08365f94dbd91d2bace2b5964a6
+timeCreated: 1764682659
\ No newline at end of file
diff --git a/Assets/Scripts/Minigames/FortFight/Core/SlingshotController.cs b/Assets/Scripts/Minigames/FortFight/Core/SlingshotController.cs
new file mode 100644
index 00000000..14ae5099
--- /dev/null
+++ b/Assets/Scripts/Minigames/FortFight/Core/SlingshotController.cs
@@ -0,0 +1,312 @@
+using System;
+using Core;
+using Core.Lifecycle;
+using Minigames.FortFight.Data;
+using Minigames.FortFight.Projectiles;
+using UnityEngine;
+using UnityEngine.InputSystem;
+
+namespace Minigames.FortFight.Core
+{
+ ///
+ /// Controls slingshot aiming and projectile launching.
+ /// Angry Birds-style drag-to-aim mechanic with trajectory preview.
+ ///
+ public class SlingshotController : ManagedBehaviour
+ {
+ #region Inspector Properties
+
+ [Header("Launch Settings")]
+ [Tooltip("Maximum launch force")]
+ [SerializeField] private float maxForce = 20f;
+
+ [Tooltip("Drag distance to reach max force")]
+ [SerializeField] private float maxDragDistance = 5f;
+
+ [Tooltip("Spawn point for projectiles")]
+ [SerializeField] private Transform projectileSpawnPoint;
+
+ [Header("References")]
+ [Tooltip("Trajectory preview component")]
+ [SerializeField] private TrajectoryPreview trajectoryPreview;
+
+ [Header("Debug")]
+ [SerializeField] private bool showDebugLogs = true;
+
+ #endregion
+
+ #region Events
+
+ ///
+ /// Fired when projectile is launched. Parameters: (ProjectileBase projectile)
+ ///
+ public event Action OnProjectileLaunched;
+
+ #endregion
+
+ #region State
+
+ private bool isDragging = false;
+ private Vector2 dragStartPosition;
+ private ProjectileData currentAmmo;
+ private Projectiles.ProjectileBase activeProjectile;
+ private Camera mainCamera;
+
+ public bool IsDragging => isDragging;
+ public bool IsEnabled { get; private set; } = true;
+
+ #endregion
+
+ #region Lifecycle
+
+ internal override void OnManagedAwake()
+ {
+ base.OnManagedAwake();
+
+ mainCamera = Camera.main;
+
+ if (projectileSpawnPoint == null)
+ {
+ projectileSpawnPoint = transform;
+ }
+
+ if (trajectoryPreview == null)
+ {
+ trajectoryPreview = GetComponent();
+ }
+ }
+
+ internal override void OnManagedStart()
+ {
+ base.OnManagedStart();
+
+ // Hide trajectory by default
+ if (trajectoryPreview != null)
+ {
+ trajectoryPreview.Hide();
+ }
+ }
+
+ private void Update()
+ {
+ if (!IsEnabled) return;
+
+ HandleInput();
+ }
+
+ #endregion
+
+ #region Input Handling
+
+ private void HandleInput()
+ {
+ // Check for mouse/touch input
+ if (Mouse.current != null)
+ {
+ // Mouse down - start drag
+ if (Mouse.current.leftButton.wasPressedThisFrame)
+ {
+ StartDrag(Mouse.current.position.ReadValue());
+ }
+
+ // Mouse held - update drag
+ if (Mouse.current.leftButton.isPressed && isDragging)
+ {
+ UpdateDrag(Mouse.current.position.ReadValue());
+ }
+
+ // Mouse up - release
+ if (Mouse.current.leftButton.wasReleasedThisFrame && isDragging)
+ {
+ EndDrag();
+ }
+ }
+
+ // Touch input (for mobile)
+ if (Touchscreen.current != null && Touchscreen.current.primaryTouch.press.isPressed)
+ {
+ var touch = Touchscreen.current.primaryTouch;
+
+ if (touch.phase.ReadValue() == UnityEngine.InputSystem.TouchPhase.Began)
+ {
+ StartDrag(touch.position.ReadValue());
+ }
+ else if (touch.phase.ReadValue() == UnityEngine.InputSystem.TouchPhase.Moved && isDragging)
+ {
+ UpdateDrag(touch.position.ReadValue());
+ }
+ else if (touch.phase.ReadValue() == UnityEngine.InputSystem.TouchPhase.Ended && isDragging)
+ {
+ EndDrag();
+ }
+ }
+ }
+
+ private void StartDrag(Vector2 screenPosition)
+ {
+ if (currentAmmo == null)
+ {
+ if (showDebugLogs) Logging.Warning("[SlingshotController] No ammo selected!");
+ return;
+ }
+
+ isDragging = true;
+ dragStartPosition = screenPosition;
+
+ // Show trajectory preview
+ if (trajectoryPreview != null)
+ {
+ trajectoryPreview.Show();
+ }
+
+ if (showDebugLogs) Logging.Debug($"[SlingshotController] Started drag at {screenPosition}");
+ }
+
+ private void UpdateDrag(Vector2 currentScreenPosition)
+ {
+ // Calculate drag vector
+ Vector2 dragVector = dragStartPosition - currentScreenPosition;
+
+ // Calculate force and direction
+ float dragDistance = dragVector.magnitude;
+ float force = Mathf.Min(dragDistance / maxDragDistance, 1f) * maxForce;
+ Vector2 direction = dragVector.normalized;
+
+ // Update trajectory preview
+ if (trajectoryPreview != null)
+ {
+ Vector2 worldStartPos = projectileSpawnPoint.position;
+ trajectoryPreview.UpdateTrajectory(worldStartPos, direction, force);
+ }
+ }
+
+ private void EndDrag()
+ {
+ isDragging = false;
+
+ // Hide trajectory
+ if (trajectoryPreview != null)
+ {
+ trajectoryPreview.Hide();
+ }
+
+ // Calculate final launch parameters
+ Vector2 currentScreenPosition = Mouse.current != null ? Mouse.current.position.ReadValue() : Vector2.zero;
+ Vector2 dragVector = dragStartPosition - currentScreenPosition;
+ float dragDistance = dragVector.magnitude;
+ float force = Mathf.Min(dragDistance / maxDragDistance, 1f) * maxForce;
+ Vector2 direction = dragVector.normalized;
+
+ // Launch projectile
+ if (force > 0.1f) // Minimum drag threshold
+ {
+ LaunchProjectile(direction, force);
+ }
+ else
+ {
+ if (showDebugLogs) Logging.Debug("[SlingshotController] Drag too short - no launch");
+ }
+ }
+
+ #endregion
+
+ #region Projectile Management
+
+ ///
+ /// Set the current ammunition type
+ ///
+ public void SetAmmo(ProjectileData ammoData)
+ {
+ currentAmmo = ammoData;
+ string ammoName = GetAmmoName(ammoData);
+ if (showDebugLogs) Logging.Debug($"[SlingshotController] Ammo set to: {ammoName}");
+ }
+
+ ///
+ /// Launch a projectile with calculated force and direction
+ ///
+ private void LaunchProjectile(Vector2 direction, float force)
+ {
+ if (currentAmmo == null || currentAmmo.prefab == null)
+ {
+ Logging.Error("[SlingshotController] Cannot launch - no ammo or prefab!");
+ return;
+ }
+
+ // Spawn projectile
+ GameObject projectileObj = Instantiate(currentAmmo.prefab, projectileSpawnPoint.position, Quaternion.identity);
+ activeProjectile = projectileObj.GetComponent();
+
+ if (activeProjectile == null)
+ {
+ Logging.Error($"[SlingshotController] Projectile prefab {currentAmmo.prefab.name} missing ProjectileBase component!");
+ Destroy(projectileObj);
+ return;
+ }
+
+ // Launch it
+ activeProjectile.Launch(direction, force);
+
+ string ammoName = GetAmmoName(currentAmmo);
+ if (showDebugLogs) Logging.Debug($"[SlingshotController] Launched {ammoName} with force {force}");
+
+ // Fire event
+ OnProjectileLaunched?.Invoke(activeProjectile);
+ }
+
+ ///
+ /// Get currently active projectile (in flight)
+ ///
+ public Projectiles.ProjectileBase GetActiveProjectile()
+ {
+ return activeProjectile;
+ }
+
+ #endregion
+
+ #region Enable/Disable
+
+ ///
+ /// Enable slingshot (allow aiming/launching)
+ ///
+ public void Enable()
+ {
+ IsEnabled = true;
+ if (showDebugLogs) Logging.Debug("[SlingshotController] Enabled");
+ }
+
+ ///
+ /// Disable slingshot (prevent aiming/launching)
+ ///
+ public void Disable()
+ {
+ IsEnabled = false;
+ isDragging = false;
+
+ if (trajectoryPreview != null)
+ {
+ trajectoryPreview.Hide();
+ }
+
+ if (showDebugLogs) Logging.Debug("[SlingshotController] Disabled");
+ }
+
+ #endregion
+
+ #region Helpers
+
+ ///
+ /// Get display name for ammo (uses displayName or prefab name as fallback)
+ ///
+ private string GetAmmoName(ProjectileData ammo)
+ {
+ if (ammo == null) return "None";
+ if (!string.IsNullOrEmpty(ammo.displayName)) return ammo.displayName;
+ if (ammo.prefab != null) return ammo.prefab.name;
+ return "Unknown";
+ }
+
+ #endregion
+ }
+}
+
diff --git a/Assets/Scripts/Minigames/FortFight/Core/SlingshotController.cs.meta b/Assets/Scripts/Minigames/FortFight/Core/SlingshotController.cs.meta
new file mode 100644
index 00000000..6356b3b1
--- /dev/null
+++ b/Assets/Scripts/Minigames/FortFight/Core/SlingshotController.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: fc81b72132764f09a0ba180c90b432cf
+timeCreated: 1764682598
\ No newline at end of file
diff --git a/Assets/Scripts/Minigames/FortFight/Core/TrajectoryPreview.cs b/Assets/Scripts/Minigames/FortFight/Core/TrajectoryPreview.cs
new file mode 100644
index 00000000..5fbd2227
--- /dev/null
+++ b/Assets/Scripts/Minigames/FortFight/Core/TrajectoryPreview.cs
@@ -0,0 +1,113 @@
+using Core;
+using UnityEngine;
+
+namespace Minigames.FortFight.Core
+{
+ ///
+ /// Displays trajectory prediction line for projectile launches.
+ /// Shows dotted line preview of projectile arc.
+ ///
+ [RequireComponent(typeof(LineRenderer))]
+ public class TrajectoryPreview : MonoBehaviour
+ {
+ [Header("Trajectory Settings")]
+ [Tooltip("Number of points to simulate")]
+ [SerializeField] private int simulationSteps = 30;
+
+ [Tooltip("Time step for each simulation point")]
+ [SerializeField] private float timeStep = 0.1f;
+
+ [Tooltip("Mass to use for simulation (should match projectile mass)")]
+ [SerializeField] private float projectileMass = 1f;
+
+ [Tooltip("Drag to use for simulation")]
+ [SerializeField] private float drag = 0f;
+
+ [Header("Visual")]
+ [Tooltip("Color of trajectory line")]
+ [SerializeField] private Color lineColor = Color.yellow;
+
+ [Tooltip("Width of trajectory line")]
+ [SerializeField] private float lineWidth = 0.1f;
+
+ private LineRenderer lineRenderer;
+
+ private void Awake()
+ {
+ lineRenderer = GetComponent();
+
+ // Configure line renderer
+ if (lineRenderer != null)
+ {
+ lineRenderer.startWidth = lineWidth;
+ lineRenderer.endWidth = lineWidth;
+ lineRenderer.startColor = lineColor;
+ lineRenderer.endColor = lineColor;
+ lineRenderer.positionCount = simulationSteps;
+ lineRenderer.enabled = false;
+ }
+ }
+
+ ///
+ /// Show the trajectory line
+ ///
+ public void Show()
+ {
+ if (lineRenderer != null)
+ {
+ lineRenderer.enabled = true;
+ }
+ }
+
+ ///
+ /// Hide the trajectory line
+ ///
+ public void Hide()
+ {
+ if (lineRenderer != null)
+ {
+ lineRenderer.enabled = false;
+ }
+ }
+
+ ///
+ /// Update trajectory preview with new launch parameters
+ ///
+ public void UpdateTrajectory(Vector2 startPosition, Vector2 direction, float force)
+ {
+ if (lineRenderer == null) return;
+
+ Vector2 velocity = direction * force;
+ Vector2 gravity = Physics2D.gravity;
+
+ // Simulate trajectory points
+ Vector3[] points = new Vector3[simulationSteps];
+ Vector2 currentPos = startPosition;
+ Vector2 currentVelocity = velocity;
+
+ for (int i = 0; i < simulationSteps; i++)
+ {
+ points[i] = currentPos;
+
+ // Apply physics simulation
+ currentVelocity += gravity * timeStep;
+ currentPos += currentVelocity * timeStep;
+
+ // Optional: Stop if hits ground (y < some threshold)
+ if (currentPos.y < -10f)
+ {
+ // Fill remaining points at ground level
+ for (int j = i + 1; j < simulationSteps; j++)
+ {
+ points[j] = new Vector3(currentPos.x, -10f, 0);
+ }
+ break;
+ }
+ }
+
+ lineRenderer.positionCount = simulationSteps;
+ lineRenderer.SetPositions(points);
+ }
+ }
+}
+
diff --git a/Assets/Scripts/Minigames/FortFight/Core/TrajectoryPreview.cs.meta b/Assets/Scripts/Minigames/FortFight/Core/TrajectoryPreview.cs.meta
new file mode 100644
index 00000000..453a7a47
--- /dev/null
+++ b/Assets/Scripts/Minigames/FortFight/Core/TrajectoryPreview.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: b1e26667c6d4415f8dc51e4a58ba9479
+timeCreated: 1764682615
\ No newline at end of file
diff --git a/Assets/Scripts/Minigames/FortFight/Core/TurnManager.cs b/Assets/Scripts/Minigames/FortFight/Core/TurnManager.cs
new file mode 100644
index 00000000..092093f4
--- /dev/null
+++ b/Assets/Scripts/Minigames/FortFight/Core/TurnManager.cs
@@ -0,0 +1,148 @@
+using System;
+using Core;
+using Core.Lifecycle;
+using Minigames.FortFight.Data;
+
+namespace Minigames.FortFight.Core
+{
+ ///
+ /// Manages turn order and turn state for Fort Fight minigame.
+ /// Handles transitions between Player One, Player Two/AI turns.
+ ///
+ public class TurnManager : ManagedBehaviour
+ {
+ #region Events
+
+ ///
+ /// Fired when a new turn begins. Parameters: (PlayerData currentPlayer, TurnState turnState)
+ ///
+ public event Action OnTurnStarted;
+
+ ///
+ /// Fired when the current turn ends. Parameters: (PlayerData playerWhoFinished)
+ ///
+ public event Action OnTurnEnded;
+
+ ///
+ /// Fired when transitioning between turns
+ ///
+ public event Action OnTurnTransitioning;
+
+ #endregion
+
+ #region State
+
+ private TurnState currentTurnState = TurnState.PlayerOneTurn;
+ private PlayerData playerOne;
+ private PlayerData playerTwo;
+ private PlayerData currentPlayer;
+ private int turnCount = 0;
+
+ public TurnState CurrentTurnState => currentTurnState;
+ public PlayerData CurrentPlayer => currentPlayer;
+ public int TurnCount => turnCount;
+
+ #endregion
+
+ #region Initialization
+
+ ///
+ /// Initialize the turn manager with player data
+ ///
+ public void Initialize(PlayerData pPlayerOne, PlayerData pPlayerTwo)
+ {
+ this.playerOne = pPlayerOne;
+ this.playerTwo = pPlayerTwo;
+
+ Logging.Debug($"[TurnManager] Initialized with P1: {pPlayerOne.PlayerName} (AI: {pPlayerOne.IsAI}), P2: {pPlayerTwo.PlayerName} (AI: {pPlayerTwo.IsAI})");
+ }
+
+ ///
+ /// Start the first turn
+ ///
+ public void StartGame()
+ {
+ turnCount = 0;
+ currentTurnState = TurnState.PlayerOneTurn;
+ currentPlayer = playerOne;
+
+ Logging.Debug($"[TurnManager] Game started. First turn: {currentPlayer.PlayerName}");
+ OnTurnStarted?.Invoke(currentPlayer, currentTurnState);
+ }
+
+ #endregion
+
+ #region Turn Management
+
+ ///
+ /// End the current turn and advance to the next player
+ ///
+ public void EndTurn()
+ {
+ if (currentTurnState == TurnState.GameOver)
+ {
+ Logging.Warning("[TurnManager] Cannot end turn - game is over");
+ return;
+ }
+
+ Logging.Debug($"[TurnManager] Turn ended for {currentPlayer.PlayerName}");
+ OnTurnEnded?.Invoke(currentPlayer);
+
+ // Transition state
+ currentTurnState = TurnState.TransitioningTurn;
+ OnTurnTransitioning?.Invoke();
+
+ // Advance to next player
+ AdvanceToNextPlayer();
+ }
+
+ ///
+ /// Advance to the next player's turn
+ ///
+ private void AdvanceToNextPlayer()
+ {
+ turnCount++;
+
+ // Switch players
+ if (currentPlayer == playerOne)
+ {
+ currentPlayer = playerTwo;
+ currentTurnState = playerTwo.IsAI ? TurnState.AITurn : TurnState.PlayerTwoTurn;
+ }
+ else
+ {
+ currentPlayer = playerOne;
+ currentTurnState = TurnState.PlayerOneTurn;
+ }
+
+ Logging.Debug($"[TurnManager] Advanced to turn {turnCount}. Current player: {currentPlayer.PlayerName} (State: {currentTurnState})");
+ OnTurnStarted?.Invoke(currentPlayer, currentTurnState);
+ }
+
+ ///
+ /// Force game over state
+ ///
+ public void SetGameOver()
+ {
+ currentTurnState = TurnState.GameOver;
+ Logging.Debug("[TurnManager] Game over state set");
+ }
+
+ #endregion
+
+ #region Cleanup
+
+ internal override void OnManagedDestroy()
+ {
+ base.OnManagedDestroy();
+
+ // Clear all event listeners
+ OnTurnStarted = null;
+ OnTurnEnded = null;
+ OnTurnTransitioning = null;
+ }
+
+ #endregion
+ }
+}
+
diff --git a/Assets/Scripts/Minigames/FortFight/Core/TurnManager.cs.meta b/Assets/Scripts/Minigames/FortFight/Core/TurnManager.cs.meta
new file mode 100644
index 00000000..95013c12
--- /dev/null
+++ b/Assets/Scripts/Minigames/FortFight/Core/TurnManager.cs.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: c0b22cad084c0ba44b522474269c2c4b
\ No newline at end of file
diff --git a/Assets/Scripts/Minigames/FortFight/Data.meta b/Assets/Scripts/Minigames/FortFight/Data.meta
new file mode 100644
index 00000000..9bf68322
--- /dev/null
+++ b/Assets/Scripts/Minigames/FortFight/Data.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 08a9c8eba88cf1148bcf11e305a91051
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Minigames/FortFight/Data/FortFightEnums.cs b/Assets/Scripts/Minigames/FortFight/Data/FortFightEnums.cs
new file mode 100644
index 00000000..b9d14ca8
--- /dev/null
+++ b/Assets/Scripts/Minigames/FortFight/Data/FortFightEnums.cs
@@ -0,0 +1,57 @@
+using System;
+
+namespace Minigames.FortFight.Data
+{
+ ///
+ /// Game mode for Fort Fight minigame
+ ///
+ public enum FortFightGameMode
+ {
+ SinglePlayer, // Player vs AI
+ TwoPlayer // Player vs Player
+ }
+
+ ///
+ /// Current turn state in the game
+ ///
+ public enum TurnState
+ {
+ PlayerOneTurn,
+ PlayerTwoTurn,
+ AITurn,
+ TransitioningTurn,
+ GameOver
+ }
+
+ ///
+ /// Material types for fort blocks
+ ///
+ public enum BlockMaterial
+ {
+ Cardboard,
+ Metal,
+ Glass
+ }
+
+ ///
+ /// Size categories for fort blocks
+ ///
+ public enum BlockSize
+ {
+ Small,
+ Medium,
+ Large
+ }
+
+ ///
+ /// Types of projectiles available
+ ///
+ public enum ProjectileType
+ {
+ Toaster, // Standard physics projectile
+ Vacuum, // Heavy, rolls on floor
+ CeilingFan, // Drops straight down
+ TrashBag // Explodes on impact
+ }
+}
+
diff --git a/Assets/Scripts/Minigames/FortFight/Data/FortFightEnums.cs.meta b/Assets/Scripts/Minigames/FortFight/Data/FortFightEnums.cs.meta
new file mode 100644
index 00000000..10db3385
--- /dev/null
+++ b/Assets/Scripts/Minigames/FortFight/Data/FortFightEnums.cs.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: 9891698193c757344bc2f3f26730248a
\ No newline at end of file
diff --git a/Assets/Scripts/Minigames/FortFight/Data/PlayerData.cs b/Assets/Scripts/Minigames/FortFight/Data/PlayerData.cs
new file mode 100644
index 00000000..05e63920
--- /dev/null
+++ b/Assets/Scripts/Minigames/FortFight/Data/PlayerData.cs
@@ -0,0 +1,23 @@
+using System;
+
+namespace Minigames.FortFight.Data
+{
+ ///
+ /// Represents a player in the Fort Fight minigame
+ ///
+ [Serializable]
+ public class PlayerData
+ {
+ public string PlayerName;
+ public bool IsAI;
+ public int PlayerIndex; // 0 for Player One, 1 for Player Two/AI
+
+ public PlayerData(string name, bool isAI, int playerIndex)
+ {
+ PlayerName = name;
+ IsAI = isAI;
+ PlayerIndex = playerIndex;
+ }
+ }
+}
+
diff --git a/Assets/Scripts/Minigames/FortFight/Data/PlayerData.cs.meta b/Assets/Scripts/Minigames/FortFight/Data/PlayerData.cs.meta
new file mode 100644
index 00000000..0140a601
--- /dev/null
+++ b/Assets/Scripts/Minigames/FortFight/Data/PlayerData.cs.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: f310a90c43a9b3049b875c84f2d9043a
\ No newline at end of file
diff --git a/Assets/Scripts/Minigames/FortFight/Data/ProjectileData.cs b/Assets/Scripts/Minigames/FortFight/Data/ProjectileData.cs
new file mode 100644
index 00000000..50dd0598
--- /dev/null
+++ b/Assets/Scripts/Minigames/FortFight/Data/ProjectileData.cs
@@ -0,0 +1,50 @@
+using UnityEngine;
+
+namespace Minigames.FortFight.Data
+{
+ ///
+ /// ScriptableObject defining a projectile type for the ammunition system.
+ /// Only stores prefab reference and UI data - stats come from the prefab's ProjectileBase component.
+ ///
+ [CreateAssetMenu(fileName = "ProjectileData", menuName = "AppleHills/Fort Fight/Projectile Data", order = 1)]
+ public class ProjectileData : ScriptableObject
+ {
+ [Header("Prefab")]
+ [Tooltip("Prefab for this projectile (should have ProjectileBase component)")]
+ public GameObject prefab;
+
+ [Header("Ammunition System")]
+ [Tooltip("Cooldown time in seconds after use")]
+ public float cooldownTime = 5f;
+
+ [Header("UI")]
+ [Tooltip("Icon sprite for ammunition UI")]
+ public Sprite icon;
+
+ [Tooltip("Display name for this projectile type")]
+ public string displayName;
+
+ [Tooltip("Description of projectile behavior (for tutorial/UI)")]
+ [TextArea(2, 4)]
+ public string description;
+
+ ///
+ /// Get the ProjectileBase component from the prefab (for reading stats)
+ ///
+ public Projectiles.ProjectileBase GetProjectileComponent()
+ {
+ if (prefab == null) return null;
+ return prefab.GetComponent();
+ }
+
+ ///
+ /// Get damage value from prefab
+ ///
+ public float GetDamage()
+ {
+ var component = GetProjectileComponent();
+ return component != null ? component.Damage : 0f;
+ }
+ }
+}
+
diff --git a/Assets/Scripts/Minigames/FortFight/Data/ProjectileData.cs.meta b/Assets/Scripts/Minigames/FortFight/Data/ProjectileData.cs.meta
new file mode 100644
index 00000000..aeb83921
--- /dev/null
+++ b/Assets/Scripts/Minigames/FortFight/Data/ProjectileData.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 973f02063e5446598db4cbffdbf8f113
+timeCreated: 1764682274
\ No newline at end of file
diff --git a/Assets/Scripts/Minigames/FortFight/Fort.meta b/Assets/Scripts/Minigames/FortFight/Fort.meta
new file mode 100644
index 00000000..33343e49
--- /dev/null
+++ b/Assets/Scripts/Minigames/FortFight/Fort.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: a5434add8e2e43cabd0ce4283636ca83
+timeCreated: 1764591745
\ No newline at end of file
diff --git a/Assets/Scripts/Minigames/FortFight/Fort/FortBlock.cs b/Assets/Scripts/Minigames/FortFight/Fort/FortBlock.cs
new file mode 100644
index 00000000..4bca4200
--- /dev/null
+++ b/Assets/Scripts/Minigames/FortFight/Fort/FortBlock.cs
@@ -0,0 +1,383 @@
+using System;
+using Core;
+using Core.Lifecycle;
+using UnityEngine;
+using Minigames.FortFight.Data;
+
+namespace Minigames.FortFight.Fort
+{
+ ///
+ /// Individual fort block with HP, material properties, and physics.
+ /// Component attached to each block GameObject in a fort prefab.
+ ///
+ [RequireComponent(typeof(Rigidbody2D), typeof(Collider2D))]
+ public class FortBlock : ManagedBehaviour
+ {
+ #region Inspector Properties
+
+ [Header("Block Configuration")]
+ [SerializeField] private BlockMaterial material = BlockMaterial.Cardboard;
+ [SerializeField] private BlockSize size = BlockSize.Medium;
+ [SerializeField] private bool isWeakPoint = false;
+
+ [Header("Weak Point Settings (if applicable)")]
+ [Tooltip("Visual indicator shown in editor/game for weak points")]
+ [SerializeField] private GameObject weakPointVisualIndicator;
+ [Tooltip("Visual explosion effect prefab")]
+ [SerializeField] private GameObject explosionEffectPrefab;
+
+ [Header("Visual Feedback")]
+ [SerializeField] private SpriteRenderer spriteRenderer;
+
+ #endregion
+
+ #region Events
+
+ ///
+ /// Fired when this block is destroyed. Parameters: (FortBlock block, float damageTaken)
+ ///
+ public event Action OnBlockDestroyed;
+
+ ///
+ /// Fired when this block takes damage. Parameters: (float currentHP, float maxHP)
+ ///
+ public event Action OnBlockDamaged;
+
+ #endregion
+
+ #region Properties
+
+ public BlockMaterial Material => material;
+ public BlockSize Size => size;
+ public bool IsWeakPoint => isWeakPoint;
+ public float CurrentHp => currentHp;
+ public float MaxHp => maxHp;
+ public float HpPercentage => maxHp > 0 ? (currentHp / maxHp) * 100f : 0f;
+
+ #endregion
+
+ #region Private State
+
+ private float maxHp;
+ private float currentHp;
+ private FortController parentFort;
+ private Rigidbody2D rb2D;
+ private Collider2D blockCollider;
+ private bool isDestroyed = false;
+
+ // Cached settings
+ private AppleHills.Core.Settings.IFortFightSettings _cachedSettings;
+ private AppleHills.Core.Settings.IFortFightSettings CachedSettings
+ {
+ get
+ {
+ if (_cachedSettings == null)
+ {
+ _cachedSettings = GameManager.GetSettingsObject();
+ }
+ return _cachedSettings;
+ }
+ }
+
+ #endregion
+
+ #region Lifecycle
+
+ internal override void OnManagedDestroy()
+ {
+ base.OnManagedDestroy();
+
+ // Unsubscribe events
+ OnBlockDestroyed = null;
+ OnBlockDamaged = null;
+ }
+
+ #endregion
+
+ #region Initialization
+
+ ///
+ /// Initialize this block. Called explicitly by parent FortController.
+ /// DO NOT call from Awake/Start - parent controls initialization timing.
+ ///
+ public void Initialize()
+ {
+ // Cache components
+ rb2D = GetComponent();
+ blockCollider = GetComponent();
+
+ if (spriteRenderer == null)
+ {
+ spriteRenderer = GetComponent();
+ }
+
+ if (isDestroyed)
+ {
+ Logging.Warning($"[FortBlock] Cannot initialize destroyed block {gameObject.name}");
+ return;
+ }
+
+ // Calculate HP based on material and size
+ CalculateHp();
+
+ // Configure physics properties
+ ConfigurePhysics();
+
+ // Show/hide weak point indicator
+ if (weakPointVisualIndicator != null)
+ {
+ weakPointVisualIndicator.SetActive(isWeakPoint);
+ }
+
+ Logging.Debug($"[FortBlock] {gameObject.name} initialized: {material} {size}, HP: {maxHp}");
+ }
+
+ #endregion
+
+ #region HP Calculation
+
+ private void CalculateHp()
+ {
+ // Get material config
+ var materialConfig = CachedSettings.GetMaterialConfig(material);
+ float baseMaterialHp = materialConfig?.baseHp ?? 20f;
+
+ // Get size config
+ var sizeConfig = CachedSettings.GetSizeConfig(size);
+ float sizeMultiplier = sizeConfig?.hpMultiplier ?? 1f;
+
+ maxHp = baseMaterialHp * sizeMultiplier;
+ currentHp = maxHp;
+
+ Logging.Debug($"[FortBlock] {gameObject.name} initialized: {material} {size}, HP: {maxHp}");
+ }
+
+ #endregion
+
+ #region Physics Configuration
+
+ private void ConfigurePhysics()
+ {
+ if (rb2D == null) return;
+
+ // Get material config
+ var materialConfig = CachedSettings.GetMaterialConfig(material);
+ float baseMass = materialConfig?.baseMass ?? 1f;
+
+ // Get size config
+ var sizeConfig = CachedSettings.GetSizeConfig(size);
+ float sizeMultiplier = sizeConfig?.massMultiplier ?? 1f;
+
+ rb2D.mass = baseMass * sizeMultiplier;
+ rb2D.gravityScale = CachedSettings.PhysicsGravityScale;
+ rb2D.collisionDetectionMode = CollisionDetectionMode2D.Continuous;
+ }
+
+ #endregion
+
+ #region Damage System
+
+ ///
+ /// Apply damage to this block
+ ///
+ public void TakeDamage(float damage)
+ {
+ if (isDestroyed) return;
+
+ currentHp -= damage;
+ currentHp = Mathf.Max(0f, currentHp);
+
+ Logging.Debug($"[FortBlock] {gameObject.name} took {damage} damage. HP: {currentHp}/{maxHp} ({HpPercentage:F1}%)");
+
+ OnBlockDamaged?.Invoke(currentHp, maxHp);
+
+ // Visual feedback
+ UpdateVisualDamage();
+
+ // Check if destroyed
+ if (currentHp <= 0f)
+ {
+ DestroyBlock();
+ }
+ }
+
+ private void UpdateVisualDamage()
+ {
+ if (spriteRenderer == null) return;
+
+ var settings = GameManager.GetSettingsObject();
+ Color targetColor = settings?.DamageColorTint ?? new Color(0.5f, 0.5f, 0.5f);
+
+ // Darken sprite based on damage
+ float damagePercent = 1f - (currentHp / maxHp);
+ Color damageColor = Color.Lerp(Color.white, targetColor, damagePercent);
+ spriteRenderer.color = damageColor;
+ }
+
+ #endregion
+
+ #region Destruction
+
+ private void DestroyBlock()
+ {
+ if (isDestroyed) return;
+ isDestroyed = true;
+
+ Logging.Debug($"[FortBlock] {gameObject.name} destroyed! Weak point: {isWeakPoint}");
+
+ // Trigger explosion if weak point
+ if (isWeakPoint)
+ {
+ TriggerWeakPointExplosion();
+ }
+
+ // Notify listeners
+ OnBlockDestroyed?.Invoke(this, maxHp);
+
+ // Spawn destruction effects (placeholder)
+ SpawnDestructionEffect();
+
+ // Destroy GameObject
+ Destroy(gameObject);
+ }
+
+ private void TriggerWeakPointExplosion()
+ {
+ float explosionRadius = CachedSettings.WeakPointExplosionRadius;
+ float explosionDamage = CachedSettings.WeakPointExplosionDamage;
+ float explosionForce = CachedSettings.WeakPointExplosionForce;
+
+ Logging.Debug($"[FortBlock] ========================================");
+ Logging.Debug($"[FortBlock] 💥 WEAK POINT EXPLOSION TRIGGERED!");
+ Logging.Debug($"[FortBlock] Position: {transform.position}");
+ Logging.Debug($"[FortBlock] Explosion Radius: {explosionRadius}");
+ Logging.Debug($"[FortBlock] Explosion Damage: {explosionDamage}");
+ Logging.Debug($"[FortBlock] Explosion Force: {explosionForce}");
+ Logging.Debug($"[FortBlock] ========================================");
+
+ // Spawn explosion effect
+ if (explosionEffectPrefab != null)
+ {
+ Logging.Debug($"[FortBlock] Spawning explosion effect prefab");
+ GameObject explosion = Instantiate(explosionEffectPrefab, transform.position, Quaternion.identity);
+ Destroy(explosion, 3f); // Auto-cleanup after 3 seconds
+ }
+ else
+ {
+ Logging.Debug($"[FortBlock] No explosion effect prefab (visual only)");
+ }
+
+ // Find nearby blocks and damage them
+ Collider2D[] nearbyColliders = Physics2D.OverlapCircleAll(transform.position, explosionRadius);
+
+ Logging.Debug($"[FortBlock] Physics2D.OverlapCircleAll found {nearbyColliders.Length} colliders");
+
+ if (nearbyColliders.Length <= 1)
+ {
+ Logging.Warning($"[FortBlock] ⚠️ Only found {nearbyColliders.Length} colliders! Other blocks need BoxCollider2D with 'Is Trigger' UNCHECKED");
+ }
+
+ int blocksHit = 0;
+ foreach (Collider2D col in nearbyColliders)
+ {
+ if (col.gameObject == gameObject)
+ {
+ Logging.Debug($"[FortBlock] Skipping self");
+ continue; // Skip self
+ }
+
+ Logging.Debug($"[FortBlock] Checking collider: {col.gameObject.name}");
+
+ FortBlock nearbyBlock = col.GetComponent();
+ if (nearbyBlock != null && !nearbyBlock.isDestroyed)
+ {
+ Vector2 explosionCenter = transform.position;
+ float distance = Vector2.Distance(explosionCenter, nearbyBlock.transform.position);
+
+ // Calculate damage with falloff
+ float damageFalloff = 1f - (distance / explosionRadius);
+ float actualDamage = explosionDamage * damageFalloff;
+
+ // Apply damage
+ nearbyBlock.TakeDamage(actualDamage);
+
+ // Apply explosion force (2D equivalent of AddExplosionForce)
+ Rigidbody2D nearbyRb = nearbyBlock.GetComponent();
+ if (nearbyRb != null)
+ {
+ ApplyExplosionForce2D(nearbyRb, explosionForce, explosionCenter, explosionRadius);
+ Logging.Debug($"[FortBlock] ✓ HIT: {nearbyBlock.gameObject.name} - Damage: {actualDamage:F1}, Force applied from center");
+ }
+ else
+ {
+ Logging.Debug($"[FortBlock] ✓ HIT: {nearbyBlock.gameObject.name} - Damage: {actualDamage:F1} (no Rigidbody2D)");
+ }
+
+ blocksHit++;
+ }
+ else if (nearbyBlock == null)
+ {
+ Logging.Debug($"[FortBlock] × MISS: {col.gameObject.name} has no FortBlock component");
+ }
+ else
+ {
+ Logging.Debug($"[FortBlock] × SKIP: {col.gameObject.name} already destroyed");
+ }
+ }
+
+ Logging.Debug($"[FortBlock] Explosion complete. Damaged {blocksHit} blocks");
+ Logging.Debug($"[FortBlock] ========================================");
+
+ // TODO: Add screen shake effect
+ // TODO: Play explosion sound via AudioManager
+ }
+
+ ///
+ /// Apply explosion force to a Rigidbody2D (2D equivalent of Rigidbody.AddExplosionForce).
+ /// Force decreases with distance from explosion center.
+ ///
+ private void ApplyExplosionForce2D(Rigidbody2D rb, float force, Vector2 center, float radius)
+ {
+ Vector2 direction = (rb.position - center);
+ float distance = direction.magnitude;
+
+ if (distance == 0f) return; // Avoid division by zero
+
+ // Normalize direction
+ direction /= distance;
+
+ // Calculate force with linear falloff (like Unity's 3D AddExplosionForce)
+ float forceMagnitude = force * (1f - (distance / radius));
+
+ // Apply force as impulse
+ rb.AddForce(direction * forceMagnitude, ForceMode2D.Impulse);
+ }
+
+ private void SpawnDestructionEffect()
+ {
+ // Placeholder for destruction particles
+ // TODO: Create material-specific destruction effects
+ Logging.Debug($"[FortBlock] Spawning destruction effect for {material} block");
+ }
+
+ #endregion
+
+ #region Debug Helpers
+
+ #if UNITY_EDITOR
+ private void OnDrawGizmosSelected()
+ {
+ if (isWeakPoint)
+ {
+ // Draw explosion radius in editor using settings
+ float radius = AppleHills.SettingsAccess.GetWeakPointExplosionRadius();
+ Gizmos.color = Color.red;
+ Gizmos.DrawWireSphere(transform.position, radius);
+ }
+ }
+ #endif
+
+ #endregion
+ }
+}
+
diff --git a/Assets/Scripts/Minigames/FortFight/Fort/FortBlock.cs.meta b/Assets/Scripts/Minigames/FortFight/Fort/FortBlock.cs.meta
new file mode 100644
index 00000000..de58acfd
--- /dev/null
+++ b/Assets/Scripts/Minigames/FortFight/Fort/FortBlock.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: ace8ce8bea324389a9955e63081ccff7
+timeCreated: 1764591745
\ No newline at end of file
diff --git a/Assets/Scripts/Minigames/FortFight/Fort/FortController.cs b/Assets/Scripts/Minigames/FortFight/Fort/FortController.cs
new file mode 100644
index 00000000..3fdfc825
--- /dev/null
+++ b/Assets/Scripts/Minigames/FortFight/Fort/FortController.cs
@@ -0,0 +1,326 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using Core;
+using Core.Lifecycle;
+using UnityEngine;
+using AppleHills.Core.Settings;
+
+namespace Minigames.FortFight.Fort
+{
+ ///
+ /// Root component of fort prefabs. Manages collection of child FortBlocks and tracks total HP.
+ ///
+ public class FortController : ManagedBehaviour
+ {
+ #region Inspector Properties
+
+ [Header("Fort Configuration")]
+ [SerializeField] private string fortName = "Unnamed Fort";
+
+ [Header("Debug")]
+ [SerializeField] private bool showDebugInfo = true;
+
+ #endregion
+
+ #region Events
+
+ ///
+ /// Fired when fort takes damage. Parameters: (float damage, float hpPercentage)
+ ///
+ public event Action OnFortDamaged;
+
+ ///
+ /// Fired when fort is defeated (HP < 30%)
+ ///
+ public event Action OnFortDefeated;
+
+ ///
+ /// Fired when a block is destroyed. Parameters: (FortBlock block)
+ ///
+ public event Action OnBlockDestroyed;
+
+ #endregion
+
+ #region Properties
+
+ public string FortName => fortName;
+ public float MaxFortHp => maxFortHp;
+ public float CurrentFortHp => currentFortHp;
+ public float HpPercentage => maxFortHp > 0 ? (currentFortHp / maxFortHp) * 100f : 0f;
+ public int TotalBlockCount => blocks.Count;
+ public int InitialBlockCount => initialBlockCount;
+ public bool IsDefeated { get; private set; }
+
+ #endregion
+
+ #region Private State
+
+ private List blocks = new List();
+ private float maxFortHp = 0f;
+ private float currentFortHp = 0f;
+ private int initialBlockCount = 0;
+ private bool isInitialized = false;
+
+ // Cached settings
+ private IFortFightSettings _cachedSettings;
+ private IFortFightSettings CachedSettings
+ {
+ get
+ {
+ if (_cachedSettings == null)
+ {
+ _cachedSettings = GameManager.GetSettingsObject();
+ }
+ return _cachedSettings;
+ }
+ }
+
+ #endregion
+
+ #region Lifecycle
+
+ internal override void OnManagedStart()
+ {
+ base.OnManagedStart();
+
+ // Self-initialize: discover blocks, register with manager
+ InitializeFort();
+ }
+
+ internal override void OnManagedDestroy()
+ {
+ base.OnManagedDestroy();
+
+ // Unsubscribe from all block events
+ foreach (FortBlock block in blocks)
+ {
+ if (block != null)
+ {
+ block.OnBlockDestroyed -= HandleBlockDestroyed;
+ block.OnBlockDamaged -= HandleBlockDamaged;
+ }
+ }
+
+ blocks.Clear();
+
+ // Clear events
+ OnFortDamaged = null;
+ OnFortDefeated = null;
+ OnBlockDestroyed = null;
+ }
+
+ #endregion
+
+ #region Initialization
+
+ ///
+ /// Initialize fort: discover child blocks, calculate HP, register with manager.
+ /// Called automatically in Start() - no external calls needed.
+ ///
+ private void InitializeFort()
+ {
+ if (isInitialized)
+ {
+ Logging.Warning($"[FortController] {fortName} already initialized!");
+ return;
+ }
+
+ Logging.Debug($"[FortController] {fortName} - Starting self-initialization");
+
+ // Step 1: Discover and register child blocks
+ DiscoverAndRegisterBlocks();
+
+ // Step 2: Register with central manager
+ RegisterWithManager();
+
+ isInitialized = true;
+ Logging.Debug($"[FortController] {fortName} - Initialization complete");
+ }
+
+ ///
+ /// Discover, initialize, and register all child blocks.
+ /// This ensures deterministic initialization order.
+ ///
+ private void DiscoverAndRegisterBlocks()
+ {
+ FortBlock[] childBlocks = GetComponentsInChildren();
+
+ if (childBlocks.Length == 0)
+ {
+ Logging.Error($"[FortController] {fortName} has no blocks!");
+ return;
+ }
+
+ if (childBlocks.Length > 10)
+ {
+ Logging.Warning($"[FortController] {fortName} has {childBlocks.Length} blocks (max 10 recommended)");
+ }
+
+ Logging.Debug($"[FortController] {fortName} - Discovered {childBlocks.Length} blocks, initializing...");
+
+ // Step 1: Initialize each block (calculate HP, configure physics)
+ foreach (FortBlock block in childBlocks)
+ {
+ block.Initialize();
+ }
+
+ // Step 2: Register each block (subscribe to events, track HP)
+ foreach (FortBlock block in childBlocks)
+ {
+ RegisterBlock(block);
+ }
+
+ initialBlockCount = blocks.Count;
+ Logging.Debug($"[FortController] {fortName} - Initialized and registered {blocks.Count} blocks, Total HP: {maxFortHp:F0}");
+ }
+
+ ///
+ /// Register this fort with the central FortManager.
+ /// Manager determines if player/enemy and handles UI binding.
+ ///
+ private void RegisterWithManager()
+ {
+ Core.FortManager manager = FindFirstObjectByType();
+
+ if (manager == null)
+ {
+ Logging.Error($"[FortController] {fortName} - FortManager not found! Cannot complete initialization.");
+ return;
+ }
+
+ manager.RegisterFort(this);
+ Logging.Debug($"[FortController] {fortName} - Registered with FortManager");
+ }
+
+ #endregion
+
+ #region Block Management
+
+ ///
+ /// Register a block with this fort controller. Called by FortBlock on start.
+ ///
+ public void RegisterBlock(FortBlock block)
+ {
+ if (block == null) return;
+
+ if (!blocks.Contains(block))
+ {
+ blocks.Add(block);
+ maxFortHp += block.MaxHp;
+ currentFortHp += block.MaxHp;
+
+ // Subscribe to block events
+ block.OnBlockDestroyed += HandleBlockDestroyed;
+ block.OnBlockDamaged += HandleBlockDamaged;
+
+ if (showDebugInfo)
+ {
+ Logging.Debug($"[FortController] Registered block: {block.gameObject.name} ({block.Material} {block.Size}, HP: {block.MaxHp})");
+ }
+ }
+ }
+
+ ///
+ /// Get all blocks marked as weak points
+ ///
+ public List GetWeakPoints()
+ {
+ return blocks.Where(b => b != null && b.IsWeakPoint).ToList();
+ }
+
+ ///
+ /// Get all remaining blocks
+ ///
+ public List GetAllBlocks()
+ {
+ return new List(blocks);
+ }
+
+ ///
+ /// Get a random block (for AI targeting)
+ ///
+ public FortBlock GetRandomBlock()
+ {
+ if (blocks.Count == 0) return null;
+ return blocks[UnityEngine.Random.Range(0, blocks.Count)];
+ }
+
+ #endregion
+
+ #region Event Handlers
+
+ private void HandleBlockDestroyed(FortBlock block, float blockMaxHp)
+ {
+ if (block == null) return;
+
+ Logging.Debug($"[FortController] {fortName} - Block destroyed: {block.gameObject.name}");
+
+ // Remove from list
+ blocks.Remove(block);
+
+ // Update current HP
+ currentFortHp -= blockMaxHp;
+ currentFortHp = Mathf.Max(0f, currentFortHp);
+
+ // Notify listeners
+ OnBlockDestroyed?.Invoke(block);
+ OnFortDamaged?.Invoke(blockMaxHp, HpPercentage);
+
+ // Check defeat condition
+ CheckDefeatCondition();
+
+ if (showDebugInfo)
+ {
+ Logging.Debug($"[FortController] {fortName} - HP: {currentFortHp:F0}/{maxFortHp:F0} ({HpPercentage:F1}%), Blocks: {blocks.Count}/{initialBlockCount}");
+ }
+ }
+
+ private void HandleBlockDamaged(float currentBlockHp, float maxBlockHp)
+ {
+ // Block damaged but not destroyed
+ // Could add visual feedback here if needed
+ }
+
+ #endregion
+
+ #region Defeat Condition
+
+ private void CheckDefeatCondition()
+ {
+ if (IsDefeated) return;
+
+ float defeatThreshold = CachedSettings?.FortDefeatThreshold ?? 0.3f;
+ float defeatThresholdPercent = defeatThreshold * 100f;
+
+ // Defeat if HP below threshold
+ if (HpPercentage < defeatThresholdPercent)
+ {
+ IsDefeated = true;
+ Logging.Debug($"[FortController] {fortName} DEFEATED! Final HP: {HpPercentage:F1}% (threshold: {defeatThresholdPercent:F1}%)");
+ OnFortDefeated?.Invoke();
+ }
+ }
+
+ #endregion
+
+ #region Debug Helpers
+
+ private void OnGUI()
+ {
+ if (!showDebugInfo || !Application.isPlaying) return;
+
+ // Display fort HP in scene view (for testing)
+ Vector3 screenPos = Camera.main.WorldToScreenPoint(transform.position + Vector3.up * 2f);
+ if (screenPos.z > 0)
+ {
+ GUI.color = IsDefeated ? Color.red : Color.white;
+ GUI.Label(new Rect(screenPos.x - 50, Screen.height - screenPos.y, 100, 30),
+ $"{fortName}\nHP: {HpPercentage:F0}%");
+ }
+ }
+
+ #endregion
+ }
+}
+
diff --git a/Assets/Scripts/Minigames/FortFight/Fort/FortController.cs.meta b/Assets/Scripts/Minigames/FortFight/Fort/FortController.cs.meta
new file mode 100644
index 00000000..e37631a6
--- /dev/null
+++ b/Assets/Scripts/Minigames/FortFight/Fort/FortController.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 05031222348c421ab564757f52f24952
+timeCreated: 1764591745
\ No newline at end of file
diff --git a/Assets/Scripts/Minigames/FortFight/FortFightPhase1Tester.cs b/Assets/Scripts/Minigames/FortFight/FortFightPhase1Tester.cs
new file mode 100644
index 00000000..196aa23e
--- /dev/null
+++ b/Assets/Scripts/Minigames/FortFight/FortFightPhase1Tester.cs
@@ -0,0 +1,139 @@
+using Core;
+using UnityEngine;
+using Core.Lifecycle;
+using Minigames.FortFight.Core;
+using Minigames.FortFight.Data;
+
+namespace Minigames.FortFight
+{
+ ///
+ /// Debug script to test Phase 1 implementation without full UI setup.
+ /// Attach to a GameObject in the scene to run automated tests.
+ ///
+ public class FortFightPhase1Tester : ManagedBehaviour
+ {
+ [Header("Test Settings")]
+ [SerializeField] private bool runAutomatedTest = true;
+ [SerializeField] private FortFightGameMode testMode = FortFightGameMode.SinglePlayer;
+ [SerializeField] private int numberOfTurnsToTest = 6;
+
+ private FortFightGameManager gameManager;
+ private TurnManager turnManager;
+ private int playerActionsExecuted = 0;
+
+ internal override void OnManagedStart()
+ {
+ base.OnManagedStart();
+
+ if (!runAutomatedTest)
+ {
+ Logging.Debug("[FortFightPhase1Tester] Automated test disabled");
+ return;
+ }
+
+ // Find managers
+ gameManager = FindFirstObjectByType();
+ turnManager = FindFirstObjectByType();
+
+ if (gameManager == null)
+ {
+ Logging.Error("[FortFightPhase1Tester] FortFightGameManager not found!");
+ return;
+ }
+
+ if (turnManager == null)
+ {
+ Logging.Error("[FortFightPhase1Tester] TurnManager not found!");
+ return;
+ }
+
+ // Subscribe to events for testing
+ gameManager.OnGameModeSelected += OnGameModeSelected;
+ gameManager.OnGameStarted += OnGameStarted;
+ turnManager.OnTurnStarted += OnTurnStarted;
+ turnManager.OnTurnEnded += OnTurnEnded;
+
+ // Start test
+ Logging.Debug("=== STARTING PHASE 1 AUTOMATED TEST ===");
+ Logging.Debug($"Testing mode: {testMode}");
+ Logging.Debug($"Will execute {numberOfTurnsToTest} turns total");
+
+ // Simulate mode selection
+ gameManager.SelectGameMode(testMode);
+ }
+
+ private void OnGameModeSelected(FortFightGameMode mode)
+ {
+ Logging.Debug($"[TEST] Game mode selected: {mode}");
+ }
+
+ private void OnGameStarted()
+ {
+ Logging.Debug("[TEST] Game started!");
+ }
+
+ private void OnTurnStarted(PlayerData currentPlayer, TurnState turnState)
+ {
+ Logging.Debug($"[TEST] Turn started - Player: {currentPlayer.PlayerName}, State: {turnState}, Turn #: {turnManager.TurnCount + 1}");
+
+ // If it's a human player's turn (not AI), simulate taking action after a delay
+ if (turnState == TurnState.PlayerOneTurn || turnState == TurnState.PlayerTwoTurn)
+ {
+ Invoke(nameof(SimulatePlayerAction), 0.5f);
+ }
+
+ // Check if we've reached the test limit
+ if (turnManager.TurnCount >= numberOfTurnsToTest)
+ {
+ Logging.Debug("=== TEST COMPLETE ===");
+ Logging.Debug($"Successfully completed {numberOfTurnsToTest} turns!");
+ Logging.Debug($"Player actions executed: {playerActionsExecuted}");
+
+ // End the game
+ gameManager.EndGame();
+ }
+ }
+
+ private void OnTurnEnded(PlayerData player)
+ {
+ Logging.Debug($"[TEST] Turn ended for {player.PlayerName}");
+ }
+
+ private void SimulatePlayerAction()
+ {
+ if (turnManager == null) return;
+
+ TurnState state = turnManager.CurrentTurnState;
+
+ // Only simulate if it's still a player turn (not transitioned yet)
+ if (state == TurnState.PlayerOneTurn || state == TurnState.PlayerTwoTurn)
+ {
+ PlayerData currentPlayer = turnManager.CurrentPlayer;
+ Logging.Debug($"[TEST] Simulating action for {currentPlayer.PlayerName}");
+ playerActionsExecuted++;
+
+ // End the turn
+ turnManager.EndTurn();
+ }
+ }
+
+ internal override void OnManagedDestroy()
+ {
+ base.OnManagedDestroy();
+
+ // Unsubscribe from events
+ if (gameManager != null)
+ {
+ gameManager.OnGameModeSelected -= OnGameModeSelected;
+ gameManager.OnGameStarted -= OnGameStarted;
+ }
+
+ if (turnManager != null)
+ {
+ turnManager.OnTurnStarted -= OnTurnStarted;
+ turnManager.OnTurnEnded -= OnTurnEnded;
+ }
+ }
+ }
+}
+
diff --git a/Assets/Scripts/Minigames/FortFight/FortFightPhase1Tester.cs.meta b/Assets/Scripts/Minigames/FortFight/FortFightPhase1Tester.cs.meta
new file mode 100644
index 00000000..f730a365
--- /dev/null
+++ b/Assets/Scripts/Minigames/FortFight/FortFightPhase1Tester.cs.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: 756ba6afb97885c43a3d0eac023b3797
\ No newline at end of file
diff --git a/Assets/Scripts/Minigames/FortFight/FortFightPhase2Tester.cs b/Assets/Scripts/Minigames/FortFight/FortFightPhase2Tester.cs
new file mode 100644
index 00000000..9dd573dd
--- /dev/null
+++ b/Assets/Scripts/Minigames/FortFight/FortFightPhase2Tester.cs
@@ -0,0 +1,184 @@
+using Core;
+using UnityEngine;
+using UnityEngine.InputSystem;
+using Core.Lifecycle;
+using Minigames.FortFight.Core;
+using Minigames.FortFight.Fort;
+
+namespace Minigames.FortFight
+{
+ ///
+ /// Debug script to test Phase 2 fort system.
+ /// Attach to a GameObject in the scene to manually trigger fort damage for testing.
+ ///
+ public class FortFightPhase2Tester : ManagedBehaviour
+ {
+ [Header("Test Settings")]
+ [SerializeField] private bool enableKeyboardControls = true;
+ [SerializeField] private float testDamageAmount = 25f;
+ [SerializeField] private bool autoTestOnStart = false;
+ [SerializeField] private float autoTestDelay = 2f;
+
+ private FortManager fortManager;
+ private FortController playerFort;
+ private FortController enemyFort;
+
+ internal override void OnManagedStart()
+ {
+ base.OnManagedStart();
+
+ // Find fort manager
+ fortManager = FindFirstObjectByType();
+
+ if (fortManager == null)
+ {
+ Logging.Error("[FortFightPhase2Tester] FortManager not found!");
+ return;
+ }
+
+ // Subscribe to fort spawn events
+ fortManager.OnPlayerFortSpawned += OnPlayerFortSpawned;
+ fortManager.OnEnemyFortSpawned += OnEnemyFortSpawned;
+
+ Logging.Debug("=== PHASE 2 TESTING CONTROLS ===");
+ Logging.Debug("Press '1' to damage random PLAYER fort block");
+ Logging.Debug("Press '2' to damage random ENEMY fort block");
+ Logging.Debug("Press '3' to damage PLAYER fort weak point");
+ Logging.Debug("Press '4' to damage ENEMY fort weak point");
+ Logging.Debug("Press '5' to destroy random PLAYER block");
+ Logging.Debug("Press '6' to destroy random ENEMY block");
+ Logging.Debug("================================");
+
+ if (autoTestOnStart)
+ {
+ InvokeRepeating(nameof(AutoTest), autoTestDelay, autoTestDelay);
+ }
+ }
+
+ private void OnPlayerFortSpawned(FortController fort)
+ {
+ playerFort = fort;
+ Logging.Debug($"[Phase2Tester] Player fort spawned: {fort.FortName}");
+ }
+
+ private void OnEnemyFortSpawned(FortController fort)
+ {
+ enemyFort = fort;
+ Logging.Debug($"[Phase2Tester] Enemy fort spawned: {fort.FortName}");
+ }
+
+ private void Update()
+ {
+ if (!enableKeyboardControls) return;
+ if (Keyboard.current == null) return;
+
+ // Test controls
+ if (Keyboard.current.digit1Key.wasPressedThisFrame)
+ {
+ DamageRandomBlock(playerFort, testDamageAmount);
+ }
+
+ if (Keyboard.current.digit2Key.wasPressedThisFrame)
+ {
+ DamageRandomBlock(enemyFort, testDamageAmount);
+ }
+
+ if (Keyboard.current.digit3Key.wasPressedThisFrame)
+ {
+ DamageWeakPoint(playerFort);
+ }
+
+ if (Keyboard.current.digit4Key.wasPressedThisFrame)
+ {
+ DamageWeakPoint(enemyFort);
+ }
+
+ if (Keyboard.current.digit5Key.wasPressedThisFrame)
+ {
+ DestroyRandomBlock(playerFort);
+ }
+
+ if (Keyboard.current.digit6Key.wasPressedThisFrame)
+ {
+ DestroyRandomBlock(enemyFort);
+ }
+ }
+
+ private void AutoTest()
+ {
+ // Alternate between player and enemy
+ if (Random.value > 0.5f)
+ {
+ DamageRandomBlock(playerFort, testDamageAmount);
+ }
+ else
+ {
+ DamageRandomBlock(enemyFort, testDamageAmount);
+ }
+ }
+
+ private void DamageRandomBlock(FortController fort, float damage)
+ {
+ if (fort == null || fort.TotalBlockCount == 0)
+ {
+ Logging.Warning("[Phase2Tester] No fort or blocks available to damage!");
+ return;
+ }
+
+ FortBlock randomBlock = fort.GetRandomBlock();
+ if (randomBlock != null)
+ {
+ Logging.Debug($"[Phase2Tester] Damaging {fort.FortName} block '{randomBlock.gameObject.name}' for {damage} damage");
+ randomBlock.TakeDamage(damage);
+ }
+ }
+
+ private void DamageWeakPoint(FortController fort)
+ {
+ if (fort == null)
+ {
+ Logging.Warning("[Phase2Tester] Fort is null!");
+ return;
+ }
+
+ var weakPoints = fort.GetWeakPoints();
+ if (weakPoints.Count == 0)
+ {
+ Logging.Warning($"[Phase2Tester] {fort.FortName} has no weak points!");
+ return;
+ }
+
+ FortBlock weakPoint = weakPoints[Random.Range(0, weakPoints.Count)];
+ Logging.Debug($"[Phase2Tester] Destroying {fort.FortName} WEAK POINT '{weakPoint.gameObject.name}'");
+ weakPoint.TakeDamage(999f); // Instant destruction
+ }
+
+ private void DestroyRandomBlock(FortController fort)
+ {
+ if (fort == null || fort.TotalBlockCount == 0)
+ {
+ Logging.Warning("[Phase2Tester] No fort or blocks available to destroy!");
+ return;
+ }
+
+ FortBlock randomBlock = fort.GetRandomBlock();
+ if (randomBlock != null)
+ {
+ Logging.Debug($"[Phase2Tester] DESTROYING {fort.FortName} block '{randomBlock.gameObject.name}'");
+ randomBlock.TakeDamage(999f); // Instant destruction
+ }
+ }
+
+ internal override void OnManagedDestroy()
+ {
+ base.OnManagedDestroy();
+
+ if (fortManager != null)
+ {
+ fortManager.OnPlayerFortSpawned -= OnPlayerFortSpawned;
+ fortManager.OnEnemyFortSpawned -= OnEnemyFortSpawned;
+ }
+ }
+ }
+}
+
diff --git a/Assets/Scripts/Minigames/FortFight/FortFightPhase2Tester.cs.meta b/Assets/Scripts/Minigames/FortFight/FortFightPhase2Tester.cs.meta
new file mode 100644
index 00000000..49c2dd52
--- /dev/null
+++ b/Assets/Scripts/Minigames/FortFight/FortFightPhase2Tester.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 74f26236978245cdaf33909a7c242cbf
+timeCreated: 1764592117
\ No newline at end of file
diff --git a/Assets/Scripts/Minigames/FortFight/Projectiles.meta b/Assets/Scripts/Minigames/FortFight/Projectiles.meta
new file mode 100644
index 00000000..43d9a8c1
--- /dev/null
+++ b/Assets/Scripts/Minigames/FortFight/Projectiles.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 2f2ab5d80875486aa447f9c4afcbdec1
+timeCreated: 1764682302
\ No newline at end of file
diff --git a/Assets/Scripts/Minigames/FortFight/Projectiles/CeilingFanProjectile.cs b/Assets/Scripts/Minigames/FortFight/Projectiles/CeilingFanProjectile.cs
new file mode 100644
index 00000000..a702a48a
--- /dev/null
+++ b/Assets/Scripts/Minigames/FortFight/Projectiles/CeilingFanProjectile.cs
@@ -0,0 +1,52 @@
+using System.Collections;
+using Core;
+using UnityEngine;
+
+namespace Minigames.FortFight.Projectiles
+{
+ ///
+ /// Ceiling Fan projectile - drops straight down when ability is activated.
+ /// Player taps screen mid-flight to activate drop.
+ ///
+ public class CeilingFanProjectile : ProjectileBase
+ {
+ [Header("Ceiling Fan Specific")]
+ [Tooltip("Speed of downward drop")]
+ [SerializeField] private float dropSpeed = 20f;
+
+ [Tooltip("Delay before dropping")]
+ [SerializeField] private float dropDelay = 0.2f;
+
+ public override void ActivateAbility()
+ {
+ base.ActivateAbility();
+
+ if (AbilityActivated)
+ {
+ Logging.Debug("[CeilingFanProjectile] Ability activated - dropping straight down");
+ StartCoroutine(DropCoroutine());
+ }
+ }
+
+ private IEnumerator DropCoroutine()
+ {
+ // Stop all velocity
+ if (rb2D != null)
+ {
+ rb2D.linearVelocity = Vector2.zero;
+ rb2D.angularVelocity = 0f;
+ }
+
+ // Wait brief moment
+ yield return new WaitForSeconds(dropDelay);
+
+ // Drop straight down
+ if (rb2D != null)
+ {
+ rb2D.linearVelocity = Vector2.down * dropSpeed;
+ Logging.Debug($"[CeilingFanProjectile] Dropping with velocity: {rb2D.linearVelocity}");
+ }
+ }
+ }
+}
+
diff --git a/Assets/Scripts/Minigames/FortFight/Projectiles/CeilingFanProjectile.cs.meta b/Assets/Scripts/Minigames/FortFight/Projectiles/CeilingFanProjectile.cs.meta
new file mode 100644
index 00000000..b98bed77
--- /dev/null
+++ b/Assets/Scripts/Minigames/FortFight/Projectiles/CeilingFanProjectile.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: e10ba9bd4bcd40da87ecb3efe5b78467
+timeCreated: 1764682337
\ No newline at end of file
diff --git a/Assets/Scripts/Minigames/FortFight/Projectiles/ProjectileBase.cs b/Assets/Scripts/Minigames/FortFight/Projectiles/ProjectileBase.cs
new file mode 100644
index 00000000..09834858
--- /dev/null
+++ b/Assets/Scripts/Minigames/FortFight/Projectiles/ProjectileBase.cs
@@ -0,0 +1,250 @@
+using System;
+using Core;
+using Core.Lifecycle;
+using Minigames.FortFight.Fort;
+using UnityEngine;
+
+namespace Minigames.FortFight.Projectiles
+{
+ ///
+ /// Base class for all projectile types in Fort Fight.
+ /// Handles physics, collision, and basic damage dealing.
+ /// Subclasses override ActivateAbility() and OnHit() for unique behaviors.
+ ///
+ [RequireComponent(typeof(Rigidbody2D), typeof(Collider2D))]
+ public abstract class ProjectileBase : ManagedBehaviour
+ {
+ #region Inspector Properties
+
+ [Header("Projectile Stats")]
+ [Tooltip("Base damage dealt on impact")]
+ [SerializeField] protected float damage = 20f;
+
+ [Tooltip("Mass for physics (affects trajectory)")]
+ [SerializeField] protected float mass = 1f;
+
+ [Header("Visuals")]
+ [Tooltip("Sprite renderer for projectile")]
+ [SerializeField] protected SpriteRenderer spriteRenderer;
+
+ [Header("Effects")]
+ [Tooltip("Particle effect on impact (optional)")]
+ [SerializeField] protected GameObject impactEffectPrefab;
+
+ #endregion
+
+ #region Events
+
+ ///
+ /// Fired when projectile is launched. Parameters: (ProjectileBase projectile)
+ ///
+ public event Action OnLaunched;
+
+ ///
+ /// Fired when projectile hits something. Parameters: (ProjectileBase projectile, Collider2D hit)
+ ///
+ public event Action OnImpact;
+
+ ///
+ /// Fired when projectile is destroyed. Parameters: (ProjectileBase projectile)
+ ///
+ public event Action OnDestroyed;
+
+ #endregion
+
+ #region Properties
+
+ public float Damage => damage;
+ public bool IsLaunched { get; protected set; }
+ public bool AbilityActivated { get; protected set; }
+ public Vector2 LaunchDirection { get; protected set; }
+ public float LaunchForce { get; protected set; }
+
+ #endregion
+
+ #region Components
+
+ protected Rigidbody2D rb2D;
+ protected Collider2D projectileCollider;
+
+ #endregion
+
+ #region Lifecycle
+
+ internal override void OnManagedAwake()
+ {
+ base.OnManagedAwake();
+
+ // Cache components
+ rb2D = GetComponent();
+ projectileCollider = GetComponent();
+
+ if (spriteRenderer == null)
+ {
+ spriteRenderer = GetComponent();
+ }
+
+ // Configure rigidbody
+ if (rb2D != null)
+ {
+ rb2D.mass = mass;
+ rb2D.gravityScale = 1f;
+ rb2D.collisionDetectionMode = CollisionDetectionMode2D.Continuous;
+ }
+ }
+
+ #endregion
+
+ #region Launch
+
+ ///
+ /// Launch the projectile with given direction and force.
+ /// Called by SlingshotController.
+ ///
+ public virtual void Launch(Vector2 direction, float force)
+ {
+ if (IsLaunched)
+ {
+ Logging.Warning($"[ProjectileBase] {gameObject.name} already launched!");
+ return;
+ }
+
+ LaunchDirection = direction.normalized;
+ LaunchForce = force;
+ IsLaunched = true;
+
+ // Apply physics impulse
+ if (rb2D != null)
+ {
+ rb2D.AddForce(LaunchDirection * LaunchForce, ForceMode2D.Impulse);
+ Logging.Debug($"[ProjectileBase] Launched {gameObject.name} with force {LaunchForce} in direction {LaunchDirection}");
+ }
+
+ // Fire event
+ OnLaunched?.Invoke(this);
+ }
+
+ #endregion
+
+ #region Ability
+
+ ///
+ /// Activate projectile's special ability (mid-flight).
+ /// Override in subclasses for unique behaviors.
+ /// Called when player taps screen during flight.
+ ///
+ public virtual void ActivateAbility()
+ {
+ if (!IsLaunched)
+ {
+ Logging.Warning($"[ProjectileBase] Cannot activate ability - projectile not launched yet!");
+ return;
+ }
+
+ if (AbilityActivated)
+ {
+ Logging.Warning($"[ProjectileBase] Ability already activated!");
+ return;
+ }
+
+ AbilityActivated = true;
+ Logging.Debug($"[ProjectileBase] {gameObject.name} ability activated");
+
+ // Subclasses override this for special behavior
+ }
+
+ #endregion
+
+ #region Collision
+
+ private void OnCollisionEnter2D(Collision2D collision)
+ {
+ if (!IsLaunched) return;
+
+ Logging.Debug($"[ProjectileBase] {gameObject.name} hit {collision.gameObject.name}");
+
+ // Check if hit a fort block
+ FortBlock block = collision.gameObject.GetComponent();
+ if (block != null)
+ {
+ // Deal damage to block
+ block.TakeDamage(damage);
+ Logging.Debug($"[ProjectileBase] Dealt {damage} damage to {block.gameObject.name}");
+ }
+
+ // Spawn impact effect
+ SpawnImpactEffect(collision.contacts[0].point);
+
+ // Fire impact event
+ OnImpact?.Invoke(this, collision.collider);
+
+ // Call subclass-specific hit behavior
+ OnHit(collision.collider);
+
+ // Destroy projectile after hit (subclasses can override)
+ DestroyProjectile();
+ }
+
+ ///
+ /// Called when projectile hits something.
+ /// Override in subclasses for projectile-specific behavior.
+ ///
+ protected virtual void OnHit(Collider2D hit)
+ {
+ // Subclasses override for special behavior
+ // e.g., Vacuum continues sliding, TrashBag splits, etc.
+ }
+
+ #endregion
+
+ #region Effects
+
+ ///
+ /// Spawn impact particle effect
+ ///
+ protected void SpawnImpactEffect(Vector2 position)
+ {
+ if (impactEffectPrefab != null)
+ {
+ GameObject effect = Instantiate(impactEffectPrefab, position, Quaternion.identity);
+ Destroy(effect, 2f); // Auto-cleanup
+ }
+ }
+
+ #endregion
+
+ #region Destruction
+
+ ///
+ /// Destroy the projectile.
+ /// Can be overridden by subclasses for delayed destruction.
+ ///
+ protected virtual void DestroyProjectile()
+ {
+ Logging.Debug($"[ProjectileBase] Destroying {gameObject.name}");
+
+ // Fire destroyed event
+ OnDestroyed?.Invoke(this);
+
+ // Destroy GameObject
+ Destroy(gameObject);
+ }
+
+ #endregion
+
+ #region Debug
+
+ private void OnDrawGizmos()
+ {
+ if (IsLaunched && Application.isPlaying)
+ {
+ // Draw launch direction
+ Gizmos.color = Color.yellow;
+ Gizmos.DrawLine(transform.position, transform.position + (Vector3)(LaunchDirection * 2f));
+ }
+ }
+
+ #endregion
+ }
+}
+
diff --git a/Assets/Scripts/Minigames/FortFight/Projectiles/ProjectileBase.cs.meta b/Assets/Scripts/Minigames/FortFight/Projectiles/ProjectileBase.cs.meta
new file mode 100644
index 00000000..706635bd
--- /dev/null
+++ b/Assets/Scripts/Minigames/FortFight/Projectiles/ProjectileBase.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 70f37c48406847cdabd5589910220fdf
+timeCreated: 1764682302
\ No newline at end of file
diff --git a/Assets/Scripts/Minigames/FortFight/Projectiles/ToasterProjectile.cs b/Assets/Scripts/Minigames/FortFight/Projectiles/ToasterProjectile.cs
new file mode 100644
index 00000000..00a576f0
--- /dev/null
+++ b/Assets/Scripts/Minigames/FortFight/Projectiles/ToasterProjectile.cs
@@ -0,0 +1,22 @@
+using Core;
+using UnityEngine;
+
+namespace Minigames.FortFight.Projectiles
+{
+ ///
+ /// Standard projectile - no special ability.
+ /// Moderate damage, standard physics arc.
+ ///
+ public class ToasterProjectile : ProjectileBase
+ {
+ // Toaster is the basic projectile - uses base class behavior
+ // No special ability needed
+
+ public override void ActivateAbility()
+ {
+ // Toaster has no special ability
+ Logging.Debug("[ToasterProjectile] Toaster has no special ability");
+ }
+ }
+}
+
diff --git a/Assets/Scripts/Minigames/FortFight/Projectiles/ToasterProjectile.cs.meta b/Assets/Scripts/Minigames/FortFight/Projectiles/ToasterProjectile.cs.meta
new file mode 100644
index 00000000..2d1857b4
--- /dev/null
+++ b/Assets/Scripts/Minigames/FortFight/Projectiles/ToasterProjectile.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 6ecf658b5965496abda845de1a28e227
+timeCreated: 1764682312
\ No newline at end of file
diff --git a/Assets/Scripts/Minigames/FortFight/Projectiles/TrashBagProjectile.cs b/Assets/Scripts/Minigames/FortFight/Projectiles/TrashBagProjectile.cs
new file mode 100644
index 00000000..9a3a7c5b
--- /dev/null
+++ b/Assets/Scripts/Minigames/FortFight/Projectiles/TrashBagProjectile.cs
@@ -0,0 +1,120 @@
+using Core;
+using UnityEngine;
+
+namespace Minigames.FortFight.Projectiles
+{
+ ///
+ /// Trash Bag projectile - splits into multiple smaller pieces on impact.
+ /// Deals AOE damage in a forward cone.
+ ///
+ public class TrashBagProjectile : ProjectileBase
+ {
+ [Header("Trash Bag Specific")]
+ [Tooltip("Number of trash pieces to spawn on impact")]
+ [SerializeField] private int trashPieceCount = 6;
+
+ [Tooltip("Prefab for individual trash pieces")]
+ [SerializeField] private GameObject trashPiecePrefab;
+
+ [Tooltip("Force applied to each trash piece")]
+ [SerializeField] private float pieceForce = 8f;
+
+ [Tooltip("Spread angle for trash pieces (degrees)")]
+ [SerializeField] private float spreadAngle = 30f;
+
+ [Tooltip("Damage dealt by each trash piece")]
+ [SerializeField] private float pieceDamage = 8f;
+
+ protected override void OnHit(Collider2D hit)
+ {
+ base.OnHit(hit);
+
+ Logging.Debug($"[TrashBagProjectile] Splitting into {trashPieceCount} pieces");
+ SpawnTrashPieces(hit.transform.position);
+ }
+
+ ///
+ /// Spawn multiple trash pieces in a forward cone
+ ///
+ private void SpawnTrashPieces(Vector2 impactPoint)
+ {
+ if (trashPiecePrefab == null)
+ {
+ Logging.Warning("[TrashBagProjectile] No trash piece prefab assigned!");
+ return;
+ }
+
+ // Calculate forward direction from velocity
+ Vector2 forwardDirection = rb2D.linearVelocity.normalized;
+ if (forwardDirection == Vector2.zero)
+ {
+ forwardDirection = LaunchDirection;
+ }
+
+ // Spawn pieces in a cone
+ for (int i = 0; i < trashPieceCount; i++)
+ {
+ // Calculate angle for this piece
+ float angleOffset = Mathf.Lerp(-spreadAngle, spreadAngle, i / (float)(trashPieceCount - 1));
+ float angleRadians = Mathf.Atan2(forwardDirection.y, forwardDirection.x) + angleOffset * Mathf.Deg2Rad;
+
+ Vector2 pieceDirection = new Vector2(Mathf.Cos(angleRadians), Mathf.Sin(angleRadians));
+
+ // Spawn trash piece
+ GameObject piece = Instantiate(trashPiecePrefab, impactPoint, Quaternion.identity);
+
+ // Setup trash piece physics
+ Rigidbody2D pieceRb = piece.GetComponent();
+ if (pieceRb != null)
+ {
+ pieceRb.AddForce(pieceDirection * pieceForce, ForceMode2D.Impulse);
+ }
+
+ // Setup trash piece damage (if it has a component)
+ TrashPiece trashPieceComponent = piece.GetComponent();
+ if (trashPieceComponent != null)
+ {
+ trashPieceComponent.Initialize(pieceDamage);
+ }
+
+ // Auto-destroy after 3 seconds
+ Destroy(piece, 3f);
+
+ Logging.Debug($"[TrashBagProjectile] Spawned trash piece {i} in direction {pieceDirection}");
+ }
+ }
+ }
+
+ ///
+ /// Component for individual trash pieces spawned by TrashBagProjectile.
+ /// Deals damage on collision.
+ ///
+ public class TrashPiece : MonoBehaviour
+ {
+ private float damage;
+ private bool hasHit = false;
+
+ public void Initialize(float pieceDamage)
+ {
+ this.damage = pieceDamage;
+ }
+
+ private void OnCollisionEnter2D(Collision2D collision)
+ {
+ if (hasHit) return;
+ hasHit = true;
+
+ // Check if hit a fort block
+ var block = collision.gameObject.GetComponent();
+ if (block != null)
+ {
+ block.TakeDamage(damage);
+ Logging.Debug($"[TrashPiece] Dealt {damage} damage to {block.gameObject.name}");
+ }
+
+ // Destroy this piece
+ Destroy(gameObject, 0.1f);
+ }
+ }
+}
+
diff --git a/Assets/Scripts/Minigames/FortFight/Projectiles/TrashBagProjectile.cs.meta b/Assets/Scripts/Minigames/FortFight/Projectiles/TrashBagProjectile.cs.meta
new file mode 100644
index 00000000..5f32a8fc
--- /dev/null
+++ b/Assets/Scripts/Minigames/FortFight/Projectiles/TrashBagProjectile.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: b0996e59b91e48f8a542ab9294b11a74
+timeCreated: 1764682467
\ No newline at end of file
diff --git a/Assets/Scripts/Minigames/FortFight/Projectiles/VacuumProjectile.cs b/Assets/Scripts/Minigames/FortFight/Projectiles/VacuumProjectile.cs
new file mode 100644
index 00000000..8db7d9f2
--- /dev/null
+++ b/Assets/Scripts/Minigames/FortFight/Projectiles/VacuumProjectile.cs
@@ -0,0 +1,82 @@
+using System.Collections;
+using Core;
+using UnityEngine;
+
+namespace Minigames.FortFight.Projectiles
+{
+ ///
+ /// Vacuum projectile - high mass, slides along ground after landing.
+ /// On ground impact: disables gravity, moves horizontally for 2 seconds.
+ ///
+ public class VacuumProjectile : ProjectileBase
+ {
+ [Header("Vacuum Specific")]
+ [Tooltip("Speed when sliding on ground")]
+ [SerializeField] private float slideSpeed = 10f;
+
+ [Tooltip("How long to slide before destroying")]
+ [SerializeField] private float slideDuration = 2f;
+
+ [Tooltip("Layer mask for ground detection")]
+ [SerializeField] private LayerMask groundLayer = 1; // Default layer
+
+ private bool isSliding = false;
+
+ protected override void OnHit(Collider2D hit)
+ {
+ // Check if hit ground
+ if (((1 << hit.gameObject.layer) & groundLayer) != 0)
+ {
+ Logging.Debug("[VacuumProjectile] Hit ground - starting slide");
+ StartSliding();
+ }
+ // If hit wall or fort block, destroy immediately (handled by base class)
+ }
+
+ ///
+ /// Start sliding behavior after hitting ground
+ ///
+ private void StartSliding()
+ {
+ if (isSliding) return;
+
+ isSliding = true;
+
+ // Disable gravity
+ if (rb2D != null)
+ {
+ rb2D.gravityScale = 0f;
+
+ // Set velocity to horizontal only (preserve direction)
+ Vector2 horizontalVelocity = new Vector2(rb2D.linearVelocity.x, 0f).normalized * slideSpeed;
+ rb2D.linearVelocity = horizontalVelocity;
+
+ Logging.Debug($"[VacuumProjectile] Sliding with velocity: {horizontalVelocity}");
+ }
+
+ // Destroy after slide duration
+ StartCoroutine(SlideCoroutine());
+ }
+
+ private IEnumerator SlideCoroutine()
+ {
+ yield return new WaitForSeconds(slideDuration);
+
+ Logging.Debug("[VacuumProjectile] Slide duration ended - destroying");
+ DestroyProjectile();
+ }
+
+ ///
+ /// Override to NOT destroy immediately on ground hit
+ ///
+ protected override void DestroyProjectile()
+ {
+ // Only destroy if we're done sliding or hit a wall
+ if (!isSliding || rb2D.linearVelocity.magnitude < 1f)
+ {
+ base.DestroyProjectile();
+ }
+ }
+ }
+}
+
diff --git a/Assets/Scripts/Minigames/FortFight/Projectiles/VacuumProjectile.cs.meta b/Assets/Scripts/Minigames/FortFight/Projectiles/VacuumProjectile.cs.meta
new file mode 100644
index 00000000..86a6de85
--- /dev/null
+++ b/Assets/Scripts/Minigames/FortFight/Projectiles/VacuumProjectile.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: bb85d181808c411b8bd1335aa7d35257
+timeCreated: 1764682326
\ No newline at end of file
diff --git a/Assets/Scripts/Minigames/FortFight/Settings.meta b/Assets/Scripts/Minigames/FortFight/Settings.meta
new file mode 100644
index 00000000..e70f3f47
--- /dev/null
+++ b/Assets/Scripts/Minigames/FortFight/Settings.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 90c9b2a87d284c5ba24cce60865c31a4
+timeCreated: 1764669813
\ No newline at end of file
diff --git a/Assets/Scripts/Minigames/FortFight/Settings/BlockConfigs.cs b/Assets/Scripts/Minigames/FortFight/Settings/BlockConfigs.cs
new file mode 100644
index 00000000..cfca5934
--- /dev/null
+++ b/Assets/Scripts/Minigames/FortFight/Settings/BlockConfigs.cs
@@ -0,0 +1,39 @@
+using System;
+using Minigames.FortFight.Data;
+using UnityEngine;
+
+namespace Minigames.FortFight.Settings
+{
+ ///
+ /// Configuration for a specific block material (Cardboard, Metal, Glass).
+ ///
+ [Serializable]
+ public class BlockMaterialConfig
+ {
+ [Tooltip("The material type this configuration applies to")]
+ public BlockMaterial material;
+
+ [Tooltip("Base HP for this material before size multiplier")]
+ public float baseHp;
+
+ [Tooltip("Base mass for physics simulation before size multiplier")]
+ public float baseMass;
+ }
+
+ ///
+ /// Configuration for a specific block size (Small, Medium, Large).
+ ///
+ [Serializable]
+ public class BlockSizeConfig
+ {
+ [Tooltip("The size type this configuration applies to")]
+ public BlockSize size;
+
+ [Tooltip("HP multiplier applied to base material HP")]
+ public float hpMultiplier;
+
+ [Tooltip("Mass multiplier applied to base material mass")]
+ public float massMultiplier;
+ }
+}
+
diff --git a/Assets/Scripts/Minigames/FortFight/Settings/BlockConfigs.cs.meta b/Assets/Scripts/Minigames/FortFight/Settings/BlockConfigs.cs.meta
new file mode 100644
index 00000000..3b227228
--- /dev/null
+++ b/Assets/Scripts/Minigames/FortFight/Settings/BlockConfigs.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 731e8965ca0149d79420ee0b15a4e94f
+timeCreated: 1764669813
\ No newline at end of file
diff --git a/Assets/Scripts/Minigames/FortFight/UI.meta b/Assets/Scripts/Minigames/FortFight/UI.meta
new file mode 100644
index 00000000..f4f1bcc0
--- /dev/null
+++ b/Assets/Scripts/Minigames/FortFight/UI.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: d97440ab83b1f824e81ff627610e13d0
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Minigames/FortFight/UI/FortHealthUI.cs b/Assets/Scripts/Minigames/FortFight/UI/FortHealthUI.cs
new file mode 100644
index 00000000..13435b81
--- /dev/null
+++ b/Assets/Scripts/Minigames/FortFight/UI/FortHealthUI.cs
@@ -0,0 +1,198 @@
+using Core;
+using Core.Lifecycle;
+using UnityEngine;
+using UnityEngine.UI;
+using TMPro;
+using Minigames.FortFight.Fort;
+
+namespace Minigames.FortFight.UI
+{
+ ///
+ /// Displays HP bar and percentage for a fort
+ ///
+ public class FortHealthUI : ManagedBehaviour
+ {
+ #region Inspector Properties
+
+ [Header("UI References")]
+ [SerializeField] private Slider hpSlider;
+ [SerializeField] private TextMeshProUGUI hpPercentageText;
+ [SerializeField] private TextMeshProUGUI fortNameText;
+
+ [Header("Visual Feedback")]
+ [SerializeField] private Image fillImage;
+ [SerializeField] private Color healthyColor = Color.green;
+ [SerializeField] private Color damagedColor = Color.yellow;
+ [SerializeField] private Color criticalColor = Color.red;
+
+ [Header("Auto-Binding (for Dynamic Spawning)")]
+ [SerializeField] private bool autoBindToFort = true;
+ [SerializeField] private bool isPlayerFort = true;
+ [Tooltip("Leave empty to auto-find")]
+ [SerializeField] private Core.FortManager fortManager;
+
+ #endregion
+
+ #region Private State
+
+ private FortController trackedFort;
+
+ #endregion
+
+ #region Lifecycle
+
+ internal override void OnManagedStart()
+ {
+ base.OnManagedStart();
+
+ // Auto-bind to dynamically spawned forts
+ if (autoBindToFort)
+ {
+ SetupAutoBinding();
+ }
+ }
+
+ internal override void OnManagedDestroy()
+ {
+ base.OnManagedDestroy();
+
+ // Unsubscribe from fort events
+ if (trackedFort != null)
+ {
+ trackedFort.OnFortDamaged -= OnFortDamaged;
+ }
+
+ // Unsubscribe from fort manager
+ if (fortManager != null)
+ {
+ fortManager.OnPlayerFortSpawned -= OnFortSpawned;
+ fortManager.OnEnemyFortSpawned -= OnFortSpawned;
+ }
+ }
+
+ #endregion
+
+ #region Auto-Binding
+
+ private void SetupAutoBinding()
+ {
+ // Find FortManager if not assigned
+ if (fortManager == null)
+ {
+ fortManager = FindFirstObjectByType();
+ }
+
+ if (fortManager == null)
+ {
+ Logging.Warning($"[FortHealthUI] Cannot auto-bind: FortManager not found. HP UI will not update.");
+ return;
+ }
+
+ // Subscribe to appropriate spawn event
+ if (isPlayerFort)
+ {
+ fortManager.OnPlayerFortSpawned += OnFortSpawned;
+ Logging.Debug($"[FortHealthUI] Subscribed to PLAYER fort spawn");
+ }
+ else
+ {
+ fortManager.OnEnemyFortSpawned += OnFortSpawned;
+ Logging.Debug($"[FortHealthUI] Subscribed to ENEMY fort spawn");
+ }
+ }
+
+ private void OnFortSpawned(FortController fort)
+ {
+ BindToFort(fort);
+ }
+
+ #endregion
+
+ #region Setup
+
+ ///
+ /// Bind this UI to a specific fort
+ ///
+ public void BindToFort(FortController fort)
+ {
+ if (fort == null)
+ {
+ Logging.Warning("[FortHealthUI] Cannot bind to null fort!");
+ return;
+ }
+
+ // Unsubscribe from previous fort
+ if (trackedFort != null)
+ {
+ trackedFort.OnFortDamaged -= OnFortDamaged;
+ }
+
+ trackedFort = fort;
+
+ // Subscribe to fort events
+ trackedFort.OnFortDamaged += OnFortDamaged;
+
+ // Initialize UI
+ if (fortNameText != null)
+ {
+ fortNameText.text = fort.FortName;
+ }
+
+ UpdateDisplay();
+
+ Logging.Debug($"[FortHealthUI] Bound to fort: {fort.FortName}");
+ }
+
+ #endregion
+
+ #region Event Handlers
+
+ private void OnFortDamaged(float damage, float hpPercentage)
+ {
+ UpdateDisplay();
+ }
+
+ #endregion
+
+ #region Display Update
+
+ private void UpdateDisplay()
+ {
+ if (trackedFort == null) return;
+
+ float hpPercent = trackedFort.HpPercentage;
+
+ // Update slider
+ if (hpSlider != null)
+ {
+ hpSlider.value = hpPercent / 100f;
+ }
+
+ // Update text
+ if (hpPercentageText != null)
+ {
+ hpPercentageText.text = $"{hpPercent:F0}%";
+ }
+
+ // Update color based on HP
+ if (fillImage != null)
+ {
+ if (hpPercent > 60f)
+ {
+ fillImage.color = healthyColor;
+ }
+ else if (hpPercent > 30f)
+ {
+ fillImage.color = damagedColor;
+ }
+ else
+ {
+ fillImage.color = criticalColor;
+ }
+ }
+ }
+
+ #endregion
+ }
+}
+
diff --git a/Assets/Scripts/Minigames/FortFight/UI/FortHealthUI.cs.meta b/Assets/Scripts/Minigames/FortFight/UI/FortHealthUI.cs.meta
new file mode 100644
index 00000000..93521634
--- /dev/null
+++ b/Assets/Scripts/Minigames/FortFight/UI/FortHealthUI.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: ed9e5253aa2a40c9a9028767466456b1
+timeCreated: 1764592117
\ No newline at end of file
diff --git a/Assets/Scripts/Minigames/FortFight/UI/GameplayPage.cs b/Assets/Scripts/Minigames/FortFight/UI/GameplayPage.cs
new file mode 100644
index 00000000..23c7a7d5
--- /dev/null
+++ b/Assets/Scripts/Minigames/FortFight/UI/GameplayPage.cs
@@ -0,0 +1,266 @@
+using Core;
+using UnityEngine;
+using UnityEngine.UI;
+using TMPro;
+using UI.Core;
+using Minigames.FortFight.Core;
+using Minigames.FortFight.Data;
+using Pixelplacement;
+
+namespace Minigames.FortFight.UI
+{
+ ///
+ /// Main gameplay UI page for Fort Fight minigame.
+ /// Displays turn info and allows player to take actions (stubbed for Phase 1).
+ ///
+ public class GameplayPage : UIPage
+ {
+ [Header("UI Elements")]
+ [SerializeField] private TextMeshProUGUI turnIndicatorText;
+ [SerializeField] private TextMeshProUGUI currentPlayerText;
+ [SerializeField] private Button takeActionButton;
+ [SerializeField] private TextMeshProUGUI actionButtonText;
+
+ [Header("Optional Visual Elements")]
+ [SerializeField] private CanvasGroup canvasGroup;
+ [SerializeField] private GameObject playerActionPanel;
+ [SerializeField] private GameObject aiTurnPanel;
+
+ private TurnManager turnManager;
+
+ #region Initialization
+
+ internal override void OnManagedAwake()
+ {
+ base.OnManagedAwake();
+
+ // Validate references
+ ValidateReferences();
+
+ // Set up button
+ if (takeActionButton != null)
+ {
+ takeActionButton.onClick.AddListener(OnTakeActionClicked);
+ }
+
+ // Set up canvas group
+ if (canvasGroup == null)
+ {
+ canvasGroup = GetComponent();
+ }
+ }
+
+ internal override void OnManagedStart()
+ {
+ base.OnManagedStart();
+
+ // Get turn manager reference
+ turnManager = FindObjectOfType();
+
+ if (turnManager != null)
+ {
+ turnManager.OnTurnStarted += OnTurnStarted;
+ turnManager.OnTurnEnded += OnTurnEnded;
+ }
+ else
+ {
+ Logging.Error("[GameplayPage] TurnManager not found!");
+ }
+ }
+
+ private void ValidateReferences()
+ {
+ if (turnIndicatorText == null)
+ {
+ Logging.Warning("[GameplayPage] Turn indicator text not assigned!");
+ }
+
+ if (currentPlayerText == null)
+ {
+ Logging.Warning("[GameplayPage] Current player text not assigned!");
+ }
+
+ if (takeActionButton == null)
+ {
+ Logging.Error("[GameplayPage] Take action button not assigned!");
+ }
+
+ if (actionButtonText == null)
+ {
+ Logging.Warning("[GameplayPage] Action button text not assigned!");
+ }
+ }
+
+ #endregion
+
+ #region Turn Events
+
+ ///
+ /// Called when a new turn starts
+ ///
+ private void OnTurnStarted(PlayerData currentPlayer, TurnState turnState)
+ {
+ Logging.Debug($"[GameplayPage] Turn started - Player: {currentPlayer.PlayerName}, State: {turnState}");
+
+ UpdateTurnUI(currentPlayer, turnState);
+ }
+
+ ///
+ /// Called when the current turn ends
+ ///
+ private void OnTurnEnded(PlayerData player)
+ {
+ Logging.Debug($"[GameplayPage] Turn ended for {player.PlayerName}");
+ }
+
+ #endregion
+
+ #region UI Updates
+
+ ///
+ /// Update the UI to reflect current turn state
+ ///
+ private void UpdateTurnUI(PlayerData currentPlayer, TurnState turnState)
+ {
+ // Update turn counter
+ if (turnIndicatorText != null && turnManager != null)
+ {
+ turnIndicatorText.text = $"Turn {turnManager.TurnCount + 1}";
+ }
+
+ // Update current player display
+ if (currentPlayerText != null)
+ {
+ currentPlayerText.text = $"{currentPlayer.PlayerName}'s Turn";
+ }
+
+ // Show/hide appropriate panels based on turn state
+ if (turnState == TurnState.AITurn)
+ {
+ // AI turn - hide player controls
+ if (playerActionPanel != null)
+ {
+ playerActionPanel.SetActive(false);
+ }
+
+ if (aiTurnPanel != null)
+ {
+ aiTurnPanel.SetActive(true);
+ }
+
+ if (takeActionButton != null)
+ {
+ takeActionButton.gameObject.SetActive(false);
+ }
+ }
+ else if (turnState == TurnState.PlayerOneTurn || turnState == TurnState.PlayerTwoTurn)
+ {
+ // Player turn - show controls
+ if (playerActionPanel != null)
+ {
+ playerActionPanel.SetActive(true);
+ }
+
+ if (aiTurnPanel != null)
+ {
+ aiTurnPanel.SetActive(false);
+ }
+
+ if (takeActionButton != null)
+ {
+ takeActionButton.gameObject.SetActive(true);
+ }
+
+ if (actionButtonText != null)
+ {
+ actionButtonText.text = "Take Action (Stubbed)";
+ }
+ }
+ }
+
+ #endregion
+
+ #region Button Callbacks
+
+ ///
+ /// Called when player clicks the "Take Action" button
+ /// STUBBED for Phase 1 - just logs and ends turn
+ ///
+ private void OnTakeActionClicked()
+ {
+ if (turnManager == null)
+ {
+ Logging.Error("[GameplayPage] Cannot take action - TurnManager not found!");
+ return;
+ }
+
+ PlayerData currentPlayer = turnManager.CurrentPlayer;
+
+ // STUBBED: Log the action
+ Logging.Debug($"[GameplayPage] {currentPlayer.PlayerName} takes action! (STUBBED - no actual combat yet)");
+
+ // TODO Phase 3: Replace with actual slingshot/shooting interface
+
+ // End the turn
+ turnManager.EndTurn();
+ }
+
+ #endregion
+
+ #region Transitions
+
+ protected override void DoTransitionIn(System.Action onComplete)
+ {
+ // Simple fade in if canvas group is available
+ if (canvasGroup != null)
+ {
+ canvasGroup.alpha = 0f;
+ Tween.CanvasGroupAlpha(canvasGroup, 1f, transitionDuration, 0f, Tween.EaseOut,
+ completeCallback: () => onComplete?.Invoke());
+ }
+ else
+ {
+ onComplete?.Invoke();
+ }
+ }
+
+ protected override void DoTransitionOut(System.Action onComplete)
+ {
+ // Simple fade out if canvas group is available
+ if (canvasGroup != null)
+ {
+ Tween.CanvasGroupAlpha(canvasGroup, 0f, transitionDuration, 0f, Tween.EaseIn,
+ completeCallback: () => onComplete?.Invoke());
+ }
+ else
+ {
+ onComplete?.Invoke();
+ }
+ }
+
+ #endregion
+
+ #region Cleanup
+
+ internal override void OnManagedDestroy()
+ {
+ base.OnManagedDestroy();
+
+ // Unsubscribe from turn manager events
+ if (turnManager != null)
+ {
+ turnManager.OnTurnStarted -= OnTurnStarted;
+ turnManager.OnTurnEnded -= OnTurnEnded;
+ }
+
+ // Unsubscribe from button
+ if (takeActionButton != null)
+ {
+ takeActionButton.onClick.RemoveListener(OnTakeActionClicked);
+ }
+ }
+
+ #endregion
+ }
+}
+
diff --git a/Assets/Scripts/Minigames/FortFight/UI/GameplayPage.cs.meta b/Assets/Scripts/Minigames/FortFight/UI/GameplayPage.cs.meta
new file mode 100644
index 00000000..77e13ede
--- /dev/null
+++ b/Assets/Scripts/Minigames/FortFight/UI/GameplayPage.cs.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: e22e2729514a5ee40bb2d4c23fbeb75f
\ No newline at end of file
diff --git a/Assets/Scripts/Minigames/FortFight/UI/ModeSelectionPage.cs b/Assets/Scripts/Minigames/FortFight/UI/ModeSelectionPage.cs
new file mode 100644
index 00000000..981c80ab
--- /dev/null
+++ b/Assets/Scripts/Minigames/FortFight/UI/ModeSelectionPage.cs
@@ -0,0 +1,150 @@
+using Core;
+using UnityEngine;
+using UnityEngine.UI;
+using UI.Core;
+using Minigames.FortFight.Core;
+using Minigames.FortFight.Data;
+using Pixelplacement;
+
+namespace Minigames.FortFight.UI
+{
+ ///
+ /// UI page for selecting single-player or two-player mode
+ ///
+ public class ModeSelectionPage : UIPage
+ {
+ [Header("Mode Selection Buttons")]
+ [SerializeField] private Button singlePlayerButton;
+ [SerializeField] private Button twoPlayerButton;
+
+ [Header("Optional Visual Elements")]
+ [SerializeField] private GameObject titleText;
+ [SerializeField] private CanvasGroup canvasGroup;
+
+ #region Initialization
+
+ internal override void OnManagedAwake()
+ {
+ base.OnManagedAwake();
+
+ // Validate button references
+ if (singlePlayerButton == null)
+ {
+ Logging.Error("[ModeSelectionPage] Single player button not assigned!");
+ }
+ else
+ {
+ singlePlayerButton.onClick.AddListener(OnSinglePlayerSelected);
+ }
+
+ if (twoPlayerButton == null)
+ {
+ Logging.Error("[ModeSelectionPage] Two player button not assigned!");
+ }
+ else
+ {
+ twoPlayerButton.onClick.AddListener(OnTwoPlayerSelected);
+ }
+
+ // Set up canvas group if available
+ if (canvasGroup == null)
+ {
+ canvasGroup = GetComponent();
+ }
+ }
+
+ #endregion
+
+ #region Button Callbacks
+
+ ///
+ /// Called when single player button is clicked
+ ///
+ private void OnSinglePlayerSelected()
+ {
+ Logging.Debug("[ModeSelectionPage] Single player mode selected");
+
+ if (FortFightGameManager.Instance != null)
+ {
+ FortFightGameManager.Instance.SelectGameMode(FortFightGameMode.SinglePlayer);
+ }
+ else
+ {
+ Logging.Error("[ModeSelectionPage] FortFightGameManager instance not found!");
+ }
+ }
+
+ ///
+ /// Called when two player button is clicked
+ ///
+ private void OnTwoPlayerSelected()
+ {
+ Logging.Debug("[ModeSelectionPage] Two player mode selected");
+
+ if (FortFightGameManager.Instance != null)
+ {
+ FortFightGameManager.Instance.SelectGameMode(FortFightGameMode.TwoPlayer);
+ }
+ else
+ {
+ Logging.Error("[ModeSelectionPage] FortFightGameManager instance not found!");
+ }
+ }
+
+ #endregion
+
+ #region Transitions
+
+ protected override void DoTransitionIn(System.Action onComplete)
+ {
+ // Simple fade in if canvas group is available
+ if (canvasGroup != null)
+ {
+ canvasGroup.alpha = 0f;
+ Tween.CanvasGroupAlpha(canvasGroup, 1f, transitionDuration, 0f, Tween.EaseOut,
+ completeCallback: () => onComplete?.Invoke());
+ }
+ else
+ {
+ onComplete?.Invoke();
+ }
+ }
+
+ protected override void DoTransitionOut(System.Action onComplete)
+ {
+ // Simple fade out if canvas group is available
+ if (canvasGroup != null)
+ {
+ Tween.CanvasGroupAlpha(canvasGroup, 0f, transitionDuration, 0f, Tween.EaseIn,
+ completeCallback: () => onComplete?.Invoke());
+ }
+ else
+ {
+ onComplete?.Invoke();
+ }
+ }
+
+ #endregion
+
+ #region Cleanup
+
+ internal override void OnManagedDestroy()
+ {
+ base.OnManagedDestroy();
+
+ // Unsubscribe from button events
+ if (singlePlayerButton != null)
+ {
+ singlePlayerButton.onClick.RemoveListener(OnSinglePlayerSelected);
+ }
+
+ if (twoPlayerButton != null)
+ {
+ twoPlayerButton.onClick.RemoveListener(OnTwoPlayerSelected);
+ }
+ }
+
+ #endregion
+ }
+}
+
diff --git a/Assets/Scripts/Minigames/FortFight/UI/ModeSelectionPage.cs.meta b/Assets/Scripts/Minigames/FortFight/UI/ModeSelectionPage.cs.meta
new file mode 100644
index 00000000..59b9638e
--- /dev/null
+++ b/Assets/Scripts/Minigames/FortFight/UI/ModeSelectionPage.cs.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: 3c1ab5687204db54eaa4ea7f812b3c06
\ No newline at end of file
diff --git a/Assets/Scripts/UI/PlayerHudManager.cs b/Assets/Scripts/UI/PlayerHudManager.cs
index 1d3edfae..a953cb87 100644
--- a/Assets/Scripts/UI/PlayerHudManager.cs
+++ b/Assets/Scripts/UI/PlayerHudManager.cs
@@ -236,7 +236,7 @@ namespace UI
case "Quarry":
currentUIMode = UIMode.Puzzle;
break;
- case "DivingForPictures" or "CardQualityControl" or "BirdPoop":
+ case "DivingForPictures" or "CardQualityControl" or "BirdPoop" or "FortFight":
currentUIMode = UIMode.Minigame;
break;
case "StatueDecoration":
diff --git a/Assets/Settings/Developer/DebugSettings.asset b/Assets/Settings/Developer/DebugSettings.asset
index 0779a2cf..0fa6f0dd 100644
--- a/Assets/Settings/Developer/DebugSettings.asset
+++ b/Assets/Settings/Developer/DebugSettings.asset
@@ -16,7 +16,7 @@ MonoBehaviour:
pauseTimeOnPauseGame: 0
useSaveLoadSystem: 1
autoClearSaves: 0
- dontSaveOnQuit: 1
+ dontSaveOnQuit: 0
bootstrapLogVerbosity: 0
settingsLogVerbosity: 0
gameManagerLogVerbosity: 0
diff --git a/Assets/Settings/FortFightSettings.asset b/Assets/Settings/FortFightSettings.asset
new file mode 100644
index 00000000..b9024faf
--- /dev/null
+++ b/Assets/Settings/FortFightSettings.asset
@@ -0,0 +1,40 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: eaaa527529c5438f80d27ff95c7c7930, type: 3}
+ m_Name: FortFightSettings
+ m_EditorClassIdentifier: AppleHillsScripts::Minigames.FortFight.Core.FortFightSettings
+ materialConfigs:
+ - material: 0
+ baseHp: 20
+ baseMass: 0.5
+ - material: 1
+ baseHp: 50
+ baseMass: 2
+ - material: 2
+ baseHp: 15
+ baseMass: 0.8
+ sizeConfigs:
+ - size: 0
+ hpMultiplier: 1
+ massMultiplier: 0.5
+ - size: 1
+ hpMultiplier: 1.5
+ massMultiplier: 1
+ - size: 2
+ hpMultiplier: 2
+ massMultiplier: 2
+ weakPointExplosionRadius: 5
+ weakPointExplosionDamage: 50
+ weakPointExplosionForce: 50
+ fortDefeatThreshold: 0.3
+ physicsGravityScale: 1
+ damageColorTint: {r: 1, g: 0, b: 0, a: 1}
diff --git a/Assets/Settings/FortFightSettings.asset.meta b/Assets/Settings/FortFightSettings.asset.meta
new file mode 100644
index 00000000..58094a2f
--- /dev/null
+++ b/Assets/Settings/FortFightSettings.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 60eb7d51afc72e845836d38e77462855
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 11400000
+ userData:
+ assetBundleName:
+ assetBundleVariant: