fixed movement
This commit is contained in:
63
Player.cs
63
Player.cs
@@ -1,4 +1,5 @@
|
||||
using OpenTK.Mathematics;
|
||||
using OpenTK.Windowing.Common;
|
||||
using OpenTK.Windowing.GraphicsLibraryFramework;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
@@ -16,14 +17,14 @@ namespace Voxel
|
||||
|
||||
private int _blockIndex = 0;
|
||||
private double _tickTime = 0;
|
||||
private bool _isJumping = false;
|
||||
private bool _isSprinting = false;
|
||||
|
||||
private Blocks _selectedBlock = Blocks.OakPlanks;
|
||||
private Vector3 previousPosition;
|
||||
|
||||
public Player(Vector3 startPos, World world) : base(startPos, 0.5f, 1.8f, world)
|
||||
{
|
||||
|
||||
Input.OnMouseWheel += SwitchBlock;
|
||||
}
|
||||
|
||||
public void PlaceBlock()
|
||||
@@ -46,26 +47,36 @@ namespace Voxel
|
||||
_world.SetBlock(x, y, z, Blocks.Air);
|
||||
}
|
||||
|
||||
public void Tick()
|
||||
public new void Tick()
|
||||
{
|
||||
previousPosition = Position;
|
||||
|
||||
bool sprinting = Input.GetKey(Keys.LeftControl);
|
||||
float forwards = 0;
|
||||
float sidewards = 0;
|
||||
|
||||
if (Input.GetKey(Keys.W))
|
||||
ApplyWalkSpeed(0, -1, sprinting);
|
||||
forwards = -1;
|
||||
if (Input.GetKey(Keys.S))
|
||||
ApplyWalkSpeed(0, 1, sprinting);
|
||||
forwards = 1;
|
||||
if (Input.GetKey(Keys.A))
|
||||
ApplyWalkSpeed(-1, 0, false);
|
||||
sidewards = -1;
|
||||
if (Input.GetKey(Keys.D))
|
||||
ApplyWalkSpeed(1, 0, false);
|
||||
sidewards = 1;
|
||||
|
||||
_isSprinting = (Input.GetKey(Keys.LeftControl) && forwards != 0);
|
||||
|
||||
if (Input.GetKey(Keys.Space) && OnGround)
|
||||
{
|
||||
Console.WriteLine("Jump");
|
||||
Velocity = new Vector3(Velocity.X, 0.42f, Velocity.Z);
|
||||
OnGround = false;
|
||||
|
||||
if (_isSprinting)
|
||||
{
|
||||
float yawRad = MathHelper.DegreesToRadians(Rotation);
|
||||
Velocity.X += 0.2f * MathF.Sin(yawRad);
|
||||
Velocity.Z += 0.2f * -MathF.Cos(yawRad);
|
||||
}
|
||||
}
|
||||
|
||||
if (Input.GetMouseButton(MouseButton.Right) && lastClick == 0)
|
||||
@@ -82,6 +93,7 @@ namespace Voxel
|
||||
BreakBlock();
|
||||
}
|
||||
|
||||
ApplyWalkSpeed(sidewards, forwards);
|
||||
base.Tick();
|
||||
|
||||
Console.WriteLine(Velocity.X.ToString() + ", " + Velocity.Y.ToString() + ", " + Velocity.Z.ToString());
|
||||
@@ -92,6 +104,16 @@ namespace Voxel
|
||||
Camera.Position = Vector3.Lerp(previousPosition, Position, alpha) + Vector3.UnitY * 0.62f;
|
||||
Rotation = Camera.Yaw;
|
||||
|
||||
if (_isSprinting)
|
||||
{
|
||||
Camera.TargetFOV = 70;
|
||||
Camera.UpdateProjection();
|
||||
}
|
||||
else
|
||||
{
|
||||
Camera.TargetFOV = 60;
|
||||
}
|
||||
|
||||
if (lastClick > 0)
|
||||
{
|
||||
lastClick -= deltaTime;
|
||||
@@ -104,7 +126,7 @@ namespace Voxel
|
||||
}
|
||||
}
|
||||
|
||||
public void ApplyWalkSpeed(float x, float z, bool sprinting)
|
||||
public void ApplyWalkSpeed(float x, float z)
|
||||
{
|
||||
Vector3 inputDir = new Vector3(x, 0, z);
|
||||
if (inputDir.LengthSquared > 0)
|
||||
@@ -120,15 +142,32 @@ namespace Voxel
|
||||
inputDir.X * sin + inputDir.Z * cos
|
||||
);
|
||||
|
||||
float speed = sprinting ? 0.13f : 0.10f;
|
||||
float M_t = _isSprinting ? 1.3f : 1f;
|
||||
float groundMultiplier = 0.6f;
|
||||
|
||||
Velocity += worldDir * speed;
|
||||
if (!OnGround)
|
||||
{
|
||||
Vector3 airAccel = worldDir * 0.02f * M_t;
|
||||
Velocity = new Vector3(Velocity.X + airAccel.X, Velocity.Y, Velocity.Z + airAccel.Z);
|
||||
}
|
||||
else
|
||||
{
|
||||
Vector3 groundAccel = worldDir * 0.1f * M_t;
|
||||
Velocity = new Vector3(Velocity.X * groundMultiplier + groundAccel.X,
|
||||
Velocity.Y,
|
||||
Velocity.Z * groundMultiplier + groundAccel.Z);
|
||||
}
|
||||
}
|
||||
|
||||
public void SwitchBlock(bool inverted)
|
||||
public void SwitchBlock(MouseWheelEventArgs e)
|
||||
{
|
||||
var keys = BlockDefinitions.Blocks.Keys.ToList();
|
||||
|
||||
bool inverted = false;
|
||||
|
||||
if (e.OffsetY < 0)
|
||||
inverted = true;
|
||||
|
||||
if (inverted)
|
||||
if (_blockIndex == 0)
|
||||
_blockIndex = keys.Count -1;
|
||||
|
||||
Reference in New Issue
Block a user