CDefObjInfoHandler.cpp 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. #define VCMI_DLL
  2. #include "../stdafx.h"
  3. #include "CDefObjInfoHandler.h"
  4. #include "../CGameInfo.h"
  5. #include "CLodHandler.h"
  6. #include <sstream>
  7. #include "../lib/VCMI_Lib.h"
  8. #include <set>
  9. extern CLodHandler * bitmaph;
  10. bool CGDefInfo::isVisitable()
  11. {
  12. for (int i=0; i<6; i++)
  13. {
  14. if (visitMap[i])
  15. return true;
  16. }
  17. return false;
  18. }
  19. CGDefInfo::CGDefInfo()
  20. {
  21. visitDir = (8|16|32|64|128); //4,5,6,7,8 - any not-from-up direction
  22. }
  23. void CDefObjInfoHandler::load()
  24. {
  25. VLC->dobjinfo = this;
  26. nodrze<int> ideki;
  27. std::istringstream inp(bitmaph->getTextFile("ZOBJCTS.TXT"));
  28. int objNumber;
  29. inp>>objNumber;
  30. for(int hh=0; hh<objNumber; ++hh)
  31. {
  32. CGDefInfo* nobj = new CGDefInfo();
  33. nobj->handler = NULL;
  34. std::string dump;
  35. inp>>nobj->name;
  36. std::transform(nobj->name.begin(), nobj->name.end(), nobj->name.begin(), (int(*)(int))toupper);
  37. for(int o=0; o<6; ++o)
  38. {
  39. nobj->blockMap[o] = 0xff;
  40. nobj->visitMap[o] = 0x00;
  41. }
  42. std::string mapStr;
  43. inp>>mapStr;
  44. std::reverse(mapStr.begin(), mapStr.end());
  45. for(int v=0; v<mapStr.size(); ++v)
  46. {
  47. if(mapStr[v]=='0')
  48. {
  49. nobj->blockMap[v/8] &= 255 - (128 >> (v%8));
  50. }
  51. }
  52. inp>>mapStr;
  53. std::reverse(mapStr.begin(), mapStr.end());
  54. for(int v=0; v<mapStr.size(); ++v)
  55. {
  56. if(mapStr[v]=='1')
  57. {
  58. nobj->visitMap[v/8] |= (128 >> (v%8));
  59. }
  60. }
  61. for(int yy=0; yy<2; ++yy) //first - on which types of terrain object can be placed;
  62. inp>>dump; //second -in which terrains' menus object in the editor will be available (?)
  63. inp>>nobj->id;
  64. inp>>nobj->subid;
  65. inp>>nobj->type;
  66. if(nobj->type == 2 || nobj->type == 3 || nobj->type == 4 || nobj->type == 5 || nobj->id == 111) //creature, hero, artifact, resource or whripool
  67. nobj->visitDir = 0xff;
  68. else
  69. nobj->visitDir = (8|16|32|64|128); //disabled visiting from the top
  70. inp>>nobj->printPriority;
  71. gobjs[nobj->id][nobj->subid] = nobj;
  72. if(nobj->id==98)
  73. castles[nobj->subid]=nobj;
  74. }
  75. }