1
0
Fork 0
mirror of https://github.com/Ellpeck/MLEM.git synced 2024-11-22 20:58:34 +01:00

made custom draw groups be a bit easier to use

This commit is contained in:
Ellpeck 2019-12-29 19:28:56 +01:00
parent bbdb424cbe
commit da603c5f05

View file

@ -4,21 +4,21 @@ using Microsoft.Xna.Framework.Graphics;
namespace MLEM.Ui.Elements { namespace MLEM.Ui.Elements {
public class CustomDrawGroup : Group { public class CustomDrawGroup : Group {
public Matrix Transform; public Matrix? Transform;
public TransformCallback TransformGetter;
public BeginDelegate BeginImpl; public BeginDelegate BeginImpl;
public CustomDrawGroup(Anchor anchor, Vector2 size, Matrix? transform = null, BeginDelegate beginImpl = null, bool setHeightBasedOnChildren = true) : public CustomDrawGroup(Anchor anchor, Vector2 size, TransformCallback transformGetter = null, BeginDelegate beginImpl = null, bool setHeightBasedOnChildren = true) :
base(anchor, size, setHeightBasedOnChildren) { base(anchor, size, setHeightBasedOnChildren) {
this.Transform = transform ?? Matrix.Identity; this.TransformGetter = transformGetter ?? ((element, time, matrix) => Matrix.Identity);
this.BeginImpl = beginImpl ?? ((element, time, batch, alpha, blendState, samplerState, matrix) => batch.Begin(SpriteSortMode.Deferred, blendState, samplerState, null, null, null, matrix)); this.BeginImpl = beginImpl ?? ((element, time, batch, alpha, blendState, samplerState, matrix) => batch.Begin(SpriteSortMode.Deferred, blendState, samplerState, null, null, null, matrix));
} }
public delegate void BeginDelegate(CustomDrawGroup element, GameTime time, SpriteBatch batch, float alpha, BlendState blendState, SamplerState samplerState, Matrix matrix);
public override void Draw(GameTime time, SpriteBatch batch, float alpha, BlendState blendState, SamplerState samplerState, Matrix matrix) { public override void Draw(GameTime time, SpriteBatch batch, float alpha, BlendState blendState, SamplerState samplerState, Matrix matrix) {
// end the usual draw so that we can begin our own // end the usual draw so that we can begin our own
batch.End(); batch.End();
var mat = matrix * this.Transform; var trans = this.Transform ?? this.TransformGetter(this, time, matrix);
var mat = matrix * trans;
this.BeginImpl(this, time, batch, alpha, blendState, samplerState, mat); this.BeginImpl(this, time, batch, alpha, blendState, samplerState, mat);
// draw child components in custom begin call // draw child components in custom begin call
base.Draw(time, batch, alpha, blendState, samplerState, mat); base.Draw(time, batch, alpha, blendState, samplerState, mat);
@ -28,5 +28,9 @@ namespace MLEM.Ui.Elements {
batch.Begin(SpriteSortMode.Deferred, blendState, samplerState, null, null, null, matrix); batch.Begin(SpriteSortMode.Deferred, blendState, samplerState, null, null, null, matrix);
} }
public delegate void BeginDelegate(CustomDrawGroup element, GameTime time, SpriteBatch batch, float alpha, BlendState blendState, SamplerState samplerState, Matrix matrix);
public delegate Matrix TransformCallback(CustomDrawGroup element, GameTime time, Matrix matrix);
} }
} }