216 lines
6.7 KiB
C++
216 lines
6.7 KiB
C++
// Ryzom - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
|
|
// 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 <http://www.gnu.org/licenses/>.
|
|
|
|
|
|
|
|
#ifndef CL_PLAYER_CL_H
|
|
#define CL_PLAYER_CL_H
|
|
|
|
|
|
/////////////
|
|
// INCLUDE //
|
|
/////////////
|
|
// Misc.
|
|
#include "nel/misc/types_nl.h"
|
|
// 3d
|
|
#include "nel/3d/u_point_light.h"
|
|
// Client.
|
|
#include "character_cl.h"
|
|
// Client Sheets
|
|
#include "client_sheets/race_stats_sheet.h"
|
|
// Game Share
|
|
#include "game_share/people.h"
|
|
|
|
|
|
///////////
|
|
// CLASS //
|
|
///////////
|
|
class CPlayerSheet;
|
|
|
|
/**
|
|
* Class to manage a player.
|
|
* \author Guillaume PUZIN
|
|
* \author Nevrax France
|
|
* \date 2001
|
|
*/
|
|
class CPlayerCL : public CCharacterCL
|
|
{
|
|
public:
|
|
NLMISC_DECLARE_CLASS(CPlayerCL);
|
|
|
|
/// Constructor
|
|
CPlayerCL();
|
|
/// Destructor
|
|
virtual ~CPlayerCL();
|
|
|
|
/// Build the entity from a sheet.
|
|
virtual bool build(const CEntitySheet *sheet);
|
|
|
|
/// Method to return the attack radius of an entity
|
|
virtual double attackRadius() const;
|
|
/** Return the position the attacker should have to combat according to the attack angle.
|
|
* \param ang : 0 = the front, >0 and <Pi = left side, <0 and >-Pi = right side.
|
|
*/
|
|
virtual NLMISC::CVectorD getAttackerPos(double ang, double dist) const;
|
|
|
|
/** \name DEBUG
|
|
* Methods only here for the debug.
|
|
*/
|
|
//@{
|
|
/// Display Debug Information.
|
|
virtual void displayDebug(float x, float &y, float lineStep);
|
|
//@}
|
|
|
|
/// Return the People for the entity.
|
|
virtual EGSPD::CPeople::TPeople people() const;
|
|
virtual void setPeople(EGSPD::CPeople::TPeople people);
|
|
|
|
/// Return a pointer on the sheet used to create this player.
|
|
const CRaceStatsSheet *playerSheet() const {return _PlayerSheet;}
|
|
|
|
// from CEntityCL
|
|
virtual void computePrimitive();
|
|
|
|
/// Return the entity scale. (return 1.0 if there is any problem).
|
|
virtual float getScale() const;
|
|
// return vector of ground fxs sorted by ground type, or NULL is ground fxs are not supported for the entity
|
|
virtual const std::vector<CGroundFXSheet> *getGroundFX() const;
|
|
virtual bool supportGroundFX() const { return true; }
|
|
|
|
// Return true if this entity is a neutral entity.
|
|
virtual bool isNeutral () const;
|
|
// Return true if this entity is a user's friend.
|
|
virtual bool isFriend () const;
|
|
// Return true if this entity is a user's enemy.
|
|
virtual bool isEnemy () const;
|
|
// Return true if this entity is a user's ally.
|
|
virtual bool isAlly() const;
|
|
// Return true if this entity is neutral pvp.
|
|
virtual bool isNeutralPVP() const;
|
|
|
|
/// Ask if the entity is afk (a character is never afk but players can be)
|
|
virtual bool isAFK() const {return (_Mode == MBEHAV::REST || properties().afk());}
|
|
|
|
/// Return true if this player is in the same faction as the user's (except if neutral)
|
|
bool isFromSameNonNeutralPvpClanAsUser() const;
|
|
|
|
// From CEntityCL
|
|
const char *getBoneNameFromBodyPart(BODY::TBodyPart part, BODY::TSide side) const;
|
|
|
|
// retrieve right hand item sheet
|
|
virtual const CItemSheet *getRightHandItemSheet() const;
|
|
virtual const CItemSheet *getLeftHandItemSheet() const;
|
|
|
|
virtual const CAttack *getAttack(const CAttackIDSheet &id) const;
|
|
|
|
virtual float getScaleRef() const;
|
|
|
|
protected:
|
|
/// Pointer on the Sheet with basic parameters.
|
|
const CPlayerSheet *_Sheet;
|
|
/// Pointer on the Sheet with basic parameters.
|
|
const CRaceStatsSheet *_PlayerSheet;
|
|
/// Player Face
|
|
SInstanceCL _Face;
|
|
/// Default Look
|
|
std::string _DefaultChest;
|
|
std::string _DefaultLegs;
|
|
std::string _DefaultArms;
|
|
std::string _DefaultHands;
|
|
std::string _DefaultFeet;
|
|
std::string _DefaultHair;
|
|
sint32 _HairColor;
|
|
sint32 _EyesColor;
|
|
/// 'true' while the entity is not ready to be displayed.
|
|
bool _WaitForAppearance;
|
|
// AsyncTexturing: true if all instances are not loaded.
|
|
bool _PlayerCLAsyncTextureLoading;
|
|
// Is the light On or Off.
|
|
bool _LightOn;
|
|
// Light
|
|
NL3D::UPointLight _Light;
|
|
|
|
std::string _CacheSkeletonShapeName;
|
|
|
|
protected:
|
|
// Return the automaton type of the entity (homin, creature, etc.)
|
|
virtual std::string automatonType() const;
|
|
|
|
// Initialize the graphic for the player.
|
|
void init3d();
|
|
|
|
/// Initialize properties of the entity (according to the class).
|
|
virtual void initProperties();
|
|
|
|
/// Set the equipmenent worn.
|
|
void equip(SLOTTYPE::EVisualSlot slot, const std::string &shapeName, const CItemSheet *item = 0);
|
|
/// Compute the equipmenent worn.
|
|
void equip(SLOTTYPE::EVisualSlot slot, uint index, uint color);
|
|
|
|
/// Compute the animation set to use according to weapons, mode and race.
|
|
virtual void computeAnimSet();
|
|
|
|
/// Update the Visual Property A
|
|
virtual void updateVisualPropertyVpa(const NLMISC::TGameCycle &gameCycle, const sint64 &prop);
|
|
/// Update the Visual Property B
|
|
virtual void updateVisualPropertyVpb(const NLMISC::TGameCycle &gameCycle, const sint64 &prop);
|
|
/// Update the Visual Property C
|
|
virtual void updateVisualPropertyVpc(const NLMISC::TGameCycle &gameCycle, const sint64 &prop);
|
|
/// Update the Visual Property PVP Mode (need special imp for player because of PVP consider)
|
|
virtual void updateVisualPropertyPvpMode(const NLMISC::TGameCycle &gameCycle, const sint64 &prop);
|
|
|
|
// Get The Entity Skin
|
|
virtual sint skin() const;
|
|
|
|
/// Update blink
|
|
virtual SInstanceCL *getFace ();
|
|
|
|
// Draw the name.
|
|
virtual void drawName(const NLMISC::CMatrix &mat);
|
|
|
|
/** \name 3D System
|
|
* Methods to manage basics 3D systems
|
|
*/
|
|
//@{
|
|
/** update the display of the AsyncTexture of the entity. called in updateDisplay()
|
|
* Deriver: See CPlayerCL implementation
|
|
* \return distance from entity to camera computed (helper for deriver)
|
|
*/
|
|
virtual float updateAsyncTexture();
|
|
|
|
/// Update the Lod Texture When needed
|
|
virtual void updateLodTexture();
|
|
//@}
|
|
/// Return the basic max speed for the entity in meter per sec
|
|
virtual double getMaxSpeed() const;
|
|
|
|
// Read/Write Variables from/to the stream.
|
|
virtual void readWrite(class NLMISC::IStream &f) throw(NLMISC::EStream);
|
|
// To call after a read from a stream to re-initialize the entity.
|
|
virtual void load();
|
|
|
|
/// Return name position on Z axis defined in sheet
|
|
virtual float getNamePosZ() const;
|
|
|
|
// virtual for special PlayerCL _Face mgt
|
|
virtual void doSetVisualSelectionBlink(bool bOnOff, NLMISC::CRGBA emitColor);
|
|
|
|
};
|
|
|
|
|
|
#endif // CL_PLAYER_CL_H
|
|
|
|
/* End of player_cl.h */
|