public void Run() { var camera = Origin.GetCamera(); var nemesis = Origin.GetBehavior <BehaviorNemesis>(); var neighbor = Tile; var orientable = Origin.GetBehavior <BehaviorOrientable>(); var angle = Util.VectorToAngle(Tile.GetVisualTarget() - Origin.GetVisualTarget()); if (neighbor != null && !neighbor.IsSolid()) { SoundFly.Play(1, 0, 0); nemesis.WingsOpen.Set(1, LerpHelper.ExponentialIn, 30); Origin.MoveTo(neighbor, LerpHelper.Linear, this); camera?.MoveTo(neighbor, LerpHelper.Linear, this); orientable.OrientVisual(angle, LerpHelper.Quadratic, Frame); } }
public void Run() { Random random = new Random(); var world = Target.GetWorld(); SkillUtil.CreateBloodCircle(world, Target.GetVisualTarget(), 60, 64, Random); SkillUtil.CreateSpatter(world, Target.GetVisualTarget(), 5, Vector2.Zero, 1, Random); if (Score > 0) { world.AddWorldScore(Score, Target.GetVisualTarget(), ScoreType.Small); } if (Origin == world.PlayerCurio) { world.RunStats.Gibs += 1; } Splat.Play(1.0f, Random.NextFloat(-0.5f, +0.5f), 0); Behavior.Apply(new BehaviorGib(Target)); }
public void Run() { var world = Origin.GetWorld(); var sword = Origin.GetBehavior <BehaviorSword>(); var alive = Origin.GetBehavior <BehaviorAlive>(); if (HasHeart && alive != null) { alive.HealDamage(Heal); world.AddWorldScore(Score, Origin.GetVisualTarget(), ScoreType.Small); RemoveHeart(); if (Origin == world.PlayerCurio) { world.RunStats.HeartsEaten += 1; } Eat.Play(1, 0, 0); Blood.Play(0.5f, -0.5f, 0); Jingle.Play(1, 0, 0); } }
public void Tick(SceneGame scene) { if (Curio.IsAlive() && !Upswing.Done) { Upswing += scene.TimeModCurrent; var lastAngle = UpswingAngle; UpswingAngle += scene.TimeModCurrent * (float)LerpHelper.QuadraticOut(MathHelper.TwoPi * 0.01, MathHelper.TwoPi * 0.2, Upswing.Slide); var deltaSwing = Math.Abs(Math.Floor(UpswingAngle / MathHelper.Pi) - Math.Floor(lastAngle / MathHelper.Pi)); if (deltaSwing >= 1) { SoundSwish.Play(1, Upswing.Slide - 0.5f, 0); } } //else // Upswing.Time = Upswing.EndTime; if (!MaceReturn.Done) { MaceReturn += scene.TimeModCurrent; } }
public void Run() { var world = Origin.GetWorld(); Origin.GetFlashHelper()?.AddFlash(ColorMatrix.Flat(Color.White), 20); Origin.GetShakeHelper()?.AddShakeRandom(3, LerpHelper.QuadraticOut, 30); SoundImpact.Play(1, Random.NextFloat(-0.5f, +0.5f), 0); var alive = Origin.GetBehavior <BehaviorAlive>(); var damage = 1; if (Collision.IsSpiky()) { SoundSpikes.Play(1, Random.NextFloat(-0.5f, +0.5f), 0); damage = 2; } if (alive != null) { alive.TakeDamage(damage); } }
public void Tick(SceneGame scene) { BellTime += scene.TimeModCurrent; if (BellTime.Done && BellTolls < 12) { new ScreenGlitchFlash(scene, slide => Params.WithIntensity(slide), 10); new ScreenFlashSimple(scene, ColorMatrix.Tint(Color.Red), LerpHelper.Flick, 10); SoundBell.Play(1, Random.NextFloat(0.5f, 0.0f), 0); BellTolls += 1; BellTime.Reset(); if (BellTolls >= 12) { new ScreenBellWraiths(Curio.GetWorld(), this, 60, 300); foreach (var wraithEmitter in Manager.GetBehaviors().OfType <BehaviorWraithEmitter>()) { wraithEmitter.Activated = true; } SoundSummon.Play(1, 0, 0); } } }
public void Run() { Random random = new Random(); var world = Origin.GetWorld(); var alive = Target.GetBehavior <BehaviorAlive>(); var sword = Origin.GetBehavior <BehaviorSword>(); Target.GetFlashHelper()?.AddFlash(ColorMatrix.Flat(Color.White), 20); Target.GetShakeHelper()?.AddShakeRandom(3, LerpHelper.QuadraticOut, 30); new HitStop(world, 0, 5); HitSound.Play(1f, Random.NextFloat(-0.3f, +0.3f), 0); SkillUtil.CreateSpatter(world, Target.GetVisualTarget(), Blood, Vector2.Zero, 1, Random); if (Score > 0) { world.AddWorldScore(Score, Target.GetVisualTarget(), ScoreType.Small); } if (Blood > 0) { SkillUtil.CreateBloodCircle(world, Target.GetVisualTarget(), 30, 32, Random); } alive.TakeDamage(Damage); if (alive.CurrentDead) { //DeathSound.Play(1, 0, 0); if (Origin == world.PlayerCurio) { world.RunStats.Kills += 1; } } if (sword != null && Blood > 0) { sword.HasBlood = true; } }
public void Tick(SceneGame scene) { var tile = Origin.GetMainTile(); var mace = Origin.GetBehavior <BehaviorMace>(); IFrameCollection.Tick(scene.TimeModCurrent); bool upswingSlash = FrameUpswingSlash.Done; if (Origin.IsAlive() && FrameUpswingSlash.Time > FrameUpswingSlash.EndTime - 5 && !mace.Upswing.Done) { if (FrameUpswingVisual.Done) { float size = 0.3f + 0.3f * Random.NextFloat(); float bigSize = 1.5f + Random.NextFloat(); int totaltime = 5 + Random.Next(10); new CutterParticle(scene, SpriteLoader.Instance.AddSprite("content/effect_cutter"), Origin.GetVisualTarget(), 10) { RotationStart = -MathHelper.TwoPi / totaltime, RotationEnd = -(MathHelper.TwoPi / totaltime) * 0.5f, RotationLerp = LerpHelper.Linear, SizeStart = size, SizeEnd = size * bigSize, ScaleLerp = LerpHelper.CircularOut, Angle = Random.NextAngle(), Color = Color.Lerp(Color.Red, Color.DarkRed, Random.NextFloat()), DrawPass = DrawPass.EffectAdditive, }; size = 0.3f + 0.3f * Random.NextFloat(); bigSize = 1.5f + Random.NextFloat(); totaltime = 5 + Random.Next(10); new CutterParticle(scene, SpriteLoader.Instance.AddSprite("content/effect_cutter"), Origin.GetVisualTarget(), 10) { RotationStart = -MathHelper.TwoPi / totaltime, RotationEnd = -(MathHelper.TwoPi / totaltime) * 0.5f, RotationLerp = LerpHelper.Linear, SizeStart = size, SizeEnd = size * bigSize, ScaleLerp = LerpHelper.CircularOut, Angle = Random.NextAngle(), Color = Color.Lerp(Color.Black, Color.DarkRed, Random.NextFloat()), DrawPass = DrawPass.Effect, }; FrameUpswingVisual.Time = 0; } FrameUpswingVisual += scene.TimeModCurrent; if (FrameUpswingSlash.Done) { DamageAreaUpswing(); } } FrameUpswingSlash += scene.TimeModCurrent; if (mace.Upswing.Done) { if (!Swinging) { SoundSwish.Play(1.0f, Random.NextFloat(-1.0f, 0f), 0); Swinging = true; } bool shouldAttack = !Frame.Done; Frame += scene.TimeModCurrent; if (Frame.Done && shouldAttack) { var target = GetTarget(); mace.Mace(target.VisualTarget, 20); SoundImpact.Play(1, Random.NextFloat(-0.5f, +0.5f), 0); DamageArea(); } } else { Retarget(); } }
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); } } } }