diff --git a/assets/game_assets/blueprints/anti_sun.json b/assets/game_assets/blueprints/anti_sun.json new file mode 100644 index 0000000000000000000000000000000000000000..18939a270a3e69e0a0c52c4b9a738a8505d3f121 --- /dev/null +++ b/assets/game_assets/blueprints/anti_sun.json @@ -0,0 +1,19 @@ +{ + "Transform": { + }, + "Directional_light": { + "source_radius": 1.0, + "intensity": 80.0, + "color": { + "r": 1, + "g": 0.4, + "b": 0.4 + }, + "shadow_intensity": 10.0, + "shadow_size": 25, + "near_plane": 10.0, + "far_plane": 100, + "update_frequency": 1, + "light_particles": false + } +} diff --git a/assets/game_assets/blueprints/camera.json b/assets/game_assets/blueprints/camera.json index 5c34eeb5a15194ed036d56455d821ee0b32652e6..9542170b568059b98a0741e8a3932a428988a641 100644 --- a/assets/game_assets/blueprints/camera.json +++ b/assets/game_assets/blueprints/camera.json @@ -3,7 +3,10 @@ "Camera": { "fov": 50.0, "near": 0.05, - "far": 80.0 + "far": 80.0, + "dof_focus": 15, + "dof_range": 3, + "dof_power": 0.5 }, "Viewtarget": { "offset": { diff --git a/assets/game_assets/blueprints/player.json b/assets/game_assets/blueprints/player.json index 47227b40b70407d284a320297651d59c6889a731..0481a097f8c244c0a1c693e9152784b4c793693a 100644 --- a/assets/game_assets/blueprints/player.json +++ b/assets/game_assets/blueprints/player.json @@ -9,6 +9,9 @@ "Model": { "aid": "model:character" }, + "Material_property": { + "emissive_color": {"a": 4000} + }, "Shadowcaster": {}, "Movement": { "beats_per_step": 1, diff --git a/assets/game_assets/blueprints/sun.json b/assets/game_assets/blueprints/sun.json index 510737e0c545b901b8d2df1a91bfe1c2f4ada309..43f3d9adadb390f78d280fb51474d720d40c5375 100644 --- a/assets/game_assets/blueprints/sun.json +++ b/assets/game_assets/blueprints/sun.json @@ -3,13 +3,13 @@ }, "Directional_light": { "source_radius": 1.0, - "intensity": 1000.0, + "intensity": 190.0, "color": { "r": 1, - "g": 1, - "b": 1 + "g": 0.8, + "b": 0.8 }, - "shadow_intensity": 2.0, + "shadow_intensity": 0.0, "shadow_size": 25, "near_plane": 10.0, "far_plane": 100, diff --git a/assets/game_assets/particles/enemy_death_particles.json b/assets/game_assets/particles/enemy_death_particles.json index 46817d0ed2cbb24cfe20738d8d83c7703440d0da..d08e4351c50670c1110e4fa70f17f413824b658c 100644 --- a/assets/game_assets/particles/enemy_death_particles.json +++ b/assets/game_assets/particles/enemy_death_particles.json @@ -2,7 +2,7 @@ "keyframes": [ { "time": 0, - "color": {"mean":{"hue":0, "saturation":1, "alpha":20}, "stddev":{"hue":0.001}}, + "color": {"mean":{"hue":0, "saturation":1, "alpha":3}, "stddev":{"hue":0.001}}, "size": {"mean": {"x": 0.5, "y":0.5, "z":0.5}, "stddev":{"x": 0.3, "y":0.3, "z":0.3}}, "rotation": {"mean":{"angle":0}, "stddev":{"elevation":1, "azimuth":1, "angle": 1}}, "drag": 0.1 diff --git a/assets/game_assets/particles/special_attack_particles.json b/assets/game_assets/particles/special_attack_particles.json index 6300047fe5f7caa97fa735a0c91436f2980de960..900d8f7c8b4ae25ea9d40bc9913b86a695d3fce5 100644 --- a/assets/game_assets/particles/special_attack_particles.json +++ b/assets/game_assets/particles/special_attack_particles.json @@ -9,7 +9,7 @@ }, { "time": 0.1, - "color": {"mean":{"hue":0.472, "saturation":1, "alpha":20}, "stddev":{"hue":0.004}}, + "color": {"mean":{"hue":0.472, "saturation":1, "alpha":6}, "stddev":{"hue":0.004}}, "size": {"mean": {"x": 0.5, "y":0.5, "z":0.5}, "stddev":{"x": 0.1, "y":0.1, "z":0.1}}, "rotation": {"mean":{"angle":0}, "stddev":{"elevation":1, "azimuth":1, "angle": 1}}, "drag": 0.1 diff --git a/external/mirrage b/external/mirrage index 97d1f27e002409519dae841dd1053de1c7eca2fa..d997d0e29bbbbe10a5eb9c211f8131a8e46135b0 160000 --- a/external/mirrage +++ b/external/mirrage @@ -1 +1 @@ -Subproject commit 97d1f27e002409519dae841dd1053de1c7eca2fa +Subproject commit d997d0e29bbbbe10a5eb9c211f8131a8e46135b0 diff --git a/src/level/level_system.cpp b/src/level/level_system.cpp index 2694449bdafd77032fccf055df44e000f74b2faf..85ce637b39612741232aa3c1e1e9e1d8ddc873be 100644 --- a/src/level/level_system.cpp +++ b/src/level/level_system.cpp @@ -9,6 +9,9 @@ #include #include +#include + + namespace phase_shifter::level { using namespace mirrage; using namespace mirrage::ecs::components; @@ -42,9 +45,22 @@ namespace phase_shifter::level { } } // namespace - Level_system::Level_system(mirrage::ecs::Entity_manager& entities, mirrage::asset::Asset_manager& assets) - : _entities(entities), _assets(assets) + Level_system::Level_system(mirrage::ecs::Entity_manager& entities, + mirrage::asset::Asset_manager& assets, + const gameplay::Beat_system& beat) + : _entities(entities), _assets(assets), _beat(beat) { + auto create_tile_dummy = [&](glm::vec4 c) { + auto e = entities.emplace_empty(); + e.emplace(c); + _tile_dummies.emplace_back(e); + }; + + create_tile_dummy(glm::vec4(0.f, 0.f, 0.f, 0.f)); + create_tile_dummy(glm::vec4(1, 1, 1, 4000.f)); + create_tile_dummy(glm::vec4(1, 0.5f, 0.5f, 10000.f)); + create_tile_dummy(glm::vec4(1, 1, 1, 4000.f)); + _entities.register_component_type(); _spawners.emplace("p", [&](const Tile& tile, const glm::vec3& position) { @@ -80,10 +96,25 @@ namespace phase_shifter::level { .create() .emplace(camera.handle(), glm::rotate(sun_dir, glm::vec3(0, 0, 1)) * 40.f); + + + sun_elevation = 0.3f * glm::pi(); + sun_azimuth = glm::pi() - 0.2f; + sun_dir = glm::quat(glm::vec3( + (sun_elevation - 2.f) * glm::pi() / 2.f, glm::pi() * sun_azimuth, 0.f)); + _entities.entity_builder("anti_sun") + .rotation(sun_dir) + .position(glm::rotate(sun_dir, glm::vec3(0, 0, 1)) * 40.f) + .create(); }); } - auto Level_system::update(const mirrage::util::Time& time) -> void {} + auto Level_system::update(const mirrage::util::Time& time) -> void + { + if(_beat.beat_state().beat) { + _beat_light_offset = (_beat_light_offset + 1) % _tile_dummies.size(); + } + } void Level_system::draw(mirrage::renderer::Deferred_renderer& renderer) { @@ -150,12 +181,15 @@ namespace phase_shifter::level { for(auto x = min_x; x < max_x; x++) { auto tile = level.tiles[y][x]; + auto tile_dummy = _tile_dummies[(x + y + _beat_light_offset) % _tile_dummies.size()].handle(); + auto model_ptr = _tile_models.find(tile); if(model_ptr != _tile_models.end() && model_ptr->second.ready()) { auto& model = model_ptr->second.get_blocking(); auto& submeshes = model.sub_meshes(); for(auto&& submesh_index : mirrage::util::range(submeshes.size())) { auto& geometry = render_queue.emplace_back(); + geometry.entity = tile_dummy; geometry.model = &model; geometry.sub_mesh = std::uint32_t(submesh_index); geometry.position = glm::vec3(x, 0, y) * offset; diff --git a/src/level/level_system.hpp b/src/level/level_system.hpp index 96a4650569f1b67ead2b3b56a58e4e59b91e6ebb..75121cbee80c6024cdf57d7f3457932a3abc524f 100644 --- a/src/level/level_system.hpp +++ b/src/level/level_system.hpp @@ -1,5 +1,6 @@ #pragma once +#include "../gameplay/beat_system.hpp" #include "../util/collision.hpp" #include "level.hpp" @@ -24,7 +25,9 @@ namespace mirrage::asset { namespace phase_shifter::level { class Level_system { public: - Level_system(mirrage::ecs::Entity_manager& entities, mirrage::asset::Asset_manager& assets); + Level_system(mirrage::ecs::Entity_manager& entities, + mirrage::asset::Asset_manager& assets, + const gameplay::Beat_system&); auto update(const mirrage::util::Time& time) -> void; void draw(mirrage::renderer::Deferred_renderer& renderer); @@ -39,6 +42,10 @@ namespace phase_shifter::level { mirrage::ecs::Entity_manager& _entities; mirrage::asset::Asset_manager& _assets; + const gameplay::Beat_system& _beat; + int _beat_light_offset = 0; + + std::vector _tile_dummies; Level_ptr _current_level; std::unordered_mapvoid>> _spawners; diff --git a/src/meta_system.cpp b/src/meta_system.cpp index 8942f1cc306235c1d28a26b159166feb7682b346..562b7727149cd5576be6ff8b49b32cce19a1b8e9 100644 --- a/src/meta_system.cpp +++ b/src/meta_system.cpp @@ -36,7 +36,7 @@ namespace phase_shifter { , _model_loading(std::make_unique(_entities, engine.assets())) , _sound_manager(std::make_unique(engine.audio(), engine.bus(), engine.assets())) , _beat_system(std::make_unique(engine.bus(), engine.assets())) - , _level_system(std::make_unique(_entities, engine.assets())) + , _level_system(std::make_unique(_entities, engine.assets(), *_beat_system)) , _movement_system(std::make_unique( engine.bus(), _entities, *_beat_system, *_level_system)) , _input_system(std::make_unique(engine.bus(), _entities)) @@ -54,9 +54,11 @@ namespace phase_shifter { _entities.register_component_type(); - //auto s = _renderer->settings(); - //s.scene_luminance_override = 300.f; - //_renderer->settings(s, false); + auto s = _renderer->settings(); + s.amient_light_intensity = 0.4f; + s.exposure_luminance_override = 400.f; + s.scene_luminance_override = 400.f; + _renderer->settings(s, false); /*auto bg_music = engine.assets().load>("audio:bg_music_01"_aid).get_blocking(); diff --git a/src/ui/effect_system.cpp b/src/ui/effect_system.cpp index 731b56c05067b04f22579d1f3a2bbcc6c32493af..13ac42862657589a65a31f1efa54fba91be15414 100644 --- a/src/ui/effect_system.cpp +++ b/src/ui/effect_system.cpp @@ -47,7 +47,7 @@ namespace phase_shifter::ui { : _bus(bus), _mailbox(bus), _ecs(ecs) { - _tombstones.resize(20); + _tombstones.resize(10); for(auto& t : _tombstones) { t.entity = _ecs.entity_builder("enemy_tombstone").position(glm::vec3{-999.f, 0.f, -999.f}).create();