diff --git a/res/content/base/content.json b/res/content/base/content.json index dd1573a1..9d1f016b 100644 --- a/res/content/base/content.json +++ b/res/content/base/content.json @@ -1,6 +1,6 @@ { - "entities": [ - "drop" + "items": [ + "bazalt_breaker" ], "blocks": [ "dirt", @@ -28,7 +28,8 @@ "torch", "wooden_door" ], - "items": [ - "bazalt_breaker" + "entities": [ + "drop", + "player" ] } \ No newline at end of file diff --git a/res/content/base/entities/player.json b/res/content/base/entities/player.json new file mode 100644 index 00000000..aa789b3b --- /dev/null +++ b/res/content/base/entities/player.json @@ -0,0 +1,3 @@ +{ + "hitbox": [0.4, 0.9, 0.4] +} diff --git a/res/rigs/player.json b/res/content/base/rigs/player.json similarity index 100% rename from res/rigs/player.json rename to res/content/base/rigs/player.json diff --git a/res/entities/player.json b/res/entities/player.json deleted file mode 100644 index 36be7bab..00000000 --- a/res/entities/player.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "hitbox": [0.6, 1.8, 0.6] -} diff --git a/src/content/ContentLoader.cpp b/src/content/ContentLoader.cpp index c572b458..d1b64bf1 100644 --- a/src/content/ContentLoader.cpp +++ b/src/content/ContentLoader.cpp @@ -439,6 +439,7 @@ void ContentLoader::load() { stats->totalItems++; } } + if (auto entitiesarr = root->list("entities")) { for (size_t i = 0; i < entitiesarr->size(); i++) { std::string name = entitiesarr->str(i); diff --git a/src/logic/scripting/scripting.cpp b/src/logic/scripting/scripting.cpp index 1d95477c..1f38165e 100644 --- a/src/logic/scripting/scripting.cpp +++ b/src/logic/scripting/scripting.cpp @@ -273,7 +273,7 @@ dynamic::Value scripting::get_component_value(const scriptenv& env, const std::s } void scripting::on_entity_spawn( - const EntityDef& def, + const EntityDef&, entityid_t eid, const std::vector>& components, dynamic::Value args, @@ -285,9 +285,12 @@ void scripting::on_entity_spawn( lua::pushinteger(L, eid); lua::call(L, 1); } - for (size_t i = 0; i < components.size()-1; i++) { - lua::pushvalue(L, -1); + if (components.size() > 1) { + for (int i = 0; i < components.size()-1; i++) { + lua::pushvalue(L, -1); + } } + std::cout << "entity duplicated " << (components.size()-1) << " times" << std::endl; for (auto& component : components) { auto compenv = create_component_environment(get_root_environment(), -1, component->name); diff --git a/src/objects/Entities.cpp b/src/objects/Entities.cpp index 311a907a..43154d98 100644 --- a/src/objects/Entities.cpp +++ b/src/objects/Entities.cpp @@ -66,6 +66,7 @@ entityid_t Entities::spawn( dynamic::Map_sptr saved, entityid_t uid) { + std::cout << "spawn entity " << def.name << std::endl; auto rig = level->content->getRig(def.rigName); if (rig == nullptr) { throw std::runtime_error("rig "+def.rigName+" not found"); @@ -108,8 +109,10 @@ entityid_t Entities::spawn( componentName, entity_funcs_set {}, nullptr); scripting.components.emplace_back(std::move(component)); } + std::cout << "on_entity_spawn" << std::endl; scripting::on_entity_spawn( def, id, scripting.components, std::move(args), std::move(saved)); + std::cout << "done" << std::endl; return id; } diff --git a/src/objects/Player.cpp b/src/objects/Player.cpp index 0be5c970..6f456a83 100644 --- a/src/objects/Player.cpp +++ b/src/objects/Player.cpp @@ -41,7 +41,10 @@ Player::~Player() { void Player::updateEntity() { if (eid == 0) { - // spawn entity + auto& def = level->content->entities.require("base:player"); + eid = level->entities->spawn(def, Transform { + getPosition(), glm::vec3(1.0f), glm::mat3(1.0f), {}, true + }); } else if (auto entity = level->entities->get(eid)) { position = entity->getTransform().pos; } else { @@ -264,11 +267,12 @@ void Player::deserialize(dynamic::Map *src) { src->flag("flight", flight); src->flag("noclip", noclip); setChosenSlot(src->get("chosen-slot", getChosenSlot())); - src->num("enitity", eid); + src->num("entity", eid); if (auto invmap = src->map("inventory")) { getInventory()->deserialize(invmap.get()); } + std::cout << "Player::DESERIALIZE " << eid << std::endl; } void Player::convert(dynamic::Map* data, const ContentLUT* lut) {