GodotComponentTest/entities/Player.cs

71 lines
2.2 KiB
C#

using Godot;
using System;
public class Player : Entity
{
// public members
public Vector3 TargetPosition = Vector3.Zero;
public TaskQueueComponent TaskQueueComponent;
public NavigationComponent Navigation
{
get { return _navigationComponent; }
}
// private members
private MovableComponent _movable;
private Spatial _geometry;
private WorldInfoComponent _worldInfo;
private GroundMotionComponent _groundMotion;
private NavigationComponent _navigationComponent;
// Called when the node enters the scene tree for the first time.
public override void _Ready()
{
_groundMotion = new GroundMotionComponent();
_worldInfo = (WorldInfoComponent)FindNode("WorldInfo", false);
_navigationComponent = (NavigationComponent)FindNode("Navigation", false);
_navigationComponent.TileWorld = _worldInfo.TileWorld;
TaskQueueComponent = new TaskQueueComponent();
_geometry = (Spatial)FindNode("Geometry", false);
}
public override void _PhysicsProcess(float delta)
{
base._PhysicsProcess(delta);
if (_navigationComponent == null)
{
return;
}
if (TaskQueueComponent != null && TaskQueueComponent.Queue.Count > 0)
{
TaskQueueComponent.Process(this, delta);
if (TaskQueueComponent.Queue.Count > 0)
{
var currentTask = TaskQueueComponent.Queue.Peek();
if (currentTask is TaskQueueComponent.NavigationTask)
{
TaskQueueComponent.NavigationTask navigationTask = (TaskQueueComponent.NavigationTask)currentTask;
_navigationComponent.Plan(GlobalTransform, navigationTask.NavigationPoint);
}
}
}
_navigationComponent.UpdateCurrentGoal(GlobalTransform);
_groundMotion.PhysicsProcess(delta, this, _navigationComponent.CurrentGoalPositionWorld, _navigationComponent.CurrentGoalOrientationWorld, _worldInfo.TileWorld);
}
public override void _Process(float delta)
{
if (_navigationComponent != null)
{
_navigationComponent.UpdateCurrentGoal(GlobalTransform);
}
}
}