// 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 NL_FORAGE_SOURCE_CL_H
#define NL_FORAGE_SOURCE_CL_H
#include "nel/misc/types_nl.h"
#include "fx_cl.h"
/**
*
* \author Olivier Cado
* \author Nevrax France
* \date 2003
*/
class CForageSourceCL : public CFxCL
{
public:
enum TFSBarIndex { FSBTime, FSBQuantiy, FSBD, FSBE, FSBK, NbFSBarIndices };
static NLMISC::CRGBA SafeSourceColor;
/// Constructor
CForageSourceCL();
/// Destructor
virtual ~CForageSourceCL();
/// Build the entity from a sheet.
virtual bool build( const CEntitySheet *sheet );
/// Rebuild in scene interfaces
virtual void buildInSceneInterface ();
/// Called when clipped out
virtual void updateClipped (const NLMISC::TTime ¤tTimeInMs, CEntityCL *target);
/// Method called each frame to manage the entity after the clipping test if the primitive is visible.
virtual void updateVisible(const NLMISC::TTime &time, CEntityCL *target);
/// Update the entity after all positions done.
virtual void updateVisiblePostPos(const NLMISC::TTime &time, CEntityCL *target);
/// Return true if at least an extraction is in progress
bool isExtractionInProgress() const { return _IsExtractionInProgress; }
/// Return the knowledge level [0..2]
uint8 getKnowledge() const { return (_KnowledgeLevel & 0x80) != 0 ? 0 : _KnowledgeLevel; }
/// Return the icon filename (valid if the knowledge > 0, otherwise returns NULL)
const std::string *getKnowledgeIcon() const { return _IconFilename; }
/// Return the value of the K (max=127)
uint8 getKamiAngerBar() const { return _BarDestValues[4]; }
/// Return true if the source is in "extra time"
bool isInExtraTime() const { return _BarDestValues[0] < _ExtraTime; }
/// Return true if the source is in "prospection extra time" (not bonus extra time or normal extra time)
bool isInProspectionExtraTime() const { return _BarDestValues[0] < _ExtraTime - _InclBonusExtraTime; }
/// Return the current quantity available in the source
uint8 getCurrentQuantity() const { return _CurrentQuantity; }
void resetVP();
void displayInscenePos();
/// Current Display Value for bars
uint8 getTimeBar() const {return _TimeBar;}
uint8 getQuantityBar() const {return _QuantityBar;}
uint8 getDBar() const {return _DBar;}
uint8 getEBar() const {return _EBar;}
bool isSafe() { return _SafeSource; }
protected:
/// Initialize properties of the entity (according to the class).
virtual void initProperties();
// Update Entity Visual Property B
//virtual void updateVisualPropertyVpb(const NLMISC::TGameCycle &gameCycle, const sint64 &prop);
/// Update Entity Bars
virtual void updateVisualPropertyBars(const NLMISC::TGameCycle &gameCycle, const sint64 &prop);
/// Visual FX
virtual void updateVisualPropertyVisualFX(const NLMISC::TGameCycle &gameCycle, const sint64 &prop);
/// Update Entity Name.
virtual void updateVisualPropertyName (const NLMISC::TGameCycle &gameCycle, const sint64 &prop);
/// Update Entity Target.
virtual void updateVisualPropertyTarget (const NLMISC::TGameCycle &gameCycle, const sint64 &prop);
/// Update Entity Orientation.
virtual void updateVisualPropertyOrient (const NLMISC::TGameCycle &gameCycle, const sint64 &prop);
/// Display the modifiers
virtual void displayModifiers();
/// Destroy inscene interfaces
void releaseInSceneInterfaces();
/// Inscene interface
class CGroupInSceneUserInfo *_InSceneUserInterface;
private:
/// Knowledge icon (valid only if _KnowledgeLevel > 0, otherwise NULL)
const std::string *_IconFilename;
/// Destination values for bars
uint8 _BarDestValues[NbFSBarIndices];
/// Current value for bars (except the K bar)
float _BarCurrentValues[NbFSBarIndices-1];
/// Current Display Value for bars
uint8 _TimeBar;
uint8 _QuantityBar;
uint8 _DBar;
uint8 _EBar;
/// When an extraction is in progress, display all bars
bool _IsExtractionInProgress;
/// If the source is safe display its explosion bar green
bool _SafeSource;
/// 0=nothing 1=group 2=family. Bit 7 set means "knowledge info not received yet" (by visual fx)
uint8 _KnowledgeLevel;
/// Memorize the last received explosion bit
uint8 _LastExplosionSwitch;
/// The prospector slot (received in target)
uint8 _ProspectorSlot;
/// When the source is in "extra time", change the display of the time bar
uint8 _ExtraTime;
/// When the source is in "bonus extra time", change the display of the time bar
uint8 _InclBonusExtraTime;
/// First received value of quantity
uint8 _InitialQuantity;
/// Current quantity
uint8 _CurrentQuantity;
};
#endif // NL_FORAGE_SOURCE_CL_H
/* End of forage_source_cl.h */