mirror of
https://github.com/Ellpeck/MLEM.git
synced 2024-12-24 17:29:23 +01:00
made custom draw groups be a bit easier to use
This commit is contained in:
parent
bbdb424cbe
commit
da603c5f05
1 changed files with 10 additions and 6 deletions
|
@ -4,21 +4,21 @@ using Microsoft.Xna.Framework.Graphics;
|
|||
namespace MLEM.Ui.Elements {
|
||||
public class CustomDrawGroup : Group {
|
||||
|
||||
public Matrix Transform;
|
||||
public Matrix? Transform;
|
||||
public TransformCallback TransformGetter;
|
||||
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) {
|
||||
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));
|
||||
}
|
||||
|
||||
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) {
|
||||
// end the usual draw so that we can begin our own
|
||||
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);
|
||||
// draw child components in custom begin call
|
||||
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);
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue