blob: 53a4a81bd68ba2c95ffed0b5d26e14a714a191c9 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
#include "m/m3d/m_banm.h"
#include "m/m3d/m3d.h"
#include "m/m_heap.h"
namespace m3d {
banm_c::~banm_c() {
banm_c::remove();
}
void banm_c::remove() {
if (mpAnmObj != nullptr) {
mpAnmObj->DetachFromParent();
mpAnmObj->Destroy();
mpAnmObj = nullptr;
}
if (mpFrameHeap != nullptr) {
mHeap::destroyFrmHeap(mpFrameHeap);
mpFrameHeap = nullptr;
}
}
bool banm_c::createAllocator(mAllocator_c *alloc, u32 *pStart) {
// TODO understand this maybe?
int i1 = mHeap::frmHeapCost(*pStart, 0x20);
int i2 = mHeap::frmHeapCost(0, 0x20);
i2 = ROUND_UP(i1, 0x20) - i2;
i1 = mHeap::frmHeapCost(i2, 0x20);
*pStart = ROUND_UP(i1, 0x20);
mpFrameHeap = mHeap::createFrmHeap(
i2, (EGG::Heap *)alloc->mHeap, "アニメ切り替え用アロケータ(m3d::banm_c::m_heap)", internal::l_alignment,
mHeap::OPT_NONE
);
mAllocator.attach(mpFrameHeap, 0x20);
return true;
}
bool banm_c::IsBound() const {
if (mpAnmObj == nullptr) {
return false;
}
return mpAnmObj->TestAnmFlag(nw4r::g3d::AnmObj::FLAG_ANM_BOUND);
}
void banm_c::play() {}
f32 banm_c::getFrame() const {
return mpAnmObj->GetFrame();
}
void banm_c::setFrameOnly(f32 frame) {
mpAnmObj->SetFrame(frame);
}
f32 banm_c::getRate() const {
return mpAnmObj->GetUpdateRate();
}
void banm_c::setRate(f32 f) {
mpAnmObj->SetUpdateRate(f);
}
} // namespace m3d
|