/// <summary> /// Cette fonction s'assure que les textures contenues dans le tableau de /// textures fourni en argument (paramètre tex) aient toutes les mêmes /// dimensions. Si ce n'est pas le cas, une exception est lancée. /// </summary> /// <param name="tex">Tableau des textures à valider.</param> private static void ValiderDimensionsDeTextures(Texture2D[,] tex) { // On s'assure que toutes les images ont les mêmes dimensions. int largeur = tex[0, 0].Width; int hauteur = tex[0, 0].Height; for (int row = 0; row < tex.GetLength(0); row++) { for (int col = 0; col < tex.GetLength(1); col++) { if (tex[row, col].Width != largeur || tex[row, col].Height != hauteur) { throw new System.Exception("les images doivent être de dimensions uniformes"); } } } }
public override void LoadContent() { // Load Entities sprEntities = new Dictionary<EntitySpriteId, Sprite>(); sprEntities.Add(EntitySpriteId.Warrior, new Sprite(Content, "Warrior").loadSpriteParts(SpriteParts.Entity)); sprEntities.Add(EntitySpriteId.Warlock, new Sprite(Content, "Warlock").loadSpriteParts(SpriteParts.Entity)); sprEntities.Add(EntitySpriteId.Wraith, new Sprite(Content, "Wraith").loadSpriteParts(SpriteParts.Entity)); sprEntities.Add(EntitySpriteId.Skeleton_King, new Sprite(Content, "Skeleton_King").loadSpriteParts(SpriteParts.Entity)); // Load Attacks sprAttacks = new Dictionary<AttackSpriteId, Texture2D>(); sprAttacks.Add(AttackSpriteId.Fireball, Content.Load<Texture2D>("Fireball/Fireball")); sprAttacks.Add(AttackSpriteId.Iceball, Content.Load<Texture2D>("Iceball/Iceball")); sprAttacks.Add(AttackSpriteId.Scurge_Shot, Content.Load<Texture2D>("Scurge_Shot/Scurge_Shot")); sprAttacks.Add(AttackSpriteId.Raise_Death, Content.Load<Texture2D>("Raise_Death/Raise_Death")); // Load Terrain Texture2D TerrainSpriteSheet = Content.Load<Texture2D>("Terrain/Terrain"); Texture2D[] TerrainTexs = new Texture2D[TerrainSpriteSheet.Width / TileMap.SPRITE_SIZE]; for (int i=0; i<TerrainTexs.Length; i++) TerrainTexs[i] = Helper.ParseSpriteSheet(TerrainSpriteSheet, i, TileMap.SPRITE_SIZE); sprTerrains = new Dictionary<TerrainSpriteId, Texture2D>(); sprTerrains.Add(TerrainSpriteId.None, null); sprTerrains.Add(TerrainSpriteId.Stone_Wall, TerrainTexs[0]); sprTerrains.Add(TerrainSpriteId.Stone2_Wall, TerrainTexs[1]); sprTerrains.Add(TerrainSpriteId.Door, TerrainTexs[2]); sprTerrains.Add(TerrainSpriteId.EmptyMagicWall, TerrainTexs[7]); sprTerrains.Add(TerrainSpriteId.ClosedChest, TerrainTexs[8]); sprTerrains.Add(TerrainSpriteId.OpenChest, TerrainTexs[9]); sprTerrains.Add(TerrainSpriteId.IronDoor, TerrainTexs[10]); Animations = new Dictionary<Animation,Sprite>(); Animations.Add(Animation.RedSpiral, new Sprite(new Texture2D[] {TerrainTexs[3],TerrainTexs[4],TerrainTexs[5],TerrainTexs[6]}, 4, 100)); // Load GUI sprGUI = new Dictionary<GUISpriteId, Texture2D>(); sprGUI.Add(GUISpriteId.Blocking, Content.Load<Texture2D>("GUI/Blocking")); sprGUI.Add(GUISpriteId.Ducking, Content.Load<Texture2D>("GUI/Crouching")); sprGUI.Add(GUISpriteId.Standing, Content.Load<Texture2D>("GUI/Standing")); // Load Backgrounds Backgrounds = new Dictionary<BackgroundId,Texture2D>(); Backgrounds.Add(BackgroundId.Cave1, Content.Load<Texture2D>("Terrain/cave1_background")); // Load Items Texture2D ItemSpriteSheet = Content.Load<Texture2D>("Items/Items"); Texture2D[] ItemTexs = new Texture2D[ItemSpriteSheet.Width / Item.SIZE]; for (int i=0; i<ItemTexs.Length; i++) ItemTexs[i] = Helper.ParseSpriteSheet(ItemSpriteSheet, i, Item.SIZE); Items = new Dictionary<ItemId, Item>(); Items.Add(ItemId.None, null); Items.Add(ItemId.Key, new Item(ItemId.Key, "Door Key", ItemTexs[0], Item.NewRoom)); Items.Add(ItemId.SmallPotion, new Item(ItemId.SmallPotion, "Small Potion", ItemTexs[1], Item.UseSmallPotion)); Items.Add(ItemId.Gold, new Item(ItemId.Gold, "Gold", ItemTexs[2], Item.NoAction, true)); // Load Armour Texture2D ArmourSpriteSheet = Content.Load<Texture2D>("Armour/Armour"); Texture2D[,] ArmourTexs = new Texture2D[ArmourSpriteSheet.Height / TileMap.SPRITE_SIZE, ArmourSpriteSheet.Width / TileMap.SPRITE_SIZE]; for (int h = 0; h < ArmourTexs.GetLength(0); h++) for (int w = 0; w < ArmourTexs.GetLength(1); w++) ArmourTexs[h, w] = Helper.ParseSpriteSheet(ArmourSpriteSheet, w, h, TileMap.SPRITE_SIZE); Armours = new Dictionary<ItemId, Armour>(); Armours.Add(ItemId.BronzeHead, new Armour(ArmourTexs[0, 0], ArmourTexs[0, 3], "Bronze Helm", ItemId.BronzeHead, ArmourParts.Head, 0.075f, true)); Armours.Add(ItemId.BronzeBody, new Armour(ArmourTexs[0, 1], ArmourTexs[0, 4], "Bronze Body", ItemId.BronzeBody, ArmourParts.Body, 0.075f, true)); Armours.Add(ItemId.BronzeLegs, new Armour(ArmourTexs[0, 2], ArmourTexs[0, 5], "Bronze Legs", ItemId.BronzeLegs, ArmourParts.Legs, 0.075f, true)); Armours.Add(ItemId.IronHead, new Armour(ArmourTexs[1, 0], ArmourTexs[1, 3], "Iron Helm", ItemId.IronHead, ArmourParts.Head, 0.150f, true)); Armours.Add(ItemId.IronBody, new Armour(ArmourTexs[1, 1], ArmourTexs[1, 4], "Iron Body", ItemId.IronBody, ArmourParts.Body, 0.150f, true)); Armours.Add(ItemId.IronLegs, new Armour(ArmourTexs[1, 2], ArmourTexs[1, 5], "Iron Legs", ItemId.IronLegs, ArmourParts.Legs, 0.150f, true)); }
/// <summary> /// Merges textures together to a big texture. /// </summary> /// <param name="toMerge">The textures to merge, THEY MUST BE THE SAME SIZE.</param> /// <returns>The new texture</returns> public Texture2D MergeTextures(Texture2D[,] toMerge) { int targetWidth = 0; int targetHeight = 0; // Check if we can merge the new texture; if the sizes aren't equal, we cant do it, for now foreach (Texture2D tex in toMerge) { if (toMerge[0, 0].Width != tex.Width || toMerge[0, 0].Height != tex.Height) { throw new Exception("Texture sizes aren't equal; cannot merge!"); } } int textureWidth = toMerge[0, 0].Width; int textureHeight = toMerge[0, 0].Height; targetWidth = toMerge[0, 0].Width * toMerge.GetLength(0); targetHeight = toMerge[0, 0].Height * toMerge.GetLength(1); int[] result = new int[targetWidth * targetHeight]; for (int i = 0; i < toMerge.GetLength(0); i++) { for (int j = 0; j < toMerge.GetLength(1); j++) { int[] tempData = new int[toMerge[i, j].Width * toMerge[i, j].Height]; toMerge[i, j].GetData(tempData); for (int k = 0; k < tempData.Length; k++) { // if tempData[k] == 0, it will bring row from -1 to 0 int xoffset = k % textureWidth; int startPoint = (j * toMerge[i, j].Height * targetWidth) + i * toMerge[i, j].Width; int yoffset = (k / textureWidth) * targetWidth; result[startPoint + xoffset + yoffset] = tempData[k]; } if (onLoadTickListeners != null) onLoadTickListeners(this); } } Texture2D resultTex = new Texture2D(Game1.GetInstance().graphics.GraphicsDevice, targetWidth, targetHeight); resultTex.SetData(result); return resultTex; }