//----------------------------------------------------------------------------- // // $Logfile:: /Code/DLLs/game/MoveRandomDirection.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: // MoveRandomDirection Behavior Definition // //-------------------------------------------------------------------------------- //============================== // Forward Declarations //============================== class MoveRandomDirection; #ifndef __MOVE_RANDOM_DIRECTION___ #define __MOVE_RANDOM_DIRECTION___ #include "behavior.h" #include "behaviors_general.h" #define MIN_RANDOM_DIRECTION_DESTINATION 64.0f //------------------------- CLASS ------------------------------ // // Name: MoveRandomDirection // Base Class: Behavior // // Description: A replacement for Wander -- Utilizes fewer traces // // Method of Use: Called From State Machine //-------------------------------------------------------------- class MoveRandomDirection : public Behavior { public: typedef enum { RANDOM_MOVE_ANYWHERE, RANDOM_MOVE_IN_FRONT, RANDOM_MOVE_IN_BACK, } randomMoveModes_t; CLASS_PROTOTYPE(MoveRandomDirection); MoveRandomDirection(); ~MoveRandomDirection(); void SetArgs(Event* ev); void Begin(Actor& self); BehaviorReturnCode_t Evaluate(Actor& self); void End(Actor& self); virtual void Archive(Archiver& arc); // Accessors void SetDistance(float dist); void SetMinDistance(float dist); void SetAnim(const str& moveAnim); void SetMode(unsigned int mode); protected: Vector _chooseRandomDirection(Actor& self); float _getDistanceToDestination(Actor& self); void findDestination(Actor& self); void setLegAnim(Actor& self); void setTorsoAnim(Actor& self); private: // Parameters str anim; GotoPoint _chase; Vector _destination; unsigned int _mode; float _dist; float _minDistance; float _nextChangeTime; bool _foundGoodDestination; bool _forever; bool _faceEnemy; str _torsoAnim; }; inline void MoveRandomDirection::Archive(Archiver& arc) { Behavior::Archive(arc); // Archive Parameters arc.ArchiveString(&anim); // Archive Components arc.ArchiveObject(&_chase); // Archive Member Vars arc.ArchiveVector(&_destination); arc.ArchiveUnsigned(&_mode); arc.ArchiveFloat(&_dist); arc.ArchiveFloat(&_minDistance); arc.ArchiveFloat(&_nextChangeTime); arc.ArchiveBool(&_foundGoodDestination); arc.ArchiveBool(&_forever); arc.ArchiveBool(&_faceEnemy); arc.ArchiveString(&_torsoAnim); } #endif /* __MOVE_RANDOM_DIRECTION___ */