@EditObject.h 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. /******************************************************************************/
  2. /******************************************************************************/
  3. class EditObject : EditParams
  4. {
  5. class SubObj
  6. {
  7. bool removed;
  8. UID id, // id of the sub object instance
  9. elm_obj_id; // project ELM_OBJ element id
  10. TimeStamp removed_time;
  11. // get
  12. bool old (C TimeStamp &now=TimeStamp().getUTC())C;
  13. bool equal(C SubObj &src )C;
  14. bool newer(C SubObj &src )C;
  15. // operations
  16. void setRemoved(bool removed);
  17. bool sync(C SubObj &src);
  18. bool undo(C SubObj &src);
  19. // io
  20. bool save(File &f)C;
  21. bool load(File &f);
  22. public:
  23. SubObj();
  24. };
  25. enum FLAG
  26. {
  27. OVR_ACCESS =1<<0,
  28. OVR_TYPE =1<<1,
  29. OVR_CONST =1<<2,
  30. OVR_PATH =1<<3,
  31. CONSTANT =1<<4,
  32. OVR_MESH_VARIATION=1<<5,
  33. };
  34. byte flag; // FLAG
  35. OBJ_ACCESS access;
  36. OBJ_PATH path ;
  37. uint mesh_variation_id;
  38. UID type, // elm.id of ELM_OBJ_CLASS
  39. editor_type; // how to draw the object in the editor
  40. TimeStamp base_time, access_time, type_time, editor_type_time, const_time, path_time, mesh_variation_time;
  41. EditObjectPtr base; // this can be set to ELM_OBJ and ELM_OBJ_CLASS
  42. Memc<SubObj> sub_objs;
  43. bool constant()C;
  44. uint memUsage()C;
  45. SubObj* findSubObj(C UID &id);
  46. C SubObj* findSubObj(C UID &id)C;
  47. void del();
  48. // get / set
  49. C EditParam* findParam(C Str &name)C;
  50. C EditParam* baseFindParam(C Str &name, PARAM_TYPE type)C;
  51. bool paramValuesContain(C Str &text, Project &proj)C;
  52. bool hasBase(C UID &obj_id)C;
  53. EditObject& setBase(C EditObjectPtr &base, cchar *edit_path);
  54. EditObject& setAccess(bool custom, OBJ_ACCESS access=OBJ_ACCESS_TERRAIN);
  55. EditObject& setType(bool custom, C UID &type, cchar *edit_path);
  56. EditObject& setEditorType(C UID &type=UIDZero);
  57. EditObject& setConst(bool custom, bool on=false);
  58. EditObject& setPath(bool custom, OBJ_PATH path=OBJ_PATH_CREATE);
  59. EditObject& setMeshVariation(bool custom, uint mesh_variation_id=0);
  60. bool subObjsOld (C TimeStamp &now=TimeStamp().getUTC())C;
  61. bool subObjsEqual(C EditObject &src)C;
  62. bool subObjsNewer(C EditObject &src)C;
  63. bool old (C TimeStamp &now=TimeStamp().getUTC())C;
  64. bool equal(C EditObject &src )C;
  65. bool newer(C EditObject &src )C;
  66. // operations
  67. void newData();
  68. void create(C EditObject &src);
  69. void create(C Object &src, C UID &type, C EditObjectPtr &base, C TimeStamp &time=TimeStamp().getUTC());
  70. void copyTo(Object &obj, C Project &proj, bool zero_align, C UID *mesh_id, C UID *phys_id)C; // 'zero_align' should be set only to ELM_OBJ
  71. void copyTo(Edit::ObjData &obj, bool include_removed_params)C;
  72. void updateEditorType(cchar *edit_path);
  73. void updateBase(cchar *edit_path);
  74. bool newParam(C Str &name, PARAM_TYPE type, C Project &proj);
  75. bool sync(C EditObject &src, cchar *edit_path);
  76. bool undo(C EditObject &src, cchar *edit_path);
  77. bool modify(C MemPtr<Edit::ObjChange> &changes, Project &proj);
  78. // io
  79. bool save(File &f, cchar *edit_path=null)C;
  80. bool load(File &f, cchar *edit_path=null);
  81. bool load(C Str &name);
  82. public:
  83. EditObject();
  84. };
  85. /******************************************************************************/
  86. /******************************************************************************/
  87. /******************************************************************************/