[update] Implemented animations for ResultScene.

This commit is contained in:
falsycat 2019-10-14 00:00:00 +00:00
parent bda8e5d594
commit 41c91edb72
2 changed files with 45 additions and 3 deletions

View File

@ -46,7 +46,7 @@ class Game : AbstractGame {
select_.SetupSceneDependency(title_, load_); select_.SetupSceneDependency(title_, load_);
load_ .SetupSceneDependency(play_); load_ .SetupSceneDependency(play_);
play_ .SetupSceneDependency(result_); play_ .SetupSceneDependency(result_);
result_.SetupSceneDependency(); result_.SetupSceneDependency(title_);
title_.Initialize(); title_.Initialize();
super(title_); super(title_);

View File

@ -1,6 +1,8 @@
/// License: MIT /// License: MIT
module sj.ResultScene; module sj.ResultScene;
import std.math;
import gl4d; import gl4d;
import sj.FontSet, import sj.FontSet,
@ -8,11 +10,27 @@ import sj.FontSet,
sj.LobbyWorld, sj.LobbyWorld,
sj.Music, sj.Music,
sj.ProgramSet, sj.ProgramSet,
sj.SceneInterface; sj.SceneInterface,
sj.TitleScene,
sj.util.Animation,
sj.util.Easing;
/// ///
class ResultScene : SceneInterface { class ResultScene : SceneInterface {
public: public:
///
enum AnimationFrame = 60;
///
enum CubeLoadingRotationSpeed = vec3(PI/100, PI/10, PI/100);
///
enum CubeLoadingInterval = 0.06;
///
enum CubeRotationSpeed = vec3(PI/1000, PI/500, PI/1000);
///
enum CubeInterval = 0.005;
/// ///
this(LobbyWorld lobby, ProgramSet programs, FontSet fonts) { this(LobbyWorld lobby, ProgramSet programs, FontSet fonts) {
lobby_ = lobby; lobby_ = lobby;
@ -23,14 +41,32 @@ class ResultScene : SceneInterface {
} }
/// ///
void SetupSceneDependency() { void SetupSceneDependency(TitleScene title) {
title_scene_ = title;
} }
/// ///
void Initialize(Music music, int score) { void Initialize(Music music, int score) {
music_ = music; music_ = music;
anime_ = Animation(AnimationFrame);
cube_interval_ease_ =
Easing!float(CubeLoadingInterval, CubeInterval);
cube_rotation_speed_ease_ =
Easing!vec3(CubeLoadingRotationSpeed, CubeRotationSpeed);
} }
override SceneInterface Update(KeyInput input) { override SceneInterface Update(KeyInput input) {
const ratio = anime_.Update();
with (lobby_) {
cube_matrix.rotation += cube_rotation_speed_ease_.Calculate(ratio);
cube_interval = cube_interval_ease_ .Calculate(ratio);
}
if (anime_.isFinished && input.down) {
title_scene_.Initialize();
return title_scene_;
}
return this; return this;
} }
override void Draw() { override void Draw() {
@ -38,6 +74,8 @@ class ResultScene : SceneInterface {
} }
private: private:
TitleScene title_scene_;
LobbyWorld lobby_; LobbyWorld lobby_;
ProgramSet programs_; ProgramSet programs_;
@ -45,4 +83,8 @@ class ResultScene : SceneInterface {
FontSet fonts_; FontSet fonts_;
Music music_; Music music_;
Animation anime_;
Easing!vec3 cube_rotation_speed_ease_;
Easing!float cube_interval_ease_;
} }