1#include "Library/Nature/FireSurfaceFinder.h"
2
3#include "Library/Nature/NatureUtil.h"
4
5namespace al {
6
7FireSurfaceFinder::FireSurfaceFinder(const LiveActor* actor) : mActor(actor) {}
8
9void FireSurfaceFinder::update(const sead::Vector3f& position, const sead::Vector3f& gravity,
10 f32 distance) {
11 sead::Vector3f surfacePos = {0.0f, 0.0f, 0.0f};
12 sead::Vector3f surfaceNormal = {0.0f, 0.0f, 0.0f};
13 mIsFoundSurface =
14 calcFindFireSurface(&surfacePos, &surfaceNormal, mActor, position, gravity, distance);
15
16 if (mIsFoundSurface) {
17 // requires this manual dot product calculation to match
18 mSurface.setDistance(gravity.x * (surfacePos.x - position.x) +
19 gravity.y * (surfacePos.y - position.y) +
20 gravity.z * (surfacePos.z - position.z));
21 mSurface.setPosition(surfacePos);
22 mSurface.setNormal(surfaceNormal);
23 } else {
24 mSurface.setDistance(0.0f);
25 mSurface.setPosition({0.0f, 0.0f, 0.0f});
26 mSurface.setNormal({0.0f, 0.0f, 0.0f});
27 }
28
29 mSurface.set1c({0.0f, 0.0f, 0.0f});
30}
31
32} // namespace al
33