Beispiel #1
0
        public override ActionResult Perform(ITurnable turnable, TurnResult result)
        {
            Creature creature = turnable as Creature;

            if (X != 0)
            {
                creature.SpriteEffect = X > 0 ? SpriteEffects.FlipHorizontally : SpriteEffects.None;
            }

            int newX = creature.X + X;
            int newY = creature.Y + Y;

            if (!creature.Map.InBounds(newX, newY) || creature.Map.GetTile(newX, newY).IsSolid)
            {
                result.AddEvent(new BumpEvent(X, Y, 9f, creature));
                return(Succeed());
            }

            Creature other = creature.Map.GetCreature(newX, newY);

            if (other != null)
            {
                result.AddEvent(new BumpEvent(X, Y, 9f, creature));
                return(Succeed());
            }

            result.AddEvent(new MoveEvent(creature, creature.X, creature.Y, newX, newY, 4f, 0.3f));
            creature.X += X;
            creature.Y += Y;

            return(Succeed());
        }