From 1180e1f4860d62bccd64bfa2a29eaeebd2c4b019 Mon Sep 17 00:00:00 2001 From: robojumper Date: Thu, 12 Sep 2024 22:36:34 +0200 Subject: m3d (#13) * Initial M3d Pass * `m_bmdl` and `m_bline` left --------- Co-authored-by: elijah-thomas774 Co-authored-by: Elijah Thomas <42302100+elijah-thomas774@users.noreply.github.com> --- src/m/m3d/m_anmvis.cpp | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 src/m/m3d/m_anmvis.cpp (limited to 'src/m/m3d/m_anmvis.cpp') diff --git a/src/m/m3d/m_anmvis.cpp b/src/m/m3d/m_anmvis.cpp new file mode 100644 index 00000000..68d4bd21 --- /dev/null +++ b/src/m/m3d/m_anmvis.cpp @@ -0,0 +1,57 @@ +#include +#include +#include +#include +#include + +namespace m3d { + +anmVis_c::~anmVis_c() {} + +int anmVis_c::getType() const { + return nw4r::g3d::ScnMdlSimple::ANMOBJTYPE_VIS; +} + +bool anmVis_c::create(nw4r::g3d::ResMdl mdl, nw4r::g3d::ResAnmVis anm, mAllocator_c *alloc, u32 *pSize) { + if (alloc == nullptr) { + alloc = internal::l_allocator_p; + } + + u32 tmp; + if (pSize == nullptr) { + pSize = &tmp; + } + + nw4r::g3d::AnmObjVisRes::Construct(nullptr, pSize, anm, mdl); + if (!createAllocator(alloc, pSize)) { + return false; + } + + mpAnmObj = nw4r::g3d::AnmObjVisRes::Construct(&mAllocator, &tmp, anm, mdl); + if (!mpAnmObj->Bind(mdl)) { + remove(); + return false; + } else { + setFrmCtrlDefault(anm, PLAY_MODE_4); + return true; + } +} + +void anmVis_c::setAnm(m3d::bmdl_c &mdl, nw4r::g3d::ResAnmVis anm, m3d::playMode_e mode) { + mdl.removeAnm((nw4r::g3d::ScnMdlSimple::AnmObjType)getType()); + mpAnmObj->Release(); + mpFrameHeap->free(0x3); + u32 tmp; + mpAnmObj = nw4r::g3d::AnmObjVisRes::Construct(&mAllocator, &tmp, anm, mdl.getResMdl()); + mpAnmObj->Bind(mdl.getResMdl()); + setFrmCtrlDefault(anm, mode); +} + +void anmVis_c::setFrmCtrlDefault(nw4r::g3d::ResAnmVis &anm, m3d::playMode_e mode) { + if (mode == PLAY_MODE_4) { + mode = anm.GetAnmPolicy() == nw4r::g3d::ANM_POLICY_ONETIME ? PLAY_MODE_1 : PLAY_MODE_0; + } + set(anm.GetNumFrame(), mode, 1.0f, -1.0f); +} + +} // namespace m3d -- cgit v1.2.3