2222#include " Craft.h"
2323#include " ItemContainer.h"
2424#include " ../Engine/Language.h"
25+ #include " ../Ruleset/Ruleset.h"
2526
2627namespace OpenXcom
2728{
@@ -39,14 +40,42 @@ Transfer::Transfer(int hours) : _hours(hours), _soldier(0), _craft(0), _itemId("
3940 */
4041Transfer::~Transfer ()
4142{
43+ delete _soldier;
44+ delete _craft;
4245}
4346
4447/* *
4548 * Loads the transfer from a YAML file.
4649 * @param node YAML node.
4750 */
48- void Transfer::load (const YAML ::Node &node)
51+ void Transfer::load (const YAML ::Node &node, Base *base, Ruleset *rule )
4952{
53+ node[" hours" ] >> _hours;
54+ if (const YAML ::Node *pName = node.FindValue (" soldier" ))
55+ {
56+ _soldier = new Soldier ();
57+ _soldier->load (*pName);
58+ }
59+ else if (const YAML ::Node *pName = node.FindValue (" craft" ))
60+ {
61+ std::string type;
62+ (*pName)[" type" ] >> type;
63+ _craft = new Craft (rule->getCraft (type), base);
64+ _craft->load (*pName, rule);
65+ }
66+ else if (const YAML ::Node *pName = node.FindValue (" itemId" ))
67+ {
68+ *pName >> _itemId;
69+ node[" itemQty" ] >> _itemQty;
70+ }
71+ else if (const YAML ::Node *pName = node.FindValue (" scientists" ))
72+ {
73+ *pName >> _scientists;
74+ }
75+ else if (const YAML ::Node *pName = node.FindValue (" engineers" ))
76+ {
77+ *pName >> _engineers;
78+ }
5079}
5180
5281/* *
@@ -56,6 +85,30 @@ void Transfer::load(const YAML::Node &node)
5685void Transfer::save (YAML ::Emitter &out) const
5786{
5887 out << YAML ::BeginMap;
88+ out << YAML ::Key << " hours" << YAML ::Value << _hours;
89+ if (_soldier != 0 )
90+ {
91+ out << YAML ::Key << " soldier" << YAML ::Value;
92+ _soldier->save (out);
93+ }
94+ else if (_craft != 0 )
95+ {
96+ out << YAML ::Key << " craft" << YAML ::Value;
97+ _craft->save (out);
98+ }
99+ else if (_itemQty != 0 )
100+ {
101+ out << YAML ::Key << " itemId" << YAML ::Value << _itemId;
102+ out << YAML ::Key << " itemQty" << YAML ::Value << _itemQty;
103+ }
104+ else if (_scientists != 0 )
105+ {
106+ out << YAML ::Key << " scientists" << YAML ::Value << _scientists;
107+ }
108+ else if (_engineers != 0 )
109+ {
110+ out << YAML ::Key << " engineers" << YAML ::Value << _engineers;
111+ }
59112 out << YAML ::EndMap;
60113}
61114
0 commit comments