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); } }
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); } } }