Fixes for entity list

This commit is contained in:
Federico Cecchetto 2022-01-02 16:53:17 +01:00
parent c5e4ae8e0a
commit ecd4770baa

View File

@ -472,72 +472,61 @@ namespace entity_list
}); });
} }
void teleport_to(data_t& data, unsigned int id) void teleport_to(data_t& data, unsigned int num)
{ {
data.tasks.push_back([id]() data.tasks.push_back([num]()
{ {
if (!verify_entity(id)) try
{ {
return; const auto entity = scripting::call("getentbynum", {num}).as<scripting::entity>();
const auto player = scripting::call("getentbynum", {0}).as<scripting::entity>();
player.call("setorigin", {entity.get("origin")});
} }
catch (...)
const auto dest = scripting::entity{id};
const auto value = scripting::call("getentbynum", {0});
if (value.get_raw().type != game::SCRIPT_OBJECT)
{ {
return; gui::notification("Error", utils::string::va("^1error teleporting player to entity num %i!", num));
} }
const auto player = value.as<scripting::entity>();
player.call("setorigin", {dest.get("origin")});
}); });
} }
void teleport_to_reverse(data_t& data, unsigned int id) void teleport_to_reverse(data_t& data, unsigned int num)
{ {
data.tasks.push_back([id]() data.tasks.push_back([num]()
{ {
if (!verify_entity(id)) try
{ {
return; const auto entity = scripting::call("getentbynum", {num}).as<scripting::entity>();
const auto player = scripting::call("getentbynum", {0}).as<scripting::entity>();
entity.set("origin", player.get("origin"));
} }
catch (...)
const auto dest = scripting::entity{id};
const auto value = scripting::call("getentbynum", {0});
if (value.get_raw().type != game::SCRIPT_OBJECT)
{ {
return; gui::notification("Error", utils::string::va("^1error teleporting entity num %i to player!", num));
} }
const auto player = value.as<scripting::entity>();
dest.set("origin", player.get("origin"));
}); });
} }
void delete_entity(data_t& data, unsigned int id) void delete_entity(data_t& data, unsigned int num)
{ {
data.tasks.push_back([id]() data.tasks.push_back([num]()
{ {
if (!verify_entity(id)) try
{ {
return; const auto entity = scripting::call("getentbynum", {num}).as<scripting::entity>();
entity.call("delete");
}
catch (...)
{
gui::notification("Error", utils::string::va("^1error deleting entity num %i!", num));
} }
const auto target = scripting::entity{id};
target.call("delete");
}); });
} }
void set_entity_field(data_t& data, unsigned int id, void set_entity_field(data_t& data, unsigned int num,
const std::string& name, const std::string& string_value, int type) const std::string& name, const std::string& string_value, int type)
{ {
data.tasks.push_back([id, name, type, string_value, &data]() data.tasks.push_back([num, name, type, string_value, &data]()
{ {
if (!verify_entity(id))
{
return;
}
scripting::script_value value{}; scripting::script_value value{};
if (type == game::SCRIPT_INTEGER) if (type == game::SCRIPT_INTEGER)
@ -557,7 +546,8 @@ namespace entity_list
try try
{ {
scripting::set_entity_field(id, name, value); const auto entity = scripting::call("getentbynum", {num}).as<scripting::entity>();
scripting::set_entity_field(entity, name, value);
data.force_update = true; data.force_update = true;
} }
catch (...) catch (...)
@ -567,19 +557,15 @@ namespace entity_list
}); });
} }
void set_entity_field_vector(data_t& data, unsigned int id, void set_entity_field_vector(data_t& data, unsigned int num,
const std::string& name, const scripting::vector& value) const std::string& name, const scripting::vector& value)
{ {
data.tasks.push_back([id, name, value, &data]() data.tasks.push_back([num, name, value, &data]()
{ {
if (!verify_entity(id))
{
return;
}
try try
{ {
scripting::set_entity_field(id, name, value); const auto entity = scripting::call("getentbynum", {num}).as<scripting::entity>();
scripting::set_entity_field(entity, name, value);
data.force_update = true; data.force_update = true;
} }
catch (...) catch (...)
@ -742,7 +728,7 @@ namespace entity_list
for (const auto& info : data.entity_info) for (const auto& info : data.entity_info)
{ {
if (ImGui::TreeNode(utils::string::va("Entity num %i id %i", info.num, info.id))) if (ImGui::TreeNode(utils::string::va("Entity num %i", info.num)))
{ {
ImGui::Text("Info"); ImGui::Text("Info");
@ -760,24 +746,24 @@ namespace entity_list
if (ImGui::Button("Set field")) if (ImGui::Button("Set field"))
{ {
set_field_window = true; set_field_window = true;
selected_entity = info.id; selected_entity = info.num;
} }
if (ImGui::Button("Teleport to")) if (ImGui::Button("Teleport to"))
{ {
teleport_to(data, info.id); teleport_to(data, info.num);
data.force_update = true; data.force_update = true;
} }
if (ImGui::Button("Teleport to you")) if (ImGui::Button("Teleport to you"))
{ {
teleport_to_reverse(data, info.id); teleport_to_reverse(data, info.num);
data.force_update = true; data.force_update = true;
} }
if (info.num != 0 && ImGui::Button("Delete")) if (info.num != 0 && ImGui::Button("Delete"))
{ {
delete_entity(data, info.id); delete_entity(data, info.num);
data.force_update = true; data.force_update = true;
} }
@ -848,6 +834,7 @@ namespace entity_list
data.tasks = {}; data.tasks = {};
} }
show_entity_list_window(data); show_entity_list_window(data);
if (selected_fields_window) if (selected_fields_window)
@ -869,7 +856,16 @@ namespace entity_list
void post_unpack() override void post_unpack() override
{ {
gui::on_frame(on_frame); gui::on_frame(on_frame);
scheduler::loop(update_entity_list, scheduler::pipeline::server, 0ms); scheduler::loop([]()
{
try
{
update_entity_list();
}
catch (...)
{
}
}, scheduler::pipeline::server);
} }
}; };
} }