refactor: change pointer parameters to references for Level and Content in various classes
This commit is contained in:
+10
-10
@@ -59,7 +59,7 @@ void Entity::setRig(const rigging::SkeletonConfig* rigConfig) {
|
||||
);
|
||||
}
|
||||
|
||||
Entities::Entities(Level* level)
|
||||
Entities::Entities(Level& level)
|
||||
: level(level), sensorsTickClock(20, 3), updateTickClock(20, 3) {
|
||||
}
|
||||
|
||||
@@ -117,7 +117,7 @@ entityid_t Entities::spawn(
|
||||
dv::value saved,
|
||||
entityid_t uid
|
||||
) {
|
||||
auto skeleton = level->content->getSkeleton(def.skeletonName);
|
||||
auto skeleton = level.content.getSkeleton(def.skeletonName);
|
||||
if (skeleton == nullptr) {
|
||||
throw std::runtime_error("skeleton " + def.skeletonName + " not found");
|
||||
}
|
||||
@@ -190,7 +190,7 @@ void Entities::despawn(entityid_t id) {
|
||||
void Entities::loadEntity(const dv::value& map) {
|
||||
entityid_t uid = map["uid"].asInteger();
|
||||
std::string defname = map["def"].asString();
|
||||
auto& def = level->content->entities.require(defname);
|
||||
auto& def = level.content.entities.require(defname);
|
||||
spawn(def, {}, nullptr, map, uid);
|
||||
}
|
||||
|
||||
@@ -219,7 +219,7 @@ void Entities::loadEntity(const dv::value& map, Entity entity) {
|
||||
std::string skeletonName = skeleton.config->getName();
|
||||
map.at("skeleton").get(skeletonName);
|
||||
if (skeletonName != skeleton.config->getName()) {
|
||||
skeleton.config = level->content->getSkeleton(skeletonName);
|
||||
skeleton.config = level.content.getSkeleton(skeletonName);
|
||||
}
|
||||
if (auto found = map.at(COMP_SKELETON)) {
|
||||
auto& skeletonmap = *found;
|
||||
@@ -361,8 +361,8 @@ dv::value Entities::serialize(const std::vector<Entity>& entities) {
|
||||
if (!entity.getDef().save.enabled) {
|
||||
continue;
|
||||
}
|
||||
level->entities->onSave(entity);
|
||||
list.add(level->entities->serialize(entity));
|
||||
level.entities->onSave(entity);
|
||||
list.add(level.entities->serialize(entity));
|
||||
}
|
||||
return list;
|
||||
}
|
||||
@@ -380,7 +380,7 @@ void Entities::clean() {
|
||||
} else {
|
||||
auto& rigidbody = registry.get<Rigidbody>(it->second);
|
||||
// todo: refactor
|
||||
auto physics = level->physics.get();
|
||||
auto physics = level.physics.get();
|
||||
for (auto& sensor : rigidbody.sensors) {
|
||||
physics->removeSensor(&sensor);
|
||||
}
|
||||
@@ -428,7 +428,7 @@ void Entities::preparePhysics(float delta) {
|
||||
auto parts = sensorsTickClock.getParts();
|
||||
|
||||
auto view = registry.view<EntityId, Transform, Rigidbody>();
|
||||
auto physics = level->physics.get();
|
||||
auto physics = level.physics.get();
|
||||
std::vector<Sensor*> sensors;
|
||||
for (auto [entity, eid, transform, rigidbody] : view.each()) {
|
||||
if (!rigidbody.enabled) {
|
||||
@@ -447,7 +447,7 @@ void Entities::updatePhysics(float delta) {
|
||||
preparePhysics(delta);
|
||||
|
||||
auto view = registry.view<EntityId, Transform, Rigidbody>();
|
||||
auto physics = level->physics.get();
|
||||
auto physics = level.physics.get();
|
||||
for (auto [entity, eid, transform, rigidbody] : view.each()) {
|
||||
if (!rigidbody.enabled || rigidbody.hitbox.type == BodyType::STATIC) {
|
||||
continue;
|
||||
@@ -459,7 +459,7 @@ void Entities::updatePhysics(float delta) {
|
||||
float vel = glm::length(prevVel);
|
||||
int substeps = static_cast<int>(delta * vel * 20);
|
||||
substeps = std::min(100, std::max(2, substeps));
|
||||
physics->step(*level->chunks, &hitbox, delta, substeps, eid.uid);
|
||||
physics->step(*level.chunks, hitbox, delta, substeps, eid.uid);
|
||||
hitbox.linearDamping = hitbox.grounded * 24;
|
||||
transform.setPos(hitbox.position);
|
||||
if (hitbox.grounded && !grounded) {
|
||||
|
||||
@@ -166,7 +166,7 @@ public:
|
||||
|
||||
class Entities {
|
||||
entt::registry registry;
|
||||
Level* level;
|
||||
Level& level;
|
||||
std::unordered_map<entityid_t, entt::entity> entities;
|
||||
std::unordered_map<entt::entity, entityid_t> uids;
|
||||
entityid_t nextID = 1;
|
||||
@@ -184,7 +184,7 @@ public:
|
||||
float distance;
|
||||
};
|
||||
|
||||
Entities(Level* level);
|
||||
Entities(Level& level);
|
||||
|
||||
void clean();
|
||||
void updatePhysics(float delta);
|
||||
|
||||
+27
-22
@@ -17,6 +17,9 @@
|
||||
#include "window/Events.hpp"
|
||||
#include "world/Level.hpp"
|
||||
#include "data/dv_util.hpp"
|
||||
#include "debug/Logger.hpp"
|
||||
|
||||
static debug::Logger logger("player");
|
||||
|
||||
constexpr float CROUCH_SPEED_MUL = 0.35f;
|
||||
constexpr float RUN_SPEED_MUL = 1.5f;
|
||||
@@ -28,7 +31,7 @@ constexpr float JUMP_FORCE = 8.0f;
|
||||
constexpr int SPAWN_ATTEMPTS_PER_UPDATE = 64;
|
||||
|
||||
Player::Player(
|
||||
Level* level,
|
||||
Level& level,
|
||||
int64_t id,
|
||||
const std::string& name,
|
||||
glm::vec3 position,
|
||||
@@ -45,11 +48,11 @@ Player::Player(
|
||||
inventory(std::move(inv)),
|
||||
eid(eid),
|
||||
chunks(std::make_unique<Chunks>(
|
||||
3, 3, 0, 0, level->events.get(), level->content->getIndices()
|
||||
3, 3, 0, 0, level.events.get(), *level.content.getIndices()
|
||||
)),
|
||||
fpCamera(level->getCamera("core:first-person")),
|
||||
spCamera(level->getCamera("core:third-person-front")),
|
||||
tpCamera(level->getCamera("core:third-person-back")),
|
||||
fpCamera(level.getCamera("core:first-person")),
|
||||
spCamera(level.getCamera("core:third-person-front")),
|
||||
tpCamera(level.getCamera("core:third-person-back")),
|
||||
currentCamera(fpCamera) {
|
||||
fpCamera->setFov(glm::radians(90.0f));
|
||||
spCamera->setFov(glm::radians(90.0f));
|
||||
@@ -60,17 +63,19 @@ Player::~Player() = default;
|
||||
|
||||
void Player::updateEntity() {
|
||||
if (eid == 0) {
|
||||
auto& def = level->content->entities.require("base:player");
|
||||
eid = level->entities->spawn(def, getPosition());
|
||||
} else if (auto entity = level->entities->get(eid)) {
|
||||
auto& def = level.content.entities.require("base:player");
|
||||
eid = level.entities->spawn(def, getPosition());
|
||||
} else if (auto entity = level.entities->get(eid)) {
|
||||
position = entity->getTransform().pos;
|
||||
} else {
|
||||
// TODO: check if chunk loaded
|
||||
} else if (chunks->getChunkByVoxel(position)) {
|
||||
logger.error() << "player entity despawned or deleted; "
|
||||
"will be respawned";
|
||||
eid = 0;
|
||||
}
|
||||
}
|
||||
|
||||
Hitbox* Player::getHitbox() {
|
||||
if (auto entity = level->entities->get(eid)) {
|
||||
if (auto entity = level.entities->get(eid)) {
|
||||
return &entity->getRigidbody().hitbox;
|
||||
}
|
||||
return nullptr;
|
||||
@@ -143,7 +148,7 @@ void Player::updateSelectedEntity() {
|
||||
}
|
||||
|
||||
void Player::postUpdate() {
|
||||
auto entity = level->entities->get(eid);
|
||||
auto entity = level.entities->get(eid);
|
||||
if (!entity.has_value()) {
|
||||
return;
|
||||
}
|
||||
@@ -168,12 +173,12 @@ void Player::postUpdate() {
|
||||
|
||||
if (body) {
|
||||
skeleton.pose.matrices[body->getIndex()] = glm::rotate(
|
||||
glm::mat4(1.0f), glm::radians(cam.x), glm::vec3(0, 1, 0)
|
||||
glm::mat4(1.0f), glm::radians(rotation.x), glm::vec3(0, 1, 0)
|
||||
);
|
||||
}
|
||||
if (head) {
|
||||
skeleton.pose.matrices[head->getIndex()] = glm::rotate(
|
||||
glm::mat4(1.0f), glm::radians(cam.y), glm::vec3(1, 0, 0)
|
||||
glm::mat4(1.0f), glm::radians(rotation.y), glm::vec3(1, 0, 0)
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -181,7 +186,7 @@ void Player::postUpdate() {
|
||||
void Player::teleport(glm::vec3 position) {
|
||||
this->position = position;
|
||||
|
||||
if (auto entity = level->entities->get(eid)) {
|
||||
if (auto entity = level.entities->get(eid)) {
|
||||
entity->getRigidbody().hitbox.position = position;
|
||||
entity->getTransform().setPos(position);
|
||||
}
|
||||
@@ -298,7 +303,7 @@ dv::value Player::serialize() const {
|
||||
root["name"] = name;
|
||||
|
||||
root["position"] = dv::to_value(position);
|
||||
root["rotation"] = dv::to_value(cam);
|
||||
root["rotation"] = dv::to_value(rotation);
|
||||
root["spawnpoint"] = dv::to_value(spawnpoint);
|
||||
|
||||
root["flight"] = flight;
|
||||
@@ -310,10 +315,10 @@ dv::value Player::serialize() const {
|
||||
root["entity"] = eid;
|
||||
root["inventory"] = inventory->serialize();
|
||||
auto found =
|
||||
std::find(level->cameras.begin(), level->cameras.end(), currentCamera);
|
||||
if (found != level->cameras.end()) {
|
||||
root["camera"] = level->content->getIndices(ResourceType::CAMERA)
|
||||
.getName(found - level->cameras.begin());
|
||||
std::find(level.cameras.begin(), level.cameras.end(), currentCamera);
|
||||
if (found != level.cameras.end()) {
|
||||
root["camera"] = level.content.getIndices(ResourceType::CAMERA)
|
||||
.getName(found - level.cameras.begin());
|
||||
}
|
||||
return root;
|
||||
}
|
||||
@@ -328,7 +333,7 @@ void Player::deserialize(const dv::value& src) {
|
||||
fpCamera->position = position;
|
||||
|
||||
const auto& rotarr = src["rotation"];
|
||||
dv::get_vec(rotarr, cam);
|
||||
dv::get_vec(rotarr, rotation);
|
||||
|
||||
const auto& sparr = src["spawnpoint"];
|
||||
setSpawnPoint(glm::vec3(
|
||||
@@ -349,7 +354,7 @@ void Player::deserialize(const dv::value& src) {
|
||||
|
||||
if (src.has("camera")) {
|
||||
std::string name = src["camera"].asString();
|
||||
if (auto camera = level->getCamera(name)) {
|
||||
if (auto camera = level.getCamera(name)) {
|
||||
currentCamera = camera;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39,7 +39,7 @@ struct CursorSelection {
|
||||
};
|
||||
|
||||
class Player : public Serializable {
|
||||
Level* level;
|
||||
Level& level;
|
||||
int64_t id;
|
||||
std::string name;
|
||||
float speed;
|
||||
@@ -57,12 +57,12 @@ class Player : public Serializable {
|
||||
public:
|
||||
std::unique_ptr<Chunks> chunks;
|
||||
std::shared_ptr<Camera> fpCamera, spCamera, tpCamera;
|
||||
std::shared_ptr<Camera> currentCamera;;
|
||||
glm::vec3 cam {};
|
||||
std::shared_ptr<Camera> currentCamera;
|
||||
glm::vec3 rotation {};
|
||||
CursorSelection selection {};
|
||||
|
||||
Player(
|
||||
Level* level,
|
||||
Level& level,
|
||||
int64_t id,
|
||||
const std::string& name,
|
||||
glm::vec3 position,
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
#include "world/Level.hpp"
|
||||
#include "world/World.hpp"
|
||||
|
||||
Players::Players(Level* level) : level(level) {}
|
||||
Players::Players(Level& level) : level(level) {}
|
||||
|
||||
void Players::add(std::unique_ptr<Player> player) {
|
||||
players[player->getId()] = std::move(player);
|
||||
@@ -22,17 +22,17 @@ Player* Players::get(int64_t id) const {
|
||||
Player* Players::create() {
|
||||
auto playerPtr = std::make_unique<Player>(
|
||||
level,
|
||||
level->getWorld()->getInfo().nextPlayerId++,
|
||||
level.getWorld()->getInfo().nextPlayerId++,
|
||||
"",
|
||||
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
|
||||
);
|
||||
auto player = playerPtr.get();
|
||||
add(std::move(playerPtr));
|
||||
|
||||
level->inventories->store(player->getInventory());
|
||||
level.inventories->store(player->getInventory());
|
||||
return player;
|
||||
}
|
||||
|
||||
@@ -57,7 +57,7 @@ void Players::deserialize(const dv::value& src) {
|
||||
"",
|
||||
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
|
||||
);
|
||||
auto player = playerPtr.get();
|
||||
@@ -66,8 +66,8 @@ void Players::deserialize(const dv::value& src) {
|
||||
auto& inventory = player->getInventory();
|
||||
// invalid inventory id pre 0.25
|
||||
if (inventory->getId() == 0) {
|
||||
inventory->setId(level->getWorld()->getNextInventoryId());
|
||||
inventory->setId(level.getWorld()->getNextInventoryId());
|
||||
}
|
||||
level->inventories->store(player->getInventory());
|
||||
level.inventories->store(player->getInventory());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,12 +14,12 @@ class Level;
|
||||
class Player;
|
||||
|
||||
class Players : public Serializable {
|
||||
Level* level;
|
||||
Level& level;
|
||||
std::unordered_map<int64_t, std::unique_ptr<Player>> players;
|
||||
|
||||
void add(std::unique_ptr<Player> player);
|
||||
public:
|
||||
Players(Level* level);
|
||||
Players(Level& level);
|
||||
|
||||
Player* get(int64_t id) const;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user