/*==LICENSE==* CyanWorlds.com Engine - MMOG client, server and tools Copyright (C) 2011 Cyan Worlds, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . You can contact Cyan Worlds, Inc. by email legal@cyan.com or by snail mail at: Cyan Worlds, Inc. 14617 N Newport Hwy Mead, WA 99021 *==LICENSE==*/ /** \file plArmatureEffects.h Manages environmental effects for the avatar. */ #ifndef plArmatureEffects_inc #define plArmatureEffects_inc #include "../pnKeyedObject/hsKeyedObject.h" #include "hsTemplates.h" #include "hsBitVector.h" class plArmatureMod; class plArmatureEffect; class plRandomSoundMod; /** \class plArmatureEffects Passes key avatar events to external effects generators. Currently used for footstep sounds only, but should eventually generalize to water splashes, etc. More to come...*/ class plArmatureEffectsMgr : public hsKeyedObject { protected: hsTArray fEffects; hsBool fEnabled; public: plArmatureEffectsMgr() : fArmature(nil), fEnabled(true) {} virtual ~plArmatureEffectsMgr() {} CLASSNAME_REGISTER( plArmatureEffectsMgr ); GETINTERFACE_ANY( plArmatureEffectsMgr, hsKeyedObject ); virtual void Read(hsStream* s, hsResMgr* mgr); virtual void Write(hsStream* s, hsResMgr* mgr); virtual hsBool MsgReceive(plMessage* msg); UInt32 GetNumEffects(); plArmatureEffect *GetEffect(UInt32 num); void ResetEffects(); plArmatureMod *fArmature; enum { kFootDirt, kFootPuddle, kFootWater, kFootTile, kFootMetal, kFootWoodBridge, kFootRopeLadder, kFootGrass, kFootBrush, kFootHardWood, kFootRug, kFootStone, kFootMud, kFootMetalLadder, kFootWoodLadder, kFootDeepWater, kFootMaintainerGlass, kFootMaintainerStone, kFootSwimming, kMaxSurface, kFootNoSurface = kMaxSurface, }; static const char *SurfaceStrings[]; }; class plArmatureEffect : public hsKeyedObject { public: plArmatureEffect() {} ~plArmatureEffect() {} CLASSNAME_REGISTER( plArmatureEffect ); GETINTERFACE_ANY( plArmatureEffect, hsKeyedObject ); virtual hsBool HandleTrigger(plMessage* msg) = 0; virtual void Reset() {} }; class plArmatureEffectFootSurface { public: UInt8 fID; plKey fTrigger; }; class plArmatureEffectFootSound : public plArmatureEffect { protected: hsTArray fSurfaces; hsBitVector fActiveSurfaces; plRandomSoundMod *fMods[plArmatureEffectsMgr::kMaxSurface]; UInt32 IFindSurfaceByTrigger(plKey trigger); public: plArmatureEffectFootSound(); ~plArmatureEffectFootSound(); CLASSNAME_REGISTER( plArmatureEffectFootSound ); GETINTERFACE_ANY( plArmatureEffectFootSound, plArmatureEffect ); virtual void Read(hsStream* s, hsResMgr* mgr); virtual void Write(hsStream* s, hsResMgr* mgr); virtual hsBool MsgReceive(plMessage* msg); virtual hsBool HandleTrigger(plMessage* msg); virtual void Reset(); void SetFootType(UInt8); enum { kFootTypeShoe, kFootTypeBare, }; }; #endif