SpaghettiKart
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#include "engine/sky/SkyCloud.h"
20
21#include "editor/Editor.h"
22#include "editor/GameObject.h"
23#include "port/Game.h"
24
25extern "C" {
26#include "camera.h"
27#include "objects.h"
28};
29
30class Cup; // <-- Forward declaration
31class OObject;
32class GameCamera;
33class Track;
34class StaticMeshActor;
35class OBombKart;
36class TrainCrossing;
37class OLakitu;
38class GameObject; // <-- Editor
39
40class World {
41typedef struct Matrix {
42 Mtx Screen2D; // Orthogonal projection for UI, skybox, and such
44 std::array<Mtx,5> Persp;
45 std::array<Mtx,5> LookAt;
46 std::array<Mtx, 8 * 4> Karts; // Eight players * four screens
47 std::array<Mtx, 8 * 4> Shadows; // Eight players * four screens
48 std::deque<Mtx> Hud;
49 std::deque<Mtx> Objects;
50
52 : Hud(200), Objects(1000)
53 {}
54};
55private:
56 std::unique_ptr<Track> mTrack;
58
59public:
60 static World* Instance;
61 explicit World();
62 ~World();
63
64 RaceManager& GetRaceManager() { return *RaceManagerInstance; }
65 void SetRaceManager(std::unique_ptr<RaceManager> manager) { RaceManagerInstance = std::move(manager); }
66
67 void TickCameras();
68
69 AActor* AddActor(std::unique_ptr<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(const std::string& name, FVector pos, IRotator rot, FVector scale, const std::string& model, int32_t* collision);
80
81 OObject* AddObject(std::unique_ptr<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);
90 ParticleEmitter* AddEmitter(std::unique_ptr<ParticleEmitter> emitter);
91 void Reset(void); // Sets OObjects or AActors static member variables back to default values
92
93 void AddCup(Cup* 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
105 void CleanWorld(void);
106 void CleanActors(void);
107
108 // getter/setter for current track
110 return mTrack.get();
111 }
112
113 void SetCurrentTrack(std::unique_ptr<Track> track);
114
116
117 std::vector<Cup*> Cups;
118 size_t CupIndex = 1;
119
120 std::vector<std::unique_ptr<GameCamera>> Cameras;
121
122 std::vector<std::unique_ptr<StaticMeshActor>> StaticMeshActors;
123 std::vector<std::unique_ptr<AActor>> Actors;
124 std::deque<std::unique_ptr<OObject>> Objects;
125 std::vector<std::unique_ptr<ParticleEmitter>> Emitters;
126
127 std::unordered_map<s32, OLakitu*> Lakitus;
128
130 PlayerBombKart mPlayerBombKart[4]; // Used in battle mode
131
132 TrainCrossing* AddCrossing(Vec3f position, u32 waypointMin, u32 waypointMax, f32 approachRadius, f32 exitRadius);
133 std::vector<std::shared_ptr<TrainCrossing>> Crossings;
134private:
135 std::unique_ptr<RaceManager> RaceManagerInstance;
136};
Definition Actor.h:14
Definition Cup.h:11
Definition GameCamera.h:10
Definition BombKart.h:19
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
void TickObjects()
Definition World.cpp:205
void ActorBeginPlay(Actor *actor)
Definition World.cpp:132
void CleanActors(void)
Definition World.cpp:277
Track * GetTrack()
Definition World.h:109
void Reset(void)
Definition World.cpp:243
std::unordered_map< s32, OLakitu * > Lakitus
Definition World.h:127
struct Actor * AddBaseActor()
Definition World.cpp:123
std::deque< std::unique_ptr< OObject > > Objects
Definition World.h:124
void SetCurrentCup(Cup *cup)
Definition World.cpp:92
Cup * GetCurrentCup()
Definition World.h:95
StaticMeshActor * AddStaticMeshActor(const std::string &name, FVector pos, IRotator rot, FVector scale, const std::string &model, int32_t *collision)
Definition World.cpp:169
World * GetWorld(void)
size_t CupIndex
Definition World.h:118
Cup * CurrentCup
Definition World.h:57
std::vector< std::unique_ptr< GameCamera > > Cameras
Definition World.h:120
Actor * ConvertAActorToActor(AActor *actor)
Definition World.cpp:150
void AddCup(Cup *cup)
Definition World.cpp:35
std::vector< std::shared_ptr< TrainCrossing > > Crossings
Definition World.h:133
std::vector< std::unique_ptr< ParticleEmitter > > Emitters
Definition World.h:125
void SetRaceManager(std::unique_ptr< RaceManager > manager)
Definition World.h:65
void CleanWorld(void)
Definition World.cpp:258
void DrawParticles(s32 cameraId)
Definition World.cpp:236
void TickActors()
Definition World.cpp:160
u32 PreviousCup()
Definition World.cpp:76
~World()
Definition World.cpp:31
OObject * AddObject(std::unique_ptr< OObject > object)
Definition World.cpp:193
AActor * ConvertActorToAActor(Actor *actor)
Definition World.cpp:140
void SetCupIndex(size_t index)
Definition World.cpp:88
Object * GetObjectByIndex(size_t)
Definition World.cpp:249
std::vector< Cup * > Cups
Definition World.h:117
void TickCameras()
Definition World.cpp:99
void TickObjects60fps()
Definition World.cpp:213
TrainCrossing * AddCrossing(Vec3f position, u32 waypointMin, u32 waypointMax, f32 approachRadius, f32 exitRadius)
Definition World.cpp:46
u32 GetCupIndex()
Definition World.cpp:53
std::vector< std::unique_ptr< AActor > > Actors
Definition World.h:123
AActor * GetActor(size_t index)
Definition World.cpp:156
u32 NextCup()
Definition World.cpp:57
const char * GetCupName()
std::unique_ptr< RaceManager > RaceManagerInstance
Definition World.h:135
AActor * AddActor(std::unique_ptr< AActor > actor)
Definition World.cpp:117
PlayerBombKart mPlayerBombKart[4]
Definition World.h:130
std::unique_ptr< Track > mTrack
Definition World.h:56
static World * Instance
Definition World.h:60
Matrix Mtx
Definition World.h:115
void DrawObjects(s32 cameraId)
Definition World.cpp:224
void DrawStaticMeshActors()
Definition World.cpp:175
void TickParticles()
Definition World.cpp:230
void SetCurrentTrack(std::unique_ptr< Track > track)
Definition World.cpp:39
ParticleEmitter * AddEmitter(std::unique_ptr< ParticleEmitter > emitter)
Definition World.cpp:219
std::vector< std::unique_ptr< StaticMeshActor > > StaticMeshActors
Definition World.h:122
RaceManager & GetRaceManager()
Definition World.h:64
World()
Definition World.cpp:26
f32 Vec3f[3]
Definition common_structs.h:10
Definition actor_types.h:124
Definition CoreMath.h:30
Definition CoreMath.h:141
Definition objects.h:14
Definition World.h:41
std::deque< Mtx > Objects
Definition World.h:49
Mtx Ortho
Definition World.h:43
std::array< Mtx, 5 > Persp
Definition World.h:44
std::deque< Mtx > Hud
Definition World.h:48
Matrix()
Definition World.h:51
std::array< Mtx, 8 *4 > Karts
Definition World.h:46
std::array< Mtx, 8 *4 > Shadows
Definition World.h:47
std::array< Mtx, 5 > LookAt
Definition World.h:45
Mtx Screen2D
Definition World.h:42