Пример #1
0
        private void DrawWing(SceneGame scene, SpriteReference sprite, Color color, int segments, float directionMod, float distanceMod, Microsoft.Xna.Framework.Graphics.SpriteEffects mirror)
        {
            //new Color(244, 211, 23)
            //SpriteReference hand = SpriteLoader.Instance.AddSprite("content/hand");
            int index = 0;

            for (int i = 1; i <= segments; i++)
            {
                int     subSegments = 9;
                float   angle       = directionMod * MathHelper.ToRadians(90 - i * 5);
                float   distance    = (float)LerpHelper.Quadratic(10, distanceMod * 50, (float)i / segments);
                Vector2 pivot       = VisualPosition() + Util.AngleToVector(angle) * distance;
                scene.DrawSpriteExt(sprite, 0, pivot + GetHandOffset(index), sprite.Middle, angle + directionMod * MathHelper.PiOver4, Vector2.One, mirror, color, 0);
                index++;
                for (int e = 0; e <= subSegments; e++)
                {
                    float subSegmentSlide = (float)e / (subSegments + 1);
                    float subAngle        = angle - directionMod * MathHelper.ToRadians(i * 2);
                    float subDistance     = distanceMod * e * 5;
                    float visAngle        = subAngle + directionMod * MathHelper.PiOver2 + directionMod * MathHelper.ToRadians(i * -10);
                    scene.DrawSpriteExt(sprite, 0, pivot + GetHandOffset(index) + Util.AngleToVector(subAngle) * subDistance, sprite.Middle, visAngle, Vector2.One, mirror, color * MathHelper.Lerp(0.3f, 1, subSegmentSlide), 0);
                    index++;
                }
            }
        }
Пример #2
0
        public override IEnumerable <Wait> RoutineUse(Creature user, object target)
        {
            if (target is Creature targetCreature)
            {
                Consume();
                ShowSkill(user);
                user.VisualPose = user.FlickPose(CreaturePose.Cast, CreaturePose.Stand, 70);
                yield return(user.WaitSome(50));

                var effect = new FlareCharge(user.World, SpriteLoader.Instance.AddSprite("content/cinder_ender"), user, () => targetCreature.VisualTarget, 200);

                yield return(user.WaitSome(50));

                new ScreenShakeRandom(user.World, 2, 150, LerpHelper.Invert(LerpHelper.Linear));
                yield return(new WaitEffect(effect));

                new ScreenFlashLocal(user.World, () => ColorMatrix.Ender(), targetCreature.VisualTarget, 60, 150, 80, 50);
                new EnderNuke(user.World, SpriteLoader.Instance.AddSprite("content/nuke_ender"), targetCreature.VisualTarget, 0.6f, 80);
                new ScreenShakeRandom(user.World, 8, 80, LerpHelper.QuarticIn);
                //new BigExplosion(user.World, () => target.VisualTarget, (pos, time) => new EnderExplosion(user.World, pos, Vector2.Zero, time));
                yield return(user.WaitSome(10));

                var wait = user.Attack(targetCreature, SkillUtil.SafeNormalize(targetCreature.VisualTarget - user.VisualTarget), FlareAttack);
                yield return(wait);

                yield return(user.WaitSome(20));
            }
        }
Пример #3
0
    void Show()
    {
        print("Should show");

        // print ("Line reference color is : " + _linesReferenceColor);
        StartCoroutine(LerpHelper.ColorFade(_lineMaterial, _lineColor, StateManager._instance._lerpTime, "Quintic", (0.7f * StateManager._instance._lerpTime)));
    }
Пример #4
0
 void Hide()
 {
     // first, save the current scale
     _referenceScale = this.gameObject.transform.localScale;
     // Make the UI disappear
     StartCoroutine(LerpHelper.LerpScaleWithEasing(this.gameObject, this.gameObject.transform.localScale, Vector3.zero, _lerpTime, "Quintic", false, (0.7f * _lerpTime) + _randomOffset));
 }
Пример #5
0
 private void Awake()
 {
     this._lerpHelper = new LerpHelper(0, 1, 0.01f, 1f, LerpHelper.LerpType.Hermite)
     {
         Speed = this._speed
     };
 }
Пример #6
0
        public override void Draw(Scene scene)
        {
            var ui = SpriteLoader.Instance.AddSprite("content/ui_box");

            int offset        = (scene.Viewport.Width - Width) / 2;
            int widthInterior = Width - CardWidth;
            int segmentWidth  = widthInterior / (Actions.Length - 1);

            for (int i = 0; i < Actions.Length; i++)
            {
                var action = Actions[i];
                if (action == null)
                {
                    continue;
                }
                int height = Height;
                if (!action.Enabled())
                {
                    height = height * 4 / 5;
                }
                height += (int)MathHelper.Lerp(0, 30, (float)LerpHelper.QuadraticOut(0, 1, action.HoverFrame.Slide));
                int x = offset + i * segmentWidth;
                int y = scene.Viewport.Height - (int)MathHelper.Lerp(0, height, (float)LerpHelper.ElasticOut(0, 1, action.Frame.Slide));
                CardUIs[i].Draw(FontRenderer, x, y, 1);
                //DrawLabelledUI(scene, ui, ui, new Rectangle(x, y, CardWidth, height + 40), action.Name);
                //scene.DrawText(action.Description, new Vector2(x, y), Alignment.Center, new TextParameters().SetColor(Color.White, Color.Black).SetConstraints(CardWidth, height));
            }
        }
Пример #7
0
    IEnumerator OpenDoor()
    {
        if (keyProgress == null)
        {
            keyProgress = Instantiate <Transform>(keyProgressPrefab);
            keyProgress.transform.position = key.transform.position.SwapZ(10);
            keyProgress.localScale         = Vector3.zero;
        }

        LerpDelegate openFunc = delegate(float openFraction) {
            openProgress = openFraction;
            SetBallSize(openProgress);
            SetDoorAlpha(1 - openProgress);
        };

        IEnumerator lerpCoroutine = LerpHelper.Lerp(openFunc, secondsToOpen);

        while (lerpCoroutine.MoveNext())
        {
            yield return(null);
        }

        //yield return StartCoroutine(LerpHelper.Lerp(openFunc, secondsToOpen));

        doorOpened = true;
        door.SetActive(false);
    }
Пример #8
0
        public void Steppy(float addAngle)
        {
            var active     = Curio.GetActionHolder(ActionSlot.Active);
            var passive    = Curio.GetActionHolder(ActionSlot.Passive);
            var orientable = Curio.GetBehavior <BehaviorOrientable>();
            var tile       = Curio.GetMainTile();

            var actions = new List <ActionWrapper>();

            if (!tile.IsChasm())
            {
                if (Momentum.Amount >= 16)
                {
                    var direction = Util.RotateVector(Momentum.Direction, addAngle);
                    var offset    = direction.ToTileOffset();
                    var slide     = MathHelper.Clamp(Momentum.Amount / 32f, 0, 1);
                    var speed     = (float)LerpHelper.QuadraticOut(0.1f, 0.5f, slide);
                    var time      = 1 / speed;

                    var neighbor = tile.GetNeighborOrNull(offset.X, offset.Y);
                    if (neighbor != null && !neighbor.IsSolid())
                    {
                        actions.Add(new ActionClearStab(Curio).InSlot(ActionSlot.Active));
                        actions.Add(new ActionChangeMomentum(Curio, -4).InSlot(ActionSlot.Active));
                        actions.Add(new ActionMoveForward(Curio, direction, 5).InSlot(ActionSlot.Active));
                    }
                }
            }
            actions.Apply(Curio);
        }
Пример #9
0
        public void AddDefaultMove(List <ActionWrapper> actions)
        {
            var tile = Curio.GetMainTile();

            if (tile == null)
            {
                return;
            }

            if (Momentum.Amount > 0)
            {
                var offset = Momentum.Direction.ToTileOffset();
                var slide  = MathHelper.Clamp(Momentum.Amount / 32f, 0, 1);
                var speed  = (float)LerpHelper.QuadraticOut(0.1f, 0.5f, slide);
                var time   = 1 / speed;

                var neighbor = tile.GetNeighborOrNull(offset.X, offset.Y);
                if (neighbor == null || neighbor.IsSolid())
                {
                    if (neighbor != null && (Momentum.Amount > 10 || (neighbor.IsSpiky() && Momentum.Amount > 2)))
                    {
                        actions.Add(new ActionCollision(Curio, neighbor, 10).InSlot(ActionSlot.Passive));
                    }
                    actions.Add(new ActionStop(Curio).InSlot(ActionSlot.Passive));
                }
                else
                {
                    actions.Add(new ActionMoveForward(Curio, Momentum.Direction, time).InSlot(ActionSlot.Passive));
                }
            }
            else if (tile.HasBehaviors <BehaviorChasm>())
            {
                actions.Add(new ActionFall(Curio, 30).InSlot(ActionSlot.Passive));
            }
        }
Пример #10
0
        public override void Draw(SceneGame scene, DrawPass pass)
        {
            var posBag = Vector2.Transform(PositionBag, Matrix.Invert(scene.WorldTransform));
            var offset = Offset * (float)Math.Sin(Frame / FrameEnd * Math.PI);

            Item.DrawIcon(scene, Vector2.Lerp(PositionWorld, posBag, (float)LerpHelper.CircularIn(0, 1, Frame / FrameEnd)) + offset);
        }
Пример #11
0
        private IEnumerable <Wait> RoutineQuake(Creature user, Tile impactTile, int radius, ICollection <Tile> tiles)
        {
            var         tileSet     = impactTile.GetNearby(radius).Where(tile => tile.Opaque).Where(tile => GetSquareDistance(impactTile, tile) <= radius * radius).Shuffle(Random);
            int         chargeTime  = 60;
            List <Tile> damageTiles = new List <Tile>();

            foreach (Tile tile in tileSet)
            {
                tile.VisualUnderColor = ChargeColor(user, chargeTime);
                if (!tiles.Contains(tile))
                {
                    damageTiles.Add(tile);
                }
                tiles.Add(tile);
            }
            new ScreenShakeRandom(user.World, 4, chargeTime + 60, LerpHelper.Invert(LerpHelper.Linear));
            yield return(user.WaitSome(chargeTime));

            new LightningField(user.World, SpriteLoader.Instance.AddSprite("content/lightning_ender"), tileSet, 60);
            yield return(user.WaitSome(60));

            new ScreenShakeRandom(user.World, 8, 60, LerpHelper.Linear);
            foreach (Tile tile in tileSet)
            {
                Vector2 offset = new Vector2(-0.5f + Random.NextFloat(), -0.5f + Random.NextFloat()) * 16;
                if (Random.NextDouble() < 0.7)
                {
                    new EnderExplosion(user.World, tile.VisualTarget + offset, Vector2.Zero, 0, Random.Next(14) + 6);
                }
                tile.VisualUnderColor = () => Color.TransparentBlack;
                tile.MakeFloor();
            }
        }
Пример #12
0
        public override void DrawArcObject(SceneGame scene, DrawPass pass)
        {
            var spriteWraith      = SpriteLoader.Instance.AddSprite("content/wraith");
            var spriteWraithTrail = SpriteLoader.Instance.AddSprite("content/wraith_trail");
            var tile     = Curio.GetMainTile();
            var startPos = Source;
            var endPos   = tile.VisualTarget;

            Vector2 curve(float slide)
            {
                var a = Vector2.Lerp(startPos, startPos + VelocityStart, (float)LerpHelper.Quadratic(0, 1, slide));
                var b = Vector2.Lerp(endPos + VelocityEnd, endPos, (float)LerpHelper.Quadratic(0, 1, slide));

                return(Vector2.Lerp(a, b, (float)LerpHelper.Quadratic(0, 1, slide)));
            }

            Color colorStart = new Color(215, 63, 36);
            Color colorEnd   = new Color(118, 39, 102);

            if (pass == DrawPass.Effect)
            {
                int segments = 5;
                for (int i = 0; i < segments; i++)
                {
                    float   trailSlide = (float)i / (segments - 1);
                    float   trailPos   = (float)LerpHelper.QuadraticOut(Frame.Slide - 0.05f, Frame.Slide, trailSlide);
                    Vector2 pos        = curve(trailPos);
                    scene.DrawSpriteExt(spriteWraithTrail, 0, pos - spriteWraithTrail.Middle, spriteWraithTrail.Middle, 0, Vector2.One, SpriteEffects.None, Color.Lerp(colorStart.WithAlpha(0), colorEnd, trailSlide), 0);
                }
            }
            if (pass == DrawPass.EffectAdditive)
            {
                scene.DrawSpriteExt(spriteWraith, 0, curve(Frame.Slide) - spriteWraith.Middle, spriteWraith.Middle, 0, Vector2.One, SpriteEffects.None, colorStart, 0);
            }
        }
Пример #13
0
        protected static int GetFrameOffset(PoseData poseData)
        {
            int frameOffset = 0;

            switch (poseData.Pose)
            {
            case (CreaturePose.Stand):
                frameOffset = 1;
                break;

            case (CreaturePose.Walk):
                double lerp = LerpHelper.ForwardReverse(0, 2, (poseData.Frame / 50.0) % 1);
                frameOffset = (int)Math.Round(lerp);
                break;

            case (CreaturePose.Attack):
                frameOffset = 3;
                break;

            case (CreaturePose.Cast):
                frameOffset = 4;
                break;
            }

            return(frameOffset);
        }
Пример #14
0
    // Hide the lines
    void Hide()
    {
//		_linesSharedMaterial = _lineMaterial;
//		_linesReferenceColor = _linesSharedMaterial.color;

        StartCoroutine(LerpHelper.ColorFade(_lineMaterial, Color.clear, StateManager._instance._lerpTime, "Quintic", 0.0f));
    }
Пример #15
0
        public void Run()
        {
            Random random    = new Random();
            var    world     = Origin.GetWorld();
            var    alive     = Target.GetBehavior <BehaviorAlive>();
            var    sword     = Origin.GetBehavior <BehaviorSword>();
            var    bloodfire = Origin.GetBehavior <BehaviorSkillBloodfireBlade>();

            bloodfire.Extinguish();

            new TimeFade(world, 0.05f, LerpHelper.ExponentialIn, 40);

            Target.GetFlashHelper()?.AddFlash(ColorMatrix.Flat(Color.White), 5);
            Target.GetShakeHelper()?.AddShakeRandom(3, LerpHelper.QuadraticOut, 5);
            new HitStop(world, 0, 5);

            alive.SetDamage(alive.HP);

            Target.GetFlashHelper()?.AddFlash(ColorMatrix.Translate(new Color(255, 64, 16)), LerpHelper.Invert(LerpHelper.QuadraticOut), (int)ExplosionTime.EndTime, false);
            Target.GetShakeHelper()?.AddShakeRandom(3, LerpHelper.Invert(LerpHelper.QuadraticOut), (int)ExplosionTime.EndTime, false);

            if (alive.CurrentDead)
            {
                if (Origin == world.PlayerCurio)
                {
                    world.RunStats.Kills += 1;
                }
            }

            if (sword != null)
            {
                sword.HasBlood = false;
            }
        }
Пример #16
0
        float GetFalloff()
        {
            float    timeFalloff = GetTimeFalloff();
            Creature player      = World.Player;

            if (player == null)
            {
                return(0.0f);
            }
            Vector2 dist   = player.VisualTarget - Position;
            float   length = dist.Length();

            if (length < FullRadius)
            {
                return(1.0f * timeFalloff);
            }
            else if (length < FullRadius + FalloffRadius)
            {
                return((float)LerpHelper.CubicIn(1, 0, (length - FullRadius) / FalloffRadius) * timeFalloff);
            }
            else
            {
                return(0.0f);
            }
        }
Пример #17
0
        private void DrawMace(ICurio curio, SceneGame scene, DrawPass pass)
        {
            var center    = curio.GetVisualPosition() + new Vector2(8, 8);
            var offset    = curio.GetOffset();
            var angleBody = curio.GetVisualAngle();
            var mace      = curio.GetBehavior <BehaviorMace>();

            if (mace != null && (!mace.Upswing.Done || !mace.MaceReturn.Done))
            {
                var weaponAngle    = (float)LerpHelper.QuadraticOut(0, 1, mace.Upswing.Slide);
                var weaponScale    = (float)LerpHelper.QuadraticOut(0.5, 1.0, mace.Upswing.Slide);
                var weaponStartPos = Util.AngleToVector(angleBody + MathHelper.PiOver4 * 2) * 8;
                var weaponEndPos   = Util.AngleToVector(angleBody + MathHelper.PiOver4 * 3) * 10;
                var weaponPos      = center + offset + Vector2.Lerp(weaponStartPos, weaponEndPos, (float)LerpHelper.QuadraticOut(0, 1, mace.Upswing.Slide));
                scene.DrawSpriteExt(SpriteWeapon, 0, weaponPos - SpriteWeapon.Middle, SpriteWeapon.Middle, angleBody + weaponAngle, new Vector2(weaponScale), SpriteEffects.None, Color.White, 0);
                if (!mace.Upswing.Done)
                {
                    mace.DrawMace(scene, weaponPos, Util.AngleToVector(mace.UpswingAngle) * (float)LerpHelper.QuadraticOut(0, 12, mace.MaceReturn.Slide), 2);
                }
                if (!mace.MaceReturn.Done)
                {
                    var maceOffset = mace.MacePosition - weaponPos;
                    mace.DrawMace(scene, weaponPos, Vector2.Lerp(maceOffset, Vector2.Zero, (float)LerpHelper.QuadraticOut(0, 1, mace.MaceReturn.Slide)), 8);
                }
            }
        }
Пример #18
0
        private float DarkRadius(float a, float b, float slide, float split)
        {
            float startSlide = Util.ReverseLerp(slide, 0f, split);
            float endSlide   = Util.ReverseLerp(slide, split, 1f);

            return(slide < 0.2f ? (float)LerpHelper.QuadraticOut(a, b, startSlide) : (float)LerpHelper.QuadraticIn(b, a, endSlide));
        }
Пример #19
0
        public override void Activate(Creature creature)
        {
            var cloak = new Cloak(creature, 10);

            cloak.OnUpdate += (c) =>
            {
                float size = 0.15f + 0.15f * Random.NextFloat();
                size *= (float)LerpHelper.CircularOut(1, 0.5, c.Frame.GetSubSlide(10, c.Frame.EndTime));

                if (c.Frame.Time % 2 == 0)
                {
                    var   pos       = c.Creature.VisualTarget;
                    int   totaltime = 5 + Random.Next(10);
                    float bigSize   = 1.5f + Random.NextFloat();
                    Color color     = Color.Lerp(Color.White, Color.Gray, Random.NextFloat());

                    new ParticleCutter(World, totaltime + Random.Next(4))
                    {
                        Sprite        = SpriteLoader.Instance.AddSprite("content/cutter"),
                        FadeSlide     = 0.75f,
                        Position      = pos,
                        Angle         = Random.NextAngle(),
                        RotationStart = -MathHelper.TwoPi / totaltime,
                        RotationEnd   = -(MathHelper.TwoPi / totaltime) * 0.5f,
                        AngleLerp     = LerpHelper.Linear,
                        Scale         = size,
                        ScaleEnd      = size * bigSize,
                        ScaleLerp     = LerpHelper.CircularOut,
                        Color         = color,
                        Pass          = DrawPass.EffectAdditive,
                    };
                }
            };
        }
Пример #20
0
        public static List <Vector2> GetWingPositions(Vector2 position, float slide)
        {
            List <Vector2> positions = new List <Vector2>();

            positions.AddRange(GetWingPositions(position, 9, (float)LerpHelper.QuadraticIn(0, 1, slide), slide));
            positions.AddRange(GetWingPositions(position, 9, (float)LerpHelper.QuadraticIn(0, -1, slide), slide));
            return(positions);
        }
    public void ExitToRight()
    {
        var from = rect.anchoredPosition;
        var to   = positionRight;

        moving         = new LerpHelper <Vector2>(from, to, Vector2.Lerp, speed, Vector2.Distance(from, to));
        screenPosition = ScreenPosition.Left;
    }
Пример #22
0
 public void PlayEraseHeight(float from, float to, float eraseSeconds)
 {
     StartCoroutine(LerpHelper.LerpCoroutine(eraseSeconds, _percentage =>
     {
         this.ratioHeight = Mathf.Lerp(from, to, _percentage);
         CutImage();
     }));
 }
Пример #23
0
        public override void Activate(Creature creature)
        {
            var fire_small = SpriteLoader.Instance.AddSprite("content/fire_small");

            var cloak = new Cloak(creature, 10);

            cloak.OnUpdate += (c) =>
            {
                float size = 0.15f + 0.15f * Random.NextFloat();
                size *= (float)LerpHelper.CircularOut(1, 0.5, c.Frame.GetSubSlide(10, c.Frame.EndTime));

                if (c.Frame.Time % 1 == 0)
                {
                    var   pos       = c.Creature.VisualTarget;
                    int   totaltime = 5 + Random.Next(10);
                    float bigSize   = 1.5f + Random.NextFloat();
                    Color color     = new Color(255, 64, 16);

                    new ParticleCutter(World, totaltime + Random.Next(4))
                    {
                        Sprite        = SpriteLoader.Instance.AddSprite("content/cutter"),
                        FadeSlide     = 0.75f,
                        Position      = pos,
                        Angle         = Random.NextAngle(),
                        RotationStart = -MathHelper.TwoPi / totaltime,
                        RotationEnd   = -(MathHelper.TwoPi / totaltime) * 0.5f,
                        AngleLerp     = LerpHelper.Linear,
                        Scale         = size,
                        ScaleEnd      = size * bigSize,
                        ScaleLerp     = LerpHelper.CircularOut,
                        Color         = color,
                        Pass          = DrawPass.EffectAdditive,
                    };
                }
            };

            for (int i = 0; i < 3; i++)
            {
                float angle         = Random.NextFloat() * MathHelper.TwoPi;
                float distance      = 12 + Random.NextFloat() * 12;
                int   time          = Random.Next(10) + 20;
                var   waterParticle = new ParticleThrow(World, null, creature.VisualTarget, creature.VisualTarget + Util.AngleToVector(angle) * distance, 16 + Random.NextFloat() * 8, LerpHelper.Linear, LerpHelper.QuadraticOut, time, 0.7f)
                {
                    Scale = Random.NextFloat() * 0.75f + 0.25f,
                    Pass  = DrawPass.EffectAdditive,
                };
                waterParticle.OnUpdate += (particle) =>
                {
                    if (particle.Frame.Time % 4 == i % 4)
                    {
                        var explosion = new ParticleExplosion(World, fire_small, Vector2.Zero, LerpHelper.Linear, LerpHelper.Linear, 10)
                        {
                            Position = particle.Position,
                        };
                    }
                };
            }
        }
Пример #24
0
 public void LerpTo(Vector2 anchoredPosition)
 {
     lerpPosition = new LerpHelper <Vector2>(
         rectTransform.anchoredPosition,
         anchoredPosition,
         Vector2.Lerp,
         3000,
         Vector2.Distance(anchoredPosition, rectTransform.anchoredPosition));
 }
 public void Hide()
 {
     GetComponent <RectTransform>().anchoredPosition = positionLeft;
     screenPosition = ScreenPosition.Left;
     if (moving != null)
     {
         moving = null;
     }
 }
 public void Show()
 {
     GetComponent <RectTransform>().anchoredPosition = Vector2.zero;
     screenPosition = ScreenPosition.Center;
     if (moving != null)
     {
         moving = null;
     }
     OnEnter(transitionedFrom);
 }
Пример #27
0
    public void FixedUpdate()
    {
        if (CurrentProgress <= 0 && Direction == -1 || CurrentProgress >= TransitionDuration && Direction == 1)
        {
            return;
        }

        CurrentProgress        += Direction * Time.deltaTime;
        transform.localPosition = Vector3.Lerp(StartPosition, EndPosition, LerpHelper.SmoothStep2(CurrentProgress / TransitionDuration));
    }
Пример #28
0
 void Start()
 {
     if (_fadeOut)
     {
         IEnumerator disappear = LerpHelper.LerpScaleWithEasing(this.gameObject, this.gameObject.transform.localScale, new Vector3(0.0f, 0.0f, 0.0f), _fadeOutTime, "Quintic", true, _lifeTime);
         StartCoroutine(disappear);
     }
     else
     {
         Destroy(this.gameObject, _lifeTime);
     }
 }
Пример #29
0
        public override void Activate(Creature creature)
        {
            var particle = SpriteLoader.Instance.AddSprite("content/rock");

            var cloak = new Cloak(creature, 10);

            cloak.OnUpdate += (c) =>
            {
                float size = 0.15f + 0.15f * Random.NextFloat();
                size *= (float)LerpHelper.CircularOut(1, 0.5, c.Frame.GetSubSlide(10, c.Frame.EndTime));

                if (c.Frame.Time % 1 == 0)
                {
                    var   pos       = c.Creature.VisualTarget;
                    int   totaltime = 5 + Random.Next(10);
                    float bigSize   = 1.5f + Random.NextFloat();
                    Color color     = new Color(64, 128, 255);

                    new ParticleCutter(World, totaltime + Random.Next(4))
                    {
                        Sprite        = SpriteLoader.Instance.AddSprite("content/cutter"),
                        FadeSlide     = 0.75f,
                        Position      = pos,
                        Angle         = Random.NextAngle(),
                        RotationStart = -MathHelper.TwoPi / totaltime,
                        RotationEnd   = -(MathHelper.TwoPi / totaltime) * 0.5f,
                        AngleLerp     = LerpHelper.Linear,
                        Scale         = size,
                        ScaleEnd      = size * bigSize,
                        ScaleLerp     = LerpHelper.CircularOut,
                        Color         = color,
                        Pass          = DrawPass.EffectAdditive,
                    };
                }

                if (c.Frame.Time % 2 == 0)
                {
                    for (int i = 0; i < 3; i++)
                    {
                        float angle       = Random.NextFloat() * MathHelper.TwoPi;
                        float distance    = 12 + Random.NextFloat() * 12;
                        int   time        = Random.Next(10) + 10;
                        var   iceParticle = new ParticleThrow(World, particle, creature.VisualTarget + Util.AngleToVector(angle) * 4, creature.VisualTarget + Util.AngleToVector(angle) * distance, 4 + Random.NextFloat() * 8, LerpHelper.Linear, LerpHelper.QuadraticOut, time, 0.7f)
                        {
                            SubImage    = Random.Next(particle.SubImageCount),
                            Angle       = Random.NextAngle(),
                            ColorMatrix = ColorMatrix.TwoColorLight(Color.Blue, Color.White),
                            Pass        = DrawPass.EffectAdditive,
                        };
                    }
                }
            };
        }
 public virtual void Update()
 {
     if (moving != null)
     {
         moving.Update(Time.deltaTime);
         rect.anchoredPosition = moving.Lerp();
         if (moving.IsDone())
         {
             moving = null;
         }
     }
 }