From 0f04a013380c07f76ca68a14917cd6bce607184e Mon Sep 17 00:00:00 2001 From: johndoe123 Date: Fri, 28 Sep 2012 17:19:39 +0000 Subject: NEVERHOOD: Change sound playing Sounds can now be loaded/played by an entity without declaring/initializing a SoundResource which is a little nicer. I implemented this so far for Module1000 only, rest will follow. --- engines/neverhood/entity.cpp | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) (limited to 'engines/neverhood/entity.cpp') diff --git a/engines/neverhood/entity.cpp b/engines/neverhood/entity.cpp index e837225998..f78d4cf23d 100644 --- a/engines/neverhood/entity.cpp +++ b/engines/neverhood/entity.cpp @@ -21,6 +21,7 @@ */ #include "neverhood/entity.h" +#include "neverhood/sound.h" namespace Neverhood { @@ -51,10 +52,12 @@ Entity *MessageParam::asEntity() const { #define SetMessageHandler(handler) _messageHandlerCb = static_cast (handler); debug(2, "SetMessageHandler(" #handler ")"); _messageHandlerCbName = #handler Entity::Entity(NeverhoodEngine *vm, int priority) - : _vm(vm), _updateHandlerCb(NULL), _messageHandlerCb(NULL), _priority(priority), _name("Entity") { + : _vm(vm), _updateHandlerCb(NULL), _messageHandlerCb(NULL), _priority(priority), _soundResources(NULL), + _name("Entity") { } Entity::~Entity() { + deleteSoundResources(); } void Entity::draw() { @@ -112,4 +115,35 @@ void Entity::incSubVar(uint32 nameHash, uint32 subNameHash, int incrValue) { setSubVar(nameHash, subNameHash, getSubVar(nameHash, subNameHash) + incrValue); } +SoundResource *Entity::getSoundResource(uint index) { + assert(index < kMaxSoundResources); + if (!_soundResources) { + _soundResources = new SoundResource*[kMaxSoundResources]; + for (uint i = 0; i < kMaxSoundResources; ++i) + _soundResources[i] = NULL; + } + if (!_soundResources[index]) + _soundResources[index] = new SoundResource(_vm); + return _soundResources[index]; +} + +void Entity::loadSound(uint index, uint32 fileHash) { + getSoundResource(index)->load(fileHash); +} + +void Entity::playSound(uint index, uint32 fileHash) { + if (fileHash) + getSoundResource(index)->play(fileHash); + else + getSoundResource(index)->play(); +} + +void Entity::deleteSoundResources() { + if (_soundResources) { + for (uint i = 0; i < kMaxSoundResources; ++i) + delete _soundResources[i]; + delete[] _soundResources; + } +} + } // End of namespace Neverhood -- cgit v1.2.3