| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- /*
- * Copyright (C) 2022 The V-Gears Team
- *
- * This file is part of V-Gears
- *
- * V-Gears is free software: you can redistribute it and/or modify it under
- * terms of the GNU General Public License as published by the Free Software
- * Foundation, version 3.0 (GPLv3) of the License.
- *
- * V-Gears is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- */
- #include "core/XmlEnemyFile.h"
- #include "core/Enemy.h"
- #include "core/Logger.h"
- XmlEnemyFile::XmlEnemyFile(const Ogre::String& file): XmlFile(file){}
- XmlEnemyFile::~XmlEnemyFile(){}
- void XmlEnemyFile::LoadEnemy(Enemy& enemy){
- TiXmlNode* node = file_.RootElement();
- if (node == nullptr || node->ValueStr() != "enemy"){
- LOG_ERROR(file_.ValueStr() + " is not a valid enemy map file! No <enemy> in root.");
- return;
- }
- enemy.SetId(GetInt(node, "id"));
- enemy.SetName(GetString(node, "name"));
- enemy.SetLevel(GetInt(node, "level"));
- enemy.SetExp(GetInt(node, "exp"));
- enemy.SetAp(GetInt(node, "ap"));
- enemy.SetMoney(GetInt(node, "money"));
- enemy.SetMorph(GetInt(node, "morph"));
- enemy.SetBackDamage(GetFloat(node, "back_damage"));
- node = node->FirstChild();
- while (node != nullptr){
- // Location data.
- if (node->Type() == TiXmlNode::TINYXML_ELEMENT && node->ValueStr() == "stats"){
- TiXmlNode* node_stat = node->FirstChild();
- while (node_stat != nullptr){
- int value = GetInt(node_stat, "value");
- if (GetString(node_stat, "id") == "str") enemy.SetStr(value);
- else if (GetString(node_stat, "id") == "mag") enemy.SetMag(value);
- else if (GetString(node_stat, "id") == "def") enemy.SetDef(value);
- else if (GetString(node_stat, "id") == "mdef") enemy.SetSpr(value);
- else if (GetString(node_stat, "id") == "spd") enemy.SetDex(value);
- else if (GetString(node_stat, "id") == "lck") enemy.SetLck(value);
- else if (GetString(node_stat, "id") == "eva") enemy.SetEva(value);
- node_stat = node_stat->NextSibling();
- }
- }
- else if (node->Type() == TiXmlNode::TINYXML_ELEMENT && node->ValueStr() == "elements"){
- TiXmlNode* node_elm = node->FirstChild();
- while (node_elm != nullptr && node->ValueStr() == "element"){
- Enemy::Element elm;
- elm.id = GetInt(node_elm, "element");
- elm.factor = GetFloat(node_elm, "factor");
- enemy.AddElement(elm);
- node_elm = node_elm->NextSibling();
- }
- }
- else if (node->Type() == TiXmlNode::TINYXML_ELEMENT && node->ValueStr() == "immunities"){
- TiXmlNode* node_imm = node->FirstChild();
- while (node_imm != nullptr && node->ValueStr() == "element"){
- Enemy::Immunity imm;
- imm.status = GetInt(node_imm, "immunity");
- imm.rate = GetFloat(node_imm, "rate");
- enemy.AddImmunity(imm);
- node_imm = node_imm->NextSibling();
- }
- }
- else if (node->Type() == TiXmlNode::TINYXML_ELEMENT && node->ValueStr() == "attacks"){
- // TODO
- }
- else if (
- node->Type() == TiXmlNode::TINYXML_ELEMENT && node->ValueStr() == "manipulate"
- ){
- // TODO
- }
- else if (node->Type() == TiXmlNode::TINYXML_ELEMENT && node->ValueStr() == "steal"){
- // TODO
- }
- else if (node->Type() == TiXmlNode::TINYXML_ELEMENT && node->ValueStr() == "drops"){
- // TODO
- }
- else if (node->Type() == TiXmlNode::TINYXML_ELEMENT && node->ValueStr() == "animations"){
- // TODO
- }
- node = node->NextSibling();
- }
- }
|