feat: add Player class wrapping Camera with chunk-coordinate accessor

This commit is contained in:
2026-06-01 10:37:42 +02:00
parent 6a68953c9a
commit 2afeee50d5
2 changed files with 98 additions and 0 deletions

45
Game/Player.cs Normal file
View File

@@ -0,0 +1,45 @@
using OpenTK.Mathematics;
using VoxelEngine.Core;
using VoxelEngine.Rendering;
using VoxelChunk = VoxelEngine.World.Chunk.Chunk;
namespace VoxelEngine.Game;
public sealed class Player
{
private readonly Configuration _cfg;
public Camera Camera { get; }
public Vector3 Position => this.Camera.Position;
public float MoveSpeed => this._cfg.MoveSpeed;
public float MouseSensitivity => this._cfg.MouseSensitivity;
public Vector3i ChunkPosition
{
get
{
Vector3 p = this.Position;
return new Vector3i(
Player.FloorDiv((int)MathF.Floor(p.X), VoxelChunk.Size),
Player.FloorDiv((int)MathF.Floor(p.Y), VoxelChunk.Size),
Player.FloorDiv((int)MathF.Floor(p.Z), VoxelChunk.Size));
}
}
public Player(Configuration cfg, Vector3 spawnPosition, float aspectRatio)
{
this._cfg = cfg;
this.Camera = new Camera(spawnPosition, aspectRatio) { Fov = cfg.Fov };
}
public void Move(Vector3 delta) => this.Camera.Move(delta);
public void AddRotation(float yawDelta, float pitchDelta) => this.Camera.AddRotation(yawDelta, pitchDelta);
private static int FloorDiv(int value, int size)
{
int q = value / size;
if (value % size != 0 && value < 0) q--;
return q;
}
}