Skip to content
Snippets Groups Projects
Commit d35044b4 authored by Tomas Vybiral's avatar Tomas Vybiral
Browse files

function spliting

parent 25e62e3b
No related branches found
No related tags found
No related merge requests found
......@@ -30,15 +30,19 @@ game::game(uint32_t fps):current_state(),
spdlog::get("game")->debug("Fps set to: {} and delta_time set to: {}", fps, delta_time);
spdlog::get("game")->info("Finished game component initialization.");
 
spdlog::get("game")->info("Loading levels");
level::create().from_file("levels/01.txt");
level::create().with_enemy_at({320, 120}).with_enemy_at({160, 240}).with_enemy_at({480, 360}).save_as("level_01");
load_levels();
 
level first_level = std::move(level::get("start"));
current_state.enemies = first_level.enemies;
current_state.next_level_id = first_level.next_level_id;
}
 
void game::load_levels() {
spdlog::get("game")->info("Loading levels");
level::create().from_file("levels/01.txt");
level::create().with_enemy_at({320, 120}).with_enemy_at({160, 240}).with_enemy_at({480, 360}).save_as("level_01");
}
game::~game() {
spdlog::get("game")->debug("Deleting allocated resources");
if (!input_processor)
......@@ -87,51 +91,55 @@ void game::process_events() {
while(input_processor->has_events()) {
event& e = input_processor->get_next_event();
// FIXME: use visit
do_event<quit_game>(e, [&](auto&) { is_running = false; });
do_event<change_player_angle>(e, [&](const auto& cpa){
player_angle_delta += cpa.delta;
player_angle_delta = min(change_player_angle::DEFAULT,
max(-change_player_angle::DEFAULT,
player_angle_delta));
});
do_event<change_player_force>(e, [&](const auto& cpf){
player_force_delta += cpf.delta;
player_force_delta = min(change_player_force::DEFAULT,
max(-change_player_force::DEFAULT,
player_force_delta));
});
do_event<change_move_vector>(e, [&](const auto& cmv) {
player_position_delta += cmv.delta; // FIXME: Use ranged value here;
player_position_delta = min(change_move_vector::DEFAULT,
max(-change_move_vector::DEFAULT,
player_position_delta));
});
do_event<push_state>(e, [&](auto&) {
if (debug)
current_state.push();
});
do_event<pop_state>(e, [&](auto&) {
if (state::can_pop())
current_state = std::move(state::pop());
});
do_event<shoot_event>(e, [&](auto&) {shoot = true;});
do_event<switch_controller>(e, [&](const auto& sc) {
if (shoot_control->can_switch()) {
delete shoot_control;
switch(sc.mode) {
case shooting_mode::SINGLE:
shoot_control = new single_shot();
break;
case shooting_mode::MULTIPLE:
shoot_control = new multi_shot();
break;
}
}
});
do_event<switch_debug>(e, [&](auto&) {debug = !debug;});
process_event(e);
}
}
 
void game::process_event(const event& e) {
do_event<quit_game>(e, [&](auto&) { is_running = false; });
do_event<change_player_angle>(e, [&](const auto& cpa){
player_angle_delta += cpa.delta;
player_angle_delta = min(change_player_angle::DEFAULT,
max(-change_player_angle::DEFAULT,
player_angle_delta));
});
do_event<change_player_force>(e, [&](const auto& cpf){
player_force_delta += cpf.delta;
player_force_delta = min(change_player_force::DEFAULT,
max(-change_player_force::DEFAULT,
player_force_delta));
});
do_event<change_move_vector>(e, [&](const auto& cmv) {
player_position_delta += cmv.delta; // FIXME: Use ranged value here;
player_position_delta = min(change_move_vector::DEFAULT,
max(-change_move_vector::DEFAULT,
player_position_delta));
});
do_event<push_state>(e, [&](auto&) {
if (debug)
current_state.push();
});
do_event<pop_state>(e, [&](auto&) {
if (state::can_pop())
current_state = std::move(state::pop());
});
do_event<shoot_event>(e, [&](auto&) {shoot = true;});
do_event<switch_controller>(e, [&](const auto& sc) {
if (shoot_control->can_switch()) {
delete shoot_control;
switch(sc.mode) {
case shooting_mode::SINGLE:
shoot_control = new single_shot();
break;
case shooting_mode::MULTIPLE:
shoot_control = new multi_shot();
break;
}
}
});
do_event<switch_debug>(e, [&](auto&) {debug = !debug;});
}
template<typename T>
void game::do_event(const event& e, const std::function<void(const T&)>& trigger) {
auto ptr = std::get_if<T>(&e);
......@@ -160,7 +168,11 @@ void game::update_state() {
shoot_control->update_timer(delta_time);
shoot = false;
 
// Update projectiles TODO: own function
move_and_test_collisions();
}
void game::move_and_test_collisions() { // TODO: Replace with real physics
// Update projectiles
for (int i = static_cast<int>(current_state.projectiles.size()) - 1; i >= 0 ; --i) {
auto& proj = current_state.projectiles[static_cast<size_t>(i)];
// Is projectile out of window bounds
......
......@@ -20,9 +20,13 @@ public:
~game();
/// Runs basic game loop
void run_loop();
/// Loads all levels
static void load_levels();
protected:
/// Processes polled events
void process_events();
/// Processes singular event
void process_event(const event& e);
/// Updates state
void update_state();
/// Renders current state
......@@ -32,6 +36,8 @@ protected:
void do_event(const event& event, const std::function<void(const T&)>& trigger);
/// Tries to load next level. Returns true if can't load any new levels.
bool try_to_switch_level();
/// Moves projectiles and tests them for collisions
void move_and_test_collisions();
 
/// Current game state
state current_state;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment