#pragma once #include #include #include #include #include "KingSystem/Utils/Types.h" #include "KingSystem/World/worldJob.h" namespace ksys::world { // TODO class SkyMgr : public Job { SEAD_RTTI_OVERRIDE(SkyMgr, Job) public: struct PrCloud { agl::utl::Parameter mScrollSpd; agl::utl::Parameter mNoiseAdd1; agl::utl::Parameter mNoiseAdd2; agl::utl::Parameter mNoiseAdd1_side; agl::utl::Parameter mNoiseAdd2_side; agl::utl::Parameter mPosDensityChgRange; agl::utl::Parameter mPosDensityChgPower; agl::utl::Parameter mPosDensityChgSpeed; u32 _100; u8 _104; agl::utl::Parameter mWindVecAdd; float _128; u32 _12c; agl::utl::Parameter mBaseTextureNo; agl::utl::Parameter mNoiseTextureNo; agl::utl::Parameter mbCloudTexBlend; agl::utl::Parameter mCloudTexBlendRate; agl::utl::Parameter mBaseTextureNo_Blend; agl::utl::Parameter mNoiseTextureNo_Blend; agl::utl::ParameterObj mObj; }; KSYS_CHECK_SIZE_NX150(PrCloud, 0x220); struct PrCloudV { agl::utl::Parameter mDistotion; agl::utl::Parameter mDensity; agl::utl::Parameter mAlphaMul; agl::utl::Parameter mAlphaThreshold; agl::utl::Parameter mBaseTexScale; agl::utl::Parameter mEmbossWidth; agl::utl::Parameter mEmbossDensity; agl::utl::Parameter mShadowPower; agl::utl::Parameter mHighlightPower; agl::utl::Parameter mHighlightRange; agl::utl::Parameter mHighlightAmbient; agl::utl::Parameter mSkyHeight; agl::utl::Parameter mDensityMax; agl::utl::Parameter mDensityMin; agl::utl::Parameter mDensitySinSeedAdd; float _1e0; bool _1e4; agl::utl::Parameter mAlphaMulMax; agl::utl::Parameter mAlphaMulMin; agl::utl::Parameter mAlphaMulSinSeedAdd; float _248; bool _24c; agl::utl::Parameter mDistotionMax; agl::utl::Parameter mDistotionMin; agl::utl::Parameter mDistotionSinSeedAdd; float _2b0; bool _2b4; agl::utl::Parameter mAlphaThresholdMax; agl::utl::Parameter mAlphaThresholdMin; agl::utl::Parameter mAlphaThresholdSinSeedAdd; float _318; bool _31c; agl::utl::Parameter mSkyHeightMax; agl::utl::Parameter mSkyHeightMin; agl::utl::Parameter mSkyHeightSinSeedAdd; float _380; bool _384; agl::utl::Parameter mBaseTexScaleMax; agl::utl::Parameter mBaseTexScaleMin; agl::utl::Parameter mBaseTexScaleSinSeedAdd; float _3e8; bool _3ec; agl::utl::Parameter mBacklightPowe; agl::utl::Parameter mBacklightRange; agl::utl::Parameter mBacklightParam0; agl::utl::Parameter mBacklightParam1; agl::utl::Parameter mDarkSideNoiseParam; agl::utl::Parameter mLightSideNoiseParam; agl::utl::ParameterObj mObj; }; KSYS_CHECK_SIZE_NX150(PrCloudV, 0x4e0); struct SkyPalette { agl::utl::Parameter mPosDensityChgPower; agl::utl::Parameter mHeight; agl::utl::Parameter mDistotion; agl::utl::Parameter mDensity; agl::utl::Parameter mAlphaMul; agl::utl::Parameter mAlphaThreshold; agl::utl::Parameter mBaseTexScale; agl::utl::Parameter mSkyTexBlendRatio; agl::utl::ParameterObj mObj; }; KSYS_CHECK_SIZE_NX150(SkyPalette, 0x130); static constexpr int NumSkyPalettes = 8; struct CloudPat { agl::utl::Parameter mHeight; agl::utl::Parameter mDistotion; agl::utl::Parameter mDensity; agl::utl::Parameter mAlphaMul; agl::utl::Parameter mAlphaThreshold; agl::utl::Parameter mTexBlendRatio; agl::utl::ParameterObj mObj; }; KSYS_CHECK_SIZE_NX150(CloudPat, 0xf0); static constexpr int NumCloudPats = 3; struct CloudSpd { agl::utl::Parameter mCloudPatNoisePow; agl::utl::Parameter mCloudPatWindPow; agl::utl::ParameterObj mObj; }; KSYS_CHECK_SIZE_NX150(CloudSpd, 0x70); SkyMgr(); ~SkyMgr() override; void init_(sead::Heap* heap) override; void calcType2_() override; JobType getType() const override { return JobType::Sky; } void reset(); void onTimeUpdate(); private: friend class Manager; struct StructA { sead::Vector3f _0; sead::Vector3f _c; sead::Vector3f _18; sead::Vector3f _24; sead::Vector3f _30; sead::Vector3f _3c; }; StructA _20; u16 _68; sead::SafeArray mPrCloud; sead::SafeArray, 3> mPrCloudV; sead::SafeArray mSkyPalette0; sead::SafeArray mSkyPalette2; sead::SafeArray mCloudPat0; sead::SafeArray mCloudPat2; sead::SafeArray mCloudSpd; u8 _3e00[8]; agl::utl::Parameter mSunSlope; agl::utl::Parameter mSunMoonDispDist; agl::utl::Parameter mSunScale; agl::utl::Parameter mMoonScale; agl::utl::Parameter mSunDirYStop; agl::utl::ParameterObj mSunParamObj; sead::Vector3f _3ed8; sead::Vector3f _3ee4; sead::Vector3f _3ef0; sead::Vector3f _3efc; sead::Vector3f _3f08; sead::Vector3f _3f14; sead::Vector2f _3f20; sead::Vector2f _3f28; int _3f30; int _3f34; float _3f38; float _3f3c; float _3f40; float _3f44; float _3f48; float _3f4c; float _3f50; float _3f54; float _3f58; float _3f5c; int _3f60; int _3f64; float _3f68; float _3f6c; float _3f70; float _3f74; float _3f78; float _3f7c; float _3f80; float _3f84; float _3f88; float _3f8c; float _3f90; float _3f94; float _3f98; int _3f9c; int _3fa0; int _3fa4; int _3fa8; bool _3fac; bool _3fad; bool _3fae; bool _3faf; bool _3fb0; bool _3fb1; }; KSYS_CHECK_SIZE_NX150(SkyMgr, 0x3fb8); } // namespace ksys::world