by frame skip off i mean that the game should just slow down if the fps drops, just like in terraria, i got this code currently and want to implement it to it:
static class Globals
{
static public Time dt = new Time();
static public Vector2f Friction
{
get
{
return new Vector2f(2 * dt.AsSeconds(), 0);
}
}
}
class Player
{
private void StartMoving(int _direction)
{
moving = true;
direction = _direction;
heldfor = 1;
Move(direction);
}
public void Move(int _direction)
{
if(!moving)
{
StartMoving(_direction);
return;
}
if(direction == _direction)
{
if(heldfor < heldforlimit) heldfor++;
Velocity += new Vector2f(((speed * (heldfor / 10f)) * direction) * Globals.dt.AsSeconds(), 0);
}
else
{
direction = _direction;
heldfor /= 2;
Velocity = new Vector2f(Velocity.X / 1.5f, Velocity.Y);
if (heldfor < heldforlimit) heldfor++;
Velocity += new Vector2f(((speed * (heldfor / 10f)) * direction) * Globals.dt.AsSeconds(), 0);
}
}
public void StopMoving()
{
moving = false;
heldfor = 1;
}
public void Update(Time dt)
{
if(!moving)
{
if(Math.Abs(Velocity.X) - Globals.Friction.X < 0)
{
Velocity.X = 0;
}
else
{ // i really should make this direction independent and apply direction at end of the update
Velocity.X = Velocity.X > 0 ? Velocity.X - Globals.Friction.X : Velocity.X + Globals.Friction.X;
}
if (Math.Abs(Velocity.X) <= velocitySnapX) Velocity.X = 0;
if (Math.Abs(Velocity.Y) <= velocitySnapY) Velocity.Y = 0;
}
if (Math.Abs(Velocity.X) > XMaxvel) Velocity.X = XMaxvel * direction;
if (Math.Abs(Velocity.Y) > YMaxvel) Velocity.Y = YMaxvel * direction;
Position += Velocity;
}
}
class Program
{
Player player = new Player();
while(game.isrunning) // this is made up as the genuine code is too messy
{
if (Keyboard.IsKeyPressed(Keyboard.Key.Right))
{
player.Move(1);
}
if (Keyboard.IsKeyPressed(Keyboard.Key.Left))
{
player.Move(-1);
}
window.Clear(Color.White);
window.Draw(player);
player.Update(Globals.dt);
window.DispatchEvents();
window.Display();
window.SetView(mainview);
Globals.dt = deltaclock.Restart();
}
}