add ENTITY_NONE, ENTITY_AUTO reserved entity id & update player.set_entity(...)

This commit is contained in:
MihailRis 2025-01-21 05:56:14 +03:00
parent f2101f6504
commit 23c66654a2
4 changed files with 7 additions and 4 deletions

View File

@ -27,6 +27,7 @@ inline constexpr blockid_t BLOCK_OBSTACLE = 1;
inline constexpr blockid_t BLOCK_STRUCT_AIR = 2;
inline constexpr itemid_t ITEM_EMPTY = 0;
inline constexpr entityid_t ENTITY_NONE = 0;
inline constexpr entityid_t ENTITY_AUTO = std::numeric_limits<entityid_t>::max();
inline constexpr int CHUNK_W = 16;
inline constexpr int CHUNK_H = 256;

View File

@ -229,7 +229,9 @@ static int l_set_entity(lua::State* L) {
if (player == nullptr) {
return 0;
}
if (auto entity = get_entity(L, 2)) {
if (lua::isnumber(L, 2)) {
player->setEntity(lua::tointeger(L, 2));
} else if (auto entity = get_entity(L, 2)) {
player->setEntity(entity->getUID());
}
return 0;

View File

@ -62,7 +62,7 @@ Player::Player(
Player::~Player() = default;
void Player::updateEntity() {
if (eid == 0) {
if (eid == ENTITY_AUTO) {
auto& def = level.content.entities.require("base:player");
eid = level.entities->spawn(def, getPosition());
if (auto entity = level.entities->get(eid)) {
@ -73,7 +73,7 @@ void Player::updateEntity() {
if (auto entity = level.entities->get(eid)) {
entity->setPlayer(id);
}
} else if (chunks->getChunkByVoxel(position)) {
} else if (chunks->getChunkByVoxel(position) && eid != ENTITY_NONE) {
logger.error() << "player entity despawned or deleted; "
"will be respawned";
eid = 0;

View File

@ -54,7 +54,7 @@ class Player : public Serializable {
bool infiniteItems = true;
bool instantDestruction = true;
bool loadingChunks = true;
entityid_t eid;
entityid_t eid = ENTITY_AUTO;
entityid_t selectedEid = 0;
glm::vec3 rotation {};