/// License: MIT module sj.TitleScene; import std.math; import gl4d; import sj.AbstractScene, sj.KeyInput, sj.LobbyWorld, sj.ProgramSet, sj.SceneInterface, sj.TitleTextProgram; /// class TitleScene : AbstractScene { public: /// enum TitleMatrix = { auto m = mat4.identity; m.scale(0.8, 0.1, 0.1); m.translate(0, -0.3, 0); return m; }(); /// this(LobbyWorld lobby, ProgramSet program) { lobby_ = lobby; SetupLobby(lobby); title_ = program.Get!TitleTextProgram; } /// void SetupSceneDependency(SceneInterface next_scene) { next_scene_ = next_scene; } override void Update(KeyInput input) { lobby_.cube_matrix.rotation += vec3(PI/600, PI/600, PI/600); } override void Draw() { lobby_.Draw(); title_.Draw(lobby_.Projection, lobby_.view.Create(), TitleMatrix, frame_++); } private: static void SetupLobby(LobbyWorld lobby) { lobby.view.pos = vec3(0, -0.15, -1); lobby.view.target = vec3(0, -0.15, 0); lobby.view.up = vec3(0, 1, 0); lobby.background.inner_color = vec4(0.9, 0.9, 0.9, 1); lobby.background.outer_color = vec4(-0.1, -0.1, -0.1, 1); lobby.light_pos = vec3(0, 9, -1); lobby.cube_material.diffuse_color = vec3(0.1, 0.1, 0.1); lobby.cube_material.light_color = vec3(1, 0.8, 0.8); lobby.cube_material.light_power = vec3(100, 100, 100); lobby.cube_material.ambient_color = vec3(0.2, 0.2, 0.2); lobby.cube_material.specular_color = vec3(0.5, 0.2, 0.2); } SceneInterface next_scene_; LobbyWorld lobby_; TitleTextProgram title_; int frame_; }