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