Merge branch 'main' into particles-first

This commit is contained in:
MihailRis
2024-11-03 12:29:54 +03:00
9 changed files with 37 additions and 22 deletions
+1
View File
@@ -16,4 +16,5 @@ player.attack="mouse:left"
player.build="mouse:right" player.build="mouse:right"
player.pick="mouse:middle" player.pick="mouse:middle"
player.drop="key:q" player.drop="key:q"
player.fast_interaction="key:x"
hud.inventory="key:tab" hud.inventory="key:tab"
+1
View File
@@ -31,6 +31,7 @@ hud.inventory=Inventory
player.pick=Pick Block player.pick=Pick Block
player.attack=Attack / Break player.attack=Attack / Break
player.build=Place Block player.build=Place Block
player.fast_interaction=Accelerated interaction
player.flight=Flight player.flight=Flight
player.noclip=No-clip player.noclip=No-clip
player.drop=Drop Item player.drop=Drop Item
+1
View File
@@ -92,6 +92,7 @@ hud.inventory=Инвентарь
player.pick=Подобрать Блок player.pick=Подобрать Блок
player.attack=Атаковать / Сломать player.attack=Атаковать / Сломать
player.build=Поставить Блок player.build=Поставить Блок
player.fast_interaction=Ускоренное взаимодействие
player.flight=Полёт player.flight=Полёт
player.drop=Выбросить Предмет player.drop=Выбросить Предмет
camera.zoom=Приближение camera.zoom=Приближение
+2
View File
@@ -27,6 +27,8 @@ inline const std::string BIND_PLAYER_FLIGHT = "player.flight";
inline const std::string BIND_PLAYER_ATTACK = "player.attack"; inline const std::string BIND_PLAYER_ATTACK = "player.attack";
inline const std::string BIND_PLAYER_BUILD = "player.build"; inline const std::string BIND_PLAYER_BUILD = "player.build";
inline const std::string BIND_PLAYER_PICK = "player.pick"; inline const std::string BIND_PLAYER_PICK = "player.pick";
inline const std::string BIND_PLAYER_FAST_INTERACTOIN =
"player.fast_interaction";
inline const std::string BIND_HUD_INVENTORY = "hud.inventory"; inline const std::string BIND_HUD_INVENTORY = "hud.inventory";
class EnginePaths; class EnginePaths;
+1 -1
View File
@@ -37,7 +37,7 @@ LevelScreen::LevelScreen(Engine* engine, std::unique_ptr<Level> level)
auto menu = engine->getGUI()->getMenu(); auto menu = engine->getGUI()->getMenu();
menu->reset(); menu->reset();
controller = std::make_unique<LevelController>(settings, std::move(level)); controller = std::make_unique<LevelController>(engine, std::move(level));
frontend = std::make_unique<LevelFrontend>(controller->getPlayer(), controller.get(), assets); frontend = std::make_unique<LevelFrontend>(controller->getPlayer(), controller.get(), assets);
worldRenderer = std::make_unique<WorldRenderer>(engine, frontend.get(), controller->getPlayer()); worldRenderer = std::make_unique<WorldRenderer>(engine, frontend.get(), controller->getPlayer());
+4 -5
View File
@@ -3,6 +3,7 @@
#include <algorithm> #include <algorithm>
#include "debug/Logger.hpp" #include "debug/Logger.hpp"
#include "engine.hpp"
#include "files/WorldFiles.hpp" #include "files/WorldFiles.hpp"
#include "interfaces/Object.hpp" #include "interfaces/Object.hpp"
#include "objects/Entities.hpp" #include "objects/Entities.hpp"
@@ -15,10 +16,8 @@
static debug::Logger logger("level-control"); static debug::Logger logger("level-control");
LevelController::LevelController( LevelController::LevelController(Engine* engine, std::unique_ptr<Level> level)
EngineSettings& settings, std::unique_ptr<Level> level : settings(engine->getSettings()),
)
: settings(settings),
level(std::move(level)), level(std::move(level)),
blocks(std::make_unique<BlocksController>( blocks(std::make_unique<BlocksController>(
this->level.get(), settings.chunks.padding.get() this->level.get(), settings.chunks.padding.get()
@@ -27,7 +26,7 @@ LevelController::LevelController(
this->level.get(), settings.chunks.padding.get() this->level.get(), settings.chunks.padding.get()
)), )),
player(std::make_unique<PlayerController>( player(std::make_unique<PlayerController>(
this->level.get(), settings, blocks.get() settings, this->level.get(), blocks.get()
)) { )) {
scripting::on_world_load(this); scripting::on_world_load(this);
} }
+2 -1
View File
@@ -6,6 +6,7 @@
#include "ChunksController.hpp" #include "ChunksController.hpp"
#include "PlayerController.hpp" #include "PlayerController.hpp"
class Engine;
class Level; class Level;
class Player; class Player;
struct EngineSettings; struct EngineSettings;
@@ -19,7 +20,7 @@ class LevelController {
std::unique_ptr<ChunksController> chunks; std::unique_ptr<ChunksController> chunks;
std::unique_ptr<PlayerController> player; std::unique_ptr<PlayerController> player;
public: public:
LevelController(EngineSettings& settings, std::unique_ptr<Level> level); LevelController(Engine* engine, std::unique_ptr<Level> level);
/// @param delta time elapsed since the last update /// @param delta time elapsed since the last update
/// @param input is user input allowed to be handled /// @param input is user input allowed to be handled
+19 -11
View File
@@ -6,6 +6,7 @@
#include "content/Content.hpp" #include "content/Content.hpp"
#include "core_defs.hpp" #include "core_defs.hpp"
#include "settings.hpp"
#include "items/Inventory.hpp" #include "items/Inventory.hpp"
#include "items/ItemDef.hpp" #include "items/ItemDef.hpp"
#include "items/ItemStack.hpp" #include "items/ItemStack.hpp"
@@ -26,6 +27,7 @@
#include "BlocksController.hpp" #include "BlocksController.hpp"
#include "scripting/scripting.hpp" #include "scripting/scripting.hpp"
const float INTERACTION_RELOAD = 0.160f;
const float STEPS_SPEED = 2.2f; const float STEPS_SPEED = 2.2f;
const float CAM_SHAKE_OFFSET = 0.0075f; const float CAM_SHAKE_OFFSET = 0.0075f;
const float CAM_SHAKE_OFFSET_Y = 0.031f; const float CAM_SHAKE_OFFSET_Y = 0.031f;
@@ -187,11 +189,10 @@ void CameraControl::update(PlayerInput input, float delta, Chunks* chunks) {
} }
PlayerController::PlayerController( PlayerController::PlayerController(
Level* level, const EngineSettings& settings, Level* level,
const EngineSettings& settings,
BlocksController* blocksController BlocksController* blocksController
) )
: level(level), : settings(settings), level(level),
player(level->getObject<Player>(0)), player(level->getObject<Player>(0)),
camControl(player, settings.camera), camControl(player, settings.camera),
blocksController(blocksController) { blocksController(blocksController) {
@@ -262,7 +263,7 @@ void PlayerController::postUpdate(float delta, bool input, bool pause) {
player->postUpdate(); player->postUpdate();
camControl.update(this->input, pause ? 0.0f : delta, level->chunks.get()); camControl.update(this->input, pause ? 0.0f : delta, level->chunks.get());
if (input) { if (input) {
updateInteraction(); updateInteraction(delta);
} else { } else {
player->selection = {}; player->selection = {};
} }
@@ -480,17 +481,24 @@ void PlayerController::updateEntityInteraction(
} }
} }
void PlayerController::updateInteraction() { void PlayerController::updateInteraction(float delta) {
auto indices = level->content->getIndices(); auto indices = level->content->getIndices();
auto chunks = level->chunks.get(); auto chunks = level->chunks.get();
const auto& selection = player->selection; const auto& selection = player->selection;
bool xkey = Events::pressed(keycode::X); if (interactionTimer > 0.0f) {
bool lclick = Events::jactive(BIND_PLAYER_ATTACK) || interactionTimer -= delta;
(xkey && Events::active(BIND_PLAYER_ATTACK)); }
bool rclick = Events::jactive(BIND_PLAYER_BUILD) || bool xkey = Events::active(BIND_PLAYER_FAST_INTERACTOIN);
(xkey && Events::active(BIND_PLAYER_BUILD));
float maxDistance = xkey ? 200.0f : 10.0f; float maxDistance = xkey ? 200.0f : 10.0f;
bool longInteraction = interactionTimer <= 0 || xkey;
bool lclick = Events::jactive(BIND_PLAYER_ATTACK) ||
(longInteraction && Events::active(BIND_PLAYER_ATTACK));
bool rclick = Events::jactive(BIND_PLAYER_BUILD) ||
(longInteraction && Events::active(BIND_PLAYER_BUILD));
if (lclick || rclick) {
interactionTimer = INTERACTION_RELOAD;
}
auto inventory = player->getInventory(); auto inventory = player->getInventory();
const ItemStack& stack = inventory->getSlot(player->getChosenSlot()); const ItemStack& stack = inventory->getSlot(player->getChosenSlot());
+6 -4
View File
@@ -6,6 +6,7 @@
#include "objects/Player.hpp" #include "objects/Player.hpp"
class Engine;
class Camera; class Camera;
class Level; class Level;
class Block; class Block;
@@ -13,6 +14,7 @@ class Chunks;
class BlocksController; class BlocksController;
struct Hitbox; struct Hitbox;
struct CameraSettings; struct CameraSettings;
struct EngineSettings;
class CameraControl { class CameraControl {
std::shared_ptr<Player> player; std::shared_ptr<Player> player;
@@ -45,17 +47,19 @@ public:
}; };
class PlayerController { class PlayerController {
const EngineSettings& settings;
Level* level; Level* level;
std::shared_ptr<Player> player; std::shared_ptr<Player> player;
PlayerInput input {}; PlayerInput input {};
CameraControl camControl; CameraControl camControl;
BlocksController* blocksController; BlocksController* blocksController;
float interactionTimer = 0.0f;
void updateKeyboard(); void updateKeyboard();
void resetKeyboard(); void resetKeyboard();
void updatePlayer(float delta); void updatePlayer(float delta);
void updateEntityInteraction(entityid_t eid, bool lclick, bool rclick); void updateEntityInteraction(entityid_t eid, bool lclick, bool rclick);
void updateInteraction(); void updateInteraction(float delta);
float stepsTimer = 0.0f; float stepsTimer = 0.0f;
void onFootstep(const Hitbox& hitbox); void onFootstep(const Hitbox& hitbox);
@@ -65,9 +69,7 @@ class PlayerController {
voxel* updateSelection(float maxDistance); voxel* updateSelection(float maxDistance);
public: public:
PlayerController( PlayerController(
Level* level, const EngineSettings& settings, Level* level, BlocksController* blocksController
const EngineSettings& settings,
BlocksController* blocksController
); );
void update(float delta, bool input, bool pause); void update(float delta, bool input, bool pause);
void postUpdate(float delta, bool input, bool pause); void postUpdate(float delta, bool input, bool pause);