//----------------------------------------------------------------------------- void SoccerWorld::onCheckGoalTriggered(bool first_goal) { if (isRaceOver() || isStartPhase()) return; setPhase(WorldStatus::GOAL_PHASE); m_goal_sound->play(); if (m_ball_hitter != -1) { if (UserConfigParams::m_arena_ai_stats) { const int elapsed_frame = m_goal_frame.empty() ? 0 : std::accumulate(m_goal_frame.begin(), m_goal_frame.end(), 0); m_goal_frame.push_back(m_frame_count - elapsed_frame); } ScorerData sd; sd.m_id = m_ball_hitter; sd.m_correct_goal = isCorrectGoal(m_ball_hitter, first_goal); if (sd.m_correct_goal) { m_karts[m_ball_hitter]->getKartModel() ->setAnimation(KartModel::AF_WIN_START, true/* play_non_loop*/); } else if (!sd.m_correct_goal) { m_karts[m_ball_hitter]->getKartModel() ->setAnimation(KartModel::AF_LOSE_START, true/* play_non_loop*/); } if (first_goal) { // Notice: true first_goal means it's blue goal being shoot, // so red team can score m_red_scorers.push_back(sd); if (race_manager->hasTimeTarget()) { m_red_score_times.push_back(race_manager->getTimeTarget() - getTime()); } else m_red_score_times.push_back(getTime()); } else { m_blue_scorers.push_back(sd); if (race_manager->hasTimeTarget()) { m_blue_score_times.push_back(race_manager->getTimeTarget() - getTime()); } else m_blue_score_times.push_back(getTime()); } } m_ball->reset(); } // onCheckGoalTriggered
//----------------------------------------------------------------------------- void SoccerWorld::onCheckGoalTriggered(bool first_goal) { if (isRaceOver() || isStartPhase()) return; setPhase(WorldStatus::GOAL_PHASE); m_goal_sound->play(); if (m_ball_hitter != -1) { ScorerData sd; sd.m_id = m_ball_hitter; sd.m_correct_goal = isCorrectGoal(m_ball_hitter, first_goal); if (sd.m_correct_goal) { m_karts[m_ball_hitter]->getKartModel() ->setAnimation(KartModel::AF_WIN_START, true/* play_non_loop*/); } else if (!sd.m_correct_goal) { m_karts[m_ball_hitter]->getKartModel() ->setAnimation(KartModel::AF_LOSE_START, true/* play_non_loop*/); } if (first_goal) { // Notice: true first_goal means it's blue goal being shoot, // so red team can score m_red_scorers.push_back(sd); if (race_manager->hasTimeTarget()) { m_red_score_times.push_back(race_manager->getTimeTarget() - getTime()); } else m_red_score_times.push_back(getTime()); } else { m_blue_scorers.push_back(sd); if (race_manager->hasTimeTarget()) { m_blue_score_times.push_back(race_manager->getTimeTarget() - getTime()); } else m_blue_score_times.push_back(getTime()); } } m_ball->reset(); } // onCheckGoalTriggered
//----------------------------------------------------------------------------- void SoccerWorld::onCheckGoalTriggered(bool first_goal) { if (isRaceOver() || isStartPhase()) return; if (m_can_score_points) { (first_goal ? m_red_goal++ : m_blue_goal++); World *world = World::getWorld(); world->setPhase(WorldStatus::GOAL_PHASE); m_goal_sound->play(); if (m_ball_hitter != -1) { ScorerData sd; sd.m_id = m_ball_hitter; sd.m_correct_goal = isCorrectGoal(m_ball_hitter, first_goal); if (sd.m_correct_goal) { m_karts[m_ball_hitter]->getKartModel() ->setAnimation(KartModel::AF_WIN_START, true/* play_non_loop*/); } else if (!sd.m_correct_goal) { m_karts[m_ball_hitter]->getKartModel() ->setAnimation(KartModel::AF_LOSE_START, true/* play_non_loop*/); } if (first_goal) { // Notice: true first_goal means it's blue goal being shoot, // so red team can score m_red_scorers.push_back(sd); if(race_manager->hasTimeTarget()) { m_red_score_times.push_back(race_manager ->getTimeTarget() - world->getTime()); } else m_red_score_times.push_back(world->getTime()); } else { m_blue_scorers.push_back(sd); if (race_manager->hasTimeTarget()) { m_blue_score_times.push_back(race_manager ->getTimeTarget() - world->getTime()); } else m_blue_score_times.push_back(world->getTime()); } } } resetBall(); //Resetting the ball triggers the goal check line one more time. //This ensures that only one goal is counted, and the second is ignored. m_can_score_points = !m_can_score_points; } // onCheckGoalTriggered