|
@@ -41,32 +41,31 @@ namespace QGears
|
|
|
Ogre::ManualResourceLoader* loader)
|
|
Ogre::ManualResourceLoader* loader)
|
|
|
: Resource(creator, name, handle, group, isManual, loader)
|
|
: Resource(creator, name, handle, group, isManual, loader)
|
|
|
{
|
|
{
|
|
|
- // TODO
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
TriggersFile::~TriggersFile()
|
|
TriggersFile::~TriggersFile()
|
|
|
{
|
|
{
|
|
|
- // TODO
|
|
|
|
|
|
|
+ unload();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
void TriggersFile::loadImpl(void)
|
|
void TriggersFile::loadImpl(void)
|
|
|
{
|
|
{
|
|
|
- // TODO
|
|
|
|
|
|
|
+ TriggerFileSerializer serializer;
|
|
|
|
|
+ Ogre::DataStreamPtr stream(openResource());
|
|
|
|
|
+ serializer.importTriggerFile(stream, this);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
void TriggersFile::unloadImpl(void)
|
|
void TriggersFile::unloadImpl(void)
|
|
|
{
|
|
{
|
|
|
- // TODO
|
|
|
|
|
|
|
+
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
size_t TriggersFile::calculateSize(void) const
|
|
size_t TriggersFile::calculateSize(void) const
|
|
|
{
|
|
{
|
|
|
- // TODO
|
|
|
|
|
- return 0;
|
|
|
|
|
|
|
+ return sizeof(TriggerData);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- // TODO: Set this
|
|
|
|
|
- /*static*/ const String TriggersFile::RESOURCE_TYPE;
|
|
|
|
|
|
|
+ /*static*/ const String TriggersFile::RESOURCE_TYPE("FF7FieldTriggersSection");
|
|
|
|
|
|
|
|
// ===========================================================================
|
|
// ===========================================================================
|
|
|
|
|
|
|
@@ -84,12 +83,103 @@ namespace QGears
|
|
|
|
|
|
|
|
TriggerFileSerializer::TriggerFileSerializer()
|
|
TriggerFileSerializer::TriggerFileSerializer()
|
|
|
{
|
|
{
|
|
|
- // TODO
|
|
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ void TriggerFileSerializer::ReadVertex_s(Ogre::DataStreamPtr& stream, TriggersFile::Vertex_s& vertex)
|
|
|
|
|
+ {
|
|
|
|
|
+ readShort(stream, vertex.x);
|
|
|
|
|
+ readShort(stream, vertex.y);
|
|
|
|
|
+ readShort(stream, vertex.z);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ void TriggerFileSerializer::ReadRange(Ogre::DataStreamPtr& stream, TriggersFile::Range& range)
|
|
|
|
|
+ {
|
|
|
|
|
+ readInt16(stream, range.left);
|
|
|
|
|
+ readInt16(stream, range.top);
|
|
|
|
|
+ readInt16(stream, range.right);
|
|
|
|
|
+ readInt16(stream, range.bottom);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ void TriggerFileSerializer::ReadExit(Ogre::DataStreamPtr& stream, TriggersFile::Exit& exit)
|
|
|
|
|
+ {
|
|
|
|
|
+ for (size_t i = 0; i < exit.exit_line.size(); i++)
|
|
|
|
|
+ {
|
|
|
|
|
+ ReadVertex_s(stream, exit.exit_line[i]);
|
|
|
|
|
+ }
|
|
|
|
|
+ ReadVertex_s(stream, exit.destination);
|
|
|
|
|
+ readShort(stream, exit.fieldID);
|
|
|
|
|
+ readUInt8(stream, exit.dir);
|
|
|
|
|
+ readUInt8(stream, exit.dir_copy1);
|
|
|
|
|
+ readUInt8(stream, exit.dir_copy2);
|
|
|
|
|
+ readUInt8(stream, exit.dir_copy3);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ void TriggerFileSerializer::ReadArrow(Ogre::DataStreamPtr& stream, TriggersFile::Arrow& arrow)
|
|
|
|
|
+ {
|
|
|
|
|
+ readSInt32(stream, arrow.positionX);
|
|
|
|
|
+ readSInt32(stream, arrow.positionZ);
|
|
|
|
|
+ readSInt32(stream, arrow.positionY);
|
|
|
|
|
+ readUInt32(stream, arrow.type);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ void TriggerFileSerializer::ReadTrigger(Ogre::DataStreamPtr& stream, TriggersFile::Trigger& trigger)
|
|
|
|
|
+ {
|
|
|
|
|
+ for (size_t i = 0; i < trigger.trigger_line.size(); i++)
|
|
|
|
|
+ {
|
|
|
|
|
+ ReadVertex_s(stream, trigger.trigger_line[i]);
|
|
|
|
|
+ }
|
|
|
|
|
+ readUInt8(stream, trigger.background_parameter);
|
|
|
|
|
+ readUInt8(stream, trigger.background_state);
|
|
|
|
|
+ readUInt8(stream, trigger.behavior);
|
|
|
|
|
+ readUInt8(stream, trigger.soundID);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
void TriggerFileSerializer::importTriggerFile(Ogre::DataStreamPtr &stream, TriggersFile *pDest)
|
|
void TriggerFileSerializer::importTriggerFile(Ogre::DataStreamPtr &stream, TriggersFile *pDest)
|
|
|
{
|
|
{
|
|
|
- // TODO
|
|
|
|
|
|
|
+ std::unique_ptr<TriggersFile::TriggerData> data = std::unique_ptr<TriggersFile::TriggerData>(new TriggersFile::TriggerData());
|
|
|
|
|
+
|
|
|
|
|
+ readChars(stream, data->name.data(), data->name.size());
|
|
|
|
|
+ readUInt8(stream, data->control);
|
|
|
|
|
+ readInt16(stream, data->cameraFocusHeight);
|
|
|
|
|
+ ReadRange(stream, data->camera_range);
|
|
|
|
|
+
|
|
|
|
|
+ readUInt8(stream, data->bg_layer1_flag);
|
|
|
|
|
+ readUInt8(stream, data->bg_layer2_flag);
|
|
|
|
|
+ readUInt8(stream, data->bg_layer3_flag);
|
|
|
|
|
+ readUInt8(stream, data->bg_layer4_flag);
|
|
|
|
|
+
|
|
|
|
|
+ readInt16(stream, data->bg_layer3_width);
|
|
|
|
|
+ readInt16(stream, data->bg_layer3_height);
|
|
|
|
|
+ readInt16(stream, data->bg_layer4_width);
|
|
|
|
|
+ readInt16(stream, data->bg_layer4_height);
|
|
|
|
|
+
|
|
|
|
|
+ stream->read(data->unknown.data(), data->unknown.size());
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ for (size_t i = 0; i < data->doors.size(); i++)
|
|
|
|
|
+ {
|
|
|
|
|
+ TriggersFile::Exit& exit = data->doors[i];
|
|
|
|
|
+ ReadExit(stream, exit);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ for (size_t i = 0; i < data->triggers.size(); i++)
|
|
|
|
|
+ {
|
|
|
|
|
+ TriggersFile::Trigger& trigger = data->triggers[i];
|
|
|
|
|
+ ReadTrigger(stream, trigger);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ stream->read(data->display_arrow.data(), data->display_arrow.size());
|
|
|
|
|
+
|
|
|
|
|
+ for (size_t i = 0; i < data->arrows.size(); i++)
|
|
|
|
|
+ {
|
|
|
|
|
+ TriggersFile::Arrow& arrow = data->arrows[i];
|
|
|
|
|
+ ReadArrow(stream, arrow);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ pDest->mData = std::move(data);
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
}
|
|
}
|