// Decompiled with JetBrains decompiler // Type: Terraria.GameContent.Skies.AmbientSky // Assembly: Terraria, Version=1.4.0.5, Culture=neutral, PublicKeyToken=null // MVID: 67F9E73E-0A81-4937-A22C-5515CD405A83 // Assembly location: C:\Users\mikeyisbaeyt\Downloads\depotdownloader-2.4.5\depots\105601\6707058\Terraria.exe using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using ReLogic.Content; using ReLogic.Utilities; using System; using System.Collections.Generic; using Terraria.DataStructures; using Terraria.GameContent.Ambience; using Terraria.Graphics; using Terraria.Graphics.Effects; using Terraria.ID; using Terraria.Utilities; namespace Terraria.GameContent.Skies { public class AmbientSky : CustomSky { private bool _isActive; private readonly SlotVector _entities = new SlotVector(500); private int _frameCounter; public override void Activate(Vector2 position, params object[] args) => this._isActive = true; public override void Deactivate(params object[] args) => this._isActive = false; private bool AnActiveSkyConflictsWithAmbience() => SkyManager.Instance["MonolithMoonLord"].IsActive() || SkyManager.Instance["MoonLord"].IsActive(); public override void Update(GameTime gameTime) { if (Main.gamePaused) return; ++this._frameCounter; if (Main.netMode != 2 && this.AnActiveSkyConflictsWithAmbience() && SkyManager.Instance["Ambience"].IsActive()) SkyManager.Instance.Deactivate("Ambience"); foreach (SlotVector.ItemPair entity in (IEnumerable.ItemPair>) this._entities) { // ISSUE: variable of the null type __Null local = entity.Value; ((AmbientSky.SkyEntity) local).Update(this._frameCounter); if (!((AmbientSky.SkyEntity) local).IsActive) { this._entities.Remove((SlotId) entity.Id); if (Main.netMode != 2 && this._entities.Count == 0 && SkyManager.Instance["Ambience"].IsActive()) SkyManager.Instance.Deactivate("Ambience"); } } } public override void Draw(SpriteBatch spriteBatch, float minDepth, float maxDepth) { if (Main.gameMenu && Main.netMode == 0 && SkyManager.Instance["Ambience"].IsActive()) { this._entities.Clear(); SkyManager.Instance.Deactivate("Ambience"); } foreach (SlotVector.ItemPair entity in (IEnumerable.ItemPair>) this._entities) ((AmbientSky.SkyEntity) entity.Value).Draw(spriteBatch, 3f, minDepth, maxDepth); } public override bool IsActive() => this._isActive; public override void Reset() { } public void Spawn(Player player, SkyEntityType type, int seed) { FastRandom random = new FastRandom(seed); switch (type) { case SkyEntityType.BirdsV: this._entities.Add((AmbientSky.SkyEntity) new AmbientSky.BirdsPackSkyEntity(player, random)); break; case SkyEntityType.Wyvern: this._entities.Add((AmbientSky.SkyEntity) new AmbientSky.WyvernSkyEntity(player, random)); break; case SkyEntityType.Airship: this._entities.Add((AmbientSky.SkyEntity) new AmbientSky.AirshipSkyEntity(player, random)); break; case SkyEntityType.AirBalloon: this._entities.Add((AmbientSky.SkyEntity) new AmbientSky.AirBalloonSkyEntity(player, random)); break; case SkyEntityType.Eyeball: this._entities.Add((AmbientSky.SkyEntity) new AmbientSky.EOCSkyEntity(player, random)); break; case SkyEntityType.Meteor: this._entities.Add((AmbientSky.SkyEntity) new AmbientSky.MeteorSkyEntity(player, random)); break; case SkyEntityType.Bats: List group1 = AmbientSky.BatsGroupSkyEntity.CreateGroup(player, random); for (int index = 0; index < group1.Count; ++index) this._entities.Add((AmbientSky.SkyEntity) group1[index]); break; case SkyEntityType.Butterflies: this._entities.Add((AmbientSky.SkyEntity) new AmbientSky.ButterfliesSkyEntity(player, random)); break; case SkyEntityType.LostKite: this._entities.Add((AmbientSky.SkyEntity) new AmbientSky.LostKiteSkyEntity(player, random)); break; case SkyEntityType.Vulture: this._entities.Add((AmbientSky.SkyEntity) new AmbientSky.VultureSkyEntity(player, random)); break; case SkyEntityType.PixiePosse: this._entities.Add((AmbientSky.SkyEntity) new AmbientSky.PixiePosseSkyEntity(player, random)); break; case SkyEntityType.Seagulls: List group2 = AmbientSky.SeagullsGroupSkyEntity.CreateGroup(player, random); for (int index = 0; index < group2.Count; ++index) this._entities.Add((AmbientSky.SkyEntity) group2[index]); break; case SkyEntityType.SlimeBalloons: List group3 = AmbientSky.SlimeBalloonGroupSkyEntity.CreateGroup(player, random); for (int index = 0; index < group3.Count; ++index) this._entities.Add((AmbientSky.SkyEntity) group3[index]); break; case SkyEntityType.Gastropods: List group4 = AmbientSky.GastropodGroupSkyEntity.CreateGroup(player, random); for (int index = 0; index < group4.Count; ++index) this._entities.Add((AmbientSky.SkyEntity) group4[index]); break; case SkyEntityType.Pegasus: this._entities.Add((AmbientSky.SkyEntity) new AmbientSky.PegasusSkyEntity(player, random)); break; case SkyEntityType.EaterOfSouls: this._entities.Add((AmbientSky.SkyEntity) new AmbientSky.EOSSkyEntity(player, random)); break; case SkyEntityType.Crimera: this._entities.Add((AmbientSky.SkyEntity) new AmbientSky.CrimeraSkyEntity(player, random)); break; case SkyEntityType.Hellbats: List group5 = AmbientSky.HellBatsGoupSkyEntity.CreateGroup(player, random); for (int index = 0; index < group5.Count; ++index) this._entities.Add((AmbientSky.SkyEntity) group5[index]); break; } if (Main.netMode == 2 || this.AnActiveSkyConflictsWithAmbience() || SkyManager.Instance["Ambience"].IsActive()) return; SkyManager.Instance.Activate("Ambience", new Vector2()); } private abstract class SkyEntity { public Vector2 Position; public Asset Texture; public SpriteFrame Frame; public float Depth; public SpriteEffects Effects; public bool IsActive = true; public float Rotation; public Rectangle SourceRectangle => this.Frame.GetSourceRectangle(this.Texture.Value); protected void NextFrame() => this.Frame.CurrentRow = (byte) (((uint) this.Frame.CurrentRow + 1U) % (uint) this.Frame.RowCount); public abstract Color GetColor(Color backgroundColor); public abstract void Update(int frameCount); protected void SetPositionInWorldBasedOnScreenSpace(Vector2 actualWorldSpace) { Vector2 vector2 = actualWorldSpace - Main.Camera.Center; this.Position = Main.Camera.Center + vector2 * (this.Depth / 3f); } public abstract Vector2 GetDrawPosition(); public virtual void Draw( SpriteBatch spriteBatch, float depthScale, float minDepth, float maxDepth) { this.CommonDraw(spriteBatch, depthScale, minDepth, maxDepth); } public void CommonDraw( SpriteBatch spriteBatch, float depthScale, float minDepth, float maxDepth) { if ((double) this.Depth <= (double) minDepth || (double) this.Depth > (double) maxDepth) return; Vector2 drawPositionByDepth = this.GetDrawPositionByDepth(); Color color = this.GetColor(Main.ColorOfTheSkies) * Main.atmo; Vector2 origin = this.SourceRectangle.Size() / 2f; float scale = depthScale / this.Depth; spriteBatch.Draw(this.Texture.Value, drawPositionByDepth - Main.Camera.UnscaledPosition, new Rectangle?(this.SourceRectangle), color, this.Rotation, origin, scale, this.Effects, 0.0f); } internal Vector2 GetDrawPositionByDepth() => (this.GetDrawPosition() - Main.Camera.Center) * new Vector2(1f / this.Depth, 0.9f / this.Depth) + Main.Camera.Center; internal float Helper_GetOpacityWithAccountingForOceanWaterLine() { float t = (this.GetDrawPositionByDepth() - Main.Camera.UnscaledPosition).Y + (float) (this.SourceRectangle.Height / 2); float yscreenPosition = AmbientSkyDrawCache.Instance.OceanLineInfo.YScreenPosition; return 1f - Utils.GetLerpValue(yscreenPosition - 10f, yscreenPosition - 2f, t, true) * AmbientSkyDrawCache.Instance.OceanLineInfo.OceanOpacity; } } private class FadingSkyEntity : AmbientSky.SkyEntity { protected int LifeTime; protected Vector2 Velocity; protected int FramingSpeed; protected int TimeEntitySpawnedIn; protected float Opacity; protected float BrightnessLerper; protected float FinalOpacityMultiplier; protected float OpacityNormalizedTimeToFadeIn; protected float OpacityNormalizedTimeToFadeOut; protected int FrameOffset; public FadingSkyEntity() { this.Opacity = 0.0f; this.TimeEntitySpawnedIn = -1; this.BrightnessLerper = 0.0f; this.FinalOpacityMultiplier = 1f; this.OpacityNormalizedTimeToFadeIn = 0.1f; this.OpacityNormalizedTimeToFadeOut = 0.9f; } public override void Update(int frameCount) { if (this.IsMovementDone(frameCount)) return; this.UpdateOpacity(frameCount); if ((frameCount + this.FrameOffset) % this.FramingSpeed == 0) this.NextFrame(); this.UpdateVelocity(frameCount); this.Position = this.Position + this.Velocity; } public virtual void UpdateVelocity(int frameCount) { } private void UpdateOpacity(int frameCount) { int num = frameCount - this.TimeEntitySpawnedIn; if ((double) num >= (double) this.LifeTime * (double) this.OpacityNormalizedTimeToFadeOut) this.Opacity = Utils.GetLerpValue((float) this.LifeTime, (float) this.LifeTime * this.OpacityNormalizedTimeToFadeOut, (float) num, true); else this.Opacity = Utils.GetLerpValue(0.0f, (float) this.LifeTime * this.OpacityNormalizedTimeToFadeIn, (float) num, true); } private bool IsMovementDone(int frameCount) { if (this.TimeEntitySpawnedIn == -1) this.TimeEntitySpawnedIn = frameCount; if (frameCount - this.TimeEntitySpawnedIn < this.LifeTime) return false; this.IsActive = false; return true; } public override Color GetColor(Color backgroundColor) => Color.Lerp(backgroundColor, Color.White, this.BrightnessLerper) * this.Opacity * this.FinalOpacityMultiplier * this.Helper_GetOpacityWithAccountingForOceanWaterLine(); public void StartFadingOut(int currentFrameCount) { int num1 = (int) ((double) this.LifeTime * (double) this.OpacityNormalizedTimeToFadeOut); int num2 = currentFrameCount - num1; if (num2 >= this.TimeEntitySpawnedIn) return; this.TimeEntitySpawnedIn = num2; } public override Vector2 GetDrawPosition() => this.Position; } private class ButterfliesSkyEntity : AmbientSky.FadingSkyEntity { public ButterfliesSkyEntity(Player player, FastRandom random) { VirtualCamera virtualCamera = new VirtualCamera(player); this.Effects = (double) Main.WindForVisuals > 0.0 ? SpriteEffects.None : SpriteEffects.FlipHorizontally; int num1 = 100; if (this.Effects == SpriteEffects.FlipHorizontally) this.Position.X = virtualCamera.Position.X + virtualCamera.Size.X + (float) num1; else this.Position.X = virtualCamera.Position.X - (float) num1; this.Position.Y = (float) ((double) random.NextFloat() * (Main.worldSurface * 16.0 - 4000.0) + 4000.0); this.Depth = (float) ((double) random.NextFloat() * 3.0 + 3.0); this.SetPositionInWorldBasedOnScreenSpace(this.Position); int num2 = random.Next(2) + 1; this.Texture = Main.Assets.Request("Images/Backgrounds/Ambience/ButterflySwarm" + (object) num2, (AssetRequestMode) 1); this.Frame = new SpriteFrame((byte) 1, num2 == 2 ? (byte) 19 : (byte) 17); this.LifeTime = random.Next(60, 121) * 60; this.OpacityNormalizedTimeToFadeIn = 0.15f; this.OpacityNormalizedTimeToFadeOut = 0.85f; this.BrightnessLerper = 0.2f; this.FinalOpacityMultiplier = 1f; this.FramingSpeed = 5; } public override void UpdateVelocity(int frameCount) => this.Velocity = new Vector2((float) ((0.100000001490116 + (double) Math.Abs(Main.WindForVisuals) * 0.0500000007450581) * (this.Effects == SpriteEffects.FlipHorizontally ? -1.0 : 1.0)), 0.0f); public override void Update(int frameCount) { base.Update(frameCount); if (!Main.IsItRaining && Main.dayTime && !Main.eclipse) return; this.StartFadingOut(frameCount); } } private class LostKiteSkyEntity : AmbientSky.FadingSkyEntity { public LostKiteSkyEntity(Player player, FastRandom random) { VirtualCamera virtualCamera = new VirtualCamera(player); this.Effects = (double) Main.WindForVisuals > 0.0 ? SpriteEffects.None : SpriteEffects.FlipHorizontally; int num1 = 100; if (this.Effects == SpriteEffects.FlipHorizontally) this.Position.X = virtualCamera.Position.X + virtualCamera.Size.X + (float) num1; else this.Position.X = virtualCamera.Position.X - (float) num1; this.Position.Y = (float) ((double) random.NextFloat() * (Main.worldSurface * 16.0 - 1600.0 - 2400.0) + 2400.0); this.Depth = (float) ((double) random.NextFloat() * 3.0 + 3.0); this.SetPositionInWorldBasedOnScreenSpace(this.Position); this.Texture = Main.Assets.Request("Images/Backgrounds/Ambience/LostKite", (AssetRequestMode) 1); this.Frame = new SpriteFrame((byte) 1, (byte) 42); this.LifeTime = random.Next(60, 121) * 60; this.OpacityNormalizedTimeToFadeIn = 0.15f; this.OpacityNormalizedTimeToFadeOut = 0.85f; this.BrightnessLerper = 0.2f; this.FinalOpacityMultiplier = 1f; this.FramingSpeed = 6; int num2 = random.Next((int) this.Frame.RowCount); for (int index = 0; index < num2; ++index) this.NextFrame(); } public override void UpdateVelocity(int frameCount) { float num = (float) (1.20000004768372 + (double) Math.Abs(Main.WindForVisuals) * 3.0); if (Main.IsItStorming) num *= 1.5f; this.Velocity = new Vector2(num * (this.Effects == SpriteEffects.FlipHorizontally ? -1f : 1f), 0.0f); } public override void Update(int frameCount) { if (Main.IsItStorming) this.FramingSpeed = 4; this.Effects = (double) Main.WindForVisuals > 0.0 ? SpriteEffects.None : SpriteEffects.FlipHorizontally; base.Update(frameCount); if (Main.dayTime && !Main.eclipse) return; this.StartFadingOut(frameCount); } } private class PegasusSkyEntity : AmbientSky.FadingSkyEntity { public PegasusSkyEntity(Player player, FastRandom random) { VirtualCamera virtualCamera = new VirtualCamera(player); this.Effects = (double) Main.WindForVisuals > 0.0 ? SpriteEffects.None : SpriteEffects.FlipHorizontally; int num = 100; if (this.Effects == SpriteEffects.FlipHorizontally) this.Position.X = virtualCamera.Position.X + virtualCamera.Size.X + (float) num; else this.Position.X = virtualCamera.Position.X - (float) num; this.Position.Y = (float) ((double) random.NextFloat() * (Main.worldSurface * 16.0 - 1600.0 - 2400.0) + 2400.0); this.Depth = (float) ((double) random.NextFloat() * 3.0 + 3.0); this.SetPositionInWorldBasedOnScreenSpace(this.Position); this.Texture = Main.Assets.Request("Images/Backgrounds/Ambience/Pegasus", (AssetRequestMode) 1); this.Frame = new SpriteFrame((byte) 1, (byte) 11); this.LifeTime = random.Next(60, 121) * 60; this.OpacityNormalizedTimeToFadeIn = 0.15f; this.OpacityNormalizedTimeToFadeOut = 0.85f; this.BrightnessLerper = 0.2f; this.FinalOpacityMultiplier = 1f; this.FramingSpeed = 5; } public override void UpdateVelocity(int frameCount) => this.Velocity = new Vector2((float) ((1.5 + (double) Math.Abs(Main.WindForVisuals) * 0.600000023841858) * (this.Effects == SpriteEffects.FlipHorizontally ? -1.0 : 1.0)), 0.0f); public override void Update(int frameCount) { base.Update(frameCount); if (!Main.IsItRaining && Main.dayTime && !Main.eclipse) return; this.StartFadingOut(frameCount); } public override Color GetColor(Color backgroundColor) => base.GetColor(backgroundColor) * Main.bgAlphaFrontLayer[6]; } private class VultureSkyEntity : AmbientSky.FadingSkyEntity { public VultureSkyEntity(Player player, FastRandom random) { VirtualCamera virtualCamera = new VirtualCamera(player); this.Effects = (double) Main.WindForVisuals > 0.0 ? SpriteEffects.None : SpriteEffects.FlipHorizontally; int num = 100; if (this.Effects == SpriteEffects.FlipHorizontally) this.Position.X = virtualCamera.Position.X + virtualCamera.Size.X + (float) num; else this.Position.X = virtualCamera.Position.X - (float) num; this.Position.Y = (float) ((double) random.NextFloat() * (Main.worldSurface * 16.0 - 1600.0 - 2400.0) + 2400.0); this.Depth = (float) ((double) random.NextFloat() * 3.0 + 3.0); this.SetPositionInWorldBasedOnScreenSpace(this.Position); this.Texture = Main.Assets.Request("Images/Backgrounds/Ambience/Vulture", (AssetRequestMode) 1); this.Frame = new SpriteFrame((byte) 1, (byte) 10); this.LifeTime = random.Next(60, 121) * 60; this.OpacityNormalizedTimeToFadeIn = 0.15f; this.OpacityNormalizedTimeToFadeOut = 0.85f; this.BrightnessLerper = 0.2f; this.FinalOpacityMultiplier = 1f; this.FramingSpeed = 5; } public override void UpdateVelocity(int frameCount) => this.Velocity = new Vector2((float) ((3.0 + (double) Math.Abs(Main.WindForVisuals) * 0.800000011920929) * (this.Effects == SpriteEffects.FlipHorizontally ? -1.0 : 1.0)), 0.0f); public override void Update(int frameCount) { base.Update(frameCount); if (!Main.IsItRaining && Main.dayTime && !Main.eclipse) return; this.StartFadingOut(frameCount); } public override Color GetColor(Color backgroundColor) => base.GetColor(backgroundColor) * Math.Max(Main.bgAlphaFrontLayer[2], Main.bgAlphaFrontLayer[5]); } private class PixiePosseSkyEntity : AmbientSky.FadingSkyEntity { private int pixieType = 1; public PixiePosseSkyEntity(Player player, FastRandom random) { VirtualCamera virtualCamera = new VirtualCamera(player); this.Effects = (double) Main.WindForVisuals > 0.0 ? SpriteEffects.None : SpriteEffects.FlipHorizontally; int num = 100; if (this.Effects == SpriteEffects.FlipHorizontally) this.Position.X = virtualCamera.Position.X + virtualCamera.Size.X + (float) num; else this.Position.X = virtualCamera.Position.X - (float) num; this.Position.Y = (float) ((double) random.NextFloat() * (Main.worldSurface * 16.0 - 4000.0) + 4000.0); this.Depth = (float) ((double) random.NextFloat() * 3.0 + 2.0); this.SetPositionInWorldBasedOnScreenSpace(this.Position); if (!Main.dayTime) this.pixieType = 2; this.Texture = Main.Assets.Request("Images/Backgrounds/Ambience/PixiePosse" + (object) this.pixieType, (AssetRequestMode) 1); this.Frame = new SpriteFrame((byte) 1, (byte) 25); this.LifeTime = random.Next(60, 121) * 60; this.OpacityNormalizedTimeToFadeIn = 0.15f; this.OpacityNormalizedTimeToFadeOut = 0.85f; this.BrightnessLerper = 0.6f; this.FinalOpacityMultiplier = 1f; this.FramingSpeed = 5; } public override void UpdateVelocity(int frameCount) => this.Velocity = new Vector2((float) ((0.119999997317791 + (double) Math.Abs(Main.WindForVisuals) * 0.0799999982118607) * (this.Effects == SpriteEffects.FlipHorizontally ? -1.0 : 1.0)), 0.0f); public override void Update(int frameCount) { base.Update(frameCount); if ((this.pixieType != 1 || Main.dayTime) && (this.pixieType != 2 || !Main.dayTime) && !Main.IsItRaining && !Main.eclipse && !Main.bloodMoon && !Main.pumpkinMoon && !Main.snowMoon) return; this.StartFadingOut(frameCount); } public override void Draw( SpriteBatch spriteBatch, float depthScale, float minDepth, float maxDepth) { this.CommonDraw(spriteBatch, depthScale - 0.1f, minDepth, maxDepth); } } private class BirdsPackSkyEntity : AmbientSky.FadingSkyEntity { public BirdsPackSkyEntity(Player player, FastRandom random) { VirtualCamera virtualCamera = new VirtualCamera(player); this.Effects = (double) Main.WindForVisuals > 0.0 ? SpriteEffects.None : SpriteEffects.FlipHorizontally; int num = 100; if (this.Effects == SpriteEffects.FlipHorizontally) this.Position.X = virtualCamera.Position.X + virtualCamera.Size.X + (float) num; else this.Position.X = virtualCamera.Position.X - (float) num; this.Position.Y = (float) ((double) random.NextFloat() * (Main.worldSurface * 16.0 - 1600.0 - 2400.0) + 2400.0); this.Depth = (float) ((double) random.NextFloat() * 3.0 + 3.0); this.SetPositionInWorldBasedOnScreenSpace(this.Position); this.Texture = Main.Assets.Request("Images/Backgrounds/Ambience/BirdsVShape", (AssetRequestMode) 1); this.Frame = new SpriteFrame((byte) 1, (byte) 4); this.LifeTime = random.Next(60, 121) * 60; this.OpacityNormalizedTimeToFadeIn = 0.15f; this.OpacityNormalizedTimeToFadeOut = 0.85f; this.BrightnessLerper = 0.2f; this.FinalOpacityMultiplier = 1f; this.FramingSpeed = 5; } public override void UpdateVelocity(int frameCount) => this.Velocity = new Vector2((float) ((3.0 + (double) Math.Abs(Main.WindForVisuals) * 0.800000011920929) * (this.Effects == SpriteEffects.FlipHorizontally ? -1.0 : 1.0)), 0.0f); public override void Update(int frameCount) { base.Update(frameCount); if (!Main.IsItRaining && Main.dayTime && !Main.eclipse) return; this.StartFadingOut(frameCount); } } private class SeagullsGroupSkyEntity : AmbientSky.FadingSkyEntity { private Vector2 _magnetAccelerations; private Vector2 _magnetPointTarget; private Vector2 _positionVsMagnet; private Vector2 _velocityVsMagnet; public SeagullsGroupSkyEntity(Player player, FastRandom random) { VirtualCamera virtualCamera = new VirtualCamera(player); this.Effects = (double) Main.WindForVisuals > 0.0 ? SpriteEffects.None : SpriteEffects.FlipHorizontally; int num1 = 100; if (this.Effects == SpriteEffects.FlipHorizontally) this.Position.X = virtualCamera.Position.X + virtualCamera.Size.X + (float) num1; else this.Position.X = virtualCamera.Position.X - (float) num1; this.Position.Y = (float) ((double) random.NextFloat() * (Main.worldSurface * 16.0 - 1600.0 - 2400.0) + 2400.0); this.Depth = (float) ((double) random.NextFloat() * 3.0 + 3.0); this.SetPositionInWorldBasedOnScreenSpace(this.Position); this.Texture = Main.Assets.Request("Images/Backgrounds/Ambience/Seagull", (AssetRequestMode) 1); this.Frame = new SpriteFrame((byte) 1, (byte) 9); this.LifeTime = random.Next(60, 121) * 60; this.OpacityNormalizedTimeToFadeIn = 0.1f; this.OpacityNormalizedTimeToFadeOut = 0.9f; this.BrightnessLerper = 0.2f; this.FinalOpacityMultiplier = 1f; this.FramingSpeed = 4; this.FrameOffset = random.Next(0, (int) this.Frame.RowCount); int num2 = random.Next((int) this.Frame.RowCount); for (int index = 0; index < num2; ++index) this.NextFrame(); } public override void UpdateVelocity(int frameCount) { this._velocityVsMagnet += this._magnetAccelerations * new Vector2((float) Math.Sign(this._magnetPointTarget.X - this._positionVsMagnet.X), (float) Math.Sign(this._magnetPointTarget.Y - this._positionVsMagnet.Y)); this._positionVsMagnet += this._velocityVsMagnet; this.Velocity = new Vector2((float) (4.0 * (this.Effects == SpriteEffects.FlipHorizontally ? -1.0 : 1.0)), 0.0f) + this._velocityVsMagnet; } public override void Update(int frameCount) { base.Update(frameCount); if (!Main.IsItRaining && Main.dayTime && !Main.eclipse) return; this.StartFadingOut(frameCount); } public void SetMagnetization(Vector2 accelerations, Vector2 targetOffset) { this._magnetAccelerations = accelerations; this._magnetPointTarget = targetOffset; } public override Color GetColor(Color backgroundColor) => base.GetColor(backgroundColor) * Main.bgAlphaFrontLayer[4]; public override void Draw( SpriteBatch spriteBatch, float depthScale, float minDepth, float maxDepth) { this.CommonDraw(spriteBatch, depthScale - 1.5f, minDepth, maxDepth); } public static List CreateGroup( Player player, FastRandom random) { List seagullsGroupSkyEntityList = new List(); int num1 = 100; int num2 = random.Next(5, 9); float num3 = 100f; VirtualCamera virtualCamera = new VirtualCamera(player); SpriteEffects spriteEffects = (double) Main.WindForVisuals > 0.0 ? SpriteEffects.None : SpriteEffects.FlipHorizontally; Vector2 vector2_1 = new Vector2(); vector2_1.X = spriteEffects != SpriteEffects.FlipHorizontally ? virtualCamera.Position.X - (float) num1 : virtualCamera.Position.X + virtualCamera.Size.X + (float) num1; vector2_1.Y = (float) ((double) random.NextFloat() * (Main.worldSurface * 16.0 - 1600.0 - 2400.0) + 2400.0); float num4 = (float) ((double) random.NextFloat() * 2.0 + 1.0); int num5 = random.Next(30, 61) * 60; Vector2 vector2_2 = new Vector2((float) ((double) random.NextFloat() * 0.5 + 0.5), (float) ((double) random.NextFloat() * 0.5 + 0.5)); Vector2 targetOffset = new Vector2((float) ((double) random.NextFloat() * 2.0 - 1.0), (float) ((double) random.NextFloat() * 2.0 - 1.0)) * num3; for (int index = 0; index < num2; ++index) { AmbientSky.SeagullsGroupSkyEntity seagullsGroupSkyEntity = new AmbientSky.SeagullsGroupSkyEntity(player, random); seagullsGroupSkyEntity.Depth = num4 + random.NextFloat() * 0.5f; seagullsGroupSkyEntity.Position = vector2_1 + new Vector2((float) ((double) random.NextFloat() * 20.0 - 10.0), random.NextFloat() * 3f) * 50f; seagullsGroupSkyEntity.Effects = spriteEffects; seagullsGroupSkyEntity.SetPositionInWorldBasedOnScreenSpace(seagullsGroupSkyEntity.Position); seagullsGroupSkyEntity.LifeTime = num5 + random.Next(301); seagullsGroupSkyEntity.SetMagnetization(vector2_2 * (float) ((double) random.NextFloat() * 0.300000011920929 + 0.850000023841858) * 0.05f, targetOffset); seagullsGroupSkyEntityList.Add(seagullsGroupSkyEntity); } return seagullsGroupSkyEntityList; } } private class GastropodGroupSkyEntity : AmbientSky.FadingSkyEntity { private Vector2 _magnetAccelerations; private Vector2 _magnetPointTarget; private Vector2 _positionVsMagnet; private Vector2 _velocityVsMagnet; public GastropodGroupSkyEntity(Player player, FastRandom random) { VirtualCamera virtualCamera = new VirtualCamera(player); this.Effects = (double) Main.WindForVisuals > 0.0 ? SpriteEffects.None : SpriteEffects.FlipHorizontally; int num = 100; if (this.Effects == SpriteEffects.FlipHorizontally) this.Position.X = virtualCamera.Position.X + virtualCamera.Size.X + (float) num; else this.Position.X = virtualCamera.Position.X - (float) num; this.Position.Y = (float) ((double) random.NextFloat() * (Main.worldSurface * 16.0 - 1600.0 - 3200.0) + 3200.0); this.Depth = (float) ((double) random.NextFloat() * 3.0 + 2.0); this.SetPositionInWorldBasedOnScreenSpace(this.Position); this.Texture = Main.Assets.Request("Images/Backgrounds/Ambience/Gastropod", (AssetRequestMode) 1); this.Frame = new SpriteFrame((byte) 1, (byte) 1); this.LifeTime = random.Next(60, 121) * 60; this.OpacityNormalizedTimeToFadeIn = 0.1f; this.OpacityNormalizedTimeToFadeOut = 0.9f; this.BrightnessLerper = 0.75f; this.FinalOpacityMultiplier = 1f; this.FramingSpeed = int.MaxValue; } public override void UpdateVelocity(int frameCount) { this._velocityVsMagnet += this._magnetAccelerations * new Vector2((float) Math.Sign(this._magnetPointTarget.X - this._positionVsMagnet.X), (float) Math.Sign(this._magnetPointTarget.Y - this._positionVsMagnet.Y)); this._positionVsMagnet += this._velocityVsMagnet; this.Velocity = new Vector2((float) ((1.5 + (double) Math.Abs(Main.WindForVisuals) * 0.200000002980232) * (this.Effects == SpriteEffects.FlipHorizontally ? -1.0 : 1.0)), 0.0f) + this._velocityVsMagnet; this.Rotation = this.Velocity.X * 0.1f; } public override void Update(int frameCount) { base.Update(frameCount); if (!Main.IsItRaining && !Main.dayTime && !Main.bloodMoon && !Main.pumpkinMoon && !Main.snowMoon) return; this.StartFadingOut(frameCount); } public override Color GetColor(Color backgroundColor) => Color.Lerp(backgroundColor, Colors.AmbientNPCGastropodLight, this.BrightnessLerper) * this.Opacity * this.FinalOpacityMultiplier; public override void Draw( SpriteBatch spriteBatch, float depthScale, float minDepth, float maxDepth) { this.CommonDraw(spriteBatch, depthScale - 0.1f, minDepth, maxDepth); } public void SetMagnetization(Vector2 accelerations, Vector2 targetOffset) { this._magnetAccelerations = accelerations; this._magnetPointTarget = targetOffset; } public static List CreateGroup( Player player, FastRandom random) { List gastropodGroupSkyEntityList = new List(); int num1 = 100; int num2 = random.Next(3, 8); VirtualCamera virtualCamera = new VirtualCamera(player); SpriteEffects spriteEffects = (double) Main.WindForVisuals > 0.0 ? SpriteEffects.None : SpriteEffects.FlipHorizontally; Vector2 vector2_1 = new Vector2(); vector2_1.X = spriteEffects != SpriteEffects.FlipHorizontally ? virtualCamera.Position.X - (float) num1 : virtualCamera.Position.X + virtualCamera.Size.X + (float) num1; vector2_1.Y = (float) ((double) random.NextFloat() * (Main.worldSurface * 16.0 - 1600.0 - 3200.0) + 3200.0); float num3 = (float) ((double) random.NextFloat() * 3.0 + 2.0); int num4 = random.Next(30, 61) * 60; Vector2 vector2_2 = new Vector2((float) ((double) random.NextFloat() * 0.100000001490116 + 0.100000001490116), (float) ((double) random.NextFloat() * 0.300000011920929 + 0.300000011920929)); Vector2 targetOffset = new Vector2((float) ((double) random.NextFloat() * 2.0 - 1.0), (float) ((double) random.NextFloat() * 2.0 - 1.0)) * 120f; for (int index = 0; index < num2; ++index) { AmbientSky.GastropodGroupSkyEntity gastropodGroupSkyEntity = new AmbientSky.GastropodGroupSkyEntity(player, random); gastropodGroupSkyEntity.Depth = num3 + random.NextFloat() * 0.5f; gastropodGroupSkyEntity.Position = vector2_1 + new Vector2((float) ((double) random.NextFloat() * 20.0 - 10.0), random.NextFloat() * 3f) * 60f; gastropodGroupSkyEntity.Effects = spriteEffects; gastropodGroupSkyEntity.SetPositionInWorldBasedOnScreenSpace(gastropodGroupSkyEntity.Position); gastropodGroupSkyEntity.LifeTime = num4 + random.Next(301); gastropodGroupSkyEntity.SetMagnetization(vector2_2 * (random.NextFloat() * 0.5f) * 0.05f, targetOffset); gastropodGroupSkyEntityList.Add(gastropodGroupSkyEntity); } return gastropodGroupSkyEntityList; } } private class SlimeBalloonGroupSkyEntity : AmbientSky.FadingSkyEntity { private Vector2 _magnetAccelerations; private Vector2 _magnetPointTarget; private Vector2 _positionVsMagnet; private Vector2 _velocityVsMagnet; public SlimeBalloonGroupSkyEntity(Player player, FastRandom random) { VirtualCamera virtualCamera = new VirtualCamera(player); this.Effects = (double) Main.WindForVisuals > 0.0 ? SpriteEffects.None : SpriteEffects.FlipHorizontally; int num = 100; if (this.Effects == SpriteEffects.FlipHorizontally) this.Position.X = virtualCamera.Position.X + virtualCamera.Size.X + (float) num; else this.Position.X = virtualCamera.Position.X - (float) num; this.Position.Y = (float) ((double) random.NextFloat() * (Main.worldSurface * 16.0 - 1600.0 - 4000.0) + 4000.0); this.Depth = (float) ((double) random.NextFloat() * 3.0 + 3.0); this.SetPositionInWorldBasedOnScreenSpace(this.Position); this.Texture = Main.Assets.Request("Images/Backgrounds/Ambience/SlimeBalloons", (AssetRequestMode) 1); this.Frame = new SpriteFrame((byte) 1, (byte) 7); this.Frame.CurrentRow = (byte) random.Next(7); this.LifeTime = random.Next(60, 121) * 60; this.OpacityNormalizedTimeToFadeIn = 0.025f; this.OpacityNormalizedTimeToFadeOut = 0.975f; this.BrightnessLerper = 0.2f; this.FinalOpacityMultiplier = 1f; this.FramingSpeed = int.MaxValue; } public override void UpdateVelocity(int frameCount) { this._velocityVsMagnet += this._magnetAccelerations * new Vector2((float) Math.Sign(this._magnetPointTarget.X - this._positionVsMagnet.X), (float) Math.Sign(this._magnetPointTarget.Y - this._positionVsMagnet.Y)); this._positionVsMagnet += this._velocityVsMagnet; this.Velocity = new Vector2((float) ((1.0 + (double) Math.Abs(Main.WindForVisuals) * 1.0) * (this.Effects == SpriteEffects.FlipHorizontally ? -1.0 : 1.0)), -0.01f) + this._velocityVsMagnet; this.Rotation = this.Velocity.X * 0.1f; } public override void Update(int frameCount) { base.Update(frameCount); this.Effects = (double) Main.WindForVisuals > 0.0 ? SpriteEffects.None : SpriteEffects.FlipHorizontally; if (Main.IsItAHappyWindyDay && !Main.IsItRaining && Main.dayTime && !Main.eclipse) return; this.StartFadingOut(frameCount); } public void SetMagnetization(Vector2 accelerations, Vector2 targetOffset) { this._magnetAccelerations = accelerations; this._magnetPointTarget = targetOffset; } public static List CreateGroup( Player player, FastRandom random) { List balloonGroupSkyEntityList = new List(); int num1 = 100; int num2 = random.Next(5, 10); VirtualCamera virtualCamera = new VirtualCamera(player); SpriteEffects spriteEffects = (double) Main.WindForVisuals > 0.0 ? SpriteEffects.None : SpriteEffects.FlipHorizontally; Vector2 vector2_1 = new Vector2(); vector2_1.X = spriteEffects != SpriteEffects.FlipHorizontally ? virtualCamera.Position.X - (float) num1 : virtualCamera.Position.X + virtualCamera.Size.X + (float) num1; vector2_1.Y = (float) ((double) random.NextFloat() * (Main.worldSurface * 16.0 - 1600.0 - 2400.0) + 2400.0); float num3 = (float) ((double) random.NextFloat() * 3.0 + 3.0); int num4 = random.Next(80, 121) * 60; Vector2 vector2_2 = new Vector2((float) ((double) random.NextFloat() * 0.100000001490116 + 0.100000001490116), (float) ((double) random.NextFloat() * 0.100000001490116 + 0.100000001490116)); Vector2 targetOffset = new Vector2((float) ((double) random.NextFloat() * 2.0 - 1.0), (float) ((double) random.NextFloat() * 2.0 - 1.0)) * 150f; for (int index = 0; index < num2; ++index) { AmbientSky.SlimeBalloonGroupSkyEntity balloonGroupSkyEntity = new AmbientSky.SlimeBalloonGroupSkyEntity(player, random); balloonGroupSkyEntity.Depth = num3 + random.NextFloat() * 0.5f; balloonGroupSkyEntity.Position = vector2_1 + new Vector2((float) ((double) random.NextFloat() * 20.0 - 10.0), random.NextFloat() * 3f) * 80f; balloonGroupSkyEntity.Effects = spriteEffects; balloonGroupSkyEntity.SetPositionInWorldBasedOnScreenSpace(balloonGroupSkyEntity.Position); balloonGroupSkyEntity.LifeTime = num4 + random.Next(301); balloonGroupSkyEntity.SetMagnetization(vector2_2 * (random.NextFloat() * 0.2f) * 0.05f, targetOffset); balloonGroupSkyEntityList.Add(balloonGroupSkyEntity); } return balloonGroupSkyEntityList; } } private class HellBatsGoupSkyEntity : AmbientSky.FadingSkyEntity { private Vector2 _magnetAccelerations; private Vector2 _magnetPointTarget; private Vector2 _positionVsMagnet; private Vector2 _velocityVsMagnet; public HellBatsGoupSkyEntity(Player player, FastRandom random) { VirtualCamera virtualCamera = new VirtualCamera(player); this.Effects = (double) Main.WindForVisuals > 0.0 ? SpriteEffects.None : SpriteEffects.FlipHorizontally; int num1 = 100; if (this.Effects == SpriteEffects.FlipHorizontally) this.Position.X = virtualCamera.Position.X + virtualCamera.Size.X + (float) num1; else this.Position.X = virtualCamera.Position.X - (float) num1; this.Position.Y = random.NextFloat() * 400f + (float) (Main.UnderworldLayer * 16); this.Depth = (float) ((double) random.NextFloat() * 5.0 + 3.0); this.SetPositionInWorldBasedOnScreenSpace(this.Position); this.Texture = Main.Assets.Request("Images/Backgrounds/Ambience/HellBat" + (object) random.Next(1, 3), (AssetRequestMode) 1); this.Frame = new SpriteFrame((byte) 1, (byte) 10); this.LifeTime = random.Next(60, 121) * 60; this.OpacityNormalizedTimeToFadeIn = 0.1f; this.OpacityNormalizedTimeToFadeOut = 0.9f; this.BrightnessLerper = 0.2f; this.FinalOpacityMultiplier = 1f; this.FramingSpeed = 4; this.FrameOffset = random.Next(0, (int) this.Frame.RowCount); int num2 = random.Next((int) this.Frame.RowCount); for (int index = 0; index < num2; ++index) this.NextFrame(); } public override void UpdateVelocity(int frameCount) { this._velocityVsMagnet += this._magnetAccelerations * new Vector2((float) Math.Sign(this._magnetPointTarget.X - this._positionVsMagnet.X), (float) Math.Sign(this._magnetPointTarget.Y - this._positionVsMagnet.Y)); this._positionVsMagnet += this._velocityVsMagnet; this.Velocity = new Vector2((float) ((3.0 + (double) Math.Abs(Main.WindForVisuals) * 0.800000011920929) * (this.Effects == SpriteEffects.FlipHorizontally ? -1.0 : 1.0)), 0.0f) + this._velocityVsMagnet; } public override void Update(int frameCount) => base.Update(frameCount); public void SetMagnetization(Vector2 accelerations, Vector2 targetOffset) { this._magnetAccelerations = accelerations; this._magnetPointTarget = targetOffset; } public override Color GetColor(Color backgroundColor) => Color.Lerp(Color.White, Color.Gray, this.Depth / 15f) * this.Opacity * this.FinalOpacityMultiplier; public static List CreateGroup( Player player, FastRandom random) { List batsGoupSkyEntityList = new List(); int num1 = 100; int num2 = random.Next(20, 40); VirtualCamera virtualCamera = new VirtualCamera(player); SpriteEffects spriteEffects = (double) Main.WindForVisuals > 0.0 ? SpriteEffects.None : SpriteEffects.FlipHorizontally; Vector2 vector2_1 = new Vector2(); vector2_1.X = spriteEffects != SpriteEffects.FlipHorizontally ? virtualCamera.Position.X - (float) num1 : virtualCamera.Position.X + virtualCamera.Size.X + (float) num1; vector2_1.Y = random.NextFloat() * 800f + (float) (Main.UnderworldLayer * 16); float num3 = (float) ((double) random.NextFloat() * 5.0 + 3.0); int num4 = random.Next(30, 61) * 60; Vector2 vector2_2 = new Vector2((float) ((double) random.NextFloat() * 0.5 + 0.5), (float) ((double) random.NextFloat() * 0.5 + 0.5)); Vector2 targetOffset = new Vector2((float) ((double) random.NextFloat() * 2.0 - 1.0), (float) ((double) random.NextFloat() * 2.0 - 1.0)) * 100f; for (int index = 0; index < num2; ++index) { AmbientSky.HellBatsGoupSkyEntity batsGoupSkyEntity = new AmbientSky.HellBatsGoupSkyEntity(player, random); batsGoupSkyEntity.Depth = num3 + random.NextFloat() * 0.5f; batsGoupSkyEntity.Position = vector2_1 + new Vector2((float) ((double) random.NextFloat() * 20.0 - 10.0), random.NextFloat() * 3f) * 50f; batsGoupSkyEntity.Effects = spriteEffects; batsGoupSkyEntity.SetPositionInWorldBasedOnScreenSpace(batsGoupSkyEntity.Position); batsGoupSkyEntity.LifeTime = num4 + random.Next(301); batsGoupSkyEntity.SetMagnetization(vector2_2 * (float) ((double) random.NextFloat() * 0.300000011920929 + 0.850000023841858) * 0.05f, targetOffset); batsGoupSkyEntityList.Add(batsGoupSkyEntity); } return batsGoupSkyEntityList; } } private class BatsGroupSkyEntity : AmbientSky.FadingSkyEntity { private Vector2 _magnetAccelerations; private Vector2 _magnetPointTarget; private Vector2 _positionVsMagnet; private Vector2 _velocityVsMagnet; public BatsGroupSkyEntity(Player player, FastRandom random) { VirtualCamera virtualCamera = new VirtualCamera(player); this.Effects = (double) Main.WindForVisuals > 0.0 ? SpriteEffects.None : SpriteEffects.FlipHorizontally; int num1 = 100; if (this.Effects == SpriteEffects.FlipHorizontally) this.Position.X = virtualCamera.Position.X + virtualCamera.Size.X + (float) num1; else this.Position.X = virtualCamera.Position.X - (float) num1; this.Position.Y = (float) ((double) random.NextFloat() * (Main.worldSurface * 16.0 - 1600.0 - 2400.0) + 2400.0); this.Depth = (float) ((double) random.NextFloat() * 3.0 + 3.0); this.SetPositionInWorldBasedOnScreenSpace(this.Position); this.Texture = Main.Assets.Request("Images/Backgrounds/Ambience/Bat" + (object) random.Next(1, 4), (AssetRequestMode) 1); this.Frame = new SpriteFrame((byte) 1, (byte) 10); this.LifeTime = random.Next(60, 121) * 60; this.OpacityNormalizedTimeToFadeIn = 0.1f; this.OpacityNormalizedTimeToFadeOut = 0.9f; this.BrightnessLerper = 0.2f; this.FinalOpacityMultiplier = 1f; this.FramingSpeed = 4; this.FrameOffset = random.Next(0, (int) this.Frame.RowCount); int num2 = random.Next((int) this.Frame.RowCount); for (int index = 0; index < num2; ++index) this.NextFrame(); } public override void UpdateVelocity(int frameCount) { this._velocityVsMagnet += this._magnetAccelerations * new Vector2((float) Math.Sign(this._magnetPointTarget.X - this._positionVsMagnet.X), (float) Math.Sign(this._magnetPointTarget.Y - this._positionVsMagnet.Y)); this._positionVsMagnet += this._velocityVsMagnet; this.Velocity = new Vector2((float) ((3.0 + (double) Math.Abs(Main.WindForVisuals) * 0.800000011920929) * (this.Effects == SpriteEffects.FlipHorizontally ? -1.0 : 1.0)), 0.0f) + this._velocityVsMagnet; } public override void Update(int frameCount) { base.Update(frameCount); if (!Main.IsItRaining && Main.dayTime && !Main.eclipse) return; this.StartFadingOut(frameCount); } public void SetMagnetization(Vector2 accelerations, Vector2 targetOffset) { this._magnetAccelerations = accelerations; this._magnetPointTarget = targetOffset; } public override Color GetColor(Color backgroundColor) => base.GetColor(backgroundColor) * Utils.Max(Main.bgAlphaFrontLayer[3], Main.bgAlphaFrontLayer[0], Main.bgAlphaFrontLayer[10], Main.bgAlphaFrontLayer[11], Main.bgAlphaFrontLayer[12]); public static List CreateGroup( Player player, FastRandom random) { List batsGroupSkyEntityList = new List(); int num1 = 100; int num2 = random.Next(20, 40); VirtualCamera virtualCamera = new VirtualCamera(player); SpriteEffects spriteEffects = (double) Main.WindForVisuals > 0.0 ? SpriteEffects.None : SpriteEffects.FlipHorizontally; Vector2 vector2_1 = new Vector2(); vector2_1.X = spriteEffects != SpriteEffects.FlipHorizontally ? virtualCamera.Position.X - (float) num1 : virtualCamera.Position.X + virtualCamera.Size.X + (float) num1; vector2_1.Y = (float) ((double) random.NextFloat() * (Main.worldSurface * 16.0 - 1600.0 - 2400.0) + 2400.0); float num3 = (float) ((double) random.NextFloat() * 3.0 + 3.0); int num4 = random.Next(30, 61) * 60; Vector2 vector2_2 = new Vector2((float) ((double) random.NextFloat() * 0.5 + 0.5), (float) ((double) random.NextFloat() * 0.5 + 0.5)); Vector2 targetOffset = new Vector2((float) ((double) random.NextFloat() * 2.0 - 1.0), (float) ((double) random.NextFloat() * 2.0 - 1.0)) * 100f; for (int index = 0; index < num2; ++index) { AmbientSky.BatsGroupSkyEntity batsGroupSkyEntity = new AmbientSky.BatsGroupSkyEntity(player, random); batsGroupSkyEntity.Depth = num3 + random.NextFloat() * 0.5f; batsGroupSkyEntity.Position = vector2_1 + new Vector2((float) ((double) random.NextFloat() * 20.0 - 10.0), random.NextFloat() * 3f) * 50f; batsGroupSkyEntity.Effects = spriteEffects; batsGroupSkyEntity.SetPositionInWorldBasedOnScreenSpace(batsGroupSkyEntity.Position); batsGroupSkyEntity.LifeTime = num4 + random.Next(301); batsGroupSkyEntity.SetMagnetization(vector2_2 * (float) ((double) random.NextFloat() * 0.300000011920929 + 0.850000023841858) * 0.05f, targetOffset); batsGroupSkyEntityList.Add(batsGroupSkyEntity); } return batsGroupSkyEntityList; } } private class WyvernSkyEntity : AmbientSky.FadingSkyEntity { public WyvernSkyEntity(Player player, FastRandom random) { VirtualCamera virtualCamera = new VirtualCamera(player); this.Effects = (double) Main.WindForVisuals > 0.0 ? SpriteEffects.None : SpriteEffects.FlipHorizontally; int num = 100; if (this.Effects == SpriteEffects.FlipHorizontally) this.Position.X = virtualCamera.Position.X + virtualCamera.Size.X + (float) num; else this.Position.X = virtualCamera.Position.X - (float) num; this.Position.Y = (float) ((double) random.NextFloat() * (Main.worldSurface * 16.0 - 1600.0 - 2400.0) + 2400.0); this.Depth = (float) ((double) random.NextFloat() * 3.0 + 3.0); this.SetPositionInWorldBasedOnScreenSpace(this.Position); this.Texture = Main.Assets.Request("Images/Backgrounds/Ambience/Wyvern", (AssetRequestMode) 1); this.Frame = new SpriteFrame((byte) 1, (byte) 5); this.LifeTime = random.Next(40, 71) * 60; this.OpacityNormalizedTimeToFadeIn = 0.15f; this.OpacityNormalizedTimeToFadeOut = 0.85f; this.BrightnessLerper = 0.2f; this.FinalOpacityMultiplier = 1f; this.FramingSpeed = 4; } public override void UpdateVelocity(int frameCount) => this.Velocity = new Vector2((float) ((3.0 + (double) Math.Abs(Main.WindForVisuals) * 0.800000011920929) * (this.Effects == SpriteEffects.FlipHorizontally ? -1.0 : 1.0)), 0.0f); } private class NormalizedBackgroundLayerSpaceSkyEntity : AmbientSky.SkyEntity { public override Color GetColor(Color backgroundColor) => Color.Lerp(backgroundColor, Color.White, 0.3f); public override Vector2 GetDrawPosition() => this.Position; public override void Update(int frameCount) { } } private class BoneSerpentSkyEntity : AmbientSky.NormalizedBackgroundLayerSpaceSkyEntity { } private class AirshipSkyEntity : AmbientSky.FadingSkyEntity { public AirshipSkyEntity(Player player, FastRandom random) { VirtualCamera virtualCamera = new VirtualCamera(player); this.Effects = random.Next(2) == 0 ? SpriteEffects.None : SpriteEffects.FlipHorizontally; int num = 100; if (this.Effects == SpriteEffects.FlipHorizontally) this.Position.X = virtualCamera.Position.X + virtualCamera.Size.X + (float) num; else this.Position.X = virtualCamera.Position.X - (float) num; this.Position.Y = (float) ((double) random.NextFloat() * (Main.worldSurface * 16.0 - 1600.0 - 2400.0) + 2400.0); this.Depth = (float) ((double) random.NextFloat() * 3.0 + 3.0); this.SetPositionInWorldBasedOnScreenSpace(this.Position); this.Texture = Main.Assets.Request("Images/Backgrounds/Ambience/FlyingShip", (AssetRequestMode) 1); this.Frame = new SpriteFrame((byte) 1, (byte) 4); this.LifeTime = random.Next(40, 71) * 60; this.OpacityNormalizedTimeToFadeIn = 0.05f; this.OpacityNormalizedTimeToFadeOut = 0.95f; this.BrightnessLerper = 0.2f; this.FinalOpacityMultiplier = 1f; this.FramingSpeed = 4; } public override void UpdateVelocity(int frameCount) => this.Velocity = new Vector2((float) ((6.0 + (double) Math.Abs(Main.WindForVisuals) * 1.60000002384186) * (this.Effects == SpriteEffects.FlipHorizontally ? -1.0 : 1.0)), 0.0f); public override void Update(int frameCount) { base.Update(frameCount); if (!Main.IsItRaining && Main.dayTime && !Main.eclipse) return; this.StartFadingOut(frameCount); } } private class AirBalloonSkyEntity : AmbientSky.FadingSkyEntity { private const int RANDOM_TILE_SPAWN_RANGE = 100; public AirBalloonSkyEntity(Player player, FastRandom random) { VirtualCamera virtualCamera = new VirtualCamera(player); int x = player.Center.ToTileCoordinates().X; this.Effects = random.Next(2) == 0 ? SpriteEffects.None : SpriteEffects.FlipHorizontally; this.Position.X = (float) (((double) x + 100.0 * ((double) random.NextFloat() * 2.0 - 1.0)) * 16.0); this.Position.Y = (float) (Main.worldSurface * 16.0 - (double) random.Next(50, 81) * 16.0); this.Depth = (float) ((double) random.NextFloat() * 3.0 + 3.0); this.Texture = Main.Assets.Request("Images/Backgrounds/Ambience/AirBalloons_" + (random.Next(2) == 0 ? "Large" : "Small"), (AssetRequestMode) 1); this.Frame = new SpriteFrame((byte) 1, (byte) 5); this.Frame.CurrentRow = (byte) random.Next(5); this.LifeTime = random.Next(20, 51) * 60; this.OpacityNormalizedTimeToFadeIn = 0.05f; this.OpacityNormalizedTimeToFadeOut = 0.95f; this.BrightnessLerper = 0.2f; this.FinalOpacityMultiplier = 1f; this.FramingSpeed = int.MaxValue; } public override void UpdateVelocity(int frameCount) { float x = Main.WindForVisuals * 4f; float num = (float) (3.0 + (double) Math.Abs(Main.WindForVisuals) * 1.0); if ((double) this.Position.Y < Main.worldSurface * 12.0) num *= 0.5f; if ((double) this.Position.Y < Main.worldSurface * 8.0) num *= 0.5f; if ((double) this.Position.Y < Main.worldSurface * 4.0) num *= 0.5f; this.Velocity = new Vector2(x, -num); } public override void Update(int frameCount) { base.Update(frameCount); if (!Main.IsItRaining && Main.dayTime && !Main.eclipse) return; this.StartFadingOut(frameCount); } } private class CrimeraSkyEntity : AmbientSky.EOCSkyEntity { public CrimeraSkyEntity(Player player, FastRandom random) : base(player, random) { int num = 3; if ((double) this.Depth <= 6.0) num = 2; if ((double) this.Depth <= 5.0) num = 1; this.Texture = Main.Assets.Request("Images/Backgrounds/Ambience/Crimera" + (object) num, (AssetRequestMode) 1); this.Frame = new SpriteFrame((byte) 1, (byte) 3); } public override Color GetColor(Color backgroundColor) => base.GetColor(backgroundColor) * Main.bgAlphaFrontLayer[8]; } private class EOSSkyEntity : AmbientSky.EOCSkyEntity { public EOSSkyEntity(Player player, FastRandom random) : base(player, random) { int num = 3; if ((double) this.Depth <= 6.0) num = 2; if ((double) this.Depth <= 5.0) num = 1; this.Texture = Main.Assets.Request("Images/Backgrounds/Ambience/EOS" + (object) num, (AssetRequestMode) 1); this.Frame = new SpriteFrame((byte) 1, (byte) 4); } public override Color GetColor(Color backgroundColor) => base.GetColor(backgroundColor) * Main.bgAlphaFrontLayer[1]; } private class EOCSkyEntity : AmbientSky.FadingSkyEntity { private const int STATE_ZIGZAG = 1; private const int STATE_GOOVERPLAYER = 2; private int _state; private int _direction; private float _waviness; public EOCSkyEntity(Player player, FastRandom random) { VirtualCamera camera = new VirtualCamera(player); this.Texture = Main.Assets.Request("Images/Backgrounds/Ambience/EOC", (AssetRequestMode) 1); this.Frame = new SpriteFrame((byte) 1, (byte) 3); this.Depth = (float) ((double) random.NextFloat() * 3.0 + 4.5); if (random.Next(4) != 0) this.BeginZigZag(ref random, camera, random.Next(2) == 1 ? 1 : -1); else this.BeginChasingPlayer(ref random, camera); this.SetPositionInWorldBasedOnScreenSpace(this.Position); this.OpacityNormalizedTimeToFadeIn = 0.1f; this.OpacityNormalizedTimeToFadeOut = 0.9f; this.BrightnessLerper = 0.2f; this.FinalOpacityMultiplier = 1f; this.FramingSpeed = 5; } private void BeginZigZag(ref FastRandom random, VirtualCamera camera, int direction) { this._state = 1; this.LifeTime = random.Next(18, 31) * 60; this._direction = direction; this._waviness = (float) ((double) random.NextFloat() * 1.0 + 1.0); this.Position.Y = camera.Position.Y; int num = 100; if (this._direction == 1) this.Position.X = camera.Position.X - (float) num; else this.Position.X = camera.Position.X + camera.Size.X + (float) num; } private void BeginChasingPlayer(ref FastRandom random, VirtualCamera camera) { this._state = 2; this.LifeTime = random.Next(18, 31) * 60; this.Position = camera.Position + camera.Size * new Vector2(random.NextFloat(), random.NextFloat()); } public override void UpdateVelocity(int frameCount) { switch (this._state) { case 1: this.ZigzagMove(frameCount); break; case 2: this.ChasePlayerTop(frameCount); break; } this.Rotation = this.Velocity.ToRotation(); } private void ZigzagMove(int frameCount) => this.Velocity = new Vector2((float) (this._direction * 3), (float) Math.Cos((double) frameCount / 1200.0 * 6.28318548202515) * this._waviness); private void ChasePlayerTop(int frameCount) { Vector2 vector2 = Main.LocalPlayer.Center + new Vector2(0.0f, -500f) - this.Position; if ((double) vector2.Length() < 100.0) return; this.Velocity.X += 0.1f * (float) Math.Sign(vector2.X); this.Velocity.Y += 0.1f * (float) Math.Sign(vector2.Y); this.Velocity = Vector2.Clamp(this.Velocity, new Vector2(-18f), new Vector2(18f)); } } private class MeteorSkyEntity : AmbientSky.FadingSkyEntity { public MeteorSkyEntity(Player player, FastRandom random) { VirtualCamera virtualCamera = new VirtualCamera(player); this.Effects = random.Next(2) == 0 ? SpriteEffects.None : SpriteEffects.FlipHorizontally; this.Depth = (float) ((double) random.NextFloat() * 3.0 + 3.0); this.Texture = Main.Assets.Request("Images/Backgrounds/Ambience/Meteor", (AssetRequestMode) 1); this.Frame = new SpriteFrame((byte) 1, (byte) 4); Vector2 rotationVector2 = ((float) (0.785398185253143 + (double) random.NextFloat() * 1.57079637050629)).ToRotationVector2(); double num1 = (Main.worldSurface * 16.0 - 0.0) / (double) rotationVector2.Y; float num2 = 1200f; double num3 = (double) num2; float num4 = (float) (num1 / num3); this.Velocity = rotationVector2 * num4; int num5 = 100; this.Position = player.Center + new Vector2((float) random.Next(-num5, num5 + 1), (float) random.Next(-num5, num5 + 1)) - this.Velocity * num2 * 0.5f; this.LifeTime = (int) num2; this.OpacityNormalizedTimeToFadeIn = 0.05f; this.OpacityNormalizedTimeToFadeOut = 0.95f; this.BrightnessLerper = 0.5f; this.FinalOpacityMultiplier = 1f; this.FramingSpeed = 5; this.Rotation = this.Velocity.ToRotation() + 1.570796f; } } private delegate AmbientSky.SkyEntity EntityFactoryMethod(Player player, int seed); } }