From 983d9737396dc0b034f218b90d4ff6edcc2b1adc Mon Sep 17 00:00:00 2001 From: Glenn Maynard Date: Wed, 31 Aug 2005 21:56:11 +0000 Subject: [PATCH] Allow using sounds in XML directly. This is only a little odd: sounds have all of the basic Actor state (position, etc). It's tricky to split that out, because sounds *should* have a tweening queue, support commands and broadcasts, etc. --- stepmania/src/ActorSound.cpp | 83 ++++++++++++++++++++++++++++++++++++ stepmania/src/ActorSound.h | 53 +++++++++++++++++++++++ 2 files changed, 136 insertions(+) create mode 100644 stepmania/src/ActorSound.cpp create mode 100644 stepmania/src/ActorSound.h diff --git a/stepmania/src/ActorSound.cpp b/stepmania/src/ActorSound.cpp new file mode 100644 index 0000000000..490422f877 --- /dev/null +++ b/stepmania/src/ActorSound.cpp @@ -0,0 +1,83 @@ +#include "global.h" +#include "ActorSound.h" +#include "ActorUtil.h" +#include "LuaManager.h" +#include "XmlFile.h" + +REGISTER_ACTOR_CLASS_WITH_NAME( ActorSound, Sound ) + +void ActorSound::Load( const CString &sPath ) +{ + m_Sound.Load( sPath, true ); +} + +void ActorSound::Play() +{ + m_Sound.Play(); +} + +void ActorSound::LoadFromNode( const CString& sDir, const XNode* pNode ) +{ + Actor::LoadFromNode( sDir, pNode ); + + CString sFile; + if( pNode->GetAttrValue("Path", sFile) ) + { + LuaHelpers::RunAtExpressionS( sFile ); + FixSlashesInPlace( sFile ); + + CString sNewPath = sFile.Left(1) == "/"? sFile : sDir+sFile; + ActorUtil::ResolvePath( sNewPath, sDir ); + + Load( sNewPath ); + } +} + +// lua start +#include "LuaBinding.h" + +class LunaActorSound: public Luna +{ +public: + LunaActorSound() { LUA->Register( Register ); } + + static int load( T* p, lua_State *L ) { p->Load(SArg(1)); return 0; } + static int play( T* p, lua_State *L ) { p->Play(); return 0; } + + static void Register(lua_State *L) + { + ADD_METHOD( load ) + ADD_METHOD( play ) + + Luna::Register( L ); + } +}; + +LUA_REGISTER_DERIVED_CLASS( ActorSound, Actor ) +// lua end + + +/* + * (c) 2005 Glenn Maynard + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, and/or sell copies of the Software, and to permit persons to + * whom the Software is furnished to do so, provided that the above + * copyright notice(s) and this permission notice appear in all copies of + * the Software and that both the above copyright notice(s) and this + * permission notice appear in supporting documentation. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF + * THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS + * INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT + * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS + * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ diff --git a/stepmania/src/ActorSound.h b/stepmania/src/ActorSound.h new file mode 100644 index 0000000000..f547d866e5 --- /dev/null +++ b/stepmania/src/ActorSound.h @@ -0,0 +1,53 @@ +/* ActorSound - RageSound Actor interface. */ + +#ifndef ACTOR_SOUND_H +#define ACTOR_SOUND_H + +#include "Actor.h" +#include "RageSound.h" + +class ActorSound: public Actor +{ +public: + virtual ~ActorSound() { } + virtual Actor *Copy() const; + + void Load( const CString &sPath ); + void Play(); + void LoadFromNode( const CString& sDir, const XNode* pNode ); + + // + // Lua + // + virtual void PushSelf( lua_State *L ); + +private: + RageSound m_Sound; +}; + +#endif + +/* + * (c) 2005 Glenn Maynard + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, and/or sell copies of the Software, and to permit persons to + * whom the Software is furnished to do so, provided that the above + * copyright notice(s) and this permission notice appear in all copies of + * the Software and that both the above copyright notice(s) and this + * permission notice appear in supporting documentation. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF + * THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS + * INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT + * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS + * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */