1#include "Project/Fluid/FlowMapCtrl.h"
2
3#include "Library/LiveActor/ActorModelFunction.h"
4#include "Library/Math/MathUtil.h"
5
6namespace al {
7
8FlowMapCtrl::FlowMapCtrl(LiveActor* parentActor) : mParent(parentActor) {
9 setMaterialProgrammable(parentActor);
10}
11
12void FlowMapCtrl::update() {
13 s32 halfInterval = mInterval / 2;
14
15 sead::Vector4f flowParameters;
16 flowParameters.x = mSpeed;
17 flowParameters.y =
18 calcRate01(halfInterval - sead::Mathi::abs(x: halfInterval - mFlowStep), 0.0f, halfInterval);
19 flowParameters.z = calcRate01(mFlowStep, 0.0f, mInterval);
20 flowParameters.w =
21 calcRate01(modi(a: mFlowStep + halfInterval + mInterval, b: mInterval), 0.0f, mInterval);
22
23 s32 materialCount = getMaterialCount(actor: mParent);
24 for (s32 i = 0; i < materialCount; i++) {
25 const char* materialName = getMaterialName(actor: mParent, i);
26 setModelMaterialParameterV4F(actor: mParent, materialName, "flow0_param", flowParameters);
27 }
28
29 mFlowStep++;
30 mFlowStep = modi(a: mFlowStep + mInterval, b: mInterval);
31}
32
33} // namespace al
34