1 #ifndef HEADER_CUBE_H 2 #define HEADER_CUBE_H 3 4 class Shape; 5 class Anim; 6 class Rules; 7 class DialogStack; 8 9 #include "V2.h" 10 #include "Goal.h" 11 #include "NoCopy.h" 12 #include "Dir.h" 13 14 #include <vector> 15 16 /** 17 * A object in game. 18 */ 19 class Cube : public NoCopy { 20 public: 21 typedef std::vector<Cube*> t_models; 22 enum eWeight { 23 NONE, 24 LIGHT, 25 HEAVY, 26 FIXED 27 }; 28 enum eAction { 29 ACTION_NO, 30 ACTION_FALL, 31 ACTION_MOVE 32 }; 33 private: 34 int m_index; 35 bool m_busy; 36 V2 m_loc; 37 bool m_alive; 38 bool m_out; 39 eWeight m_weight; 40 eWeight m_power; 41 bool m_lookLeft; 42 bool m_lost; 43 44 Shape *m_shape; 45 Anim *m_anim; 46 Rules *m_rules; 47 Goal m_goal; 48 Dir::eDir m_outDir; 49 int m_outCapacity; 50 const DialogStack *m_dialogs; 51 public: 52 Cube(const V2 &location, 53 eWeight weight, eWeight power, bool alive, 54 Shape *shape); 55 ~Cube(); setGoal(const Goal & goal)56 void setGoal(const Goal &goal) { m_goal = goal; } setIndex(int model_index)57 void setIndex(int model_index) { m_index = model_index; } getIndex()58 int getIndex() const { return m_index; } isBusy()59 bool isBusy() const { return m_busy; } setBusy(bool busy)60 void setBusy(bool busy) { m_busy = busy; } 61 62 void change_die(); 63 void change_goingOut(); 64 void change_goOut(); 65 void change_remove(); 66 void change_turnSide(); change_setLocation(const V2 & loc)67 void change_setLocation(const V2 &loc) { m_loc = loc; } 68 getLocation()69 V2 getLocation() const { return m_loc; } isAlive()70 bool isAlive() const { return m_alive; } isLeft()71 bool isLeft() const { return m_lookLeft; } isOut()72 bool isOut() const { return m_out; } isLost()73 bool isLost() const { return m_lost; } isSatisfy()74 bool isSatisfy() const { return m_goal.isSatisfy(this); } isWrong()75 bool isWrong() const { return m_goal.isWrong(this); } isWall()76 bool isWall() const { return m_weight >= Cube::FIXED; } shouldGoOut()77 bool shouldGoOut() const { return m_goal.shouldGoOut(); } isBorder()78 bool isBorder() const { return m_index == -1; } 79 getWeight()80 eWeight getWeight() const { return m_weight; } getPower()81 eWeight getPower() const { return m_power; } shape()82 const Shape *shape() const { return m_shape; } 83 Dir::eDir getLastMoveDir() const; 84 isOutDir(Dir::eDir dir)85 bool isOutDir(Dir::eDir dir) const { return m_outDir == dir; } getOutDir()86 Dir::eDir getOutDir() { return m_outDir; } getOutCapacity()87 int getOutCapacity() { return m_outCapacity; } 88 void setOutDir(Dir::eDir outDir, 89 int capacity=2, eWeight weight=Cube::FIXED); 90 void decOutCapacity(); 91 void setExtraParams(); 92 93 bool isTalking() const; takeDialogs(const DialogStack * dialogs)94 void takeDialogs(const DialogStack *dialogs) { m_dialogs = dialogs; } 95 96 bool isDisintegrated(); 97 bool isInvisible(); anim()98 Anim *anim() { return m_anim; } const_anim()99 const Anim *const_anim() const { return m_anim; } rules()100 Rules *rules() { return m_rules; } const_rules()101 const Rules *const_rules() const { return m_rules; } 102 103 virtual std::string toString() const; 104 }; 105 106 #endif 107