00001
00002 #ifndef INCLUDED_SoundNode_h_
00003 #define INCLUDED_SoundNode_h_
00004
00005 #include "Behaviors/StateNode.h"
00006 #include "Events/EventRouter.h"
00007 #include "Sound/SoundManager.h"
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 class SoundNode : public StateNode {
00018 protected:
00019 std::string filename;
00020 SoundManager::Play_ID curplay_id;
00021 bool autostop;
00022
00023 public:
00024
00025 SoundNode(const std::string& soundfilename="") :
00026 StateNode("SoundNode","SoundNode"), filename(soundfilename), curplay_id(SoundManager::invalid_Play_ID), autostop(false) {}
00027
00028
00029 SoundNode(const std::string& nodename, const std::string& soundfilename) :
00030 StateNode("SoundNode",nodename), filename(soundfilename), curplay_id(SoundManager::invalid_Play_ID), autostop(false) {}
00031
00032
00033 virtual void DoStart() {
00034 StateNode::DoStart();
00035 if(filename.size()>0) {
00036 curplay_id = sndman->playFile(filename);
00037 erouter->addListener(this,EventBase::audioEGID,curplay_id,EventBase::deactivateETID);
00038 }
00039 }
00040
00041
00042 virtual void DoStop() {
00043 if(autostop)
00044 stopPlay();
00045 erouter->removeListener(this);
00046 StateNode::DoStop();
00047 }
00048
00049
00050 virtual void processEvent(const EventBase&) {
00051 curplay_id = SoundManager::invalid_Play_ID;
00052 postCompletionEvent();
00053 }
00054
00055
00056 void stopPlay() {
00057 sndman->stopPlay(curplay_id);
00058 curplay_id = SoundManager::invalid_Play_ID;
00059 }
00060
00061
00062 std::string getFileName() { return filename; }
00063
00064
00065 void setFileName(std::string &soundfilename) { filename = soundfilename; }
00066
00067
00068 bool getAutoStop() { return autostop; }
00069
00070
00071 void setAutoStop(bool stop) { autostop=stop; }
00072
00073 protected:
00074
00075 SoundNode(const std::string &classname, const std::string &nodename, const std::string &soundfilename) :
00076 StateNode(classname,nodename), filename(soundfilename), curplay_id(SoundManager::invalid_Play_ID), autostop(false) {}
00077 };
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090 #endif