| 1 | #include "Project/Fluid/FlowMapCtrl.h" |
| 2 | |
| 3 | #include "Library/LiveActor/ActorModelFunction.h" |
| 4 | #include "Library/Math/MathUtil.h" |
| 5 | |
| 6 | namespace al { |
| 7 | |
| 8 | FlowMapCtrl::FlowMapCtrl(LiveActor* parentActor) : mParent(parentActor) { |
| 9 | setMaterialProgrammable(parentActor); |
| 10 | } |
| 11 | |
| 12 | void 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 | |