2021-19-03
SM.Base: ~ Improved Keyboard.AreSpecificKeysPressed(int, int) ~ Made GenericTransformation.LastMaster's set public ~ Made the fixed update use the property "IsExiting" to determent if it should stop. ~ The MainFramebuffer of each RenderPipeline now has always a name. SM2D: ~ Moved the checking code of Mouse2D.MouseOver into a own method.
This commit is contained in:
parent
c8db1ce8bc
commit
71a22df8bd
7 changed files with 31 additions and 18 deletions
|
|
@ -82,7 +82,7 @@ namespace SM.Base.Controls
|
|||
throw new ArgumentException("The startIndex is greater than the endIndex.", nameof(startIndex));
|
||||
|
||||
int length = endIndex - startIndex;
|
||||
for (int i = 0; i < length; i++)
|
||||
for (int i = 0; i < length + 1; i++)
|
||||
{
|
||||
int actualIndex = i + startIndex;
|
||||
Key key = (Key) actualIndex;
|
||||
|
|
@ -136,7 +136,7 @@ namespace SM.Base.Controls
|
|||
|
||||
bool success = false;
|
||||
List<Key> keys = new List<Key>();
|
||||
for (int i = 0; i < length; i++)
|
||||
for (int i = 0; i < length + 1; i++)
|
||||
{
|
||||
int actualIndex = i + startIndex;
|
||||
Key key = (Key) actualIndex;
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ namespace SM.Base.Drawing
|
|||
/// <summary>
|
||||
/// The last matrix that was used to calculate the real world matrix.
|
||||
/// </summary>
|
||||
public Matrix4 LastMaster { get; internal set; }
|
||||
public Matrix4 LastMaster { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The transformation in world space.
|
||||
|
|
|
|||
|
|
@ -121,12 +121,6 @@ namespace SM.Base.Window
|
|||
Mouse.MouseMoveEvent(e, this);
|
||||
}
|
||||
|
||||
protected override void OnClosing(CancelEventArgs e)
|
||||
{
|
||||
base.OnClosing(e);
|
||||
_fixedUpdateThread?.Abort();
|
||||
}
|
||||
|
||||
public void Update(UpdateContext context)
|
||||
{
|
||||
|
||||
|
|
@ -201,7 +195,7 @@ namespace SM.Base.Window
|
|||
private void ExecuteFixedUpdate()
|
||||
{
|
||||
Stopwatch deltaStop = new Stopwatch();
|
||||
while (Thread.CurrentThread.ThreadState != System.Threading.ThreadState.AbortRequested)
|
||||
while (!IsExiting)
|
||||
{
|
||||
deltaStop.Restart();
|
||||
|
||||
|
|
@ -210,7 +204,8 @@ namespace SM.Base.Window
|
|||
CurrentScene?.FixedUpdate(context);
|
||||
|
||||
long delta = deltaStop.ElapsedMilliseconds;
|
||||
Thread.Sleep(Math.Max((int)(Deltatime.FixedUpdateDelta * 1000) - (int)delta, 0));
|
||||
int waitTime = Math.Max((int)(Deltatime.FixedUpdateDelta * 1000) - (int)delta, 0);
|
||||
Thread.Sleep(waitTime);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ namespace SM.Base.Window
|
|||
/// This contains the default shader.
|
||||
/// <para>Default: <see cref="SMRenderer.DefaultMaterialShader"/></para>
|
||||
/// </summary>
|
||||
public virtual MaterialShader DefaultShader { get; protected set; } = SMRenderer.DefaultMaterialShader;
|
||||
public virtual MaterialShader DefaultShader { get; protected set; }
|
||||
/// <summary>
|
||||
/// Here you can set a default material.
|
||||
/// </summary>
|
||||
|
|
@ -53,6 +53,8 @@ namespace SM.Base.Window
|
|||
/// <inheritdoc/>
|
||||
public virtual void Initialization()
|
||||
{
|
||||
MainFramebuffer.Name = GetType().Name + ".MainFramebuffer";
|
||||
|
||||
if (MainFramebuffer != null) Framebuffers.Add(MainFramebuffer);
|
||||
DefaultShader ??= SMRenderer.DefaultMaterialShader;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
using OpenTK;
|
||||
using SM.Base.Controls;
|
||||
using SM.Base.Scene;
|
||||
using SM.OGL.Mesh;
|
||||
using SM2D.Scene;
|
||||
using SM2D.Types;
|
||||
|
||||
|
|
@ -48,12 +49,11 @@ namespace SM2D.Controls
|
|||
|
||||
foreach (TObject item in checkingObjects)
|
||||
{
|
||||
Matrix4 worldPos = item.Transform.InWorldSpace;
|
||||
item.Mesh.BoundingBox.GetBounds(worldPos, out Vector3 min, out Vector3 max);
|
||||
|
||||
if (mousePos.X > min.X && mousePos.X < max.X &&
|
||||
mousePos.Y > min.Y && mousePos.Y < max.Y)
|
||||
|
||||
if (MouseOver(mousePos, item.Mesh.BoundingBox, item.Transform))
|
||||
{
|
||||
Matrix4 worldPos = item.Transform.InWorldSpace;
|
||||
|
||||
// if z is greater than distance
|
||||
if (worldPos[3, 2] > distance)
|
||||
{
|
||||
|
|
@ -63,9 +63,24 @@ namespace SM2D.Controls
|
|||
|
||||
success = true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
public static bool MouseOver(Vector2 mousePos, BoundingBox boundingBox, Transformation transform)
|
||||
{
|
||||
Matrix4 worldPos = transform.InWorldSpace;
|
||||
boundingBox.GetBounds(worldPos, out Vector3 min, out Vector3 max);
|
||||
|
||||
if (mousePos.X > min.X && mousePos.X < max.X &&
|
||||
mousePos.Y > min.Y && mousePos.Y < max.Y)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -30,6 +30,7 @@ namespace SM_TEST
|
|||
window.ApplySetup(new Window2DSetup() {WorldScale = new Vector2(0,1000)});
|
||||
window.SetRenderPipeline(new TestRenderPipeline());
|
||||
window.SetScene(scene = new Scene());
|
||||
window.RunFixedUpdate(60);
|
||||
window.Load += WindowOnLoad;
|
||||
window.RenderFrame += WindowOnUpdateFrame;
|
||||
window.Run();
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ namespace SM_TEST
|
|||
public override void Initialization()
|
||||
{
|
||||
|
||||
MainFramebuffer = CreateWindowFramebuffer(0);
|
||||
MainFramebuffer = CreateWindowFramebuffer(16);
|
||||
|
||||
_postBuffer = CreateWindowFramebuffer();
|
||||
Framebuffers.Add(_postBuffer);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue