public static Point getTileSize(DUNGEON_SPRITES sprite) { switch (sprite) { case DUNGEON_SPRITES.TOTEM_1: case DUNGEON_SPRITES.TOTEM_2: case DUNGEON_SPRITES.TOTEM_3: case DUNGEON_SPRITES.TOTEM_4: case DUNGEON_SPRITES.TOTEM_5: case DUNGEON_SPRITES.TOTEM_6: case DUNGEON_SPRITES.TOTEM_7: //Totems are 2x3 return new Point(2, 3); case DUNGEON_SPRITES.GATE_1: case DUNGEON_SPRITES.GATE_2: case DUNGEON_SPRITES.GATE_3: case DUNGEON_SPRITES.GATE_4: case DUNGEON_SPRITES.GATE_5: //Gates are 3x2 return new Point(3, 2); case DUNGEON_SPRITES.WALL_TL: case DUNGEON_SPRITES.WALL_T: case DUNGEON_SPRITES.WALL_TR: //Top Walls are 1x2 return new Point(1, 2); default: //1x1 return new Point(1, 1); } }
/// <summary> /// Creates and returns a Rectangle for the exact position of a sprite on the spritesheet. /// </summary> /// <param name="sprite"></param> /// <returns></returns> private static Rectangle getRoomTextureRect(DUNGEON_SPRITES sprite) { int rectX = -1; int rectY = -1; //Make the Rectangle the right size for the sprite to be loaded Point tileSize = getTileSize(sprite); //Get the sprite's location on the spritesheet // x switch (sprite) { case DUNGEON_SPRITES.SWITCH_1: case DUNGEON_SPRITES.GATE_1: rectX = 0; break; case DUNGEON_SPRITES.PLAIN_BLACK: case DUNGEON_SPRITES.SWITCH_2: rectX = 1; break; case DUNGEON_SPRITES.SWITCH_3: rectX = 2; break; case DUNGEON_SPRITES.SWITCH_4: case DUNGEON_SPRITES.GATE_2: rectX = 3; break; case DUNGEON_SPRITES.SWITCH_5: rectX = 4; break; case DUNGEON_SPRITES.WALL_TL: case DUNGEON_SPRITES.WALL_L: case DUNGEON_SPRITES.WALL_BL: case DUNGEON_SPRITES.SWITCH_6: case DUNGEON_SPRITES.BLOCK_SMALL_1: rectX = 5; break; case DUNGEON_SPRITES.WALL_T: case DUNGEON_SPRITES.PLAIN_GREEN: case DUNGEON_SPRITES.WALL_B: case DUNGEON_SPRITES.SWITCH_7: case DUNGEON_SPRITES.BLOCK_SMALL_2: case DUNGEON_SPRITES.GATE_3: rectX = 6; break; case DUNGEON_SPRITES.WALL_TR: case DUNGEON_SPRITES.WALL_R: case DUNGEON_SPRITES.WALL_BR: case DUNGEON_SPRITES.BLOCK_SMALL_3: rectX = 7; break; case DUNGEON_SPRITES.BLOCK_1: rectX = 8; break; case DUNGEON_SPRITES.BLOCK_2: case DUNGEON_SPRITES.GATE_4: rectX = 9; break; case DUNGEON_SPRITES.TOTEM_1: case DUNGEON_SPRITES.BLOCK_3: rectX = 10; break; case DUNGEON_SPRITES.BLOCK_SMALL_4: rectX = 11; break; case DUNGEON_SPRITES.TOTEM_2: case DUNGEON_SPRITES.BLOCK_SMALL_5: case DUNGEON_SPRITES.GATE_5: rectX = 12; break; case DUNGEON_SPRITES.BLOCK_4: rectX = 13; break; case DUNGEON_SPRITES.TOTEM_3: case DUNGEON_SPRITES.BLOCK_5: rectX = 14; break; case DUNGEON_SPRITES.BLOCK_SMALL_6: rectX = 15; break; case DUNGEON_SPRITES.TOTEM_4: case DUNGEON_SPRITES.BLOCK_SMALL_7: rectX = 16; break; case DUNGEON_SPRITES.BLOCK_6: rectX = 17; break; case DUNGEON_SPRITES.TOTEM_5: case DUNGEON_SPRITES.BLOCK_7: rectX = 18; break; case DUNGEON_SPRITES.BUTTON_1: case DUNGEON_SPRITES.BEACON_1: rectX = 19; break; case DUNGEON_SPRITES.TOTEM_6: case DUNGEON_SPRITES.BUTTON_2: case DUNGEON_SPRITES.BEACON_2: rectX = 20; break; case DUNGEON_SPRITES.BUTTON_3: case DUNGEON_SPRITES.BEACON_3: rectX = 21; break; case DUNGEON_SPRITES.TOTEM_7: case DUNGEON_SPRITES.BUTTON_4: case DUNGEON_SPRITES.BEACON_4: rectX = 22; break; case DUNGEON_SPRITES.BUTTON_5: case DUNGEON_SPRITES.BEACON_5: rectX = 23; break; } // y switch(sprite) { case DUNGEON_SPRITES.WALL_TL: case DUNGEON_SPRITES.WALL_T: case DUNGEON_SPRITES.WALL_TR: rectY = 0; break; case DUNGEON_SPRITES.PLAIN_BLACK: rectY = 1; break; case DUNGEON_SPRITES.WALL_L: case DUNGEON_SPRITES.PLAIN_GREEN: case DUNGEON_SPRITES.WALL_R: rectY = 2; break; case DUNGEON_SPRITES.WALL_BL: case DUNGEON_SPRITES.WALL_B: case DUNGEON_SPRITES.WALL_BR: case DUNGEON_SPRITES.TOTEM_1: case DUNGEON_SPRITES.TOTEM_2: case DUNGEON_SPRITES.TOTEM_3: case DUNGEON_SPRITES.TOTEM_4: case DUNGEON_SPRITES.TOTEM_5: case DUNGEON_SPRITES.TOTEM_6: case DUNGEON_SPRITES.TOTEM_7: rectY = 3; break; case DUNGEON_SPRITES.SWITCH_1: case DUNGEON_SPRITES.SWITCH_2: case DUNGEON_SPRITES.SWITCH_3: case DUNGEON_SPRITES.SWITCH_4: case DUNGEON_SPRITES.SWITCH_5: case DUNGEON_SPRITES.SWITCH_6: case DUNGEON_SPRITES.SWITCH_7: rectY = 5; break; case DUNGEON_SPRITES.BLOCK_SMALL_1: case DUNGEON_SPRITES.BLOCK_SMALL_2: case DUNGEON_SPRITES.BLOCK_SMALL_3: case DUNGEON_SPRITES.BLOCK_1: case DUNGEON_SPRITES.BLOCK_2: case DUNGEON_SPRITES.BLOCK_3: case DUNGEON_SPRITES.BLOCK_SMALL_4: case DUNGEON_SPRITES.BLOCK_SMALL_5: case DUNGEON_SPRITES.BLOCK_4: case DUNGEON_SPRITES.BLOCK_5: case DUNGEON_SPRITES.BLOCK_SMALL_6: case DUNGEON_SPRITES.BLOCK_SMALL_7: case DUNGEON_SPRITES.BLOCK_6: case DUNGEON_SPRITES.BLOCK_7: case DUNGEON_SPRITES.BUTTON_1: case DUNGEON_SPRITES.BUTTON_2: case DUNGEON_SPRITES.BUTTON_3: case DUNGEON_SPRITES.BUTTON_4: case DUNGEON_SPRITES.BUTTON_5: rectY = 6; break; case DUNGEON_SPRITES.BEACON_1: case DUNGEON_SPRITES.BEACON_2: case DUNGEON_SPRITES.BEACON_3: case DUNGEON_SPRITES.BEACON_4: case DUNGEON_SPRITES.BEACON_5: rectY = 7; break; case DUNGEON_SPRITES.GATE_1: case DUNGEON_SPRITES.GATE_2: case DUNGEON_SPRITES.GATE_3: case DUNGEON_SPRITES.GATE_4: case DUNGEON_SPRITES.GATE_5: rectY = 8; break; } //Incase I missed assigning the sprite a location above if(rectX == -1 || rectY == -1) throw new Exception("Sprite location has not been specified!"); return new Rectangle(rectX * SpriteWidth, rectY * SpriteHeight, tileSize.X * SpriteWidth, tileSize.Y * SpriteHeight); }
/// <summary> /// Gets a Rectangle used to specify the exact location of a given sprite on the spritesheet. /// Pass this Rectangle into the Sprite2D.Create() method! /// </summary> /// <param name="sprite">Name of the sprite to get rectangle of</param> /// <returns>Returns an empty Rectangle if sprite name not found</returns> public static Rectangle getRoomSpriteRect(DUNGEON_SPRITES sprite) { if (RoomSprites.ContainsKey(sprite)) return RoomSprites[sprite]; return new Rectangle(); }