1#include <game/mLib/m_3d.hpp>
2#include <game/mLib/m_heap.hpp>
3#include <lib/nw4r/g3d/anm_obj_chr.hpp>
6 if (allocator ==
nullptr) {
7 allocator = internal::l_allocator_p;
11 if (objSize ==
nullptr) {
15 nw4r::g3d::AnmObjChrRes::Construct(
nullptr, objSize, anmChr, mdl,
false);
16 if (!createAllocator(allocator, objSize)) {
20 mpObj = nw4r::g3d::AnmObjChrRes::Construct(&mAllocator, &size, anmChr, mdl,
false);
21 if (!mpObj->Bind(mdl)) {
30void m3d::anmChr_c::setAnm(m3d::bmdl_c &mdl, nw4r::g3d::ResAnmChr anmChr,
m3d::playMode_e playMode) {
31 nw4r::g3d::ScnMdlSimple::AnmObjType anmType = (nw4r::g3d::ScnMdlSimple::AnmObjType) getType();
32 mdl.removeAnm(anmType);
33 setAnmAfter(mdl, anmChr, playMode);
36void m3d::anmChr_c::setAnmAfter(m3d::bmdl_c &mdl, nw4r::g3d::ResAnmChr anmChr,
m3d::playMode_e playMode) {
37 nw4r::g3d::AnmObj *n = mpObj->getNode();
39 nw4r::g3d::AnmObjChrNode *chrNode;
43 chrNode = nw4r::g3d::G3dObj::DynamicCast<nw4r::g3d::AnmObjChrNode>(n);
46 while (nodeIdx < chrNode->getCount()) {
47 if (chrNode->arr[nodeIdx] != mpObj) {
54 weight = chrNode->GetWeight(nodeIdx);
55 chrNode->Detach(nodeIdx);
62 mpObj = nw4r::g3d::AnmObjChrRes::Construct(&mAllocator, &size, anmChr, mdl.getResMdl(),
false);
63 mpObj->Bind(mdl.getResMdl());
64 setFrmCtrlDefault(anmChr, playMode);
70 nw4r::g3d::AnmObjChrRes *chrRes = nw4r::g3d::G3dObj::DynamicCast<nw4r::g3d::AnmObjChrRes>(mpObj);
71 chrNode->SetWeight(nodeIdx, weight);
72 chrNode->Attach(nodeIdx, chrRes);
75void m3d::anmChr_c::setFrmCtrlDefault(nw4r::g3d::ResAnmChr &anmChr,
m3d::playMode_e playMode) {
79 fanm_c::set(anmChr.getDuration(), playMode, 1.0f, -1.0f);
@ MEM_FRMHEAP_FREE_ALL
Deallocates all memory blocks from the heap.
void set(float duration, m3d::playMode_e playMode, float updateRate, float startFrame)
Starts the animation with the given parameters.
An allocator class that wraps an EGG:Allocator .
@ FORWARD_ONCE
Play the animation forward once.
@ FORWARD_LOOP
Play the animation forward in a loop.
@ PLAYMODE_INHERIT
Use the play mode of the parent.