mirror of
https://github.com/whoahq/whoa.git
synced 2026-02-02 00:32:45 +03:00
feat(model): add CM2Model::SetGeometryVisible
This commit is contained in:
parent
7ba3c0730b
commit
ab346f1b42
@ -1524,6 +1524,58 @@ void CM2Model::SetBoneSequenceDeferred(uint16_t a2, M2Data* data, uint16_t boneI
|
|||||||
// TODO
|
// TODO
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CM2Model::SetGeometryVisible(uint32_t start, uint32_t end, int32_t visible) {
|
||||||
|
// Waiting for load
|
||||||
|
|
||||||
|
if (!this->m_loaded) {
|
||||||
|
auto modelCall = STORM_NEW(CM2ModelCall);
|
||||||
|
|
||||||
|
modelCall->type = 1;
|
||||||
|
modelCall->modelCallNext = nullptr;
|
||||||
|
modelCall->time = this->m_scene->m_time;
|
||||||
|
modelCall->args[0] = start;
|
||||||
|
modelCall->args[1] = end;
|
||||||
|
modelCall->args[2] = visible;
|
||||||
|
|
||||||
|
*this->m_modelCallTail = modelCall;
|
||||||
|
this->m_modelCallTail = &modelCall->modelCallNext;
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// No skin sections
|
||||||
|
|
||||||
|
if (!this->m_shared->skinProfile->skinSections.Count()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update visibility
|
||||||
|
|
||||||
|
bool visibilityChanged = false;
|
||||||
|
|
||||||
|
for (uint32_t i = 0; i < this->m_shared->skinProfile->skinSections.Count(); i++) {
|
||||||
|
auto& skinSection = this->m_shared->skinProfile->skinSections[i];
|
||||||
|
auto modelSkinSection = &this->m_skinSections[i];
|
||||||
|
|
||||||
|
// Out of range
|
||||||
|
if (skinSection.skinSectionId < start || skinSection.skinSectionId > end) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// No change
|
||||||
|
if (*modelSkinSection == 0 && visible == 0 || *modelSkinSection == 1 && visible == 1) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
*modelSkinSection = visible;
|
||||||
|
visibilityChanged = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (visibilityChanged) {
|
||||||
|
this->UnoptimizeVisibleGeometry();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void CM2Model::SetIndices() {
|
void CM2Model::SetIndices() {
|
||||||
// TODO
|
// TODO
|
||||||
}
|
}
|
||||||
@ -1736,6 +1788,10 @@ void CM2Model::UnlinkFromCallbackList() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CM2Model::UnoptimizeVisibleGeometry() {
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
|
||||||
void CM2Model::UnsetBoneSequence(uint32_t boneId, int32_t a3, int32_t a4) {
|
void CM2Model::UnsetBoneSequence(uint32_t boneId, int32_t a3, int32_t a4) {
|
||||||
// TODO
|
// TODO
|
||||||
}
|
}
|
||||||
|
|||||||
@ -172,6 +172,7 @@ class CM2Model {
|
|||||||
void SetAnimating(int32_t animating);
|
void SetAnimating(int32_t animating);
|
||||||
void SetBoneSequence(uint32_t boneId, uint32_t sequenceId, uint32_t a4, uint32_t time, float a6, int32_t a7, int32_t a8);
|
void SetBoneSequence(uint32_t boneId, uint32_t sequenceId, uint32_t a4, uint32_t time, float a6, int32_t a7, int32_t a8);
|
||||||
void SetBoneSequenceDeferred(uint16_t a2, M2Data* data, uint16_t boneIndex, uint32_t time, float a6, M2SequenceFallback fallback, int32_t a8, int32_t a9, int32_t a10);
|
void SetBoneSequenceDeferred(uint16_t a2, M2Data* data, uint16_t boneIndex, uint32_t time, float a6, M2SequenceFallback fallback, int32_t a8, int32_t a9, int32_t a10);
|
||||||
|
void SetGeometryVisible(uint32_t start, uint32_t end, int32_t visible);
|
||||||
void SetIndices();
|
void SetIndices();
|
||||||
void SetLightingCallback(void (*lightingCallback)(CM2Model*, CM2Lighting*, void*), void* lightingArg);
|
void SetLightingCallback(void (*lightingCallback)(CM2Model*, CM2Lighting*, void*), void* lightingArg);
|
||||||
void SetLoadedCallback(void (*loadedCallback)(CM2Model*, void*), void* loadedArg);
|
void SetLoadedCallback(void (*loadedCallback)(CM2Model*, void*), void* loadedArg);
|
||||||
@ -185,6 +186,7 @@ class CM2Model {
|
|||||||
int32_t Sub8269C0(uint32_t boneId, uint16_t boneIndex);
|
int32_t Sub8269C0(uint32_t boneId, uint16_t boneIndex);
|
||||||
void Sub826E60(uint32_t* a2, uint32_t* a3);
|
void Sub826E60(uint32_t* a2, uint32_t* a3);
|
||||||
void UnlinkFromCallbackList();
|
void UnlinkFromCallbackList();
|
||||||
|
void UnoptimizeVisibleGeometry();
|
||||||
void UnsetBoneSequence(uint32_t boneId, int32_t a3, int32_t a4);
|
void UnsetBoneSequence(uint32_t boneId, int32_t a3, int32_t a4);
|
||||||
void UpdateLoaded();
|
void UpdateLoaded();
|
||||||
void WaitForLoad(const char* a2);
|
void WaitForLoad(const char* a2);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user