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;
177 bool m_restart_camera;
189 virtual void onGo() OVERRIDE;
192 virtual
void update(
int ticks) OVERRIDE;
193 virtual
void createRaceGUI();
205 void updateAchievementDataEndRace();
206 void updateAchievementModeCounters(
bool start);
217 ProcessType type = STKProcess::getType();
226 ProcessType type = STKProcess::getType();
235 ProcessType type = STKProcess::getType();
272 assert(
false);
return -1;
278 std::vector<RaceGUIBase::KartIconDisplayInfo> *info)= 0;
286 virtual
void reset(
bool restart=false) OVERRIDE;
287 virtual
void pause(Phase phase) OVERRIDE;
288 virtual
void unpause() OVERRIDE;
296 virtual void endRaceEarly() {
return; }
298 virtual bool hasRaceEndedEarly()
const {
return m_ended_early; }
313 virtual void newLap(
unsigned int kart_index) {}
316 virtual bool kartHit(
int kart_id,
int hitter = -1) {
return false; }
318 virtual void onMouseClick(
int x,
int y) {};
324 void schedulePause(Phase phase);
325 void scheduleUnpause();
326 void scheduleExitRace() { m_schedule_exit_race =
true; }
327 void scheduleTutorial();
335 void updateTimeTargetSound();
345 assert(kartId >= 0 && kartId <
int(
m_karts.size()));
346 return m_karts[kartId].get(); }
359 void resetElimination()
365 virtual void addReservedKart(
int kart_id)
378 {
return isActiveRacePhase() &&
getClockMode() != CLOCK_NONE; }
385 {
return std::make_pair(0, video::SColor(255, 255, 255, 255)); }
397 virtual void escapePressed();
399 virtual void loadCustomModels() {}
401 void eliminateKart(
int kart_number,
bool notify_of_elimination =
true);
403 void setUnfairTeam(
bool val) { m_unfair_team = val; }
405 virtual bool hasTeam()
const {
return false; }
410 int getTeamNum(KartTeam team)
const;
425 return std::make_pair(std::numeric_limits<uint32_t>::max(),
426 std::numeric_limits<uint32_t>::max());
429 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:243
A random number generator.
Definition: random_generator.hpp:33
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:582
virtual void init()
This function is called after instanciating.
Definition: world.cpp:155
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:308
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:423
static void setWorld(World *world)
Sets the pointer to the world object.
Definition: world.hpp:233
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:739
void eliminateKart(int kart_number, bool notify_of_elimination=true)
Remove (eliminate) a kart from the race.
Definition: world.cpp:1421
virtual bool showLapsTarget()
If true lap counter shows lap count in format: 4/20 or if false then in format: 4.
Definition: world.hpp:266
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:1024
unsigned int getCurrentNumKarts() const
Returns the number of currently active (i.e.non-elikminated) karts.
Definition: world.hpp:352
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:182
static World * m_world[PT_COUNT]
A pointer to the global world object for a race.
Definition: world.hpp:93
const KartList & getKarts() const
Returns all karts.
Definition: world.hpp:349
virtual bool useFastMusicNearEnd() const
Returns if this mode should use fast music (if available).
Definition: world.hpp:304
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:1478
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:391
virtual int getFinishedLapsOfKart(unsigned int kart_index) const
Returns the number of laps for a given kart.
Definition: world.hpp:270
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:467
bool m_is_network_world
Set when the world is online and counts network players.
Definition: world.hpp:185
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:1487
virtual void onGo() OVERRIDE
Called when 'go' is being displayed for the first time.
Definition: world.cpp:706
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:316
virtual const std::string & getIdent() const =0
Each game mode should have a unique identifier.
RaceGUIBase * getRaceGUI() const
Returns a pointer to the race gui.
Definition: world.hpp:338
static World * getWorld()
Returns a pointer to the (singleton) world object.
Definition: world.hpp:215
void setNetworkWorld(bool is_networked)
Set the network mode (true if networked)
Definition: world.hpp:413
AbstractKart * getLocalPlayerKart(unsigned int n) const
Returns the nth local player kart, i.e.
Definition: world.cpp:1413
unsigned int getCurrentNumPlayers() const
Returns the number of currently active (i.e.
Definition: world.hpp:356
virtual bool shouldDrawSpeedometerDigit() const
Definition: world.hpp:381
virtual float estimateFinishTimeForKart(AbstractKart *kart)
Used for AI karts that are still racing when all player kart finished.
Definition: world.hpp:203
bool useHighScores() const
Definition: world.hpp:388
virtual bool haveBonusBoxes()
Called to determine whether this race mode uses bonus boxes.
Definition: world.hpp:301
virtual void collectedItem(const AbstractKart *kart, const ItemState *item)
Receives notification if an item is collected.
Definition: world.hpp:293
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:313
AbstractKart * getKart(int kartId) const
Returns the kart with a given world id.
Definition: world.hpp:344
virtual std::pair< int, video::SColor > getSpeedometerDigit(const AbstractKart *kart) const
Definition: world.hpp:384
virtual unsigned int getRescuePositionIndex(AbstractKart *kart)=0
Determines the rescue position index of the specified kart.
virtual void reset(bool restart=false) OVERRIDE
This function is called before a race is started (i.e.
Definition: world.cpp:349
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:341
virtual void unpause() OVERRIDE
Switches back from a pause state to the previous state.
Definition: world.cpp:1497
KartTeam getKartTeam(unsigned int kart_id) const
Get the team of kart in world (including AIs)
Definition: world.cpp:1670
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:377
void updateTrack(int ticks)
Only updates the track.
Definition: world.cpp:1249
virtual void updateGraphics(float dt)
This updates all only graphical elements.
Definition: world.cpp:1112
void moveKartTo(AbstractKart *kart, const btTransform &t)
Places the kart at a given position and rotation.
Definition: world.cpp:935
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:1547
virtual const btTransform & getStartTransform(int index)
Returns the start coordinates for a kart with a given index.
Definition: world.cpp:573
virtual btTransform getRescueTransform(unsigned int index) const
Returns the bullet transformation for the specified rescue index.
Definition: world.cpp:1539
void resetAllKarts()
Waits till each kart is resting on the ground.
Definition: world.cpp:819
AbstractKart * getPlayerKart(unsigned int player) const
Returns the n-th player kart.
Definition: world.cpp:1391
virtual void update(int ticks) OVERRIDE
Updates the physics, all karts, the track, and projectile manager.
Definition: world.cpp:1158
virtual void newLap(unsigned int kart_index)
Called whenever a kart starts a new lap.
Definition: world.hpp:313
virtual void moveKartAfterRescue(AbstractKart *kart)
Places a kart that is rescued.
Definition: world.cpp:923
static void deleteWorld()
Delete the )singleton) world object, if it exists, and sets the singleton pointer to NULL.
Definition: world.hpp:224
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:395
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:126
HandicapLevel
Handicap per player.
Definition: remote_kart_info.hpp:43