public void Tick(SceneGame scene) { bool decayed = Decay.Done; if (Curio.IsDead()) { Decay += scene.TimeModCurrent; } if (!decayed && Decay.Done) { var actions = new List <ActionWrapper>(); actions.Add(new ActionCorpseGib(scene.PlayerCurio, Curio, Score, Splat, Particles, Radius).InSlot(ActionSlot.Active)); actions.Apply(Curio); } }
public void Tick(SceneGame scene) { Fade.Update(); var tile = Curio.GetMainTile(); var passive = Curio.GetActionHolder(ActionSlot.Passive); var active = Curio.GetActionHolder(ActionSlot.Active); var levelEnd = tile?.GetBehavior <BehaviorLevelEnd>(); if (levelEnd != null && !scene.WaitForCutscene && passive.Done && active.Done && levelEnd.CanEscape() && Curio.IsAlive()) { EndLevel(scene); } UpdateFootstep(scene); bool faceForward = (Momentum.Amount > 0 || LevelTransition); if (ForwardBack.End > 0 && !faceForward) { ForwardBack.Set(0, LerpHelper.Quadratic, 30); } if (ForwardBack.End < 1 && faceForward) { ForwardBack.Set(1, LerpHelper.Quadratic, 30); } ForwardBack.Update(); HairFrame += LevelTransition ? 1 : scene.TimeModCurrent; if (Curio.IsDead() && !scene.IsGameOver) { scene.GameOver(GameOverType.Death); SoundDeath.Play(1, -0.5f, 0); } if (!scene.WaitForPlayer) { //MovePassive(); } else if (Momentum.Amount <= 0 && SwordReady) { SheatheSword(); } }
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 bool IsCompleted() { //return true; return(Curio.IsDead()); }
public static bool IsDeadOrDestroyed(this ICurio curio) { return(curio.Removed || curio.IsDead()); }