From 2f978ea5085678e98e391317cc50ac991cd726a8 Mon Sep 17 00:00:00 2001 From: Paweł Redman Date: Mon, 26 Mar 2018 18:02:37 +0200 Subject: Ambient sounds. Using Tremulous sounds (CC-BY-SA) as placeholders for wind.ogg and water.ogg. --- src/game/assets.cpp | 8 ++++++++ src/game/game.cpp | 50 +++++++++++++++++++++++++++++++++++++++++++++++++- src/game/game.hpp | 5 +++++ 3 files changed, 62 insertions(+), 1 deletion(-) (limited to 'src/game') diff --git a/src/game/assets.cpp b/src/game/assets.cpp index ef7be9b..96199a6 100644 --- a/src/game/assets.cpp +++ b/src/game/assets.cpp @@ -24,6 +24,7 @@ spider_assets_t spider; nest_assets_t nest; fx_assets_t fx; deco_assets_t deco; +ambience_assets_t ambience; render::animated_texture_t unit_selected; render::animated_texture_t unit_selected_halo; @@ -73,6 +74,13 @@ void load(void) render::register_tile(TILE_WATER, "assets/tiles/water.png", NULL, 0.0f); world::register_tile(TILE_GRAVEL, 0); render::register_tile(TILE_GRAVEL, "assets/tiles/gravel.png", NULL, 0.0f); + + ambience.nexus.load("assets/ambience/nexus.ogg"); + ambience.chasm.load("assets/ambience/chasm.ogg"); + ambience.wind.load("assets/ambience/wind.ogg"); + ambience.water.load("assets/ambience/water.ogg"); + + ambience.nexus.weight = 1.0f; } } // namespace game::assets diff --git a/src/game/game.cpp b/src/game/game.cpp index 44ea95d..58b2c9d 100644 --- a/src/game/game.cpp +++ b/src/game/game.cpp @@ -194,7 +194,6 @@ void state_t::resume(void) paused = false; } - #define TIME_DELTA ((ntime_t)1000000000 / 60) void state_t::tick(ntime_t time_) @@ -234,6 +233,55 @@ void state_t::tick(ntime_t time_) } } +void state_t::compute_ambience(render::state_t *render) +{ + rectf_t area; + size_t plains = 0, cave = 0, water = 0, weird = 0; + float scale, volume; + + area = render->window_in_world_space(); + + // resolution chosen arbitrarily + for (size_t y = 0; y < 5; y++) + for (size_t x = 0; x < 5; x++) { + v2f_t point; + world::tile_t *tile; + + point[0] = lerp(area[0][0], area[1][0], y / 4.0f); + point[1] = lerp(area[0][1], area[1][1], x / 4.0f); + + tile = world.get_tile(world::tile_index_t(point), world::SECTOR_FULL); + + switch (tile->type) { + case TILE_DIRT: + plains++; + break; + + case TILE_GRAVEL: + case TILE_STONE: + cave++; + break; + + case TILE_WATER: + water++; + break; + + case TILE_DIRT_RED: + case TILE_STONE_RED: + weird++; + break; + } + } + + scale = 1.0f / area.dims().len(); + volume = clamp(remap(0.002f, 0.08f, 0.0f, 1.0f, scale), 0.0f, 1.0f); + + assets::ambience.wind.weight = plains / 25.0f * volume; + assets::ambience.chasm.weight = cave / 25.0f * volume; + assets::ambience.water.weight = water / 25.0f * volume; + assets::ambience.nexus.weight = weird / 25.0f * volume; +} + die_t::die_t(size_t sides_) { sides = sides_; diff --git a/src/game/game.hpp b/src/game/game.hpp index 85e3849..8486412 100644 --- a/src/game/game.hpp +++ b/src/game/game.hpp @@ -77,11 +77,16 @@ namespace game { render::animated_texture_t wart; } deco_assets_t; + typedef struct { + audio::ambient_t nexus, chasm, wind, water; + } ambience_assets_t; + extern soldier_assets_t soldier; extern spider_assets_t spider; extern nest_assets_t nest; extern fx_assets_t fx; extern deco_assets_t deco; + extern ambience_assets_t ambience; extern render::animated_texture_t unit_selected; extern render::animated_texture_t unit_selected_halo; extern render::animated_texture_t move_marker; -- cgit