initial
This commit is contained in:
commit
7366d5cb22
10 changed files with 429 additions and 0 deletions
5
.gitignore
vendored
Normal file
5
.gitignore
vendored
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
bin/
|
||||||
|
obj/
|
||||||
|
/packages/
|
||||||
|
riderModule.iml
|
||||||
|
/_ReSharper.Caches/
|
||||||
13
.idea/.idea.MonoGameLibrary/.idea/.gitignore
generated
vendored
Normal file
13
.idea/.idea.MonoGameLibrary/.idea/.gitignore
generated
vendored
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
# Default ignored files
|
||||||
|
/shelf/
|
||||||
|
/workspace.xml
|
||||||
|
# Rider ignored files
|
||||||
|
/modules.xml
|
||||||
|
/contentModel.xml
|
||||||
|
/projectSettingsUpdater.xml
|
||||||
|
/.idea.MonoGameLibrary.iml
|
||||||
|
# Editor-based HTTP Client requests
|
||||||
|
/httpRequests/
|
||||||
|
# Datasource local storage ignored files
|
||||||
|
/dataSources/
|
||||||
|
/dataSources.local.xml
|
||||||
8
.idea/.idea.MonoGameLibrary/.idea/indexLayout.xml
generated
Normal file
8
.idea/.idea.MonoGameLibrary/.idea/indexLayout.xml
generated
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="UserContentModel">
|
||||||
|
<attachedFolders />
|
||||||
|
<explicitIncludes />
|
||||||
|
<explicitExcludes />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
6
.idea/.idea.MonoGameLibrary/.idea/vcs.xml
generated
Normal file
6
.idea/.idea.MonoGameLibrary/.idea/vcs.xml
generated
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="VcsDirectoryMappings">
|
||||||
|
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
16
MonoGameLibrary.sln
Normal file
16
MonoGameLibrary.sln
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
|
||||||
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MonoGameLibrary", "MonoGameLibrary\MonoGameLibrary.csproj", "{16577832-EF98-4CEC-A3A9-4BB0EB5D3907}"
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Debug|Any CPU = Debug|Any CPU
|
||||||
|
Release|Any CPU = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{16577832-EF98-4CEC-A3A9-4BB0EB5D3907}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{16577832-EF98-4CEC-A3A9-4BB0EB5D3907}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{16577832-EF98-4CEC-A3A9-4BB0EB5D3907}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{16577832-EF98-4CEC-A3A9-4BB0EB5D3907}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
||||||
30
MonoGameLibrary/.config/dotnet-tools.json
Normal file
30
MonoGameLibrary/.config/dotnet-tools.json
Normal file
|
|
@ -0,0 +1,30 @@
|
||||||
|
{
|
||||||
|
"version": 1,
|
||||||
|
"isRoot": true,
|
||||||
|
"tools": {
|
||||||
|
"dotnet-mgcb-editor": {
|
||||||
|
"version": "3.8.4",
|
||||||
|
"commands": [
|
||||||
|
"mgcb-editor"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"dotnet-mgcb-editor-linux": {
|
||||||
|
"version": "3.8.4",
|
||||||
|
"commands": [
|
||||||
|
"mgcb-editor-linux"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"dotnet-mgcb-editor-windows": {
|
||||||
|
"version": "3.8.4",
|
||||||
|
"commands": [
|
||||||
|
"mgcb-editor-windows"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"dotnet-mgcb-editor-mac": {
|
||||||
|
"version": "3.8.4",
|
||||||
|
"commands": [
|
||||||
|
"mgcb-editor-mac"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
91
MonoGameLibrary/Core.cs
Normal file
91
MonoGameLibrary/Core.cs
Normal file
|
|
@ -0,0 +1,91 @@
|
||||||
|
using System;
|
||||||
|
using Microsoft.Xna.Framework;
|
||||||
|
using Microsoft.Xna.Framework.Content;
|
||||||
|
using Microsoft.Xna.Framework.Graphics;
|
||||||
|
|
||||||
|
namespace MonoGameLibrary;
|
||||||
|
|
||||||
|
public class Core : Game
|
||||||
|
{
|
||||||
|
internal static Core s_instance;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets a reference to the Core instance.
|
||||||
|
/// </summary>
|
||||||
|
public static Core Instance => s_instance;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the graphics device manager to control the presentation of graphics.
|
||||||
|
/// </summary>
|
||||||
|
public static GraphicsDeviceManager graphics { get; private set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the graphics device used to create graphical resources and perform primitive rendering.
|
||||||
|
/// </summary>
|
||||||
|
public static new GraphicsDevice graphicsDevice { get; private set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the sprite batch used for all 2D rendering.
|
||||||
|
/// </summary>
|
||||||
|
public static SpriteBatch spriteBatch { get; private set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the content manager used to load global assets.
|
||||||
|
/// </summary>
|
||||||
|
public static new ContentManager content { get; private set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Creates a new Core instance.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="title">The title to display in the title bar of the game window.</param>
|
||||||
|
/// <param name="width">The initial width, in pixels, of the game window.</param>
|
||||||
|
/// <param name="height">The initial height, in pixels, of the game window.</param>
|
||||||
|
/// <param name="fullScreen">Indicates if the game should start in fullscreen mode.</param>
|
||||||
|
public Core(string title, int width, int height, bool fullScreen)
|
||||||
|
{
|
||||||
|
// Ensure that multiple cores are not created.
|
||||||
|
if (s_instance != null)
|
||||||
|
{
|
||||||
|
throw new InvalidOperationException($"Only a single Core instance can be created");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Store reference to engine for global member access.
|
||||||
|
s_instance = this;
|
||||||
|
|
||||||
|
// Create a new graphics device manager.
|
||||||
|
graphics = new GraphicsDeviceManager(this);
|
||||||
|
|
||||||
|
// Set the graphics defaults.
|
||||||
|
graphics.PreferredBackBufferWidth = width;
|
||||||
|
graphics.PreferredBackBufferHeight = height;
|
||||||
|
graphics.IsFullScreen = fullScreen;
|
||||||
|
|
||||||
|
// Apply the graphic presentation changes.
|
||||||
|
graphics.ApplyChanges();
|
||||||
|
|
||||||
|
// Set the window title.
|
||||||
|
Window.Title = title;
|
||||||
|
|
||||||
|
// Set the core's content manager to a reference of the base Game's
|
||||||
|
// content manager.
|
||||||
|
content = base.Content;
|
||||||
|
|
||||||
|
// Set the root directory for content.
|
||||||
|
content.RootDirectory = "Content";
|
||||||
|
|
||||||
|
// Mouse is visible by default.
|
||||||
|
IsMouseVisible = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void Initialize()
|
||||||
|
{
|
||||||
|
base.Initialize();
|
||||||
|
|
||||||
|
// Set the core's graphics device to a reference of the base Game's
|
||||||
|
// graphics device.
|
||||||
|
graphicsDevice = base.GraphicsDevice;
|
||||||
|
|
||||||
|
// Create the sprite batch instance.
|
||||||
|
spriteBatch = new SpriteBatch(graphicsDevice);
|
||||||
|
}
|
||||||
|
}
|
||||||
137
MonoGameLibrary/Graphics/TextureAtlas.cs
Normal file
137
MonoGameLibrary/Graphics/TextureAtlas.cs
Normal file
|
|
@ -0,0 +1,137 @@
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
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 TextureRegion[] _regions;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or Sets the source texture represented by this texture atlas.
|
||||||
|
/// </summary>
|
||||||
|
public Texture2D Texture { get; set; }
|
||||||
|
|
||||||
|
// /// <summary>
|
||||||
|
// /// Creates a new texture atlas.
|
||||||
|
// /// </summary>
|
||||||
|
// public TextureAtlas() {
|
||||||
|
// _regions = new TextureRegion[0];
|
||||||
|
// }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Creates a new texture atlas instance using the given texture.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="texture">The source texture represented by the texture atlas.</param>
|
||||||
|
public TextureAtlas(Texture2D texture, int spriteCount) {
|
||||||
|
Texture = texture;
|
||||||
|
_regions = new TextureRegion[spriteCount];
|
||||||
|
}
|
||||||
|
|
||||||
|
// /// <summary>
|
||||||
|
// /// Creates a new region and adds it to this texture atlas.
|
||||||
|
// /// </summary>
|
||||||
|
// /// <param name="name">The name to give the texture region.</param>
|
||||||
|
// /// <param name="x">The top-left x-coordinate position of the region boundary relative to the top-left corner of the source texture boundary.</param>
|
||||||
|
// /// <param name="y">The top-left y-coordinate position of the region boundary relative to the top-left corner of the source texture boundary.</param>
|
||||||
|
// /// <param name="width">The width, in pixels, of the region.</param>
|
||||||
|
// /// <param name="height">The height, in pixels, of the region.</param>
|
||||||
|
// 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);
|
||||||
|
// }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the region from this texture atlas with the specified name.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="name">The name of the region to retrieve.</param>
|
||||||
|
/// <returns>The TextureRegion with the specified name.</returns>
|
||||||
|
|
||||||
|
public TextureRegion this[int id] {
|
||||||
|
get => _regions[id];
|
||||||
|
set => _regions[id] = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
// public TextureRegion GetRegion(string name) {
|
||||||
|
// return _regions[name];
|
||||||
|
// }
|
||||||
|
|
||||||
|
// /// <summary>
|
||||||
|
// /// Removes the region from this texture atlas with the specified name.
|
||||||
|
// /// </summary>
|
||||||
|
// /// <param name="name">The name of the region to remove.</param>
|
||||||
|
// /// <returns></returns>
|
||||||
|
// public bool RemoveRegion(string name) {
|
||||||
|
// return _regions.Remove(name);
|
||||||
|
// }
|
||||||
|
|
||||||
|
// /// <summary>
|
||||||
|
// /// Removes all regions from this texture atlas.
|
||||||
|
// /// </summary>
|
||||||
|
// public void Clear() {
|
||||||
|
// _regions.Clear();
|
||||||
|
// }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Creates a new texture atlas based a texture atlas xml configuration file.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="content">The content manager used to load the texture for the atlas.</param>
|
||||||
|
/// <param name="fileName">The path to the xml file, relative to the content root directory.</param>
|
||||||
|
/// <returns>The texture atlas created by this method.</returns>
|
||||||
|
public static TextureAtlas FromFile(ContentManager content, string fileName) {
|
||||||
|
TextureAtlas atlas;
|
||||||
|
|
||||||
|
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;
|
||||||
|
|
||||||
|
// The <Texture> element contains the content path for the Texture2D to load.
|
||||||
|
// So we will retrieve that value then use the content manager to load the texture.
|
||||||
|
string texturePath = root.Element("Texture").Value;
|
||||||
|
int spriteCount = int.Parse(root.Attribute("count").Value);
|
||||||
|
atlas = new TextureAtlas(content.Load<Texture2D>(texturePath), spriteCount);
|
||||||
|
|
||||||
|
// The <Regions> element contains individual <Region> elements, each one describing
|
||||||
|
// a different texture region within the atlas.
|
||||||
|
//
|
||||||
|
// Example:
|
||||||
|
// <Regions>
|
||||||
|
// <Region name="spriteOne" x="0" y="0" width="32" height="32" />
|
||||||
|
// <Region name="spriteTwo" x="32" y="0" width="32" height="32" />
|
||||||
|
// </Regions>
|
||||||
|
//
|
||||||
|
// So we retrieve all of the <Region> elements then loop through each one
|
||||||
|
// and generate a new TextureRegion instance from it and add it to this atlas.
|
||||||
|
var regions = root.Element("Regions")?.Elements("Region");
|
||||||
|
|
||||||
|
if (regions == null) return atlas;
|
||||||
|
|
||||||
|
foreach (var region in regions) {
|
||||||
|
// int i = int.Parse(region.Attribute("id").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");
|
||||||
|
|
||||||
|
atlas[int.Parse(region.Attribute("id").Value)] = new TextureRegion(
|
||||||
|
atlas.Texture,
|
||||||
|
int.Parse(region.Attribute("x")?.Value ?? "0"),
|
||||||
|
int.Parse(region.Attribute("y")?.Value ?? "0"),
|
||||||
|
int.Parse(region.Attribute("width")?.Value ?? "0"),
|
||||||
|
int.Parse(region.Attribute("height")?.Value ?? "0"));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return atlas;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
113
MonoGameLibrary/Graphics/TextureRegion.cs
Normal file
113
MonoGameLibrary/Graphics/TextureRegion.cs
Normal file
|
|
@ -0,0 +1,113 @@
|
||||||
|
using Microsoft.Xna.Framework;
|
||||||
|
using Microsoft.Xna.Framework.Graphics;
|
||||||
|
|
||||||
|
namespace MonoGameLibrary.Graphics;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Represents a rectangular region within a texture.
|
||||||
|
/// </summary>
|
||||||
|
public class TextureRegion
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or Sets the source texture this texture region is part of.
|
||||||
|
/// </summary>
|
||||||
|
public Texture2D Texture { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or Sets the source rectangle boundary of this texture region within the source texture.
|
||||||
|
/// </summary>
|
||||||
|
public Rectangle SourceRectangle { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the width, in pixels, of this texture region.
|
||||||
|
/// </summary>
|
||||||
|
public int Width => SourceRectangle.Width;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the height, in pixels, of this texture region.
|
||||||
|
/// </summary>
|
||||||
|
public int Height => SourceRectangle.Height;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Creates a new texture region.
|
||||||
|
/// </summary>
|
||||||
|
public TextureRegion() { }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Creates a new texture region using the specified source texture.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="texture">The texture to use as the source texture for this texture region.</param>
|
||||||
|
/// <param name="x">The x-coordinate position of the upper-left corner of this texture region relative to the upper-left corner of the source texture.</param>
|
||||||
|
/// <param name="y">The y-coordinate position of the upper-left corner of this texture region relative to the upper-left corner of the source texture.</param>
|
||||||
|
/// <param name="width">The width, in pixels, of this texture region.</param>
|
||||||
|
/// <param name="height">The height, in pixels, of this texture region.</param>
|
||||||
|
public TextureRegion(Texture2D texture, int x, int y, int width, int height)
|
||||||
|
{
|
||||||
|
Texture = texture;
|
||||||
|
SourceRectangle = new Rectangle(x, y, width, height);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Submit this texture region for drawing in the current batch.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="spriteBatch">The spritebatch instance used for batching draw calls.</param>
|
||||||
|
/// <param name="position">The xy-coordinate location to draw this texture region on the screen.</param>
|
||||||
|
/// <param name="color">The color mask to apply when drawing this texture region on screen.</param>
|
||||||
|
public void Draw(SpriteBatch spriteBatch, Vector2 position, Color color)
|
||||||
|
{
|
||||||
|
Draw(spriteBatch, position, color, 0.0f, Vector2.Zero, Vector2.One, SpriteEffects.None, 0.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Submit this texture region for drawing in the current batch.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="spriteBatch">The spritebatch instance used for batching draw calls.</param>
|
||||||
|
/// <param name="position">The xy-coordinate location to draw this texture region on the screen.</param>
|
||||||
|
/// <param name="color">The color mask to apply when drawing this texture region on screen.</param>
|
||||||
|
/// <param name="rotation">The amount of rotation, in radians, to apply when drawing this texture region on screen.</param>
|
||||||
|
/// <param name="origin">The center of rotation, scaling, and position when drawing this texture region on screen.</param>
|
||||||
|
/// <param name="scale">The scale factor to apply when drawing this texture region on screen.</param>
|
||||||
|
/// <param name="effects">Specifies if this texture region should be flipped horizontally, vertically, or both when drawing on screen.</param>
|
||||||
|
/// <param name="layerDepth">The depth of the layer to use when drawing this texture region on screen.</param>
|
||||||
|
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
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Submit this texture region for drawing in the current batch.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="spriteBatch">The spritebatch instance used for batching draw calls.</param>
|
||||||
|
/// <param name="position">The xy-coordinate location to draw this texture region on the screen.</param>
|
||||||
|
/// <param name="color">The color mask to apply when drawing this texture region on screen.</param>
|
||||||
|
/// <param name="rotation">The amount of rotation, in radians, to apply when drawing this texture region on screen.</param>
|
||||||
|
/// <param name="origin">The center of rotation, scaling, and position when drawing this texture region on screen.</param>
|
||||||
|
/// <param name="scale">The amount of scaling to apply to the x- and y-axes when drawing this texture region on screen.</param>
|
||||||
|
/// <param name="effects">Specifies if this texture region should be flipped horizontally, vertically, or both when drawing on screen.</param>
|
||||||
|
/// <param name="layerDepth">The depth of the layer to use when drawing this texture region on screen.</param>
|
||||||
|
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
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
10
MonoGameLibrary/MonoGameLibrary.csproj
Normal file
10
MonoGameLibrary/MonoGameLibrary.csproj
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>net8.0</TargetFramework>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="MonoGame.Framework.DesktopGL" Version="3.8.*">
|
||||||
|
<PrivateAssets>All</PrivateAssets>
|
||||||
|
</PackageReference>
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
||||||
Loading…
Add table
Add a link
Reference in a new issue