Exemple #1
0
        public void Run()
        {
            var world  = Origin.GetWorld();
            var center = Origin.GetMainTile();
            var sword  = Origin.GetBehavior <BehaviorSword>();

            if (sword != null)
            {
                sword.HasHeart = false;
            }

            new ScreenFlashSimple(world, ColorMatrix.Tint(Color.Red), LerpHelper.QuadraticOut, 20);
            new ScreenShakeRandom(world, 15, 20, LerpHelper.QuadraticOut);
            foreach (var target in center.GetNearby(Radius).SelectMany(x => x.Contents))
            {
                if (target == Origin || !target.HasBehaviors <BehaviorAlive>())
                {
                    continue;
                }
                var actions = new List <ActionWrapper>();
                actions.Add(new ActionGib(Origin, target, Score, SoundLoader.AddSound("content/sound/big_splat.wav")).InSlot(ActionSlot.Active));
                actions.Apply(target);
            }
            Sound.Play(1.0f, 0f, 0f);
        }
Exemple #2
0
        private void Hit(ICurio target)
        {
            var actions = new List <ActionWrapper>();

            actions.Add(new ActionEnemyHit(Origin, target, SoundLoader.AddSound("content/sound/hit.wav")).InSlot(ActionSlot.Active));
            actions.Apply(target);
        }
Exemple #3
0
 public override void Impact()
 {
     foreach (var target in GetImpactArea().SelectMany(x => x.Contents))
     {
         var actions = new List <ActionWrapper>();
         actions.Add(new ActionEnemyHit(Curio, target, SoundLoader.AddSound("content/sound/sinister.wav")).InSlot(ActionSlot.Active));
         actions.Apply(target);
     }
     Curio.Destroy();
 }
        private void Hit(ICurio target)
        {
            var world   = Origin.GetWorld();
            var actions = new List <ActionWrapper>();

            actions.Add(new ActionEnemyHit(Origin, target, SoundLoader.AddSound("content/sound/stab.wav")).InSlot(ActionSlot.Active));
            actions.Apply(target);

            /*target.GetFlashHelper()?.AddFlash(ColorMatrix.Flat(Color.White), 20);
             * target.GetShakeHelper()?.AddShakeRandom(3, LerpHelper.QuadraticOut, 30);
             * new TimeFade(world, 0, LerpHelper.QuadraticIn, 50);
             * var alive = target.GetBehavior<BehaviorAlive>();
             * if (alive != null)
             * {
             *  alive.TakeDamage(1);
             * }*/
        }
Exemple #5
0
        public void Tick(SceneGame scene)
        {
            var exploded = ExplosionTime.Done;
            var active   = Origin.GetActionHolder(ActionSlot.Active);
            var passive  = Origin.GetActionHolder(ActionSlot.Passive);

            ExplosionTime += scene.TimeModCurrent;

            if (ExplosionTime.Done)
            {
                if (!exploded)
                {
                    SkillUtil.CreateSpatter(scene, Target.GetVisualTarget(), 7, Vector2.Zero, 2, Random);

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

                    for (float angle = 0; angle <= MathHelper.TwoPi; angle += MathHelper.TwoPi * 0.02f)
                    {
                        var particle = new ExplosionParticle(scene, SpriteLoader.Instance.AddSprite("content/effect_explosion"), Target.GetVisualTarget() + Util.AngleToVector(angle) * 8, Random.Next(5, 15))
                        {
                            Angle    = angle + Random.NextFloat(-0.3f, +0.3f),
                            Color    = Color.White,
                            DrawPass = DrawPass.EffectAdditive,
                        };
                        particle.Size.Set(Random.NextFloat(1.0f, 1.5f));
                    }

                    var actions = new List <ActionWrapper>();
                    actions.Add(new ActionGib(Origin, Target, Score, SoundLoader.AddSound("content/sound/big_splat.wav")).InSlot(ActionSlot.Active));
                    actions.Apply(Target);

                    var actionsOrigin = new List <ActionWrapper>()
                    {
                        new ActionKeepMoving(Origin).InSlot(ActionSlot.Active),
                    };
                    actionsOrigin.Apply(Origin);
                }

                Time += scene.TimeModCurrent;
            }
            else
            {
                active.CurrentActions.RemoveAll(x => x is ActionKeepMoving);
            }
        }
Exemple #6
0
        public void OnAction(EventAction e)
        {
            var hits  = e.Actions.GetEffectsTargetting <IWeaponHit>(Curio).ToList();
            var alive = Curio.GetBehavior <BehaviorAlive>();

            foreach (var hit in hits)
            {
                if (hit is ActionEnemyHit)
                {
                    continue;
                }

                if (hit is ActionStabHit stab)
                {
                    e.Actions.Add(new ActionHitVisual(hit.Origin, hit.Target, SoundLoader.AddSound("content/sound/stab.wav")).InSlot(ActionSlot.Active));
                    e.Actions.Add(new ActionStabStuck(hit.Origin, hit.Target).InSlot(ActionSlot.Active));
                }
                else
                {
                    //Crickets
                }
            }
        }
        public void Tick(SceneGame scene)
        {
            var active     = Curio.GetActionHolder(ActionSlot.Active);
            var lastSeen   = Curio.GetBehavior <BehaviorLastSeen>();
            var pathfinder = Curio.GetBehavior <BehaviorPathfinder>();
            var orientable = Curio.GetBehavior <BehaviorOrientable>();
            var tile       = Curio.GetMainTile();
            var map        = Curio.GetMap();

            if (Curio.IsDead())
            {
                Decay += scene.TimeModCurrent;
            }

            if (Decay.Done)
            {
                var actions = new List <ActionWrapper>();
                actions.Add(new ActionRatGib(scene.PlayerCurio, Curio, 2000, SoundLoader.AddSound("content/sound/splat.wav")).InSlot(ActionSlot.Active));
                actions.Apply(Curio);
            }

            if (active.Done && Curio.IsAlive())
            {
                if (lastSeen.LastSeenTile != null)
                {
                    var nextMove = pathfinder.GetNextMove(new Point(tile.X, tile.Y));
                    if (!pathfinder.HasPath)
                    {
                        var positions = map.EnumerateTiles().Shuffle(Random);
                        foreach (var escapeTile in positions)
                        {
                            if (Vector2.Distance(escapeTile.VisualTarget, tile.VisualTarget) < 300)
                            {
                                continue;
                            }
                            if (escapeTile.IsChasm() || escapeTile.IsSolid())
                            {
                                continue;
                            }
                            pathfinder.FindPath(escapeTile);
                            SoundRat.Play(1, Random.NextFloat(-0.5f, +0.5f), 0);
                            break;
                        }
                    }
                    else if (nextMove.HasValue)
                    {
                        var angleCurrent = orientable.Angle;
                        var angleTarget  = Util.PointToAngle(nextMove.Value);
                        var angleDelta   = MathHelper.WrapAngle(angleTarget - angleCurrent);

                        var movement = new List <ActionWrapper>();
                        if (Math.Abs(angleDelta) < 0.0001)
                        {
                            movement.Add(new ActionMoveForward(Curio, nextMove.Value.ToVector2(), 4).InSlot(ActionSlot.Active));
                        }
                        else if (angleDelta < 0)
                        {
                            movement.Add(new ActionTurn(Curio, -MathHelper.PiOver4, 5).InSlot(ActionSlot.Active));
                        }
                        else if (angleDelta > 0)
                        {
                            movement.Add(new ActionTurn(Curio, MathHelper.PiOver4, 5).InSlot(ActionSlot.Active));
                        }
                        movement.Apply(Curio);
                    }
                    else
                    {
                        var actions = new List <ActionWrapper>();
                        actions.Add(new ActionRatGib(scene.PlayerCurio, Curio, 2000, SoundLoader.AddSound("content/sound/splat.wav")).InSlot(ActionSlot.Active));
                        actions.Apply(Curio);
                    }
                }
            }
        }
        public void OnAction(EventAction e)
        {
            var hits  = e.Actions.GetEffectsTargetting <IWeaponHit>(Curio).ToList();
            var alive = Curio.GetBehavior <BehaviorAlive>();

            foreach (var hit in hits)
            {
                if (hit is ActionEnemyHit)
                {
                    continue;
                }

                if (hit is ActionStabHit stab)
                {
                    if (alive.Armor <= 0)
                    {
                        e.Actions.Add(new ActionDamage(hit.Origin, hit.Target, 1, 50, 3, SoundLoader.AddSound("content/sound/stab.wav")).InSlot(ActionSlot.Active));
                        e.Actions.Add(new ActionStabStuck(hit.Origin, hit.Target).InSlot(ActionSlot.Active));
                        e.Actions.Add(new ActionAlignGrid(hit.Origin, 2).InSlot(ActionSlot.Active));
                    }
                    else
                    {
                        e.Actions.Add(new ActionParrySword(hit.Origin, hit.Target).InSlot(ActionSlot.Active));
                    }
                }
                else
                {
                    if (alive.Armor <= 0)
                    {
                        e.Actions.Add(new ActionDamage(hit.Origin, hit.Target, 1, 50, 3, SoundLoader.AddSound("content/sound/hit.wav")).InSlot(ActionSlot.Active));
                    }
                    else
                    {
                        e.Actions.Add(new ActionDestroyArmor(hit.Origin, hit.Target, 1, 50).InSlot(ActionSlot.Active));
                    }
                }
            }
        }