/// <summary> /// Créer un sprite /// </summary> /// <param name="id">Id du sprite</param> /// <param name="url">Url de l'image</param> /// <param name="location">Location</param> /// <param name="color">Couleur</param> public static void CreatePermanentSprite(Guid id, string url, Vector2 location, Rectangle source, VO_ColorTransformation color) { //Dictionnaire d'image if (_PermanentSprites == null) { _PermanentSprites = new Dictionary <Guid, VO_Sprite>(); } //Pas d'image envoyée if (id == new Guid()) { return; } //Ajout de l'image if (!_PermanentSprites.ContainsKey(id)) { try { VO_Sprite newSprite = new VO_Sprite(id); newSprite.ResourceUrl = url; newSprite.Scale = new Vector2(1.0f, 1.0f); newSprite.Image = ImageManager.GetPermanentImage(url); newSprite.Position = new Vector2(location.X, location.Y); newSprite.Source = source; _PermanentSprites.Add(id, newSprite); LogTools.WriteDebug(string.Format(Logs.MANAGER_SPRITE_CREATED, id, Logs.MANAGER_PERMANENT)); } catch (Exception e) { LogTools.WriteInfo(string.Format(Logs.MANAGER_SPRITE_NOT_FOUND, url)); LogTools.WriteDebug(e.Message); _PermanentSprites.Add(id, null); } } }
/// <summary> /// Crée un menu front /// </summary> /// <param name="width">Largeur</param> /// <param name="height">Hauteur</param> /// <returns>Image du menu</returns> private static Texture2D CreateMenuFront(int width, int height) { Texture2D res = ImageManager.GetPermanentImage(VO_GUI.RefResource); int blockSize = VO_GUI.FrontL.Width; int miniWidth = width - blockSize - blockSize; int miniHeight = height - blockSize - blockSize; #region Remplissage milieu RenderTarget2D center = null; if (miniHeight > 0 && miniWidth > 0) { center = new RenderTarget2D(_GraphicsDevice, miniWidth, miniHeight); _GraphicsDevice.SetRenderTarget(center); _GraphicsDevice.Clear(Color.Black); for (int i = 0; i <= miniWidth; i += blockSize) { for (int j = 0; j <= miniHeight; j += blockSize) { Copy(res, new Rectangle(i, j, VO_GUI.FrontC.Width, VO_GUI.FrontC.Height), VO_GUI.FrontC.Source); } } } #endregion #region Côté gauche RenderTarget2D left = null; if (miniHeight > 0) { left = new RenderTarget2D(_GraphicsDevice, blockSize, miniHeight); _GraphicsDevice.SetRenderTarget(left); _GraphicsDevice.Clear(Color.Black); for (int i = 0; i <= miniHeight; i += blockSize) { Copy(res, new Rectangle(0, i, VO_GUI.FrontL.Width, VO_GUI.FrontL.Height), VO_GUI.FrontL.Source); } } #endregion #region Côté droit RenderTarget2D right = null; if (miniHeight > 0) { right = new RenderTarget2D(_GraphicsDevice, blockSize, miniHeight); _GraphicsDevice.SetRenderTarget(right); _GraphicsDevice.Clear(Color.Black); for (int i = 0; i <= miniHeight; i += blockSize) { Copy(res, new Rectangle(0, i, VO_GUI.FrontR.Width, VO_GUI.FrontR.Height), VO_GUI.FrontR.Source); } } #endregion #region Côté haut RenderTarget2D top = null; if (miniWidth > 0) { top = new RenderTarget2D(_GraphicsDevice, miniWidth, blockSize); _GraphicsDevice.SetRenderTarget(top); _GraphicsDevice.Clear(Color.Black); for (int i = 0; i <= miniWidth; i += blockSize) { Copy(res, new Rectangle(i, 0, VO_GUI.FrontT.Width, VO_GUI.FrontT.Height), VO_GUI.FrontT.Source); } } #endregion #region Côté bas RenderTarget2D bottom = null; if (miniWidth > 0) { bottom = new RenderTarget2D(_GraphicsDevice, miniWidth, blockSize); _GraphicsDevice.SetRenderTarget(bottom); _GraphicsDevice.Clear(Color.Black); for (int i = 0; i <= miniWidth; i += blockSize) { Copy(res, new Rectangle(i, 0, VO_GUI.FrontB.Width, VO_GUI.FrontB.Height), VO_GUI.FrontB.Source); } } #endregion #region Côté leftTop RenderTarget2D leftTop = null; if (miniHeight > 0 && miniWidth > 0) { leftTop = new RenderTarget2D(_GraphicsDevice, blockSize, blockSize); _GraphicsDevice.SetRenderTarget(leftTop); _GraphicsDevice.Clear(Color.Black); Copy(res, new Rectangle(0, 0, VO_GUI.FrontLT.Width, VO_GUI.FrontLT.Height), VO_GUI.FrontLT.Source); } #endregion #region Côté leftBottom RenderTarget2D leftBottom = null; if (miniHeight > 0 && miniWidth > 0) { leftBottom = new RenderTarget2D(_GraphicsDevice, blockSize, blockSize); _GraphicsDevice.SetRenderTarget(leftBottom); _GraphicsDevice.Clear(Color.Black); Copy(res, new Rectangle(0, 0, VO_GUI.FrontLB.Width, VO_GUI.FrontLB.Height), VO_GUI.FrontLB.Source); } #endregion #region Côté rightTop RenderTarget2D rightTop = null; if (miniHeight > 0 && miniWidth > 0) { rightTop = new RenderTarget2D(_GraphicsDevice, blockSize, blockSize); _GraphicsDevice.SetRenderTarget(rightTop); _GraphicsDevice.Clear(Color.Black); Copy(res, new Rectangle(0, 0, VO_GUI.FrontRT.Width, VO_GUI.FrontRT.Height), VO_GUI.FrontRT.Source); } #endregion #region Côté rightBottom RenderTarget2D rightBottom = null; if (miniHeight > 0 && miniWidth > 0) { rightBottom = new RenderTarget2D(_GraphicsDevice, blockSize, blockSize); _GraphicsDevice.SetRenderTarget(rightBottom); _GraphicsDevice.Clear(Color.Black); Copy(res, new Rectangle(0, 0, VO_GUI.FrontRB.Width, VO_GUI.FrontRB.Height), VO_GUI.FrontRB.Source); } #endregion #region Réunion RenderTarget2D menu = new RenderTarget2D(_GraphicsDevice, width, height); _GraphicsDevice.SetRenderTarget(menu); _GraphicsDevice.Clear(Color.Black); if (center != null) { Copy(center, new Rectangle(blockSize, blockSize, center.Width, center.Height), center.Bounds); } if (left != null) { Copy(left, new Rectangle(0, blockSize, left.Width, left.Height), left.Bounds); } if (right != null) { Copy(right, new Rectangle(miniWidth + blockSize, blockSize, right.Width, right.Height), right.Bounds); } if (top != null) { Copy(top, new Rectangle(blockSize, 0, top.Width, top.Height), top.Bounds); } if (bottom != null) { Copy(bottom, new Rectangle(blockSize, miniHeight + blockSize, bottom.Width, bottom.Height), bottom.Bounds); } if (leftTop != null) { Copy(leftTop, new Rectangle(0, 0, leftTop.Width, leftTop.Height), leftTop.Bounds); } if (leftBottom != null) { Copy(leftBottom, new Rectangle(0, miniHeight + blockSize, leftBottom.Width, leftBottom.Height), leftBottom.Bounds); } if (rightTop != null) { Copy(rightTop, new Rectangle(miniWidth + blockSize, 0, rightTop.Width, rightTop.Height), rightTop.Bounds); } if (rightBottom != null) { Copy(rightBottom, new Rectangle(miniWidth + blockSize, miniHeight + blockSize, rightBottom.Width, rightBottom.Height), rightBottom.Bounds); } #endregion if (top != null) { top.Dispose(); } if (left != null) { left.Dispose(); } if (right != null) { right.Dispose(); } if (bottom != null) { bottom.Dispose(); } if (center != null) { center.Dispose(); } if (leftTop != null) { leftTop.Dispose(); } if (leftBottom != null) { leftBottom.Dispose(); } if (rightBottom != null) { rightBottom.Dispose(); } if (rightTop != null) { rightTop.Dispose(); } //Release the GPU back to drawing to the screen _GraphicsDevice.SetRenderTarget(null); return(menu as Texture2D); }