Example #1
0
        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);
            }
        }
Example #2
0
        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();
            }
        }
Example #3
0
        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);
                    }
                }
            }
        }
Example #4
0
 public bool IsCompleted()
 {
     //return true;
     return(Curio.IsDead());
 }
Example #5
0
 public static bool IsDeadOrDestroyed(this ICurio curio)
 {
     return(curio.Removed || curio.IsDead());
 }