Basic GUI library!
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
using DepthsBelow.GUI;
|
||||
using Microsoft.Xna.Framework;
|
||||
using Microsoft.Xna.Framework.Audio;
|
||||
using Microsoft.Xna.Framework.Content;
|
||||
@@ -83,6 +85,22 @@ namespace DepthsBelow
|
||||
MouseInput = new MouseInput(this);
|
||||
MouseInput.LoadContent();
|
||||
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>
|
||||
@@ -116,6 +134,8 @@ namespace DepthsBelow
|
||||
foreach (var body in Swarm)
|
||||
body.Update(gameTime);
|
||||
|
||||
GUIManager.Update(gameTime);
|
||||
|
||||
base.Update(gameTime);
|
||||
}
|
||||
|
||||
@@ -155,6 +175,11 @@ namespace DepthsBelow
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -122,6 +122,10 @@
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<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="Component\PathFinder.cs" />
|
||||
<Compile Include="Component\Transform.cs" />
|
||||
@@ -186,6 +190,7 @@
|
||||
<ItemGroup>
|
||||
<None Include="DepthsBelow_TemporaryKey.pfx" />
|
||||
</ItemGroup>
|
||||
<ItemGroup />
|
||||
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.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>
|
||||
</Compile>
|
||||
</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" />
|
||||
<!-- 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.
|
||||
|
||||
Reference in New Issue
Block a user