Example #1
0
void GameOverState::AdvanceFrame(int delta_time, int* next_state) {
  world_->entity_manager.UpdateComponents(delta_time);
  UpdateMainCamera(&main_camera_, world_);

  // Return to the title screen after any key is hit.
  static const corgi::WorldTime kMinTimeInEndState =
      static_cast<corgi::WorldTime>(8000.0f);
  const bool event_over =
      world_->patron_component.event_time() > kMinTimeInEndState;
  const bool pointer_button_pressed =
      input_system_->GetPointerButton(0).went_down();
  const bool exit_button_pressed =
      input_system_->GetButton(fplbase::FPLK_ESCAPE).went_down() ||
      input_system_->GetButton(fplbase::FPLK_AC_BACK).went_down();
  auto player = world_->player_component.begin()->entity;
  auto player_data =
      world_->entity_manager.GetComponentData<PlayerData>(player);
  const bool fire_button_pressed =
      player_data->input_controller()->Button(kFireProjectile).Value() &&
      player_data->input_controller()->Button(kFireProjectile).HasChanged();
  if (event_over &&
      (pointer_button_pressed || exit_button_pressed || fire_button_pressed)) {
    audio_engine_->PlaySound(sound_click_);

    // Stay in Cardboard unless the back button is pressed.
    *next_state = world_->is_in_cardboard() && !exit_button_pressed
                      ? kGameStateGameplay
                      : kGameStateGameMenu;
  }
}
Example #2
0
void IntroState::OnEnter(int /*previous_state*/) {
  world_->player_component.set_state(kPlayerState_Active);
  UpdateMainCamera(&main_camera_, world_);
#ifdef ANDROID_HMD
  input_system_->head_mounted_display_input().ResetHeadTracker();
#endif  // ANDROID_HMD
  // Move the player inside the intro box.
  auto player = world_->player_component.begin()->entity;
  auto player_transform =
      world_->entity_manager.GetComponentData<TransformData>(player);
  // TODO(proppy): get position of the introbox entity
  player_transform->position += mathfu::vec3(0, 0, 500);
  fade_timer_ = kFadeTimerPending;
  SetBoxVisibility(true);
  master_bus_.FadeTo(0.0f, kFadeWaitTime / 1000.0f);
}
Example #3
0
void GameplayState::OnEnter(int previous_state) {
  requested_state_ = kGameStateGameplay;
  world_->player_component.set_state(kPlayerState_Active);
  input_system_->SetRelativeMouseMode(true);
  UpdateMainCamera(&main_camera_, world_);

  // Assign textures for the onscreen controller.
  auto* onscreen_controller_ui = &world_->onscreen_controller_ui;
  auto* asset_manager = world_->asset_manager;
  onscreen_controller_ui->set_base_texture(
      asset_manager->FindTexture("textures/joystick_base.webp"));
  onscreen_controller_ui->set_top_texture(
      asset_manager->FindTexture("textures/joystick_tip.webp"));

  if (previous_state == kGameStatePause) {
    music_channel_lap_1_.Resume();
    music_channel_lap_2_.Resume();
    music_channel_lap_3_.Resume();
  } else {
    music_channel_lap_1_ =
        audio_engine_->PlaySound(music_gameplay_lap_1_, mathfu::kZeros3f, 1.0f);
    music_channel_lap_2_ =
        audio_engine_->PlaySound(music_gameplay_lap_2_, mathfu::kZeros3f, 0.0f);
    music_channel_lap_3_ =
        audio_engine_->PlaySound(music_gameplay_lap_3_, mathfu::kZeros3f, 0.0f);
  }

  if (world_->rendering_mode() == kRenderingStereoscopic) {
#if FPLBASE_ANDROID_VR
    world_->services_component.set_camera(&cardboard_camera_);
#endif
  } else {
    world_->services_component.set_camera(&main_camera_);
  }
#if FPLBASE_ANDROID_VR
  input_system_->head_mounted_display_input().ResetHeadTracker();
#endif  // FPLBASE_ANDROID_VR

  // Perform Analytics
  if (previous_state != kGameStatePause) {
    // Set the start time, so elapsed time can be tracked.
    world_->gameplay_start_time = input_system_->Time();
    firebase::analytics::LogEvent(kEventGameplayStart,
                                  kParameterControlScheme,
                                  AnalyticsControlValue(world_));
  }
}
Example #4
0
// Gameplay Screen Update logic
void UpdateGameplayScreen(void)
{
    
    if (IsKeyPressed('P')) 
    {
        pause = !pause;
        if (!pause) ResumeMusicStream();
        else PauseMusicStream();
    }
    
    if (!pause)
    {     
        if (!startGame && IsKeyPressed(KEY_SPACE)) 
        {
            startGame = TRUE;
            ResumeMusicStream();
        }
        // TODO: Update GAMEPLAY screen variables here!
        if (startGame)
        {
            UpdateMainCamera(&mainCamera);
            
            UpdateTrianglesPosition(mainCamera.position);
            UpdateTrianglesState();
            UpdatePlatformsPosition(mainCamera.position);
            UpdatePlatformsState();
            
            UpdatePlayer(&player);
        }
    }
    // Press enter to change to ENDING screen
    
    /*
    if (IsKeyPressed(KEY_ENTER) || !player.isAlive || mainCamera.position.x/CELL_SIZE>GRID_WIDTH+10)
    {
        finishScreen = 1;
    }
    */
    
    // WIN / LOSE Conditions
    if (!player.isAlive) GameplayEnd(1); // If player dies, reset gameplay screen
    else if (mainCamera.position.x/CELL_SIZE>GRID_WIDTH+20) GameplayEnd(2); // If player reaches the end level (+20 cells) game ends.   
    
    // MusicIsPlaying
    UpdateMusicStream();
}
Example #5
0
void IntroState::AdvanceFrame(int delta_time, int* next_state) {
  // Update components so that the player can throw sushi.
  world_->entity_manager.UpdateComponents(delta_time);
  // Update camera so that the player can look around.
  UpdateMainCamera(&main_camera_, world_);

  auto player = world_->player_component.begin()->entity;
  auto player_data =
      world_->entity_manager.GetComponentData<PlayerData>(player);

  // Start countdown timer before we fade to game.
  if (player_data->input_controller()->Button(kFireProjectile).Value() &&
      player_data->input_controller()->Button(kFireProjectile).HasChanged() &&
      fade_timer_ == kFadeTimerPending) {
    fade_timer_ = kFadeWaitTime;
  }

  // Fade to game.
  if (fade_timer_ <= 0) {
    fader_->Start(kIntroStateFadeTransitionDuration, mathfu::kZeros3f,
                  kFadeOutThenIn, vec3(-1.0f, 1.0f, 0.0f),
                  vec3(1.0f, -1.0f, 0.0f));
    fade_timer_ = kFadeTimerComplete;
  }

  // Update the fade timer, if it's active.
  if (fade_timer_ != kFadeTimerPending && fade_timer_ != kFadeTimerComplete) {
    fade_timer_ -= delta_time;
  }

  // Go back to menu.
  if (input_system_->GetButton(fplbase::FPLK_ESCAPE).went_down() ||
      input_system_->GetButton(fplbase::FPLK_AC_BACK).went_down()) {
    *next_state = kGameStateGameMenu;
  }

  if (fader_->AdvanceFrame(delta_time)) {
    SetBoxVisibility(false);
    // Enter the game.
    *next_state = kGameStateGameplay;
  }
}
Example #6
0
void GameplayState::AdvanceFrame(int delta_time, int* next_state) {
  // Update the world.
  world_->entity_manager.UpdateComponents(delta_time);
  UpdateMainCamera(&main_camera_, world_);
  UpdateMusic(&world_->entity_manager, &previous_lap_, &percent_, delta_time,
              &music_channel_lap_1_, &music_channel_lap_2_,
              &music_channel_lap_3_);

  if (input_system_->GetButton(fplbase::FPLK_F9).went_down()) {
    world_->draw_debug_physics = !world_->draw_debug_physics;
  }
  if (input_system_->GetButton(fplbase::FPLK_F8).went_down()) {
    world_->skip_rendermesh_rendering = !world_->skip_rendermesh_rendering;
  }

  // The state machine for the world may request a state change.
  *next_state = requested_state_;

  // Switch into scene lab if the keyboard requests.
  // Switch back to scene lab if we're single stepping.
  if (scene_lab_ && (input_system_->GetButton(fplbase::FPLK_F10).went_down() ||
                     input_system_->GetButton(fplbase::FPLK_1).went_down() ||
                     world_->is_single_stepping)) {
    if (!world_->is_single_stepping) {
      scene_lab::GenericCamera camera;
      camera.position = main_camera_.position();
      camera.facing = main_camera_.facing();
      camera.up = main_camera_.up();
      scene_lab_->SetInitialCamera(camera);
    }
    *next_state = kGameStateSceneLab;
    world_->is_single_stepping = false;
  }

  // Pause the game.
  if (input_system_->GetButton(fplbase::FPLK_ESCAPE).went_down() ||
      input_system_->GetButton(fplbase::FPLK_AC_BACK).went_down()) {
    audio_engine_->PlaySound(sound_pause_);
    *next_state = kGameStatePause;
  }
  fader_->AdvanceFrame(delta_time);
}
Example #7
0
void GameOverState::OnEnter(int /*previous_state*/) {
  world_->player_component.set_state(kPlayerState_NoProjectiles);
  UpdateMainCamera(&main_camera_, world_);

  // Stop the raft over the course of a few seconds.
  corgi::EntityRef raft = world_->services_component.raft_entity();
  RailDenizenData* raft_rail_denizen =
      world_->rail_denizen_component.GetComponentData(raft);
  raft_rail_denizen->SetPlaybackRate(0.0f, kTimeToStopRaft);

  // Trigger the end-game event.
  static const corgi::WorldTime kEndGameEventTime = 0;
  world_->patron_component.StartEvent(kEndGameEventTime);

  bool high_score = false;

#ifdef USING_GOOGLE_PLAY_GAMES
  if (gpg_manager_->LoggedIn()) {
    // Finished a game, post a score.
    auto player = world_->player_component.begin()->entity;
    auto attribute_data =
        world_->entity_manager.GetComponentData<AttributesData>(player);
    auto score = attribute_data->attributes[AttributeDef_PatronsFed];
    auto leaderboard_config = config_->gpg_config()->leaderboards();
    std::string leaderboard_id =
        leaderboard_config->LookupByKey(kGPGDefaultLeaderboard)->id()->c_str();

    // Check if we have a new high score.
    high_score = score > gpg_manager_->CurrentPlayerHighScore(leaderboard_id);

    // Submit score.
    gpg_manager_->SubmitScore(leaderboard_id, score);
  }
#endif

  if (high_score) {
    game_over_channel_ = audio_engine_->PlaySound(sound_high_score_);
  } else {
    game_over_channel_ = audio_engine_->PlaySound(sound_game_over_);
  }
}