using UnityEngine; namespace Cyber.Entities { /// /// A syncable component that all characters have. Controls the character's subsystems. /// public class Character : SyncBase { /// /// How fast the player should move in Unity's spatial units per second. /// public float MovementSpeed = 5.0f; /// /// The character controller, used to move the character. Handles collisions. /// public CharacterController CharacterController; /// /// The head transform for looking around. /// public Transform Head; private Vector3 MovementDirection = new Vector3(); /// /// Moves the character in the given direction. /// /// Movement direction. public void Move(Vector3 Direction) { if (!Direction.Equals(MovementDirection)) { MovementDirection = Direction.normalized; } } /// /// Stops the player from moving. /// public void Stop() { if (Moving()) { MovementDirection = new Vector3(); } } /// /// Sets the character's rotation. /// /// Rotation in euler angles. public void SetRotation(Vector3 EulerAngles) { Head.localEulerAngles = EulerAngles; } /// /// Whether the player is moving or not. /// public bool Moving() { return MovementDirection.sqrMagnitude != 0; } private void FixedUpdate() { CharacterController.Move(MovementDirection * MovementSpeed * Time.fixedDeltaTime); } } }