diff --git a/src/logic/PlayerController.cpp b/src/logic/PlayerController.cpp index 23a3cfb1..cd17948c 100644 --- a/src/logic/PlayerController.cpp +++ b/src/logic/PlayerController.cpp @@ -242,7 +242,7 @@ void PlayerController::update(float delta, bool input, bool pause) { } updateFootsteps(delta); updateCamera(delta, input); - updateControls(delta); + updatePlayer(delta); } camControl.refresh(); @@ -288,7 +288,8 @@ void PlayerController::resetKeyboard() { input.jump = false; } -void PlayerController::updateControls(float delta){ +void PlayerController::updatePlayer(float delta) { + player->updateEntity(level); player->updateInput(level, input, delta); } diff --git a/src/logic/PlayerController.hpp b/src/logic/PlayerController.hpp index e1a09b99..ff16285b 100644 --- a/src/logic/PlayerController.hpp +++ b/src/logic/PlayerController.hpp @@ -65,7 +65,7 @@ class PlayerController { void updateKeyboard(); void updateCamera(float delta, bool movement); void resetKeyboard(); - void updateControls(float delta); + void updatePlayer(float delta); void updateInteraction(); void onBlockInteraction( glm::ivec3 pos, diff --git a/src/objects/Player.cpp b/src/objects/Player.cpp index 1cb1614a..d52e8b67 100644 --- a/src/objects/Player.cpp +++ b/src/objects/Player.cpp @@ -8,6 +8,7 @@ #include "../window/Events.hpp" #include "../window/Camera.hpp" #include "../items/Inventory.hpp" +#include "../objects/Entities.hpp" #include #include @@ -20,10 +21,13 @@ const float FLIGHT_SPEED_MUL = 4.0f; const float CHEAT_SPEED_MUL = 5.0f; const float JUMP_FORCE = 8.0f; -Player::Player(glm::vec3 position, float speed, std::shared_ptr inv) : +Player::Player(glm::vec3 position, float speed, std::shared_ptr inv, + entityid_t eid) : speed(speed), chosenSlot(0), + position(position), inventory(std::move(inv)), + entity(eid), camera(std::make_shared(position, glm::radians(90.0f))), spCamera(std::make_shared(position, glm::radians(90.0f))), tpCamera(std::make_shared(position, glm::radians(90.0f))), @@ -35,11 +39,15 @@ Player::Player(glm::vec3 position, float speed, std::shared_ptr inv) Player::~Player() { } -void Player::updateInput( - Level* level, - PlayerInput& input, - float delta -) { +void Player::updateEntity(Level* level) { + if (entity == 0) { + // spawn entity + } else { + // check entity, respawn if despawned + } +} + +void Player::updateInput(Level* level, PlayerInput& input, float delta) { bool crouch = input.shift && hitbox->grounded && !input.sprint; float speed = this->speed; if (flight){ @@ -185,6 +193,14 @@ void Player::setNoclip(bool flag) { this->noclip = flag; } +entityid_t Player::getEntity() const { + return entity; +} + +void Player::setEntity(entityid_t eid) { + entity = eid; +} + std::shared_ptr Player::getInventory() const { return inventory; } @@ -218,6 +234,7 @@ std::unique_ptr Player::serialize() const { root->put("flight", flight); root->put("noclip", noclip); root->put("chosen-slot", chosenSlot); + root->put("entity", entity); root->put("inventory", inventory->serialize()); return root; } @@ -251,13 +268,13 @@ void Player::deserialize(dynamic::Map *src) { src->flag("flight", flight); src->flag("noclip", noclip); setChosenSlot(src->get("chosen-slot", getChosenSlot())); + src->num("enitity", entity); if (auto invmap = src->map("inventory")) { getInventory()->deserialize(invmap.get()); } } - void Player::convert(dynamic::Map* data, const ContentLUT* lut) { auto players = data->list("players"); if (players) { diff --git a/src/objects/Player.hpp b/src/objects/Player.hpp index 4d8a10af..4bdf57af 100644 --- a/src/objects/Player.hpp +++ b/src/objects/Player.hpp @@ -43,10 +43,12 @@ struct BlockSelection { class Player : public Object, public Serializable { float speed; int chosenSlot; + glm::vec3 position; glm::vec3 spawnpoint {}; std::shared_ptr inventory; bool flight = false; bool noclip = false; + entityid_t entity; public: std::shared_ptr camera, spCamera, tpCamera; std::shared_ptr currentCamera; @@ -55,10 +57,12 @@ public: glm::vec3 cam {}; BlockSelection selection {}; - Player(glm::vec3 position, float speed, std::shared_ptr inv); + Player(glm::vec3 position, float speed, std::shared_ptr inv, + entityid_t eid); ~Player(); void teleport(glm::vec3 position); + void updateEntity(Level* level); void updateInput(Level* level, PlayerInput& input, float delta); void attemptToFindSpawnpoint(Level* level); @@ -73,6 +77,9 @@ public: bool isNoclip() const; void setNoclip(bool flag); + + entityid_t getEntity() const; + void setEntity(entityid_t eid); std::shared_ptr getInventory() const; diff --git a/src/world/Level.cpp b/src/world/Level.cpp index fc0549ab..130f90b5 100644 --- a/src/world/Level.cpp +++ b/src/world/Level.cpp @@ -31,7 +31,7 @@ Level::Level( this->world->getNextInventoryId(), DEF_PLAYER_INVENTORY_SIZE ); auto player = spawnObject( - glm::vec3(0, DEF_PLAYER_Y, 0), DEF_PLAYER_SPEED, inv + glm::vec3(0, DEF_PLAYER_Y, 0), DEF_PLAYER_SPEED, inv, 0 ); uint matrixSize = ( diff --git a/src/world/World.cpp b/src/world/World.cpp index 9c85e38b..71b64878 100644 --- a/src/world/World.cpp +++ b/src/world/World.cpp @@ -111,7 +111,8 @@ std::unique_ptr World::load( auto player = level->spawnObject( glm::vec3(0, DEF_PLAYER_Y, 0), DEF_PLAYER_SPEED, - level->inventories->create(DEF_PLAYER_INVENTORY_SIZE) + level->inventories->create(DEF_PLAYER_INVENTORY_SIZE), + 0 ); player->deserialize(players->map(i).get()); level->inventories->store(player->getInventory());