V-Gears 0
Free Final Fantasy VII engine.
VGearsTriggersFile.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 2022 The V-Gears Team
3 *
4 * This file is part of V-Gears
5 *
6 * V-Gears is free software: you can redistribute it and/or modify it under
7 * terms of the GNU General Public License as published by the Free Software
8 * Foundation, version 3.0 (GPLv3) of the License.
9 *
10 * V-Gears is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 */
15
16#pragma once
17
18#include <memory>
19#include <array>
20#include <OgreResourceManager.h>
21#include "VGearsPrerequisites.h"
23#include "VGearsSerializer.h"
24
25namespace VGears{
26
31 public Ogre::ResourceManager, public Ogre::Singleton<TriggersFileManager>
32 {
33
34 // TODO: Move this to it's own file?
35
36 public:
37
42
46 virtual ~TriggersFileManager();
47
52
57
58 protected:
59
77 Ogre::Resource *createImpl(
78 const Ogre::String &name, Ogre::ResourceHandle handle, const Ogre::String &group,
79 bool is_manual, Ogre::ManualResourceLoader *loader,
80 const Ogre::NameValuePairList *create_params
81 );
82 };
83
87 class TriggersFile : public Resource{
88
89 public:
90
110 Ogre::ResourceManager* creator, const String &name, Ogre::ResourceHandle handle,
111 const String& group, bool is_manual = false,
112 Ogre::ManualResourceLoader* loader = nullptr
113 );
114
118 virtual ~TriggersFile();
119
123 static const String RESOURCE_TYPE;
124
130 struct Range{
131
136
141
146
151 };
152
157
162
167
172 };
173
179 struct Gateway{
180
184 std::array<TriggerVertex, 2> exit_line;
185
190
195
200
205
210
215 };
216
220 struct Trigger{
221
225 std::array<TriggerVertex, 2> trigger_line;
226
231
236
248
253 };
254
258 struct Arrow{
259
264
269
274
281 };
282
287
291 std::array<char, 9> name;
292
297
302
309
314
319
324
329
334
339
344
349
353 std::array<u8, 24> unknown;
354
360 std::array<Gateway, 12> doors;
361
367 std::array<Trigger, 12> triggers;
368
374 std::array<u8, 12> display_arrow;
375
381 std::array<Arrow, 12> arrows;
382 };
383
384
390 const Range& GetCameraRange() const{return trigger_data_->camera_range;}
391
400 float MovementRotation() const{
401 return 180.0f * (static_cast<float>(trigger_data_->control) - 128.0f) / 128.0f;
402 }
403
407 const std::array<Gateway, 12>& GetGateways() const{return trigger_data_->doors;}
408
409 protected:
410
414 virtual void loadImpl() override;
415
419 virtual void unloadImpl() override;
420
427 virtual size_t calculateSize(void) const override;
428
429 private:
430
434 std::unique_ptr<TriggerData> trigger_data_;
435
437 };
438
443
444 // TODO Move this to it's own file.
445
446 public:
447
452
459 void ImportTriggerFile(Ogre::DataStreamPtr &stream, TriggersFile *dest);
460
461 private:
462
470 Ogre::DataStreamPtr& stream, TriggersFile::TriggerVertex& vertex
471 );
472
479 void ReadRange(Ogre::DataStreamPtr& stream, TriggersFile::Range& range);
480
487 void ReadGateway(Ogre::DataStreamPtr& stream, TriggersFile::Gateway& exit);
488
495 void ReadArrow(Ogre::DataStreamPtr& stream, TriggersFile::Arrow& arrow);
496
503 void ReadTrigger(Ogre::DataStreamPtr& stream, TriggersFile::Trigger& trigger);
504 };
505
506 typedef Ogre::SharedPtr<TriggersFile> TriggersFilePtr;
507}
Ogre::uint16 u16
Definition: TypeDefine.h:22
Ogre::int16 s16
Definition: TypeDefine.h:25
Ogre::int32 s32
Definition: TypeDefine.h:26
Ogre::uint32 u32
Definition: TypeDefine.h:23
Ogre::uint8 u8
Definition: TypeDefine.h:21
A resource.
Definition: VGearsResource.h:29
Handles file serialization.
Definition: VGearsSerializer.h:30
Handles the serialization of trigger files.
Definition: VGearsTriggersFile.h:442
void ReadTriggerVertex(Ogre::DataStreamPtr &stream, TriggersFile::TriggerVertex &vertex)
Reads trigger vertex data from the trigger file.
Definition: VGearsTriggersFile.cpp:80
void ReadRange(Ogre::DataStreamPtr &stream, TriggersFile::Range &range)
Reads range data from the trigger file.
Definition: VGearsTriggersFile.cpp:88
TriggerFileSerializer()
Constructor.
Definition: VGearsTriggersFile.cpp:78
void ReadArrow(Ogre::DataStreamPtr &stream, TriggersFile::Arrow &arrow)
Reads arrow data from the trigger file.
Definition: VGearsTriggersFile.cpp:110
void ImportTriggerFile(Ogre::DataStreamPtr &stream, TriggersFile *dest)
Imports a trigger file.
Definition: VGearsTriggersFile.cpp:130
void ReadGateway(Ogre::DataStreamPtr &stream, TriggersFile::Gateway &exit)
Reads gateway data from the trigger file.
Definition: VGearsTriggersFile.cpp:97
void ReadTrigger(Ogre::DataStreamPtr &stream, TriggersFile::Trigger &trigger)
Reads trigger data from the trigger file.
Definition: VGearsTriggersFile.cpp:119
A manager for trigger files.
Definition: VGearsTriggersFile.h:32
TriggersFileManager()
Constructor.
Definition: VGearsTriggersFile.cpp:26
static TriggersFileManager & GetSingleton()
Retrieves a singleton to the manager.
Definition: VGearsTriggersFile.cpp:42
virtual ~TriggersFileManager()
Destructor.
Definition: VGearsTriggersFile.cpp:36
static TriggersFileManager * GetSingletonPtr()
Retrieves a pointer to the manager singleton.
Definition: VGearsTriggersFile.cpp:47
Ogre::Resource * createImpl(const Ogre::String &name, Ogre::ResourceHandle handle, const Ogre::String &group, bool is_manual, Ogre::ManualResourceLoader *loader, const Ogre::NameValuePairList *create_params)
Loads the manager.
Definition: VGearsTriggersFile.cpp:71
Handles trigger files.
Definition: VGearsTriggersFile.h:87
virtual void loadImpl() override
Loads the file.
Definition: VGearsTriggersFile.cpp:59
virtual size_t calculateSize(void) const override
Calculates the size of the palette.
Definition: VGearsTriggersFile.cpp:67
static const String RESOURCE_TYPE
The type pf resource.
Definition: VGearsTriggersFile.h:123
virtual ~TriggersFile()
Destructor.
Definition: VGearsTriggersFile.cpp:57
float MovementRotation() const
Retrieves the movement rotation.
Definition: VGearsTriggersFile.h:400
virtual void unloadImpl() override
Unloads the file.
Definition: VGearsTriggersFile.cpp:65
TriggersFile(Ogre::ResourceManager *creator, const String &name, Ogre::ResourceHandle handle, const String &group, bool is_manual=false, Ogre::ManualResourceLoader *loader=nullptr)
Constructor.
Definition: VGearsTriggersFile.cpp:51
const Range & GetCameraRange() const
Retrieves the camera range.
Definition: VGearsTriggersFile.h:390
const std::array< Gateway, 12 > & GetGateways() const
Retrieves the list of gateways.
Definition: VGearsTriggersFile.h:407
std::unique_ptr< TriggerData > trigger_data_
The trigger data.
Definition: VGearsTriggersFile.h:434
Definition: FF7NameLookup.h:24
Ogre::SharedPtr< TriggersFile > TriggersFilePtr
Definition: VGearsTriggersFile.h:506
Ogre::String String
Definition: TypeDefine.h:37
A map arrow.
Definition: VGearsTriggersFile.h:258
s32 x
X coordinate.
Definition: VGearsTriggersFile.h:263
s32 z
Z coordinate.
Definition: VGearsTriggersFile.h:268
u32 type
Arrow type.
Definition: VGearsTriggersFile.h:280
s32 y
Y coordinate.
Definition: VGearsTriggersFile.h:273
A gateway.
Definition: VGearsTriggersFile.h:179
u16 destination_field_id
ID of the destination field.
Definition: VGearsTriggersFile.h:194
TriggerVertex destination
The destination point in the target map.
Definition: VGearsTriggersFile.h:189
u8 dir_copy1
Definition: VGearsTriggersFile.h:204
u8 dir
Definition: VGearsTriggersFile.h:199
std::array< TriggerVertex, 2 > exit_line
The gateway line, between two vertices.
Definition: VGearsTriggersFile.h:184
u8 dir_copy3
Definition: VGearsTriggersFile.h:214
u8 dir_copy2
Definition: VGearsTriggersFile.h:209
Trigger range.
Definition: VGearsTriggersFile.h:130
s16 top
Top range.
Definition: VGearsTriggersFile.h:140
s16 bottom
Bottom range.
Definition: VGearsTriggersFile.h:150
s16 right
Right range.
Definition: VGearsTriggersFile.h:145
s16 left
Left range.
Definition: VGearsTriggersFile.h:135
Trigger data.
Definition: VGearsTriggersFile.h:286
u8 bg_layer2_flag
Flag for the background layer 2.
Definition: VGearsTriggersFile.h:318
s16 bg_layer3_width
Definition: VGearsTriggersFile.h:333
std::array< char, 9 > name
Trigger name.
Definition: VGearsTriggersFile.h:291
s16 bg_layer4_height
Definition: VGearsTriggersFile.h:348
std::array< Arrow, 12 > arrows
The map arrows.
Definition: VGearsTriggersFile.h:381
u8 control
Definition: VGearsTriggersFile.h:296
std::array< u8, 24 > unknown
Unknown data.
Definition: VGearsTriggersFile.h:353
s16 bg_layer4_width
Definition: VGearsTriggersFile.h:343
std::array< u8, 12 > display_arrow
The map arrows.
Definition: VGearsTriggersFile.h:374
std::array< Trigger, 12 > triggers
Triggers.
Definition: VGearsTriggersFile.h:367
s16 bg_layer3_height
Definition: VGearsTriggersFile.h:338
u8 bg_layer3_flag
Flag for the background layer 3.
Definition: VGearsTriggersFile.h:323
s16 camera_focus_height
Definition: VGearsTriggersFile.h:301
std::array< Gateway, 12 > doors
Doors (gateways).
Definition: VGearsTriggersFile.h:360
u8 bg_layer4_flag
Flag for the background layer 4.
Definition: VGearsTriggersFile.h:328
Range camera_range
Definition: VGearsTriggersFile.h:308
u8 bg_layer1_flag
Flag for the background layer 1.
Definition: VGearsTriggersFile.h:313
Each of the trigger vertices.
Definition: VGearsTriggersFile.h:156
s16 y
Y coordinate.
Definition: VGearsTriggersFile.h:166
s16 z
Z coordinate.
Definition: VGearsTriggersFile.h:171
s16 x
X coordinate.
Definition: VGearsTriggersFile.h:161
A trigger.
Definition: VGearsTriggersFile.h:220
u8 behavior
The trigger behavior.
Definition: VGearsTriggersFile.h:247
u8 sound_id
Trigger sound.
Definition: VGearsTriggersFile.h:252
u8 background_parameter
Definition: VGearsTriggersFile.h:230
u8 background_state
Definition: VGearsTriggersFile.h:235
std::array< TriggerVertex, 2 > trigger_line
The trigger line, defined by two vertices.
Definition: VGearsTriggersFile.h:225