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#include "CoreMath.h"
6#include "objects/Object.h"
7#include "Cup.h"
8#include "PlayerBombKart.h"
9#include "TrainCrossing.h"
10#include <memory>
11#include <unordered_map>
12#include <utility>
13#include "RaceManager.h"
14#include "Actor.h"
15#include "StaticMeshActor.h"
17
18#include "editor/Editor.h"
19#include "editor/GameObject.h"
20#include "port/Game.h"
21
22extern "C" {
23#include "camera.h"
24#include "objects.h"
25};
26
27class Cup; // <-- Forward declaration
28class OObject;
29class Course;
30class StaticMeshActor;
31class OBombKart;
32class TrainCrossing;
33class OLakitu;
34class GameObject; // <-- Editor
35
36class World {
37typedef struct Matrix {
38 Mtx Screen2D; // Orthogonal projection for UI, skybox, and such
40 std::array<Mtx,5> Persp;
41 std::array<Mtx,5> LookAt;
42 std::array<Mtx, 8 * 4> Karts; // Eight players * four screens
43 std::array<Mtx, 8 * 4> Shadows; // Eight players * four screens
44 std::deque<Mtx> Hud;
45 std::deque<Mtx> Objects;
46
48 : Hud(200), Objects(1000)
49 {}
50};
51private:
52 std::shared_ptr<Course> CurrentCourse;
54
55public:
56 explicit World();
57 ~World();
58
59 RaceManager& GetRaceManager() { return *RaceManagerInstance; }
60 void SetRaceManager(std::unique_ptr<RaceManager> manager) { RaceManagerInstance = std::move(manager); }
61
62 std::shared_ptr<Course> AddCourse(std::shared_ptr<Course> course);
63
64 AActor* AddActor(AActor* actor);
65 struct Actor* AddBaseActor();
66 void ActorBeginPlay(Actor* actor);
67 AActor* GetActor(size_t index);
68
69 void TickActors();
72
74 StaticMeshActor* AddStaticMeshActor(std::string name, FVector pos, IRotator rot, FVector scale, std::string model, int32_t* collision);
75
76 OObject* AddObject(OObject* object);
77
78 void TickObjects();
79 void TickObjects60fps();
80 void DrawObjects(s32 cameraId);
81 Object *GetObjectByIndex(size_t);
82
83 void TickParticles();
84 void DrawParticles(s32 cameraId);
86 void Reset(void); // Sets OObjects or AActors static member variables back to default values
87
88 void AddCup(Cup*);
89 void SetCurrentCup(Cup* cup);
91 return CurrentCup;
92 }
93 void SetCupIndex(size_t index);
94 const char* GetCupName();
95 u32 GetCupIndex();
96 u32 NextCup();
97 u32 PreviousCup();
98 void SetCourseFromCup();
99
101 void ClearWorld(void);
102
103 // getter/setter for current course
104 std::shared_ptr<Course> GetCurrentCourse() {
105 return CurrentCourse;
106 }
107
108 void SetCurrentCourse(std::shared_ptr<Course> course);
109
110 // These are only for browsing through the course list
111 void SetCourse(const char*);
112 template<typename T>
114 for (const auto& course : Courses) {
115 if (dynamic_cast<T*>(course.get())) {
116 SetCurrentCourse(course);
117 return;
118 }
119 }
120 printf("World::SetCourseByType() No course by the type found");
121 }
122 void NextCourse(void);
123 void PreviousCourse(void);
124
126
127 std::vector<Cup*> Cups;
128 size_t CupIndex = 1;
129
130 std::vector<StaticMeshActor*> StaticMeshActors;
131 std::vector<AActor*> Actors;
132 std::vector<OObject*> Objects;
133 std::vector<ParticleEmitter*> Emitters;
134
135 std::unordered_map<s32, OLakitu*> Lakitus;
136
138 PlayerBombKart playerBombKart[4]; // Used in battle mode
139
140 TrainCrossing* AddCrossing(Vec3f position, u32 waypointMin, u32 waypointMax, f32 approachRadius, f32 exitRadius);
141 std::vector<std::shared_ptr<TrainCrossing>> Crossings;
142
143 // Holds all available courses
144 std::vector<std::shared_ptr<Course>> Courses;
145 size_t CourseIndex = 0; // For browsing courses.
146private:
147 std::unique_ptr<RaceManager> RaceManagerInstance;
148};
149
150extern World gWorldInstance;
World gWorldInstance
Definition Game.cpp:67
Definition Actor.h:13
Definition Cup.h:10
Definition BombKart.h:25
Definition Lakitu.h:22
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:36
std::vector< ParticleEmitter * > Emitters
Definition World.h:133
void TickObjects()
Definition World.cpp:216
void ActorBeginPlay(Actor *actor)
Definition World.cpp:155
void Reset(void)
Definition World.cpp:254
std::unordered_map< s32, OLakitu * > Lakitus
Definition World.h:135
struct Actor * AddBaseActor()
Definition World.cpp:146
void SetCurrentCup(Cup *cup)
Definition World.cpp:104
void ClearWorld(void)
Definition World.cpp:269
void SetCurrentCourse(std::shared_ptr< Course > course)
Definition World.cpp:44
size_t CourseIndex
Definition World.h:145
Cup * GetCurrentCup()
Definition World.h:90
World * GetWorld(void)
size_t CupIndex
Definition World.h:128
Cup * CurrentCup
Definition World.h:53
void AddCup(Cup *)
Definition World.cpp:40
Actor * ConvertAActorToActor(AActor *actor)
Definition World.cpp:173
std::vector< StaticMeshActor * > StaticMeshActors
Definition World.h:130
std::vector< std::shared_ptr< Course > > Courses
Definition World.h:144
std::vector< std::shared_ptr< TrainCrossing > > Crossings
Definition World.h:141
StaticMeshActor * AddStaticMeshActor(std::string name, FVector pos, IRotator rot, FVector scale, std::string model, int32_t *collision)
Definition World.cpp:192
void SetRaceManager(std::unique_ptr< RaceManager > manager)
Definition World.h:60
PlayerBombKart playerBombKart[4]
Definition World.h:138
void PreviousCourse(void)
Definition World.cpp:131
std::vector< OObject * > Objects
Definition World.h:132
OObject * AddObject(OObject *object)
Definition World.cpp:204
std::vector< AActor * > Actors
Definition World.h:131
void DrawParticles(s32 cameraId)
Definition World.cpp:247
void TickActors()
Definition World.cpp:183
u32 PreviousCup()
Definition World.cpp:88
~World()
Definition World.cpp:31
AActor * ConvertActorToAActor(Actor *actor)
Definition World.cpp:163
void SetCupIndex(size_t index)
Definition World.cpp:100
void NextCourse(void)
Definition World.cpp:122
Object * GetObjectByIndex(size_t)
Definition World.cpp:260
std::vector< Cup * > Cups
Definition World.h:127
void TickObjects60fps()
Definition World.cpp:224
TrainCrossing * AddCrossing(Vec3f position, u32 waypointMin, u32 waypointMax, f32 approachRadius, f32 exitRadius)
Definition World.cpp:58
u32 GetCupIndex()
Definition World.cpp:65
void SetCourseFromCup()
Definition World.cpp:54
AActor * GetActor(size_t index)
Definition World.cpp:179
AActor * AddActor(AActor *actor)
Definition World.cpp:140
u32 NextCup()
Definition World.cpp:69
const char * GetCupName()
std::shared_ptr< Course > CurrentCourse
Definition World.h:52
std::unique_ptr< RaceManager > RaceManagerInstance
Definition World.h:147
void SetCourseByType()
Definition World.h:113
void SetCourse(const char *)
Definition World.cpp:111
Matrix Mtx
Definition World.h:125
void DrawObjects(s32 cameraId)
Definition World.cpp:235
void DrawStaticMeshActors()
Definition World.cpp:198
void TickParticles()
Definition World.cpp:241
std::shared_ptr< Course > AddCourse(std::shared_ptr< Course > course)
Definition World.cpp:35
ParticleEmitter * AddEmitter(ParticleEmitter *emitter)
Definition World.cpp:230
RaceManager & GetRaceManager()
Definition World.h:59
World()
Definition World.cpp:27
std::shared_ptr< Course > GetCurrentCourse()
Definition World.h:104
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:37
std::deque< Mtx > Objects
Definition World.h:45
Mtx Ortho
Definition World.h:39
std::array< Mtx, 5 > Persp
Definition World.h:40
std::deque< Mtx > Hud
Definition World.h:44
Matrix()
Definition World.h:47
std::array< Mtx, 8 *4 > Karts
Definition World.h:42
std::array< Mtx, 8 *4 > Shadows
Definition World.h:43
std::array< Mtx, 5 > LookAt
Definition World.h:41
Mtx Screen2D
Definition World.h:38