| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- /******************************************************************************/
- /******************************************************************************/
- class Obj : ObjData
- {
- static int ComparePtr(Obj*C &a, Obj*C &b);
- Area *area;
- bool selected, highlighted,
- invalid_refs,
- visible; // this should be reflection of the 'World.obj_visible'
- EDIT_OBJ_TYPE edit_type;
- MeshPtr mesh, mesh_proper; // 'mesh_proper' is set to proper MeshPtr to avoid reloading/unloading meshes in case they are empty because 'mesh' will be forced to 'WorldEdit.dummy_mesh' if empty
- int mesh_variation;
- PhysBodyPtr phys;
- ImagePtr icon;
- Particles particles;
- Vec light_col;
- flt light_angle, light_falloff;
- bool light_cast_shadows;
- ~Obj();
- // get
- bool setInvalidRefs();
- bool invalidRefs()C;
- cchar8* variationName()C;
- Matrix drawMatrix();
- Vec pos();
- Vec center();
- bool getBox(Box &box);
- bool onGround();
- bool embedded();
- void getCol(Color &col_lit, Color&col_shape);
- PhysPath physPath()C;
- // operations
- void attach(WorldData &world, Area *a=null);
- void detach();
- void setUpdatability();
- void setVisibility();
- void removeChanged();
- void remove();
- void create(C Obj &src);
- bool sync(C ObjData &src, cchar *edit_path);
- bool undo(C ObjData &src, cchar *edit_path);
- Obj& setChangedEmbed(C VecI2 *area_xy=null); // must be called after 'changedObj' and before 'setChangedPaths'
- Obj& setChangedPaths(); // must be called after 'setChangedEmbed'
- Obj& setChanged(bool matrix=false); // this needs to be called after making all changes
- void setUndo(cptr type=WorldUndo::ObjType, bool as_new=false);
- void moveTo(C Vec &pos, cptr undo_type=WorldUndo::ObjType);
- void moveTo(C Matrix3 &orn, cptr undo_type=WorldUndo::ObjType);
- void moveTo(C Matrix &matrix, cptr undo_type=WorldUndo::ObjType);
- void scaleBy (flt f);
- void scaleXBy(flt f);
- void scaleYBy(flt f);
- void scaleZBy(flt f);
- void randomRot();
- void resetRot();
- void alignGrid();
- void alignTerrain(bool force, cptr undo_type=WorldUndo::ObjType);
- void alignNormal(int axis=-1, flt blend=1);
- // update
- void update();
- // draw
- bool skipDraw();
- void draw();
- void drawShadow();
- void drawParticle();
- void drawSelected();
- void drawHelper(bool box, bool phys);
- // io
- void setDraw();
- void setMeshVariation();
- void setMeshPhys();
- bool save(File &f);
- bool load(File &f); // 'setMeshPhys' doesn't need to be called because it will be called in 'attach->removeChanged'
- public:
- Obj();
- };
- /******************************************************************************/
- /******************************************************************************/
- /******************************************************************************/
|