Support multiple and custom levels

This commit is contained in:
Martin Prokoph
2025-01-15 17:42:28 +01:00
parent 2959d06db4
commit f5297dfb66
10 changed files with 127 additions and 14 deletions

View File

@@ -2,19 +2,20 @@
#include "world.hpp"
#include "blockRegistry.hpp"
bool tryWalk(World& world, Player& player, bool left);
bool tryGoDown(World& world, Player& player);
bool tryGoUp(World& world, Player& player);
bool onInput(char lastChar, World& world, Player& player) {
switch (lastChar) {
case ' ':
case 'w':
case 'W':
return tryGoUp(world, player);
case 'a':
case 'A':
player.move(-1, 0);
return true;
return tryWalk(world, player, true);
case 's':
case 'S':
@@ -22,12 +23,18 @@ bool onInput(char lastChar, World& world, Player& player) {
case 'd':
case 'D':
player.move(1, 0);
return true;
return tryWalk(world, player, false);
default: return false;
}
}
bool tryWalk(World& world, Player& player, bool left) {
if (!world.getBlockAt(player.getPos()+(left ? BlockPos(-1, 1) : BlockPos(1, 1))).getSettings().hasCollision()) {
player.move(left ? BlockPos(-1, 0) : BlockPos(1,0));
return true;
}
return false;
}
bool tryGoDown(World& world, Player& player) {
if (world.getBlockAt(player.getPos()+BlockPos(0, 2)).getSettings().isClimbableFromTop() || world.getBlockAt(player.getPos()+BlockPos(0, 3)).getSettings().isClimbableFromTop()) {
player.move(0, 1);
@@ -40,5 +47,13 @@ bool tryGoUp(World& world, Player& player) {
player.move(0, -1);
return true;
}
else if (world.getBlockAt(player.getPos()+BlockPos(1, 1)).getSettings().hasCollision() && !world.getBlockAt(player.getPos()+BlockPos(1, 0)).getSettings().isSolid()) {
player.move(1, -1);
return true;
}
else if (world.getBlockAt(player.getPos()+BlockPos(-1, 1)).getSettings().hasCollision() && !world.getBlockAt(player.getPos()+BlockPos(-1, 0)).getSettings().isSolid()) {
player.move(-1, -1);
return true;
}
return false;
}