feat: automatically loading models used in skeleton
This commit is contained in:
@@ -49,10 +49,10 @@ void Entity::setRig(const rigging::SkeletonConfig* rigConfig) {
|
||||
auto& skeleton = registry.get<rigging::Skeleton>(entity);
|
||||
skeleton.config = rigConfig;
|
||||
skeleton.pose.matrices.resize(
|
||||
rigConfig->getNodes().size(), glm::mat4(1.0f)
|
||||
rigConfig->getBones().size(), glm::mat4(1.0f)
|
||||
);
|
||||
skeleton.calculated.matrices.resize(
|
||||
rigConfig->getNodes().size(), glm::mat4(1.0f)
|
||||
rigConfig->getBones().size(), glm::mat4(1.0f)
|
||||
);
|
||||
}
|
||||
|
||||
@@ -99,7 +99,7 @@ entityid_t Entities::spawn(
|
||||
dynamic::Map_sptr saved,
|
||||
entityid_t uid)
|
||||
{
|
||||
auto skeleton = level->content->getRig(def.skeletonName);
|
||||
auto skeleton = level->content->getSkeleton(def.skeletonName);
|
||||
if (skeleton == nullptr) {
|
||||
throw std::runtime_error("skeleton "+def.skeletonName+" not found");
|
||||
}
|
||||
@@ -205,7 +205,7 @@ void Entities::loadEntity(const dynamic::Map_sptr& map, Entity entity) {
|
||||
std::string skeletonName = skeleton.config->getName();
|
||||
map->str("skeleton", skeletonName);
|
||||
if (skeletonName != skeleton.config->getName()) {
|
||||
skeleton.config = level->content->getRig(skeletonName);
|
||||
skeleton.config = level->content->getSkeleton(skeletonName);
|
||||
}
|
||||
if (auto skeletonmap = map->map(COMP_SKELETON)) {
|
||||
if (auto texturesmap = skeletonmap->map("textures")) {
|
||||
|
||||
@@ -17,15 +17,27 @@ struct EntityDef {
|
||||
/// @brief Entity string id (with prefix included)
|
||||
std::string const name;
|
||||
|
||||
/// @brief Component IDs
|
||||
std::vector<std::string> components;
|
||||
|
||||
/// @brief Physic body type
|
||||
BodyType bodyType = BodyType::DYNAMIC;
|
||||
|
||||
/// @brief Hitbox size
|
||||
glm::vec3 hitbox {0.25f};
|
||||
|
||||
/// @brief 'aabb' sensors
|
||||
std::vector<std::pair<size_t, AABB>> boxSensors {};
|
||||
/// @brief 'radius' sensors
|
||||
std::vector<std::pair<size_t, float>> radialSensors {};
|
||||
|
||||
/// @brief Skeleton ID
|
||||
std::string skeletonName = name;
|
||||
|
||||
/// @brief Does entity prevent blocks setup
|
||||
bool blocking = true;
|
||||
|
||||
/// @brief save-** flags
|
||||
struct {
|
||||
bool enabled = true;
|
||||
struct {
|
||||
|
||||
@@ -34,13 +34,13 @@ void Bone::setModel(const std::string& name) {
|
||||
|
||||
Skeleton::Skeleton(const SkeletonConfig* config)
|
||||
: config(config),
|
||||
pose(config->getNodes().size()),
|
||||
calculated(config->getNodes().size()),
|
||||
flags(config->getNodes().size()),
|
||||
pose(config->getBones().size()),
|
||||
calculated(config->getBones().size()),
|
||||
flags(config->getBones().size()),
|
||||
textures(),
|
||||
modelOverrides(config->getNodes().size()),
|
||||
modelOverrides(config->getBones().size()),
|
||||
visible(true) {
|
||||
for (size_t i = 0; i < config->getNodes().size(); i++) {
|
||||
for (size_t i = 0; i < config->getBones().size(); i++) {
|
||||
flags[i].visible = true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -120,7 +120,7 @@ namespace rigging {
|
||||
std::string_view name
|
||||
);
|
||||
|
||||
const std::vector<Bone*>& getNodes() const {
|
||||
const std::vector<Bone*>& getBones() const {
|
||||
return nodes;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user