summaryrefslogtreecommitdiff
path: root/src/engine/particles
diff options
context:
space:
mode:
authorMegaMech <inkstudios1@hotmail.com>2024-12-16 16:42:17 -0700
committerMegaMech <inkstudios1@hotmail.com>2024-12-16 16:42:17 -0700
commit60014ec46695fb964a685d6a17d5fc63e02ab7b8 (patch)
tree7b7f58cb395ce42008c5e08d30d43eff2de0743d /src/engine/particles
parent7f22f75db7fa7a1b2149bc953d2a159c52bc5e8b (diff)
More changes
Diffstat (limited to 'src/engine/particles')
-rw-r--r--src/engine/particles/ParticleEmitter.cpp13
-rw-r--r--src/engine/particles/ParticleEmitter.h23
-rw-r--r--src/engine/particles/StarEmitter.cpp31
-rw-r--r--src/engine/particles/StarEmitter.h42
4 files changed, 109 insertions, 0 deletions
diff --git a/src/engine/particles/ParticleEmitter.cpp b/src/engine/particles/ParticleEmitter.cpp
new file mode 100644
index 000000000..5154abf56
--- /dev/null
+++ b/src/engine/particles/ParticleEmitter.cpp
@@ -0,0 +1,13 @@
+#include <libultraship.h>
+
+#include "ParticleEmitter.h"
+
+
+
+ParticleEmitter::ParticleEmitter() {}
+
+ // Virtual functions to be overridden by derived classes
+void ParticleEmitter::Tick() { }
+void ParticleEmitter::Draw(s32 cameraId) { }
+
+bool ParticleEmitter::IsMod() { return false; }
diff --git a/src/engine/particles/ParticleEmitter.h b/src/engine/particles/ParticleEmitter.h
new file mode 100644
index 000000000..1a71164d1
--- /dev/null
+++ b/src/engine/particles/ParticleEmitter.h
@@ -0,0 +1,23 @@
+#pragma once
+
+#include <libultraship.h>
+
+extern "C" {
+#include "macros.h"
+#include "main.h"
+#include "camera.h"
+#include "common_structs.h"
+
+
+class ParticleEmitter {
+public:
+ virtual ~ParticleEmitter() = default; // Virtual destructor for proper cleanup in derived classes
+
+ explicit ParticleEmitter();
+
+ virtual void Tick();
+ virtual void Draw(s32 cameraId);
+ virtual bool IsMod();
+};
+
+} \ No newline at end of file
diff --git a/src/engine/particles/StarEmitter.cpp b/src/engine/particles/StarEmitter.cpp
new file mode 100644
index 000000000..b717f177d
--- /dev/null
+++ b/src/engine/particles/StarEmitter.cpp
@@ -0,0 +1,31 @@
+
+
+#include "StarEmitter.h"
+
+extern "C" {
+#include "render_objects.h"
+#include "common_data.h"
+#include "code_80057C60.h"
+}
+
+void StarEmitter::Tick() {
+
+}
+
+void StarEmitter::Draw(s32 cameraId) { // func_80054BE8
+ s32 var_s0;
+ s32 temp_a0;
+ Camera* camera;
+
+ camera = &camera1[cameraId];
+ gSPDisplayList(gDisplayListHead++, (Gfx*)D_0D007AE0);
+ load_texture_block_ia8_nomirror(D_8018D488, 0x00000020, 0x00000020);
+ func_8004B35C(0x000000FF, 0x000000FF, 0, 0x000000FF);
+ D_80183E80[0] = 0;
+ for (var_s0 = 0; var_s0 < gObjectParticle3_SIZE; var_s0++) {
+ temp_a0 = gObjectParticle3[var_s0];
+ if ((temp_a0 != -1) && (gObjectList[temp_a0].state >= 2)) {
+ func_80054AFC(temp_a0, camera->pos);
+ }
+ }
+}
diff --git a/src/engine/particles/StarEmitter.h b/src/engine/particles/StarEmitter.h
new file mode 100644
index 000000000..20841598c
--- /dev/null
+++ b/src/engine/particles/StarEmitter.h
@@ -0,0 +1,42 @@
+#pragma once
+
+#include <libultraship.h>
+#include <vector>
+#include "ParticleEmitter.h"
+
+extern "C" {
+#include "macros.h"
+#include "main.h"
+#include "vehicles.h"
+#include "waypoints.h"
+#include "common_structs.h"
+#include "objects.h"
+#include "course_offsets.h"
+#include "some_data.h"
+}
+
+/**
+ * Used in the podium ceremony when the trophy appears
+ */
+class StarEmitter : public ParticleEmitter {
+public:
+ enum Behaviour : uint16_t {
+ };
+
+public:
+ f32 Diameter = 0.0f; // Waddle in a circle around the spawn point at this diameter.
+ uint16_t MirrorModeAngleOffset;
+
+ explicit StarEmitter(Vec3f pos);
+
+ virtual void Tick() override;
+ virtual void Draw(s32 cameraId) override;
+ void func_80086700(s32 objectIndex);
+ void func_80086940(s32 objectIndex);
+ void func_80086C14(s32 objectIndex);
+ void func_80086C6C(s32 objectIndex);
+
+private:
+
+ s32 _idx;
+};