liblcf
Toggle main menu visibility
Loading...
Searching...
No Matches
ldb_parameters.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/ldb/reader.h"
11
#include "lcf/ldb/chunks.h"
12
#include "
reader_struct.h
"
13
14
namespace
lcf
{
15
16
template
<>
17
struct
RawStruct
<
rpg
::Parameters> {
18
static
void
ReadLcf
(rpg::Parameters& ref, LcfReader& stream, uint32_t length);
19
static
void
WriteLcf
(
const
rpg::Parameters& ref, LcfWriter& stream);
20
static
int
LcfSize
(
const
rpg::Parameters& ref, LcfWriter& stream);
21
static
void
WriteXml
(
const
rpg::Parameters& ref, XmlWriter& stream);
22
static
void
BeginXml
(rpg::Parameters& ref, XmlReader& stream);
23
};
24
28
void
RawStruct<rpg::Parameters>::ReadLcf
(rpg::Parameters& ref, LcfReader& stream, uint32_t length) {
29
int
n = length / 6;
30
stream.Read(ref.maxhp, n);
31
stream.Read(ref.maxsp, n);
32
stream.Read(ref.attack, n);
33
stream.Read(ref.defense, n);
34
stream.Read(ref.spirit, n);
35
stream.Read(ref.agility, n);
36
}
37
38
void
RawStruct<rpg::Parameters>::WriteLcf
(
const
rpg::Parameters& ref, LcfWriter& stream) {
39
stream.Write(ref.maxhp);
40
stream.Write(ref.maxsp);
41
stream.Write(ref.attack);
42
stream.Write(ref.defense);
43
stream.Write(ref.spirit);
44
stream.Write(ref.agility);
45
}
46
47
int
RawStruct<rpg::Parameters>::LcfSize
(
const
rpg::Parameters& ref, LcfWriter&
/* stream */
) {
48
return
ref.maxhp.size() * 2 * 6;
49
}
50
51
void
RawStruct<rpg::Parameters>::WriteXml
(
const
rpg::Parameters& ref, XmlWriter& stream) {
52
stream.BeginElement(
"Parameters"
);
53
stream.WriteNode<std::vector<int16_t> >(
"maxhp"
, ref.maxhp);
54
stream.WriteNode<std::vector<int16_t> >(
"maxsp"
, ref.maxsp);
55
stream.WriteNode<std::vector<int16_t> >(
"attack"
, ref.attack);
56
stream.WriteNode<std::vector<int16_t> >(
"defense"
, ref.defense);
57
stream.WriteNode<std::vector<int16_t> >(
"spirit"
, ref.spirit);
58
stream.WriteNode<std::vector<int16_t> >(
"agility"
, ref.agility);
59
stream.EndElement(
"Parameters"
);
60
}
61
62
class
ParametersXmlHandler
:
public
XmlHandler {
63
private
:
64
rpg::Parameters&
ref
;
65
std::vector<int16_t>*
field
;
66
public
:
67
ParametersXmlHandler
(rpg::Parameters&
ref
) :
ref
(
ref
),
field
(NULL) {}
68
void
StartElement
(XmlReader&
/* stream */
,
const
char
*
name
,
const
char
**
/* atts */
) {
69
if
(strcmp(
name
,
"maxhp"
) == 0)
70
field
= &
ref
.maxhp;
71
else
if
(strcmp(
name
,
"maxsp"
) == 0)
72
field
= &
ref
.maxsp;
73
else
if
(strcmp(
name
,
"attack"
) == 0)
74
field
= &
ref
.attack;
75
else
if
(strcmp(
name
,
"defense"
) == 0)
76
field
= &
ref
.defense;
77
else
if
(strcmp(
name
,
"spirit"
) == 0)
78
field
= &
ref
.spirit;
79
else
if
(strcmp(
name
,
"agility"
) == 0)
80
field
= &
ref
.agility;
81
else
{
82
Log::Error
(
"XML: Unrecognized field '%s'"
,
name
);
83
field
= NULL;
84
}
85
}
86
void
EndElement
(XmlReader&
/* stream */
,
const
char
*
/* name */
) {
87
field
= NULL;
88
}
89
void
CharacterData
(XmlReader&
/* stream */
,
const
std::string& data) {
90
if
(
field
!= NULL)
91
XmlReader::Read<std::vector<int16_t> >(*
field
, data);
92
}
93
};
94
95
void
RawStruct<rpg::Parameters>::BeginXml
(rpg::Parameters& ref, XmlReader& stream) {
96
stream.SetHandler(
new
WrapperXmlHandler
(
"Parameters"
,
new
ParametersXmlHandler
(ref)));
97
}
98
99
}
//namespace lcf
lcf::ParametersXmlHandler
Definition
ldb_parameters.cpp:62
lcf::ParametersXmlHandler::CharacterData
void CharacterData(XmlReader &, const std::string &data)
Definition
ldb_parameters.cpp:89
lcf::ParametersXmlHandler::StartElement
void StartElement(XmlReader &, const char *name, const char **)
Definition
ldb_parameters.cpp:68
lcf::ParametersXmlHandler::ref
rpg::Parameters & ref
Definition
ldb_parameters.cpp:64
lcf::ParametersXmlHandler::EndElement
void EndElement(XmlReader &, const char *)
Definition
ldb_parameters.cpp:86
lcf::ParametersXmlHandler::ParametersXmlHandler
ParametersXmlHandler(rpg::Parameters &ref)
Definition
ldb_parameters.cpp:67
lcf::ParametersXmlHandler::field
std::vector< int16_t > * field
Definition
ldb_parameters.cpp:65
lcf::WrapperXmlHandler
Definition
reader_struct.h:755
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
ldb_parameters.cpp
Generated on
for liblcf by
1.17.0