public override void Draw(SpriteBatch spriteBatch, float minDepth, float maxDepth) { CurtainPlayer modplayer = Main.LocalPlayer.GetModPlayer <CurtainPlayer>(); if (maxDepth >= 0 && minDepth < 0) { if (isActive) { float intensity = Utils.Clamp(modplayer.Progress, 0, 1); if (modplayer.FinaleTimer >= 100) { intensity = 1; } DrawSky(spriteBatch, 0, intensity, Color.White); if (intensity > 0 && intensity < 1) { for (float i = 0; i <= 10f; i++) { float k = i / 300f; float a = (10f - i) / 10f; DrawSky(spriteBatch, intensity + k, intensity + k + 0.01f, Color.White * a); } } } else { float intensity = modplayer.Progress / 2; DrawSky(spriteBatch, 0, intensity, Color.White); if (intensity > 0 && intensity < 1) { for (float i = 0; i <= 10f; i++) { float k = i / 300f; float a = (10f - i) / 10f; DrawSky(spriteBatch, intensity + k, intensity + k + 0.01f, Color.White * a); } } } } }
protected override void DrawSelf(SpriteBatch spriteBatch) { base.DrawSelf(spriteBatch); CurtainPlayer modplayer = Main.LocalPlayer.GetModPlayer <CurtainPlayer>(); if (modplayer.Active) { if (modplayer.Progress >= 0 && modplayer.Progress < 1) { DrawFullCurtain(spriteBatch, 0, modplayer.Progress, Color.White); for (float i = 0; i <= 10f; i++) { float k = i / 300f; float a = (10f - i) / 10f; DrawFullCurtain(spriteBatch, modplayer.Progress + k, modplayer.Progress + k + 0.01f, Color.White * a); } } if (modplayer.Progress >= 1 && modplayer.Progress <= 2) { float k = 2 - modplayer.Progress; DrawHalfCurtain(spriteBatch, k, Color.White); Texture2D tex1 = DaCapo.Instance.GetTexture("UI/CurtainLeft"); Texture2D tex2 = DaCapo.Instance.GetTexture("UI/CurtainRight"); spriteBatch.Draw(tex1, new Rectangle(0, 0, Main.screenWidth, Main.screenHeight), Color.White); spriteBatch.Draw(tex2, new Rectangle(0, 0, Main.screenWidth, Main.screenHeight), Color.White); } } if (modplayer.FinaleTimer > 0) { if (modplayer.FinaleTimer > 100) { float k = 2 - modplayer.FinaleTimer / 100f; DrawHalfCurtain(spriteBatch, k, Color.White); Texture2D tex1 = DaCapo.Instance.GetTexture("UI/CurtainLeft"); Texture2D tex2 = DaCapo.Instance.GetTexture("UI/CurtainRight"); spriteBatch.Draw(tex1, new Rectangle(0, 0, Main.screenWidth, Main.screenHeight), Color.White); spriteBatch.Draw(tex2, new Rectangle(0, 0, Main.screenWidth, Main.screenHeight), Color.White); } else { float progress = modplayer.FinaleTimer / 100; DrawFullCurtain(spriteBatch, 0, progress, Color.White); for (float i = 0; i <= 10f; i++) { float k = i / 300f; float a = (10f - i) / 10f; DrawFullCurtain(spriteBatch, progress + k, progress + k + 0.01f, Color.White * a); } } } if (modplayer.TitleTimer > 0) { float Opal; if (modplayer.TitleTimer > 60) { Opal = (float)(90 - modplayer.TitleTimer) / 30; } else if (modplayer.TitleTimer > 30) { Opal = 1; } else { Opal = (float)modplayer.TitleTimer / 30; } string path = "UI/"; switch (modplayer.Title) { case 1: case 2: case 3: case 4: path += "Movement" + modplayer.Title.ToString(); break; default: path += "Finale"; break; } Texture2D tex = DaCapo.Instance.GetTexture(path); spriteBatch.End(); spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.NonPremultiplied, SamplerState.PointWrap, DepthStencilState.Default, RasterizerState.CullNone, null, Main.GameViewMatrix.EffectMatrix); spriteBatch.Draw(tex, new Vector2(Main.screenWidth / 2, Main.screenHeight / 3 * 2), null, Color.White * Opal, 0, tex.Size() / 2, 1, SpriteEffects.None, 0); Main.spriteBatch.End(); Main.spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, Main.DefaultSamplerState, DepthStencilState.None, Main.instance.Rasterizer, null, Main.GameViewMatrix.EffectMatrix); } }
public override void AI() { projectile.timeLeft = 9999; Lighting.AddLight(projectile.Center, 0.9f, 0.9f, 0.9f); Player owner = Main.player[projectile.owner]; if (!owner.active || owner.dead || owner.ghost) { projectile.Kill(); return; } if (owner.HeldItem.type != ModContent.ItemType <DaCapoItem>()) { projectile.Kill(); return; } if (!RightClickChannel(owner)) { projectile.Kill(); return; } owner.itemTime = 2; owner.itemAnimation = 2; owner.heldProj = projectile.whoAmI; int dir = owner.direction; float rot = dir < 0 ? MathHelper.Pi : 0; owner.itemRotation = (float)Math.Atan2(rot.ToRotationVector2().Y *dir * 3, rot.ToRotationVector2().X *dir); owner.velocity = Vector2.Zero; projectile.Center = owner.Center - new Vector2(owner.direction, 0); projectile.ai[0]++; DaCapoPlayer daCapoPlayer = owner.GetModPlayer <DaCapoPlayer>(); if (projectile.ai[0] < DaCapoTime.Movement1Begin) //准备时无敌 { daCapoPlayer.CurrentPlayingMusic = MusicType.Beginning; owner.GetModPlayer <DaCapoPlayer>().DaCapoImmune = DamageType.All; } else if (projectile.ai[0] < DaCapoTime.Movement2Begin) //第一乐章免疫弹幕 { daCapoPlayer.CurrentPlayingMusic = MusicType.Movement1; owner.GetModPlayer <DaCapoPlayer>().DaCapoImmune = DamageType.Projectile; owner.AddBuff(ModContent.BuffType <DaCapoMovement1Buff>(), 2); } else if (projectile.ai[0] < DaCapoTime.Movement3Begin) //第二乐章免疫近战 { daCapoPlayer.CurrentPlayingMusic = MusicType.Movement2; owner.GetModPlayer <DaCapoPlayer>().DaCapoImmune = DamageType.Melee; owner.AddBuff(ModContent.BuffType <DaCapoMovement2Buff>(), 2); } else if (projectile.ai[0] < DaCapoTime.Movement4Begin) //第三乐章免疫弹幕 { daCapoPlayer.CurrentPlayingMusic = MusicType.Movement3; owner.GetModPlayer <DaCapoPlayer>().DaCapoImmune = DamageType.Projectile; owner.AddBuff(ModContent.BuffType <DaCapoMovement3Buff>(), 2); } else if (projectile.ai[0] < DaCapoTime.FinalBegin) //第四乐章免疫近战 { daCapoPlayer.CurrentPlayingMusic = MusicType.Movement4; owner.GetModPlayer <DaCapoPlayer>().DaCapoImmune = DamageType.Melee; owner.AddBuff(ModContent.BuffType <DaCapoMovement4Buff>(), 2); } else //终曲全免 { owner.GetModPlayer <DaCapoPlayer>().DaCapoImmune = DamageType.All; if (projectile.ai[0] < DaCapoTime.FinalDamage) { owner.GetModPlayer <CurtainPlayer>().ShakeScreen = true; daCapoPlayer.CurrentPlayingMusic = MusicType.Final1; owner.AddBuff(ModContent.BuffType <DaCapoFinalBuff>(), 2); } else if (projectile.ai[0] < DaCapoTime.EndClap) { owner.GetModPlayer <CurtainPlayer>().ShakeScreen = true; daCapoPlayer.CurrentPlayingMusic = MusicType.Final2; owner.AddBuff(ModContent.BuffType <DaCapoFinalBuff>(), 2); } else { daCapoPlayer.CurrentPlayingMusic = MusicType.End; } } if (projectile.ai[0] == DaCapoTime.Movement1Begin - 120) { Projectile.NewProjectile(owner.Bottom + new Vector2(-100, 5), Vector2.Zero, ModContent.ProjectileType <FirstChair>(), 0, 0, owner.whoAmI); } if (projectile.ai[0] == DaCapoTime.Movement1Begin) //第一乐章 //150 { CurtainPlayer.SetTitle(1); Projectile.NewProjectile(owner.Center, Vector2.Zero, ModContent.ProjectileType <MusicRing1>(), projectile.damage, 0, owner.whoAmI); } if (projectile.ai[0] == DaCapoTime.Movement2Begin - 120) { Projectile.NewProjectile(owner.Bottom + new Vector2(100, 5), Vector2.Zero, ModContent.ProjectileType <SecondChair>(), 0, 0, owner.whoAmI); } if (projectile.ai[0] == DaCapoTime.Movement2Begin) //第二乐章 { CurtainPlayer.SetTitle(2); Projectile.NewProjectile(owner.Center, Vector2.Zero, ModContent.ProjectileType <MusicRing2>(), projectile.damage, 0, owner.whoAmI); } if (projectile.ai[0] == DaCapoTime.Movement3Begin - 120) { Projectile.NewProjectile(owner.Bottom + new Vector2(-60, 5), Vector2.Zero, ModContent.ProjectileType <ThirdChair>(), 0, 0, owner.whoAmI); } if (projectile.ai[0] == DaCapoTime.Movement3Begin) //第三乐章 { CurtainPlayer.SetTitle(3); Projectile.NewProjectile(owner.Center, Vector2.Zero, ModContent.ProjectileType <MusicRing3>(), projectile.damage, 0, owner.whoAmI); } if (projectile.ai[0] == DaCapoTime.Movement4Begin - 120) { Projectile.NewProjectile(owner.Bottom + new Vector2(60, 5), Vector2.Zero, ModContent.ProjectileType <FourthChair>(), 0, 0, owner.whoAmI); } if (projectile.ai[0] == DaCapoTime.Movement4Begin) //第四乐章 { CurtainPlayer.SetTitle(4); Projectile.NewProjectile(owner.Center, Vector2.Zero, ModContent.ProjectileType <MusicRing4>(), projectile.damage, 0, owner.whoAmI); } if (projectile.ai[0] == DaCapoTime.FinalBegin) //终曲(出现字幕)1 { CurtainPlayer.SetTitle(5); //CurtainPlayer.Finale(owner); BaseChair.EnterFinal(); } if (projectile.ai[0] == DaCapoTime.FinalDamage) //音乐开始扭曲2 { CurtainPlayer.Finale(owner); } if (projectile.ai[0] == DaCapoTime.FinalDamage + 3) //最终伤害 { int protmp = Projectile.NewProjectile(Main.screenPosition, Vector2.Zero, ModContent.ProjectileType <MusicFinalDamage>(), projectile.damage * 60, 0, owner.whoAmI); Main.projectile[protmp].width = Main.screenWidth; Main.projectile[protmp].height = Main.screenHeight; } if (projectile.ai[0] == DaCapoTime.EndClap) //闭幕 { CurtainPlayer.FinaleCurtain(owner); } if (projectile.ai[0] == DaCapoTime.End - 10) //(提前十帧结束) { projectile.Kill(); owner.itemTime = 10; owner.itemAnimation = 10; return; } }