SuperTuxKart
|
An implementation of WorldWithRank, to provide the soccer game mode Notice: In soccer world, true goal means blue, false means red. More...
#include <soccer_world.hpp>
Classes | |
class | KartDistanceMap |
struct | ScorerData |
Public Member Functions | |
SoccerWorld () | |
Constructor. | |
virtual | ~SoccerWorld () |
The destructor frees all data structures. | |
virtual void | init () OVERRIDE |
Initializes the soccer world. | |
virtual void | onGo () OVERRIDE |
Called when 'go' is being displayed for the first time. | |
virtual bool | isRaceOver () OVERRIDE |
The soccer game is over if time up or either team wins. | |
virtual void | countdownReachedZero () OVERRIDE |
Called when the match time ends. | |
virtual void | terminateRace () OVERRIDE |
Called at the end of a race. | |
virtual void | reset (bool restart=false) OVERRIDE |
Called when a soccer game is restarted. | |
virtual unsigned int | getRescuePositionIndex (AbstractKart *kart) OVERRIDE |
Determines the rescue position for a kart. | |
virtual btTransform | getRescueTransform (unsigned int rescue_pos) const OVERRIDE |
Returns the bullet transformation for the specified rescue index. | |
virtual bool | useFastMusicNearEnd () const OVERRIDE |
Returns if this mode should use fast music (if available). | |
virtual void | getKartsDisplayInfo (std::vector< RaceGUIBase::KartIconDisplayInfo > *info) OVERRIDE |
Returns the data to display in the race gui. | |
virtual bool | raceHasLaps () OVERRIDE |
Called when it is needed to know whether this kind of race involves counting laps. | |
virtual void | enterRaceOverState () OVERRIDE |
Called when the race is finished, but it still leaves some time for an end of race animation, and potentially let some more AI karts finish the race. | |
virtual const std::string & | getIdent () const OVERRIDE |
Returns the internal identifier for this race. | |
virtual void | update (int ticks) OVERRIDE |
Update the world and the track. | |
bool | shouldDrawTimer () const OVERRIDE |
The code that draws the timer should call this first to know whether the game mode wants a timer drawn. | |
void | onCheckGoalTriggered (bool first_goal) |
void | setBallHitter (unsigned int kart_id) |
Sets the last kart that hit the ball, to be able to identify the scorer later. | |
bool | getKartSoccerResult (unsigned int kart_id) const |
Get the soccer result of kart in soccer world (including AIs) | |
int | getScore (KartTeam team) const |
const std::vector< ScorerData > & | getScorers (KartTeam team) const |
int | getBallNode () const |
const Vec3 & | getBallPosition () const |
bool | ballNotMoving () const |
float | getBallHeading () const |
float | getBallDiameter () const |
bool | ballApproachingGoal (KartTeam team) const |
Vec3 | getBallAimPosition (KartTeam team, bool reverse=false) const |
bool | isCorrectGoal (unsigned int kart_id, bool first_goal) const |
int | getBallChaser (KartTeam team) const |
int | getAttacker (KartTeam team) const |
Get the AI who will attack the other team ball chaser. | |
void | handlePlayerGoalFromServer (const NetworkString &ns) |
void | handleResetBallFromServer (const NetworkString &ns) |
virtual bool | hasTeam () const OVERRIDE |
virtual std::pair< uint32_t, uint32_t > | getGameStartedProgress () const OVERRIDE |
Used by server to get the current started game progress in either or both remaining time or progress in percent. | |
virtual void | saveCompleteState (BareNetworkString *bns, STKPeer *peer) OVERRIDE |
virtual void | restoreCompleteState (const BareNetworkString &b) OVERRIDE |
virtual bool | isGoalPhase () const OVERRIDE |
AbstractKart * | getKartAtDrawingPosition (unsigned int p) const OVERRIDE |
Returns the kart at which position (start from 1) to draw race icon. | |
TrackObject * | getBall () const |
Public Member Functions inherited from WorldWithRank | |
virtual void | init () OVERRIDE |
call just after instanciating. | |
virtual void | reset (bool restart=false) OVERRIDE |
This function is called before a race is started (i.e. | |
bool | displayRank () const |
void | beginSetKartPositions () |
This function must be called before starting to set all kart positions again. | |
bool | setKartPosition (unsigned int kart_id, unsigned int position) |
Sets the position of a kart. | |
void | endSetKartPositions () |
Called once the last position was set. | |
AbstractKart * | getKartAtPosition (unsigned int p) const |
Returns the kart with a given position. | |
virtual AbstractKart * | getKartAtDrawingPosition (unsigned int p) const |
Returns the kart at which position (start from 1) to draw race icon. | |
virtual int | getScoreForPosition (int p) |
Returns the number of points for a kart at a specified position. | |
virtual unsigned int | getRescuePositionIndex (AbstractKart *kart) OVERRIDE |
Determines the rescue position for a kart. | |
TrackSector * | getTrackSector (unsigned int kart_index) const |
Returns the track_sector object for the specified kart. | |
bool | isOnRoad (unsigned int kart_index) const |
Returns true if the kart is on a valid graph quad. | |
int | getSectorForKart (const AbstractKart *kart) const |
Gets the sector a kart is on. | |
Public Member Functions inherited from World | |
World () | |
The main world class is used to handle the track and the karts. | |
virtual const std::string & | getIdent () const =0 |
Each game mode should have a unique identifier. | |
virtual unsigned int | getNumberOfRescuePositions () const |
Returns the number of rescue positions on a given track and game mode. | |
virtual unsigned int | getRescuePositionIndex (AbstractKart *kart)=0 |
Determines the rescue position index of the specified kart. | |
virtual btTransform | getRescueTransform (unsigned int index) const |
Returns the bullet transformation for the specified rescue index. | |
virtual void | moveKartAfterRescue (AbstractKart *kart) |
Places a kart that is rescued. | |
virtual bool | raceHasLaps ()=0 |
Called when it is needed to know whether this kind of race involves counting laps. | |
virtual bool | showLapsTarget () |
If true lap counter shows lap count in format: 4/20 or if false then in format: 4. | |
virtual int | getFinishedLapsOfKart (unsigned int kart_index) const |
Returns the number of laps for a given kart. | |
virtual void | getKartsDisplayInfo (std::vector< RaceGUIBase::KartIconDisplayInfo > *info)=0 |
Called by the code that draws the list of karts on the race GUI to know what needs to be drawn in the current mode. | |
virtual void | init () |
This function is called after instanciating. | |
virtual void | updateGraphics (float dt) |
This updates all only graphical elements. | |
virtual void | terminateRace () OVERRIDE |
Called at the end of a race. | |
virtual void | reset (bool restart=false) OVERRIDE |
This function is called before a race is started (i.e. | |
virtual void | pause (Phase phase) OVERRIDE |
Pauses the music (and then pauses WorldStatus). | |
virtual void | unpause () OVERRIDE |
Switches back from a pause state to the previous state. | |
virtual void | getDefaultCollectibles (int *collectible_type, int *amount) |
Called to determine the default collectibles to give each player at the start for this kind of race. | |
virtual void | collectedItem (const AbstractKart *kart, const ItemState *item) |
Receives notification if an item is collected. | |
virtual void | endRaceEarly () |
virtual bool | hasRaceEndedEarly () const |
virtual bool | haveBonusBoxes () |
Called to determine whether this race mode uses bonus boxes. | |
virtual bool | useFastMusicNearEnd () const |
Returns if this mode should use fast music (if available). | |
virtual void | kartAdded (AbstractKart *kart, scene::ISceneNode *node) |
If you want to do something to karts or their graphics at the start of the race, override this. | |
virtual void | newLap (unsigned int kart_index) |
Called whenever a kart starts a new lap. | |
virtual bool | kartHit (int kart_id, int hitter=-1) |
Called when a kart was hit by a projectile. | |
virtual void | onMouseClick (int x, int y) |
Highscores * | getHighscores () const |
Highscores * | getGPHighscores () const |
void | schedulePause (Phase phase) |
void | scheduleUnpause () |
void | scheduleExitRace () |
void | scheduleTutorial () |
void | updateWorld (int ticks) |
This is the main interface to update the world. | |
void | handleExplosion (const Vec3 &xyz, AbstractKart *kart_hit, PhysicalObject *object) |
AbstractKart * | getPlayerKart (unsigned int player) const |
Returns the n-th player kart. | |
AbstractKart * | getLocalPlayerKart (unsigned int n) const |
Returns the nth local player kart, i.e. | |
virtual const btTransform & | getStartTransform (int index) |
Returns the start coordinates for a kart with a given index. | |
void | moveKartTo (AbstractKart *kart, const btTransform &t) |
Places the kart at a given position and rotation. | |
void | updateTimeTargetSound () |
RaceGUIBase * | getRaceGUI () const |
Returns a pointer to the race gui. | |
unsigned int | getNumKarts () const |
Returns the number of karts in the race. | |
AbstractKart * | getKart (int kartId) const |
Returns the kart with a given world id. | |
const KartList & | getKarts () const |
Returns all karts. | |
unsigned int | getCurrentNumKarts () const |
Returns the number of currently active (i.e.non-elikminated) karts. | |
unsigned int | getCurrentNumPlayers () const |
Returns the number of currently active (i.e. | |
void | resetElimination () |
virtual void | addReservedKart (int kart_id) |
virtual void | saveCompleteState (BareNetworkString *bns, STKPeer *peer) |
virtual void | restoreCompleteState (const BareNetworkString &buffer) |
virtual bool | shouldDrawTimer () const |
The code that draws the timer should call this first to know whether the game mode wants a timer drawn. | |
bool | useHighScores () const |
virtual void | onFirePressed (Controller *who) |
Override if you want to know when a kart presses fire. | |
virtual bool | useChecklineRequirements () const |
Whether to compute checkline requirements for each world on the quadgraph. | |
virtual void | escapePressed () |
virtual void | loadCustomModels () |
void | eliminateKart (int kart_number, bool notify_of_elimination=true) |
Remove (eliminate) a kart from the race. | |
void | setUnfairTeam (bool val) |
virtual bool | hasTeam () const |
KartTeam | getKartTeam (unsigned int kart_id) const |
Get the team of kart in world (including AIs) | |
int | getTeamNum (KartTeam team) const |
void | setNetworkWorld (bool is_networked) |
Set the network mode (true if networked) | |
bool | isNetworkWorld () const |
void | initTeamArrows (AbstractKart *k) |
Set the team arrow on karts if necessary. | |
virtual std::pair< uint32_t, uint32_t > | getGameStartedProgress () const |
Used by server to get the current started game progress in either or both remaining time or progress in percent. | |
virtual bool | isGoalPhase () const |
Public Member Functions inherited from WorldStatus | |
virtual | ~WorldStatus () |
Destructor of WorldStatus. | |
virtual void | reset (bool restart) |
Resets all status information, used when starting a new race. | |
virtual void | updateTime (int ticks) |
Updates the world time and clock (which might be running backwards), and all status information, called once per frame at the end of the main loop. | |
virtual void | update (int ticks) |
Update, called once per frame. | |
void | startReadySetGo () |
virtual void | pause (Phase phase) |
Pauses the game and switches to the specified phase. | |
virtual void | unpause () |
Switches back from a pause state to the previous state. | |
virtual void | enterRaceOverState () |
Called when the race is finished, but it still leaves some time for an end of race animation, and potentially let some more AI karts finish the race. | |
virtual void | terminateRace () |
Called when it's really over (delay over if any). | |
void | setTime (const float time) |
Sets the time for the clock. | |
void | setTicks (int ticks) |
Sets a new time for the world time, measured in ticks. | |
void | setTicksForRewind (int ticks) |
Sets a new time for the world time (used by rewind), measured in ticks. | |
bool | isStartPhase () const |
bool | isRacePhase () const |
bool | isActiveRacePhase () const |
bool | isFinishPhase () const |
While the race menu is being displayed, m_phase is limbo, and m_previous_phase is finish. | |
const Phase | getPhase () const |
Returns the current race phase. | |
void | setPhase (Phase phase) |
Sets the current race phase. | |
void | setClockMode (const ClockType mode, const float initial_time=0.0f) |
Call to specify what kind of clock you want. | |
int | getClockMode () const |
Returns the current clock mode. | |
float | getTime () const |
Returns the current race time. | |
uint64_t | getStart () const |
Returns the start time. | |
int | getTimeTicks () const |
Returns the current race time in time ticks (i.e. | |
virtual void | countdownReachedZero () |
Will be called to notify your derived class that the clock, which is in COUNTDOWN mode, has reached zero. | |
virtual void | onGo () |
Called when the race actually starts. | |
int | getTicksSinceStart () const |
Get the ticks since start regardless of which way the clock counts. | |
int | getAuxiliaryTicks () const |
bool | isLiveJoinWorld () const |
void | setLiveJoinWorld (bool val) |
int | getMusicDescriptionTicks () const |
void | endLiveJoinWorld (int ticks_now) |
Base on the network timer set current world count up ticks to tick_now. | |
Private Member Functions | |
void | updateBallPosition (int ticks) |
Function to update the location the ball on the polygon map. | |
void | updateAIData () |
Function to update data for AI usage. | |
int | getTeamNum (KartTeam team) const |
Get number of teammates in a team, used by starting position assign. | |
void | resetKartsToSelfGoals () |
Private Attributes | |
std::vector< KartDistanceMap > | m_red_kdm |
std::vector< KartDistanceMap > | m_blue_kdm |
std::unique_ptr< BallGoalData > | m_bgd |
TrackObject * | m_ball |
Keep a pointer to the track object of soccer ball. | |
btRigidBody * | m_ball_body |
int | m_goal_target |
Number of goals needed to win. | |
bool | m_count_down_reached_zero |
SFXBase * | m_goal_sound |
int | m_ball_invalid_timer |
Counts ticks when the ball is off track, so a reset can be triggered if the ball is off for more than 2 seconds. | |
int | m_ball_hitter |
std::vector< ScorerData > | m_red_scorers |
Goals data of each team scored. | |
std::vector< ScorerData > | m_blue_scorers |
TrackSector * | m_ball_track_sector |
Data generated from navmesh. | |
float | m_ball_heading |
std::vector< int > | m_team_icon_draw_id |
std::vector< btTransform > | m_goal_transforms |
int | m_frame_count |
Profiling usage. | |
std::vector< int > | m_goal_frame |
int | m_reset_ball_ticks |
int | m_ticks_back_to_own_goal |
Additional Inherited Members | |
Public Types inherited from World | |
typedef std::vector< std::shared_ptr< AbstractKart > > | KartList |
Public Types inherited from WorldStatus | |
enum | ClockType { CLOCK_NONE , CLOCK_CHRONO , CLOCK_COUNTDOWN } |
Different clock types for a race. | |
enum | Phase { TRACK_INTRO_PHASE , SETUP_PHASE , WAIT_FOR_SERVER_PHASE , SERVER_READY_PHASE , READY_PHASE , SET_PHASE , GO_PHASE , MUSIC_PHASE , RACE_PHASE , DELAY_FINISH_PHASE , RESULT_DISPLAY_PHASE , FINISH_PHASE , IN_GAME_MENU_PHASE , UNDEFINED_PHASE } |
Static Public Member Functions inherited from World | |
static World * | getWorld () |
Returns a pointer to the (singleton) world object. | |
static void | deleteWorld () |
Delete the )singleton) world object, if it exists, and sets the singleton pointer to NULL. | |
static void | setWorld (World *world) |
Sets the pointer to the world object. | |
static void | clear () |
Protected Member Functions inherited from WorldWithRank | |
unsigned int | getClosestStartPoint (AbstractKart *kart) |
void | updateSectorForKarts () |
Localize each kart on the graph using its center xyz. | |
Protected Member Functions inherited from World | |
void | updateHighscores (int *best_highscore_rank) |
Called at the end of a race. | |
void | resetAllKarts () |
Waits till each kart is resting on the ground. | |
Controller * | loadAIController (AbstractKart *kart) |
Creates an AI controller for the kart. | |
virtual std::shared_ptr< AbstractKart > | createKart (const std::string &kart_ident, int index, int local_player_id, int global_player_id, RaceManager::KartType type, HandicapLevel handicap) |
Creates a kart, having a certain position, starting location, and local and global player id (if applicable). | |
virtual void | onGo () OVERRIDE |
Called when 'go' is being displayed for the first time. | |
virtual bool | isRaceOver ()=0 |
Returns true if the race is over. | |
virtual void | update (int ticks) OVERRIDE |
Updates the physics, all karts, the track, and projectile manager. | |
virtual void | createRaceGUI () |
void | updateTrack (int ticks) |
Only updates the track. | |
virtual float | estimateFinishTimeForKart (AbstractKart *kart) |
Used for AI karts that are still racing when all player kart finished. | |
void | updateAchievementDataEndRace () |
void | updateAchievementModeCounters (bool start) |
Protected Attributes inherited from WorldWithRank | |
std::vector< int > | m_position_index |
This contains a mapping from race position to kart index. | |
bool | m_display_rank |
Whether to display the rank in the race GUI. | |
std::vector< int > | m_score_for_position |
The points given to a kart on a given position (index is 0 based, so using race-position - 1. | |
std::vector< TrackSector * > | m_kart_track_sector |
Stores the current graph node and track coordinates for each kart. | |
Protected Attributes inherited from World | |
int | m_red_ai |
int | m_blue_ai |
std::map< int, KartTeam > | m_kart_team_map |
std::map< int, unsigned int > | m_kart_position_map |
KartList | m_karts |
The list of all karts. | |
RandomGenerator | m_random |
AbstractKart * | m_fastest_kart |
int | m_eliminated_karts |
Number of eliminated karts. | |
int | m_eliminated_players |
Number of eliminated players. | |
int | m_num_players |
OVerall number of players. | |
bool | m_faster_music_active |
bool | m_stop_music_when_dialog_open |
bool | m_unfair_team |
bool | m_use_highscores |
Whether highscores should be used for this kind of race. | |
RaceGUIBase * | m_race_gui |
Pointer to the race GUI. | |
RaceGUIBase * | m_saved_race_gui |
The actual race gui needs to be saved when the race result gui is displayed since it is still needed in case of a restart, and it can't simply be created again (since it assumes that it can render to texture without having any scene nodes, but in case of a restart there are scene nodes). | |
bool | m_schedule_pause |
Pausing/unpausing are not done immediately, but at next udpdate. | |
bool | m_schedule_unpause |
Pausing/unpausing are not done immediately, but at next udpdate. | |
bool | m_schedule_exit_race |
bool | m_schedule_tutorial |
Phase | m_scheduled_pause_phase |
bool | m_self_destruct |
Set when the world needs to be deleted but you can't do it immediately because you are e.g. | |
bool | m_is_network_world |
Set when the world is online and counts network players. | |
bool | m_ended_early |
Protected Attributes inherited from WorldStatus | |
double | m_time |
Elasped/remaining time in seconds. | |
int | m_time_ticks |
Time in number of ticks (in terms of physics time steps). | |
bool | m_play_racestart_sounds |
If the start race should be played, disabled in cutscenes. | |
const ProcessType | m_process_type |
Process type of this world (main or child). | |
bool | m_play_track_intro_sound |
bool | m_play_ready_set_go_sounds |
std::atomic< Phase > | m_phase |
An implementation of WorldWithRank, to provide the soccer game mode Notice: In soccer world, true goal means blue, false means red.
SoccerWorld::SoccerWorld | ( | ) |
Constructor.
Sets up the clock mode etc.
|
virtual |
Called when the match time ends.
Reimplemented from WorldStatus.
|
virtual |
Called when the race is finished, but it still leaves some time for an end of race animation, and potentially let some more AI karts finish the race.
Reimplemented from WorldStatus.
|
inlinevirtual |
Used by server to get the current started game progress in either or both remaining time or progress in percent.
uint32_t max for either or both if not available.
Reimplemented from World.
|
virtual |
Returns the internal identifier for this race.
Implements World.
|
inlinevirtual |
Returns the kart at which position (start from 1) to draw race icon.
p | Position of the kart. |
Reimplemented from WorldWithRank.
|
virtual |
Returns the data to display in the race gui.
Implements World.
|
virtual |
Determines the rescue position for a kart.
The rescue position is the start position which is has the biggest accumulated distance to all other karts, and which has no other kart very close. The latter avoids dropping a kart on top of another kart. This is the method used
kart | The kart that is going to be rescued. |
Reimplemented from WorldWithRank.
|
virtual |
Returns the bullet transformation for the specified rescue index.
Returns the start transform with the give index.
rescue_pos | Index of the start position to be returned. |
Reimplemented from World.
|
inlinevirtual |
Reimplemented from World.
|
virtual |
Initializes the soccer world.
It sets up the data structure to keep track of points etc. for each kart.
Reimplemented from WorldWithRank.
|
inlinevirtual |
Reimplemented from World.
|
virtual |
The soccer game is over if time up or either team wins.
Implements World.
|
virtual |
Called when 'go' is being displayed for the first time.
Here the brakes of the karts are released.
Reimplemented from World.
|
inlinevirtual |
Called when it is needed to know whether this kind of race involves counting laps.
Implements World.
|
virtual |
Called when a soccer game is restarted.
Reimplemented from WorldWithRank.
|
virtual |
Reimplemented from World.
|
virtual |
Reimplemented from World.
|
inlinevirtual |
The code that draws the timer should call this first to know whether the game mode wants a timer drawn.
Reimplemented from World.
|
virtual |
Called at the end of a race.
Updates highscores, pauses the game, and informs the unlock manager about the finished race. This function must be called after all other stats were updated from the different game modes.
Only update high scores when these conditions are met:
If they are met, retrieve the best highscore if relevant to show it in the GUI
Reimplemented from World.
|
virtual |
|
private |
Function to update the location the ball on the polygon map.
Localize the ball on the navigation mesh.
|
inlinevirtual |
Returns if this mode should use fast music (if available).
Reimplemented from World.