// Ryzom - MMORPG Framework
// Copyright (C) 2010 Winch Gate Property Limited
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see .
#ifndef RY_SABRINA_ITEM_STATS_H
#define RY_SABRINA_ITEM_STATS_H
// nel misc
#include "nel/misc/types_nl.h"
// game_share
#include "game_share/skills.h"
#include "game_share/damage_types.h"
#include "game_share/armor_types.h"
#include "game_share/game_item_manager/game_item.h"
/**
* Sabrina weapon stats description class
* \author Sadge
* \author Nevrax France
* \date 2003
*/
struct CWeaponStats
{
// construction
CWeaponStats();
CWeaponStats(const CGameItemPtr &itemPtr, uint16 quality);
// debug routines
std::string toString() const;
// read accessors
uint16 getSpeedInTicks() const { return _SpeedInTicks; }
uint32 getDamage() const { return _Damage; }
uint16 getQuality() const { return _Quality; }
DMGTYPE::EDamageType getDmgType() const { return _DmgType; }
ITEMFAMILY::EItemFamily getFamily() const { return _Family; }
float getRange() const { return _Range; }
SKILLS::ESkills getSkill() const { return _Skill; }
sint32 getSkillValue() const { return _SkillValue; }
// write accessors
void setSpeedInTicks(uint16 ticks) { _SpeedInTicks=ticks; }
void setDamage(uint32 damage) { _Damage=damage; }
void setQuality(uint16 quality) { _Quality=quality; }
void setDmgType(DMGTYPE::EDamageType dmgType) { _DmgType=dmgType; }
void setFamily(ITEMFAMILY::EItemFamily family) { _Family=family; }
void setRange(float range) { _Range=range; }
void setSkill(SKILLS::ESkills skill) { _Skill=skill; }
void setSkillValue(sint32 value) { _SkillValue=value; }
private:
uint16 _SpeedInTicks;
uint32 _Damage;
uint16 _Quality;
DMGTYPE::EDamageType _DmgType;
ITEMFAMILY::EItemFamily _Family;
float _Range; // if > 0 range weapon or ammo, == 0 melee weapon
SKILLS::ESkills _Skill; // no meaning for ammos
sint32 _SkillValue; // no meaning for ammos
};
/**
* Sabrina armor description base class
* \author Sadge
* \author Nevrax France
* \date 2003
*/
class CArmorStats
{
public:
// construction
CArmorStats();
CArmorStats( const CStaticItem *item, uint16 quality );
// debug routines
std::string toString(bool overrideTitle=false) const;
// read accessors
uint32 getQuality() const { return _Quality; }
SKILLS::ESkills getSkill() const { return _Skill; }
ARMORTYPE::EArmorType getArmorType() const { return _ArmorType; }
float getProtectionFactor(uint32 index) const;
uint32 getProtectionLimit(uint32 index) const;
// write accessors
void setQuality(uint32 quality) { _Quality=quality; }
void setSkill(SKILLS::ESkills skill) { _Skill=skill; }
void setArmorType(ARMORTYPE::EArmorType armorType) { _ArmorType=armorType; }
void setProtectionFactor(uint32 index,float val);
void setProtectionLimit(uint32 index,uint32 val);
private:
uint32 _Quality;
SKILLS::ESkills _Skill;
ARMORTYPE::EArmorType _ArmorType;
float _ProtectionFactor[DMGTYPE::NBTYPES];
uint32 _ProtectionLimit[DMGTYPE::NBTYPES];
};
/**
* Sabrina shield class (derived from CArmorStats)
* \author Sadge
* \author Nevrax France
* \date 2003
*/
class CShieldStats: public CArmorStats
{
public:
// construction
CShieldStats(): CArmorStats(), _ShieldType(SHIELDTYPE::NONE)
{}
// debug routines
std::string toString() const
{
return std::string()+SHIELDTYPE::toString(_ShieldType)+CArmorStats::toString(true);
}
// read accessors
SHIELDTYPE::EShieldType getShieldType() const { return _ShieldType; }
// write accessors
void setShieldType(SHIELDTYPE::EShieldType shieldType) { _ShieldType=shieldType; }
private:
SHIELDTYPE::EShieldType _ShieldType;
};
#endif