liblcf
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
14namespace lcf {
15
16template <>
17struct 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
28void 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
38void 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
47int RawStruct<rpg::Parameters>::LcfSize(const rpg::Parameters& ref, LcfWriter& /* stream */) {
48 return ref.maxhp.size() * 2 * 6;
49}
50
51void 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
62class ParametersXmlHandler : public XmlHandler {
63private:
64 rpg::Parameters& ref;
65 std::vector<int16_t>* field;
66public:
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 stream.Error("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
95void RawStruct<rpg::Parameters>::BeginXml(rpg::Parameters& ref, XmlReader& stream) {
96 stream.SetHandler(new WrapperXmlHandler("Parameters", new ParametersXmlHandler(ref)));
97}
98
99} //namespace lcf
void StartElement(XmlReader &stream, const char *name, const char **)
void CharacterData(XmlReader &, const std::string &data)
void EndElement(XmlReader &, const char *)
ParametersXmlHandler(rpg::Parameters &ref)
std::vector< int16_t > * field
static void ReadLcf(rpg::Parameters &ref, LcfReader &stream, uint32_t length)
static void ReadLcf(T &ref, LcfReader &stream, uint32_t length)
static void WriteXml(const T &ref, XmlWriter &stream)
static void BeginXml(T &ref, XmlReader &stream)
static void WriteLcf(const T &ref, LcfWriter &stream)
static int LcfSize(const T &ref, LcfWriter &stream)