From 98112df4a570d7c401f6648cc9ad73a82a33d27a Mon Sep 17 00:00:00 2001 From: Gabriel Ksawery Skowron-Rodriguez Date: Mon, 16 May 2022 13:34:11 +0200 Subject: [PATCH 1/4] added TickSystem and an example tick receiver + basic TickSystem fully working: ++ add it to a scene for ticks to happen + ExampleTickReceiver reference monobehaviour ++ so everyone knows how to connect to the system --- The project/Assets/Prefabs.meta | 8 ++ The project/Assets/Prefabs/TickSystem.prefab | 46 ++++++ .../Assets/Prefabs/TickSystem.prefab.meta | 7 + The project/Assets/Scenes/SpartaqS.unity | 136 +++++++++++++++++- The project/Assets/Scripts.meta | 8 ++ The project/Assets/Scripts/TickSystem.meta | 8 ++ .../Scripts/TickSystem/ExampleTickReceiver.cs | 16 +++ .../TickSystem/ExampleTickReceiver.cs.meta | 11 ++ .../Assets/Scripts/TickSystem/TickSystem.cs | 46 ++++++ .../Scripts/TickSystem/TickSystem.cs.meta | 11 ++ 10 files changed, 296 insertions(+), 1 deletion(-) create mode 100644 The project/Assets/Prefabs.meta create mode 100644 The project/Assets/Prefabs/TickSystem.prefab create mode 100644 The project/Assets/Prefabs/TickSystem.prefab.meta create mode 100644 The project/Assets/Scripts.meta create mode 100644 The project/Assets/Scripts/TickSystem.meta create mode 100644 The project/Assets/Scripts/TickSystem/ExampleTickReceiver.cs create mode 100644 The project/Assets/Scripts/TickSystem/ExampleTickReceiver.cs.meta create mode 100644 The project/Assets/Scripts/TickSystem/TickSystem.cs create mode 100644 The project/Assets/Scripts/TickSystem/TickSystem.cs.meta diff --git a/The project/Assets/Prefabs.meta b/The project/Assets/Prefabs.meta new file mode 100644 index 00000000..4a208534 --- /dev/null +++ b/The project/Assets/Prefabs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5939f2b8303b5cd46afe044fb9d1709e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/The project/Assets/Prefabs/TickSystem.prefab b/The project/Assets/Prefabs/TickSystem.prefab new file mode 100644 index 00000000..c5d90ef9 --- /dev/null +++ b/The project/Assets/Prefabs/TickSystem.prefab @@ -0,0 +1,46 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &8737336274644796263 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8737336274644796262} + - component: {fileID: 5760747931768097249} + m_Layer: 0 + m_Name: TickSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8737336274644796262 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8737336274644796263} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &5760747931768097249 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8737336274644796263} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 39caa37523bdee54ba2bb4f591cf9ece, type: 3} + m_Name: + m_EditorClassIdentifier: diff --git a/The project/Assets/Prefabs/TickSystem.prefab.meta b/The project/Assets/Prefabs/TickSystem.prefab.meta new file mode 100644 index 00000000..7da5b06a --- /dev/null +++ b/The project/Assets/Prefabs/TickSystem.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 519502c6f18d5e44eb800aefd848a6e6 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/The project/Assets/Scenes/SpartaqS.unity b/The project/Assets/Scenes/SpartaqS.unity index df6246b5..aa2d012b 100644 --- a/The project/Assets/Scenes/SpartaqS.unity +++ b/The project/Assets/Scenes/SpartaqS.unity @@ -38,7 +38,7 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} + m_IndirectSpecularColor: {r: 0.18028378, g: 0.22571412, b: 0.30692285, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &3 LightmapSettings: @@ -133,6 +133,7 @@ GameObject: m_Component: - component: {fileID: 62685116} - component: {fileID: 62685115} + - component: {fileID: 62685117} m_Layer: 0 m_Name: Directional Light m_TagString: Untagged @@ -217,6 +218,26 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!114 &62685117 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 62685114} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 474bcb49853aa07438625e644c072ee6, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Version: 1 + m_UsePipelineSettings: 1 + m_AdditionalLightsShadowResolutionTier: 2 + m_LightLayerMask: 1 + m_CustomShadowLayers: 0 + m_ShadowLayerMask: 1 + m_LightCookieSize: {x: 1, y: 1} + m_LightCookieOffset: {x: 0, y: 0} --- !u!1 &574213518 GameObject: m_ObjectHideFlags: 0 @@ -301,3 +322,116 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1030936245 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1030936246} + - component: {fileID: 1030936247} + m_Layer: 0 + m_Name: ExampleTickReceiver + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1030936246 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1030936245} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1030936247 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1030936245} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a1201c89332e3f946a28bbc1294750be, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1001 &1051848805 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 8737336274644796262, guid: 519502c6f18d5e44eb800aefd848a6e6, + type: 3} + propertyPath: m_RootOrder + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 8737336274644796262, guid: 519502c6f18d5e44eb800aefd848a6e6, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8737336274644796262, guid: 519502c6f18d5e44eb800aefd848a6e6, + type: 3} + propertyPath: m_LocalPosition.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8737336274644796262, guid: 519502c6f18d5e44eb800aefd848a6e6, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8737336274644796262, guid: 519502c6f18d5e44eb800aefd848a6e6, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8737336274644796262, guid: 519502c6f18d5e44eb800aefd848a6e6, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8737336274644796262, guid: 519502c6f18d5e44eb800aefd848a6e6, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8737336274644796262, guid: 519502c6f18d5e44eb800aefd848a6e6, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8737336274644796262, guid: 519502c6f18d5e44eb800aefd848a6e6, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8737336274644796262, guid: 519502c6f18d5e44eb800aefd848a6e6, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8737336274644796262, guid: 519502c6f18d5e44eb800aefd848a6e6, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8737336274644796263, guid: 519502c6f18d5e44eb800aefd848a6e6, + type: 3} + propertyPath: m_Name + value: TickSystem + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 519502c6f18d5e44eb800aefd848a6e6, type: 3} diff --git a/The project/Assets/Scripts.meta b/The project/Assets/Scripts.meta new file mode 100644 index 00000000..d428c7c3 --- /dev/null +++ b/The project/Assets/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0249b4cbd93f42540a182f30adbb10bc +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/The project/Assets/Scripts/TickSystem.meta b/The project/Assets/Scripts/TickSystem.meta new file mode 100644 index 00000000..c6b45ef3 --- /dev/null +++ b/The project/Assets/Scripts/TickSystem.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bc4af0d1e4dd3f8468007cefdc0e62d2 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/The project/Assets/Scripts/TickSystem/ExampleTickReceiver.cs b/The project/Assets/Scripts/TickSystem/ExampleTickReceiver.cs new file mode 100644 index 00000000..e38f2a5e --- /dev/null +++ b/The project/Assets/Scripts/TickSystem/ExampleTickReceiver.cs @@ -0,0 +1,16 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class ExampleTickReceiver : MonoBehaviour +{ + void Awake() + { + TickSystem.OnTick += HandleTick; + } + + private void HandleTick(TickSystem.OnTickEventArgs tickEventArgs) + { + Debug.Log($"Example of tick #{tickEventArgs.tickNumber} being handled"); + } +} diff --git a/The project/Assets/Scripts/TickSystem/ExampleTickReceiver.cs.meta b/The project/Assets/Scripts/TickSystem/ExampleTickReceiver.cs.meta new file mode 100644 index 00000000..33791f66 --- /dev/null +++ b/The project/Assets/Scripts/TickSystem/ExampleTickReceiver.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a1201c89332e3f946a28bbc1294750be +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/The project/Assets/Scripts/TickSystem/TickSystem.cs b/The project/Assets/Scripts/TickSystem/TickSystem.cs new file mode 100644 index 00000000..d0e1c423 --- /dev/null +++ b/The project/Assets/Scripts/TickSystem/TickSystem.cs @@ -0,0 +1,46 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using System; + +public class TickSystem : MonoBehaviour +{ + public class OnTickEventArgs : EventArgs + { + public int tickNumber; + } + + public static Action OnTick; + + private const float TICK_PERIOD = 0.2f; // seconds between ticks + private int tick; // keep track of total ticks that have happened + public static TickSystem Instance; + + private void Awake() // needs to be called by a scene initializer + { + if (Instance != null) // a TickSystem already exitst + { + Debug.LogError("A TickSystem already exists, FIX YOUR TIME SPAWNING"); + Destroy(gameObject); + }//else this is the first TickSystem that has awoken in this scene + Instance = this; + tickTimer = 0f; + tick = 0; + } + + private float tickTimer = 0f; + + // Update is called once per frame + void Update() + { + tickTimer += Time.deltaTime; + if (tickTimer >= TICK_PERIOD) + { + tickTimer -= TICK_PERIOD; + tick++; + + OnTick?.Invoke(new OnTickEventArgs { tickNumber = tick }); + } + } +} + diff --git a/The project/Assets/Scripts/TickSystem/TickSystem.cs.meta b/The project/Assets/Scripts/TickSystem/TickSystem.cs.meta new file mode 100644 index 00000000..5d564d27 --- /dev/null +++ b/The project/Assets/Scripts/TickSystem/TickSystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 39caa37523bdee54ba2bb4f591cf9ece +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: From fe0d6a6b7fb65582d6779bfdbcd70a1cf4d2028a Mon Sep 17 00:00:00 2001 From: Krzysztof Rudnicki Date: Mon, 16 May 2022 13:39:57 +0200 Subject: [PATCH 2/4] add soldier script --- The project/Assets/Prefabs/Soldier.prefab | 161 ++++++++++++++++++ .../Assets/Prefabs/Soldier.prefab.meta | 7 + The project/Assets/Scenes/Kuchy.unity | 92 +++++++++- The project/Assets/Scripts/Soldier.cs | 58 +++++++ The project/Assets/Scripts/Soldier.cs.meta | 11 ++ 5 files changed, 328 insertions(+), 1 deletion(-) create mode 100644 The project/Assets/Prefabs/Soldier.prefab create mode 100644 The project/Assets/Prefabs/Soldier.prefab.meta create mode 100644 The project/Assets/Scripts/Soldier.cs create mode 100644 The project/Assets/Scripts/Soldier.cs.meta diff --git a/The project/Assets/Prefabs/Soldier.prefab b/The project/Assets/Prefabs/Soldier.prefab new file mode 100644 index 00000000..d49d4fa6 --- /dev/null +++ b/The project/Assets/Prefabs/Soldier.prefab @@ -0,0 +1,161 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &403095692180922766 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 430939372503899243} + - component: {fileID: 2567001691605468863} + - component: {fileID: 9215955991629613539} + - component: {fileID: 1033819704020761458} + m_Layer: 0 + m_Name: Soldier + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &430939372503899243 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 403095692180922766} + 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: 8125631373578802561} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &2567001691605468863 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 403095692180922766} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!54 &9215955991629613539 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 403095692180922766} + serializedVersion: 2 + m_Mass: 1 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!114 &1033819704020761458 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 403095692180922766} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d34caf35d0ce610f8bc87cf815ba1915, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &2353457452513625490 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8125631373578802561} + - component: {fileID: 2623184778114028323} + - component: {fileID: 2266208920723090547} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8125631373578802561 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2353457452513625490} + 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: 430939372503899243} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &2623184778114028323 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2353457452513625490} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &2266208920723090547 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2353457452513625490} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, 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: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} diff --git a/The project/Assets/Prefabs/Soldier.prefab.meta b/The project/Assets/Prefabs/Soldier.prefab.meta new file mode 100644 index 00000000..8d3e39ac --- /dev/null +++ b/The project/Assets/Prefabs/Soldier.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: a87b1aa46b0ed3e0fba621e11dd4f1e2 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/The project/Assets/Scenes/Kuchy.unity b/The project/Assets/Scenes/Kuchy.unity index 4ae19304..ed764859 100644 --- a/The project/Assets/Scenes/Kuchy.unity +++ b/The project/Assets/Scenes/Kuchy.unity @@ -38,7 +38,7 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} + m_IndirectSpecularColor: {r: 0.18028328, g: 0.22571328, b: 0.3069218, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &3 LightmapSettings: @@ -207,6 +207,75 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &1188979422 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 403095692180922766, guid: a87b1aa46b0ed3e0fba621e11dd4f1e2, + type: 3} + propertyPath: m_Name + value: Soldier + objectReference: {fileID: 0} + - target: {fileID: 430939372503899243, guid: a87b1aa46b0ed3e0fba621e11dd4f1e2, + type: 3} + propertyPath: m_RootOrder + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 430939372503899243, guid: a87b1aa46b0ed3e0fba621e11dd4f1e2, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 430939372503899243, guid: a87b1aa46b0ed3e0fba621e11dd4f1e2, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 430939372503899243, guid: a87b1aa46b0ed3e0fba621e11dd4f1e2, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 430939372503899243, guid: a87b1aa46b0ed3e0fba621e11dd4f1e2, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 430939372503899243, guid: a87b1aa46b0ed3e0fba621e11dd4f1e2, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 430939372503899243, guid: a87b1aa46b0ed3e0fba621e11dd4f1e2, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 430939372503899243, guid: a87b1aa46b0ed3e0fba621e11dd4f1e2, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 430939372503899243, guid: a87b1aa46b0ed3e0fba621e11dd4f1e2, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 430939372503899243, guid: a87b1aa46b0ed3e0fba621e11dd4f1e2, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 430939372503899243, guid: a87b1aa46b0ed3e0fba621e11dd4f1e2, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: a87b1aa46b0ed3e0fba621e11dd4f1e2, type: 3} --- !u!1 &2045132977 GameObject: m_ObjectHideFlags: 0 @@ -217,6 +286,7 @@ GameObject: m_Component: - component: {fileID: 2045132979} - component: {fileID: 2045132978} + - component: {fileID: 2045132980} m_Layer: 0 m_Name: Directional Light m_TagString: Untagged @@ -301,3 +371,23 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!114 &2045132980 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2045132977} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 474bcb49853aa07438625e644c072ee6, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Version: 1 + m_UsePipelineSettings: 1 + m_AdditionalLightsShadowResolutionTier: 2 + m_LightLayerMask: 1 + m_CustomShadowLayers: 0 + m_ShadowLayerMask: 1 + m_LightCookieSize: {x: 1, y: 1} + m_LightCookieOffset: {x: 0, y: 0} diff --git a/The project/Assets/Scripts/Soldier.cs b/The project/Assets/Scripts/Soldier.cs new file mode 100644 index 00000000..8a2c6aea --- /dev/null +++ b/The project/Assets/Scripts/Soldier.cs @@ -0,0 +1,58 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class Soldier : MonoBehaviour +{ + private const string enemyTag = "Enemy"; + private const float healthPoints = 1; + private const float rangeAttack = 1; + private const float rangeView = 1; + private const float damageAttack = 1; + private const float speedAttack = 1; + // Start is called before the first frame update + void Start(){ + InvokeRepeating("UpdateTarget", 0f, 0.5f); + // Call UpdateTarget method at the begining of the Start() + // and repeat every 0.5 second + + } + + void UpdateTarget () + { + // Enemies are the game objects tagged with the "Enemy" + GameObject[] enemies = GameObject.FindGameObjectsWithTag(enemyTag); + // We have not found enemy yet so the distance to enemy is "infinite" + float shortestDistance = Mathf.Infinity; + GameObject nearestEnemy = null; + foreach ( GameObject enemy in enemies) + { + // Go through each enemy existing + // Calculate distance to this enemy + float distanceToEnemy = Vector3.Distance(transform.position, enemy.transform.position); + if (distanceToEnemy < shortestDistance) + { + shortestDistance = distanceToEnemy; + nearestEnemy = enemy; + } + } + + if (nearestEnemy != null && shortestDistance <= rangeAttack) + { + target = nearestEnemey.transform; + } + } + + // Update is called once per frame + void Update() + { + if (target == null) return; + } + + /* https://www.youtube.com/watch?v=QKhn2kl9_8I 08:54 Soldier attack + void OnDrawGizmosSelected () + { + + } + */ +} diff --git a/The project/Assets/Scripts/Soldier.cs.meta b/The project/Assets/Scripts/Soldier.cs.meta new file mode 100644 index 00000000..c7120dcf --- /dev/null +++ b/The project/Assets/Scripts/Soldier.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d34caf35d0ce610f8bc87cf815ba1915 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: From 2a0b75fd813c573af7cd9b1a96f86093ecef7818 Mon Sep 17 00:00:00 2001 From: Krzysztof Rudnicki Date: Mon, 16 May 2022 14:12:43 +0200 Subject: [PATCH 3/4] feat: Find soldiers --- The project/Assets/Prefabs/Soldier.prefab | 2 +- The project/Assets/Scenes/Kuchy.unity | 130 ++++++++++++++++++- The project/Assets/Scripts/Soldier.cs | 18 ++- The project/ProjectSettings/TagManager.asset | 4 +- 4 files changed, 144 insertions(+), 10 deletions(-) diff --git a/The project/Assets/Prefabs/Soldier.prefab b/The project/Assets/Prefabs/Soldier.prefab index d49d4fa6..527a5937 100644 --- a/The project/Assets/Prefabs/Soldier.prefab +++ b/The project/Assets/Prefabs/Soldier.prefab @@ -14,7 +14,7 @@ GameObject: - component: {fileID: 1033819704020761458} m_Layer: 0 m_Name: Soldier - m_TagString: Untagged + m_TagString: 'Ally ' m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 diff --git a/The project/Assets/Scenes/Kuchy.unity b/The project/Assets/Scenes/Kuchy.unity index ed764859..86e20b36 100644 --- a/The project/Assets/Scenes/Kuchy.unity +++ b/The project/Assets/Scenes/Kuchy.unity @@ -134,6 +134,7 @@ GameObject: - component: {fileID: 511887294} - component: {fileID: 511887293} - component: {fileID: 511887292} + - component: {fileID: 511887295} m_Layer: 0 m_Name: Main Camera m_TagString: MainCamera @@ -207,6 +208,39 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &511887295 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 511887291} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_RenderShadows: 1 + m_RequiresDepthTextureOption: 2 + m_RequiresOpaqueTextureOption: 2 + m_CameraType: 0 + m_Cameras: [] + m_RendererIndex: -1 + m_VolumeLayerMask: + serializedVersion: 2 + m_Bits: 1 + m_VolumeTrigger: {fileID: 0} + m_VolumeFrameworkUpdateModeOption: 2 + m_RenderPostProcessing: 0 + m_Antialiasing: 0 + m_AntialiasingQuality: 2 + m_StopNaN: 0 + m_Dithering: 0 + m_ClearDepth: 1 + m_AllowXRRendering: 1 + m_RequiresDepthTexture: 0 + m_RequiresColorTexture: 0 + m_Version: 2 --- !u!1001 &1188979422 PrefabInstance: m_ObjectHideFlags: 0 @@ -274,6 +308,100 @@ PrefabInstance: propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} + - target: {fileID: 9215955991629613539, guid: a87b1aa46b0ed3e0fba621e11dd4f1e2, + type: 3} + propertyPath: m_UseGravity + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 9215955991629613539, guid: a87b1aa46b0ed3e0fba621e11dd4f1e2, + type: 3} + propertyPath: m_IsKinematic + value: 1 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: a87b1aa46b0ed3e0fba621e11dd4f1e2, type: 3} +--- !u!1001 &1413714403 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 403095692180922766, guid: a87b1aa46b0ed3e0fba621e11dd4f1e2, + type: 3} + propertyPath: m_Name + value: Soldier (1) + objectReference: {fileID: 0} + - target: {fileID: 403095692180922766, guid: a87b1aa46b0ed3e0fba621e11dd4f1e2, + type: 3} + propertyPath: m_TagString + value: Enemy + objectReference: {fileID: 0} + - target: {fileID: 430939372503899243, guid: a87b1aa46b0ed3e0fba621e11dd4f1e2, + type: 3} + propertyPath: m_RootOrder + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 430939372503899243, guid: a87b1aa46b0ed3e0fba621e11dd4f1e2, + type: 3} + propertyPath: m_LocalPosition.x + value: -6.8476 + objectReference: {fileID: 0} + - target: {fileID: 430939372503899243, guid: a87b1aa46b0ed3e0fba621e11dd4f1e2, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 430939372503899243, guid: a87b1aa46b0ed3e0fba621e11dd4f1e2, + type: 3} + propertyPath: m_LocalPosition.z + value: 4.6102185 + objectReference: {fileID: 0} + - target: {fileID: 430939372503899243, guid: a87b1aa46b0ed3e0fba621e11dd4f1e2, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 430939372503899243, guid: a87b1aa46b0ed3e0fba621e11dd4f1e2, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 430939372503899243, guid: a87b1aa46b0ed3e0fba621e11dd4f1e2, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 430939372503899243, guid: a87b1aa46b0ed3e0fba621e11dd4f1e2, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 430939372503899243, guid: a87b1aa46b0ed3e0fba621e11dd4f1e2, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 430939372503899243, guid: a87b1aa46b0ed3e0fba621e11dd4f1e2, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 430939372503899243, guid: a87b1aa46b0ed3e0fba621e11dd4f1e2, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 9215955991629613539, guid: a87b1aa46b0ed3e0fba621e11dd4f1e2, + type: 3} + propertyPath: m_UseGravity + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 9215955991629613539, guid: a87b1aa46b0ed3e0fba621e11dd4f1e2, + type: 3} + propertyPath: m_IsKinematic + value: 1 + objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: a87b1aa46b0ed3e0fba621e11dd4f1e2, type: 3} --- !u!1 &2045132977 @@ -369,7 +497,7 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 1 + m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} --- !u!114 &2045132980 MonoBehaviour: diff --git a/The project/Assets/Scripts/Soldier.cs b/The project/Assets/Scripts/Soldier.cs index 8a2c6aea..301af388 100644 --- a/The project/Assets/Scripts/Soldier.cs +++ b/The project/Assets/Scripts/Soldier.cs @@ -4,14 +4,17 @@ using UnityEngine; public class Soldier : MonoBehaviour { - private const string enemyTag = "Enemy"; - private const float healthPoints = 1; - private const float rangeAttack = 1; - private const float rangeView = 1; - private const float damageAttack = 1; - private const float speedAttack = 1; + [SerializeField] private Transform target; + [SerializeField] private string enemyTag; + [SerializeField] private float healthPoints = 1; + [SerializeField] private float rangeAttack = 1; + [SerializeField] private float rangeView = 1; + [SerializeField] private float damageAttack = 1; + [SerializeField] private float speedAttack = 1; // Start is called before the first frame update void Start(){ + if(gameObject.tag == "Ally") enemyTag = "Enemy"; + else enemyTag = "Ally"; InvokeRepeating("UpdateTarget", 0f, 0.5f); // Call UpdateTarget method at the begining of the Start() // and repeat every 0.5 second @@ -22,6 +25,7 @@ public class Soldier : MonoBehaviour { // Enemies are the game objects tagged with the "Enemy" GameObject[] enemies = GameObject.FindGameObjectsWithTag(enemyTag); + Debug.Log(enemies.Length); // We have not found enemy yet so the distance to enemy is "infinite" float shortestDistance = Mathf.Infinity; GameObject nearestEnemy = null; @@ -39,7 +43,7 @@ public class Soldier : MonoBehaviour if (nearestEnemy != null && shortestDistance <= rangeAttack) { - target = nearestEnemey.transform; + target = nearestEnemy.transform; } } diff --git a/The project/ProjectSettings/TagManager.asset b/The project/ProjectSettings/TagManager.asset index 1c92a784..95d2d9b4 100644 --- a/The project/ProjectSettings/TagManager.asset +++ b/The project/ProjectSettings/TagManager.asset @@ -3,7 +3,9 @@ --- !u!78 &1 TagManager: serializedVersion: 2 - tags: [] + tags: + - Enemy + - 'Ally ' layers: - Default - TransparentFX From 50882e48db1f8aa42be64f8ab4d8c35d0f89273a Mon Sep 17 00:00:00 2001 From: Gabriel Ksawery Skowron-Rodriguez Date: Mon, 16 May 2022 14:21:52 +0200 Subject: [PATCH 4/4] Added basic Squad logic + Squad ++ aggregates soldiers ++ orders are passed to soldiers (one order per tick) +- for now debug functions to simulate player inputting of a movement order --- The project/Assets/Scenes/SpartaqS.unity | 111 +++++++++++++++++++++-- The project/Assets/Scripts/Soldier.cs | 6 +- The project/Assets/Scripts/Squad.cs | 54 +++++++++++ The project/Assets/Scripts/Squad.cs.meta | 11 +++ 4 files changed, 169 insertions(+), 13 deletions(-) create mode 100644 The project/Assets/Scripts/Squad.cs create mode 100644 The project/Assets/Scripts/Squad.cs.meta diff --git a/The project/Assets/Scenes/SpartaqS.unity b/The project/Assets/Scenes/SpartaqS.unity index aa2d012b..465027f0 100644 --- a/The project/Assets/Scenes/SpartaqS.unity +++ b/The project/Assets/Scenes/SpartaqS.unity @@ -322,7 +322,7 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1030936245 +--- !u!1 &619856669 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -330,42 +330,86 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1030936246} - - component: {fileID: 1030936247} + - component: {fileID: 619856671} + - component: {fileID: 619856670} m_Layer: 0 - m_Name: ExampleTickReceiver + m_Name: DebugSoldier1 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &1030936246 +--- !u!114 &619856670 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 619856669} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d34caf35d0ce610f8bc87cf815ba1915, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!4 &619856671 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1030936245} + m_GameObject: {fileID: 619856669} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 1, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 3 + m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1030936247 +--- !u!1 &728282086 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 728282088} + - component: {fileID: 728282087} + m_Layer: 0 + m_Name: DebugSoldier2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &728282087 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1030936245} + m_GameObject: {fileID: 728282086} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a1201c89332e3f946a28bbc1294750be, type: 3} + m_Script: {fileID: 11500000, guid: d34caf35d0ce610f8bc87cf815ba1915, type: 3} m_Name: m_EditorClassIdentifier: +--- !u!4 &728282088 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 728282086} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1001 &1051848805 PrefabInstance: m_ObjectHideFlags: 0 @@ -435,3 +479,50 @@ PrefabInstance: objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 519502c6f18d5e44eb800aefd848a6e6, type: 3} +--- !u!1 &1440849007 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1440849008} + - component: {fileID: 1440849009} + m_Layer: 0 + m_Name: SquadObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1440849008 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1440849007} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1440849009 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1440849007} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: eeef7310a48872043b4089979ec88b42, type: 3} + m_Name: + m_EditorClassIdentifier: + soldiers: + - {fileID: 619856670} + - {fileID: 728282087} diff --git a/The project/Assets/Scripts/Soldier.cs b/The project/Assets/Scripts/Soldier.cs index 8a2c6aea..1dd50f83 100644 --- a/The project/Assets/Scripts/Soldier.cs +++ b/The project/Assets/Scripts/Soldier.cs @@ -12,7 +12,7 @@ public class Soldier : MonoBehaviour private const float speedAttack = 1; // Start is called before the first frame update void Start(){ - InvokeRepeating("UpdateTarget", 0f, 0.5f); + //InvokeRepeating("UpdateTarget", 0f, 0.5f); // Call UpdateTarget method at the begining of the Start() // and repeat every 0.5 second @@ -39,14 +39,14 @@ public class Soldier : MonoBehaviour if (nearestEnemy != null && shortestDistance <= rangeAttack) { - target = nearestEnemey.transform; + //COMMENTED OUT-PICK REJECT THIS CONFLICT IF IT EVER HAPPENStarget = nearestEnemey.transform; } } // Update is called once per frame void Update() { - if (target == null) return; + //COMMENTED OUT-PICK REJECT THIS CONFLICT IF IT EVER HAPPENS if (target == null) return; } /* https://www.youtube.com/watch?v=QKhn2kl9_8I 08:54 Soldier attack diff --git a/The project/Assets/Scripts/Squad.cs b/The project/Assets/Scripts/Squad.cs new file mode 100644 index 00000000..6989bcee --- /dev/null +++ b/The project/Assets/Scripts/Squad.cs @@ -0,0 +1,54 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class Squad : MonoBehaviour +{ + public abstract class Order // generic order (to keep in queue) + { + public virtual void PassToSoldier(Soldier targetSoldier) // "translate" the order to the soldier + {// depending on implementation, for example call soldier's method to execute/plan this task + Debug.LogWarning($"Generic order passing not overriden\nSoldier {targetSoldier.name} received generic order"); + } + } + + public class MovementOrder : Order // example how to add new types of orders + { + public int x; + public int y; + public override void PassToSoldier(Soldier targetSoldier) + {// here we would set soldier's target position for example + Debug.Log($"Soldier {targetSoldier.name} received movement order towards coordinates {x},{y}"); + } + } + + [SerializeField] private List soldiers = new List(); // soldiers belonging to the squad + private Queue orders = new Queue(); // orders given to the squad + + private void Awake() + { + TickSystem.OnTick += HandleTick; + } + + private void HandleTick(TickSystem.OnTickEventArgs eventArgs) + {// pass a single order to all soldiers + if (orders.Count < 1) + return; // for now nothing to do here + + Order currentOrder = orders.Dequeue(); + Debug.Log($"Passing order {currentOrder.ToString()} on tick #{eventArgs.tickNumber}"); + foreach (Soldier soldier in soldiers) + { + currentOrder.PassToSoldier(soldier); + } + } + + [ContextMenu("DEBUG ADD PSEUDO MOVEMENT ORDER")] + public void DebugAddMovementOrder() + { + int targetX = 4; + int targetY = 2; + orders.Enqueue(new MovementOrder() { x = targetX, y = targetY }); + } +} diff --git a/The project/Assets/Scripts/Squad.cs.meta b/The project/Assets/Scripts/Squad.cs.meta new file mode 100644 index 00000000..ff5762a2 --- /dev/null +++ b/The project/Assets/Scripts/Squad.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: eeef7310a48872043b4089979ec88b42 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: