using System; using System.Collections.Generic; using System.Threading; using Terraria; using Terraria.DataStructures; using Terraria.Graphics.Effects; using Terraria.ID; using Terraria.ModLoader; namespace smoothDeathTransitions { public class TransitionPlayer : ModPlayer { public override void Kill(double damage, int hitDirection, bool pvp, PlayerDeathReason damageSource) { Player.respawnTimer=150; // For testing } public string GetBiomeSpecificTransitions(){ // This code is going to suck. if (ModLoader.TryGetMod("CalamityMod", out Mod CalamityMod)){ if((bool)CalamityMod.Call("GetInZone", Player, "SunkenSea") || (bool)CalamityMod.Call("GetInZone", Player, "Abyss") || (bool)CalamityMod.Call("GetInZone", Player, "SulphurousSea")) return "Flooding"; if((bool)CalamityMod.Call("GetInZone", Player, "AstralInfection"))return "Winding"; } if(ModLoader.TryGetMod("TheConfectionRebirth", out Mod ConfectionMod) && ConfectionMod.TryFind("ConfectionBiome",out ModBiome ConfectionBiome)){ if(Player.InModBiome(ConfectionBiome)){ if(ModContent.GetInstance().PridefulHallow)return "Prideful"; return "Wonder"; } } if(Player.ZoneShimmer)return "Starry"; if(Player.ZoneDungeon || Player.ZoneLihzhardTemple)return "Doors"; if(Player.ZoneJungle)return "Collapse"; if(Player.ZoneCorrupt)return "Winding"; if(Player.ZoneCrimson)return "Jaws"; if(Player.ZoneHallow){ if(ModContent.GetInstance().PridefulHallow)return "Prideful"; return "Loving"; } if(Player.ZoneSnow)return "Wonder"; if(Player.ZoneBeach)return "Flooding"; if(Player.ZoneSkyHeight)return "Rising"; if(Player.ZoneNormalUnderground || Player.ZoneNormalCaverns)return "Circle"; if(Player.ZoneUnderworldHeight)return "Falling"; if(Player.ZoneSandstorm)return "Doom"; return ModContent.GetInstance().DefaultTransition; } public int transitionTicker = 0; public int transitionTime = ModContent.GetInstance().transitionTime; public string transitionChosen; public override void PreUpdate() { // Check if appropriate conditions if(Main.netMode != NetmodeID.Server && Main.LocalPlayer == Player){ // Check if the time is nigh if(transitionTicker==0 && Player.dead && Player.respawnTimer().UseBiomeSpecificTransitions){transitionChosen=GetBiomeSpecificTransitions();} else{transitionChosen=ModContent.GetInstance().DefaultTransition;} if(!Filters.Scene[transitionChosen].IsActive()){ Filters.Scene.Activate(transitionChosen, Player.Center).GetShader(); } } if(transitionTicker>0){ --transitionTicker; float progress = ((float)(transitionTime-transitionTicker)/(float)transitionTime)*100f; // 0-100% Filters.Scene[transitionChosen].GetShader().UseProgress(progress); if(transitionTicker==0){ transitionTime=ModContent.GetInstance().transitionTime; Filters.Scene[transitionChosen].Deactivate(); } } } } } }