Kinoko
v0.6
A reimplementation of Mario Kart Wii's physics engine in C++
Toggle main menu visibility
Loading...
Searching...
No Matches
AnmObj.hh
Go to the documentation of this file.
1
#pragma once
2
3
#include <
Common.hh
>
4
5
// Credit: kiwi515/ogws
6
7
namespace
Kinoko::Abstract::g3d
{
8
9
enum class
AnmPolicy
:
u32
{
10
OneTime
= 0,
11
Loop
= 1,
12
Max
= 2,
13
};
14
15
[[nodiscard]]
f32
PlayPolicy_Onetime
(
f32
start,
f32
end,
f32
frame);
16
[[nodiscard]]
f32
PlayPolicy_Loop
(
f32
start,
f32
end,
f32
frame);
17
18
typedef
f32
(*
PlayPolicyFunc
)(
f32
start,
f32
end,
f32
frame);
19
20
[[nodiscard]]
inline
PlayPolicyFunc
GetAnmPlayPolicy
(
AnmPolicy
policy) {
21
constexpr
size_t
count =
static_cast<
size_t
>
(
AnmPolicy::Max
);
22
static
constexpr
PlayPolicyFunc
POLICY_TABLE[count] = {
23
PlayPolicy_Onetime
,
24
PlayPolicy_Loop
,
25
};
26
27
size_t
idx =
static_cast<
size_t
>
(policy);
28
ASSERT
(idx < count);
29
return
POLICY_TABLE[idx];
30
}
31
32
class
FrameCtrl
{
33
friend
class
Host::Context
;
34
35
public
:
36
FrameCtrl
(
f32
start,
f32
end,
PlayPolicyFunc
policy)
37
:
m_frame
(0.0f),
m_updateRate
(1.0f),
m_startFrame
(start),
m_endFrame
(end),
38
m_playPolicy
(policy) {
39
ASSERT
(
m_playPolicy
);
40
}
41
42
void
updateFrame
() {
43
setFrame
(
m_updateRate
*
s_baseUpdateRate
+
m_frame
);
44
}
45
47
[[nodiscard]]
f32
frame
()
const
{
48
return
m_frame
;
49
}
50
51
[[nodiscard]]
f32
rate
()
const
{
52
return
m_updateRate
;
53
}
54
55
[[nodiscard]]
PlayPolicyFunc
playPolicy
()
const
{
56
return
m_playPolicy
;
57
}
58
59
61
void
setFrame
(
f32
frame
) {
62
m_frame
=
m_playPolicy
(
m_startFrame
,
m_endFrame
,
frame
);
63
}
64
65
void
setRate
(
f32
rate
) {
66
m_updateRate
=
rate
;
67
}
68
69
void
setPlayPolicy
(
PlayPolicyFunc
func) {
70
ASSERT
(func);
71
m_playPolicy
= func;
72
}
73
74
75
private
:
76
f32
m_frame
;
77
f32
m_updateRate
;
78
f32
m_startFrame
;
79
f32
m_endFrame
;
80
PlayPolicyFunc
m_playPolicy
;
81
82
static
f32
s_baseUpdateRate
;
83
};
84
85
}
// namespace Kinoko::Abstract::g3d
Common.hh
This header houses common data types such as our integral types and enums.
ASSERT
#define ASSERT(e)
Definition
Logger.hh:25
Kinoko::Abstract::g3d::FrameCtrl::playPolicy
PlayPolicyFunc playPolicy() const
Definition
AnmObj.hh:55
Kinoko::Abstract::g3d::FrameCtrl::m_frame
f32 m_frame
Definition
AnmObj.hh:76
Kinoko::Abstract::g3d::FrameCtrl::m_startFrame
f32 m_startFrame
Definition
AnmObj.hh:78
Kinoko::Abstract::g3d::FrameCtrl::updateFrame
void updateFrame()
Definition
AnmObj.hh:42
Kinoko::Abstract::g3d::FrameCtrl::setPlayPolicy
void setPlayPolicy(PlayPolicyFunc func)
Definition
AnmObj.hh:69
Kinoko::Abstract::g3d::FrameCtrl::s_baseUpdateRate
static f32 s_baseUpdateRate
Definition
AnmObj.hh:82
Kinoko::Abstract::g3d::FrameCtrl::FrameCtrl
FrameCtrl(f32 start, f32 end, PlayPolicyFunc policy)
Definition
AnmObj.hh:36
Kinoko::Abstract::g3d::FrameCtrl::rate
f32 rate() const
Definition
AnmObj.hh:51
Kinoko::Abstract::g3d::FrameCtrl::setRate
void setRate(f32 rate)
Definition
AnmObj.hh:65
Kinoko::Abstract::g3d::FrameCtrl::setFrame
void setFrame(f32 frame)
Definition
AnmObj.hh:61
Kinoko::Abstract::g3d::FrameCtrl::m_endFrame
f32 m_endFrame
Definition
AnmObj.hh:79
Kinoko::Abstract::g3d::FrameCtrl::m_updateRate
f32 m_updateRate
Definition
AnmObj.hh:77
Kinoko::Abstract::g3d::FrameCtrl::frame
f32 frame() const
Definition
AnmObj.hh:47
Kinoko::Abstract::g3d::FrameCtrl::m_playPolicy
PlayPolicyFunc m_playPolicy
Definition
AnmObj.hh:80
Kinoko::Host::Context
Contexts can be used to restore a previous memory state for the current session.
Definition
Context.hh:71
Kinoko::Abstract::g3d
Definition
AnmObj.cc:5
Kinoko::Abstract::g3d::PlayPolicyFunc
f32(*) PlayPolicyFunc(f32 start, f32 end, f32 frame)
Definition
AnmObj.hh:18
Kinoko::Abstract::g3d::PlayPolicy_Onetime
f32 PlayPolicy_Onetime(f32, f32, f32 frame)
Definition
AnmObj.cc:8
Kinoko::Abstract::g3d::PlayPolicy_Loop
f32 PlayPolicy_Loop(f32 start, f32 end, f32 frame)
Definition
AnmObj.cc:13
Kinoko::Abstract::g3d::GetAnmPlayPolicy
PlayPolicyFunc GetAnmPlayPolicy(AnmPolicy policy)
Definition
AnmObj.hh:20
Kinoko::Abstract::g3d::AnmPolicy
AnmPolicy
Definition
AnmObj.hh:9
Kinoko::Abstract::g3d::AnmPolicy::Max
@ Max
Definition
AnmObj.hh:12
Kinoko::Abstract::g3d::AnmPolicy::Loop
@ Loop
Definition
AnmObj.hh:11
Kinoko::Abstract::g3d::AnmPolicy::OneTime
@ OneTime
Definition
AnmObj.hh:10
Kinoko::f32
float f32
Definition
Memory.hh:21
Kinoko::u32
uint32_t u32
Definition
Memory.hh:18
abstract
g3d
AnmObj.hh
Made by
Malleo
. Logo by
vabold
. Website generated by
Doxygen
1.18.0