kaliber/src/demo/demo.h

78 lines
1.4 KiB
C++

#ifndef DEMO_H
#define DEMO_H
#include "../base/closure.h"
#include "../engine/game.h"
#include "credits.h"
#include "enemy.h"
#include "hud.h"
#include "menu.h"
#include "player.h"
#include "sky_quad.h"
class Demo : public eng::Game {
public:
Demo() = default;
~Demo() override = default;
bool Initialize() override;
void Update(float delta_time) override;
void Draw(float frame_frac) override;
void ContextLost() override;
void LostFocus() override;
void GainedFocus() override;
void AddScore(int score);
void EnterMenuState();
void EnterCreditsState();
void EnterGameState();
Player& GetPlayer() { return player_; }
Enemy& GetEnemy() { return enemy_; }
int wave() { return wave_; }
private:
enum State { kState_Invalid = -1, kMenu, kGame, kCredits, kState_Max };
State state_ = kState_Invalid;
Player player_;
Enemy enemy_;
Hud hud_;
Menu menu_;
Credits credits_;
SkyQuad sky_;
int last_dominant_channel_ = -1;
int score_ = 0;
int add_score_ = 0;
int wave_ = 0;
int last_num_enemies_killed_ = -1;
int total_enemies_ = 0;
int waiting_for_next_wave_ = false;
float delayed_work_timer_ = 0;
base::Closure delayed_work_cb_;
void UpdateMenuState(float delta_time);
void UpdateGameState(float delta_time);
void Continue();
void StartNewGame();
void SetDelayedWork(float seconds, base::Closure cb);
};
#endif // DEMO_H