[update] Implemented showing score at ResultScene.
This commit is contained in:
parent
47ede702f6
commit
8064cdb40e
@ -19,7 +19,7 @@ posteffect [0..1] {
|
|||||||
clip_right := 0.1;
|
clip_right := 0.1;
|
||||||
}
|
}
|
||||||
|
|
||||||
$repeat i 10 {
|
$repeat i 1 {
|
||||||
$repeat j 20 {
|
$repeat j 20 {
|
||||||
circle [$i..$i+2] {
|
circle [$i..$i+2] {
|
||||||
color_r := 0.8;
|
color_r := 0.8;
|
||||||
|
@ -39,6 +39,8 @@ class PlayScene : SceneInterface {
|
|||||||
music_ = music;
|
music_ = music;
|
||||||
context_ = context;
|
context_ = context;
|
||||||
|
|
||||||
|
score_ = BaseScore;
|
||||||
|
|
||||||
music_.PlayForGame();
|
music_.PlayForGame();
|
||||||
}
|
}
|
||||||
override SceneInterface Update(KeyInput input) {
|
override SceneInterface Update(KeyInput input) {
|
||||||
|
@ -1,7 +1,10 @@
|
|||||||
/// License: MIT
|
/// License: MIT
|
||||||
module sj.ResultScene;
|
module sj.ResultScene;
|
||||||
|
|
||||||
import std.math;
|
import std.conv,
|
||||||
|
std.format,
|
||||||
|
std.math,
|
||||||
|
std.random;
|
||||||
|
|
||||||
import gl4d;
|
import gl4d;
|
||||||
|
|
||||||
@ -11,6 +14,8 @@ import sj.FontSet,
|
|||||||
sj.Music,
|
sj.Music,
|
||||||
sj.ProgramSet,
|
sj.ProgramSet,
|
||||||
sj.SceneInterface,
|
sj.SceneInterface,
|
||||||
|
sj.Text,
|
||||||
|
sj.TextProgram,
|
||||||
sj.TitleScene,
|
sj.TitleScene,
|
||||||
sj.util.Animation,
|
sj.util.Animation,
|
||||||
sj.util.Easing;
|
sj.util.Easing;
|
||||||
@ -25,19 +30,57 @@ class ResultScene : SceneInterface {
|
|||||||
enum CubeLoadingRotationSpeed = vec3(PI/100, PI/10, PI/100);
|
enum CubeLoadingRotationSpeed = vec3(PI/100, PI/10, PI/100);
|
||||||
///
|
///
|
||||||
enum CubeLoadingInterval = 0.06;
|
enum CubeLoadingInterval = 0.06;
|
||||||
|
///
|
||||||
|
enum BgLoadingInnerColor = vec4(0.4, 0.4, 0.4, 1);
|
||||||
|
///
|
||||||
|
enum BgLoadingOuterColor = vec4(-0.2, -0.2, -0.2, 1);
|
||||||
|
|
||||||
///
|
///
|
||||||
enum CubeRotationSpeed = vec3(PI/1000, PI/500, PI/1000);
|
enum CubeRotationSpeed = vec3(PI/1000, PI/500, PI/1000);
|
||||||
///
|
///
|
||||||
enum CubeInterval = 0.005;
|
enum CubeInterval = 0.005;
|
||||||
|
|
||||||
|
///
|
||||||
|
enum DescTextScale = vec3(-0.002, 0.002, 0.002);
|
||||||
|
///
|
||||||
|
enum DescTextTranslation = vec3(0, -0.3, 0);
|
||||||
|
///
|
||||||
|
enum DescTextColor = vec4(0.2, 0.2, 0.2, 1);
|
||||||
|
///
|
||||||
|
enum RankTextScale = vec3(-0.002, 0.002, 0.002);
|
||||||
|
///
|
||||||
|
enum RankTextTranslation = vec3(0, -0.5, 0);
|
||||||
|
///
|
||||||
|
enum ScoreTextScale = vec3(-0.002, 0.002, 0.002);
|
||||||
|
///
|
||||||
|
enum ScoreTextTranslation = vec3(0, -0.55, 0);
|
||||||
|
|
||||||
|
///
|
||||||
|
enum RankCalculationRatio = 10000;
|
||||||
|
|
||||||
///
|
///
|
||||||
this(LobbyWorld lobby, ProgramSet programs, FontSet fonts) {
|
this(LobbyWorld lobby, ProgramSet programs, FontSet fonts) {
|
||||||
lobby_ = lobby;
|
lobby_ = lobby;
|
||||||
programs_ = programs;
|
programs_ = programs;
|
||||||
fonts_ = fonts;
|
fonts_ = fonts;
|
||||||
|
|
||||||
|
description_text_ = new Text(programs.Get!TextProgram);
|
||||||
|
score_text_ = new Text(programs.Get!TextProgram);
|
||||||
|
rank_text_ = new Text(programs.Get!TextProgram);
|
||||||
|
|
||||||
|
with (description_text_) {
|
||||||
|
const w = LoadGlyphs(vec2i(256, 32),
|
||||||
|
"YOUR RANK", vec2i(16, 0), fonts_.gothic);
|
||||||
|
matrix.scale = DescTextScale;
|
||||||
|
matrix.translation =
|
||||||
|
DescTextTranslation + vec3(-w/2*matrix.scale.x, 0, 0);
|
||||||
|
color = DescTextColor;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
~this() {
|
~this() {
|
||||||
|
description_text_.destroy();
|
||||||
|
score_text_.destroy();
|
||||||
|
rank_text_.destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
///
|
///
|
||||||
@ -55,6 +98,26 @@ class ResultScene : SceneInterface {
|
|||||||
Easing!float(CubeLoadingInterval, CubeInterval);
|
Easing!float(CubeLoadingInterval, CubeInterval);
|
||||||
cube_rotation_speed_ease_ =
|
cube_rotation_speed_ease_ =
|
||||||
Easing!vec3(CubeLoadingRotationSpeed, CubeRotationSpeed);
|
Easing!vec3(CubeLoadingRotationSpeed, CubeRotationSpeed);
|
||||||
|
|
||||||
|
bg_inner_ease_ =
|
||||||
|
Easing!vec4(BgLoadingInnerColor, music_.preview.bg_inner_color);
|
||||||
|
bg_outer_ease_ =
|
||||||
|
Easing!vec4(BgLoadingOuterColor, music_.preview.bg_outer_color);
|
||||||
|
|
||||||
|
with (score_text_) {
|
||||||
|
auto w = LoadGlyphs(vec2i(512, 64),
|
||||||
|
"%d pt".format(score).to!dstring, vec2i(16, 0), fonts_.gothic);
|
||||||
|
matrix.scale = ScoreTextScale;
|
||||||
|
matrix.translation =
|
||||||
|
ScoreTextTranslation + vec3(-w/2 * matrix.scale.x, 0, 0);
|
||||||
|
}
|
||||||
|
with (rank_text_) {
|
||||||
|
auto w = LoadGlyphs(vec2i(512, 128),
|
||||||
|
GetRankLetter(score), vec2i(100, 0), fonts_.gothic);
|
||||||
|
matrix.scale = RankTextScale;
|
||||||
|
matrix.translation =
|
||||||
|
RankTextTranslation + vec3(-w/2 * matrix.scale.x, 0, 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
override SceneInterface Update(KeyInput input) {
|
override SceneInterface Update(KeyInput input) {
|
||||||
const ratio = anime_.Update();
|
const ratio = anime_.Update();
|
||||||
@ -62,6 +125,9 @@ class ResultScene : SceneInterface {
|
|||||||
with (lobby_) {
|
with (lobby_) {
|
||||||
cube_matrix.rotation += cube_rotation_speed_ease_.Calculate(ratio);
|
cube_matrix.rotation += cube_rotation_speed_ease_.Calculate(ratio);
|
||||||
cube_interval = cube_interval_ease_ .Calculate(ratio);
|
cube_interval = cube_interval_ease_ .Calculate(ratio);
|
||||||
|
|
||||||
|
background.inner_color = bg_inner_ease_.Calculate(ratio);
|
||||||
|
background.outer_color = bg_outer_ease_.Calculate(ratio);
|
||||||
}
|
}
|
||||||
if (anime_.isFinished && input.down) {
|
if (anime_.isFinished && input.down) {
|
||||||
title_scene_.Initialize();
|
title_scene_.Initialize();
|
||||||
@ -70,10 +136,25 @@ class ResultScene : SceneInterface {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
override void Draw() {
|
override void Draw() {
|
||||||
|
const ratio = anime_.ratio;
|
||||||
|
|
||||||
lobby_.Draw();
|
lobby_.Draw();
|
||||||
|
|
||||||
|
const view = lobby_.view.Create();
|
||||||
|
description_text_.Draw(lobby_.Projection, view);
|
||||||
|
rank_text_ .Draw(lobby_.Projection, view);
|
||||||
|
score_text_ .Draw(lobby_.Projection, view);
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
static dstring GetRankLetter(int score) {
|
||||||
|
const ratio = score*1f / RankCalculationRatio;
|
||||||
|
if (ratio < 0.60) return "D"d;
|
||||||
|
if (ratio < 0.80) return "B"d;
|
||||||
|
if (ratio < 0.95) return "A"d;
|
||||||
|
return "S";
|
||||||
|
}
|
||||||
|
|
||||||
TitleScene title_scene_;
|
TitleScene title_scene_;
|
||||||
|
|
||||||
LobbyWorld lobby_;
|
LobbyWorld lobby_;
|
||||||
@ -84,7 +165,15 @@ class ResultScene : SceneInterface {
|
|||||||
|
|
||||||
Music music_;
|
Music music_;
|
||||||
|
|
||||||
Animation anime_;
|
Text description_text_;
|
||||||
|
Text score_text_;
|
||||||
|
Text rank_text_;
|
||||||
|
|
||||||
|
Animation anime_;
|
||||||
|
|
||||||
Easing!vec3 cube_rotation_speed_ease_;
|
Easing!vec3 cube_rotation_speed_ease_;
|
||||||
Easing!float cube_interval_ease_;
|
Easing!float cube_interval_ease_;
|
||||||
|
|
||||||
|
Easing!vec4 bg_inner_ease_;
|
||||||
|
Easing!vec4 bg_outer_ease_;
|
||||||
}
|
}
|
||||||
|
@ -12,13 +12,18 @@ struct Animation {
|
|||||||
}
|
}
|
||||||
///
|
///
|
||||||
float Update() {
|
float Update() {
|
||||||
return (frame_++ * 1f / frame_count_).clamp(0f, 1f);
|
scope(exit) ++frame_;
|
||||||
|
return ratio;
|
||||||
}
|
}
|
||||||
///
|
///
|
||||||
@property bool isFinished() const {
|
@property bool isFinished() const {
|
||||||
return frame_ >= frame_count_;
|
return frame_ >= frame_count_;
|
||||||
}
|
}
|
||||||
///
|
///
|
||||||
|
@property float ratio() const {
|
||||||
|
return (frame_*1f / frame_count_).clamp(0f, 1f);
|
||||||
|
}
|
||||||
|
///
|
||||||
@property size_t frame() const {
|
@property size_t frame() const {
|
||||||
return frame_;
|
return frame_;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user