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
This commit is contained in:
Gabriel Ksawery Skowron-Rodriguez 2022-05-16 14:21:52 +02:00
parent 100f074ec1
commit 50882e48db
4 changed files with 169 additions and 13 deletions

View File

@ -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}

View File

@ -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

View File

@ -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<Soldier> soldiers = new List<Soldier>(); // soldiers belonging to the squad
private Queue<Order> orders = new Queue<Order>(); // 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 });
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: eeef7310a48872043b4089979ec88b42
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: