mirror of
https://github.com/AxioDL/metaforce.git
synced 2025-05-14 00:31:21 +00:00
Same behavior, but allows for easier use of API and makes it harder to misuse. It also makes it easier for analysis to determine out of bounds, given we leverage std::array rather than a pointer that causes arrays to decay and lose their size information.
57 lines
1.6 KiB
C++
57 lines
1.6 KiB
C++
#pragma once
|
|
|
|
#include <array>
|
|
|
|
#include "Runtime/RetroTypes.hpp"
|
|
#include "Runtime/rstl.hpp"
|
|
|
|
namespace urde {
|
|
class CFluidUVMotion {
|
|
public:
|
|
enum class EFluidUVMotion {
|
|
Linear,
|
|
Circular,
|
|
Oscillate,
|
|
};
|
|
|
|
struct SFluidLayerMotion {
|
|
EFluidUVMotion x0_motion = EFluidUVMotion::Linear;
|
|
float x4_ooTimeToWrap = 0.16666667f;
|
|
float x8_orientation = 0.f;
|
|
float xc_magnitude = 1.f;
|
|
float x10_uvMul = 5.f;
|
|
float x14_uvScale = 0.2f;
|
|
|
|
SFluidLayerMotion() = default;
|
|
SFluidLayerMotion(EFluidUVMotion motion, float timeToWrap, float orientation, float magnitude, float uvMul)
|
|
: x0_motion(motion)
|
|
, x4_ooTimeToWrap(1.f / timeToWrap)
|
|
, x8_orientation(orientation)
|
|
, xc_magnitude(magnitude)
|
|
, x10_uvMul(uvMul)
|
|
, x14_uvScale(1.f / uvMul) {}
|
|
|
|
float GetUVScale() const { return x14_uvScale; }
|
|
};
|
|
|
|
private:
|
|
rstl::reserved_vector<SFluidLayerMotion, 3> x0_fluidLayers;
|
|
float x4c_ooTimeToWrap;
|
|
float x50_orientation;
|
|
|
|
public:
|
|
using FluidOffsets = std::array<std::array<float, 2>, 3>;
|
|
|
|
CFluidUVMotion(float timeToWrap, float orientation, const SFluidLayerMotion& colorLayer,
|
|
const SFluidLayerMotion& pattern1Layer, const SFluidLayerMotion& pattern2Layer);
|
|
CFluidUVMotion(float timeToWrap, float orientation);
|
|
|
|
const rstl::reserved_vector<SFluidLayerMotion, 3>& GetFluidLayers() const { return x0_fluidLayers; }
|
|
float GetOrientation() const { return x50_orientation; }
|
|
float GetOOTimeToWrapTexPage() const { return x4c_ooTimeToWrap; }
|
|
|
|
// In game binaries this uses an out pointer instead of return by value.
|
|
FluidOffsets CalculateFluidTextureOffset(float t) const;
|
|
};
|
|
} // namespace urde
|