Beispiel #1
0
        protected bool CheckDefer(Map map, Vector3 drawPosition)
        {
            MapTile   deferToTile;
            Direction checkDirection;
            var       entity = Entity as Mobile;

            if (entity != null && entity.IsMoving)
            {
                var mobile = entity;
                switch ((mobile.Facing & Direction.FacingMask))
                {
                case Direction.Left:
                case Direction.South:
                case Direction.East:
                    deferToTile    = map.GetMapTile(entity.Position.X, entity.Position.Y + 1);
                    checkDirection = mobile.Facing & Direction.FacingMask;
                    break;

                case Direction.Down:
                    deferToTile    = map.GetMapTile(entity.Position.X + 1, entity.Position.Y + 1);
                    checkDirection = Direction.Down;
                    break;

                default:
                    deferToTile    = map.GetMapTile(entity.Position.X + 1, entity.Position.Y);
                    checkDirection = Direction.East;
                    break;
                }
            }
            else
            {
                deferToTile    = map.GetMapTile(Entity.Position.X + 1, Entity.Position.Y);
                checkDirection = Direction.East;
            }

            if (deferToTile == null)
            {
                return(false);
            }
            var mobile1 = Entity as Mobile;

            if (mobile1 != null)
            {
                var mobile = mobile1;
                int z;
                if (!MobileMovementCheck.CheckMovementForced(mobile, mobile1.Position, checkDirection, out z))
                {
                    return(false);
                }
                var deferred = new DeferredEntity(mobile, drawPosition, z);
                deferToTile.OnEnter(deferred);
                return(true);
            }
            else
            {
                var deferred = new DeferredEntity(Entity, drawPosition, Entity.Z);
                deferToTile.OnEnter(deferred);
                return(true);
            }
        }
Beispiel #2
0
        protected bool CheckDefer(Map map, Vector3 drawPosition)
        {
            MapTile   deferToTile;
            Direction checkDirection;

            if (Entity is Mobile && ((Mobile)Entity).IsMoving)
            {
                Mobile mobile = Entity as Mobile;
                if (
                    ((mobile.Facing & Direction.FacingMask) == Direction.Left) ||
                    ((mobile.Facing & Direction.FacingMask) == Direction.South) ||
                    ((mobile.Facing & Direction.FacingMask) == Direction.East))
                {
                    deferToTile    = map.GetMapTile(Entity.Position.X, Entity.Position.Y + 1);
                    checkDirection = mobile.Facing & Direction.FacingMask;
                }
                else if ((mobile.Facing & Direction.FacingMask) == Direction.Down)
                {
                    deferToTile    = map.GetMapTile(Entity.Position.X + 1, Entity.Position.Y + 1);
                    checkDirection = Direction.Down;
                }
                else
                {
                    deferToTile    = map.GetMapTile(Entity.Position.X + 1, Entity.Position.Y);
                    checkDirection = Direction.East;
                }
            }
            else
            {
                deferToTile    = map.GetMapTile(Entity.Position.X + 1, Entity.Position.Y);
                checkDirection = Direction.East;
            }

            if (deferToTile != null)
            {
                if (Entity is Mobile)
                {
                    Mobile mobile = Entity as Mobile;
                    int    z;
                    if (MobileMovementCheck.CheckMovementForced(mobile, Entity.Position, checkDirection, out z))
                    {
                        DeferredEntity deferred = new DeferredEntity(mobile, drawPosition, z);
                        deferToTile.OnEnter(deferred);
                        return(true);
                    }
                }
                else
                {
                    DeferredEntity deferred = new DeferredEntity(Entity, drawPosition, Entity.Z);
                    deferToTile.OnEnter(deferred);
                    return(true);
                }
            }
            return(false);
        }
        // ============================================================================================================
        // Deferred drawing code
        // ============================================================================================================

        protected void CheckDefer(Map map, Vector3 drawPosition)
        {
            MapTile   deferToTile;
            Direction checkDirection;

            if (Entity is Mobile && ((Mobile)Entity).IsMoving)
            {
                Direction facing = (Entity as Mobile).DrawFacing;
                if (
                    ((facing & Direction.FacingMask) == Direction.Left) ||
                    ((facing & Direction.FacingMask) == Direction.South) ||
                    ((facing & Direction.FacingMask) == Direction.East))
                {
                    deferToTile    = map.GetMapTile(Entity.Position.X, Entity.Position.Y + 1);
                    checkDirection = facing & Direction.FacingMask;
                }
                else if ((facing & Direction.FacingMask) == Direction.Down)
                {
                    deferToTile    = map.GetMapTile(Entity.Position.X + 1, Entity.Position.Y + 1);
                    checkDirection = Direction.Down;
                }
                else
                {
                    deferToTile    = map.GetMapTile(Entity.Position.X + 1, Entity.Position.Y);
                    checkDirection = Direction.East;
                }
            }
            else
            {
                deferToTile    = map.GetMapTile(Entity.Position.X, Entity.Position.Y + 1);
                checkDirection = Direction.South;
            }

            if (deferToTile != null)
            {
                if (Entity is Mobile)
                {
                    Mobile mobile = Entity as Mobile;
                    // This calculates the z position of the mobile as if it had moved into the next tile.
                    // Strictly speaking, this isn't necessary, but looks nice for mobiles that are walking.
                    int            z        = MobileMovementCheck.GetNextZ(mobile, Entity.Position, checkDirection);
                    DeferredEntity deferred = new DeferredEntity(mobile, drawPosition, z);
                    deferToTile.OnEnter(deferred);
                }
                else
                {
                    DeferredEntity deferred = new DeferredEntity(Entity, drawPosition, Entity.Z);
                    deferToTile.OnEnter(deferred);
                }
            }
        }