NSMBW-Decomp
A decompilation of New Super Mario Bros. Wii
Loading...
Searching...
No Matches
snd_MoveValue.h
1#ifndef NW4R_SND_MOVE_VALUE_H
2#define NW4R_SND_MOVE_VALUE_H
3
4/*******************************************************************************
5 * classes and functions
6 */
7
8namespace nw4r { namespace snd { namespace detail
9{
10 // [R89JEL]:/bin/RVL/Debug/mainD.elf:.debug::0x27b93, 0x28fef...
11 template <typename TValue, typename TTime>
12 class MoveValue
13 {
14 // methods
15 public:
16 // cdtors
17 MoveValue() :
18 mOrigin (TValue()),
19 mTarget (TValue()),
20 mFrame (TTime ()),
21 mCounter (TTime ())
22 {
23 }
24
25 // methods
26 TValue GetValue() const
27 {
28 if (IsFinished())
29 return mTarget;
30
31 return mOrigin + mCounter * (mTarget - mOrigin) / mFrame;
32 }
33
34 void SetTarget(TValue targetValue, TTime frames)
35 {
36 mOrigin = GetValue();
37 mTarget = targetValue;
38 mFrame = frames;
39 mCounter = TTime();
40 }
41
42 bool IsFinished() const { return mCounter >= mFrame; }
43
44 TTime GetRemainingTime() const {
45 return IsFinished() ? 0 : mFrame - mCounter;
46 }
47
48 void InitValue(TValue value)
49 {
50 mOrigin = value;
51 mTarget = value;
52 mFrame = TTime();
53 mCounter = TTime();
54 }
55
56 void Update()
57 {
58 if (mCounter < mFrame)
59 mCounter++;
60 }
61
62 // members
63 private:
64 TValue mOrigin; // size TValue, offset 0x00
65 TValue mTarget; // size TValue, offset TValue
66 TTime mFrame; // size TTime, offset TValue * 2
67 TTime mCounter; // size TTine, offset TValue * 2 + TTime
68 }; // size TValue * 2 + TTime * 2
69}}} // namespace nw4r::snd::detail
70
71#endif // NW4R_SND_MOVE_VALUE_H