XmlEnemyFile.cpp 3.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. /*
  2. * Copyright (C) 2022 The V-Gears Team
  3. *
  4. * This file is part of V-Gears
  5. *
  6. * V-Gears is free software: you can redistribute it and/or modify it under
  7. * terms of the GNU General Public License as published by the Free Software
  8. * Foundation, version 3.0 (GPLv3) of the License.
  9. *
  10. * V-Gears is distributed in the hope that it will be useful,
  11. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. * GNU General Public License for more details.
  14. */
  15. #include "core/XmlEnemyFile.h"
  16. #include "core/Enemy.h"
  17. #include "core/Logger.h"
  18. XmlEnemyFile::XmlEnemyFile(const Ogre::String& file): XmlFile(file){}
  19. XmlEnemyFile::~XmlEnemyFile(){}
  20. void XmlEnemyFile::LoadEnemy(Enemy& enemy){
  21. TiXmlNode* node = file_.RootElement();
  22. if (node == nullptr || node->ValueStr() != "enemy"){
  23. LOG_ERROR(file_.ValueStr() + " is not a valid enemy map file! No <enemy> in root.");
  24. return;
  25. }
  26. enemy.SetId(GetInt(node, "id"));
  27. enemy.SetName(GetString(node, "name"));
  28. enemy.SetLevel(GetInt(node, "level"));
  29. enemy.SetExp(GetInt(node, "exp"));
  30. enemy.SetAp(GetInt(node, "ap"));
  31. enemy.SetMoney(GetInt(node, "money"));
  32. enemy.SetMorph(GetInt(node, "morph"));
  33. enemy.SetBackDamage(GetFloat(node, "back_damage"));
  34. node = node->FirstChild();
  35. while (node != nullptr){
  36. // Location data.
  37. if (node->Type() == TiXmlNode::TINYXML_ELEMENT && node->ValueStr() == "stats"){
  38. TiXmlNode* node_stat = node->FirstChild();
  39. while (node_stat != nullptr){
  40. int value = GetInt(node_stat, "value");
  41. if (GetString(node_stat, "id") == "str") enemy.SetStr(value);
  42. else if (GetString(node_stat, "id") == "mag") enemy.SetMag(value);
  43. else if (GetString(node_stat, "id") == "def") enemy.SetDef(value);
  44. else if (GetString(node_stat, "id") == "mdef") enemy.SetSpr(value);
  45. else if (GetString(node_stat, "id") == "spd") enemy.SetDex(value);
  46. else if (GetString(node_stat, "id") == "lck") enemy.SetLck(value);
  47. else if (GetString(node_stat, "id") == "eva") enemy.SetEva(value);
  48. node_stat = node_stat->NextSibling();
  49. }
  50. }
  51. else if (node->Type() == TiXmlNode::TINYXML_ELEMENT && node->ValueStr() == "elements"){
  52. TiXmlNode* node_elm = node->FirstChild();
  53. while (node_elm != nullptr && node->ValueStr() == "element"){
  54. Enemy::Element elm;
  55. elm.id = GetInt(node_elm, "element");
  56. elm.factor = GetFloat(node_elm, "factor");
  57. enemy.AddElement(elm);
  58. node_elm = node_elm->NextSibling();
  59. }
  60. }
  61. else if (node->Type() == TiXmlNode::TINYXML_ELEMENT && node->ValueStr() == "immunities"){
  62. TiXmlNode* node_imm = node->FirstChild();
  63. while (node_imm != nullptr && node->ValueStr() == "element"){
  64. Enemy::Immunity imm;
  65. imm.status = GetInt(node_imm, "immunity");
  66. imm.rate = GetFloat(node_imm, "rate");
  67. enemy.AddImmunity(imm);
  68. node_imm = node_imm->NextSibling();
  69. }
  70. }
  71. else if (node->Type() == TiXmlNode::TINYXML_ELEMENT && node->ValueStr() == "attacks"){
  72. // TODO
  73. }
  74. else if (
  75. node->Type() == TiXmlNode::TINYXML_ELEMENT && node->ValueStr() == "manipulate"
  76. ){
  77. // TODO
  78. }
  79. else if (node->Type() == TiXmlNode::TINYXML_ELEMENT && node->ValueStr() == "steal"){
  80. // TODO
  81. }
  82. else if (node->Type() == TiXmlNode::TINYXML_ELEMENT && node->ValueStr() == "drops"){
  83. // TODO
  84. }
  85. else if (node->Type() == TiXmlNode::TINYXML_ELEMENT && node->ValueStr() == "animations"){
  86. // TODO
  87. }
  88. node = node->NextSibling();
  89. }
  90. }