aboutsummaryrefslogtreecommitdiff
path: root/engines/neverhood/entity.cpp
diff options
context:
space:
mode:
authorjohndoe1232012-09-28 17:19:39 +0000
committerWillem Jan Palenstijn2013-05-08 20:43:44 +0200
commit0f04a013380c07f76ca68a14917cd6bce607184e (patch)
treeb1320e3ab5c0872361c8ee9593ccb7dccc269f31 /engines/neverhood/entity.cpp
parent6160ee3cf2f0cb93807ea115b94601b11d5543c4 (diff)
downloadscummvm-rg350-0f04a013380c07f76ca68a14917cd6bce607184e.tar.gz
scummvm-rg350-0f04a013380c07f76ca68a14917cd6bce607184e.tar.bz2
scummvm-rg350-0f04a013380c07f76ca68a14917cd6bce607184e.zip
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.
Diffstat (limited to 'engines/neverhood/entity.cpp')
-rw-r--r--engines/neverhood/entity.cpp36
1 files changed, 35 insertions, 1 deletions
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 <uint32 (Entity::*)(int messageNum, const MessageParam &param, Entity *sender)> (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