SMG-Decomp
A decompilation of Super Mario Galaxy 1
Loading...
Searching...
No Matches
RailGraph.cpp
1#include "Game/Map/RailGraph.hpp"
2#include "Game/Map/RailGraphEdge.hpp"
3#include "Game/Map/RailGraphIter.hpp"
4#include "Game/Map/RailGraphNode.hpp"
5
6RailGraph::RailGraph() {
7 mNodes = 0;
8 mNodeCount = 0;
9 _8 = 0;
10 mEdges = 0;
11 mEdgeCount = 0;
12 _14 = 0;
13
14 mNodes = new RailGraphNode[0x100];
15 mNodeCount = 0x100;
16 mEdges = new RailGraphEdge[0x100];
17 mEdgeCount = 0x200;
18}
19
20s32 RailGraph::addNode(const TVec3f &rVec) {
21 RailGraphNode node;
22 node._0.x = rVec.x;
23 node._0.y = rVec.y;
24 node._0.z = rVec.z;
25 s32 cnt = _8;
26 _8 = cnt + 1;
27
28 RailGraphNode* nodes = &mNodes[cnt];
29 nodes->_0.setInlinePS(node._0);
30 nodes->_C = node._C;
31 nodes->_10 = node._10;
32 return _8 - 1;
33}
34
35void RailGraph::connectNodeTwoWay(s32 a1, s32 a2, const RailGraphEdge *pEdge) {
36 RailGraphEdge edge;
37
38 if (pEdge) {
39 edge = *pEdge;
40 }
41
42 edge.clearConnectInfo();
43 edge._4 = a1;
44 edge._8 = a2;
45 edge.mDistance = PSVECDistance((const Vec*)&mNodes[a1]._0, (const Vec*)&mNodes[a2]._0);
46 s32 cnt = _14;
47 _14 = cnt + 1;
48 mEdges[cnt] = edge;
49 s32 edgeIdx = _14 - 1;
50 connectEdgeToNode(a1, edgeIdx);
51 connectEdgeToNode(a2, edgeIdx);
52}
53
54RailGraphNode* RailGraph::getNode(s32 idx) const {
55 return &mNodes[idx];
56}
57
58RailGraphEdge* RailGraph::getEdge(s32 idx) const {
59 return &mEdges[idx];
60}
61
62bool RailGraph::isValidEdge(s32 edgeIdx) const {
63 bool ret = false;
64
65 if (edgeIdx >= 0 && edgeIdx < _14) {
66 ret = true;
67 }
68
69 return ret;
70}
71
72void RailGraph::connectEdgeToNode(s32 a1, s32 a2) {
73 RailGraphNode* node = &mNodes[a1];
74 s32 val = node->_C;
75
76 if (val == -1) {
77 node->_C = a2;
78 }
79 else {
80 s32 next_edge = mEdges[val].getNextEdge(a1);
81
82 while (next_edge != -1) {
83 val = next_edge;
84 next_edge = mEdges[next_edge].getNextEdge(a1);
85 }
86
87 mEdges[val].setNextEdge(a2, a1);
88 }
89
90 mNodes[a1]._10++;
91}
92
93RailGraphIter RailGraph::getIterator() const {
94 return RailGraphIter(this);
95}