From b6b40402db89b407365e70a0f0562a52b1667def Mon Sep 17 00:00:00 2001 From: BoredGuy Date: Sun, 8 Feb 2026 09:39:24 +0300 Subject: Back on track fully --- Assets/atlas.png | Bin 0 -> 590 bytes DungeonSlime/Content/atlas-definition.xml | 8 +++ DungeonSlime/DungeonSlime.sln | 24 ++++++++ MonoGameLibrary/Graphics/TextureAtlas.cs | 89 ++++++++++++++++++++++++++++++ MonoGameLibrary/Graphics/TextureRegion.cs | 75 +++++++++++++++++++++++++ MonoGameLibrary/MonoGameLibrary.sln | 24 ++++++++ debug.log | 6 ++ 7 files changed, 226 insertions(+) create mode 100644 Assets/atlas.png create mode 100644 DungeonSlime/Content/atlas-definition.xml create mode 100644 DungeonSlime/DungeonSlime.sln create mode 100644 MonoGameLibrary/Graphics/TextureAtlas.cs create mode 100644 MonoGameLibrary/Graphics/TextureRegion.cs create mode 100644 MonoGameLibrary/MonoGameLibrary.sln create mode 100644 debug.log diff --git a/Assets/atlas.png b/Assets/atlas.png new file mode 100644 index 0000000..7238c84 Binary files /dev/null and b/Assets/atlas.png differ diff --git a/DungeonSlime/Content/atlas-definition.xml b/DungeonSlime/Content/atlas-definition.xml new file mode 100644 index 0000000..f01b22b --- /dev/null +++ b/DungeonSlime/Content/atlas-definition.xml @@ -0,0 +1,8 @@ + + + images/atlas + + + + + diff --git a/DungeonSlime/DungeonSlime.sln b/DungeonSlime/DungeonSlime.sln new file mode 100644 index 0000000..889cfa5 --- /dev/null +++ b/DungeonSlime/DungeonSlime.sln @@ -0,0 +1,24 @@ +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.5.2.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DungeonSlime", "DungeonSlime.csproj", "{ED6B5FFA-0E1C-4BCE-D08B-69CC2DE9576F}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {ED6B5FFA-0E1C-4BCE-D08B-69CC2DE9576F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {ED6B5FFA-0E1C-4BCE-D08B-69CC2DE9576F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {ED6B5FFA-0E1C-4BCE-D08B-69CC2DE9576F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {ED6B5FFA-0E1C-4BCE-D08B-69CC2DE9576F}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {42753E4D-C659-4169-8241-E80D6AD14A92} + EndGlobalSection +EndGlobal diff --git a/MonoGameLibrary/Graphics/TextureAtlas.cs b/MonoGameLibrary/Graphics/TextureAtlas.cs new file mode 100644 index 0000000..751c341 --- /dev/null +++ b/MonoGameLibrary/Graphics/TextureAtlas.cs @@ -0,0 +1,89 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Runtime.Serialization; +using System.Xml; +using System.Xml.Linq; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Content; +using Microsoft.Xna.Framework.Graphics; + +namespace MonoGameLibrary.Graphics; + +public class TextureAtlas +{ + private Dictionary _regions; + public Texture2D Texture { get; set; } + + public TextureAtlas() + { + _regions = []; + } + + public TextureAtlas(Texture2D texture) + { + Texture = texture; + _regions = []; + } + + public void AddRegion(string name, int x, int y, int width, int height) + { + TextureRegion region = new TextureRegion(Texture, x, y, width, height); + _regions.Add(name, region); + } + + public TextureRegion GetRegion(string name) + { + return _regions[name]; + } + + public bool RemoveRegion(string name) + { + return _regions.Remove(name); + } + + public void Clear() + { + _regions.Clear(); + } + + public static TextureAtlas FromFile(ContentManager content, string fileName) + { + TextureAtlas atlas = new TextureAtlas(); + + string filePath = Path.Combine(content.RootDirectory, fileName); + + using (Stream stream = TitleContainer.OpenStream(filePath)) + { + using (XmlReader reader = XmlReader.Create(stream)) + { + XDocument doc = XDocument.Load(reader); + XElement root = doc.Root; + + string texturePath = root.Element("Texture").Value; + atlas.Texture = content.Load(texturePath); + + var regions = root.Element("Regions")?.Elements("Region"); + + if (regions != null) + { + foreach (var region in regions) + { + string name = region.Attribute("name")?.Value; + int x = int.Parse(region.Attribute("x")?.Value ?? "0"); + int y = int.Parse(region.Attribute("y")?.Value ?? "0"); + int width = int.Parse(region.Attribute("width")?.Value ?? "0"); + int height = int.Parse(region.Attribute("height")?.Value ?? "0"); + + if (!string.IsNullOrEmpty(name)) + { + atlas.AddRegion(name, x, y, width, height); + } + } + } + } + } + + return atlas; + } +} \ No newline at end of file diff --git a/MonoGameLibrary/Graphics/TextureRegion.cs b/MonoGameLibrary/Graphics/TextureRegion.cs new file mode 100644 index 0000000..f03097c --- /dev/null +++ b/MonoGameLibrary/Graphics/TextureRegion.cs @@ -0,0 +1,75 @@ +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; + +namespace MonoGameLibrary.Graphics; + +/// +/// Represents a rectangular region within a texture +/// +public class TextureRegion +{ + /// + /// Gets or Sets the source texture this texture region is part of + /// + public Texture2D Texture { get; set; } + + /// + /// Gets or Sets the source rectangle boundary of this texture region within the source texture + /// + public Rectangle SourceRectangle { get; set; } + + /// + /// Gets the width, in pixels, of this texture region + /// + public int Width => SourceRectangle.Width; + + /// + /// Gets the height, in pixels, of this texture region/ + /// + public int Height => SourceRectangle.Height; + + /// + /// Creates a new texture region. + /// + public TextureRegion() { } + + public TextureRegion(Texture2D texture, int x, int y, int width, int height) + { + Texture = texture; + SourceRectangle = new Rectangle(x, y, width, height); + } + + public void Draw(SpriteBatch spriteBatch, Vector2 position, Color color) + { + Draw(spriteBatch, position, color, 0.0f, Vector2.Zero, Vector2.One, SpriteEffects.None, 0.0f); + } + + public void Draw(SpriteBatch spriteBatch, Vector2 position, Color color, float rotation, Vector2 origin, float scale, SpriteEffects effects, float layerDepth) + { + Draw( + spriteBatch, + position, + color, + rotation, + origin, + new Vector2(scale, scale), + effects, + layerDepth + ); + } + + public void Draw(SpriteBatch spriteBatch, Vector2 position, Color color, float rotation, Vector2 origin, Vector2 scale, SpriteEffects effects, float layerDepth) + { + spriteBatch.Draw( + Texture, + position, + SourceRectangle, + color, + rotation, + origin, + scale, + effects, + layerDepth + ); + } +} \ No newline at end of file diff --git a/MonoGameLibrary/MonoGameLibrary.sln b/MonoGameLibrary/MonoGameLibrary.sln new file mode 100644 index 0000000..108213b --- /dev/null +++ b/MonoGameLibrary/MonoGameLibrary.sln @@ -0,0 +1,24 @@ +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.5.2.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MonoGameLibrary", "MonoGameLibrary.csproj", "{0E52B038-7007-E89F-D8DA-A8C72068ADEB}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {0E52B038-7007-E89F-D8DA-A8C72068ADEB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0E52B038-7007-E89F-D8DA-A8C72068ADEB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0E52B038-7007-E89F-D8DA-A8C72068ADEB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0E52B038-7007-E89F-D8DA-A8C72068ADEB}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {0D147C50-ABFF-4D82-A12C-2AC364F5BC91} + EndGlobalSection +EndGlobal diff --git a/debug.log b/debug.log new file mode 100644 index 0000000..8153152 --- /dev/null +++ b/debug.log @@ -0,0 +1,6 @@ +[0203/214753.867:ERROR:third_party\crashpad\crashpad\util\win\registration_protocol_win.cc:108] CreateFile: The system cannot find the file specified. (0x2) +[0203/214754.500:ERROR:third_party\crashpad\crashpad\util\win\registration_protocol_win.cc:108] CreateFile: The system cannot find the file specified. (0x2) +[0206/093842.013:ERROR:third_party\crashpad\crashpad\util\win\registration_protocol_win.cc:108] CreateFile: The system cannot find the file specified. (0x2) +[0206/093842.415:ERROR:third_party\crashpad\crashpad\util\win\registration_protocol_win.cc:108] CreateFile: The system cannot find the file specified. (0x2) +[0206/093842.867:ERROR:third_party\crashpad\crashpad\util\win\registration_protocol_win.cc:108] CreateFile: The system cannot find the file specified. (0x2) +[0206/093843.336:ERROR:third_party\crashpad\crashpad\util\win\registration_protocol_win.cc:108] CreateFile: The system cannot find the file specified. (0x2) -- cgit v1.2.3