//----------------------------------------------------------------------------- // // $Logfile:: /Code/DLLs/game/stationaryFireCombat.hpp $ // $Revision:: 169 $ // $Author:: sketcher $ // $Date:: 4/26/02 2:22p $ // // Copyright (C) 2002 by Ritual Entertainment, Inc. // All rights reserved. // // This source may not be distributed and/or modified without // expressly written permission by Ritual Entertainment, Inc. // // // DESCRIPTION: // StationaryFireCombat Behavior Definition // //-------------------------------------------------------------------------------- //============================== // Forward Declarations //============================== class StationaryFireCombat; #ifndef __STATIONARY_FIRE_COMBAT___ #define __STATIONARY_FIRE_COMBAT___ #include "behavior.h" #include "behaviors_general.h" #include "gotoHelperNode.hpp" #include "rotateToEntity.hpp" //------------------------- CLASS ------------------------------ // // Name: CoverCombatWithRangedWeapon // Base Class: Behavior // // Description: // // Method of Use: Called From State Machine //-------------------------------------------------------------- class StationaryFireCombat : public Behavior { public: //------------------------------------ // States //------------------------------------ typedef enum { STATIONARY_FIRE_AIM, STATIONARY_FIRE_PRE_FIRE, STATIONARY_FIRE_ATTACK, STATIONARY_FIRE_POST_FIRE, STATIONARY_FIRE_SUCCESS, STATIONARY_FIRE_FAILED } StationaryFireStates_t; //------------------------------------- // Public Interface //------------------------------------- CLASS_PROTOTYPE(StationaryFireCombat); StationaryFireCombat(); ~StationaryFireCombat(); void SetArgs(Event* ev); void AnimDone(Event* ev); void Begin(Actor& self); BehaviorReturnCode_t Evaluate(Actor& self); void End(Actor& self); // Accessors void SetAimAnim(const str& anim) { _aimAnim = anim; } void SetFireAnim(const str& anim) { _fireAnim = anim; } void SetPreFireAnim(const str& anim) { _preFireAnim = anim; } void SetPostFireAnim(const str& anim) { _postFireAnim = anim; } void SetStance(const str& anim) { _stance = anim; } void SetAimTimeMin(float minTime) { _aimTimeMin = minTime; } void SetAimTimeMax(float maxTime) { _aimTimeMax = maxTime; } void SetFireTimeMin(float minTime) { _fireTimeMin = minTime; } void SetFireTimeMax(float maxTime) { _fireTimeMax = maxTime; } virtual void Archive(Archiver& arc); protected: //------------------------------------- // Internal Functionality //------------------------------------- void transitionToState(StationaryFireStates_t state); void setInternalState(StationaryFireStates_t state, const str& stateName); void init(Actor& self); void think(); void updateEnemy(); void faceEnemy(); void setupStateAim(); BehaviorReturnCode_t evaluateStateAim(); void failureStateAim(const str& failureReason); void setupStatePreFire(); BehaviorReturnCode_t evaluateStatePreFire(); void failureStatePreFire(const str& failureReason); void setupStateAttack(); BehaviorReturnCode_t evaluateStateAttack(); void failureStateAttack(const str& failureReason); void setupStatePostFire(); BehaviorReturnCode_t evaluateStatePostFire(); void failureStatePostFire(const str& failureReason); private: //------------------------------------ // Parameters //------------------------------------ str _aimAnim; str _preFireAnim; str _fireAnim; str _postFireAnim; str _stance; float _aimTimeMin; float _aimTimeMax; float _fireTimeMin; float _fireTimeMax; //------------------------------------- // Components //------------------------------------- FireWeapon _fireWeapon; RotateToEntity _rotateToEntity; //------------------------------------- // Member Variables //------------------------------------- StationaryFireStates_t _state; float _endFireTime; float _endAimTime; EntityPtr _currentEnemy; bool _animDone; bool _canAttack; Actor* _self; }; inline void StationaryFireCombat::Archive(Archiver& arc) { Behavior::Archive(arc); // // Archive Parameters // arc.ArchiveString(&_aimAnim); arc.ArchiveString(&_preFireAnim); arc.ArchiveString(&_fireAnim); arc.ArchiveString(&_postFireAnim); arc.ArchiveString(&_stance); arc.ArchiveFloat(&_aimTimeMin); arc.ArchiveFloat(&_aimTimeMax); arc.ArchiveFloat(&_fireTimeMin); arc.ArchiveFloat(&_fireTimeMax); // // Archive Components // arc.ArchiveObject(&_fireWeapon); arc.ArchiveObject(&_rotateToEntity); // // Archive Member Variables // ArchiveEnum(_state, StationaryFireStates_t); arc.ArchiveFloat(&_endFireTime); arc.ArchiveFloat(&_endAimTime); arc.ArchiveSafePointer(&_currentEnemy); arc.ArchiveBool(&_animDone); arc.ArchiveBool(&_canAttack); arc.ArchiveObjectPointer((Class **)&_self); } #endif /* __STATIONARY_FIRE_COMBAT___ */