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) 2020 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 "ldb_reader.h"
11#include "ldb_chunks.h"
12#include "reader_struct.h"
13
14template <>
15struct RawStruct<RPG::Parameters> {
16 static void ReadLcf(RPG::Parameters& ref, LcfReader& stream, uint32_t length);
17 static void WriteLcf(const RPG::Parameters& ref, LcfWriter& stream);
18 static int LcfSize(const RPG::Parameters& ref, LcfWriter& stream);
19 static void WriteXml(const RPG::Parameters& ref, XmlWriter& stream);
20 static void BeginXml(RPG::Parameters& ref, XmlReader& stream);
21};
22
27 int n = length / 6;
28 stream.Read(ref.maxhp, n);
29 stream.Read(ref.maxsp, n);
30 stream.Read(ref.attack, n);
31 stream.Read(ref.defense, n);
32 stream.Read(ref.spirit, n);
33 stream.Read(ref.agility, n);
34}
35
37 stream.Write(ref.maxhp);
38 stream.Write(ref.maxsp);
39 stream.Write(ref.attack);
40 stream.Write(ref.defense);
41 stream.Write(ref.spirit);
42 stream.Write(ref.agility);
43}
44
46 return ref.maxhp.size() * 2 * 6;
47}
48
50 stream.BeginElement("Parameters");
51 stream.WriteNode<std::vector<int16_t> >("maxhp", ref.maxhp);
52 stream.WriteNode<std::vector<int16_t> >("maxsp", ref.maxsp);
53 stream.WriteNode<std::vector<int16_t> >("attack", ref.attack);
54 stream.WriteNode<std::vector<int16_t> >("defense", ref.defense);
55 stream.WriteNode<std::vector<int16_t> >("spirit", ref.spirit);
56 stream.WriteNode<std::vector<int16_t> >("agility", ref.agility);
57 stream.EndElement("Parameters");
58}
59
61private:
63 std::vector<int16_t>* field;
64public:
66 void StartElement(XmlReader& stream, const char* name, const char** /* atts */) {
67 if (strcmp(name, "maxhp") == 0)
68 field = &ref.maxhp;
69 else if (strcmp(name, "maxsp") == 0)
70 field = &ref.maxsp;
71 else if (strcmp(name, "attack") == 0)
72 field = &ref.attack;
73 else if (strcmp(name, "defense") == 0)
74 field = &ref.defense;
75 else if (strcmp(name, "spirit") == 0)
76 field = &ref.spirit;
77 else if (strcmp(name, "agility") == 0)
78 field = &ref.agility;
79 else {
80 stream.Error("Unrecognized field '%s'", name);
81 field = NULL;
82 }
83 }
84 void EndElement(XmlReader& /* stream */, const char* /* name */) {
85 field = NULL;
86 }
87 void CharacterData(XmlReader& /* stream */, const std::string& data) {
88 if (field != NULL)
89 XmlReader::Read<std::vector<int16_t> >(*field, data);
90 }
91};
92
94 stream.SetHandler(new WrapperXmlHandler("Parameters", new ParametersXmlHandler(ref)));
95}
void Read(void *ptr, size_t size, size_t nmemb)
Definition: reader_lcf.cpp:47
void Write(const void *ptr, size_t size, size_t nmemb)
Definition: writer_lcf.cpp:24
ParametersXmlHandler(RPG::Parameters &ref)
void EndElement(XmlReader &, const char *)
RPG::Parameters & ref
void StartElement(XmlReader &stream, const char *name, const char **)
std::vector< int16_t > * field
void CharacterData(XmlReader &, const std::string &data)
std::vector< int16_t > attack
std::vector< int16_t > agility
std::vector< int16_t > maxhp
std::vector< int16_t > maxsp
std::vector< int16_t > spirit
std::vector< int16_t > defense
void SetHandler(XmlHandler *handler)
Definition: reader_xml.cpp:80
void Error(const char *fmt,...)
Definition: reader_xml.cpp:59
void BeginElement(const std::string &name)
Definition: writer_xml.cpp:161
void EndElement(const std::string &name)
Definition: writer_xml.cpp:177
void WriteNode(const std::string &name, const T &val)
Definition: writer_xml.cpp:155
Definition: rpg_actor.h:26
static int LcfSize(const T &ref, LcfWriter &stream)
static void WriteXml(const T &ref, XmlWriter &stream)
static void ReadLcf(T &ref, LcfReader &stream, uint32_t length)
static void WriteLcf(const T &ref, LcfWriter &stream)
static void BeginXml(T &ref, XmlReader &stream)