Пример #1
0
        public override void Draw(SceneGame scene, DrawPass pass)
        {
            var sprite      = SpriteLoader.Instance.AddSprite("content/effect_blood_score");
            var offsetStart = OffsetStart * (float)LerpHelper.QuadraticIn(0, 1, Frame.Slide);
            var offsetEnd   = OffsetEnd * (float)LerpHelper.QuadraticIn(1, 0, Frame.Slide);
            var position    = Vector2.Lerp(Start + offsetStart, End + offsetEnd, (float)LerpHelper.Quadratic(0, 1, Frame.Slide));

            scene.DrawSpriteExt(sprite, scene.Frame / 5, position - sprite.Middle, sprite.Middle, Angle, Vector2.One, SpriteEffects.None, new Color(215, 63, 36), 0);
        }
Пример #2
0
        public static void DrawStrike(SceneGame scene, Vector2 start, Vector2 end, float slide, Color color)
        {
            var   sprite    = SpriteLoader.Instance.AddSprite("content/effect_bash");
            float angle     = Util.VectorToAngle(end - start);
            var   pos       = Vector2.Lerp(start, end, (float)LerpHelper.QuadraticIn(0.3, 1, slide));
            var   middle    = new Vector2(sprite.Width / 2, sprite.Height / 4);
            var   size      = (float)LerpHelper.CubicOut(0.3, 1, slide);
            var   lengthMod = (float)LerpHelper.CubicIn(1, 0.3, slide);

            scene.DrawSpriteExt(sprite, 0, pos - middle, middle, angle, new Vector2(1, lengthMod) * size, SpriteEffects.None, color, 0);
        }
Пример #3
0
        public override void Draw(SceneGame scene, DrawPass pass)
        {
            var   sprite    = SpriteLoader.Instance.AddSprite("content/effect_bash");
            float angle     = Util.VectorToAngle(End - Start);
            var   pos       = Vector2.Lerp(Start, End, (float)LerpHelper.QuadraticIn(0.3, 1, Slider.Slide));
            var   middle    = new Vector2(sprite.Width / 2, sprite.Height / 4);
            var   size      = (float)LerpHelper.CubicOut(0.3, 1, Slider.Slide);
            var   lengthMod = (float)LerpHelper.CubicIn(1, 0.3, Slider.Slide);

            scene.DrawSpriteExt(sprite, 0, pos - middle, middle, angle, new Vector2(1, lengthMod) * size, SpriteEffects.None, Color, 0);
        }
Пример #4
0
        public override void Draw(GameTime gameTime)
        {
            var mascot_dark = SpriteLoader.Instance.AddSprite("content/intro_mascot_dark");
            var mascot      = SpriteLoader.Instance.AddSprite("content/intro_mascot");

            Color fadeColor;

            WorldTransform = Matrix.Identity;
            Projection     = Matrix.CreateOrthographicOffCenter(0, Viewport.Width, Viewport.Height, 0, 0, -1);
            ColorMatrix colorMatrix = MascotFlash.ColorMatrix;

            PushSpriteBatch();
            PushSpriteBatch(shader: Shader, projection: Projection, shaderSetup: (transform, projection) =>
            {
                SetupColorMatrix(colorMatrix, transform, projection);
            });

            Vector2 pos = new Vector2(Viewport.Width / 2, Viewport.Height / 2);

            switch (MascotSM.CurrentState)
            {
            case MascotState.FadeIn:
                float fadeIn = MascotSM.Content.Slide;
                fadeColor = Color.Lerp(Color.Black, Color.White, (float)LerpHelper.QuadraticOut(0, 1, fadeIn));
                DrawSpriteExt(mascot_dark, AnimationFrame(mascot_dark, 0), pos - mascot_dark.Middle, mascot_dark.Middle, 0, new Vector2(2), SpriteEffects.None, fadeColor, 0);
                break;

            case MascotState.OpenEye:
                float openEye = MascotSM.Content.Slide;
                DrawSpriteExt(mascot_dark, AnimationFrame(mascot_dark, (float)LerpHelper.QuinticIn(0, 1, openEye)), pos - mascot_dark.Middle, mascot_dark.Middle, 0, new Vector2(2), SpriteEffects.None, Color.White, 0);
                break;

            case MascotState.Idle:
                var blink = SlideRepeat(MascotBlink.Slide, 2);
                DrawSpriteExt(mascot, AnimationFrame(mascot, (float)LerpHelper.QuinticIn(0, 1, blink)), pos - mascot.Middle, mascot.Middle, 0, new Vector2(2), SpriteEffects.None, Color.White, 0);
                break;

            case MascotState.FadeOut:
                float fadeOut = MascotSM.Content.Slide;
                fadeColor = Color.Lerp(Color.White, Color.Black, (float)LerpHelper.QuadraticIn(0, 1, fadeOut));
                fadeOut   = MascotSM.Content.Slide;
                DrawSpriteExt(mascot, 3, pos - mascot.Middle, mascot.Middle, 0, new Vector2(2), SpriteEffects.None, fadeColor, 0);
                break;
            }
            PopSpriteBatch();

            foreach (var visualEffect in VisualEffects)
            {
                visualEffect.Draw(this);
            }

            PopSpriteBatch();
        }
Пример #5
0
        public IEnumerable <Wait> RoutineEndLevel()
        {
            var   tile        = PlayerCurio.GetMainTile();
            var   movable     = PlayerCurio.GetBehavior <BehaviorMovable>();
            var   orientation = PlayerCurio.GetBehavior <BehaviorOrientable>();
            var   end         = tile.GetBehavior <BehaviorLevelEnd>();
            var   player      = PlayerCurio.GetBehavior <BehaviorPlayer>();
            int   stains      = 0;
            float pitchSlide  = 0;

            foreach (var bloodStain in VisualEffects.OfType <BloodStain>())
            {
                RunStats.Splats += 1;
                stains          += 1;
                var center = PlayerCurio.GetVisualTarget();
                var emit   = bloodStain.WorldPosition;
                var delta  = Vector2.Normalize(emit - center);
                var offset = delta * Random.NextFloat(40, 80);
                int score;
                if (stains > 20)
                {
                    score = 1000;
                }
                else if (stains > 10)
                {
                    score = 500;
                }
                else
                {
                    score = 50;
                }
                pitchSlide = (float)LerpHelper.QuadraticIn(-1, 1, Math.Min(0, stains / 50f));

                var blob = new ScoreBlood(this, emit, center + delta * Random.NextFloat(4, 8), offset, Util.AngleToVector(Random.NextAngle()) * Random.NextFloat(80, 200), score, 20 + stains * 2);
                if (stains % 3 == 0)
                {
                    blob.Sound       = SoundBloodstainImpact.CreateInstance();
                    blob.Sound.Pitch = pitchSlide;
                }
                bloodStain.Destroy();
            }
            SoundBloodstain.Play(1, pitchSlide, 0);
            yield return(new WaitTime(30 + stains * 2));

            orientation.OrientTo(Util.PointToAngle(end.Direction), LerpHelper.QuadraticIn, new SliderScene(this, 10));
            player.Fade.Set(0, LerpHelper.QuadraticIn, 70);
            var pos = tile.VisualPosition;

            PlayerCurio.MoveVisual(GetOutsidePosition(pos, end.Direction, 200), LerpHelper.QuadraticIn, new SliderScene(this, 100));
            CameraCurio.MoveVisual(GetOutsidePosition(pos, end.Direction, 150), LerpHelper.QuadraticIn, new SliderScene(this, 100));
            SoundEgress.Play(1f, 0f, 0f);
            CurrentTheme.Volume.Set(0, LerpHelper.QuadraticIn, 90);
            player.LevelTransition = true;
            yield return(new WaitTime(100));

            CurrentTheme.Stop(false);
            PlayerCurio.MoveTo(null);
            CameraCurio.MoveTo(null);
            DestroyMap();
            Menu.SubMenu.Open(new BetweenLevelMenu(this));
            yield return(WaitForInput());

            GenerateMap();
            yield return(Scheduler.Instance.RunAndWait(RoutineStartLevel()));
        }