20 public Dictionary<GameWidget, Dictionary<Point2, PrecipitationShaftParticleSystem>>
m_activeShafts = [];
22 public List<PrecipitationShaftParticleSystem>
m_toRemove = [];
97 y => (int)MathF.Round(y > 64 ? -0.0008f *
MathUtils.
Sqr(y - 64) : 0.1f * (64 - y));
104 int seasonalTemperature =
SubsystemTerrain.Terrain.GetSeasonalTemperature(shaftValue);
111 result.YLimit = num + 1;
114 int seasonalHumidity =
SubsystemTerrain.Terrain.GetSeasonalHumidity(shaftValue);
115 if (seasonalTemperature <= 8
116 || seasonalHumidity >= 8) {
120 result.YLimit = num + 1;
124 result.Intensity = 0f;
126 result.YLimit = num + 1;
134 for (
int i = 0; i < 300; i++) {
137 int num5 = num + num3;
138 int num6 = num2 + num4;
141 || num7 > vector.Value.
Y) {
142 vector =
new Vector3(num5, num7, num6);
145 if (vector.HasValue) {
175 int num2 = num * num;
179 Color rainColor =
new(b, b, b);
180 Color snowColor =
new(b2, b2, b2);
182 "SetRainAndSnowColor",
184 modloader.SetRainAndSnowColor(ref rainColor, ref snowColor);
208 activeShafts.Remove(item.
Point);
210 for (
int i = point.X - num; i <= point.X + num; i++) {
211 for (
int j = point.Y - num; j <= point.Y + num; j++) {
213 Point2 point2 =
new(i, j);
214 if (!activeShafts.ContainsKey(point2)) {
217 activeShafts.Add(point2, precipitationShaftParticleSystem);
244 m_fogStartTime = valuesDictionary.GetValue<
double>(
"FogStartTime");
245 m_fogEndTime = valuesDictionary.GetValue<
double>(
"FogEndTime");
246 m_fogRampTime = valuesDictionary.GetValue(
"FogRampTime", 25f);
247 FogIntensity = valuesDictionary.GetValue(
"FogIntensity", 0f);
248 FogProgress = valuesDictionary.GetValue(
"FogProgress", 0f);
250 m_rainSound.IsLooped =
true;
251 m_rainSound.Volume = 0f;
257 for (
int i = -7; i <= 7; i++) {
258 for (
int j = -7; j <= 7; j++) {
259 float distance = MathF.Sqrt(i * i + j * j);
263 m_subsystemBlocksScanner.ScanningChunkCompleted += delegate(
TerrainChunk chunk) {
268 SubsystemTerrain.TerrainUpdater.ChunkInitialized += delegate(
TerrainChunk chunk) {
285 valuesDictionary.SetValue(
"FogIntensity",
FogIntensity);
286 valuesDictionary.SetValue(
"FogProgress",
FogProgress);
293 float probability = 0f;
354 for (
int i = num5; i <= num7; i++) {
355 for (
int j = num6; j <= num8; j++) {
358 && precipitationShaftInfo.
Intensity > 0f) {
362 float num9 = vector.X - listenerPosition.
X;
363 float num10 = 8f * (vector.Y - listenerPosition.
Y);
364 float num11 = vector.Z - listenerPosition.
Z;
365 float distance = MathF.Sqrt(num9 * num9 + num10 * num10 + num11 * num11);
392 for (
int i = 0; i < allocatedChunks.Length; i++) {
398 int num = terrainChunk.Origin.X +
m_random.Int(0, 15);
399 int num2 = terrainChunk.Origin.Y +
m_random.Int(0, 15);
401 for (
int j = num - 8; j < num + 8; j++) {
402 for (
int k = num2 - 8; k < num2 + 8; k++) {
405 || topHeight > vector.Value.
Y) {
406 vector =
new Vector3(j, topHeight, k);
410 if (vector.HasValue) {
447 if (!
m_activeShafts.TryGetValue(gameWidget, out Dictionary<Point2, PrecipitationShaftParticleSystem> value)) {
466 int num5 = chunk.Origin.X + num;
468 int num7 = chunk.Origin.Y + num2;
471 if (!
m_random.Bool(freezeProbability)) {
475 &&
SubsystemTerrain.TerrainContentsGenerator.CalculateOceanShoreDistance(num5, num7) > -35f) {
492 if ((!forceDepositSnow && !(precipitationShaftInfo.
Intensity > 0.5f))
493 || num6 + 1 >= 255) {
508 if (!
m_random.Bool(thawProbability)) {
static float Remainder(float x, float y)
static float Saturate(float x)
static int Max(int x1, int x2)
static float Lerp(float x1, float x2, float f)
static bool PeriodicEvent(double period, double offset)
static float MinAudibleVolume
static FluidBlock[] FluidBlocks
static float SoundsVolume
static int VisibilityRange
static bool CanSupportSnow(int value)
static bool CanBeReplacedBySnow(int value)
override void Load(ValuesDictionary valuesDictionary)
static Func< int, int, bool > ShaftHasSnowOnIce
virtual void ManualPrecipitationStart()
SubsystemBlocksScanner m_subsystemBlocksScanner
float m_precipitationRampTime
float m_lightningIntensity
virtual void FreezeThawAndDepositSnow(TerrainChunk chunk, float freezeProbability, float thawProbability, bool forceDepositSnow)
virtual bool IsPrecipitationStarted
virtual RainSplashParticleSystem RainSplashParticleSystem
List< PrecipitationShaftParticleSystem > m_toRemove
virtual void UpdatePrecipitation(float dt)
static Func< int, int > GetTemperatureAdjustmentAtHeight
SubsystemSeasons m_subsystemSeasons
static Func< int, int, bool > IsPlaceFrozen
SubsystemGameInfo m_subsystemGameInfo
virtual float FogProgress
virtual void Update(float dt)
const int m_rainSoundRadius
static int[] m_drawOrders
virtual void ManualPrecipitationEnd()
virtual PrecipitationShaftInfo GetPrecipitationShaftInfo(int x, int z)
virtual float PrecipitationIntensity
SubsystemAudio m_subsystemAudio
double m_precipitationStartTime
override void Save(ValuesDictionary valuesDictionary)
virtual void UpdateFog(float dt)
float m_targetRainSoundVolume
virtual Dictionary< Point2, PrecipitationShaftParticleSystem > GetActiveShafts(GameWidget gameWidget)
virtual bool IsFogStarted
double m_precipitationEndTime
SubsystemParticles m_subsystemParticles
Dictionary< GameWidget, Dictionary< Point2, PrecipitationShaftParticleSystem > > m_activeShafts
Dictionary< GameWidget, Vector2?> m_lastShaftsUpdatePositions
SubsystemTerrain SubsystemTerrain
virtual void ManualFogStart()
virtual void UpdateLightning(float dt)
virtual void ManualFogEnd()
SubsystemTime SubsystemTime
SubsystemSky SubsystemSky
virtual float FogIntensity
virtual SnowSplashParticleSystem SnowSplashParticleSystem
virtual void Draw(Camera camera, int drawOrder)
virtual void ManualLightingStrike(Vector3 position, Vector3 direction)
virtual int GetCellValueFast(int index)
virtual int GetTopHeightFast(int x, int z)
static int ExtractContents(int value)
static int ToCell(float x)
virtual int GetCellContents(int x, int y, int z)
static int ExtractTopHeight(int value)
static int MakeBlockValue(int contents)
ValuesDictionary ValuesDictionary
static void HookAction(string HookName, Func< ModLoader, bool > action)
执行Hook
static float DistanceSquared(Vector2 v1, Vector2 v2)