Obj.cpp 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. /******************************************************************************/
  2. #include "stdafx.h"
  3. namespace EE{
  4. namespace Game{
  5. /******************************************************************************/
  6. Obj::~Obj()
  7. {
  8. removeFromArea();
  9. _type=-1;
  10. _id.zero();
  11. }
  12. Obj::Obj()
  13. {
  14. _type =-1;
  15. _area =null ;
  16. _const=false;
  17. _id.randomize();
  18. clearUpdate();
  19. }
  20. /******************************************************************************/
  21. // OPERATIONS / GET / SET
  22. /******************************************************************************/
  23. Int Obj::type()
  24. {
  25. if(_type<0)_type=World.objType(T);
  26. return _type;
  27. }
  28. void Obj::clearUpdate()
  29. {
  30. _update_count=(World._update_count+128)&0xFF;
  31. }
  32. ObjMap<Obj>* Obj::worldObjMap()
  33. {
  34. return World.objMap(_type);
  35. }
  36. void Obj::removeFromArea()
  37. {
  38. if(_area)
  39. {
  40. _area->_objs.exclude(this);
  41. _area=null;
  42. }
  43. }
  44. void Obj::putToArea(Area &area)
  45. {
  46. if(T._area!=&area)
  47. {
  48. removeFromArea();
  49. T._area=&area;
  50. area._objs.add(this);
  51. }
  52. }
  53. Bool Obj::updateArea()
  54. {
  55. VecI2 pos=World.worldToArea(T.pos());
  56. if(!_area || _area->xz()!=pos)
  57. {
  58. AREA_STATE obj_state=(_area ? _area->state() : AREA_UNLOADED);
  59. return World.areaInsertObject(*World._grid.get(pos).data(), T, obj_state);
  60. }
  61. return true;
  62. }
  63. /******************************************************************************/
  64. // ENABLE / DISABLE
  65. /******************************************************************************/
  66. void Obj::disable() {}
  67. void Obj:: enable() {clearUpdate();}
  68. /******************************************************************************/
  69. // IO
  70. /******************************************************************************/
  71. Bool Obj::save(File &f)
  72. {
  73. f.putMulti(Byte(0), _id); // version
  74. return f.ok();
  75. }
  76. /******************************************************************************/
  77. Bool Obj::load(File &f)
  78. {
  79. switch(f.decUIntV()) // version
  80. {
  81. case 0:
  82. {
  83. f>>_id;
  84. if(f.ok())return true;
  85. }break;
  86. }
  87. _id.zero(); return false;
  88. }
  89. /******************************************************************************/
  90. }}
  91. /******************************************************************************/