Level Grid

master
Sascha 2023-05-02 21:05:37 +07:00
parent 3c0d9812f9
commit 208d2a2352
504 changed files with 7228 additions and 5383 deletions

@ -56,6 +56,7 @@
<Compile Include="Assets/Scripts/Testing.cs"/>
<Compile Include="Assets/Scripts/Grid/GridObject.cs"/>
<Compile Include="Assets/Scripts/Grid/GridPosition.cs"/>
<Compile Include="Assets/Scripts/Grid/LevelGrid.cs"/>
<Folder Include="Assets"/>
<Folder Include="Library/BuildInstructions"/>
<None Include="Assets/TextMesh Pro/Shaders/TMPro.cginc"/>

@ -122,6 +122,52 @@ NavMeshSettings:
debug:
m_Flags: 0
m_NavMeshData: {fileID: 0}
--- !u!1 &36003318
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 36003320}
- component: {fileID: 36003319}
m_Layer: 0
m_Name: LevelGrid
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!114 &36003319
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 36003318}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 7a133b47a7f2fe5e4a125626d7df416f, type: 3}
m_Name:
m_EditorClassIdentifier:
GridDebugObjectPrefab: {fileID: 6180427947715601050, guid: 2c784f150865e50af8702766de65e504,
type: 3}
--- !u!4 &36003320
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 36003318}
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: 1
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 10
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &330585543
GameObject:
m_ObjectHideFlags: 0
@ -404,8 +450,6 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 2f9b01cad11e09f3a9544f877321cc52, type: 3}
m_Name:
m_EditorClassIdentifier:
GridDebugObjectPrefab: {fileID: 6180427947715601050, guid: 2c784f150865e50af8702766de65e504,
type: 3}
--- !u!4 &506381888
Transform:
m_ObjectHideFlags: 0

@ -1,11 +1,19 @@
using System.Collections.Generic;
using System.Linq;
public class GridObject {
public GridObject(GridSystem gridSystem, GridPosition gridPosition) {
GridSystem = gridSystem;
GridPosition = gridPosition;
UnitList = new();
}
public GridSystem GridSystem { get; private set; }
public GridPosition GridPosition { get; private set; }
public List<Unit> UnitList { get; set; }
public override string ToString() => GridPosition.ToString();
public override string ToString() {
string unitString = UnitList.Aggregate("", (current, unit) => current + (unit + "\n"));
return $"{GridPosition.ToString()}\n{unitString}";
}
}

@ -1,4 +1,6 @@
public struct GridPosition {
using System;
public struct GridPosition : IEquatable<GridPosition> {
public int X;
public int Z;
@ -8,4 +10,10 @@ public struct GridPosition {
}
public override string ToString() => $"{X};{Z}";
public static bool operator ==(GridPosition a, GridPosition b) => a.X == b.X && a.Z == b.Z;
public static bool operator !=(GridPosition a, GridPosition b) => a.X != b.X || a.Z != b.Z;
public override bool Equals(object obj) => obj is GridPosition other && Equals(other);
public override int GetHashCode() => HashCode.Combine(X, Z);
public bool Equals(GridPosition other) => X == other.X && Z == other.Z;
}

@ -0,0 +1,35 @@
using System.Collections.Generic;
using UnityEngine;
public class LevelGrid : MonoBehaviour {
[SerializeField] private Transform GridDebugObjectPrefab;
private GridSystem gridSystem;
public static LevelGrid Instance { get; private set; }
private void Awake() {
if (Instance is not null) {
Debug.LogError($"There is more than one LevelGrid! {transform} - {Instance}");
Destroy(gameObject);
return;
}
Instance = this;
gridSystem = new(10, 10, 2f);
gridSystem.CreateDebugObjects(GridDebugObjectPrefab);
}
public void AddUnitAtGridPosition(GridPosition gridPosition, Unit unit) => gridSystem.GetGridObject(gridPosition).UnitList.Add(unit);
public List<Unit> GetUnitListAtGridPosition(GridPosition gridPosition) => gridSystem.GetGridObject(gridPosition).UnitList;
public void RemoveUnitAtGridPosition(GridPosition gridPosition, Unit unit) => gridSystem.GetGridObject(gridPosition).UnitList.Remove(unit);
public GridPosition GetGridPosition(Vector3 worldPosition) => gridSystem.GetGridPosition(worldPosition);
public void UnitMovedGridPosition(Unit unit, GridPosition fromGridPosition, GridPosition toGridPosition) {
RemoveUnitAtGridPosition(fromGridPosition, unit);
AddUnitAtGridPosition(toGridPosition, unit);
}
}

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

@ -1,15 +1,7 @@
using UnityEngine;
public class Testing : MonoBehaviour {
[SerializeField] private Transform GridDebugObjectPrefab;
private void Start() { }
private GridSystem gridSystem;
private void Start() {
gridSystem = new GridSystem(10, 10, 2f);
gridSystem.CreateDebugObjects(GridDebugObjectPrefab);
Debug.Log(new GridPosition(5, 7));
}
private void Update() => Debug.Log(gridSystem.GetGridPosition(MouseWorld.GetPosition()));
private void Update() { }
}

@ -9,9 +9,15 @@ public class Unit : MonoBehaviour {
[SerializeField] private Animator UnitAnimator;
private Vector3 targetPosition;
public GridPosition GridPosition { get; private set; }
private void Awake() => targetPosition = transform.position;
private void Start() {
GridPosition = LevelGrid.Instance.GetGridPosition(transform.position);
LevelGrid.Instance.AddUnitAtGridPosition(GridPosition, this);
}
private void Update() {
if (Vector3.Distance(targetPosition, transform.position) > stoppingDistance) {
Vector3 moveDirection = (targetPosition - transform.position).normalized;
@ -22,9 +28,13 @@ public class Unit : MonoBehaviour {
else {
UnitAnimator.SetBool(isWalking, false);
}
}
public void Move(Vector3 newTargetPosition) {
targetPosition = newTargetPosition;
GridPosition newGridPosition = LevelGrid.Instance.GetGridPosition(transform.position);
if (newGridPosition != GridPosition) {
LevelGrid.Instance.UnitMovedGridPosition(this, GridPosition, newGridPosition);
GridPosition = newGridPosition;
}
}
public void Move(Vector3 newTargetPosition) => targetPosition = newTargetPosition;
}

Binary file not shown.

Binary file not shown.

File diff suppressed because one or more lines are too long

Binary file not shown.

File diff suppressed because one or more lines are too long

Some files were not shown because too many files have changed in this diff Show More