diff --git a/GPIS/Assets/Art/Spirits/Dungeon AI Background.png b/GPIS/Assets/Art/Spirits/Dungeon AI Background.png
new file mode 100644
index 0000000..d8ce518
Binary files /dev/null and b/GPIS/Assets/Art/Spirits/Dungeon AI Background.png differ
diff --git a/GPIS/Assets/Art/Spirits/Dungeon AI Background.png.meta b/GPIS/Assets/Art/Spirits/Dungeon AI Background.png.meta
new file mode 100644
index 0000000..85d6e90
--- /dev/null
+++ b/GPIS/Assets/Art/Spirits/Dungeon AI Background.png.meta
@@ -0,0 +1,114 @@
+fileFormatVersion: 2
+guid: 29a729f579452e64cae07fcb75674760
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 13
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ flipGreenChannel: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMipmapLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 1
+ aniso: 1
+ mipBias: 0
+ wrapU: 1
+ wrapV: 1
+ wrapW: 1
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 1
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 600
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 8
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ cookieLightType: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 3
+ buildTarget: Standalone
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID: 5e97eb03825dee720800000000000000
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ nameFileIdTable: {}
+ mipmapLimitGroupName:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/GPIS/Assets/Prefabs/Cards/TestEnemy.prefab b/GPIS/Assets/Prefabs/Cards/TestEnemy.prefab
new file mode 100644
index 0000000..2a64918
--- /dev/null
+++ b/GPIS/Assets/Prefabs/Cards/TestEnemy.prefab
@@ -0,0 +1,137 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &768140246156693964
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 6759275103442967911}
+ - component: {fileID: 4207017103617078005}
+ - component: {fileID: 3084895200950069452}
+ - component: {fileID: 1529852536303303054}
+ - component: {fileID: 1280950840100716311}
+ m_Layer: 0
+ m_Name: TestEnemy
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &6759275103442967911
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 768140246156693964}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0, y: 1, z: 0, w: 0}
+ m_LocalPosition: {x: 3.88, y: -1.43, z: -0.014921064}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0}
+--- !u!212 &4207017103617078005
+SpriteRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 768140246156693964}
+ 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_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, 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_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+ m_Sprite: {fileID: 21300000, guid: 9324671103bf2814293aeff4fb3d65a5, type: 3}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_FlipX: 0
+ m_FlipY: 0
+ m_DrawMode: 0
+ m_Size: {x: 1, y: 2}
+ m_AdaptiveModeThreshold: 0.5
+ m_SpriteTileMode: 0
+ m_WasSpriteAssigned: 1
+ m_MaskInteraction: 0
+ m_SpriteSortPoint: 0
+--- !u!114 &3084895200950069452
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 768140246156693964}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 80c2ef17a3e84e3428c0480baebe0ddf, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ enemy: {fileID: 11400000, guid: 374b2a7b48e0be841bdbec4cb2b41733, type: 2}
+--- !u!114 &1529852536303303054
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 768140246156693964}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 9adfa200dbd117b41a2b687940884d5e, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ enemyDisplay: {fileID: 3084895200950069452}
+ highlightColor: {r: 1, g: 0, b: 0, a: 1}
+--- !u!65 &1280950840100716311
+BoxCollider:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 768140246156693964}
+ m_Material: {fileID: 0}
+ m_IncludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_ExcludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_LayerOverridePriority: 0
+ m_IsTrigger: 1
+ m_ProvidesContacts: 0
+ m_Enabled: 1
+ serializedVersion: 3
+ m_Size: {x: 1.28, y: 1.28, z: 0.2}
+ m_Center: {x: 0, y: 0, z: 0}
diff --git a/GPIS/Assets/Prefabs/Cards/TestEnemy.prefab.meta b/GPIS/Assets/Prefabs/Cards/TestEnemy.prefab.meta
new file mode 100644
index 0000000..f31a98a
--- /dev/null
+++ b/GPIS/Assets/Prefabs/Cards/TestEnemy.prefab.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 98fdf4d871cf84a4b8ec449f5e018c2c
+PrefabImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/GPIS/Assets/Scenes/battle.unity b/GPIS/Assets/Scenes/battle.unity
index 8c4f0a1..15f8813 100644
--- a/GPIS/Assets/Scenes/battle.unity
+++ b/GPIS/Assets/Scenes/battle.unity
@@ -158,7 +158,7 @@ RectTransform:
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: -280, y: -194}
+ m_AnchoredPosition: {x: -280, y: -305}
m_SizeDelta: {x: 100, y: 40}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &34549751
@@ -255,6 +255,37 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 34549749}
m_CullTransparentMesh: 1
+--- !u!1 &53562457
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 53562458}
+ m_Layer: 0
+ m_Name: EnemySpawnPoint1
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &53562458
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 53562457}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0, y: 1, z: 0, w: 0}
+ m_LocalPosition: {x: -4.33, y: -1.13, z: -0.105745226}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0}
--- !u!1 &109435354
GameObject:
m_ObjectHideFlags: 0
@@ -283,7 +314,7 @@ Transform:
m_GameObject: {fileID: 109435354}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
- m_LocalPosition: {x: -1.79, y: 0.64, z: -0.014921064}
+ m_LocalPosition: {x: -1.79, y: -1.53, z: -0.014921064}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
@@ -559,7 +590,7 @@ SpriteRenderer:
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
- m_Sprite: {fileID: 7482667652216324306, guid: 311925a002f4447b3a28927169b83ea6, type: 3}
+ m_Sprite: {fileID: 21300000, guid: 29a729f579452e64cae07fcb75674760, type: 3}
m_Color: {r: 1, g: 0.57169807, b: 0.7212016, a: 1}
m_FlipX: 0
m_FlipY: 0
@@ -579,8 +610,8 @@ Transform:
m_GameObject: {fileID: 368907960}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
- m_LocalPosition: {x: -6.66, y: -0.03, z: 1}
- m_LocalScale: {x: 17.7888, y: 10.13, z: 0}
+ m_LocalPosition: {x: -6.66, y: 0.01, z: 1}
+ m_LocalScale: {x: 12.580239, y: 14.25291, z: 0}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
@@ -627,7 +658,7 @@ Transform:
m_GameObject: {fileID: 456229066}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
- m_LocalPosition: {x: -11.69, y: 0.16298583, z: -0.021998707}
+ m_LocalPosition: {x: -11.69, y: -2.14, z: -0.021998707}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 1
m_Children: []
@@ -716,8 +747,9 @@ MonoBehaviour:
- {fileID: 11400000, guid: 65de830c44661614ba10a62c01855229, type: 2}
- {fileID: 11400000, guid: 65de830c44661614ba10a62c01855229, type: 2}
- {fileID: 11400000, guid: 65de830c44661614ba10a62c01855229, type: 2}
- - {fileID: 11400000, guid: 65de830c44661614ba10a62c01855229, type: 2}
- - {fileID: 11400000, guid: 65de830c44661614ba10a62c01855229, type: 2}
+ - {fileID: 11400000, guid: dcd48a9e785a3a84db84ed76f83be3c6, type: 2}
+ - {fileID: 11400000, guid: dcd48a9e785a3a84db84ed76f83be3c6, type: 2}
+ - {fileID: 11400000, guid: dcd48a9e785a3a84db84ed76f83be3c6, type: 2}
x: 0
--- !u!1 &519420028
GameObject:
@@ -825,7 +857,7 @@ Camera:
far clip plane: 1000
field of view: 34
orthographic: 1
- orthographic size: 5
+ orthographic size: 7.7316136
m_Depth: -1
m_CullingMask:
serializedVersion: 2
@@ -990,118 +1022,11 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 533417903}
m_CullTransparentMesh: 1
---- !u!1 &611442356
-GameObject:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- serializedVersion: 6
- m_Component:
- - component: {fileID: 611442357}
- - component: {fileID: 611442359}
- - component: {fileID: 611442358}
- - component: {fileID: 611442360}
- m_Layer: 0
- m_Name: TestEnemy
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!4 &611442357
+--- !u!4 &611442357 stripped
Transform:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 611442356}
- serializedVersion: 2
- m_LocalRotation: {x: 0, y: 1, z: 0, w: 0}
- m_LocalPosition: {x: 4.67, y: 0.62, z: -0.014921064}
- m_LocalScale: {x: 1, y: 1, z: 1}
- m_ConstrainProportionsScale: 0
- m_Children: []
- m_Father: {fileID: 1426549337}
- m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0}
---- !u!114 &611442358
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 611442356}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: 80c2ef17a3e84e3428c0480baebe0ddf, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- enemy: {fileID: 11400000, guid: 374b2a7b48e0be841bdbec4cb2b41733, type: 2}
---- !u!212 &611442359
-SpriteRenderer:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 611442356}
- 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_RenderingLayerMask: 1
- m_RendererPriority: 0
- m_Materials:
- - {fileID: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, 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_SortingLayerID: 0
- m_SortingLayer: 0
- m_SortingOrder: 0
- m_Sprite: {fileID: 21300000, guid: 9324671103bf2814293aeff4fb3d65a5, type: 3}
- m_Color: {r: 1, g: 1, b: 1, a: 1}
- m_FlipX: 0
- m_FlipY: 0
- m_DrawMode: 0
- m_Size: {x: 1, y: 2}
- m_AdaptiveModeThreshold: 0.5
- m_SpriteTileMode: 0
- m_WasSpriteAssigned: 1
- m_MaskInteraction: 0
- m_SpriteSortPoint: 0
---- !u!114 &611442360
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
+ m_CorrespondingSourceObject: {fileID: 6759275103442967911, guid: 98fdf4d871cf84a4b8ec449f5e018c2c, type: 3}
+ m_PrefabInstance: {fileID: 1874997450053382483}
m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 611442356}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: 9adfa200dbd117b41a2b687940884d5e, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- enemyDisplay: {fileID: 611442358}
--- !u!1 &619394800
GameObject:
m_ObjectHideFlags: 0
@@ -1220,7 +1145,7 @@ RectTransform:
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: 283, y: -194}
+ m_AnchoredPosition: {x: 283, y: -305}
m_SizeDelta: {x: 100, y: 40}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &941434414
@@ -1569,8 +1494,15 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
handManager: {fileID: 1777082796}
- activeEnemy: {fileID: 611442360}
+ activeEnemies: []
+ selectedEnemy: {fileID: 0}
+ playerCombat: {fileID: 456229069}
playerDeck: {fileID: 456229071}
+ enemySpawnPoints:
+ - {fileID: 53562458}
+ - {fileID: 1720612990}
+ - {fileID: 1694293800}
+ enemyPrefab: {fileID: 768140246156693964, guid: 98fdf4d871cf84a4b8ec449f5e018c2c, type: 3}
--- !u!4 &1618460288
Transform:
m_ObjectHideFlags: 0
@@ -1729,6 +1661,68 @@ Transform:
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1694293799
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1694293800}
+ m_Layer: 0
+ m_Name: EnemySpawnPoint3
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &1694293800
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1694293799}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0, y: 1, z: 0, w: 0}
+ m_LocalPosition: {x: -3.35, y: -2.73, z: -0.105745226}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0}
+--- !u!1 &1720612989
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1720612990}
+ m_Layer: 0
+ m_Name: EnemySpawnPoint2
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &1720612990
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1720612989}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0, y: 1, z: 0, w: 0}
+ m_LocalPosition: {x: -5.05, y: -1.98, z: -0.105745226}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0}
--- !u!1 &1777082795
GameObject:
m_ObjectHideFlags: 0
@@ -1783,7 +1777,7 @@ RectTransform:
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: -201}
+ m_AnchoredPosition: {x: 0, y: -373}
m_SizeDelta: {x: 400, y: 100}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!1 &1830551214
@@ -1830,6 +1824,67 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1830551214}
m_CullTransparentMesh: 1
+--- !u!1001 &1874997450053382483
+PrefabInstance:
+ m_ObjectHideFlags: 0
+ serializedVersion: 2
+ m_Modification:
+ serializedVersion: 3
+ m_TransformParent: {fileID: 1426549337}
+ m_Modifications:
+ - target: {fileID: 768140246156693964, guid: 98fdf4d871cf84a4b8ec449f5e018c2c, type: 3}
+ propertyPath: m_Name
+ value: TestEnemy
+ objectReference: {fileID: 0}
+ - target: {fileID: 768140246156693964, guid: 98fdf4d871cf84a4b8ec449f5e018c2c, type: 3}
+ propertyPath: m_IsActive
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 6759275103442967911, guid: 98fdf4d871cf84a4b8ec449f5e018c2c, type: 3}
+ propertyPath: m_LocalPosition.x
+ value: 3.88
+ objectReference: {fileID: 0}
+ - target: {fileID: 6759275103442967911, guid: 98fdf4d871cf84a4b8ec449f5e018c2c, type: 3}
+ propertyPath: m_LocalPosition.y
+ value: -1.43
+ objectReference: {fileID: 0}
+ - target: {fileID: 6759275103442967911, guid: 98fdf4d871cf84a4b8ec449f5e018c2c, type: 3}
+ propertyPath: m_LocalPosition.z
+ value: -0.014921064
+ objectReference: {fileID: 0}
+ - target: {fileID: 6759275103442967911, guid: 98fdf4d871cf84a4b8ec449f5e018c2c, type: 3}
+ propertyPath: m_LocalRotation.w
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 6759275103442967911, guid: 98fdf4d871cf84a4b8ec449f5e018c2c, type: 3}
+ propertyPath: m_LocalRotation.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 6759275103442967911, guid: 98fdf4d871cf84a4b8ec449f5e018c2c, type: 3}
+ propertyPath: m_LocalRotation.y
+ value: 1
+ objectReference: {fileID: 0}
+ - target: {fileID: 6759275103442967911, guid: 98fdf4d871cf84a4b8ec449f5e018c2c, type: 3}
+ propertyPath: m_LocalRotation.z
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 6759275103442967911, guid: 98fdf4d871cf84a4b8ec449f5e018c2c, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 6759275103442967911, guid: 98fdf4d871cf84a4b8ec449f5e018c2c, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.y
+ value: 180
+ objectReference: {fileID: 0}
+ - target: {fileID: 6759275103442967911, guid: 98fdf4d871cf84a4b8ec449f5e018c2c, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.z
+ value: 0
+ objectReference: {fileID: 0}
+ m_RemovedComponents: []
+ m_RemovedGameObjects: []
+ m_AddedGameObjects: []
+ m_AddedComponents: []
+ m_SourcePrefab: {fileID: 100100000, guid: 98fdf4d871cf84a4b8ec449f5e018c2c, type: 3}
--- !u!1660057539 &9223372036854775807
SceneRoots:
m_ObjectHideFlags: 0
@@ -1841,3 +1896,6 @@ SceneRoots:
- {fileID: 456229068}
- {fileID: 1426549337}
- {fileID: 1652560724}
+ - {fileID: 53562458}
+ - {fileID: 1720612990}
+ - {fileID: 1694293800}
diff --git a/GPIS/Assets/Scenes/dungeonLoop.unity b/GPIS/Assets/Scenes/dungeonLoop.unity
index efbd538..0cc52f9 100644
--- a/GPIS/Assets/Scenes/dungeonLoop.unity
+++ b/GPIS/Assets/Scenes/dungeonLoop.unity
@@ -122,6 +122,51 @@ NavMeshSettings:
debug:
m_Flags: 0
m_NavMeshData: {fileID: 0}
+--- !u!1 &9378605
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 9378607}
+ - component: {fileID: 9378606}
+ m_Layer: 0
+ m_Name: GameManager
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!114 &9378606
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 9378605}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 2a35b8649a387a04eaa2c0195651961e, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ dungeonRoot: {fileID: 1121947641}
+--- !u!4 &9378607
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 9378605}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: -7.3976054, y: -0.3796487, z: -0.0971602}
+ 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!4 &10623282 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 2927116884387759558, guid: a61ad24127787be4abc298d344f1595b, type: 3}
@@ -218,16 +263,16 @@ RectTransform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 155825595}
- m_LocalRotation: {x: 0.27563733, y: 0, z: 0, w: 0.96126175}
- m_LocalPosition: {x: 0, y: 0, z: 15}
+ m_LocalRotation: {x: 0.27563733, y: -0, z: -0, w: 0.96126175}
+ m_LocalPosition: {x: 0, y: 0, z: 15.09716}
m_LocalScale: {x: 20, y: 0, z: 32.5}
m_ConstrainProportionsScale: 0
m_Children: []
- m_Father: {fileID: 0}
+ m_Father: {fileID: 1121947642}
m_LocalEulerAnglesHint: {x: 32, 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_AnchoredPosition: {x: 13.307535, y: 0.34482598}
m_SizeDelta: {x: 100, y: 100}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &155825600
@@ -744,13 +789,13 @@ Transform:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 528574102}
serializedVersion: 2
- m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
- m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 7.3976054, y: 0.3796487, z: 0.0971602}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 684126150}
- m_Father: {fileID: 0}
+ m_Father: {fileID: 1121947642}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &528574104
MonoBehaviour:
@@ -920,12 +965,12 @@ Transform:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 619394800}
serializedVersion: 2
- m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
- m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 7.3976054, y: 0.3796487, z: 0.0971602}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
- m_Father: {fileID: 0}
+ m_Father: {fileID: 1121947642}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &668817618
GameObject:
@@ -952,12 +997,12 @@ Transform:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 668817618}
serializedVersion: 2
- m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
- m_LocalPosition: {x: -28, y: 0, z: 2}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: -20.602394, y: 0.3796487, z: 2.09716}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
- m_Father: {fileID: 0}
+ m_Father: {fileID: 1121947642}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &668817621
MonoBehaviour:
@@ -1309,12 +1354,12 @@ Transform:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1046045718}
serializedVersion: 2
- m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
- m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 7.3976054, y: 0.3796487, z: 0.0971602}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
- m_Father: {fileID: 0}
+ m_Father: {fileID: 1121947642}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!224 &1068772687 stripped
RectTransform:
@@ -1332,6 +1377,47 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: ccb0dbd83c24d6f4686fa10cdf7de859, type: 3}
m_Name:
m_EditorClassIdentifier:
+--- !u!1 &1121947641
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1121947642}
+ m_Layer: 0
+ m_Name: Dungeon
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &1121947642
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1121947641}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: -7.3976054, y: -0.3796487, z: -0.0971602}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 528574103}
+ - {fileID: 1346433704}
+ - {fileID: 707614613}
+ - {fileID: 1418963620}
+ - {fileID: 619394802}
+ - {fileID: 155825599}
+ - {fileID: 668817620}
+ - {fileID: 1947525223}
+ - {fileID: 1046045721}
+ - {fileID: 2119863156}
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1001 &1236234656
PrefabInstance:
m_ObjectHideFlags: 0
@@ -1597,11 +1683,11 @@ Transform:
m_GameObject: {fileID: 1346433699}
serializedVersion: 2
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
- m_LocalPosition: {x: 0, y: -2, z: -26}
+ m_LocalPosition: {x: 7.3976054, y: -1.6203513, z: -25.90284}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
- m_Father: {fileID: 0}
+ m_Father: {fileID: 1121947642}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1418963619
GameObject:
@@ -1627,8 +1713,8 @@ Transform:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1418963619}
serializedVersion: 2
- m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
- m_LocalPosition: {x: 0, y: 1, z: 0}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 7.3976054, y: 1.3796487, z: 0.0971602}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
@@ -1638,7 +1724,7 @@ Transform:
- {fileID: 8021054552880621645}
- {fileID: 3942573087693516172}
- {fileID: 9017830391643844341}
- m_Father: {fileID: 0}
+ m_Father: {fileID: 1121947642}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1001 &1439889515
PrefabInstance:
@@ -1646,7 +1732,7 @@ PrefabInstance:
serializedVersion: 2
m_Modification:
serializedVersion: 3
- m_TransformParent: {fileID: 0}
+ m_TransformParent: {fileID: 1121947642}
m_Modifications:
- target: {fileID: 3171452937993347930, guid: a61ad24127787be4abc298d344f1595b, type: 3}
propertyPath: m_Name
@@ -1658,15 +1744,15 @@ PrefabInstance:
objectReference: {fileID: 684126151}
- target: {fileID: 6099033089838067477, guid: a61ad24127787be4abc298d344f1595b, type: 3}
propertyPath: m_LocalPosition.x
- value: 0
+ value: 7.3976054
objectReference: {fileID: 0}
- target: {fileID: 6099033089838067477, guid: a61ad24127787be4abc298d344f1595b, type: 3}
propertyPath: m_LocalPosition.y
- value: -2
+ value: -1.6203513
objectReference: {fileID: 0}
- target: {fileID: 6099033089838067477, guid: a61ad24127787be4abc298d344f1595b, type: 3}
propertyPath: m_LocalPosition.z
- value: -5
+ value: -4.9028397
objectReference: {fileID: 0}
- target: {fileID: 6099033089838067477, guid: a61ad24127787be4abc298d344f1595b, type: 3}
propertyPath: m_LocalRotation.w
@@ -1674,15 +1760,15 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 6099033089838067477, guid: a61ad24127787be4abc298d344f1595b, type: 3}
propertyPath: m_LocalRotation.x
- value: 0
+ value: -0
objectReference: {fileID: 0}
- target: {fileID: 6099033089838067477, guid: a61ad24127787be4abc298d344f1595b, type: 3}
propertyPath: m_LocalRotation.y
- value: 0
+ value: -0
objectReference: {fileID: 0}
- target: {fileID: 6099033089838067477, guid: a61ad24127787be4abc298d344f1595b, type: 3}
propertyPath: m_LocalRotation.z
- value: 0
+ value: -0
objectReference: {fileID: 0}
- target: {fileID: 6099033089838067477, guid: a61ad24127787be4abc298d344f1595b, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
@@ -2354,11 +2440,11 @@ Transform:
m_GameObject: {fileID: 1947525219}
serializedVersion: 2
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
- m_LocalPosition: {x: 0, y: -2, z: -26}
+ m_LocalPosition: {x: 7.3976054, y: -1.6203513, z: -25.90284}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
- m_Father: {fileID: 0}
+ m_Father: {fileID: 1121947642}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &2092023845
GameObject:
@@ -2608,7 +2694,7 @@ RectTransform:
m_Children:
- {fileID: 1641592019}
- {fileID: 2092023846}
- m_Father: {fileID: 0}
+ m_Father: {fileID: 1121947642}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 0}
@@ -3016,13 +3102,5 @@ Transform:
SceneRoots:
m_ObjectHideFlags: 0
m_Roots:
- - {fileID: 528574103}
- - {fileID: 1346433704}
- - {fileID: 1439889515}
- - {fileID: 1418963620}
- - {fileID: 619394802}
- - {fileID: 155825599}
- - {fileID: 668817620}
- - {fileID: 1947525223}
- - {fileID: 1046045721}
- - {fileID: 2119863156}
+ - {fileID: 9378607}
+ - {fileID: 1121947642}
diff --git a/GPIS/Assets/ScriptableObjects/World/BattleTileDef.cs b/GPIS/Assets/ScriptableObjects/World/BattleTileDef.cs
index c3db7b0..5576f46 100644
--- a/GPIS/Assets/ScriptableObjects/World/BattleTileDef.cs
+++ b/GPIS/Assets/ScriptableObjects/World/BattleTileDef.cs
@@ -1,6 +1,8 @@
using System.Collections.Generic;
using UnityEngine;
+using UnityEngine.SceneManagement; // Used to call 'loadScene()' for entering the 'battle' scene.
+
///
/// Tile for Dungeon Battles
///
@@ -16,5 +18,7 @@ public class BattleTileDef : BaseTileDef, IDungeonTileOnLand
public void OnLand(DungeonHandler dungeon, int tileIndex)
{
Debug.Log("Landed on Battle tile!");
+
+ GameManager.Instance.EnterBattle(); // Equivalent to "SceneManager.LoadScene("battle", LoadSceneMode.Additive);" using the GameManager:
}
}
diff --git a/GPIS/Assets/Scripts/Cards/CardInteraction.cs b/GPIS/Assets/Scripts/Cards/CardInteraction.cs
index 3e05848..f330ab2 100644
--- a/GPIS/Assets/Scripts/Cards/CardInteraction.cs
+++ b/GPIS/Assets/Scripts/Cards/CardInteraction.cs
@@ -53,6 +53,27 @@ public void OnCardClicked()
public void SetSelected(bool selected)
{
+ // Allows only 2 cards to be selected at a time before pressing "Play Cards":
+ if (selected && !IsSelected)
+ {
+ var handManager = GetComponentInParent();
+ if (handManager != null)
+ {
+ int selectedCount = 0;
+ foreach (var c in handManager.GetSelectedCards())
+ {
+ selectedCount++;
+ if (selectedCount >= 2) break;
+ }
+
+ if (selectedCount >= 2)
+ {
+ Debug.Log("Maximum of 2 cards may be selected at once.");
+ return;
+ }
+ }
+ }
+
IsSelected = selected;
if (selectionHighlight) selectionHighlight.enabled = selected;
}
diff --git a/GPIS/Assets/Scripts/Cards/EnemyCombat.cs b/GPIS/Assets/Scripts/Cards/EnemyCombat.cs
index 6fe8a17..bbf06cc 100644
--- a/GPIS/Assets/Scripts/Cards/EnemyCombat.cs
+++ b/GPIS/Assets/Scripts/Cards/EnemyCombat.cs
@@ -12,10 +12,44 @@ public class EnemyCombat : MonoBehaviour
public int CurrentHP { get; private set; } // "Auto-Implemented Get/Set" - C# shortcut that allows "CurrentHP" to be accessed publicly, set privately.
public int MaxHP => enemyDisplay.enemy.maxHealth; // Lambda Operator '=>' - Shorthand Getter definition for 'MaxHP'.
+ private bool isHighlighted = false;
+
+ // Renderers for Spirit Highlights:
+ private SpriteRenderer[] spriteRenderers;
+ private Color[] spriteOriginalColors;
+ private Renderer[] otherRenderers;
+ private Color[] otherOriginalColors;
+
+ [SerializeField] private Color highlightColor = Color.red;
+
void Awake()
{
if (!enemyDisplay) enemyDisplay = GetComponent();
CurrentHP = MaxHP; // Set HP at Awake():
+
+ CombatManager.enemyCount += 1;
+
+ // Cache sprite renderers and their original colors:
+ spriteRenderers = GetComponentsInChildren(true);
+ spriteOriginalColors = new Color[spriteRenderers.Length];
+ for (int i = 0; i < spriteRenderers.Length; i++)
+ spriteOriginalColors[i] = spriteRenderers[i].color;
+
+ // Cache other renderers (exclude sprite renderers):
+ var allRenderers = GetComponentsInChildren(true);
+ var list = new List();
+ foreach (var r in allRenderers)
+ {
+ if (r is SpriteRenderer) continue;
+ list.Add(r);
+ }
+ otherRenderers = list.ToArray();
+ otherOriginalColors = new Color[otherRenderers.Length];
+ for (int i = 0; i < otherRenderers.Length; i++)
+ {
+ // Store material color if available:
+ otherOriginalColors[i] = otherRenderers[i].material.color;
+ }
}
// Takes in final damage number (calculated outside of 'EnemyCombat' Class) to apply to this enemy.
@@ -24,7 +58,41 @@ public void TakeDamage(int amount)
CurrentHP -= amount;
Debug.Log($"Enemy took {amount} damage. HP: {CurrentHP}/{MaxHP}");
- if (CurrentHP <= 0) { Destroy(gameObject); }
+ if (CurrentHP <= 0) {
+ // Notify CombatManager to destroy Enemy:
+ var manager = Object.FindObjectOfType();
+ if (manager != null) manager.OnEnemyDeath(this);
+ else {
+ Destroy(gameObject);
+ CombatManager.enemyCount -= 1;
+ CombatManager.isBattleOver();
+ }
+ }
+ }
+
+ public void SetHighlighted(bool on)
+ {
+ isHighlighted = on;
+
+ // Update sprite renderers:
+ if (spriteRenderers != null)
+ {
+ for (int i = 0; i < spriteRenderers.Length; i++)
+ {
+ if (spriteRenderers[i] == null) continue;
+ spriteRenderers[i].color = on ? highlightColor : spriteOriginalColors[i];
+ }
+ }
+
+ // Update other renderers:
+ if (otherRenderers != null)
+ {
+ for (int i = 0; i < otherRenderers.Length; i++)
+ {
+ if (otherRenderers[i] == null) continue;
+ otherRenderers[i].material.color = on ? highlightColor : otherOriginalColors[i];
+ }
+ }
}
public int GetAttackValue()
@@ -40,4 +108,13 @@ public void PerformAttack(PlayerCombat player)
player.TakeDamage(dmg);
Debug.Log($"Enemy attacked Player for {dmg} damage!");
}
-}
+
+ // Selects enemy when clicked to target for attack cards.
+ void OnMouseDown()
+ {
+ Debug.Log($"EnemyCombat.OnMouseDown on {gameObject.name}");
+
+ var manager = Object.FindObjectOfType();
+ if (manager != null) manager.SelectEnemy(this);
+ }
+}
\ No newline at end of file
diff --git a/GPIS/Assets/Scripts/Managers/CombatManager.cs b/GPIS/Assets/Scripts/Managers/CombatManager.cs
index ac3bbcc..ba7a8e5 100644
--- a/GPIS/Assets/Scripts/Managers/CombatManager.cs
+++ b/GPIS/Assets/Scripts/Managers/CombatManager.cs
@@ -1,52 +1,190 @@
// Manager to resolve combat actions between player & enemy Elementals.
-/*
-Need to Add:
- - Player Game Object (to take damage from Enemies) X
- - Turn Manager X
- - Enemy Turn X
- - Enemy Attacking X
- - Deck System X
- - Draw Step X
-*/
-
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
+using UnityEngine.SceneManagement;
public class CombatManager : MonoBehaviour
{
+ public static CombatManager Instance { get; private set; }
+
[Header("Game Object Wiring")]
public HandManager handManager;
- public EnemyCombat activeEnemy;
+
+ // List of active enemies in the current battle:
+ public List activeEnemies = new();
+ public EnemyCombat selectedEnemy;
+
+ public PlayerCombat playerCombat;
public PlayerDeck playerDeck;
+ [Header("Enemy Spawning")]
+ public Transform[] enemySpawnPoints;
+ public GameObject enemyPrefab;
+
+ public static int enemyCount;
+
+ public void Start()
+ {
+ SpawnEnemies();
+ }
+
+ void Awake()
+ {
+ if (Instance != null && Instance != this) Destroy(this);
+ else Instance = this;
+ }
+
+ void Update()
+ {
+ // Handle mouse clicks for enemy selection:
+ if (Input.GetMouseButtonDown(0))
+ {
+ var cam = Camera.main;
+ if (cam == null) return;
+
+ // Create a 2D Raycast to collide with Enemy:
+ Vector3 worldPoint = cam.ScreenToWorldPoint(Input.mousePosition);
+ Vector2 wp2 = new Vector2(worldPoint.x, worldPoint.y);
+ var hit2D = Physics2D.Raycast(wp2, Vector2.zero);
+ if (hit2D.collider != null)
+ {
+ var enemy = hit2D.collider.GetComponentInParent();
+ if (enemy != null)
+ {
+ Debug.Log($"CombatManager: clicked 2D enemy {enemy.name}");
+ SelectEnemy(enemy);
+ return;
+ }
+ }
+ }
+ }
+
// Calculates damage based on stats of passed 'ElementalCombat.Def'.
private int ComputeAttackDamage(ElementalCombat elemental)
{
float raw = elemental.Def.baseDmg; // Damage = baseDmg
- return Mathf.Max(0, Mathf.RoundToInt(raw)); // 'Mathf.Max()' - Returns higher number of inputs. | 'RoundToInt()' - Rounds non-ints to nearest int.
+ return Mathf.Max(0, Mathf.RoundToInt(raw));
+ }
+
+ // Spawns enemies at fixed spawn points (variable chance to spawn at each spot).
+ public void SpawnEnemies()
+ {
+ activeEnemies.Clear();
+
+ if (enemySpawnPoints == null || enemySpawnPoints.Length == 0 || enemyPrefab == null)
+ return;
+
+ while (activeEnemies.Count <= 0)
+ {
+ foreach (var sp in enemySpawnPoints)
+ {
+ if (sp == null) continue;
+ if (Random.value <= 0.6f)
+ {
+ var go = Instantiate(enemyPrefab, sp.position, sp.rotation);
+ var ec = go.GetComponent();
+ if (ec != null)
+ {
+ activeEnemies.Add(ec);
+ }
+ }
+ }
+ }
+
+ // Update "enemyCount" with List:
+ enemyCount = activeEnemies.Count;
+ }
+
+ // Select or toggle an enemy as the current target.
+ public void SelectEnemy(EnemyCombat enemy)
+ {
+ Debug.Log($"CombatManager.SelectEnemy called for: { (enemy != null ? enemy.name : "null") }");
+
+ if (selectedEnemy == enemy)
+ {
+ if (selectedEnemy != null) selectedEnemy.SetHighlighted(false);
+ selectedEnemy = null;
+ return;
+ }
+
+ if (selectedEnemy != null) selectedEnemy.SetHighlighted(false);
+ selectedEnemy = enemy;
+ if (selectedEnemy != null) selectedEnemy.SetHighlighted(true);
+ }
+
+ // Allows CombatManager to remove dead enemy from lists for clean up.
+ public void OnEnemyDeath(EnemyCombat enemy)
+ {
+ if (enemy == null) return;
+
+ // Remove from active list if present:
+ if (activeEnemies.Contains(enemy)) activeEnemies.Remove(enemy);
+
+ // Update global count and clear selection if necessary:
+ enemyCount = activeEnemies.Count;
+ if (selectedEnemy == enemy) selectedEnemy = null;
+
+ // Destroy enemy GameObject:
+ if (enemy.gameObject != null)
+ Destroy(enemy.gameObject);
+
+ // Check for end of battle:
+ isBattleOver();
}
// Implements the Resolve Step when the "Play Cards" button is pressed.
public void OnPlayCardsPressed()
{
- if (!activeEnemy) return; // There is no enemy to fight:
- var toDiscard = new System.Collections.Generic.List(); // Creates a new Generic 'List' container to hold played cards so they can be discarded.
+ if (enemyCount <= 0) return; // Require at least one enemy alive:
+
+ var toDiscard = new System.Collections.Generic.List();
foreach (var card in handManager.GetSelectedCards())
{
- if (card.ownerElemental == null) continue; // No current Elemental on the field connected to this card:
+ if (card.ownerElemental == null) continue;
+
+ if (card.Display.playableCard.actionType == CardActionType.Attack)
+ {
+ // Choose target (If not enemy selected, then default to first enemy in list):
+ EnemyCombat target = selectedEnemy;
+ if (target == null && activeEnemies.Count > 0) target = activeEnemies[0];
+ if (target == null) continue; // No target available:
- int dmg = ComputeAttackDamage(card.ownerElemental);
- activeEnemy.TakeDamage(dmg);
- toDiscard.Add(card); // Adds played cards to the List 'toDiscard' to "mark" them for removal.
+ int dmg = ComputeAttackDamage(card.ownerElemental);
+ target.TakeDamage(dmg);
+ }
+ else if (card.Display.playableCard.actionType == CardActionType.Defend)
+ {
+ playerCombat.Heal(1);
+ }
+
+ toDiscard.Add(card);
}
- foreach (var c in toDiscard) // For each played card that has been added to 'toDiscard':
+ foreach (var c in toDiscard)
{
handManager.Discard(c, playerDeck);
}
}
+
+ public static void isBattleOver()
+ {
+ // Try using Instance "activeEnemies" count if available:
+ int remaining = (Instance != null) ? Instance.activeEnemies.Count : enemyCount;
+
+ if (remaining <= 0)
+ {
+ Debug.Log("All enemies defeated! Battle Over.");
+
+ // Find the hand manager in scene and clear it:
+ var hm = Object.FindObjectOfType();
+ if (hm != null)
+ hm.ClearHand();
+
+ GameManager.Instance.ExitBattle();
+ }
+ }
}
diff --git a/GPIS/Assets/Scripts/Managers/GameManager.cs b/GPIS/Assets/Scripts/Managers/GameManager.cs
new file mode 100644
index 0000000..3e458e9
--- /dev/null
+++ b/GPIS/Assets/Scripts/Managers/GameManager.cs
@@ -0,0 +1,34 @@
+using UnityEngine;
+using UnityEngine.SceneManagement;
+
+public class GameManager : MonoBehaviour
+{
+ public static GameManager Instance { get; private set; }
+
+ [Header("Scenes")]
+ public GameObject dungeonRoot;
+
+ private void Awake()
+ {
+ if (Instance != this && Instance != null)
+ {
+ Destroy(gameObject);
+ return;
+ }
+
+ Instance = this;
+ DontDestroyOnLoad(gameObject);
+ }
+
+ public void EnterBattle()
+ {
+ if (dungeonRoot) dungeonRoot.SetActive(false);
+ SceneManager.LoadSceneAsync("battle", LoadSceneMode.Additive);
+ }
+
+ public void ExitBattle()
+ {
+ if (dungeonRoot) dungeonRoot.SetActive(true);
+ SceneManager.UnloadSceneAsync("battle");
+ }
+}
\ No newline at end of file
diff --git a/GPIS/Assets/Scripts/Managers/GameManager.cs.meta b/GPIS/Assets/Scripts/Managers/GameManager.cs.meta
new file mode 100644
index 0000000..94a3b61
--- /dev/null
+++ b/GPIS/Assets/Scripts/Managers/GameManager.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 2a35b8649a387a04eaa2c0195651961e
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/GPIS/Assets/Scripts/Managers/HandManager.cs b/GPIS/Assets/Scripts/Managers/HandManager.cs
index 03167de..97276d6 100644
--- a/GPIS/Assets/Scripts/Managers/HandManager.cs
+++ b/GPIS/Assets/Scripts/Managers/HandManager.cs
@@ -1,4 +1,5 @@
using System.Collections.Generic;
+using UnityEditor;
using UnityEngine;
@@ -8,6 +9,10 @@ public class HandManager : MonoBehaviour
[SerializeField] private GameObject cardPrefab; // assign PlayableCard_UI prefab here
[SerializeField] private ElementalCombat defaultOwnerElemental;
+ public const int maxHandsize = 5;
+ //public static int handSize = 0;
+ public int HandSize => Hand.Count;
+
[Header("Curve Settings (parabola)")]
[SerializeField] private RectTransform Vertex;
[Tooltip("Horizontal spacing between card centers")]
@@ -85,6 +90,7 @@ public void AddToHand(CardInteraction card)
if (!Hand.Contains(card))
{
Hand.Add(card);
+ //handSize += 1;
// Ensures correct visual layer ordering (left = bottom, right = top)
card.transform.SetSiblingIndex(Hand.Count - 1);
@@ -117,7 +123,25 @@ public void RemoveFromHand(CardInteraction card)
// Recalculate positions on the curve
UpdateCardTargets();
+
+ //HandManager.handSize -= 1;
+ }
+ }
+
+ // Clears all cards from the hand and destroys their GameObjects.
+ public void ClearHand()
+ {
+ // iterate over a copy to avoid modifying the collection while enumerating
+ foreach (var card in Hand.ToArray())
+ {
+ if (card == null) continue;
+ RemoveFromHand(card);
+ if (card.gameObject != null)
+ Destroy(card.gameObject);
}
+
+ Hand.Clear();
+ UpdateCardTargets();
}
// -------------------
diff --git a/GPIS/Assets/Scripts/Managers/TurnManager.cs b/GPIS/Assets/Scripts/Managers/TurnManager.cs
index e5173d5..d49c344 100644
--- a/GPIS/Assets/Scripts/Managers/TurnManager.cs
+++ b/GPIS/Assets/Scripts/Managers/TurnManager.cs
@@ -1,3 +1,5 @@
+// Manager for Player & Enemy turns during a battle.
+
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
@@ -14,7 +16,7 @@ public enum Phase { Player, Enemy }
public HandManager handManager;
[Header("Turn Settings")]
- public int startingHandSize = 5;
+ public int startingHandSize;
public int drawPerPlayerTurn = 1;
void Start()
@@ -35,9 +37,16 @@ private void StartEnemyTurn()
CurrentPhase = Phase.Enemy;
// --- Enemy AI Decision Tree implementation would go here, but simple attack for now! ---
- if (combatManager && combatManager.activeEnemy)
+ if (combatManager != null && combatManager.activeEnemies != null && combatManager.activeEnemies.Count > 0)
{
- combatManager.activeEnemy.PerformAttack(player);
+ foreach (var enemy in combatManager.activeEnemies)
+ {
+ if (enemy != null)
+ if (Random.value <= 0.30f) // Enemies attack player with 35% chance each turn:
+ enemy.PerformAttack(player);
+ else
+ Debug.Log("Enemy missed!");
+ }
}
StartPlayerTurn(); // Switch the turn back to the Player after enemy attacks:
@@ -52,7 +61,8 @@ private void StartPlayerTurn()
private void DrawStep(int n)
{
- if (!playerDeck || !handManager || n <= 0) return;
+ // Use the HandManager instance's HandSize instead of the old static counter
+ if (!playerDeck || !handManager || n <= 0 || handManager.HandSize >= HandManager.maxHandsize) return;
var buffer = new List();
int drawn = playerDeck.TryDraw(n, buffer);
diff --git a/GPIS/Assets/Scripts/Player/PlayerCombat.cs b/GPIS/Assets/Scripts/Player/PlayerCombat.cs
index 2bee497..4a270b3 100644
--- a/GPIS/Assets/Scripts/Player/PlayerCombat.cs
+++ b/GPIS/Assets/Scripts/Player/PlayerCombat.cs
@@ -33,4 +33,15 @@ public void TakeDamage (int amount)
// --- Add Player Lose logic here! ---
}
}
+
+ public void Heal(int amount)
+ {
+ if (CurrentHP != MaxHP)
+ {
+ amount = Mathf.Max(0, amount);
+ CurrentHP = Mathf.Min(MaxHP, CurrentHP + amount);
+
+ Debug.Log($"Player healed {amount} HP. HP: {CurrentHP}/{MaxHP}");
+ }
+ }
}
diff --git a/GPIS/Assets/_SO/Cards/HealCard.asset b/GPIS/Assets/_SO/Cards/HealCard.asset
new file mode 100644
index 0000000..6c2f30b
--- /dev/null
+++ b/GPIS/Assets/_SO/Cards/HealCard.asset
@@ -0,0 +1,29 @@
+%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: 295301ef53d963243b1a76482c655e03, type: 3}
+ m_Name: HealCard
+ m_EditorClassIdentifier:
+ cardId: 1
+ displayName: Heal Card
+ description: Heals the Player for 1 HP.
+ artwork: {fileID: 0}
+ cardViewPrefab: {fileID: 0}
+ element: 0
+ rarity: 0
+ tags:
+ isUpgradeable: 1
+ maxUpgradeLevel: 2
+ actionType: 1
+ targetingMode: 1
+ requiresTargetSelection: 0
+ effects: []
+ upgradeOverrides: []
diff --git a/GPIS/Assets/_SO/Cards/HealCard.asset.meta b/GPIS/Assets/_SO/Cards/HealCard.asset.meta
new file mode 100644
index 0000000..5b3f2bf
--- /dev/null
+++ b/GPIS/Assets/_SO/Cards/HealCard.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: dcd48a9e785a3a84db84ed76f83be3c6
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 11400000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/GPIS/Assets/_SO/Enemies/_testEnemy.asset b/GPIS/Assets/_SO/Enemies/_testEnemy.asset
index 0b9689c..2f4fb54 100644
--- a/GPIS/Assets/_SO/Enemies/_testEnemy.asset
+++ b/GPIS/Assets/_SO/Enemies/_testEnemy.asset
@@ -16,7 +16,7 @@ MonoBehaviour:
npcName: Test Enemy
portrait: {fileID: 10913, guid: 0000000000000000f000000000000000, type: 0}
description: Test Enemy
- maxHealth: 15
+ maxHealth: 2
attack: 1
defense: 3
maxElementals: 2
diff --git a/GPIS/ProjectSettings/EditorBuildSettings.asset b/GPIS/ProjectSettings/EditorBuildSettings.asset
index d40f2db..9a2ed19 100644
--- a/GPIS/ProjectSettings/EditorBuildSettings.asset
+++ b/GPIS/ProjectSettings/EditorBuildSettings.asset
@@ -14,5 +14,11 @@ EditorBuildSettings:
- enabled: 1
path: Assets/Scenes/Doors/Shop.unity
guid: 9cc3740e1f69e324c9c3b0f7d568b49c
+ - enabled: 1
+ path: Assets/Scenes/dungeonLoop.unity
+ guid: 53b95f5ccc808d5409d0e7a7a07a429c
+ - enabled: 1
+ path: Assets/Scenes/battle.unity
+ guid: 8a5a10fa96309904da052ee7a9162b8a
m_configObjects:
com.unity.addressableassets: {fileID: 11400000, guid: 1c2dd5e21cc86c64cbfedde65941d8d2, type: 2}