player blocks interaction callbacks

This commit is contained in:
MihailRis
2024-03-09 01:56:45 +03:00
parent ec10c77707
commit 87dd1dd6b2
2 changed files with 194 additions and 56 deletions
+45 -4
View File
@@ -2,6 +2,8 @@
#define PLAYER_CONTROL_H_
#include <memory>
#include <vector>
#include <functional>
#include <glm/glm.hpp>
#include "../settings.h"
@@ -9,16 +11,30 @@
class Camera;
class Level;
class Block;
class BlocksController;
class CameraControl {
std::shared_ptr<Player> player;
std::shared_ptr<Camera> camera, currentViewCamera;
std::shared_ptr<Camera> camera;
const CameraSettings& settings;
glm::vec3 offset;
float shake = 0.0f;
float shakeTimer = 0.0f;
glm::vec3 interpVel {0.0f};
/// @brief Update shaking timer and calculate camera offset
/// @param delta delta time
/// @return camera offset
glm::vec3 updateCameraShaking(float delta);
/// @brief Update field-of-view effects
/// @param input player inputs
/// @param delta delta time
void updateFovEffects(const PlayerInput& input, float delta);
/// @brief Switch active player camera
void switchCamera();
public:
CameraControl(std::shared_ptr<Player> player, const CameraSettings& settings);
void updateMouse(PlayerInput& input);
@@ -26,6 +42,16 @@ public:
void refresh();
};
enum class BlockInteraction {
step,
destruction,
placing
};
using on_block_interaction = std::function<void(
Player*, glm::ivec3, const Block*, BlockInteraction type
)>;
class PlayerController {
Level* level;
std::shared_ptr<Player> player;
@@ -33,11 +59,22 @@ class PlayerController {
CameraControl camControl;
BlocksController* blocksController;
std::vector<on_block_interaction> blockInteractionCallbacks;
void updateKeyboard();
void updateCamera(float delta, bool movement);
void resetKeyboard();
void updateControls(float delta);
void updateInteraction();
void onBlockInteraction(
glm::ivec3 pos,
const Block* def,
BlockInteraction type
);
float stepsTimer = 0.0f;
void onFootstep();
void updateFootsteps(float delta);
public:
static glm::vec3 selectedBlockPosition;
static glm::ivec3 selectedBlockNormal;
@@ -45,12 +82,16 @@ public:
static int selectedBlockId;
static int selectedBlockStates;
PlayerController(Level* level,
const EngineSettings& settings,
BlocksController* blocksController);
PlayerController(
Level* level,
const EngineSettings& settings,
BlocksController* blocksController
);
void update(float delta, bool input, bool pause);
Player* getPlayer();
void listenBlockInteraction(on_block_interaction callback);
};
#endif /* PLAYER_CONTROL_H_ */