mirror of
https://github.com/isledecomp/SIEdit.git
synced 2025-04-22 01:23:32 -04:00
lib: document more of the MxOb structure
This commit is contained in:
parent
9fa1e4d137
commit
9412012a65
2 changed files with 69 additions and 9 deletions
|
@ -18,6 +18,13 @@ Data ReadU16(std::ifstream &is)
|
|||
return u;
|
||||
}
|
||||
|
||||
Data ReadU8(std::ifstream &is)
|
||||
{
|
||||
u8 u;
|
||||
is.read((char *) &u, sizeof(u));
|
||||
return u;
|
||||
}
|
||||
|
||||
Data ReadVector3(std::ifstream &is)
|
||||
{
|
||||
Vector3 u;
|
||||
|
@ -127,6 +134,33 @@ const char *MxOb::GetTypeName(Type type)
|
|||
return "Unknown";
|
||||
}
|
||||
|
||||
std::vector<const char*> MxOb::GetFlagsName(Flags flags)
|
||||
{
|
||||
std::vector<const char*> names;
|
||||
|
||||
if (flags == FLAGS_COUNT) {
|
||||
return names;
|
||||
}
|
||||
|
||||
if (flags & Transparent) {
|
||||
names.push_back("Transparent");
|
||||
}
|
||||
if (flags & NoLoop) {
|
||||
names.push_back("NoLoop");
|
||||
}
|
||||
if (flags & LoopCache) {
|
||||
names.push_back("LoopCache");
|
||||
}
|
||||
if (flags & LoopStream) {
|
||||
names.push_back("LoopStream");
|
||||
}
|
||||
if (flags & Unknown) {
|
||||
names.push_back("Unknown");
|
||||
}
|
||||
|
||||
return names;
|
||||
}
|
||||
|
||||
void MxOb::Read(std::ifstream &is, DataMap &data, u32 version, u32 size)
|
||||
{
|
||||
Data obj_type = ReadU16(is);
|
||||
|
@ -135,10 +169,12 @@ void MxOb::Read(std::ifstream &is, DataMap &data, u32 version, u32 size)
|
|||
data["Unknown1"] = ReadU32(is);
|
||||
data["Name"] = ReadString(is);
|
||||
data["ID"] = ReadU32(is);
|
||||
data["Unknown3"] = ReadU32(is);
|
||||
data["Flags"] = ReadU8(is);
|
||||
data["Padding1"] = ReadU8(is);
|
||||
data["Padding2"] = ReadU16(is);
|
||||
data["Unknown4"] = ReadU32(is);
|
||||
data["Unknown5"] = ReadU32(is);
|
||||
data["Unknown6"] = ReadU32(is);
|
||||
data["Duration"] = ReadU32(is);
|
||||
data["Loops"] = ReadU32(is);
|
||||
data["Position"] = ReadVector3(is);
|
||||
data["Direction"] = ReadVector3(is);
|
||||
data["Up"] = ReadVector3(is);
|
||||
|
|
|
@ -116,13 +116,15 @@ public:
|
|||
* Unknown1 | 4 | u32 |
|
||||
* Name | Variable | string | Null-terminated string identifying object's name
|
||||
* ID | 4 | u32 | Unique object identifier within file (used to differentiate interleaved MxChs)
|
||||
* Unknown3 | 4 | u32 |
|
||||
* Unknown4 | 4 | u32 |
|
||||
* Unknown5 | 4 | u32 |
|
||||
* Unknown6 | 4 | u32 |
|
||||
* Flags | 1 | u8 | Flags of object (member of MxOb::Flags enum)
|
||||
* Padding1 | 1 | u8 |
|
||||
* Padding2 | 2 | u16 |
|
||||
* Unknown4 | 4 | u32 | Similar to Duration, but only used for Lego3DWavePresenter
|
||||
* Duration | 4 | u32 | Duration in milliseconds * Loops
|
||||
* Loops | 4 | u32 |
|
||||
* Position | 24 | Vector3 | Position
|
||||
* Direction | 24 | Vector3 | Position
|
||||
* Up | 24 | Vector3 | Position
|
||||
* Direction | 24 | Vector3 | Direction to look towards
|
||||
* Up | 24 | Vector3 | Up vector
|
||||
* ExtraLength | 2 | u16 |
|
||||
* ExtraData | ExtraLength | bytearray |
|
||||
* FileName | Variable | string | Original filename of the file represented by this object.
|
||||
|
@ -167,9 +169,31 @@ public:
|
|||
TYPE_COUNT
|
||||
};
|
||||
|
||||
enum Flags
|
||||
{
|
||||
/// Object is transparent
|
||||
Transparent = 0b00001000,
|
||||
|
||||
/// Object does not loop
|
||||
NoLoop = 0b00000010,
|
||||
|
||||
/// Object loops via cache (i.e. hard disk)
|
||||
LoopCache = 0b00000001,
|
||||
|
||||
/// Object loops via stream (i.e. CD-ROM)
|
||||
LoopStream = 0b00000100,
|
||||
|
||||
/// Unknown flag, but set by every object thus far
|
||||
Unknown = 0b00100000,
|
||||
|
||||
/// Total number of flags (not a real type)
|
||||
FLAGS_COUNT
|
||||
};
|
||||
|
||||
// FIXME: sitypes.h probably won't be part of the public API, so this should
|
||||
// probably be moved
|
||||
LIBWEAVER_EXPORT static const char *GetTypeName(Type type);
|
||||
LIBWEAVER_EXPORT static std::vector<const char*> GetFlagsName(Flags flags);
|
||||
|
||||
virtual void Read(std::ifstream &is, DataMap &data, u32 version, u32 size);
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue