mirror of
https://github.com/kuhyx/WUT_Computer_Science.git
synced 2026-07-04 14:43:08 +02:00
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:
parent
100f074ec1
commit
50882e48db
@ -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}
|
||||
|
||||
@ -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
|
||||
|
||||
54
The project/Assets/Scripts/Squad.cs
Normal file
54
The project/Assets/Scripts/Squad.cs
Normal 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 });
|
||||
}
|
||||
}
|
||||
11
The project/Assets/Scripts/Squad.cs.meta
Normal file
11
The project/Assets/Scripts/Squad.cs.meta
Normal file
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: eeef7310a48872043b4089979ec88b42
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Loading…
Reference in New Issue
Block a user