/* core/slot.h This file is part of the Osirion project and is distributed under the terms of the GNU General Public License version 2. */ #ifndef __INCLUDED_CORE_SLOT_H__ #define __INCLUDED_CORE_SLOT_H__ #include "math/vector3f.h" #include "math/axis.h" #include "core/item.h" #include namespace core { /** * @brief A mount point for a weapon or a piece of equipment * */ class Slot { public: enum Flags {Active = 1}; /** * @brief default constructor * Creates an empty slot * */ Slot(); /** * @brief default destructor * */ ~Slot(); /** * @brief location of the slot within the parent model * */ inline const math::Vector3f & location() const { return slot_location; } /** * @brief axis indication the slot's orientation * */ inline const math::Axis & axis() const { return slot_axis; } /** * @brief timestamp indicating when the slot was last fired,server-side * This is a server-side property * */ inline unsigned long last_fired() const { return slot_last_fired; } /** * @brief timestamp indicating when the slot was last fire, client-side * This is a client-side property * */ inline unsigned long last_ejected() const { return slot_last_ejected; } /** * @brief interval between two consequtive shots by this slot, in milliseconds * */ inline unsigned long projectile_interval() const { return slot_projectile_interval; } /** * @brief lifespan of a projectile generated by this slot, in milliseconds * */ inline unsigned long projectile_lifespan() const { return slot_projectile_lifespan; } /** * @brief speed of a projectile generated by this slot, in game units per second * */ inline float projectile_speed() const { return slot_projectile_speed; } /** * @brief damage done by a projectile generated by this slot * */ inline float projectile_damage() const { return slot_projectile_damage; } /** * @brief model name used to draw projectiles generated by this slot * */ inline const std::string & projectile_modelname() const { return slot_projectile_modelname; } /* --- mutators -------------------------------------------- */ /** * @brief set the slot's location * */ inline void set_location(const math::Vector3f &location) { slot_location.assign(location); } /** * @brief set the slot's orientation */ inline void set_axis(const math::Axis & axis) { slot_axis.assign(axis); } /** * @brief set the slot's timestamp * The timestamp indicates when the slot's configuration was last changed. * */ inline void set_timestamp(unsigned long timestamp) { slot_timestamp = timestamp; } /** * @brief set the timestamp when the slot last ejected a projectile, server-side * This is a server-side property, to be set by the game module * */ inline void set_last_fired(unsigned long last_fired) { slot_last_fired = last_fired; } /** * @brief set the timestamp when the slat last ejected a projectile, client-side * This is a client-side property, to be set by the client * */ inline void set_last_ejected(unsigned long last_ejected) { slot_last_ejected = last_ejected; } /** * @brief set the interval between two shots, in milliseconds * */ void set_projectile_interval(unsigned long projectile_interval); /** * @brief set the lifespan of ejected projectiles, in milliseconds * */ void set_projectile_lifespan(unsigned long projectile_lifespan); /** * @brief set the speed of ejected projectiles, in game units per second * */ void set_projectile_speed(float projectile_speed); /** * @brief set the amount of damage done by a projectile generated by this slot * */ void set_projectile_damage(float projectile_damage); /** * @brief set the name of model used to draw projectiles generated by this slot * */ void set_projectile_modelname(const std::string & projectile_modelname); /** * @brief set the item this slot is holding * */ void set_item(Item *item); private: math::Vector3f slot_location; math::Axis slot_axis; // slot flags unsigned int slot_flags; // timestamp indicating when the slot configuration was last changed unsigned long slot_timestamp; // timestamp indicating when the slot last generated a projectile, server-side unsigned long slot_last_fired; // timestamp indicating when the slot last generated a projectile, client-side unsigned long slot_last_ejected; // interval between two shots, in milliseconds unsigned long slot_projectile_interval; // projectile lifespan unsigned long slot_projectile_lifespan; // projectile speed, in game units per second float slot_projectile_speed; // projectile damage float slot_projectile_damage; // name of the model used to draw projectiles generated by this slot std::string slot_projectile_modelname; // item mounted in this slot Item *slot_item; }; } // namespace core #endif // __INCLUDED_CORE_SLOTS_H__