19#ifndef HEADER_WORLD_HPP
20#define HEADER_WORLD_HPP
35#include "graphics/weather.hpp"
36#include "modes/world_status.hpp"
37#include "race/highscores.hpp"
38#include "states_screens/race_gui_base.hpp"
39#include "states_screens/state_manager.hpp"
40#include "utils/random_generator.hpp"
41#include "utils/stk_process.hpp"
43#include "LinearMath/btTransform.h"
60 namespace scene {
class ISceneNode; }
90 typedef std::vector<std::shared_ptr<AbstractKart> > KartList;
97 std::shared_ptr<AbstractKart> createKartWithTeam
98 (
const std::string &kart_ident,
int index,
int local_player_id,
105 unsigned int m_magic_number;
111 std::map<int, KartTeam> m_kart_team_map;
112 std::map<int, unsigned int> m_kart_position_map;
126 bool m_faster_music_active;
128 bool m_stop_music_when_dialog_open;
142 virtual std::shared_ptr<AbstractKart>
createKart
143 (
const std::string &kart_ident,
int index,
int local_player_id,
171 bool m_schedule_exit_race;
173 bool m_schedule_tutorial;
175 Phase m_scheduled_pause_phase;
187 virtual void onGo() OVERRIDE;
190 virtual
void update(
int ticks) OVERRIDE;
191 virtual
void createRaceGUI();
203 void updateAchievementDataEndRace();
204 void updateAchievementModeCounters(
bool start);
215 ProcessType type = STKProcess::getType();
224 ProcessType type = STKProcess::getType();
233 ProcessType type = STKProcess::getType();
270 assert(
false);
return -1;
276 std::vector<RaceGUIBase::KartIconDisplayInfo> *info)= 0;
284 virtual
void reset(
bool restart=false) OVERRIDE;
285 virtual
void pause(Phase phase) OVERRIDE;
286 virtual
void unpause() OVERRIDE;
294 virtual void endRaceEarly() {
return; }
296 virtual bool hasRaceEndedEarly()
const {
return m_ended_early; }
311 virtual void newLap(
unsigned int kart_index) {}
314 virtual bool kartHit(
int kart_id,
int hitter = -1) {
return false; }
316 virtual void onMouseClick(
int x,
int y) {};
322 void schedulePause(Phase phase);
323 void scheduleUnpause();
324 void scheduleExitRace() { m_schedule_exit_race =
true; }
325 void scheduleTutorial();
333 void updateTimeTargetSound();
343 assert(kartId >= 0 && kartId <
int(
m_karts.size()));
344 return m_karts[kartId].get(); }
357 void resetElimination()
363 virtual void addReservedKart(
int kart_id)
376 {
return isActiveRacePhase() &&
getClockMode() != CLOCK_NONE; }
388 virtual void escapePressed();
390 virtual void loadCustomModels() {}
392 void eliminateKart(
int kart_number,
bool notify_of_elimination =
true);
394 void setUnfairTeam(
bool val) { m_unfair_team = val; }
396 virtual bool hasTeam()
const {
return false; }
401 int getTeamNum(KartTeam team)
const;
416 return std::make_pair(std::numeric_limits<uint32_t>::max(),
417 std::numeric_limits<uint32_t>::max());
420 virtual bool isGoalPhase()
const {
return false; }
An abstract interface for the actual karts.
Definition: abstract_kart.hpp:62
Describes a chain of 8-bit unsigned integers.
Definition: network_string.hpp:53
This is the base class for kart controller - that can be a player or a a robot.
Definition: controller.hpp:46
Represents one highscore entry, i.e.
Definition: highscores.hpp:41
Contains the state information of an item, i.e.
Definition: item.hpp:53
Definition: physical_object.hpp:40
An abstract base class for the two race guis (race_gui and race_result gui)
Definition: race_gui_base.hpp:50
KartType
Different kart types: A local player, a player connected via network, an AI kart, the leader kart (cu...
Definition: race_manager.hpp:242
A random number generator.
Definition: random_generator.hpp:34
Represents a peer. This class is used to interface the ENetPeer structure.
Definition: stk_peer.hpp:76
A wrapper around bullets btVector3 to include conventient conversion functions (e....
Definition: vec3.hpp:35
A class that manages the clock (countdown, chrono, etc.) Also manages stuff like the 'ready/set/go' t...
Definition: world_status.hpp:33
float getTime() const
Returns the current race time.
Definition: world_status.hpp:204
int getClockMode() const
Returns the current clock mode.
Definition: world_status.hpp:200
base class for all game modes This class is responsible for running the actual race.
Definition: world.hpp:88
Controller * loadAIController(AbstractKart *kart)
Creates an AI controller for the kart.
Definition: world.cpp:570
virtual void init()
This function is called after instanciating.
Definition: world.cpp:160
bool m_schedule_pause
Pausing/unpausing are not done immediately, but at next udpdate.
Definition: world.hpp:162
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.
Definition: world.hpp:306
static void setWorld(World *world)
Sets the pointer to the world object.
Definition: world.hpp:231
bool m_schedule_unpause
Pausing/unpausing are not done immediately, but at next udpdate.
Definition: world.hpp:169
virtual void terminateRace() OVERRIDE
Called at the end of a race.
Definition: world.cpp:728
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 ...
Definition: world.hpp:414
void eliminateKart(int kart_number, bool notify_of_elimination=true)
Remove (eliminate) a kart from the race.
Definition: world.cpp:1414
virtual bool showLapsTarget()
If true lap counter shows lap count in format: 4/20 or if false then in format: 4.
Definition: world.hpp:264
int m_num_players
OVerall number of players.
Definition: world.hpp:124
void updateWorld(int ticks)
This is the main interface to update the world.
Definition: world.cpp:1003
unsigned int getCurrentNumKarts() const
Returns the number of currently active (i.e.non-elikminated) karts.
Definition: world.hpp:350
int m_eliminated_players
Number of eliminated players.
Definition: world.hpp:122
bool m_self_destruct
Set when the world needs to be deleted but you can't do it immediately because you are e....
Definition: world.hpp:180
static World * m_world[PT_COUNT]
A pointer to the global world object for a race.
Definition: world.hpp:93
virtual bool useFastMusicNearEnd() const
Returns if this mode should use fast music (if available).
Definition: world.hpp:302
virtual bool raceHasLaps()=0
Called when it is needed to know whether this kind of race involves counting laps.
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.
Definition: world.cpp:1471
KartList m_karts
The list of all karts.
Definition: world.hpp:115
virtual void onFirePressed(Controller *who)
Override if you want to know when a kart presses fire.
Definition: world.hpp:382
virtual int getFinishedLapsOfKart(unsigned int kart_index) const
Returns the number of laps for a given kart.
Definition: world.hpp:268
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 appl...
Definition: world.cpp:460
bool m_is_network_world
Set when the world is online and counts network players.
Definition: world.hpp:183
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 ...
Definition: world.hpp:155
virtual void pause(Phase phase) OVERRIDE
Pauses the music (and then pauses WorldStatus).
Definition: world.cpp:1480
virtual void onGo() OVERRIDE
Called when 'go' is being displayed for the first time.
Definition: world.cpp:695
virtual bool isRaceOver()=0
Returns true if the race is over.
virtual bool kartHit(int kart_id, int hitter=-1)
Called when a kart was hit by a projectile.
Definition: world.hpp:314
void setNetworkWorld(bool is_networked)
Set the network mode (true if networked)
Definition: world.hpp:404
AbstractKart * getLocalPlayerKart(unsigned int n) const
Returns the nth local player kart, i.e.
Definition: world.cpp:1406
const KartList & getKarts() const
Returns all karts.
Definition: world.hpp:347
unsigned int getCurrentNumPlayers() const
Returns the number of currently active (i.e.
Definition: world.hpp:354
virtual float estimateFinishTimeForKart(AbstractKart *kart)
Used for AI karts that are still racing when all player kart finished.
Definition: world.hpp:201
bool useHighScores() const
Definition: world.hpp:379
virtual bool haveBonusBoxes()
Called to determine whether this race mode uses bonus boxes.
Definition: world.hpp:299
virtual void collectedItem(const AbstractKart *kart, const ItemState *item)
Receives notification if an item is collected.
Definition: world.hpp:291
void updateHighscores(int *best_highscore_rank)
Called at the end of a race.
Definition: world.cpp:1290
void initTeamArrows(AbstractKart *k)
Set the team arrow on karts if necessary.
Definition: world.cpp:311
virtual unsigned int getRescuePositionIndex(AbstractKart *kart)=0
Determines the rescue position index of the specified kart.
RaceGUIBase * getRaceGUI() const
Returns a pointer to the race gui.
Definition: world.hpp:336
virtual void reset(bool restart=false) OVERRIDE
This function is called before a race is started (i.e.
Definition: world.cpp:347
virtual const std::string & getIdent() const =0
Each game mode should have a unique identifier.
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...
unsigned int getNumKarts() const
Returns the number of karts in the race.
Definition: world.hpp:339
virtual void unpause() OVERRIDE
Switches back from a pause state to the previous state.
Definition: world.cpp:1490
AbstractKart * getKart(int kartId) const
Returns the kart with a given world id.
Definition: world.hpp:342
KartTeam getKartTeam(unsigned int kart_id) const
Get the team of kart in world (including AIs)
Definition: world.cpp:1663
virtual bool shouldDrawTimer() const
The code that draws the timer should call this first to know whether the game mode wants a timer draw...
Definition: world.hpp:375
void updateTrack(int ticks)
Only updates the track.
Definition: world.cpp:1250
static World * getWorld()
Returns a pointer to the (singleton) world object.
Definition: world.hpp:213
virtual void updateGraphics(float dt)
This updates all only graphical elements.
Definition: world.cpp:1123
void moveKartTo(AbstractKart *kart, const btTransform &t)
Places the kart at a given position and rotation.
Definition: world.cpp:921
RaceGUIBase * m_race_gui
Pointer to the race GUI.
Definition: world.hpp:148
virtual unsigned int getNumberOfRescuePositions() const
Returns the number of rescue positions on a given track and game mode.
Definition: world.cpp:1540
virtual const btTransform & getStartTransform(int index)
Returns the start coordinates for a kart with a given index.
Definition: world.cpp:561
virtual btTransform getRescueTransform(unsigned int index) const
Returns the bullet transformation for the specified rescue index.
Definition: world.cpp:1532
void resetAllKarts()
Waits till each kart is resting on the ground.
Definition: world.cpp:806
AbstractKart * getPlayerKart(unsigned int player) const
Returns the n-th player kart.
Definition: world.cpp:1384
virtual void update(int ticks) OVERRIDE
Updates the physics, all karts, the track, and projectile manager.
Definition: world.cpp:1169
virtual void newLap(unsigned int kart_index)
Called whenever a kart starts a new lap.
Definition: world.hpp:311
virtual void moveKartAfterRescue(AbstractKart *kart)
Places a kart that is rescued.
Definition: world.cpp:909
static void deleteWorld()
Delete the )singleton) world object, if it exists, and sets the singleton pointer to NULL.
Definition: world.hpp:222
int m_eliminated_karts
Number of eliminated karts.
Definition: world.hpp:120
virtual bool useChecklineRequirements() const
Whether to compute checkline requirements for each world on the quadgraph.
Definition: world.hpp:386
bool m_use_highscores
Whether highscores should be used for this kind of race.
Definition: world.hpp:135
World()
The main world class is used to handle the track and the karts.
Definition: world.cpp:130
HandicapLevel
Handicap per player.
Definition: remote_kart_info.hpp:42