add "triggers" entity property

This commit is contained in:
MihailRis 2024-06-30 23:14:02 +03:00
parent 1f257d2db2
commit 15496070e0
7 changed files with 28 additions and 5 deletions

View File

@ -1,3 +1,6 @@
{ {
"hitbox": [0.2, 0.2, 0.2] "hitbox": [0.2, 0.2, 0.2],
"triggers": [
[-0.2, -0.2, -0.2, 0.2, 0.2, 0.2]
]
} }

View File

@ -17,6 +17,7 @@ end
function on_trigger_enter(index, oid) function on_trigger_enter(index, oid)
if ready and oid == 0 then if ready and oid == 0 then
entity:despawn() entity:despawn()
inventory.add(player.get_inventory(oid), item.index("base:stone.item"), 1)
end end
end end

View File

@ -36,9 +36,13 @@ return {
local entity = setmetatable({eid=eid}, Entity) local entity = setmetatable({eid=eid}, Entity)
entity.transform = new_Transform(eid) entity.transform = new_Transform(eid)
entity.rigidbody = new_Rigidbody(eid) entity.rigidbody = new_Rigidbody(eid)
entity.data = {}
entities[eid] = entity; entities[eid] = entity;
return entity return entity
end, end,
get_Entity = function(eid)
return entities[eid]
end,
remove_Entity = function(eid) remove_Entity = function(eid)
local entity = entities[eid] local entity = entities[eid]
if entity then if entity then

View File

@ -304,6 +304,7 @@ function file.readlines(path)
end end
stdcomp = require "core:internal/stdcomp" stdcomp = require "core:internal/stdcomp"
entity.get = stdcomp.get_Entity
-- Deprecated functions -- Deprecated functions
block_index = block.index block_index = block.index

View File

@ -314,6 +314,16 @@ void ContentLoader::loadEntity(EntityDef& def, const std::string& name, const fs
if (auto boxarr = root->list("hitbox")) { if (auto boxarr = root->list("hitbox")) {
def.hitbox = glm::vec3(boxarr->num(0), boxarr->num(1), boxarr->num(2)); def.hitbox = glm::vec3(boxarr->num(0), boxarr->num(1), boxarr->num(2));
} }
if (auto triggersarr = root->list("triggers")) {
for (size_t i = 0; i < triggersarr->size(); i++) {
if (auto triggerarr = triggersarr->list(i)) {
def.triggers.push_back({
{triggerarr->num(0), triggerarr->num(1), triggerarr->num(2)},
{triggerarr->num(3), triggerarr->num(4), triggerarr->num(5)}
});
}
}
}
std::cout << "loading entity " << name << " from " << file.u8string() << std::endl; std::cout << "loading entity " << name << " from " << file.u8string() << std::endl;
} }

View File

@ -36,8 +36,9 @@ entityid_t Entities::spawn(EntityDef& def, glm::vec3 pos) {
auto id = nextID++; auto id = nextID++;
registry.emplace<EntityId>(entity, static_cast<entityid_t>(id), def); registry.emplace<EntityId>(entity, static_cast<entityid_t>(id), def);
registry.emplace<Transform>(entity, pos, size, glm::mat3(1.0f)); registry.emplace<Transform>(entity, pos, size, glm::mat3(1.0f));
registry.emplace<Rigidbody>(entity, true, Hitbox {pos, def.hitbox}, std::vector<Trigger>{ auto& body = registry.emplace<Rigidbody>(entity, true, Hitbox {pos, def.hitbox}, std::vector<Trigger>{});
{true, id, AABB {glm::vec3{-0.2f, -0.2f, -0.2f}, glm::vec3{0.2f, 0.2f, 0.2f}}, {}, {}, {}, for (auto& box : def.triggers) {
body.triggers.emplace_back(Trigger{true, id, box, AABB{}, {}, {},
[=](auto entityid, auto index, auto otherid) { [=](auto entityid, auto index, auto otherid) {
if (auto entity = get(entityid)) { if (auto entity = get(entityid)) {
if (entity->isValid()) { if (entity->isValid()) {
@ -50,8 +51,8 @@ entityid_t Entities::spawn(EntityDef& def, glm::vec3 pos) {
scripting::on_trigger_exit(*entity, index, otherid); scripting::on_trigger_exit(*entity, index, otherid);
} }
} }
}} }});
}); }
auto& scripting = registry.emplace<Scripting>(entity, entity_funcs_set {}, nullptr); auto& scripting = registry.emplace<Scripting>(entity, entity_funcs_set {}, nullptr);
entities[id] = entity; entities[id] = entity;
scripting.env = scripting::on_entity_spawn(def, id, scripting.funcsset); scripting.env = scripting::on_entity_spawn(def, id, scripting.funcsset);

View File

@ -2,9 +2,11 @@
#define OBJECTS_ENTITY_DEF_HPP_ #define OBJECTS_ENTITY_DEF_HPP_
#include <string> #include <string>
#include <vector>
#include <glm/glm.hpp> #include <glm/glm.hpp>
#include "../typedefs.hpp" #include "../typedefs.hpp"
#include "../maths/aabb.hpp"
struct EntityDef { struct EntityDef {
/// @brief Entity string id (with prefix included) /// @brief Entity string id (with prefix included)
@ -12,6 +14,7 @@ struct EntityDef {
std::string scriptName = name.substr(name.find(':')+1); std::string scriptName = name.substr(name.find(':')+1);
glm::vec3 hitbox {0.5f}; glm::vec3 hitbox {0.5f};
std::vector<AABB> triggers {};
struct { struct {
entityid_t id; entityid_t id;