Skip to content

Commit 813e11c

Browse files
committed
Created resetModelToBindPose
1 parent d632f28 commit 813e11c

5 files changed

Lines changed: 26 additions & 0 deletions

File tree

engine/core/object/Model.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,4 +184,9 @@ void Model::setMorphWeight(int id, float value){
184184
}else{
185185
Log::error("Retrieving non-existent morph weight '%i'", id);
186186
}
187+
}
188+
189+
void Model::resetToBindPose(){
190+
ModelComponent& model = getComponent<ModelComponent>();
191+
scene->getSystem<MeshSystem>()->resetModelToBindPose(model);
187192
}

engine/core/object/Model.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ namespace Supernova{
3333
float getMorphWeight(int id);
3434
void setMorphWeight(const std::string& name, float value);
3535
void setMorphWeight(int id, float value);
36+
37+
void resetToBindPose();
3638
};
3739
}
3840

engine/core/script/binding/ObjectClassesLua.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -486,6 +486,7 @@ void LuaBinding::registerObjectClasses(lua_State *L){
486486
.addFunction("setMorphWeight",
487487
luabridge::overload<int, float>(&Model::setMorphWeight),
488488
luabridge::overload<const std::string&, float>(&Model::setMorphWeight))
489+
.addFunction("resetToBindPose", &Model::resetToBindPose)
489490
.endClass();
490491

491492
luabridge::getGlobalNamespace(L)

engine/core/subsystem/MeshSystem.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2709,6 +2709,22 @@ void MeshSystem::destroyModel(ModelComponent& model){
27092709
model.filename = "";
27102710
}
27112711

2712+
void MeshSystem::resetModelToBindPose(ModelComponent& model){
2713+
for (auto const& bone : model.bonesIdMapping){
2714+
Entity boneEntity = bone.second;
2715+
BoneComponent* boneComp = scene->findComponent<BoneComponent>(boneEntity);
2716+
Transform* transform = scene->findComponent<Transform>(boneEntity);
2717+
if (!boneComp || !transform){
2718+
continue;
2719+
}
2720+
2721+
transform->position = boneComp->bindPosition;
2722+
transform->rotation = boneComp->bindRotation;
2723+
transform->scale = boneComp->bindScale;
2724+
transform->needUpdate = true;
2725+
}
2726+
}
2727+
27122728
bool MeshSystem::createOrUpdateSprite(SpriteComponent& sprite, MeshComponent& mesh){
27132729
if (sprite.needUpdateSprite){
27142730
CameraComponent& camera = scene->getComponent<CameraComponent>(scene->getCamera());

engine/core/subsystem/MeshSystem.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,8 @@ namespace Supernova{
7777
void clearAnimationMapping(ModelComponent& model);
7878
void destroyModel(ModelComponent& model);
7979

80+
void resetModelToBindPose(ModelComponent& model);
81+
8082
bool createOrUpdateSprite(SpriteComponent& sprite, MeshComponent& mesh);
8183
bool createOrUpdateTerrain(TerrainComponent& terrain, MeshComponent& mesh);
8284
bool createOrUpdateMeshPolygon(MeshPolygonComponent& polygon, MeshComponent& mesh);

0 commit comments

Comments
 (0)