liblcf
Toggle main menu visibility
Loading...
Searching...
No Matches
lmt_treemap.cpp
Go to the documentation of this file.
1
/*
2
* This file is part of liblcf. Copyright (c) liblcf authors.
3
* https://github.com/EasyRPG/liblcf - https://easyrpg.org
4
*
5
* liblcf is Free/Libre Open Source Software, released under the MIT License.
6
* For the full copyright and license information, please view the COPYING
7
* file that was distributed with this source code.
8
*/
9
10
#include "lcf/lmt/reader.h"
11
#include "lcf/lmt/chunks.h"
12
#include "
log.h
"
13
#include "
reader_struct.h
"
14
15
namespace
lcf
{
16
17
template
<>
18
struct
RawStruct
<
rpg
::TreeMap> {
19
static
void
ReadLcf
(rpg::TreeMap& ref, LcfReader& stream, uint32_t length);
20
static
void
WriteLcf
(
const
rpg::TreeMap& ref, LcfWriter& stream);
21
static
int
LcfSize
(
const
rpg::TreeMap& ref, LcfWriter& stream);
22
static
void
WriteXml
(
const
rpg::TreeMap& ref, XmlWriter& stream);
23
static
void
BeginXml
(rpg::TreeMap& ref, XmlReader& stream);
24
};
25
29
void
RawStruct<rpg::TreeMap>::ReadLcf
(rpg::TreeMap& ref, LcfReader& stream, uint32_t
/* length */
) {
30
Struct<rpg::MapInfo>::ReadLcf
(ref.maps, stream);
31
for
(
int
i = stream.ReadInt(); i > 0; i--)
32
ref.tree_order.push_back(stream.ReadInt());
33
ref.active_node = stream.ReadInt();
34
Struct<rpg::Start>::ReadLcf
(ref.start, stream);
35
}
36
37
void
RawStruct<rpg::TreeMap>::WriteLcf
(
const
rpg::TreeMap& ref, LcfWriter& stream) {
38
Struct<rpg::MapInfo>::WriteLcf
(ref.maps, stream);
39
int
count = ref.tree_order.size();
40
stream.WriteInt(count);
41
for
(
int
i = 0; i < count; i++)
42
stream.WriteInt(ref.tree_order[i]);
43
stream.WriteInt(ref.active_node);
44
Struct<rpg::Start>::WriteLcf
(ref.start, stream);
45
}
46
47
int
RawStruct<rpg::TreeMap>::LcfSize
(
const
rpg::TreeMap&
/* ref */
, LcfWriter&
/* stream */
) {
48
/* doesn't matter; this structure never occurs within a chunk */
49
return
0;
50
}
51
52
void
RawStruct<rpg::TreeMap>::WriteXml
(
const
rpg::TreeMap& ref, XmlWriter& stream) {
53
stream.BeginElement(
"TreeMap"
);
54
55
stream.BeginElement(
"maps"
);
56
Struct<rpg::MapInfo>::WriteXml
(ref.maps, stream);
57
stream.EndElement(
"maps"
);
58
59
stream.BeginElement(
"tree_order"
);
60
stream.Write<std::vector<int32_t>>(ref.tree_order);
61
stream.EndElement(
"tree_order"
);
62
63
stream.WriteNode<int32_t>(
"active_node"
, ref.active_node);
64
65
stream.BeginElement(
"start"
);
66
Struct<rpg::Start>::WriteXml
(ref.start, stream);
67
stream.EndElement(
"start"
);
68
69
stream.EndElement(
"TreeMap"
);
70
}
71
72
class
TreeMapXmlHandler
:
public
XmlHandler {
73
private
:
74
rpg::TreeMap&
ref
;
75
bool
active_node
;
76
bool
tree_order
;
77
public
:
78
TreeMapXmlHandler
(rpg::TreeMap&
ref
) :
79
ref
(
ref
),
active_node
(false),
tree_order
(false) {}
80
81
void
StartElement
(XmlReader& stream,
const
char
*
name
,
const
char
**
/* atts */
) {
82
active_node
=
false
;
83
tree_order
=
false
;
84
if
(strcmp(
name
,
"maps"
) == 0)
85
Struct<rpg::MapInfo>::BeginXml
(
ref
.maps, stream);
86
else
if
(strcmp(
name
,
"tree_order"
) == 0)
87
tree_order
=
true
;
88
else
if
(strcmp(
name
,
"active_node"
) == 0)
89
active_node
=
true
;
90
else
if
(strcmp(
name
,
"start"
) == 0)
91
Struct<rpg::Start>::BeginXml
(
ref
.start, stream);
92
else
{
93
Log::Error
(
"XML: Unrecognized field '%s'"
,
name
);
94
}
95
}
96
void
EndElement
(XmlReader&
/* stream */
,
const
char
*
/* name */
) {
97
active_node
=
false
;
98
tree_order
=
false
;
99
}
100
void
CharacterData
(XmlReader&
/* stream */
,
const
std::string& data) {
101
if
(
active_node
)
102
XmlReader::Read<int32_t>(
ref
.active_node, data);
103
if
(
tree_order
)
104
XmlReader::Read<std::vector<int32_t>>(
ref
.tree_order, data);
105
}
106
};
107
108
void
RawStruct<rpg::TreeMap>::BeginXml
(rpg::TreeMap& ref, XmlReader& stream) {
109
stream.SetHandler(
new
WrapperXmlHandler
(
"TreeMap"
,
new
TreeMapXmlHandler
(ref)));
110
}
111
112
}
//namespace lcf
lcf::Struct::BeginXml
static void BeginXml(S &obj, XmlReader &stream)
Definition
reader_struct_impl.h:211
lcf::Struct::WriteXml
static void WriteXml(const S &obj, XmlWriter &stream)
Definition
reader_struct_impl.h:161
lcf::Struct::WriteLcf
static void WriteLcf(const S &obj, LcfWriter &stream)
Definition
reader_struct_impl.h:108
lcf::Struct::ReadLcf
static void ReadLcf(S &obj, LcfReader &stream)
Definition
reader_struct_impl.h:61
lcf::TreeMapXmlHandler
Definition
lmt_treemap.cpp:72
lcf::TreeMapXmlHandler::EndElement
void EndElement(XmlReader &, const char *)
Definition
lmt_treemap.cpp:96
lcf::TreeMapXmlHandler::tree_order
bool tree_order
Definition
lmt_treemap.cpp:76
lcf::TreeMapXmlHandler::CharacterData
void CharacterData(XmlReader &, const std::string &data)
Definition
lmt_treemap.cpp:100
lcf::TreeMapXmlHandler::TreeMapXmlHandler
TreeMapXmlHandler(rpg::TreeMap &ref)
Definition
lmt_treemap.cpp:78
lcf::TreeMapXmlHandler::ref
rpg::TreeMap & ref
Definition
lmt_treemap.cpp:74
lcf::TreeMapXmlHandler::active_node
bool active_node
Definition
lmt_treemap.cpp:75
lcf::TreeMapXmlHandler::StartElement
void StartElement(XmlReader &stream, const char *name, const char **)
Definition
lmt_treemap.cpp:81
lcf::WrapperXmlHandler
Definition
reader_struct.h:755
log.h
lcf::Log::Error
void Error(const char *fmt,...) LIKE_PRINTF
Definition
log_handler.cpp:90
lcf::rpg
Definition
rpg_actor.cpp:16
lcf
Definition
dbarray.cpp:13
lcf::name
const char *const Struct< rpg::Actor >::name
Definition
fwd_struct_impl.h:16
reader_struct.h
lcf::RawStruct
Definition
reader_struct.h:117
lcf::RawStruct::WriteXml
static void WriteXml(const T &ref, XmlWriter &stream)
lcf::RawStruct::BeginXml
static void BeginXml(T &ref, XmlReader &stream)
lcf::RawStruct::ReadLcf
static void ReadLcf(T &ref, LcfReader &stream, uint32_t length)
lcf::RawStruct::WriteLcf
static void WriteLcf(const T &ref, LcfWriter &stream)
lcf::RawStruct::LcfSize
static int LcfSize(const T &ref, LcfWriter &stream)
src
lmt_treemap.cpp
Generated on
for liblcf by
1.17.0