diff --git a/.idea/.idea.MAAC3601-TD-Game/.idea/indexLayout.xml b/.idea/.idea.MAAC3601-TD-Game/.idea/indexLayout.xml index 7b08163..f5a863a 100644 --- a/.idea/.idea.MAAC3601-TD-Game/.idea/indexLayout.xml +++ b/.idea/.idea.MAAC3601-TD-Game/.idea/indexLayout.xml @@ -1,8 +1,8 @@ - - - - - - - + + + + + + + \ No newline at end of file diff --git a/Assets/Prefabs/Generation.prefab b/Assets/Prefabs/Generation.prefab index f73dc36..c6e1a3e 100644 --- a/Assets/Prefabs/Generation.prefab +++ b/Assets/Prefabs/Generation.prefab @@ -12,6 +12,7 @@ GameObject: - component: {fileID: 2981135554967256007} - component: {fileID: 1540579659150390887} - component: {fileID: 7146678828090736945} + - component: {fileID: 2294062540900002317} m_Layer: 0 m_Name: Generation m_TagString: Untagged @@ -98,7 +99,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 6d151e6102b72db4590ce83309573f1c, type: 3} m_Name: m_EditorClassIdentifier: - PathGameObject: {fileID: 0} --- !u!50 &7146678828090736945 Rigidbody2D: serializedVersion: 4 @@ -107,7 +107,7 @@ Rigidbody2D: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1458536803320539101} - m_BodyType: 0 + m_BodyType: 1 m_Simulated: 1 m_UseFullKinematicContacts: 0 m_UseAutoMass: 0 @@ -117,6 +117,32 @@ Rigidbody2D: m_GravityScale: 0 m_Material: {fileID: 0} m_Interpolate: 0 - m_SleepingMode: 1 + m_SleepingMode: 0 m_CollisionDetection: 0 m_Constraints: 0 +--- !u!61 &2294062540900002317 +BoxCollider2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1458536803320539101} + m_Enabled: 1 + m_Density: 1 + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_UsedByEffector: 0 + m_UsedByComposite: 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: 1, y: 1} + newSize: {x: 1, y: 1} + adaptiveTilingThreshold: 0.5 + drawMode: 0 + adaptiveTiling: 0 + m_AutoTiling: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1} + m_EdgeRadius: 0 diff --git a/Assets/Prefabs/PathNode.prefab b/Assets/Prefabs/PathNode.prefab index ca17c0b..0fe3bd6 100644 --- a/Assets/Prefabs/PathNode.prefab +++ b/Assets/Prefabs/PathNode.prefab @@ -10,7 +10,9 @@ GameObject: m_Component: - component: {fileID: 328858392699145925} - component: {fileID: 4841795318599809648} - - component: {fileID: 2671460795696364852} + - component: {fileID: 8192986790885562340} + - component: {fileID: -834716027335084487} + - component: {fileID: 8406881250321231346} m_Layer: 0 m_Name: PathNode m_TagString: Untagged @@ -27,7 +29,7 @@ Transform: m_GameObject: {fileID: 2624247600710686983} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: -0.7311517, y: 0.074633844, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalScale: {x: 0.1, y: 0.1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} @@ -75,7 +77,7 @@ SpriteRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_Sprite: {fileID: 7482667652216324306, guid: 311925a002f4447b3a28927169b83ea6, type: 3} - m_Color: {r: 0, g: 0, b: 0, a: 0} + m_Color: {r: 1, g: 0, b: 0, a: 1} m_FlipX: 0 m_FlipY: 0 m_DrawMode: 0 @@ -85,16 +87,62 @@ SpriteRenderer: m_WasSpriteAssigned: 1 m_MaskInteraction: 0 m_SpriteSortPoint: 0 ---- !u!65 &2671460795696364852 -BoxCollider: +--- !u!50 &8192986790885562340 +Rigidbody2D: + serializedVersion: 4 m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2624247600710686983} + m_BodyType: 2 + m_Simulated: 1 + m_UseFullKinematicContacts: 0 + m_UseAutoMass: 0 + m_Mass: 1 + m_LinearDrag: 0 + m_AngularDrag: 0.05 + m_GravityScale: 1 + m_Material: {fileID: 0} + m_Interpolate: 0 + m_SleepingMode: 1 + m_CollisionDetection: 0 + m_Constraints: 0 +--- !u!61 &-834716027335084487 +BoxCollider2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2624247600710686983} + m_Enabled: 1 + m_Density: 1 m_Material: {fileID: 0} m_IsTrigger: 1 - m_Enabled: 1 + m_UsedByEffector: 0 + m_UsedByComposite: 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: 1, y: 1} + newSize: {x: 1, y: 1} + adaptiveTilingThreshold: 0.5 + drawMode: 0 + adaptiveTiling: 0 + m_AutoTiling: 0 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 0.2} - m_Center: {x: 0, y: 0, z: 0} + m_Size: {x: 1, y: 1} + m_EdgeRadius: 0 +--- !u!114 &8406881250321231346 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2624247600710686983} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2346c6ef8f7f55541b5f27987d960a46, type: 3} + m_Name: + m_EditorClassIdentifier: diff --git a/Assets/Scenes/SampleScene.unity b/Assets/Scenes/SampleScene.unity index 8122d53..ab1c83a 100644 --- a/Assets/Scenes/SampleScene.unity +++ b/Assets/Scenes/SampleScene.unity @@ -123,6 +123,130 @@ NavMeshSettings: debug: m_Flags: 0 m_NavMeshData: {fileID: 0} +--- !u!1001 &287684445 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 328858392699145925, guid: fad75b8b6a5d5a6468eef0f0782ea835, type: 3} + propertyPath: m_RootOrder + value: 8 + objectReference: {fileID: 0} + - target: {fileID: 328858392699145925, guid: fad75b8b6a5d5a6468eef0f0782ea835, type: 3} + propertyPath: m_LocalPosition.x + value: 11.76163 + objectReference: {fileID: 0} + - target: {fileID: 328858392699145925, guid: fad75b8b6a5d5a6468eef0f0782ea835, type: 3} + propertyPath: m_LocalPosition.y + value: 2.9282274 + objectReference: {fileID: 0} + - target: {fileID: 328858392699145925, guid: fad75b8b6a5d5a6468eef0f0782ea835, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 328858392699145925, guid: fad75b8b6a5d5a6468eef0f0782ea835, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 328858392699145925, guid: fad75b8b6a5d5a6468eef0f0782ea835, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 328858392699145925, guid: fad75b8b6a5d5a6468eef0f0782ea835, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 328858392699145925, guid: fad75b8b6a5d5a6468eef0f0782ea835, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 328858392699145925, guid: fad75b8b6a5d5a6468eef0f0782ea835, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 328858392699145925, guid: fad75b8b6a5d5a6468eef0f0782ea835, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 328858392699145925, guid: fad75b8b6a5d5a6468eef0f0782ea835, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2624247600710686983, guid: fad75b8b6a5d5a6468eef0f0782ea835, type: 3} + propertyPath: m_Name + value: Waypoint 3 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: fad75b8b6a5d5a6468eef0f0782ea835, type: 3} +--- !u!1 &287684446 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 2624247600710686983, guid: fad75b8b6a5d5a6468eef0f0782ea835, type: 3} + m_PrefabInstance: {fileID: 287684445} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &367263645 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 328858392699145925, guid: fad75b8b6a5d5a6468eef0f0782ea835, type: 3} + propertyPath: m_RootOrder + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 328858392699145925, guid: fad75b8b6a5d5a6468eef0f0782ea835, type: 3} + propertyPath: m_LocalPosition.x + value: -8.71 + objectReference: {fileID: 0} + - target: {fileID: 328858392699145925, guid: fad75b8b6a5d5a6468eef0f0782ea835, type: 3} + propertyPath: m_LocalPosition.y + value: 3.33 + objectReference: {fileID: 0} + - target: {fileID: 328858392699145925, guid: fad75b8b6a5d5a6468eef0f0782ea835, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 328858392699145925, guid: fad75b8b6a5d5a6468eef0f0782ea835, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 328858392699145925, guid: fad75b8b6a5d5a6468eef0f0782ea835, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 328858392699145925, guid: fad75b8b6a5d5a6468eef0f0782ea835, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 328858392699145925, guid: fad75b8b6a5d5a6468eef0f0782ea835, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 328858392699145925, guid: fad75b8b6a5d5a6468eef0f0782ea835, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 328858392699145925, guid: fad75b8b6a5d5a6468eef0f0782ea835, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 328858392699145925, guid: fad75b8b6a5d5a6468eef0f0782ea835, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2624247600710686983, guid: fad75b8b6a5d5a6468eef0f0782ea835, type: 3} + propertyPath: m_Name + value: Waypoint 2 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: fad75b8b6a5d5a6468eef0f0782ea835, type: 3} +--- !u!1 &367263646 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 2624247600710686983, guid: fad75b8b6a5d5a6468eef0f0782ea835, type: 3} + m_PrefabInstance: {fileID: 367263645} + m_PrefabAsset: {fileID: 0} --- !u!1 &449794919 GameObject: m_ObjectHideFlags: 0 @@ -181,12 +305,12 @@ SpriteRenderer: m_SortingLayerID: -22961053 m_SortingLayer: -1 m_SortingOrder: 0 - m_Sprite: {fileID: 21300000, guid: a92d11379a5e674489668c40439d778d, type: 3} + m_Sprite: {fileID: 5854342148761561055, guid: 8cdb315d4968ef847a63e52bd8847e5b, type: 3} m_Color: {r: 1, g: 1, b: 1, a: 1} m_FlipX: 0 m_FlipY: 0 m_DrawMode: 2 - m_Size: {x: 27.3, y: 14.3} + m_Size: {x: 22, y: 10.7} m_AdaptiveModeThreshold: 0.5 m_SpriteTileMode: 0 m_WasSpriteAssigned: 1 @@ -200,12 +324,12 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 449794919} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: -0.29, z: 0} + 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_RootOrder: 6 + m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &519420028 GameObject: @@ -446,7 +570,7 @@ GameObject: - component: {fileID: 1014711458} - component: {fileID: 1014711459} m_Layer: 0 - m_Name: Controller + m_Name: LevelController m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -460,12 +584,12 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1014711457} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 7.6740193, y: 7.8, z: -10.011237} + 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_RootOrder: 3 + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &1014711459 MonoBehaviour: @@ -476,56 +600,15 @@ MonoBehaviour: m_GameObject: {fileID: 1014711457} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 709edaf88476e014f9de790745097efd, type: 3} + m_Script: {fileID: 11500000, guid: 29744b92ef0fa824ba2c2dfaecd784ed, type: 3} m_Name: m_EditorClassIdentifier: artist: {fileID: 2276488776047960095, guid: e7ecd0892a155ad40b2253fe45b2f43a, type: 3} ---- !u!1 &1292283376 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1292283378} - - component: {fileID: 1292283377} - m_Layer: 0 - m_Name: Path - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1292283377 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1292283376} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 62f8cdc29b6f43e4998a2750b3b9a023, type: 3} - m_Name: - m_EditorClassIdentifier: - waypointPrefab: {fileID: 2624247600710686983, guid: fad75b8b6a5d5a6468eef0f0782ea835, type: 3} - enemyPrefab: {fileID: 1458536803320539101, guid: f1eab3cea41682c4ba2ff7c2b218fc0b, type: 3} ---- !u!4 &1292283378 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1292283376} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -10.78, y: 8.21, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + enemy: {fileID: 1458536803320539101, guid: f1eab3cea41682c4ba2ff7c2b218fc0b, type: 3} + waypoints: + - {fileID: 1556613419} + - {fileID: 367263646} + - {fileID: 287684446} --- !u!1 &1321858736 GameObject: m_ObjectHideFlags: 0 @@ -619,13 +702,75 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 4 + m_RootOrder: 3 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!1001 &1556613418 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 328858392699145925, guid: fad75b8b6a5d5a6468eef0f0782ea835, type: 3} + propertyPath: m_RootOrder + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 328858392699145925, guid: fad75b8b6a5d5a6468eef0f0782ea835, type: 3} + propertyPath: m_LocalPosition.x + value: -8.61 + objectReference: {fileID: 0} + - target: {fileID: 328858392699145925, guid: fad75b8b6a5d5a6468eef0f0782ea835, type: 3} + propertyPath: m_LocalPosition.y + value: -6.2 + objectReference: {fileID: 0} + - target: {fileID: 328858392699145925, guid: fad75b8b6a5d5a6468eef0f0782ea835, type: 3} + propertyPath: m_LocalPosition.z + value: -0.0487628 + objectReference: {fileID: 0} + - target: {fileID: 328858392699145925, guid: fad75b8b6a5d5a6468eef0f0782ea835, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 328858392699145925, guid: fad75b8b6a5d5a6468eef0f0782ea835, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 328858392699145925, guid: fad75b8b6a5d5a6468eef0f0782ea835, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 328858392699145925, guid: fad75b8b6a5d5a6468eef0f0782ea835, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 328858392699145925, guid: fad75b8b6a5d5a6468eef0f0782ea835, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 328858392699145925, guid: fad75b8b6a5d5a6468eef0f0782ea835, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 328858392699145925, guid: fad75b8b6a5d5a6468eef0f0782ea835, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2624247600710686983, guid: fad75b8b6a5d5a6468eef0f0782ea835, type: 3} + propertyPath: m_Name + value: Waypoint 1 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: fad75b8b6a5d5a6468eef0f0782ea835, type: 3} +--- !u!1 &1556613419 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 2624247600710686983, guid: fad75b8b6a5d5a6468eef0f0782ea835, type: 3} + m_PrefabInstance: {fileID: 1556613418} + m_PrefabAsset: {fileID: 0} --- !u!1 &1644448702 GameObject: m_ObjectHideFlags: 0 @@ -691,5 +836,5 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 5 + m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Assets/Scripts/ArtistController.cs b/Assets/Scripts/ArtistController.cs index a20cd6c..42d9354 100644 --- a/Assets/Scripts/ArtistController.cs +++ b/Assets/Scripts/ArtistController.cs @@ -1,17 +1,5 @@ -using System.Collections; -using System.Collections.Generic; -using Unity.VisualScripting; using UnityEngine; public class ArtistController : MonoBehaviour { - // Start is called before the first frame update - void Start() - { - - } - - // Update is called once per frame - void Update() - { - } -} + +} \ No newline at end of file diff --git a/Assets/Scripts/GameController.cs b/Assets/Scripts/GameController.cs deleted file mode 100644 index d1b67b3..0000000 --- a/Assets/Scripts/GameController.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -public class GameController : MonoBehaviour -{ - public GameObject artist; - // Start is called before the first frame update - void Start() - { - - } - - // Update is called once per frame - void Update() - { - if (Input.GetMouseButtonDown(0)) { - Instantiate(artist, Camera.main.ScreenToWorldPoint(Input.mousePosition) + Vector3.forward, Quaternion.identity); - } - } -} diff --git a/Assets/Scripts/GenerationController.cs b/Assets/Scripts/GenerationController.cs index d1929aa..712b346 100644 --- a/Assets/Scripts/GenerationController.cs +++ b/Assets/Scripts/GenerationController.cs @@ -4,44 +4,37 @@ using System.Collections.Generic; using UnityEngine; public class GenerationController : MonoBehaviour { + internal GameObject[] waypoints; + private int waypointIndex = 1; + + private Rigidbody2D rb; - public GameObject PathGameObject; - private Rigidbody2D rb; + // Start is called before the first frame update + private void Start() { + rb = GetComponent(); + } - int pathIndex = 0; + // Update is called once per frame + void Update() { } - bool moving = false; + private void FixedUpdate() { + if (waypointIndex < waypoints.Length) { + var target = waypoints[waypointIndex].transform.position; + var direction = target - transform.position; + var f = transform.position + direction.normalized * 0.1f; + rb.MovePosition(f); + } else if (waypointIndex >= waypoints.Length) { + Destroy(gameObject); + } + } - private GameObject pathPointer; - - // Start is called before the first frame update - void Start() - { - rb = GetComponent(); - PathGameObject = GameObject.Find("Path"); - } - - // Update is called once per frame - void Update() - { - - } - - private void FixedUpdate() { - pathPointer = PathGameObject.GetComponent().waypointList[pathIndex] as GameObject; - - if (!moving) { - Vector2 force = new Vector2(pathPointer.transform.position.x, pathPointer.transform.position.y); - rb.AddForce(force); - moving = true; - } - - } - - private void OnTriggerEnter2D(Collider2D col) { - if (col.gameObject == pathPointer) { - moving = false; - pathIndex++; - } - } -} + private void OnTriggerEnter2D(Collider2D col) { + if (col.gameObject == waypoints[waypointIndex]) { + waypointIndex++; + } + } + + public void setWaypoints(GameObject[] waypointsIn) { + waypoints = waypointsIn; + } +} \ No newline at end of file diff --git a/Assets/Scripts/LevelController.cs b/Assets/Scripts/LevelController.cs new file mode 100644 index 0000000..e5ac937 --- /dev/null +++ b/Assets/Scripts/LevelController.cs @@ -0,0 +1,31 @@ +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; + +public class LevelController : MonoBehaviour { + public GameObject artist; + public GameObject enemy; + public GameObject[] waypoints; + + + private Queue enemies = new(); + // Start is called before the first frame update + void Start() { + spawnEnemy(enemy, waypoints[0].transform.position); + } + + // Update is called once per frame + void Update() { + if (Input.GetMouseButtonDown(0)) { + Instantiate(artist, Camera.main.ScreenToWorldPoint(Input.mousePosition) + Vector3.forward, Quaternion.identity); + } + } + + private void spawnEnemy(GameObject enemyIn, Vector3 position) { + var e = Instantiate(enemyIn, position, Quaternion.identity); + var ec = e.GetComponent(); + ec.setWaypoints(waypoints); + enemies.Enqueue(e); + } +} \ No newline at end of file diff --git a/Assets/Scripts/GameController.cs.meta b/Assets/Scripts/LevelController.cs.meta similarity index 83% rename from Assets/Scripts/GameController.cs.meta rename to Assets/Scripts/LevelController.cs.meta index 2623882..aa9128f 100644 --- a/Assets/Scripts/GameController.cs.meta +++ b/Assets/Scripts/LevelController.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 709edaf88476e014f9de790745097efd +guid: 29744b92ef0fa824ba2c2dfaecd784ed MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/Scripts/PathingController.cs b/Assets/Scripts/PathingController.cs deleted file mode 100644 index f06f649..0000000 --- a/Assets/Scripts/PathingController.cs +++ /dev/null @@ -1,44 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -public class PathingController : MonoBehaviour { - - public GameObject waypointPrefab; - public ArrayList waypointList = new ArrayList(); - - public GameObject enemyPrefab; - - private ArrayList enemyList = new ArrayList(); - - int counter = 0; - - // Start is called before the first frame update - void Start() - { - waypointList.Add(Instantiate(waypointPrefab, new Vector3(0, 0, 0), Quaternion.identity)); - waypointList.Add(Instantiate(waypointPrefab, new Vector3(0, 5, 0), Quaternion.identity)); - waypointList.Add(Instantiate(waypointPrefab, new Vector3(5, 5, 0), Quaternion.identity)); - - } - - // Update is called once per frame - void Update() - { - - } - - private void FixedUpdate() { - if (counter == 0) { - enemyList.Add(Instantiate(enemyPrefab)); - counter++; - } - else if (counter >= 50) { - counter = 0; - } - else { - counter++; - } - } -} diff --git a/Assets/Scripts/WaypointController.cs b/Assets/Scripts/WaypointController.cs new file mode 100644 index 0000000..7103b4d --- /dev/null +++ b/Assets/Scripts/WaypointController.cs @@ -0,0 +1,8 @@ +using UnityEngine; + +public class WaypointController : MonoBehaviour { + private void Start() { + var transparent = new Color(1, 1, 1, 0); + GetComponent().color = transparent; + } +} \ No newline at end of file diff --git a/Assets/Scripts/PathingController.cs.meta b/Assets/Scripts/WaypointController.cs.meta similarity index 83% rename from Assets/Scripts/PathingController.cs.meta rename to Assets/Scripts/WaypointController.cs.meta index 58e295a..32d54b4 100644 --- a/Assets/Scripts/PathingController.cs.meta +++ b/Assets/Scripts/WaypointController.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 62f8cdc29b6f43e4998a2750b3b9a023 +guid: 2346c6ef8f7f55541b5f27987d960a46 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/Textures/MapBackground.png b/Assets/Textures/MapBackground.png deleted file mode 100644 index d34bc7c..0000000 Binary files a/Assets/Textures/MapBackground.png and /dev/null differ diff --git a/Assets/Textures/MapBackground.png.meta b/Assets/Textures/MapBackground.png.meta deleted file mode 100644 index 80d703e..0000000 --- a/Assets/Textures/MapBackground.png.meta +++ /dev/null @@ -1,134 +0,0 @@ -fileFormatVersion: 2 -guid: a92d11379a5e674489668c40439d778d -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 11 - 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 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMasterTextureLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 0 - aniso: 1 - mipBias: 0 - wrapU: 0 - wrapV: 0 - wrapW: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 1 - spriteExtrude: 1 - spriteMeshType: 0 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - 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 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 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 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 3 - buildTarget: Server - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 3 - buildTarget: WebGL - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: 5e97eb03825dee720800000000000000 - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Textures/MapBackground.psd b/Assets/Textures/MapBackground.psb similarity index 74% rename from Assets/Textures/MapBackground.psd rename to Assets/Textures/MapBackground.psb index 9f7eaf3..5f414bd 100644 Binary files a/Assets/Textures/MapBackground.psd and b/Assets/Textures/MapBackground.psb differ diff --git a/Assets/Textures/MapBackground.psb.meta b/Assets/Textures/MapBackground.psb.meta new file mode 100644 index 0000000..c9212d1 --- /dev/null +++ b/Assets/Textures/MapBackground.psb.meta @@ -0,0 +1,268 @@ +fileFormatVersion: 2 +guid: 8cdb315d4968ef847a63e52bd8847e5b +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: b2a9591990af98743ba3ff7cf1000886, type: 3} + textureImporterSettings: + alphaSource: 1 + mipMapMode: 0 + enableMipMap: 1 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + convertToNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 1 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + nPOTScale: 1 + sRGBTexture: 1 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 0 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 0 + flipbookColumns: 0 + ignorePngGamma: 0 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + normalMap: 0 + textureFormat: 0 + maxTextureSize: 0 + lightmap: 0 + compressionQuality: 0 + linearTexture: 0 + grayScaleToAlpha: 0 + rGBM: 0 + cubemapConvolutionSteps: 0 + cubemapConvolutionExponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + spriteImportData: + - name: MapBackground_1 + originalName: + pivot: {x: 0.5, y: 0.5} + alignment: 0 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 160 + height: 90 + spriteID: 7727cc21aa9fdbf49bee04c1ec06fe04 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + parentGroupIndex: -1 + uvTransform: {x: 0, y: 0} + mosaicSpriteImportData: [] + rigSpriteImportData: + - name: Layer 3 + originalName: + pivot: {x: 0.5, y: 0.5} + alignment: 0 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 4 + y: 102 + width: 160 + height: 7 + spriteID: a721b87cf029a4d438e02f9c39baaffa + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + parentGroupIndex: -1 + uvTransform: {x: 4, y: 102} + - name: Layer 2 + originalName: + pivot: {x: 0.5, y: 0.5} + alignment: 0 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 172 + y: 4 + width: 10 + height: 90 + spriteID: d0b7aac24a8b46b4da3fe9da8fd435d9 + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + parentGroupIndex: -1 + uvTransform: {x: 22, y: 4} + - name: Layer 1 + originalName: + pivot: {x: 0.5, y: 0.5} + alignment: 0 + border: {x: 0, y: 0, z: 0, w: 0} + rect: + serializedVersion: 2 + x: 4 + y: 4 + width: 160 + height: 90 + spriteID: 9447771bb342d324194f7575c963a72e + spriteBone: [] + spriteOutline: [] + vertices: [] + spritePhysicsOutline: [] + indices: + edges: [] + tessellationDetail: 0 + parentGroupIndex: -1 + uvTransform: {x: 4, y: 4} + characterData: + bones: [] + parts: [] + dimension: {x: 0, y: 0} + characterGroups: [] + boneReadOnly: 0 + sharedRigSpriteImportData: [] + sharedRigCharacterData: + bones: [] + parts: [] + dimension: {x: 0, y: 0} + characterGroups: [] + boneReadOnly: 0 + platformSettings: + - name: DefaultTexturePlatform + overridden: 0 + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + forceMaximumCompressionQuality_BC6H_BC7: 0 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + androidETC2FallbackOverride: 0 + - name: Standalone + overridden: 0 + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + forceMaximumCompressionQuality_BC6H_BC7: 0 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + androidETC2FallbackOverride: 0 + - name: Server + overridden: 0 + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + forceMaximumCompressionQuality_BC6H_BC7: 0 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + androidETC2FallbackOverride: 0 + - name: WebGL + overridden: 0 + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + forceMaximumCompressionQuality_BC6H_BC7: 0 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + androidETC2FallbackOverride: 0 + mosaicLayers: 1 + characterMode: 1 + documentPivot: {x: 0, y: 0} + documentAlignment: 7 + importHiddenLayers: 0 + layerMappingOption: 2 + generatePhysicsShape: 0 + paperDollMode: 0 + keepDupilcateSpriteName: 1 + skeletonAssetReferenceID: + spriteCategoryList: + categories: [] + spritePackingTag: + resliceFromLayer: 0 + mosaicPSDLayers: [] + rigPSDLayers: + - name: Layer 3 + spriteName: Layer 3 + isGroup: 0 + parentIndex: -1 + spriteID: a721b87cf029a4d438e02f9c39baaffa + layerID: 4 + mosaicPosition: {x: 4, y: 102} + flatten: 0 + isImported: 1 + isVisible: 1 + - name: Layer 2 + spriteName: Layer 2 + isGroup: 0 + parentIndex: -1 + spriteID: d0b7aac24a8b46b4da3fe9da8fd435d9 + layerID: 3 + mosaicPosition: {x: 172, y: 4} + flatten: 0 + isImported: 1 + isVisible: 1 + - name: Layer 1 + spriteName: Layer 1 + isGroup: 0 + parentIndex: -1 + spriteID: 9447771bb342d324194f7575c963a72e + layerID: 2 + mosaicPosition: {x: 4, y: 4} + flatten: 0 + isImported: 1 + isVisible: 1 + sharedRigPSDLayers: [] + pSDLayerImportSetting: [] + generateGOHierarchy: 0 + textureAssetName: + prefabAssetName: + spriteLibAssetName: + skeletonAssetName: + secondarySpriteTextures: [] diff --git a/Assets/Textures/MapBackground.psd.meta b/Assets/Textures/MapBackground.psd.meta deleted file mode 100644 index 8efbb44..0000000 --- a/Assets/Textures/MapBackground.psd.meta +++ /dev/null @@ -1,98 +0,0 @@ -fileFormatVersion: 2 -guid: e9c801220f35c7344bedeb9c40d10eb1 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 11 - 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 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMasterTextureLimit: 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: 100 - 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 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: 5e97eb03825dee720800000000000000 - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Steps.md b/Steps.md new file mode 100644 index 0000000..8ec22ba --- /dev/null +++ b/Steps.md @@ -0,0 +1,39 @@ +Tower Defense Game + +Different Scenes for different levels, so, need: + +1. A way to create towers independent of scene +2. A way to spawn enemies independent of scene +3. Waypoints should be static on a level, but can be moved around freely. +4. Way for objects to target first, closest, last, (strongest?) +5. Way for projectiles/attacks to affect enemies +6. Way to upgrade towers. + +Implementation details: + +1. A prefab for each tower. When clicking empty ground [check if no tower tagged type tower is below mouse pointer](https://gamedev.stackexchange.com/questions/121994/how-to-get-which-gameobject-the-mouse-is-over-in-unity) and if none found, create radial menu around cursor. Clicking away from any buttons closes the menu. When clicking a button to select a tower it will be placed at the original click point. + +2. Prefab for each enemy. A level controller will need to spawn in enemies (Initialize them) and then find a way to pass in the array of waypoints. The level controller will have a public array of stored waypoints so it can pass in that object to each enemy. Once the waypoint number == array length then decrease lives/whatever, then destroy self + +3. Prefab for waypoints. Potentially find a way to put them in empty game object and use the array of children at game startup. + +4. Every interval of the tower, the tower will ray-cast in a radius around it, (or maybe use a shell cast (check in an expanding radius around the tower (or both))) and keep track of the first object in the enemy array, that is within the radius (compare distance between tower and enemy vs radius), and if closest, just use the smallest number in radius, last is the inverse of first. The array of enemies will have to be passed into each tower when it is spawned (if arrays are actually passed by reference in unity). Based on the initial distance between the tower and the enemy, estimate the amount of time it would take to throw a projectile/attack. Then predict where the enemy will be in that time. This process can be repeated for further accuracy (make it a function?) + +5. A prefab for each projectile would be needed. You would need to pass in the angle, position when initiated, but also it's lifetime if it has one, or any additional information in a separate function. They should be deleted when they leave the viewport. Each should have a way to move itself in a script attached to it. + +6. A radial menu like the buy menu should open up around the tower, allowing you to upgrade specific things about the tower based on it's type. The radial menu could have an outer rim which indicated how many upgrades it has based on a dashed line on the outer rim. + + +Aesthetic decisions: +The entrance should probably have a machine that spits out the enemies (undecided what they will look like, potentially extra fingers or other hallmarks of ai art, or could look like glitches like missingno or like a jumble of pixels). The towers should be things like Artist (the basic tower). It can be upgraded from pencils, to paint brushes which have a splash radius on hit, to a paint roller which penetrates multiple enemies and has weaker splash radius. Another tower might be a painter, which starts by throwing three drops of paint, and then upgrades to a big projectile with an AOE attack on the ground, and then throwing multiple of them. Come up with other spins on artist based attacks (pixel artist, digital artist). Losing lives could have an impact on the background, making it look more glitchy + +Story (brief): +It is 2022 and the emergence of AI art is threatening digital art spaces. Artists band together to attack the AI in an all out brawl. Protect the integrity of art by stopping them before they get too far. + +Potentially helpful links: +https://gamedevbeginner.com/how-to-get-a-variable-from-another-script-in-unity-the-right-way/ +https://www.youtube.com/watch?v=2pCkInvkwZ0 +https://forum.unity.com/threads/c-global-variables-available-to-all-scenes.544901/ +https://stackoverflow.com/questions/68189868/how-can-i-make-a-variable-that-i-can-access-in-any-unity-scene-unity + +https://learn.unity.com/tutorial/waypoints# \ No newline at end of file