void Stalactite::active_update(float elapsed_time) { if(state == STALACTITE_HANGING) { auto player = get_nearest_player(); if (player && !player->get_ghost_mode()) { if(player->get_bbox().p2.x > bbox.p1.x - SHAKE_RANGE_X && player->get_bbox().p1.x < bbox.p2.x + SHAKE_RANGE_X && player->get_bbox().p2.y > bbox.p1.y && player->get_bbox().p1.y < bbox.p2.y + SHAKE_RANGE_Y && Sector::current()->can_see_player(bbox.get_middle())) { timer.start(SHAKE_TIME); state = STALACTITE_SHAKING; SoundManager::current()->play("sounds/cracking.wav", get_pos()); } } } else if(state == STALACTITE_SHAKING) { shake_delta = Vector(static_cast<float>(graphicsRandom.rand(-3, 3)), 0.0f); if(timer.check()) { state = STALACTITE_FALLING; physic.enable_gravity(true); set_colgroup_active(COLGROUP_MOVING); } } else if(state == STALACTITE_FALLING) { movement = physic.get_movement(elapsed_time); } }
CheatMenu::CheatMenu() { std::vector<Player*> players = Sector::get().get_players(); auto player = players.empty() ? nullptr : players[0]; add_label(_("Cheats")); add_hl(); add_entry(MNID_GROW, _("Bonus: Grow")); add_entry(MNID_FIRE, _("Bonus: Fire")); add_entry(MNID_ICE, _("Bonus: Ice")); add_entry(MNID_AIR, _("Bonus: Air")); add_entry(MNID_EARTH, _("Bonus: Earth")); add_entry(MNID_STAR, _("Bonus: Star")); add_entry(MNID_SHRINK, _("Shrink Tux")); add_entry(MNID_KILL, _("Kill Tux")); add_entry(MNID_FINISH, _("Finish Level")); add_entry(MNID_GHOST, (player != nullptr && player->get_ghost_mode()) ? _("Leave Ghost Mode") : _("Activate Ghost Mode")); add_hl(); add_back(_("Back")); }
void CheatMenu::menu_action(MenuItem& item) { if (Sector::current()) { std::vector<Player*> players = Sector::get().get_players(); auto player = players.empty() ? nullptr : players[0]; switch(item.id) { case MNID_GROW: if (player) { player->set_bonus(GROWUP_BONUS); } break; case MNID_FIRE: if (player) { player->set_bonus(FIRE_BONUS); } break; case MNID_ICE: if (player) { player->set_bonus(ICE_BONUS); } break; case MNID_AIR: if (player) { player->set_bonus(AIR_BONUS); } break; case MNID_EARTH: if (player) { player->set_bonus(EARTH_BONUS); } break; case MNID_STAR: if (player) { player->make_invincible(); } break; case MNID_SHRINK: if (player) { player->kill(false); } break; case MNID_KILL: if (player) { player->kill(true); } break; case MNID_FINISH: if (GameSession::current()) { GameSession::current()->finish(true); } break; case MNID_GHOST: if (GameSession::current() && player) { if(player->get_ghost_mode()) { scripting::mortal(); } else { scripting::ghost(); } } break; default: break; } } MenuManager::instance().clear_menu_stack(); }