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
7
namespace
SM64 {
8
9
struct
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
16
struct
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
24
struct
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
30
struct
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
39
struct
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
49
class
Collision :
public
IParsedData
{
50
public
:
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
59
class
CollisionCodeExporter
:
public
BaseExporter
{
60
ExportResult Export(std::ostream& write, std::shared_ptr<IParsedData> data, std::string& entryName, YAML::Node& node, std::string* replacement)
override
;
61
};
62
63
class
CollisionHeaderExporter
:
public
BaseExporter
{
64
ExportResult Export(std::ostream& write, std::shared_ptr<IParsedData> data, std::string& entryName, YAML::Node& node, std::string* replacement)
override
;
65
};
66
67
class
CollisionBinaryExporter
:
public
BaseExporter
{
68
ExportResult Export(std::ostream& write, std::shared_ptr<IParsedData> data, std::string& entryName, YAML::Node& node, std::string* replacement)
override
;
69
};
70
71
class
CollisionFactory
:
public
BaseFactory
{
72
public
:
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
}
BaseExporter
Definition
BaseFactory.h:88
BaseFactory
Definition
BaseFactory.h:94
IParsedData
Definition
BaseFactory.h:80
SM64::CollisionBinaryExporter
Definition
CollisionFactory.h:67
SM64::CollisionCodeExporter
Definition
CollisionFactory.h:59
SM64::CollisionFactory
Definition
CollisionFactory.h:71
SM64::CollisionHeaderExporter
Definition
CollisionFactory.h:63
src
factories
sm64
CollisionFactory.h
Generated by
1.14.0