[add] Added SelectScene.

This commit is contained in:
falsycat 2019-10-12 00:00:00 +00:00
parent 3f05669fbd
commit d3b02a184f
5 changed files with 72 additions and 2 deletions

BIN
res/sounds/spotlight.wav Normal file

Binary file not shown.

View File

@ -17,6 +17,7 @@ class AbstractScene : SceneInterface {
}
override SceneInterface TakeNextScene() {
scope(exit) next_ = null;
return next_;
}

View File

@ -5,6 +5,7 @@ import sj.AbstractGame,
sj.FontSet,
sj.LobbyWorld,
sj.ProgramSet,
sj.SelectScene,
sj.TitleScene;
///
@ -18,7 +19,10 @@ class Game : AbstractGame {
lobby_ = new LobbyWorld(programs_);
title_ = new TitleScene(lobby_, programs_);
title_.SetupSceneDependency(title_); // TODO: specify proper next scene
select_ = new SelectScene(lobby_, programs_);
title_.SetupSceneDependency(select_);
select_.SetupSceneDependency(title_);
super(title_);
}
@ -40,4 +44,6 @@ class Game : AbstractGame {
LobbyWorld lobby_;
TitleScene title_;
SelectScene select_;
}

61
src/sj/SelectScene.d Normal file
View File

@ -0,0 +1,61 @@
/// License: MIT
module sj.SelectScene;
import derelict.sfml2.audio;
import sj.AbstractScene,
sj.KeyInput,
sj.LobbyWorld,
sj.ProgramSet,
sj.SceneInterface;
///
class SelectScene : AbstractScene {
public:
///
enum SpotlightSound = cast(ubyte[]) import("sounds/spotlight.wav");
///
this(LobbyWorld lobby, ProgramSet program) {
lobby_ = lobby;
const buf = SpotlightSound;
spotlight_buffer_ = sfSoundBuffer_createFromMemory(buf.ptr, buf.length);
sound_ = sfSound_create();
first_ = true;
}
~this() {
sfSound_destroy(sound_);
sfSoundBuffer_destroy(spotlight_buffer_);
}
///
void SetupSceneDependency(SceneInterface title_scene) {
title_scene_ = title_scene;
}
override void Update(KeyInput input) {
if (first_) {
sfSound_setBuffer(sound_, spotlight_buffer_);
sfSound_play(sound_);
}
first_ = false;
if (input.up) GoNextScene(title_scene_);
}
override void Draw() {
lobby_.Draw();
}
private:
SceneInterface title_scene_;
LobbyWorld lobby_;
sfSoundBuffer* spotlight_buffer_;
sfSound* sound_;
bool first_;
}

View File

@ -38,6 +38,8 @@ class TitleScene : AbstractScene {
override void Update(KeyInput input) {
lobby_.cube_matrix.rotation += vec3(PI/600, PI/600, PI/600);
if (input.down) GoNextScene(next_scene_);
}
override void Draw() {
lobby_.Draw();