// 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_ACTOR_CREATURE_H
#define RY_SABRINA_ACTOR_CREATURE_H
// Sabrina
#include "sabrina_actor.h"
#include "sabrina_pointers.h"
/**
* AI specialisation of Sabrina actor class
* \author Sadge
* \author Nevrax France
* \date 2003
*/
class CSabrinaActorCreature: public ISabrinaActor
{
public:
//------------------------------------------------------------------------------------------------------
// ctor and dtor
CSabrinaActorCreature(CEntityBase *parent);
CSabrinaActorCreature(const CSabrinaActorCreature& other);
virtual ~CSabrinaActorCreature();
//------------------------------------------------------------------------------------------------------
// Management of the creature's own actions
virtual void beginSabrinaAction(const ISabrinaPhraseModel* phrase);
virtual void cancelSabrinaAction(SABRINA::TEventCode reason);
//------------------------------------------------------------------------------------------------------
// Virtual application of results of a Sabrina Action to a target
virtual void cbSabrinaActionApplyBegin();
virtual void applyHeal(SABRINA::THealType healType,uint32 value);
virtual void applyDamage(SABRINA::TDmgType damageType, uint32 value);
virtual void applyBeginSecondaryEffect(SABRINA::TEffectType effectType, uint32 strength);
virtual void applyEndSecondaryEffect(SABRINA::TEffectType effectType);
virtual void cbSabrinaActionApplyEnd();
//------------------------------------------------------------------------------------------------------
// Virtual Read Accessor Interface
virtual sint32 getSkillValue(SKILLS::ESkills skill) const;
virtual sint32 getAttackSkillValue() const;
virtual sint32 getDefenseSkillValue() const;
virtual sint32 getDodgeSkillValue() const;
virtual bool getRightHandWeaponStats(CWeaponStats& stats) const;
virtual bool getLeftHandWeaponStats(CWeaponStats& stats) const;
virtual bool getAmmoStats(CWeaponStats& stats) const;
virtual bool getArmorProtectionStats(SLOT_EQUIPMENT::TSlotEquipment slot,CArmorStats& protection) const;
virtual bool getLeftHandProtectionStats(CShieldStats& protection) const;
virtual ISabrinaActor* getTarget() const;
//------------------------------------------------------------------------------------------------------
// Logical test routines
virtual bool isValidOffensiveTarget(ISabrinaActor* target) const;
virtual bool isValidCurativeTarget(ISabrinaActor* target) const;
//------------------------------------------------------------------------------------------------------
// Virtual callbacks for message sending on activation/ cancelation of Sabrina actions
virtual void cbSabrinaActionBegin(const CSabrinaPhraseInstance* completedPhrase);
virtual void cbSabrinaActionSuccess(const CSabrinaPhraseInstance* completedPhrase, SABRINA::TEventCode code);
virtual void cbSabrinaActionFailure(const CSabrinaPhraseInstance* completedPhrase, SABRINA::TEventCode code);
virtual void cbSabrinaActionCancel(const CSabrinaPhraseInstance* completedPhrase, SABRINA::TEventCode code);
virtual void cbSabrinaActionEnd(const CSabrinaPhraseInstance* completedPhrase);
private:
//------------------------------------------------------------------------------------------------------
// private data
/// creature form
const CStaticCreatures *_CreatureForm;
/// defense value (parry or dodge)
sint32 _AttackSkillValue;
/// defense value (parry or dodge)
sint32 _DefenseSkillValue;
/// defense value (parry or dodge)
sint32 _DodgeSkillValue;
/// Global armor
CArmorStats _GlobalArmorStats;
/// Equivalent Weapon stats
CWeaponStats _RightHandWeaponStats;
CWeaponStats _LeftHandWeaponStats;
};
#endif