Example #1
0
        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);
                        }
                    }
                }
            }
        }
Example #2
0
        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);
            }
        }
Example #3
0
        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;
            }
        }