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