mirror of
https://github.com/Ellpeck/MLEM.git
synced 2024-11-22 20:58:34 +01:00
cleaned up the demos a bit to allow better usage on mobile
This commit is contained in:
parent
ec2416719e
commit
e427305490
6 changed files with 48 additions and 25 deletions
|
@ -6,12 +6,16 @@ using MLEM.Animations;
|
||||||
using MLEM.Misc;
|
using MLEM.Misc;
|
||||||
using MLEM.Startup;
|
using MLEM.Startup;
|
||||||
using MLEM.Textures;
|
using MLEM.Textures;
|
||||||
|
using MLEM.Ui;
|
||||||
|
using MLEM.Ui.Elements;
|
||||||
|
|
||||||
namespace Demos {
|
namespace Demos {
|
||||||
public class AnimationDemo : Demo {
|
public class AnimationDemo : Demo {
|
||||||
|
|
||||||
private SpriteAnimationGroup group;
|
private SpriteAnimationGroup group;
|
||||||
private Direction2 facing = Direction2.Down;
|
private Direction2 facing = Direction2.Down;
|
||||||
|
private Group buttons;
|
||||||
|
private bool stop;
|
||||||
|
|
||||||
public AnimationDemo(MlemGame game) : base(game) {
|
public AnimationDemo(MlemGame game) : base(game) {
|
||||||
}
|
}
|
||||||
|
@ -48,26 +52,38 @@ namespace Demos {
|
||||||
// you can also add a priority to an animation in the group (10 in this case, which is higher than the default of 0)
|
// you can also add a priority to an animation in the group (10 in this case, which is higher than the default of 0)
|
||||||
// if two animations' playing conditions are both true, then the one with the higher priority will be picked to play
|
// if two animations' playing conditions are both true, then the one with the higher priority will be picked to play
|
||||||
// in this instance, a standing "animation" is displayed when we're facing down and also holding the space key
|
// in this instance, a standing "animation" is displayed when we're facing down and also holding the space key
|
||||||
this.group.Add(new SpriteAnimation(1F, atlas[0, 0]) {Name = "DownStanding"}, () => this.facing == Direction2.Down && this.InputHandler.IsKeyDown(Keys.Space), 10);
|
this.group.Add(new SpriteAnimation(1F, atlas[0, 0]) {Name = "DownStanding"}, () => this.facing == Direction2.Down && this.stop, 10);
|
||||||
|
this.group.Add(new SpriteAnimation(1F, atlas[1, 0]) {Name = "UpStanding"}, () => this.facing == Direction2.Up && this.stop, 10);
|
||||||
|
this.group.Add(new SpriteAnimation(1F, atlas[2, 0]) {Name = "LeftStanding"}, () => this.facing == Direction2.Left && this.stop, 10);
|
||||||
|
this.group.Add(new SpriteAnimation(1F, atlas[3, 0]) {Name = "RightStanding"}, () => this.facing == Direction2.Right && this.stop, 10);
|
||||||
|
|
||||||
// you can also add a callback to see when the animation used changes
|
// you can also add a callback to see when the animation used changes
|
||||||
this.group.OnAnimationChanged += (anim, newAnim) => {
|
this.group.OnAnimationChanged += (anim, newAnim) => {
|
||||||
Console.WriteLine("Changing anim from " + (anim?.Name ?? "None") + " to " + (newAnim?.Name ?? "None"));
|
Console.WriteLine("Changing anim from " + (anim?.Name ?? "None") + " to " + (newAnim?.Name ?? "None"));
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// some ui elements to interact with the character
|
||||||
|
this.buttons = new Group(Anchor.TopCenter, Vector2.One) {SetWidthBasedOnChildren = true};
|
||||||
|
this.UiRoot.AddChild(this.buttons);
|
||||||
|
this.buttons.AddChild(new Button(Anchor.AutoInlineIgnoreOverflow, new Vector2(10), "^") {
|
||||||
|
OnPressed = e => this.facing = Direction2.Up
|
||||||
|
});
|
||||||
|
this.buttons.AddChild(new Button(Anchor.AutoInlineIgnoreOverflow, new Vector2(10), "v") {
|
||||||
|
OnPressed = e => this.facing = Direction2.Down
|
||||||
|
});
|
||||||
|
this.buttons.AddChild(new Button(Anchor.AutoInlineIgnoreOverflow, new Vector2(10), "<") {
|
||||||
|
OnPressed = e => this.facing = Direction2.Left
|
||||||
|
});
|
||||||
|
this.buttons.AddChild(new Button(Anchor.AutoInlineIgnoreOverflow, new Vector2(10), ">") {
|
||||||
|
OnPressed = e => this.facing = Direction2.Right
|
||||||
|
});
|
||||||
|
this.buttons.AddChild(new Button(Anchor.AutoCenter, new Vector2(30, 10), "Stand/Walk") {
|
||||||
|
OnPressed = e => this.stop = !this.stop
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Update(GameTime gameTime) {
|
public override void Update(GameTime gameTime) {
|
||||||
base.Update(gameTime);
|
base.Update(gameTime);
|
||||||
|
|
||||||
if (this.InputHandler.IsKeyDown(Keys.Down))
|
|
||||||
this.facing = Direction2.Down;
|
|
||||||
else if (this.InputHandler.IsKeyDown(Keys.Up))
|
|
||||||
this.facing = Direction2.Up;
|
|
||||||
else if (this.InputHandler.IsKeyDown(Keys.Left))
|
|
||||||
this.facing = Direction2.Left;
|
|
||||||
else if (this.InputHandler.IsKeyDown(Keys.Right))
|
|
||||||
this.facing = Direction2.Right;
|
|
||||||
|
|
||||||
// update the animation group
|
// update the animation group
|
||||||
// if not using a group, just update the animation itself here
|
// if not using a group, just update the animation itself here
|
||||||
this.group.Update(gameTime);
|
this.group.Update(gameTime);
|
||||||
|
@ -85,5 +101,9 @@ namespace Demos {
|
||||||
base.DoDraw(gameTime);
|
base.DoDraw(gameTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void Clear() {
|
||||||
|
this.UiRoot.RemoveChild(this.buttons);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -3,6 +3,7 @@ using Microsoft.Xna.Framework.Graphics;
|
||||||
using MLEM.Input;
|
using MLEM.Input;
|
||||||
using MLEM.Startup;
|
using MLEM.Startup;
|
||||||
using MLEM.Ui;
|
using MLEM.Ui;
|
||||||
|
using MLEM.Ui.Elements;
|
||||||
|
|
||||||
namespace Demos {
|
namespace Demos {
|
||||||
public class Demo {
|
public class Demo {
|
||||||
|
@ -12,6 +13,7 @@ namespace Demos {
|
||||||
public GraphicsDevice GraphicsDevice => this.Game.GraphicsDevice;
|
public GraphicsDevice GraphicsDevice => this.Game.GraphicsDevice;
|
||||||
public InputHandler InputHandler => this.Game.InputHandler;
|
public InputHandler InputHandler => this.Game.InputHandler;
|
||||||
public UiSystem UiSystem => this.Game.UiSystem;
|
public UiSystem UiSystem => this.Game.UiSystem;
|
||||||
|
public Element UiRoot => this.UiSystem.Get("DemoUi").Element;
|
||||||
|
|
||||||
public Demo(MlemGame game) {
|
public Demo(MlemGame game) {
|
||||||
this.Game = game;
|
this.Game = game;
|
||||||
|
|
|
@ -29,7 +29,7 @@ namespace Demos {
|
||||||
OnPressed = e => this.current = (this.current + 1) % Easings.Length
|
OnPressed = e => this.current = (this.current + 1) % Easings.Length
|
||||||
});
|
});
|
||||||
this.group.AddChild(new Paragraph(Anchor.AutoCenter, 1, p => EasingFields[this.current].Name, true));
|
this.group.AddChild(new Paragraph(Anchor.AutoCenter, 1, p => EasingFields[this.current].Name, true));
|
||||||
this.UiSystem.Get("DemoUi").Element.AddChild(this.group);
|
this.UiRoot.AddChild(this.group);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Clear() {
|
public override void Clear() {
|
||||||
|
|
|
@ -21,10 +21,10 @@ namespace Demos {
|
||||||
|
|
||||||
static GameImpl() {
|
static GameImpl() {
|
||||||
Demos.Add("Ui", ("An in-depth demonstration of the MLEM.Ui package and its abilities", game => new UiDemo(game)));
|
Demos.Add("Ui", ("An in-depth demonstration of the MLEM.Ui package and its abilities", game => new UiDemo(game)));
|
||||||
|
Demos.Add("Easings", ("An example of MLEM's Easings class, an adaptation of easings.net", game => new EasingsDemo(game)));
|
||||||
|
Demos.Add("Pathfinding", ("An example of MLEM's A* pathfinding implementation in 2D", game => new PathfindingDemo(game)));
|
||||||
Demos.Add("Animation and Texture Atlas", ("An example of UniformTextureAtlases, SpriteAnimations and SpriteAnimationGroups", game => new AnimationDemo(game)));
|
Demos.Add("Animation and Texture Atlas", ("An example of UniformTextureAtlases, SpriteAnimations and SpriteAnimationGroups", game => new AnimationDemo(game)));
|
||||||
Demos.Add("Auto Tiling", ("A demonstration of the AutoTiling class that MLEM provides", game => new AutoTilingDemo(game)));
|
Demos.Add("Auto Tiling", ("A demonstration of the AutoTiling class that MLEM provides", game => new AutoTilingDemo(game)));
|
||||||
Demos.Add("Pathfinding", ("An example of MLEM's A* pathfinding implementation in 2D", game => new PathfindingDemo(game)));
|
|
||||||
Demos.Add("Easings", ("An example of MLEM's Easings class, an adaptation of easings.net", game => new EasingsDemo(game)));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public GameImpl() {
|
public GameImpl() {
|
||||||
|
|
|
@ -8,6 +8,8 @@ using MLEM.Input;
|
||||||
using MLEM.Misc;
|
using MLEM.Misc;
|
||||||
using MLEM.Pathfinding;
|
using MLEM.Pathfinding;
|
||||||
using MLEM.Startup;
|
using MLEM.Startup;
|
||||||
|
using MLEM.Ui;
|
||||||
|
using MLEM.Ui.Elements;
|
||||||
|
|
||||||
namespace Demos {
|
namespace Demos {
|
||||||
public class PathfindingDemo : Demo {
|
public class PathfindingDemo : Demo {
|
||||||
|
@ -15,6 +17,7 @@ namespace Demos {
|
||||||
private bool[,] world;
|
private bool[,] world;
|
||||||
private AStar2 pathfinder;
|
private AStar2 pathfinder;
|
||||||
private List<Point> path;
|
private List<Point> path;
|
||||||
|
private Button regenerateButton;
|
||||||
|
|
||||||
public PathfindingDemo(MlemGame game) : base(game) {
|
public PathfindingDemo(MlemGame game) : base(game) {
|
||||||
}
|
}
|
||||||
|
@ -62,19 +65,13 @@ namespace Demos {
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void LoadContent() {
|
public override void LoadContent() {
|
||||||
base.LoadContent();
|
this.regenerateButton = new Button(Anchor.TopCenter, new Vector2(30, 10), "Regenerate") {
|
||||||
|
OnPressed = e => this.Init()
|
||||||
|
};
|
||||||
|
this.UiRoot.AddChild(this.regenerateButton);
|
||||||
this.Init();
|
this.Init();
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Update(GameTime gameTime) {
|
|
||||||
base.Update(gameTime);
|
|
||||||
|
|
||||||
// when pressing the left mouse button, generate a new world and find a new path
|
|
||||||
if (this.InputHandler.IsMouseButtonPressed(MouseButton.Left)) {
|
|
||||||
this.Init();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void DoDraw(GameTime gameTime) {
|
public override void DoDraw(GameTime gameTime) {
|
||||||
this.GraphicsDevice.Clear(Color.White);
|
this.GraphicsDevice.Clear(Color.White);
|
||||||
|
|
||||||
|
@ -102,5 +99,9 @@ namespace Demos {
|
||||||
base.DoDraw(gameTime);
|
base.DoDraw(gameTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void Clear() {
|
||||||
|
this.UiRoot.RemoveChild(this.regenerateButton);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -61,7 +61,7 @@ namespace Demos {
|
||||||
this.root = new Panel(Anchor.Center, new Vector2(80, 100), Vector2.Zero, false, true, new Point(5, 10));
|
this.root = new Panel(Anchor.Center, new Vector2(80, 100), Vector2.Zero, false, true, new Point(5, 10));
|
||||||
this.root.ScrollBar.SmoothScrolling = true;
|
this.root.ScrollBar.SmoothScrolling = true;
|
||||||
// add the root to the demos' ui
|
// add the root to the demos' ui
|
||||||
this.UiSystem.Get("DemoUi").Element.AddChild(this.root);
|
this.UiRoot.AddChild(this.root);
|
||||||
|
|
||||||
this.root.AddChild(new Paragraph(Anchor.AutoLeft, 1, "This is a small demo for MLEM.Ui, a user interface library that is part of the MLEM Library by Ellpeck for MonoGame."));
|
this.root.AddChild(new Paragraph(Anchor.AutoLeft, 1, "This is a small demo for MLEM.Ui, a user interface library that is part of the MLEM Library by Ellpeck for MonoGame."));
|
||||||
var image = this.root.AddChild(new Image(Anchor.AutoCenter, new Vector2(50, 50), new TextureRegion(this.testTexture, 0, 0, 8, 8)) {IsHidden = true, Padding = new Vector2(3)});
|
var image = this.root.AddChild(new Image(Anchor.AutoCenter, new Vector2(50, 50), new TextureRegion(this.testTexture, 0, 0, 8, 8)) {IsHidden = true, Padding = new Vector2(3)});
|
||||||
|
|
Loading…
Reference in a new issue