Simple Node Based movement System

Every Field is a Node
Additional: Camera dump smooth follow
This commit is contained in:
brausjonas
2023-01-23 22:10:02 +01:00
parent 0142f00f8b
commit 4f0dcefbcb
12 changed files with 1052 additions and 379 deletions
@@ -0,0 +1,126 @@
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Random = UnityEngine.Random;
public class Player : MonoBehaviour
{
[SerializeField] private Field nextField;
private Field currentField;
[SerializeField] private GameObject dice;
private Vector3 moveTo = Vector3.zero;
private Vector3 lastPos = Vector3.zero;
private float speed = 5;
private float interPol = 0;
private int wurfelZahl = 0;
private bool activated = true;
private bool wait = false;
private void Start()
{
Debug.Log("Test: zum Würfeln Leertaste drücken!");
}
private void Update()
{
if(activated)
{
//Generiere Würfelzahl von 1-6 wenn gerade gewürfelt werden darf
if (Input.GetKeyDown(KeyCode.Space) && wurfelZahl == 0)
{
wurfelZahl = Random.Range(1, 7);
Debug.Log("Test: gewürfelt wurde " + wurfelZahl);
//nächstes Feld anvisieren
TargetNextField();
}
}
}
private void FixedUpdate()
{
if (activated)
{
if (!wait)
{
//Laufe zum nöchsten Feld, falls noch Züge übrig sind
if (interPol < 1 && wurfelZahl > 0)
{
InterPolerate();
}
//Würfelzahl um 1 verringern falls noch züge übrig sind
else if (wurfelZahl > 0 )
{
wurfelZahl--;
//Visiere das nächste Feld an falls noch ein Zug übrig ist (Player steht gerade auf einem Feld oder läuft darüber)
if (wurfelZahl > 0)
{
TargetNextField();
}
}
//Der Spieler steht gerade
else
{
}
}
else
{
//TEST!!!!!!!!!!!!!!!
//TODO: Replace with selection arrows
if (Input.GetKeyDown(KeyCode.N))
{
nextField = nextField = nextField.Target[0];
moveTo = nextField.transform.position;
wait = false;
}
else if (Input.GetKeyDown(KeyCode.A))
{
nextField = nextField = nextField.Target[1];
moveTo = nextField.transform.position;
wait = false;
}
}
}
}
//Das nächste Feld aufgrund des aktuellen Feldes anvisieren
private void TargetNextField()
{
interPol = 0;
lastPos = transform.position;
currentField = nextField;
if(nextField.Target.Length == 1)
{
nextField = nextField.Target[0];
moveTo = nextField.transform.position;
}
else
{
wait = true;
Debug.Log("Test: AlternativWeg = A NormalerWeg = N");
}
}
//Bewegt den Player von einem Punkt(lastPos) zu einem anderen Punkt(moveTo) mit konstanter Geschwindigkeit
private void InterPolerate()
{
Vector3 nextPoint = Vector3.Lerp(lastPos, moveTo, interPol);
transform.position = new Vector3(nextPoint.x, transform.position.y, nextPoint.z);
interPol += (Time.deltaTime * speed) / Mathf.Abs(Vector3.Distance(moveTo, lastPos));
}
//Aktiviert den Player
public void Activate()
{
activated = true;
}
//Deaktiviert den Player
public void DeActivate()
{
activated = false;
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 0c5b74f4bdf875641a8d9ac432a5166f
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: