CDefObjInfoHandler.cpp 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. #include "../stdafx.h"
  2. #include "CDefObjInfoHandler.h"
  3. #include "../CGameInfo.h"
  4. #include "CLodHandler.h"
  5. #include <sstream>
  6. bool CGDefInfo::isVisitable()
  7. {
  8. for (int i=0; i<6; i++)
  9. {
  10. if (visitMap[i])
  11. return true;
  12. }
  13. return false;
  14. }
  15. CGDefInfo::CGDefInfo()
  16. {
  17. visitDir = (8|16|32|64|128); //4,5,6,7,8 - any not-from-up direction
  18. }
  19. bool DefObjInfo::operator==(const std::string & por) const
  20. {
  21. return this->defName == por;
  22. }
  23. void CDefObjInfoHandler::load()
  24. {
  25. nodrze<int> ideki;
  26. std::istringstream inp(CGameInfo::mainObj->bitmaph->getTextFile("ZOBJCTS.TXT"));
  27. int objNumber;
  28. inp>>objNumber;
  29. for(int hh=0; hh<objNumber; ++hh)
  30. {
  31. CGDefInfo* nobj = new CGDefInfo();
  32. nobj->handler = NULL;
  33. std::string dump;
  34. inp>>nobj->name;
  35. std::transform(nobj->name.begin(), nobj->name.end(), nobj->name.begin(), (int(*)(int))toupper);
  36. for(int o=0; o<6; ++o)
  37. {
  38. nobj->blockMap[o] = 0xff;
  39. nobj->visitMap[o] = 0x00;
  40. }
  41. std::string mapStr;
  42. inp>>mapStr;
  43. std::reverse(mapStr.begin(), mapStr.end());
  44. for(int v=0; v<mapStr.size(); ++v)
  45. {
  46. if(mapStr[v]=='0')
  47. {
  48. nobj->blockMap[v/8] &= 255 - (128 >> (v%8));
  49. }
  50. }
  51. inp>>mapStr;
  52. std::reverse(mapStr.begin(), mapStr.end());
  53. for(int v=0; v<mapStr.size(); ++v)
  54. {
  55. if(mapStr[v]=='1')
  56. {
  57. nobj->visitMap[v/8] |= (128 >> (v%8));
  58. }
  59. }
  60. for(int yy=0; yy<2; ++yy)
  61. inp>>dump;
  62. inp>>nobj->id;
  63. inp>>nobj->subid;
  64. inp>>nobj->type;
  65. inp>>nobj->printPriority;
  66. gobjs[nobj->id][nobj->subid] = nobj;
  67. if(nobj->id==98)
  68. castles[nobj->subid]=nobj;
  69. }
  70. }
  71. bool DefObjInfo::isVisitable() const
  72. {
  73. for(int g=0; g<6; ++g)
  74. {
  75. if(visitMap[g]!=0)
  76. return true;
  77. }
  78. return false;
  79. }