mirror of
https://github.com/xtjoeytx/GServer-v2.git
synced 2026-05-06 23:59:39 -04:00
111 lines
2.2 KiB
C++
111 lines
2.2 KiB
C++
#ifndef TLEVELITEM_H
|
|
#define TLEVELITEM_H
|
|
|
|
#include <ctime>
|
|
|
|
#include <CString.h>
|
|
#include <CTimeout.h>
|
|
|
|
enum class LevelItemType
|
|
{
|
|
INVALID = -1,
|
|
|
|
GREENRUPEE = 0,
|
|
BLUERUPEE = 1,
|
|
REDRUPEE = 2,
|
|
BOMBS = 3,
|
|
DARTS = 4,
|
|
HEART = 5,
|
|
GLOVE1 = 6,
|
|
BOW = 7,
|
|
BOMB = 8,
|
|
SHIELD = 9,
|
|
SWORD = 10,
|
|
FULLHEART = 11,
|
|
SUPERBOMB = 12,
|
|
BATTLEAXE = 13,
|
|
GOLDENSWORD = 14,
|
|
MIRRORSHIELD = 15,
|
|
GLOVE2 = 16,
|
|
LIZARDSHIELD = 17,
|
|
LIZARDSWORD = 18,
|
|
GOLDRUPEE = 19,
|
|
FIREBALL = 20,
|
|
FIREBLAST = 21,
|
|
NUKESHOT = 22,
|
|
JOLTBOMB = 23,
|
|
SPINATTACK = 24
|
|
};
|
|
|
|
class Player;
|
|
class LevelItem
|
|
{
|
|
public:
|
|
LevelItem(float pX, float pY, LevelItemType pItem) : m_x(pX), m_y(pY), m_item(pItem)
|
|
{
|
|
timeout.setTimeout(10);
|
|
}
|
|
|
|
// Return the packet to be sent to the player.
|
|
CString getItemStr() const;
|
|
|
|
// Get functions.
|
|
float getX() const { return m_x; }
|
|
float getY() const { return m_y; }
|
|
LevelItemType getItem() const { return m_item; }
|
|
time_t getModTime() const { return m_modTime; }
|
|
|
|
CTimeout timeout;
|
|
|
|
// Static functions.
|
|
static LevelItemType getItemId(signed char itemId);
|
|
static LevelItemType getItemId(const std::string& pItemName);
|
|
static std::string getItemName(LevelItemType itemId);
|
|
static CString getItemPlayerProp(LevelItemType itemType, Player* player);
|
|
static CString getItemPlayerProp(const std::string& pItemName, Player* player);
|
|
static constexpr auto getItemTypeId(LevelItemType val);
|
|
|
|
static bool isRupeeType(LevelItemType itemType);
|
|
static uint16_t GetRupeeCount(LevelItemType type);
|
|
|
|
private:
|
|
float m_x;
|
|
float m_y;
|
|
LevelItemType m_item;
|
|
time_t m_modTime = time(0);
|
|
};
|
|
|
|
inline CString LevelItem::getItemPlayerProp(const std::string& pItemName, Player* player)
|
|
{
|
|
return getItemPlayerProp(LevelItem::getItemId(pItemName), player);
|
|
}
|
|
|
|
constexpr auto LevelItem::getItemTypeId(LevelItemType val)
|
|
{
|
|
return static_cast<std::underlying_type<LevelItemType>::type>(val);
|
|
}
|
|
|
|
inline uint16_t LevelItem::GetRupeeCount(LevelItemType type)
|
|
{
|
|
switch (type)
|
|
{
|
|
case LevelItemType::GREENRUPEE:
|
|
return 1;
|
|
case LevelItemType::BLUERUPEE:
|
|
return 5;
|
|
case LevelItemType::REDRUPEE:
|
|
return 30;
|
|
case LevelItemType::GOLDRUPEE:
|
|
return 100;
|
|
default:
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
inline bool LevelItem::isRupeeType(LevelItemType itemType)
|
|
{
|
|
return GetRupeeCount(itemType) > 0;
|
|
}
|
|
|
|
#endif // TLEVELITEM_H
|