2
0
mirror of https://github.com/AxioDL/metaforce.git synced 2025-12-09 21:47:59 +00:00

Various fmadds related fixes (may be more)

This commit is contained in:
2017-08-04 06:48:48 -07:00
parent 2f2ff96965
commit 69187353b9
5 changed files with 39 additions and 37 deletions

View File

@@ -20,38 +20,42 @@ CFluidUVMotion::CFluidUVMotion(float, float)
void CFluidUVMotion::CalculateFluidTextureOffset(float f31, float offsets[3][2])
{
float f29 = f31 * x4c_;
float f28 = f29 * zeus::fastCosF(x50_);
f29 = f29 / zeus::fastSinF(x50_);
float f28 = (f31 * x4c_) * zeus::fastCosF(x50_);
float f29 = (f31 * x4c_) / zeus::fastSinF(x50_);
for (u32 i = 0 ; i<x0_fluidLayers.size() ; ++i)
{
const SFluidLayerMotion& layer = x0_fluidLayers[i];
float f30 = f31 / layer.x4_a;
float f25;
float f26;
float f30 = f31 * layer.x4_a;
float f1 = f30 - std::floor(f30);
float f27;
float f26;
switch(layer.x0_motion)
{
case EFluidUVMotion::Zero:
f26 = 0.f;
f27 = 0.f;
break;
case EFluidUVMotion::One:
f30 = (M_PIF * 2.f) * (f30 - zeus::floorF(f30));
f27 = (M_PIF * 2.f) * zeus::fastSinF(f30);
f26 = layer.xc_c * zeus::fastSinF(f30);
break;
{
f30 = (M_PIF * 2) * f1;
f27 = layer.xc_c * zeus::fastSinF(f30);
f26 = layer.xc_c * zeus::fastCosF(f30);
}
break;
case EFluidUVMotion::Two:
{
f27 = 0.f;
f26 = zeus::fastCosF((M_PIF * 2.f) * layer.xc_c);
f26 = layer.xc_c * zeus::fastCosF((M_PIF * 2) * f1);
}
break;
default:
f27 = f26 = 0.f;
break;
}
f25 = (f26 * ((f27 * f29) + zeus::fastCosF(layer.x8_b))) + zeus::fastSinF(layer.x8_b);
f26 = (f27 * ((f26 * f28) + zeus::fastCosF(layer.x8_b))) + zeus::fastSinF(layer.x8_b);
offsets[i][0] = f25 - zeus::floorF(f25);
offsets[i][1] = f26 - zeus::floorF(f26);
float x = f26 * zeus::fastSinF(layer.x8_b) + (f27 * zeus::fastCosF(layer.x8_b) + f29);
float y = f27 * zeus::fastSinF(layer.x8_b) + (f26 * zeus::fastCosF(layer.x8_b) + f28);
offsets[i][0] = float(x - floor(x));
offsets[i][1] = float(y - floor(y));
}
}
}