Torch
Loading...
Searching...
No Matches
CollisionFactory.h
1#pragma once
2
3#include <factories/BaseFactory.h>
4#include "collision/SpecialPresetNames.h"
5#include "collision/SurfaceTerrains.h"
6
7namespace SM64 {
8
9struct CollisionVertex {
10 int16_t x;
11 int16_t y;
12 int16_t z;
13 CollisionVertex(int16_t x, int16_t y, int16_t z) : x(x), y(y), z(z) {};
14};
15
16struct CollisionTri {
17 int16_t x;
18 int16_t y;
19 int16_t z;
20 int16_t force;
21 CollisionTri(int16_t x, int16_t y, int16_t z, int16_t force) : x(x), y(y), z(z), force(force) {};
22};
23
24struct CollisionSurface {
25 SurfaceType surfaceType;
26 std::vector<CollisionTri> tris;
27 CollisionSurface(SurfaceType surfaceType, std::vector<CollisionTri> tris) : surfaceType(surfaceType), tris(std::move(tris)) {};
28};
29
30struct SpecialObject {
31 SpecialPresets presetId;
32 int16_t x;
33 int16_t y;
34 int16_t z;
35 std::vector<int16_t> extraParams; // e.g. y-rot
36 SpecialObject(SpecialPresets presetId, int16_t x, int16_t y, int16_t z, std::vector<int16_t> extraParams) : presetId(presetId), x(x), y(y), z(z), extraParams(std::move(extraParams)) {};
37};
38
39struct EnvRegionBox {
40 int16_t id;
41 int16_t x1;
42 int16_t z1;
43 int16_t x2;
44 int16_t z2;
45 int16_t height;
46 EnvRegionBox(int16_t id, int16_t x1, int16_t z1, int16_t x2, int16_t z2, int16_t height) : id(id), x1(x1), z1(z1), x2(x2), z2(z2), height(height) {};
47}; // e.g. water-box
48
49class Collision : public IParsedData {
50public:
51 std::vector<CollisionVertex> mVertices;
52 std::vector<CollisionSurface> mSurfaces;
53 std::vector<SpecialObject> mSpecialObjects;
54 std::vector<EnvRegionBox> mEnvRegionBoxes;
55
56 explicit Collision(std::vector<CollisionVertex> vertices, std::vector<CollisionSurface> surfaces, std::vector<SpecialObject> specialObjects, std::vector<EnvRegionBox> envRegionBoxes) : mVertices(std::move(vertices)), mSurfaces(std::move(surfaces)), mSpecialObjects(std::move(specialObjects)), mEnvRegionBoxes(std::move(envRegionBoxes)) {}
57};
58
60 ExportResult Export(std::ostream& write, std::shared_ptr<IParsedData> data, std::string& entryName, YAML::Node& node, std::string* replacement) override;
61};
62
64 ExportResult Export(std::ostream& write, std::shared_ptr<IParsedData> data, std::string& entryName, YAML::Node& node, std::string* replacement) override;
65};
66
68 ExportResult Export(std::ostream& write, std::shared_ptr<IParsedData> data, std::string& entryName, YAML::Node& node, std::string* replacement) override;
69};
70
72public:
73 std::optional<std::shared_ptr<IParsedData>> parse(std::vector<uint8_t>& buffer, YAML::Node& data) override;
74 std::unordered_map<ExportType, std::shared_ptr<BaseExporter>> GetExporters() override {
75 return {
76 REGISTER(Header, CollisionHeaderExporter)
77 REGISTER(Binary, CollisionBinaryExporter)
78 REGISTER(Code, CollisionCodeExporter)
79 };
80 }
81};
82}
Definition BaseFactory.h:88
Definition BaseFactory.h:94
Definition BaseFactory.h:80
Definition CollisionFactory.h:67
Definition CollisionFactory.h:59
Definition CollisionFactory.h:71
Definition CollisionFactory.h:63