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