Mario Kart 64
Loading...
Searching...
No Matches
Train.h
Go to the documentation of this file.
1#pragma once
2
3#include <libultraship.h>
4#include <vector>
6#include "engine/CoreMath.h"
7#include "engine/World.h"
8
9#include "Actor.h"
10
11class World;
13
14extern "C" {
15#include "main.h"
16#include "vehicles.h"
17}
18
23class ATrain : public AActor {
24 public:
25
26 enum SpawnMode : uint16_t {
27 POINT, // Spawn train at a specific path point
28 AUTO, // Automatically distribute trains based on a specific path point
29 };
30
35
38 std::vector<TrainCarStuff> PassengerCars;
41 uint32_t PathIndex = 0;
42 uint32_t PathPoint = 0;
46
47 size_t Index; // Spawns the train in halves of the train path
48
49 int32_t SmokeParticles[128];
50 int32_t NextParticlePtr = 0;
51 int16_t AnotherSmokeTimer = 0;
52 int16_t SmokeTimer = 0;
53
54 explicit ATrain(const SpawnParams& params);
55
57 _count--;
58 }
59
60 static size_t GetCount() {
61 return _count;
62 }
63
64 // This is simply a helper function to keep Spawning code clean
65 static inline ATrain* Spawn(ATrain::TenderStatus tender, size_t numCarriages, f32 speed, uint32_t pathIndex, uint32_t pathPoint, ATrain::SpawnMode spawnMode) {
66 SpawnParams params = {
67 .Name = "mk:train",
68 .Type = static_cast<int16_t>(spawnMode),
69 .Count = numCarriages,
70 .PathIndex = pathIndex,
71 .PathPoint = pathPoint,
72 .Bool = tender,
73 .Speed = speed, // 120.0f is about the maximum usable value
74 };
75 return static_cast<ATrain*>(gWorldInstance.AddActor(new ATrain(params)));
76 }
77
78 virtual void SetSpawnParams(SpawnParams& params);
79 virtual void Tick() override;
80 virtual void Draw(Camera* camera) override;
81 virtual void VehicleCollision(s32 playerId, Player* player) override;
82 virtual bool IsMod() override;
83 s32 AddSmoke(s32 trainIndex, Vec3f pos, f32 velocity);
84 void SyncComponents(TrainCarStuff* trainCar, s16 orientationY);
85 virtual void DrawEditorProperties() override;
86
87private:
88 static size_t _count; // Total number of spawned trains
89// pathIndex, array of spawn points
90 static std::map<uint32_t, std::vector<uint32_t>> TrainCounts;
91};
World gWorldInstance
Definition Game.cpp:74
World gWorldInstance
Definition Game.cpp:74
AActor()
Definition Actor.cpp:13
float Speed
Definition Actor.h:36
uint32_t PathIndex
Definition Train.h:41
virtual void SetSpawnParams(SpawnParams &params)
Definition Train.cpp:152
~ATrain()
Definition Train.h:56
virtual void VehicleCollision(s32 playerId, Player *player) override
Definition Train.cpp:256
static size_t GetCount()
Definition Train.h:60
static std::map< uint32_t, std::vector< uint32_t > > TrainCounts
Definition Train.h:90
ATrain::SpawnMode SpawnType
Definition Train.h:40
int16_t SmokeTimer
Definition Train.h:52
TenderStatus HasTender
Definition Train.h:43
TenderStatus
Definition Train.h:31
@ HAS_TENDER
Definition Train.h:33
@ NO_TENDER
Definition Train.h:32
ATrain(const SpawnParams &params)
Definition Train.cpp:35
size_t PassengerCarsCount
Definition Train.h:39
std::vector< TrainCarStuff > PassengerCars
Definition Train.h:38
int16_t AnotherSmokeTimer
Definition Train.h:51
static size_t _count
Definition Train.h:88
size_t Index
Definition Train.h:47
static ATrain * Spawn(ATrain::TenderStatus tender, size_t numCarriages, f32 speed, uint32_t pathIndex, uint32_t pathPoint, ATrain::SpawnMode spawnMode)
Definition Train.h:65
void SyncComponents(TrainCarStuff *trainCar, s16 orientationY)
Definition Train.cpp:167
uint32_t PathPoint
Definition Train.h:42
virtual bool IsMod() override
Definition Train.cpp:163
virtual void Draw(Camera *camera) override
Definition Train.cpp:307
virtual void DrawEditorProperties() override
Definition Train.cpp:318
s32 SomeFlags
Definition Train.h:44
TrainCarStuff Tender
Definition Train.h:37
int32_t SmokeParticles[128]
Definition Train.h:49
virtual void Tick() override
Definition Train.cpp:185
TrainCarStuff Locomotive
Definition Train.h:36
s32 AddSmoke(s32 trainIndex, Vec3f pos, f32 velocity)
Definition Train.cpp:310
int32_t NextParticlePtr
Definition Train.h:50
SpawnMode
Definition Train.h:26
@ AUTO
Definition Train.h:28
@ POINT
Definition Train.h:27
f32 SomeMultiplier
Definition Train.h:45
Definition World.h:39
f32 Vec3f[3]
Definition common_structs.h:10
Definition camera.h:35
Definition common_structs.h:264
Definition SpawnParams.h:30
Definition vehicles.h:43