From 95903806eb235cb5e2b88cf4db354d4c680617a2 Mon Sep 17 00:00:00 2001 From: FluffyStuff Date: Fri, 24 Apr 2020 01:33:45 +0000 Subject: [PATCH] Add small camera and fade animation on game start --- Engine | 2 +- source/Game/GameController.vala | 7 ++++++ source/Game/Rendering/GameRenderView.vala | 28 +++++++++++++++++++++-- source/MainWindow.vala | 27 ++++++++++++++++++++++ 4 files changed, 61 insertions(+), 3 deletions(-) diff --git a/Engine b/Engine index f7fc62a..0d7938f 160000 --- a/Engine +++ b/Engine @@ -1 +1 @@ -Subproject commit f7fc62a0848727bf01c626022063a1be84cd33fa +Subproject commit 0d7938f792a19757425e7b244f0d2876750c9c05 diff --git a/source/Game/GameController.vala b/source/Game/GameController.vala index cd04f7e..cc40a2b 100644 --- a/source/Game/GameController.vala +++ b/source/Game/GameController.vala @@ -17,6 +17,7 @@ class GameController : Object private Options options; private bool game_finished = false; private bool is_disconnected = false; + public signal void game_loaded(); public signal void finished(); public GameController(Container parent_view, GameStartInfo start_info, ServerSettings settings, IGameConnection connection, int player_index, Options options) @@ -156,6 +157,7 @@ class GameController : Object game.start_round(info); renderer = new GameRenderView(player_index, game.dealer_index, start_info, info, options, game.score); + renderer.game_loaded.connect(on_game_loaded); parent_view.add_child(renderer); menu = new GameMenuView(renderer.context, settings, index, player_index == -1); @@ -166,6 +168,11 @@ class GameController : Object create_round_state(info); } + private void on_game_loaded() + { + game_loaded(); + } + private void declared_riichi(int player_index, bool open) { game.declare_riichi(player_index); diff --git a/source/Game/Rendering/GameRenderView.vala b/source/Game/Rendering/GameRenderView.vala index 015fcc6..29ec03f 100644 --- a/source/Game/Rendering/GameRenderView.vala +++ b/source/Game/Rendering/GameRenderView.vala @@ -24,6 +24,9 @@ public class GameRenderView : View3D, IGameRenderer private WorldObject target; private WorldObject observe_object; + public signal void game_loaded(); + private bool has_loaded = false; + public GameRenderView(int observer_index, int dealer_index, GameStartInfo game_start, RoundStartInfo info, Options options, RoundScoreState score) { this.observer_index = observer_index; @@ -61,14 +64,26 @@ public class GameRenderView : View3D, IGameRenderer target = new WorldObject(); observe_object.add_object(target); - target.position = Vec3(0, -4, 0); + target.position = Vec3(0, 2, 0); camera = new TargetWorldCamera(target); observe_object.add_object(camera); world.active_camera = camera; - camera.position = Vec3(0, 16, 10); + camera.position = Vec3(0, 2, 4); camera.view_angle = 80; + float camera_animation_time = 3; + + WorldObjectAnimation camera_animation = new WorldObjectAnimation(new AnimationTime.preset(camera_animation_time)); + camera_animation.do_absolute_position(new LinearPath3D(Vec3(0, 16, 10))); + camera_animation.curve = new SCurve(0.5f); + camera.animate(camera_animation, true); + + WorldObjectAnimation target_animation = new WorldObjectAnimation(new AnimationTime.preset(camera_animation_time)); + target_animation.do_absolute_position(new LinearPath3D(Vec3(0, -4, 0))); + target_animation.curve = new SCurve(0.5f); + target.animate(target_animation, true); + buffer_action(new RenderActionDelay(new AnimationTime.preset(0.5f))); buffer_action(new RenderActionSplitDeadWall(context.server_times.split_wall)); @@ -87,6 +102,15 @@ public class GameRenderView : View3D, IGameRenderer buffer_action(new RenderActionFlipDora()); } + protected override void process(DeltaArgs args) + { + if (!has_loaded) + { + has_loaded = true; + game_loaded(); + } + } + /*protected override void key_press(KeyArgs key) { if (key.keycode == KeyCode.NUM_1) diff --git a/source/MainWindow.vala b/source/MainWindow.vala index 5c95e31..add192e 100644 --- a/source/MainWindow.vala +++ b/source/MainWindow.vala @@ -9,6 +9,7 @@ public class MainWindow : RenderWindow private GameEscapeMenuView? escape_menu; private bool game_running = false; private MusicPlayer music; + private RectangleControl fade_rect; public MainWindow(IWindowTarget window, RenderTarget renderer) { @@ -63,12 +64,38 @@ public class MainWindow : RenderWindow main_view.add_child(menu); } + private void game_loaded() + { + var anim = new Animation.preset(1); + anim.curve = new SmoothDepartCurve(); + anim.animate.connect(animate_fade_rect); + anim.finished.connect(remove_fade_rect); + fade_rect.add_animation(anim); + } + + private void animate_fade_rect(float time) + { + fade_rect.color = Color.with_alpha(1 - time); + } + + private void remove_fade_rect() + { + main_view.remove_child(fade_rect); + } + private GameController game_start(GameStartInfo info, ServerSettings settings, IGameConnection connection, int player_index) { menu.visible = false; game_controller = new GameController(game_view, info, settings, connection, player_index, new Options.from_disk()); + game_controller.game_loaded.connect(game_loaded); game_controller.finished.connect(game_finished); + game_running = true; + + fade_rect = new RectangleControl(); + main_view.add_child(fade_rect); + fade_rect.color = Color.black(); + fade_rect.resize_style = ResizeStyle.RELATIVE; return game_controller; }