int collusion_chk() { if (pebcolusion() == true) { if (red->has_been_eaten == true) red->has_been_eaten = false; if (pink->has_been_eaten == true) pink->has_been_eaten = false; if (blue->has_been_eaten == true) blue->has_been_eaten = false; if (orange->has_been_eaten == true) orange->has_been_eaten = false; red->turn(); pink->turn(); blue->turn(); orange->turn(); blue->is_eatable = true; orange->is_eatable = true; pacman->super=true; } red->chgetmer(); pink->chgetmer(); blue->chgetmer(); orange->chgetmer(); if (pacman->died == true) { die_pause = 3000.f; change_game_state(DIE_PAUSE); } if (red->chkifeaten() == true) { die_pause = 1000.f; change_game_state(DIE_PAUSE); } if (pink->chkifeaten() == true) { die_pause = 1000.f; change_game_state(DIE_PAUSE); } if (blue->chkifeaten() == true) { die_pause = 1000.f; change_game_state(DIE_PAUSE); } if (orange->chkifeaten() == true) { die_pause = 1000.f; change_game_state(DIE_PAUSE); } return 0; }
void main_game::load_level(std::uint32_t index) { ship_sys.events.register_handler("ship_destroyed", this, [&](event_hash, any&) { screen_shake.set_amplitude(5.f); }); change_game_state(game_state::loading); }
int intro_music_pause() { if (music_pause.is_started()== false) { music_pause.start(); } if (music_pause.get_ticks() > 3000.f) { change_game_state(PLAY); } return 0; }
int game_ini() { if (plyrtmer.is_started() == true) { print("PLAYER",100,95); } if (plyrtmer.get_ticks() > 2500.f) { plyrtmer.stop(); pacman->setxy(115,190); red->setxy(114,95); pink->setxy(114,119); blue->setxy(98,119); orange->setxy(130,119); blue->speed = 75; red->speed = 60; pink->speed = 75; orange->speed = 75; d_frame=5; blue->doanime = true; red->doanime = true; pink->doanime = true; orange->doanime = true; blue->boxmovement = 1; red->boxmovement = 1; pink->boxmovement = 1; orange->boxmovement = 1; red->is_out_of_box = true; pink->is_out_of_box = false; blue->is_out_of_box = false; orange->is_out_of_box = false; GhostSwitchMode.start(); } if (plyrtmer.is_started() == false) { pacman->show_frame(image,0,0); red->show_frame(image,0,0); blue->show_frame(image,0,0); orange->show_frame(image,0,0); pink->change_sprite(LOOK_UP); pink->show_frame(image,pink->sprt2use,pink->frame); blue->change_sprite(LOOK_DWN); blue->show_frame(image,blue->sprt2use,blue->frame); orange->change_sprite(LOOK_UP); orange->show_frame(image,orange->sprt2use,orange->frame); } if (redytmer.get_ticks() > 2*2300.f) { clroclst(*red); clroclst(*pink); clroclst(*blue); clroclst(*orange); redytmer.stop(); pacman->died = false; curtimg = image; sprnum=0; pacman->frame=0; change_game_state(PLAY); } if (redytmer.is_started() == true) { print("READY!",100,142); } return 0; }
void main_game::run(float dt) { game_base::run(dt); // world position for interactions world_mouse_pos = camera.viewport_to_world(mouse->position, screen_rect); nebular_background->run(camera); current_level->run(dt); if (state == game_state::game_base) { bullet_particle_system.upload(dt, screen_rect); sparks_particle_system.upload(dt, screen_rect); ship_sys.run(dt, screen_rect); ship_sys.calc_screen_pos(camera, screen_rect); background_dust->run(camera, screen_rect); waypoint_visualizer->run(); trails_renderer->run(camera); if (ship_sys.size() > 0) { auto button_container = (ui::ui_container*)ui.named_elements["ship_button_container"]; uint32_t current_button_count = 0; for (auto button_it = button_container->begin(); button_it != button_container->end(); ++button_it) { current_button_count++; } if (current_button_count < ship_sys.size()) { for (uint32_t i = 0; i < ship_sys.size() - current_button_count; ++i) { auto new_selection_button = new ship_selection_button(button_container); } } auto current_button = (ship_selection_button*)*button_container->begin(); for (auto ship_it = ship_sys.begin(); ship_it != ship_sys.end(); ++ship_it) { auto screen_pos = (*ship_it)->screen_position; current_button->set_margin_left(floor(screen_pos.x - 8.f)); current_button->set_margin_top(floor(screen_pos.y - 8.f)); if ((*ship_it)->team == 0) { if (exists_in(teams[0].selected_ships, *ship_it)) { current_button->set_selection_state(ship_selection_button_state::selected); } else { current_button->set_selection_state(ship_selection_button_state::player); } } else { current_button->set_selection_state(ship_selection_button_state::enemy); } current_button->assc_ship = *ship_it; current_button->mouse_button_released(ui::get_ui_handler(&main_game::ship_selection_button_mouse_released, this)); current_button = (ship_selection_button*)current_button->get_next_leaf(); } while (current_button) { current_button->set_visibility(false); current_button = (ship_selection_button*)current_button->get_next_leaf(); } button_container->arrange_layout(viewport); } // camera movements if (mouse->wheel_y > 0) { camera.zoom_in(dt); } if (mouse->wheel_y < 0) { camera.zoom_out(dt); } if (mouse->is_down(mouse_buttons::middle)) { camera.move(mouse->delta.reflect_y()); } if (mouse->was_pressed(mouse_buttons::left)) { // enabled selection rect if (!ui.render_context.is_drawn_pixel(world_mouse_pos)) { selection_anchor = world_mouse_pos; is_selection_active = true; selection_renderer->show(); } } if (is_selection_active) { if (!ui.render_context.is_drawn_pixel(world_mouse_pos)) { teams[0].previous_selected_ships.clear(); teams[0].selected_ships.swap(teams[0].previous_selected_ships); // create selection rect selection_rect.position.x = min(selection_anchor.x, world_mouse_pos.x); selection_rect.position.y = min(selection_anchor.y, world_mouse_pos.y); selection_rect.size.width = abs(selection_anchor.x - world_mouse_pos.x); selection_rect.size.height = abs(selection_anchor.y - world_mouse_pos.y); selection_renderer->set_rect(selection_rect); // find ships inside selection rect rect ship_rect; for (auto& current_ship : teams[0].ships) { ship_rect.position.x = current_ship->transform.position.x - current_ship->dimension.size.width * 0.5f; ship_rect.position.y = current_ship->transform.position.y - current_ship->dimension.size.height * 0.5f; ship_rect.size.width = current_ship->dimension.size.width; ship_rect.size.height = current_ship->dimension.size.height; if (selection_rect.intersects(ship_rect)) { teams[0].selected_ships.push_back(current_ship); } } // check if some ship was selected for (auto selected_ship : teams[0].selected_ships) { if (!exists_in(teams[0].previous_selected_ships, selected_ship)) { selected_ship->select(); } } // check if some ship was unselected for (auto prev_selected_ship : teams[0].previous_selected_ships) { if (!exists_in(teams[0].selected_ships, prev_selected_ship)) { prev_selected_ship->unselect(); } } } } if (mouse->was_released(mouse_buttons::left)) { // disabled selection rect is_selection_active = false; selection_renderer->hide(); } if (mouse->was_pressed(mouse_buttons::right)) { if (ui.is_drawn_pixel(mouse->position)) { } else { // order selected ships to fly to mouse position waypoint new_waypoint; new_waypoint.type = waypoint_type::fly_to_position; new_waypoint.position_target = world_mouse_pos; add_waypoint_to_selection(new_waypoint); } } // damp screen shake amplitude screen_shake.set_amplitude(screen_shake.get_amplitude() * exp(-4.0f * dt)); } if (state == game_state::loading) { if (!loader.is_finished()) { ((ui_label*)ui.named_elements["loading_label"])->set_text(std::to_string((int)(loader.get_progress() * 100.f))); loader.load(hub, 10.f); loading_squares->run(loader.get_progress()); } else { change_game_state(game_state::game_base); } } }