CDefObjInfoHandler.cpp 1.5 KB

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