Basic GUI library!
This commit is contained in:
@@ -1,6 +1,8 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Diagnostics;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using DepthsBelow.GUI;
|
||||||
using Microsoft.Xna.Framework;
|
using Microsoft.Xna.Framework;
|
||||||
using Microsoft.Xna.Framework.Audio;
|
using Microsoft.Xna.Framework.Audio;
|
||||||
using Microsoft.Xna.Framework.Content;
|
using Microsoft.Xna.Framework.Content;
|
||||||
@@ -83,6 +85,22 @@ namespace DepthsBelow
|
|||||||
MouseInput = new MouseInput(this);
|
MouseInput = new MouseInput(this);
|
||||||
MouseInput.LoadContent();
|
MouseInput.LoadContent();
|
||||||
KeyboardInput = new KeyboardInput(this);
|
KeyboardInput = new KeyboardInput(this);
|
||||||
|
|
||||||
|
// Test GUI frames
|
||||||
|
var frame = new GUI.Button()
|
||||||
|
{
|
||||||
|
X = 100,
|
||||||
|
Width = 48,
|
||||||
|
Height = 23,
|
||||||
|
Texture = Content.Load<Texture2D>("images/Enter"),
|
||||||
|
OnClick = delegate(Point clickPos)
|
||||||
|
{
|
||||||
|
Debug.WriteLine("That ugly button was clicked at (" + clickPos.X + "," + clickPos.Y + ")");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
var text = new GUI.Text(Content.Load<SpriteFont>("Arial"));
|
||||||
|
text.Value = "Hello world!";
|
||||||
|
frame.Add(text);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -116,6 +134,8 @@ namespace DepthsBelow
|
|||||||
foreach (var body in Swarm)
|
foreach (var body in Swarm)
|
||||||
body.Update(gameTime);
|
body.Update(gameTime);
|
||||||
|
|
||||||
|
GUIManager.Update(gameTime);
|
||||||
|
|
||||||
base.Update(gameTime);
|
base.Update(gameTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -155,6 +175,11 @@ namespace DepthsBelow
|
|||||||
|
|
||||||
spriteBatch.End();
|
spriteBatch.End();
|
||||||
|
|
||||||
|
// Start drawing GUI components
|
||||||
|
spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, SamplerState.AnisotropicClamp, null, null, null, Matrix.Identity);
|
||||||
|
GUIManager.Draw(spriteBatch);
|
||||||
|
spriteBatch.End();
|
||||||
|
|
||||||
base.Draw(gameTime);
|
base.Draw(gameTime);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -122,6 +122,10 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="Camera.cs" />
|
<Compile Include="Camera.cs" />
|
||||||
|
<Compile Include="GUIManager.cs" />
|
||||||
|
<Compile Include="GUI\Button.cs" />
|
||||||
|
<Compile Include="GUI\Frame.cs" />
|
||||||
|
<Compile Include="GUI\Text.cs" />
|
||||||
<Compile Include="KeyboardInput.cs" />
|
<Compile Include="KeyboardInput.cs" />
|
||||||
<Compile Include="Component\PathFinder.cs" />
|
<Compile Include="Component\PathFinder.cs" />
|
||||||
<Compile Include="Component\Transform.cs" />
|
<Compile Include="Component\Transform.cs" />
|
||||||
@@ -186,6 +190,7 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="DepthsBelow_TemporaryKey.pfx" />
|
<None Include="DepthsBelow_TemporaryKey.pfx" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup />
|
||||||
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
||||||
<Import Project="$(MSBuildExtensionsPath)\Microsoft\XNA Game Studio\Microsoft.Xna.GameStudio.targets" />
|
<Import Project="$(MSBuildExtensionsPath)\Microsoft\XNA Game Studio\Microsoft.Xna.GameStudio.targets" />
|
||||||
<!--
|
<!--
|
||||||
|
|||||||
Executable
+63
@@ -0,0 +1,63 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using Microsoft.Xna.Framework;
|
||||||
|
using Microsoft.Xna.Framework.Graphics;
|
||||||
|
using Microsoft.Xna.Framework.Input;
|
||||||
|
|
||||||
|
namespace DepthsBelow.GUI
|
||||||
|
{
|
||||||
|
public class Button : Frame
|
||||||
|
{
|
||||||
|
public delegate void OnClickHandler(Point pos);
|
||||||
|
|
||||||
|
public OnClickHandler OnClick;
|
||||||
|
|
||||||
|
private MouseState lastMouseState;
|
||||||
|
|
||||||
|
public Button()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/*public void OnClick(Point pos)
|
||||||
|
{
|
||||||
|
Debug.WriteLine(this + " was clicked at (" + pos.X + "," + pos.Y + ")");
|
||||||
|
}*/
|
||||||
|
|
||||||
|
public override void Update(GameTime gameTime)
|
||||||
|
{
|
||||||
|
base.Update(gameTime);
|
||||||
|
|
||||||
|
MouseState ms = Mouse.GetState();
|
||||||
|
|
||||||
|
if (ms.LeftButton == ButtonState.Released && lastMouseState.LeftButton == ButtonState.Pressed)
|
||||||
|
{
|
||||||
|
// HACK: This should be handled globally somewhere else to prevent event bubbling
|
||||||
|
if (
|
||||||
|
ms.X >= Rectangle.Left
|
||||||
|
&& ms.X < Rectangle.Right
|
||||||
|
&& ms.Y >= Rectangle.Top
|
||||||
|
&& ms.Y < Rectangle.Bottom)
|
||||||
|
{
|
||||||
|
if (OnClick != null)
|
||||||
|
{
|
||||||
|
var clickPos = new Point(ms.X - Rectangle.X, ms.Y - Rectangle.Y);
|
||||||
|
OnClick(clickPos);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
lastMouseState = ms;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Draw(SpriteBatch spriteBatch)
|
||||||
|
{
|
||||||
|
//spriteBatch.DrawString(Font, Value, new Vector2(Rectangle.X + Parent.Rectangle.X, Rectangle.Y + Parent.Rectangle.Y), Color);
|
||||||
|
|
||||||
|
base.Draw(spriteBatch);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Executable
+91
@@ -0,0 +1,91 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using Microsoft.Xna.Framework;
|
||||||
|
using Microsoft.Xna.Framework.Graphics;
|
||||||
|
|
||||||
|
namespace DepthsBelow.GUI
|
||||||
|
{
|
||||||
|
public class Frame
|
||||||
|
{
|
||||||
|
public int Width
|
||||||
|
{
|
||||||
|
get { return this.Rectangle.Width; }
|
||||||
|
set { this.Rectangle.Width = value; }
|
||||||
|
}
|
||||||
|
public int Height
|
||||||
|
{
|
||||||
|
get { return this.Rectangle.Height; }
|
||||||
|
set { this.Rectangle.Height = value; }
|
||||||
|
}
|
||||||
|
public int X
|
||||||
|
{
|
||||||
|
get { return this.Rectangle.X; }
|
||||||
|
set { this.Rectangle.X = value; }
|
||||||
|
}
|
||||||
|
public int Y
|
||||||
|
{
|
||||||
|
get { return this.Rectangle.Y; }
|
||||||
|
set { this.Rectangle.Y = value; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public Rectangle Rectangle;
|
||||||
|
public Texture2D Texture;
|
||||||
|
public Color Color;
|
||||||
|
public bool Visible = true;
|
||||||
|
|
||||||
|
public Frame Parent;
|
||||||
|
public List<Frame> Children;
|
||||||
|
|
||||||
|
public Frame()
|
||||||
|
{
|
||||||
|
this.Rectangle = Rectangle.Empty;
|
||||||
|
this.Texture = null;
|
||||||
|
this.Color = Color.White;
|
||||||
|
|
||||||
|
this.Children = new List<Frame>();
|
||||||
|
|
||||||
|
GUIManager.Add(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Add(Frame childFrame)
|
||||||
|
{
|
||||||
|
childFrame.Parent = this;
|
||||||
|
if (!Children.Contains(childFrame))
|
||||||
|
Children.Add(childFrame);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Remove(Frame childFrame)
|
||||||
|
{
|
||||||
|
if (Children.Contains(childFrame))
|
||||||
|
Children.Remove(childFrame);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Destroy()
|
||||||
|
{
|
||||||
|
if (Parent != null)
|
||||||
|
Parent.Remove(this);
|
||||||
|
|
||||||
|
GUIManager.Remove(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual void Update(GameTime gameTime)
|
||||||
|
{
|
||||||
|
foreach (var child in Children)
|
||||||
|
child.Update(gameTime);
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual void Draw(SpriteBatch spriteBatch)
|
||||||
|
{
|
||||||
|
if (Visible)
|
||||||
|
{
|
||||||
|
if (Texture != null)
|
||||||
|
spriteBatch.Draw(Texture, Rectangle, Color);
|
||||||
|
|
||||||
|
foreach (var child in Children)
|
||||||
|
child.Draw(spriteBatch);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Executable
+30
@@ -0,0 +1,30 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using Microsoft.Xna.Framework;
|
||||||
|
using Microsoft.Xna.Framework.Graphics;
|
||||||
|
|
||||||
|
namespace DepthsBelow.GUI
|
||||||
|
{
|
||||||
|
class Text : Frame
|
||||||
|
{
|
||||||
|
public String Value;
|
||||||
|
public SpriteFont Font;
|
||||||
|
public Color Color;
|
||||||
|
|
||||||
|
public Text(SpriteFont font)
|
||||||
|
: base()
|
||||||
|
{
|
||||||
|
this.Font = font;
|
||||||
|
this.Color = Color.Black;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Draw(SpriteBatch spriteBatch)
|
||||||
|
{
|
||||||
|
base.Draw(spriteBatch);
|
||||||
|
|
||||||
|
spriteBatch.DrawString(Font, Value, new Vector2(Rectangle.X + Parent.Rectangle.X, Rectangle.Y + Parent.Rectangle.Y), Color);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Executable
+37
@@ -0,0 +1,37 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using DepthsBelow.GUI;
|
||||||
|
using Microsoft.Xna.Framework;
|
||||||
|
using Microsoft.Xna.Framework.Graphics;
|
||||||
|
|
||||||
|
namespace DepthsBelow
|
||||||
|
{
|
||||||
|
static class GUIManager
|
||||||
|
{
|
||||||
|
public static List<Frame> Frames = new List<Frame>();
|
||||||
|
|
||||||
|
public static void Add(Frame frame)
|
||||||
|
{
|
||||||
|
Frames.Add(frame);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void Remove(Frame frame)
|
||||||
|
{
|
||||||
|
Frames.Remove(frame);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void Update(GameTime gameTime)
|
||||||
|
{
|
||||||
|
foreach (var frame in Frames)
|
||||||
|
frame.Update(gameTime);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void Draw(SpriteBatch spriteBatch)
|
||||||
|
{
|
||||||
|
foreach (var frame in Frames)
|
||||||
|
frame.Draw(spriteBatch);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+60
@@ -0,0 +1,60 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!--
|
||||||
|
This file contains an xml description of a font, and will be read by the XNA
|
||||||
|
Framework Content Pipeline. Follow the comments to customize the appearance
|
||||||
|
of the font in your game, and to change the characters which are available to draw
|
||||||
|
with.
|
||||||
|
-->
|
||||||
|
<XnaContent xmlns:Graphics="Microsoft.Xna.Framework.Content.Pipeline.Graphics">
|
||||||
|
<Asset Type="Graphics:FontDescription">
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Modify this string to change the font that will be imported.
|
||||||
|
-->
|
||||||
|
<FontName>Berlin Sans FB</FontName>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Size is a float value, measured in points. Modify this value to change
|
||||||
|
the size of the font.
|
||||||
|
-->
|
||||||
|
<Size>11</Size>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Spacing is a float value, measured in pixels. Modify this value to change
|
||||||
|
the amount of spacing in between characters.
|
||||||
|
-->
|
||||||
|
<Spacing>0</Spacing>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
UseKerning controls the layout of the font. If this value is true, kerning information
|
||||||
|
will be used when placing characters.
|
||||||
|
-->
|
||||||
|
<UseKerning>true</UseKerning>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Style controls the style of the font. Valid entries are "Regular", "Bold", "Italic",
|
||||||
|
and "Bold, Italic", and are case sensitive.
|
||||||
|
-->
|
||||||
|
<Style>Regular</Style>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
If you uncomment this line, the default character will be substituted if you draw
|
||||||
|
or measure text that contains characters which were not included in the font.
|
||||||
|
-->
|
||||||
|
<!-- <DefaultCharacter>*</DefaultCharacter> -->
|
||||||
|
|
||||||
|
<!--
|
||||||
|
CharacterRegions control what letters are available in the font. Every
|
||||||
|
character from Start to End will be built and made available for drawing. The
|
||||||
|
default range is from 32, (ASCII space), to 126, ('~'), covering the basic Latin
|
||||||
|
character set. The characters are ordered according to the Unicode standard.
|
||||||
|
See the documentation for more information.
|
||||||
|
-->
|
||||||
|
<CharacterRegions>
|
||||||
|
<CharacterRegion>
|
||||||
|
<Start> </Start>
|
||||||
|
<End>~</End>
|
||||||
|
</CharacterRegion>
|
||||||
|
</CharacterRegions>
|
||||||
|
</Asset>
|
||||||
|
</XnaContent>
|
||||||
@@ -113,6 +113,13 @@
|
|||||||
<Processor>TextureProcessor</Processor>
|
<Processor>TextureProcessor</Processor>
|
||||||
</Compile>
|
</Compile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="Arial.spritefont">
|
||||||
|
<Name>Arial</Name>
|
||||||
|
<Importer>FontDescriptionImporter</Importer>
|
||||||
|
<Processor>FontDescriptionProcessor</Processor>
|
||||||
|
</Compile>
|
||||||
|
</ItemGroup>
|
||||||
<Import Project="$(MSBuildExtensionsPath)\Microsoft\XNA Game Studio\$(XnaFrameworkVersion)\Microsoft.Xna.GameStudio.ContentPipeline.targets" />
|
<Import Project="$(MSBuildExtensionsPath)\Microsoft\XNA Game Studio\$(XnaFrameworkVersion)\Microsoft.Xna.GameStudio.ContentPipeline.targets" />
|
||||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||||
Other similar extension points exist, see Microsoft.Common.targets.
|
Other similar extension points exist, see Microsoft.Common.targets.
|
||||||
|
|||||||
Reference in New Issue
Block a user