1#pragma once
2
3#include <basis/seadTypes.h>
4#include <math/seadBoundBox.h>
5#include <math/seadMatrix.h>
6#include <math/seadQuat.h>
7#include <math/seadVector.h>
8
9namespace al {
10class AreaObj;
11class FireSurfaceFinder;
12class IUseFluidSurface;
13class LiveActor;
14class NatureDirector;
15class WaterSurfaceFinder;
16
17void registerFluidSurfaceObj(IUseFluidSurface*, const LiveActor*);
18bool isExistFluidSurface(const LiveActor*);
19void setWaterRippleFieldScale(const LiveActor*, f32);
20bool isInWaterPos(const LiveActor*, const sead::Vector3f&);
21bool isInWater(const LiveActor*);
22bool isInWaterNoIgnore(const LiveActor*, const sead::Vector3f&);
23bool isInSodaWater(const LiveActor*, const sead::Vector3f&);
24bool isInIceWaterPos(const LiveActor*, const sead::Vector3f&);
25bool isInIceWater(const LiveActor*);
26bool isInFirePos(const LiveActor*, const sead::Vector3f&);
27bool isInFire(const LiveActor*);
28bool isInCloudPos(const LiveActor*, const sead::Vector3f&);
29bool isInCloud(const LiveActor*);
30bool tryAddRippleMiddle(const LiveActor*);
31bool tryAddRippleLarge(const LiveActor*);
32bool isWaterAreaIgnore(const AreaObj*);
33const char* getFireMaterialCode(const LiveActor*);
34
35bool calcFindWaterSurface(sead::Vector3f*, sead::Vector3f*, const LiveActor*, const sead::Vector3f&,
36 const sead::Vector3f&, f32);
37bool calcFindWaterSurfaceFlat(sead::Vector3f*, sead::Vector3f*, const LiveActor*,
38 const sead::Vector3f&, const sead::Vector3f&, f32);
39bool calcFindWaterSurfaceDisplacement(sead::Vector3f*, sead::Vector3f*, const LiveActor*,
40 const sead::Vector3f&, const sead::Vector3f&, f32);
41bool calcFindWaterSurfaceOverGround(sead::Vector3f*, sead::Vector3f*, const LiveActor*,
42 const sead::Vector3f&, const sead::Vector3f&, f32);
43bool calcFindFireSurface(sead::Vector3f*, sead::Vector3f*, const LiveActor*, const sead::Vector3f&,
44 const sead::Vector3f&, f32);
45bool calcFindCloudSurface(sead::Vector3f*, sead::Vector3f*, const LiveActor*, const sead::Vector3f&,
46 const sead::Vector3f&, f32);
47
48bool tryAddRipple(const NatureDirector*, const sead::Vector3f&, f32, f32);
49bool tryAddRippleTiny(const LiveActor*);
50bool tryAddRippleSmall(const LiveActor*, const sead::Vector3f&);
51bool tryAddRippleTiny(const LiveActor*, const sead::Vector3f&);
52bool tryAddRippleSmall(const LiveActor*);
53bool tryAddRippleMiddle(const LiveActor*);
54bool tryAddRippleMiddle(const LiveActor*, const sead::Vector3f&);
55bool tryAddRippleLarge(const LiveActor*);
56bool tryAddRippleLarge(const LiveActor*, const sead::Vector3f&);
57bool tryAddRippleWithRange(const LiveActor*, const sead::Vector3f&, f32, f32, f32, f32);
58bool tryAddRipple(const LiveActor*, const sead::Vector3f&, f32, f32);
59bool tryAddRippleRandomBlur(const LiveActor*, const sead::Vector3f&, f32, f32, f32);
60bool tryAddQuadRipple(const LiveActor*, const sead::Vector3f&, const sead::Vector3f&,
61 const sead::Vector3f&, const sead::Vector3f&, f32);
62bool tryAddQuadRipple(const LiveActor*, const sead::BoundBox3f&, const sead::Vector3f&,
63 const sead::Quatf&, f32, f32);
64bool tryAddQuadRippleByBoxRotateY(const LiveActor*, const sead::BoundBox3f&, const sead::Vector3f&,
65 f32, f32, f32);
66
67void approachWaterSurfaceSpringDumper(LiveActor*, const WaterSurfaceFinder*, f32, f32, f32, f32,
68 f32);
69void approachFireSurfaceSpringDumper(LiveActor*, const FireSurfaceFinder*, f32, f32, f32, f32, f32);
70void approachWaterSurfaceRate(LiveActor*, const WaterSurfaceFinder*, f32, f32, f32);
71void approachFireSurfaceRate(LiveActor*, const FireSurfaceFinder*, f32, f32, f32);
72
73void keepWaterSurfaceHeight(LiveActor*, const WaterSurfaceFinder*, f32);
74void syncWaterSurfaceTrans(LiveActor*, const WaterSurfaceFinder*);
75void syncFireSurfaceTrans(LiveActor*, const FireSurfaceFinder*);
76void syncWaterSurfaceTransH(LiveActor*, const WaterSurfaceFinder*);
77void blendWaterSurfaceTransH(LiveActor*, const WaterSurfaceFinder*, f32);
78void syncWaterSurfaceUp(LiveActor*, const WaterSurfaceFinder*, f32);
79void syncFireSurfaceUp(LiveActor*, const FireSurfaceFinder*, f32);
80void calcMatrixFromActorPoseAndWaterSurfaceH(sead::Matrix34f*, const WaterSurfaceFinder*,
81 const LiveActor*);
82
83bool calcFindFireSurface(sead::Vector3f*, sead::Vector3f*, const LiveActor*, const sead::Vector3f&,
84 const sead::Vector3f&, f32);
85} // namespace al
86
87namespace alNatureUtil {
88
89bool calcFindDistanceWaterSurfaceToGround(f32*, const al::LiveActor*, const sead::Vector3f&, f32);
90
91} // namespace alNatureUtil
92