add entity:get_player()
This commit is contained in:
parent
65fec4f4a9
commit
9cd3f3e4c8
@ -12,7 +12,11 @@ local function refresh_model(id)
|
||||
end
|
||||
|
||||
function on_render()
|
||||
local invid, slotid = player.get_inventory(hud.get_player())
|
||||
local pid = entity:get_player()
|
||||
if pid == -1 then
|
||||
return
|
||||
end
|
||||
local invid, slotid = player.get_inventory(pid)
|
||||
local id, _ = inventory.get(invid, slotid)
|
||||
if id ~= itemid then
|
||||
refresh_model(id)
|
||||
|
||||
@ -66,6 +66,7 @@ local Entity = {__index={
|
||||
get_uid=function(self) return self.eid end,
|
||||
def_index=function(self) return entities.get_def(self.eid) end,
|
||||
def_name=function(self) return entities.def_name(entities.get_def(self.eid)) end,
|
||||
get_player=function(self) return entities.get_player(self.eid) end,
|
||||
}}
|
||||
|
||||
local entities = {}
|
||||
|
||||
@ -54,7 +54,7 @@ static int l_get_def(lua::State* L) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int l_show(lua::State* L) {
|
||||
static int l_spawn(lua::State* L) {
|
||||
auto level = controller->getLevel();
|
||||
auto defname = lua::tostring(L, 1);
|
||||
auto& def = content->entities.require(defname);
|
||||
@ -81,6 +81,15 @@ static int l_get_skeleton(lua::State* L) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int l_get_player(lua::State* L) {
|
||||
entityid_t eid = lua::touinteger(L, 1);
|
||||
auto level = controller->getLevel();
|
||||
if (auto entity = level->entities->get(eid)) {
|
||||
return lua::pushinteger(L, entity->getPlayer());
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int l_set_skeleton(lua::State* L) {
|
||||
if (auto entity = get_entity(L, 1)) {
|
||||
std::string skeletonName = lua::require_string(L, 2);
|
||||
@ -221,10 +230,11 @@ const luaL_Reg entitylib[] = {
|
||||
{"def_hitbox", lua::wrap<l_def_hitbox>},
|
||||
{"get_def", lua::wrap<l_get_def>},
|
||||
{"defs_count", lua::wrap<l_defs_count>},
|
||||
{"spawn", lua::wrap<l_show>},
|
||||
{"spawn", lua::wrap<l_spawn>},
|
||||
{"despawn", lua::wrap<l_despawn>},
|
||||
{"get_skeleton", lua::wrap<l_get_skeleton>},
|
||||
{"set_skeleton", lua::wrap<l_set_skeleton>},
|
||||
{"get_player", lua::wrap<l_get_player>},
|
||||
{"get_all_in_box", lua::wrap<l_get_all_in_box>},
|
||||
{"get_all_in_radius", lua::wrap<l_get_all_in_radius>},
|
||||
{"raycast", lua::wrap<l_raycast>},
|
||||
|
||||
@ -34,6 +34,7 @@ struct EntityId {
|
||||
entityid_t uid;
|
||||
const EntityDef& def;
|
||||
bool destroyFlag = false;
|
||||
int64_t player = -1;
|
||||
};
|
||||
|
||||
struct Transform {
|
||||
@ -161,6 +162,14 @@ public:
|
||||
return entity;
|
||||
}
|
||||
|
||||
int64_t getPlayer() const {
|
||||
return registry.get<EntityId>(entity).player;
|
||||
}
|
||||
|
||||
void setPlayer(int64_t id) {
|
||||
registry.get<EntityId>(entity).player = id;
|
||||
}
|
||||
|
||||
void destroy();
|
||||
};
|
||||
|
||||
|
||||
@ -65,8 +65,14 @@ void Player::updateEntity() {
|
||||
if (eid == 0) {
|
||||
auto& def = level.content.entities.require("base:player");
|
||||
eid = level.entities->spawn(def, getPosition());
|
||||
if (auto entity = level.entities->get(eid)) {
|
||||
entity->setPlayer(id);
|
||||
}
|
||||
} else if (auto entity = level.entities->get(eid)) {
|
||||
position = entity->getTransform().pos;
|
||||
if (auto entity = level.entities->get(eid)) {
|
||||
entity->setPlayer(id);
|
||||
}
|
||||
} else if (chunks->getChunkByVoxel(position)) {
|
||||
logger.error() << "player entity despawned or deleted; "
|
||||
"will be respawned";
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user