Merge pull request #343 from ChancellorIkseew/placing-block-by-button-long-press
Placing block by button long press
This commit is contained in:
commit
1777600275
@ -16,4 +16,5 @@ player.attack="mouse:left"
|
||||
player.build="mouse:right"
|
||||
player.pick="mouse:middle"
|
||||
player.drop="key:q"
|
||||
player.fast_interaction="key:x"
|
||||
hud.inventory="key:tab"
|
||||
|
||||
@ -31,6 +31,7 @@ hud.inventory=Inventory
|
||||
player.pick=Pick Block
|
||||
player.attack=Attack / Break
|
||||
player.build=Place Block
|
||||
player.fast_interaction=Accelerated interaction
|
||||
player.flight=Flight
|
||||
player.noclip=No-clip
|
||||
player.drop=Drop Item
|
||||
|
||||
@ -92,6 +92,7 @@ hud.inventory=Инвентарь
|
||||
player.pick=Подобрать Блок
|
||||
player.attack=Атаковать / Сломать
|
||||
player.build=Поставить Блок
|
||||
player.fast_interaction=Ускоренное взаимодействие
|
||||
player.flight=Полёт
|
||||
player.drop=Выбросить Предмет
|
||||
camera.zoom=Приближение
|
||||
|
||||
@ -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_BUILD = "player.build";
|
||||
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";
|
||||
|
||||
class EnginePaths;
|
||||
|
||||
@ -37,7 +37,7 @@ LevelScreen::LevelScreen(Engine* engine, std::unique_ptr<Level> level)
|
||||
auto menu = engine->getGUI()->getMenu();
|
||||
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);
|
||||
|
||||
worldRenderer = std::make_unique<WorldRenderer>(engine, frontend.get(), controller->getPlayer());
|
||||
|
||||
@ -3,6 +3,7 @@
|
||||
#include <algorithm>
|
||||
|
||||
#include "debug/Logger.hpp"
|
||||
#include "engine.hpp"
|
||||
#include "files/WorldFiles.hpp"
|
||||
#include "interfaces/Object.hpp"
|
||||
#include "objects/Entities.hpp"
|
||||
@ -15,10 +16,8 @@
|
||||
|
||||
static debug::Logger logger("level-control");
|
||||
|
||||
LevelController::LevelController(
|
||||
EngineSettings& settings, std::unique_ptr<Level> level
|
||||
)
|
||||
: settings(settings),
|
||||
LevelController::LevelController(Engine* engine, std::unique_ptr<Level> level)
|
||||
: settings(engine->getSettings()),
|
||||
level(std::move(level)),
|
||||
blocks(std::make_unique<BlocksController>(
|
||||
this->level.get(), settings.chunks.padding.get()
|
||||
@ -27,7 +26,7 @@ LevelController::LevelController(
|
||||
this->level.get(), settings.chunks.padding.get()
|
||||
)),
|
||||
player(std::make_unique<PlayerController>(
|
||||
this->level.get(), settings, blocks.get()
|
||||
engine, this->level.get(), blocks.get()
|
||||
)) {
|
||||
scripting::on_world_load(this);
|
||||
}
|
||||
|
||||
@ -6,6 +6,7 @@
|
||||
#include "ChunksController.hpp"
|
||||
#include "PlayerController.hpp"
|
||||
|
||||
class Engine;
|
||||
class Level;
|
||||
class Player;
|
||||
struct EngineSettings;
|
||||
@ -19,7 +20,7 @@ class LevelController {
|
||||
std::unique_ptr<ChunksController> chunks;
|
||||
std::unique_ptr<PlayerController> player;
|
||||
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 input is user input allowed to be handled
|
||||
|
||||
@ -6,6 +6,7 @@
|
||||
|
||||
#include "content/Content.hpp"
|
||||
#include "core_defs.hpp"
|
||||
#include "engine.hpp"
|
||||
#include "items/Inventory.hpp"
|
||||
#include "items/ItemDef.hpp"
|
||||
#include "items/ItemStack.hpp"
|
||||
@ -26,6 +27,7 @@
|
||||
#include "BlocksController.hpp"
|
||||
#include "scripting/scripting.hpp"
|
||||
|
||||
const float INTERACTION_RELOAD = 0.160f;
|
||||
const float STEPS_SPEED = 2.2f;
|
||||
const float CAM_SHAKE_OFFSET = 0.0075f;
|
||||
const float CAM_SHAKE_OFFSET_Y = 0.031f;
|
||||
@ -187,13 +189,12 @@ void CameraControl::update(PlayerInput input, float delta, Chunks* chunks) {
|
||||
}
|
||||
|
||||
PlayerController::PlayerController(
|
||||
Level* level,
|
||||
const EngineSettings& settings,
|
||||
Engine* engine, Level* level,
|
||||
BlocksController* blocksController
|
||||
)
|
||||
: level(level),
|
||||
: engine(engine), level(level),
|
||||
player(level->getObject<Player>(0)),
|
||||
camControl(player, settings.camera),
|
||||
camControl(player, engine->getSettings().camera),
|
||||
blocksController(blocksController) {
|
||||
}
|
||||
|
||||
@ -484,13 +485,20 @@ void PlayerController::updateInteraction() {
|
||||
auto indices = level->content->getIndices();
|
||||
auto chunks = level->chunks.get();
|
||||
const auto& selection = player->selection;
|
||||
|
||||
bool xkey = Events::pressed(keycode::X);
|
||||
bool lclick = Events::jactive(BIND_PLAYER_ATTACK) ||
|
||||
(xkey && Events::active(BIND_PLAYER_ATTACK));
|
||||
bool rclick = Events::jactive(BIND_PLAYER_BUILD) ||
|
||||
(xkey && Events::active(BIND_PLAYER_BUILD));
|
||||
|
||||
if (interactionTimer > 0.0f) {
|
||||
interactionTimer -= static_cast<float>(engine->getDelta());
|
||||
}
|
||||
bool xkey = Events::active(BIND_PLAYER_FAST_INTERACTOIN);
|
||||
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();
|
||||
const ItemStack& stack = inventory->getSlot(player->getChosenSlot());
|
||||
|
||||
@ -6,6 +6,7 @@
|
||||
|
||||
#include "objects/Player.hpp"
|
||||
|
||||
class Engine;
|
||||
class Camera;
|
||||
class Level;
|
||||
class Block;
|
||||
@ -45,12 +46,14 @@ public:
|
||||
};
|
||||
|
||||
class PlayerController {
|
||||
Engine* engine;
|
||||
Level* level;
|
||||
std::shared_ptr<Player> player;
|
||||
PlayerInput input {};
|
||||
CameraControl camControl;
|
||||
BlocksController* blocksController;
|
||||
|
||||
float interactionTimer = 0.0f;
|
||||
void updateKeyboard();
|
||||
void resetKeyboard();
|
||||
void updatePlayer(float delta);
|
||||
@ -65,9 +68,7 @@ class PlayerController {
|
||||
voxel* updateSelection(float maxDistance);
|
||||
public:
|
||||
PlayerController(
|
||||
Level* level,
|
||||
const EngineSettings& settings,
|
||||
BlocksController* blocksController
|
||||
Engine* engine, Level* level, BlocksController* blocksController
|
||||
);
|
||||
void update(float delta, bool input, bool pause);
|
||||
void postUpdate(float delta, bool input, bool pause);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user