Beispiel #1
0
 void DrawTile(SpriteBatch sprite_batch, TilesSet sprites, Rectangle dst, int tile, bool overridePalette, bool showSpecial)
 {
     if (type == Levels.MapType.Minimap)
     {
         sprites.Draw(sprite_batch, overridePalette ? sprites.SelectedSet : tile, 0, dst);
     }
     else
     {
         tile = overridePalette ? ChangePalette(tile, sprites.SelectedSet) : tile;
         int           tile_id = tile & 0x3FF;
         int           palette = (tile & 0xF000) >> 12;
         SpriteEffects effects =
             ((tile & 0x400) != 0 ? SpriteEffects.FlipHorizontally : SpriteEffects.None) |
             ((tile & 0x800) != 0 ? SpriteEffects.FlipVertically : SpriteEffects.None);
         if (showSpecial)
         {
             if (Settings.Paradise)
             {
                 if (tile_id >= PhysicalMapLogic.CONTROL_MIN_ID)
                 {
                     // Rendering of non-graphic special elements
                     Color?c = null;
                     if (ParadisePhysicalMapLogic.STARTING_ZONE_IDS.Contains(tile_id))
                     {
                         c = ParadisePhysicalMapLogic.StartingZoneColor(tile_id);
                     }
                     else if (ParadisePhysicalMapLogic.HEALING_ZONE_IDS.Contains(tile_id))
                     {
                         c = ParadisePhysicalMapLogic.HealingZoneColor(tile_id);
                     }
                     else if (ParadisePhysicalMapLogic.ENDING_ZONE_IDS.Contains(tile_id))
                     {
                         c = ParadisePhysicalMapLogic.EndingZoneColor(tile_id);
                     }
                     else if (ParadisePhysicalMapLogic.FIXED_OBJECTS_IDS.Contains(tile_id))
                     {
                         sprite_batch.Draw(ParadisePhysicalMapLogic.TextureOfFixedObjects(tile_id), dst, null, Color.White, 0, Vector2.Zero, effects, 0F);
                     }
                     else if (ParadisePhysicalMapLogic.MOVING_OBJECTS_IDS.Contains(tile_id)) // Flips have no effect on moving objects tiles
                     {
                         sprite_batch.Draw(ParadisePhysicalMapLogic.TextureOfMovingObject(tile_id), dst, null, Color.White, 0, Vector2.Zero, SpriteEffects.None, 0F);
                     }
                     else if (ParadisePhysicalMapLogic.NUMBER_TILES.Contains(tile)) // Palette and flips matters for numbers
                     {
                         sprite_batch.Draw(ParadisePhysicalMapLogic.TextureOfNumber(tile), dst, null, Color.White, 0, Vector2.Zero, SpriteEffects.None, 0F);
                     }
                     else
                     {
                         c = ParadisePhysicalMapLogic.UNSUPPORTED_COLOR;
                     }
                     if (c.HasValue)
                     {
                         sprite_batch.FillRectangle(dst, c.Value);
                     }
                 }
                 if (tile_id <= PhysicalMapLogic.VISIBLE_MAX_ID)
                 {
                     sprites.Draw(sprite_batch, palette, tile_id, dst, effects);
                 }
             }
             else
             {
                 if (tile_id >= PhysicalMapLogic.CONTROL_MIN_ID)
                 {
                     // Rendering of non-graphic special elements
                     Color?c = null;
                     if (PhysicalMapLogic.STARTING_ZONE_IDS.Contains(tile_id))
                     {
                         c = PhysicalMapLogic.StartingZoneColor(tile_id);
                     }
                     else if (PhysicalMapLogic.HEALING_ZONE_IDS.Contains(tile_id))
                     {
                         c = PhysicalMapLogic.HealingZoneColor(tile_id);
                     }
                     else if (PhysicalMapLogic.ENDING_ZONE_IDS.Contains(tile_id))
                     {
                         c = PhysicalMapLogic.EndingZoneColor(tile_id);
                     }
                     else if (PhysicalMapLogic.SPRING_IDS.Contains(tile_id))
                     {
                         sprite_batch.Draw(PhysicalMapLogic.TextureOfSpring(tile_id), dst, null, Color.White, 0, Vector2.Zero, effects, 0F);
                     }
                     else if (PhysicalMapLogic.VISIBLE_CONTROL_TILES.Contains(tile_id))
                     {
                         sprite_batch.Draw(PhysicalMapLogic.UnderlayOfVisibleControlTile(tile_id), dst, null, Color.White, 0, Vector2.Zero, effects, 0F);
                     }
                     else if (PhysicalMapLogic.MOVING_OBJECTS_IDS.Contains(tile_id)) // Flips have no effect on moving objects tiles
                     {
                         sprite_batch.Draw(PhysicalMapLogic.TextureOfMovingObject(tile_id), dst, null, Color.White, 0, Vector2.Zero, SpriteEffects.None, 0F);
                     }
                     else if (PhysicalMapLogic.NUMBER_TILES.Contains(tile)) // Palette and flips matters for numbers
                     {
                         sprite_batch.Draw(PhysicalMapLogic.TextureOfNumber(tile), dst, null, Color.White, 0, Vector2.Zero, SpriteEffects.None, 0F);
                     }
                     else
                     {
                         c = PhysicalMapLogic.UNSUPPORTED_COLOR;
                     }
                     if (c.HasValue)
                     {
                         sprite_batch.FillRectangle(dst, c.Value);
                     }
                 }
                 if (tile_id <= PhysicalMapLogic.VISIBLE_MAX_ID || PhysicalMapLogic.VISIBLE_CONTROL_TILES.Contains(tile_id))
                 {
                     sprites.Draw(sprite_batch, palette, tile_id, dst, effects);
                 }
             }
         }
         else
         {
             sprites.Draw(sprite_batch, palette, tile_id, dst, effects);
         }
     }
 }