Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/WolfireGames/overgrowth.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Objects/ambientsoundobject.cpp')
-rw-r--r--Source/Objects/ambientsoundobject.cpp145
1 files changed, 145 insertions, 0 deletions
diff --git a/Source/Objects/ambientsoundobject.cpp b/Source/Objects/ambientsoundobject.cpp
new file mode 100644
index 00000000..99dd6539
--- /dev/null
+++ b/Source/Objects/ambientsoundobject.cpp
@@ -0,0 +1,145 @@
+//-----------------------------------------------------------------------------
+// Name: ambientsoundobject.cpp
+// Developer: Wolfire Games LLC
+// Description:
+// License: Read below
+//-----------------------------------------------------------------------------
+//
+// Copyright 2022 Wolfire Games LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//-----------------------------------------------------------------------------
+#include "ambientsoundobject.h"
+
+#include <Math/vec3math.h>
+#include <Main/engine.h>
+
+#include <Graphics/pxdebugdraw.h>
+#include <Graphics/camera.h>
+
+#include <Internal/memwrite.h>
+#include <Internal/timer.h>
+
+#include <Objects/group.h>
+
+#include <Sound/sound.h>
+#include <Asset/Asset//ambientsounds.h>
+#include <Main/scenegraph.h>
+
+#include <tinyxml.h>
+
+//-----------------------------------------------------------------------------
+//Functions
+//-----------------------------------------------------------------------------
+
+bool AmbientSoundObject::Initialize() {
+ if(as_ref->GetSoundType() == _continuous){
+ SoundPlayInfo spi;
+ spi.path = as_ref->GetPath();
+ spi.looping = true;
+ spi.position = GetTranslation();
+ spi.occlusion_position = spi.position;
+ sound_handle = Engine::Instance()->GetSound()->CreateHandle(__FUNCTION__);
+ Engine::Instance()->GetSound()->Play(sound_handle,spi);
+ }
+ return true;
+}
+
+AmbientSoundObject::AmbientSoundObject():
+ sound_handle(0)
+{
+ box_.dims = vec3(1.0f);
+}
+
+AmbientSoundObject::~AmbientSoundObject() {
+}
+
+bool AmbientSoundObject::SetFromDesc( const EntityDescription& desc ){
+ bool ret = Object::SetFromDesc(desc);
+ if( ret ) {
+ for(unsigned i=0; i<desc.fields.size(); ++i){
+ const EntityDescriptionField& field = desc.fields[i];
+ switch(field.type){
+ case EDF_FILE_PATH: {
+ std::string type_file;
+ field.ReadString(&type_file);
+ if(!as_ref.valid() || as_ref->path_ != obj_file){
+ //as_ref = AmbientSounds::Instance()->ReturnRef(type_file);
+ as_ref = Engine::Instance()->GetAssetManager()->LoadSync<AmbientSound>(type_file);
+ if(as_ref->GetSoundType() == _occasional){
+ delay = as_ref->GetDelayNoLower();
+ }
+ }
+ break;}
+ }
+ }
+ }
+ return ret;
+}
+
+void AmbientSoundObject::Moved(Object::MoveType type) {
+ Object::Moved(type);
+ if(type & kTranslate && scenegraph_){
+ Engine::Instance()->GetSound()->SetPosition(sound_handle, GetTranslation());
+ }
+}
+
+bool AmbientSoundObject::InCameraRange() {
+ const float _threshold_distance = 10.0f;
+ const float _threshold_distance_squared = square(_threshold_distance);
+
+ const float dist_sqrd =
+ distance_squared(ActiveCameras::Get()->GetPos(), GetTranslation());
+ return dist_sqrd < _threshold_distance_squared;
+}
+
+void AmbientSoundObject::Update(float timestep){
+ if(as_ref->GetSoundType() == _occasional && InCameraRange()){
+ delay -= timestep;
+ if(delay <= 0.0f){
+ //SoundGroupRef sgr = SoundGroups::Instance()->ReturnRef(as_ref->GetPath());
+ SoundGroupRef sgr = Engine::Instance()->GetAssetManager()->LoadSync<SoundGroup>(as_ref->GetPath());
+ SoundGroupPlayInfo sgpi(*sgr, GetTranslation());
+ unsigned long handle = Engine::Instance()->GetSound()->CreateHandle(__FUNCTION__);
+ Engine::Instance()->GetSound()->PlayGroup(handle, sgpi);
+ delay = as_ref->GetDelay();
+ }
+ }
+}
+
+void AmbientSoundObject::Draw()
+{
+ /*ppolist::iterator iter = connections.begin();
+ for(;iter != connections.end(); ++iter){
+ DebugDraw::Instance()->AddLine(position,
+ (*iter)->position,
+ vec4(1.0f),
+ _delete_on_draw);
+ }*/
+}
+
+void AmbientSoundObject::Copied()
+{
+ sound_handle = 0;
+}
+
+void AmbientSoundObject::GetDesc(EntityDescription &desc) const {
+ Object::GetDesc(desc);
+ desc.AddString(EDF_FILE_PATH, as_ref->path_);
+}
+
+const std::string & AmbientSoundObject::GetPath()
+{
+ return as_ref->path_;
+}