Mario Kart 64
Loading...
Searching...
No Matches
World.h
Go to the documentation of this file.
1#pragma once
2
3#include <libultraship.h>
4
5#include "CoreMath.h"
8#include "objects/Object.h"
9#include "Cup.h"
10#include "PlayerBombKart.h"
11#include "TrainCrossing.h"
12#include <memory>
13#include <unordered_map>
14#include <utility>
15#include "RaceManager.h"
16#include "Actor.h"
17#include "StaticMeshActor.h"
19
20#include "editor/Editor.h"
21#include "editor/GameObject.h"
22#include "port/Game.h"
23
24extern "C" {
25#include "camera.h"
26#include "objects.h"
27};
28
29class Cup; // <-- Forward declaration
30class OObject;
31class GameCamera;
32class Track;
33class StaticMeshActor;
34class OBombKart;
35class TrainCrossing;
36class OLakitu;
37class GameObject; // <-- Editor
38
39class World {
40typedef struct Matrix {
41 Mtx Screen2D; // Orthogonal projection for UI, skybox, and such
43 std::array<Mtx,5> Persp;
44 std::array<Mtx,5> LookAt;
45 std::array<Mtx, 8 * 4> Karts; // Eight players * four screens
46 std::array<Mtx, 8 * 4> Shadows; // Eight players * four screens
47 std::deque<Mtx> Hud;
48 std::deque<Mtx> Objects;
49
51 : Hud(200), Objects(1000)
52 {}
53};
54private:
55 std::shared_ptr<Track> mTrack;
57
58public:
59 explicit World();
60 ~World();
61
62 RaceManager& GetRaceManager() { return *RaceManagerInstance; }
63 void SetRaceManager(std::unique_ptr<RaceManager> manager) { RaceManagerInstance = std::move(manager); }
64
65 std::shared_ptr<Track> AddTrack(std::shared_ptr<Track> track);
66
67 void TickCameras();
68
69 AActor* AddActor(AActor* actor);
70 struct Actor* AddBaseActor();
71 void ActorBeginPlay(Actor* actor);
72 AActor* GetActor(size_t index);
73
74 void TickActors();
77
79 StaticMeshActor* AddStaticMeshActor(std::string name, FVector pos, IRotator rot, FVector scale, std::string model, int32_t* collision);
80
81 OObject* AddObject(OObject* object);
82
83 void TickObjects();
84 void TickObjects60fps();
85 void DrawObjects(s32 cameraId);
86 Object *GetObjectByIndex(size_t);
87
88 void TickParticles();
89 void DrawParticles(s32 cameraId);
91 void Reset(void); // Sets OObjects or AActors static member variables back to default values
92
93 void AddCup(Cup*);
94 void SetCurrentCup(Cup* cup);
96 return CurrentCup;
97 }
98 void SetCupIndex(size_t index);
99 const char* GetCupName();
100 u32 GetCupIndex();
101 u32 NextCup();
102 u32 PreviousCup();
103 void SetTrackFromCup();
104
106 void CleanWorld(void);
107
108 // getter/setter for current track
109 std::shared_ptr<Track> GetTrack() {
110 return mTrack;
111 }
112
113 void SetCurrentTrack(std::shared_ptr<Track> track);
114
115 // These are only for browsing through the track list
116 void SetTrack(const char*);
117 template<typename T>
119 for (const auto& track : Tracks) {
120 if (dynamic_cast<T*>(track.get())) {
121 SetCurrentTrack(track);
122 return;
123 }
124 }
125 printf("World::SetTrackByType() No track by the type found");
126 }
127 void NextTrack(void);
128 void PreviousTrack(void);
129
131
132 std::vector<Cup*> Cups;
133 size_t CupIndex = 1;
134
135 std::vector<GameCamera*> Cameras;
136
137 std::vector<StaticMeshActor*> StaticMeshActors;
138 std::vector<AActor*> Actors;
139 std::vector<OObject*> Objects;
140 std::vector<ParticleEmitter*> Emitters;
141
142 std::unordered_map<s32, OLakitu*> Lakitus;
143
145 PlayerBombKart playerBombKart[4]; // Used in battle mode
146
147 TrainCrossing* AddCrossing(Vec3f position, u32 waypointMin, u32 waypointMax, f32 approachRadius, f32 exitRadius);
148 std::vector<std::shared_ptr<TrainCrossing>> Crossings;
149
150 // Holds all available tracks
151 std::vector<std::shared_ptr<Track>> Tracks;
152 size_t TrackIndex = 0; // For browsing tracks.
153private:
154 std::unique_ptr<RaceManager> RaceManagerInstance;
155};
156
157extern World gWorldInstance;
World gWorldInstance
Definition Game.cpp:74
Definition Actor.h:14
Definition Cup.h:10
Definition GameCamera.h:10
Definition BombKart.h:25
Definition Lakitu.h:21
Definition Object.h:14
Definition ParticleEmitter.h:12
Definition PlayerBombKart.h:6
Definition StaticMeshActor.h:9
TrainCrossing class.
Definition TrainCrossing.h:18
Definition World.h:39
std::vector< ParticleEmitter * > Emitters
Definition World.h:140
void TickObjects()
Definition World.cpp:240
void ActorBeginPlay(Actor *actor)
Definition World.cpp:179
void SetCurrentTrack(std::shared_ptr< Track > track)
Definition World.cpp:50
void Reset(void)
Definition World.cpp:278
std::unordered_map< s32, OLakitu * > Lakitus
Definition World.h:142
struct Actor * AddBaseActor()
Definition World.cpp:170
void SetCurrentCup(Cup *cup)
Definition World.cpp:110
Cup * GetCurrentCup()
Definition World.h:95
World * GetWorld(void)
size_t CupIndex
Definition World.h:133
std::vector< std::shared_ptr< Track > > Tracks
Definition World.h:151
void NextTrack(void)
Definition World.cpp:128
Cup * CurrentCup
Definition World.h:56
void AddCup(Cup *)
Definition World.cpp:46
Actor * ConvertAActorToActor(AActor *actor)
Definition World.cpp:197
std::vector< StaticMeshActor * > StaticMeshActors
Definition World.h:137
size_t TrackIndex
Definition World.h:152
void SetTrackByType()
Definition World.h:118
std::vector< std::shared_ptr< TrainCrossing > > Crossings
Definition World.h:148
StaticMeshActor * AddStaticMeshActor(std::string name, FVector pos, IRotator rot, FVector scale, std::string model, int32_t *collision)
Definition World.cpp:216
void SetRaceManager(std::unique_ptr< RaceManager > manager)
Definition World.h:63
PlayerBombKart playerBombKart[4]
Definition World.h:145
void CleanWorld(void)
Definition World.cpp:293
std::vector< OObject * > Objects
Definition World.h:139
std::vector< GameCamera * > Cameras
Definition World.h:135
OObject * AddObject(OObject *object)
Definition World.cpp:228
std::shared_ptr< Track > GetTrack()
Definition World.h:109
std::shared_ptr< Track > mTrack
Definition World.h:55
std::vector< AActor * > Actors
Definition World.h:138
void DrawParticles(s32 cameraId)
Definition World.cpp:271
void TickActors()
Definition World.cpp:207
u32 PreviousCup()
Definition World.cpp:94
~World()
Definition World.cpp:37
AActor * ConvertActorToAActor(Actor *actor)
Definition World.cpp:187
void SetCupIndex(size_t index)
Definition World.cpp:106
Object * GetObjectByIndex(size_t)
Definition World.cpp:284
std::vector< Cup * > Cups
Definition World.h:132
void SetTrack(const char *)
Definition World.cpp:117
void TickCameras()
Definition World.cpp:146
void TickObjects60fps()
Definition World.cpp:248
TrainCrossing * AddCrossing(Vec3f position, u32 waypointMin, u32 waypointMax, f32 approachRadius, f32 exitRadius)
Definition World.cpp:64
u32 GetCupIndex()
Definition World.cpp:71
void SetTrackFromCup()
Definition World.cpp:60
AActor * GetActor(size_t index)
Definition World.cpp:203
AActor * AddActor(AActor *actor)
Definition World.cpp:164
u32 NextCup()
Definition World.cpp:75
const char * GetCupName()
std::shared_ptr< Track > AddTrack(std::shared_ptr< Track > track)
Definition World.cpp:41
std::unique_ptr< RaceManager > RaceManagerInstance
Definition World.h:154
Matrix Mtx
Definition World.h:130
void DrawObjects(s32 cameraId)
Definition World.cpp:259
void DrawStaticMeshActors()
Definition World.cpp:222
void TickParticles()
Definition World.cpp:265
ParticleEmitter * AddEmitter(ParticleEmitter *emitter)
Definition World.cpp:254
void PreviousTrack(void)
Definition World.cpp:137
RaceManager & GetRaceManager()
Definition World.h:62
World()
Definition World.cpp:33
f32 Vec3f[3]
Definition common_structs.h:10
Definition actor_types.h:124
Definition CoreMath.h:30
Definition CoreMath.h:137
Definition objects.h:14
Definition World.h:40
std::deque< Mtx > Objects
Definition World.h:48
Mtx Ortho
Definition World.h:42
std::array< Mtx, 5 > Persp
Definition World.h:43
std::deque< Mtx > Hud
Definition World.h:47
Matrix()
Definition World.h:50
std::array< Mtx, 8 *4 > Karts
Definition World.h:45
std::array< Mtx, 8 *4 > Shadows
Definition World.h:46
std::array< Mtx, 5 > LookAt
Definition World.h:44
Mtx Screen2D
Definition World.h:41