Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
Diffstat (limited to 'src/core')
-rw-r--r--src/core/application.cc6
-rw-r--r--src/core/application.h3
-rw-r--r--src/core/clientstate.cc18
-rw-r--r--src/core/clientstate.h5
4 files changed, 31 insertions, 1 deletions
diff --git a/src/core/application.cc b/src/core/application.cc
index f8c563c..f92a0fe 100644
--- a/src/core/application.cc
+++ b/src/core/application.cc
@@ -411,6 +411,12 @@ void Application::notify_sound(const char *name)
// Dedicated servers don't need sounds
}
+void Application::notify_remove_sound(size_t source)
+{
+ // the default implementation does nothing.
+ // Dedicated servers don't need sounds
+}
+
void Application::notify_message(std::string const & message)
{
con_print << message << std::endl;
diff --git a/src/core/application.h b/src/core/application.h
index aad3ac9..8f69720 100644
--- a/src/core/application.h
+++ b/src/core/application.h
@@ -64,6 +64,9 @@ public:
/// text notifications from the core to the application
virtual void notify_message(std::string const & message);
+ /// remove sound source notification
+ virtual void notify_remove_sound(size_t source);
+
/*----- static --------------------------------------------------- */
/// a pointer to the current application instance
diff --git a/src/core/clientstate.cc b/src/core/clientstate.cc
index cc9c79e..503a71f 100644
--- a/src/core/clientstate.cc
+++ b/src/core/clientstate.cc
@@ -5,6 +5,7 @@
*/
#include "core/clientstate.h"
+#include "core/application.h"
namespace core {
@@ -14,6 +15,8 @@ ClientState::ClientState()
state_detailvisible = false;
state_targetable = false;
+ state_enginesound = 0;
+
for (size_t i = 0; i < 3; i++)
state_screenlocation[i] = 0;
@@ -25,11 +28,24 @@ ClientState::ClientState(Entity *entity)
state_visible = false;
state_detailvisible = false;
state_fuzz = math::randomf();
+
+ state_enginesound = 0;
+
assign(entity);
}
ClientState::~ClientState()
-{}
+{
+ clearsound();
+}
+
+void ClientState::clearsound()
+{
+ if (state_enginesound) {
+ application()->notify_remove_sound(state_enginesound);
+ state_enginesound = 0;
+ }
+}
void ClientState::assign(Entity * entity)
{
diff --git a/src/core/clientstate.h b/src/core/clientstate.h
index 6cd283d..87dd1d7 100644
--- a/src/core/clientstate.h
+++ b/src/core/clientstate.h
@@ -49,6 +49,9 @@ public:
/// assign the content of an entity
void assign(Entity *entity);
+ /// clear attached sounds
+ void clearsound();
+
math::Vector3f state_location;
math::Axis state_axis;
@@ -62,6 +65,8 @@ public:
bool state_targetable;
float state_fuzz;
+
+ size_t state_enginesound;
};
}