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); }
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); }
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); * }*/ }
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); } }
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)); } } } }