#pragma once #include #include #include #include #include #include #include #include namespace ksys::chm { class SystemConfig : public agl::utl::IParameterIO, public sead::hostio::Node { SEAD_SINGLETON_DISPOSER(SystemConfig) SystemConfig() : agl::utl::IParameterIO("chmres", 0) {} ~SystemConfig() override; public: struct Element : agl::utl::IParameterObj, sead::hostio::Node { Element(); ~Element() override; agl::utl::Parameter> name; agl::utl::Parameter> label; agl::utl::Parameter effect_type; agl::utl::Parameter attribute; agl::utl::Parameter life_frames; agl::utl::Parameter temperature; agl::utl::Parameter type; agl::utl::Parameter wetting_rate; agl::utl::Parameter wind_speed; agl::utl::Parameter electric_charge; agl::utl::Parameter shock_wave_speed; agl::utl::Parameter fire_level; agl::utl::Parameter moisture; }; struct Material : agl::utl::IParameterObj, sead::hostio::Node { Material(); ~Material() override; agl::utl::Parameter> id; agl::utl::Parameter> label; agl::utl::Parameter attribute; agl::utl::Parameter heat_capacity; agl::utl::Parameter thermal_conductivity; agl::utl::Parameter electrical_resistivity; agl::utl::Parameter electrical_capacitance; agl::utl::Parameter electromotive_force; agl::utl::Parameter fire_proof_level; agl::utl::Parameter ignition_point; agl::utl::Parameter burn_speed; agl::utl::Parameter wetting_amount; agl::utl::Parameter wind_force_remain_rate; agl::utl::Parameter> burn_res_element_name; agl::utl::Parameter> warm_res_element_name; agl::utl::Parameter> exp_res_element_name; agl::utl::Parameter> exp_res_element_name1; agl::utl::Parameter> electricity_res_element_name; agl::utl::Parameter> ice_magic_res_element_name; agl::utl::Parameter> water_res_element_name; }; struct World : agl::utl::IParameterObj, sead::hostio::Node { World(); ~World() override; agl::utl::Parameter> id; agl::utl::Parameter> label; agl::utl::Parameter evaporation_speed_rate; agl::utl::Parameter heat_transfer_speed_rate; agl::utl::Parameter fire_heat_transfer_speed_rate; agl::utl::Parameter conduction_speed_rate_log; agl::utl::Parameter burn_speed_rate; agl::utl::Parameter fire_extra_radius; agl::utl::Parameter player_fire_margin; agl::utl::Parameter electricity_extra_radius_rate; agl::utl::Parameter electric_water_extra_radius_rate; agl::utl::Parameter min_ice_size; agl::utl::Parameter ice_heat_cheat_threshold; agl::utl::Parameter ice_heat_cheat_rate; agl::utl::Parameter ice_melt_ratio_env_temp; agl::utl::Parameter ice_melt_ratio_warm_air; agl::utl::Parameter ice_melt_ratio_fire; agl::utl::Parameter ice_melt_ratio_fire2; agl::utl::Parameter wind_lift_rate; agl::utl::Parameter lightning_distance; agl::utl::Parameter character_ignition_count; agl::utl::Parameter object_ignition_count; agl::utl::Parameter offensive_rigid_radius; }; struct List : agl::utl::IParameterList, sead::hostio::Node { ~List() override { ; } }; void init(sead::Heap* heap); const World& getWorld(const sead::SafeString& name) const; const Material& getMaterial(const sead::SafeString& name) const; const Element& getElement(const sead::SafeString& name) const; private: sead::Buffer mMaterials; sead::Buffer mElements; sead::Buffer mWorlds; Material mDummyMaterial; Element mDummyElement; World mDummyWorld; List mWorldList; List mMaterialList; List mElementList; }; } // namespace ksys::chm