Isle
Loading...
Searching...
No Matches
mxdsmediaaction.cpp
Go to the documentation of this file.
1#include "mxdsmediaaction.h"
2
3#include "mxdebug.h"
4#include "mxutilities.h"
5
7
8// FUNCTION: LEGO1 0x100c8b40
9// FUNCTION: BETA10 0x1015c760
11{
12 m_type = e_mediaAction;
13 m_mediaSrcPath = NULL;
14 m_unk0x9c.SetUnk0x00(0);
15 m_unk0x9c.SetUnk0x04(0);
16 m_framesPerSecond = 0;
17 m_mediaFormat = 0;
18 m_unk0xb4 = -1;
19 m_paletteManagement = 1;
20 m_sustainTime = 0;
21}
22
23// FUNCTION: LEGO1 0x100c8cf0
24// FUNCTION: BETA10 0x1015c846
26{
27 delete[] m_mediaSrcPath;
28}
29
30// FUNCTION: LEGO1 0x100c8d60
31// FUNCTION: BETA10 0x1015c8cc
33{
34 CopyMediaSrcPath(p_dsMediaAction.m_mediaSrcPath);
35
36 m_unk0x9c = p_dsMediaAction.m_unk0x9c;
37 m_framesPerSecond = p_dsMediaAction.m_framesPerSecond;
38 m_mediaFormat = p_dsMediaAction.m_mediaFormat;
39 m_paletteManagement = p_dsMediaAction.m_paletteManagement;
40 m_sustainTime = p_dsMediaAction.m_sustainTime;
41}
42
43// FUNCTION: BETA10 0x1015c959
45{
46 CopyFrom(p_dsMediaAction);
47}
48
49// FUNCTION: LEGO1 0x100c8dc0
50// FUNCTION: BETA10 0x1015c9da
52{
53 if (this == &p_dsMediaAction) {
54 return *this;
55 }
56
57 MxDSAction::operator=(p_dsMediaAction);
58 CopyFrom(p_dsMediaAction);
59 return *this;
60}
61
62// FUNCTION: LEGO1 0x100c8df0
63// FUNCTION: BETA10 0x1015ca21
65{
66 MxDSMediaAction* clone = new MxDSMediaAction();
67
68 if (clone) {
69 *clone = *this;
70 }
71
72 return clone;
73}
74
75// FUNCTION: LEGO1 0x100c8e80
76// FUNCTION: BETA10 0x1015cacb
77void MxDSMediaAction::CopyMediaSrcPath(const char* p_mediaSrcPath)
78{
79 if (m_mediaSrcPath == p_mediaSrcPath) {
80 return;
81 }
82
83 delete[] m_mediaSrcPath;
84
85 if (p_mediaSrcPath) {
86 m_mediaSrcPath = new char[strlen(p_mediaSrcPath) + 1];
87 if (m_mediaSrcPath) {
88 strcpy(m_mediaSrcPath, p_mediaSrcPath);
89 }
90 else {
91 MxTrace("MxDSMediaAction: name allocation failed: %s.\n", p_mediaSrcPath);
92 }
93 }
94 else {
95 m_mediaSrcPath = NULL;
96 }
97}
98
99// FUNCTION: LEGO1 0x100c8f00
100// FUNCTION: BETA10 0x1015cbf5
102{
103 return MxDSAction::VTable0x14();
104}
105
106// FUNCTION: LEGO1 0x100c8f10
107// FUNCTION: BETA10 0x1015cc13
109{
110 MxU32 totalSizeOnDisk = MxDSAction::GetSizeOnDisk();
111
112 if (m_mediaSrcPath) {
113 totalSizeOnDisk += strlen(m_mediaSrcPath) + 1;
114 }
115 else {
116 totalSizeOnDisk++;
117 }
118
119 totalSizeOnDisk += sizeof(m_unk0x9c.m_unk0x00);
120 totalSizeOnDisk += sizeof(m_unk0x9c.m_unk0x04);
121 totalSizeOnDisk += sizeof(m_framesPerSecond);
122 totalSizeOnDisk += sizeof(m_mediaFormat);
123 totalSizeOnDisk += sizeof(m_paletteManagement);
124 totalSizeOnDisk += sizeof(m_sustainTime);
125
126 m_sizeOnDisk = totalSizeOnDisk - MxDSAction::GetSizeOnDisk();
127 return totalSizeOnDisk;
128}
129
130// FUNCTION: LEGO1 0x100c8f60
131// FUNCTION: BETA10 0x1015cc93
132void MxDSMediaAction::Deserialize(MxU8*& p_source, MxS16 p_flags)
133{
134 MxDSAction::Deserialize(p_source, p_flags);
135
136 CopyMediaSrcPath((char*) p_source);
137 p_source += strlen(m_mediaSrcPath) + 1;
138
139 // clang-format off
140 m_unk0x9c.SetUnk0x00(*(MxU32*) p_source); p_source += sizeof(m_unk0x9c.m_unk0x00);
141 m_unk0x9c.SetUnk0x04(*(MxU32*) p_source); p_source += sizeof(m_unk0x9c.m_unk0x04);
142
143 m_framesPerSecond = *(MxS32*) p_source; p_source += sizeof(m_framesPerSecond);
144 m_mediaFormat = *(MxS32*) p_source; p_source += sizeof(m_mediaFormat);
145 m_paletteManagement = *(MxS32*) p_source; p_source += sizeof(m_paletteManagement);
146 m_sustainTime = *(MxS32*) p_source; p_source += sizeof(m_sustainTime);
147 // clang-format on
148}
[AI] Represents an action deserialized from SI chunks, holding key animation or script parameters suc...
Definition: mxdsaction.h:17
undefined4 VTable0x14() override
[AI] Unknown virtual placeholder, possibly for additional interfaces.
Definition: mxdsaction.cpp:106
MxU32 GetSizeOnDisk() override
[AI] Serializes the size on disk of this action (all fields + extra data length)
Definition: mxdsaction.cpp:113
MxDSAction & operator=(MxDSAction &p_dsAction)
[AI] Assignment operator: deep-copy from a different MxDSAction, including base class data and extra ...
Definition: mxdsaction.cpp:133
void Deserialize(MxU8 *&p_source, MxS16 p_unk0x24) override
[AI] Deserializes this action's data from a binary buffer.
Definition: mxdsaction.cpp:259
MxDSMediaAction extends MxDSAction to add media-specific playback properties and management.
MxU32 GetSizeOnDisk() override
Calculates size in bytes required to store this object on disk, including strings and additional fiel...
void Deserialize(MxU8 *&p_source, MxS16 p_unk0x24) override
Deserializes the object data from a binary buffer, restoring state including media source path and co...
MxDSAction * Clone() override
Creates a deep copy (clone) of this action and returns it.
void CopyMediaSrcPath(const char *p_mediaSrcPath)
Deep-copies a new string for the media source path; cleans up previous memory as needed.
undefined4 VTable0x14() override
[AI] Implementation-specific vtable placeholder.
MxDSMediaAction()
Constructs a new MxDSMediaAction and initializes all members.
~MxDSMediaAction() override
Destructor.
MxDSMediaAction & operator=(MxDSMediaAction &p_dsMediaAction)
Assignment operator.
void CopyFrom(MxDSMediaAction &p_dsMediaAction)
Copy the internal state and properties from another MxDSMediaAction.
#define DECOMP_SIZE_ASSERT(T, S)
Definition: decomp.h:19
unsigned int undefined4
Definition: decomp.h:28
#define NULL
[AI] Null pointer value (C/C++ semantics).
Definition: legotypes.h:26
#define MxTrace(args)
[AI] Macro for trace logging (non-variadic version, MSVC compatibility), expands to nothing.
Definition: mxdebug.h:55
signed short MxS16
[AI]
Definition: mxtypes.h:26
unsigned char MxU8
[AI]
Definition: mxtypes.h:8
signed int MxS32
[AI]
Definition: mxtypes.h:38
unsigned int MxU32
[AI]
Definition: mxtypes.h:32