X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fclientobject.h;h=2e1b850c74f51b271adb43c07e7ab05c2b7d5b0a;hb=a416cf7c45d6e23811d4de5a460caf977771eb53;hp=8d211fef38dde5a9f8f59443e688fcf6b61c880f;hpb=7cfb71385d00d1cbbbfd9c76f6c01adafa9e648a;p=dragonfireclient.git diff --git a/src/clientobject.h b/src/clientobject.h index 8d211fef3..2e1b850c7 100644 --- a/src/clientobject.h +++ b/src/clientobject.h @@ -22,7 +22,6 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "common_irrlicht.h" #include "activeobject.h" -#include "utility.h" /* @@ -36,72 +35,18 @@ Some planning */ -/* - SmoothTranslator -*/ - -struct SmoothTranslator -{ - v3f vect_old; - f32 anim_counter; - f32 anim_time; - f32 anim_time_counter; - v3f vect_show; - v3f vect_aim; - - SmoothTranslator(): - vect_old(0,0,0), - anim_counter(0), - anim_time(0), - anim_time_counter(0), - vect_show(0,0,0), - vect_aim(0,0,0) - {} - - void init(v3f vect) - { - vect_old = vect; - vect_show = vect; - vect_aim = vect; - } - - void update(v3f vect_new) - { - vect_old = vect_show; - vect_aim = vect_new; - if(anim_time < 0.001 || anim_time > 1.0) - anim_time = anim_time_counter; - else - anim_time = anim_time * 0.9 + anim_time_counter * 0.1; - anim_time_counter = 0; - anim_counter = 0; - } - - void translate(f32 dtime) - { - anim_time_counter = anim_time_counter + dtime; - anim_counter = anim_counter + dtime; - v3f vect_move = vect_aim - vect_old; - f32 moveratio = 1.0; - if(anim_time > 0.001) - moveratio = anim_time_counter / anim_time; - // Move a bit less than should, to avoid oscillation - moveratio = moveratio * 0.8; - if(moveratio > 1.5) - moveratio = 1.5; - vect_show = vect_old + vect_move * moveratio; - } -}; - class ClientEnvironment; +class ITextureSource; +class IGameDef; class ClientActiveObject : public ActiveObject { public: - ClientActiveObject(u16 id); + ClientActiveObject(u16 id, IGameDef *gamedef, ClientEnvironment *env); virtual ~ClientActiveObject(); - virtual void addToScene(scene::ISceneManager *smgr){} + virtual void addToScene(scene::ISceneManager *smgr, ITextureSource *tsrc, + IrrlichtDevice *irr){} virtual void removeFromScene(){} // 0 <= light_at_pos <= LIGHT_SUN virtual void updateLight(u8 light_at_pos){} @@ -109,6 +54,7 @@ class ClientActiveObject : public ActiveObject virtual core::aabbox3d* getSelectionBox(){return NULL;} virtual core::aabbox3d* getCollisionBox(){return NULL;} virtual v3f getPosition(){return v3f(0,0,0);} + virtual bool doShowSelectionBox(){return true;} // Step object in time virtual void step(float dtime, ClientEnvironment *env){} @@ -117,7 +63,7 @@ class ClientActiveObject : public ActiveObject virtual void processMessage(const std::string &data){} virtual std::string infoText() {return "";} - + /* This takes the return value of ServerActiveObject::getClientInitializationData @@ -125,12 +71,19 @@ class ClientActiveObject : public ActiveObject virtual void initialize(const std::string &data){} // Create a certain type of ClientActiveObject - static ClientActiveObject* create(u8 type); + static ClientActiveObject* create(u8 type, IGameDef *gamedef, + ClientEnvironment *env); + + // If returns true, punch will not be sent to the server + virtual bool directReportPunch(const std::string &toolname, v3f dir) + { return false; } protected: // Used for creating objects based on type - typedef ClientActiveObject* (*Factory)(); + typedef ClientActiveObject* (*Factory)(IGameDef *gamedef, ClientEnvironment *env); static void registerType(u16 type, Factory f); + IGameDef *m_gamedef; + ClientEnvironment *m_env; private: // Used for creating objects based on type static core::map m_types; @@ -153,164 +106,5 @@ struct DistanceSortedActiveObject } }; -/* - TestCAO -*/ - -class TestCAO : public ClientActiveObject -{ -public: - TestCAO(); - virtual ~TestCAO(); - - u8 getType() const - { - return ACTIVEOBJECT_TYPE_TEST; - } - - static ClientActiveObject* create(); - - void addToScene(scene::ISceneManager *smgr); - void removeFromScene(); - void updateLight(u8 light_at_pos); - v3s16 getLightPosition(); - void updateNodePos(); - - void step(float dtime, ClientEnvironment *env); - - void processMessage(const std::string &data); - -private: - scene::IMeshSceneNode *m_node; - v3f m_position; -}; - -/* - ItemCAO -*/ - -class ItemCAO : public ClientActiveObject -{ -public: - ItemCAO(); - virtual ~ItemCAO(); - - u8 getType() const - { - return ACTIVEOBJECT_TYPE_ITEM; - } - - static ClientActiveObject* create(); - - void addToScene(scene::ISceneManager *smgr); - void removeFromScene(); - void updateLight(u8 light_at_pos); - v3s16 getLightPosition(); - void updateNodePos(); - - void step(float dtime, ClientEnvironment *env); - - void processMessage(const std::string &data); - - void initialize(const std::string &data); - - core::aabbox3d* getSelectionBox() - {return &m_selection_box;} - v3f getPosition() - {return m_position;} - -private: - core::aabbox3d m_selection_box; - scene::IMeshSceneNode *m_node; - v3f m_position; - std::string m_inventorystring; -}; - -/* - RatCAO -*/ - -class RatCAO : public ClientActiveObject -{ -public: - RatCAO(); - virtual ~RatCAO(); - - u8 getType() const - { - return ACTIVEOBJECT_TYPE_RAT; - } - - static ClientActiveObject* create(); - - void addToScene(scene::ISceneManager *smgr); - void removeFromScene(); - void updateLight(u8 light_at_pos); - v3s16 getLightPosition(); - void updateNodePos(); - - void step(float dtime, ClientEnvironment *env); - - void processMessage(const std::string &data); - - void initialize(const std::string &data); - - core::aabbox3d* getSelectionBox() - {return &m_selection_box;} - v3f getPosition() - {return m_position;} - -private: - core::aabbox3d m_selection_box; - scene::IMeshSceneNode *m_node; - v3f m_position; - float m_yaw; - SmoothTranslator pos_translator; -}; - -/* - Oerkki1CAO -*/ - -class Oerkki1CAO : public ClientActiveObject -{ -public: - Oerkki1CAO(); - virtual ~Oerkki1CAO(); - - u8 getType() const - { - return ACTIVEOBJECT_TYPE_OERKKI1; - } - - static ClientActiveObject* create(); - - void addToScene(scene::ISceneManager *smgr); - void removeFromScene(); - void updateLight(u8 light_at_pos); - v3s16 getLightPosition(); - void updateNodePos(); - - void step(float dtime, ClientEnvironment *env); - - void processMessage(const std::string &data); - - void initialize(const std::string &data); - - core::aabbox3d* getSelectionBox() - {return &m_selection_box;} - v3f getPosition() - {return pos_translator.vect_show;} - //{return m_position;} - -private: - IntervalLimiter m_attack_interval; - core::aabbox3d m_selection_box; - scene::IMeshSceneNode *m_node; - v3f m_position; - float m_yaw; - SmoothTranslator pos_translator; -}; - #endif