Allowed for the text to set a text origin.
This commit is contained in:
parent
51f8dfd522
commit
17e76a9dd4
6 changed files with 56 additions and 38 deletions
|
|
@ -27,8 +27,5 @@ namespace SM.Base.Drawing.Text
|
||||||
|
|
||||||
|
|
||||||
public Matrix3 TextureMatrix;
|
public Matrix3 TextureMatrix;
|
||||||
|
|
||||||
public Vector2 Offset;
|
|
||||||
public Vector2 Scale;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -83,14 +83,9 @@ namespace SM.Base.Drawing.Text
|
||||||
|
|
||||||
TextureMatrix = TextureTransformation.CalculateMatrix(offset,
|
TextureMatrix = TextureTransformation.CalculateMatrix(offset,
|
||||||
scale, 0),
|
scale, 0),
|
||||||
|
|
||||||
Offset = offset,
|
|
||||||
Scale = scale
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Console.WriteLine();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Compile()
|
public override void Compile()
|
||||||
|
|
|
||||||
|
|
@ -3,12 +3,20 @@
|
||||||
using System;
|
using System;
|
||||||
using OpenTK;
|
using OpenTK;
|
||||||
using OpenTK.Graphics;
|
using OpenTK.Graphics;
|
||||||
|
using SM.Base.Objects.Static;
|
||||||
using SM.Base.Window;
|
using SM.Base.Window;
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
namespace SM.Base.Drawing.Text
|
namespace SM.Base.Drawing.Text
|
||||||
{
|
{
|
||||||
|
public enum TextOrigin
|
||||||
|
{
|
||||||
|
Left,
|
||||||
|
Center,
|
||||||
|
Right
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Defines a basis for text drawing.
|
/// Defines a basis for text drawing.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
@ -36,6 +44,12 @@ namespace SM.Base.Drawing.Text
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public float Height;
|
public float Height;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Allow to change the origin of the text.
|
||||||
|
/// <para>Default: <see cref="TextOrigin.Center"/></para>
|
||||||
|
/// </summary>
|
||||||
|
public TextOrigin Origin = TextOrigin.Center;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The spacing between numbers.
|
/// The spacing between numbers.
|
||||||
/// <para>Default: 1</para>
|
/// <para>Default: 1</para>
|
||||||
|
|
@ -85,6 +99,7 @@ namespace SM.Base.Drawing.Text
|
||||||
{
|
{
|
||||||
Material.Texture = font;
|
Material.Texture = font;
|
||||||
Material.Blending = true;
|
Material.Blending = true;
|
||||||
|
Mesh = Plate.Object;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -111,7 +126,6 @@ namespace SM.Base.Drawing.Text
|
||||||
float y = 0;
|
float y = 0;
|
||||||
for (var i = 0; i < _text.Length; i++)
|
for (var i = 0; i < _text.Length; i++)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (_text[i] == ' ')
|
if (_text[i] == ' ')
|
||||||
{
|
{
|
||||||
x += Font.SpaceWidth * Spacing;
|
x += Font.SpaceWidth * Spacing;
|
||||||
|
|
@ -150,10 +164,27 @@ namespace SM.Base.Drawing.Text
|
||||||
TextureMatrix = parameter.TextureMatrix
|
TextureMatrix = parameter.TextureMatrix
|
||||||
};
|
};
|
||||||
|
|
||||||
Width = Math.Max(Width, x);
|
|
||||||
x += parameter.Advance;
|
x += parameter.Advance;
|
||||||
}
|
}
|
||||||
Height = y + Font.Height;
|
Height = y + Font.Height;
|
||||||
|
Width = x;
|
||||||
|
|
||||||
|
if (Origin != TextOrigin.Left)
|
||||||
|
{
|
||||||
|
foreach (Instance i in _instances)
|
||||||
|
{
|
||||||
|
if (i == null) continue;
|
||||||
|
switch (Origin)
|
||||||
|
{
|
||||||
|
case TextOrigin.Center:
|
||||||
|
i.ModelMatrix *= Matrix4.CreateTranslation(-Width / 2, 0, 0);
|
||||||
|
break;
|
||||||
|
case TextOrigin.Right:
|
||||||
|
i.ModelMatrix *= Matrix4.CreateTranslation(-Width, 0, 0);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -102,7 +102,7 @@ namespace SM.Base.Scene
|
||||||
addObject(show);
|
addObject(show);
|
||||||
|
|
||||||
if (item is IScriptable scriptable)
|
if (item is IScriptable scriptable)
|
||||||
AddScript(scriptable);
|
addScript(scriptable);
|
||||||
|
|
||||||
if (item is IFixedScriptable fixedScriptable) _fixedScriptables.Add(fixedScriptable);
|
if (item is IFixedScriptable fixedScriptable) _fixedScriptables.Add(fixedScriptable);
|
||||||
}
|
}
|
||||||
|
|
@ -145,7 +145,6 @@ namespace SM.Base.Scene
|
||||||
/// Adds the script to the collection.
|
/// Adds the script to the collection.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="item"></param>
|
/// <param name="item"></param>
|
||||||
[Obsolete("Please use Add()")]
|
|
||||||
public void addScript(IScriptable item)
|
public void addScript(IScriptable item)
|
||||||
{
|
{
|
||||||
_scriptableObjects.Add(item);
|
_scriptableObjects.Add(item);
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,14 @@ namespace SM2D.Drawing
|
||||||
Transform.Size = new CVector2(1);
|
Transform.Size = new CVector2(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SetHeight(float desiredHeight)
|
||||||
|
{
|
||||||
|
if (!Font.WasCompiled) Font.Compile();
|
||||||
|
|
||||||
|
float factor = desiredHeight / Font.Height;
|
||||||
|
Transform.Size.Set(factor);
|
||||||
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
protected override void DrawContext(ref DrawContext context)
|
protected override void DrawContext(ref DrawContext context)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ using System.Diagnostics;
|
||||||
using OpenTK;
|
using OpenTK;
|
||||||
using OpenTK.Graphics;
|
using OpenTK.Graphics;
|
||||||
using OpenTK.Graphics.OpenGL;
|
using OpenTK.Graphics.OpenGL;
|
||||||
|
using SM.Base;
|
||||||
using SM.Base.Animation;
|
using SM.Base.Animation;
|
||||||
using SM.Base.Controls;
|
using SM.Base.Controls;
|
||||||
using SM.Base.Drawing;
|
using SM.Base.Drawing;
|
||||||
|
|
@ -33,50 +34,37 @@ namespace SM_TEST
|
||||||
};
|
};
|
||||||
font.RegenerateTexture();
|
font.RegenerateTexture();
|
||||||
|
|
||||||
|
SMRenderer.DefaultMesh = new Polygon(new[] { new Vector2(0, 0), new Vector2(0, 1), new Vector2(1, 1), new Vector2(1, 0) });
|
||||||
|
|
||||||
window = new GLWindow(1280, 720, "0ms", WindowFlags.Window, VSyncMode.Off);
|
window = new GLWindow(1280, 720, "0ms", WindowFlags.Window, VSyncMode.Off);
|
||||||
window.ApplySetup(new Window2DSetup());
|
window.ApplySetup(new Window2DSetup());
|
||||||
|
|
||||||
window.SetScene(scene = new Scene());
|
window.SetScene(scene = new Scene()
|
||||||
|
{
|
||||||
|
ShowAxisHelper = true
|
||||||
|
});
|
||||||
scene.Background.Color = Color4.Blue;
|
scene.Background.Color = Color4.Blue;
|
||||||
scene.Camera = new Camera()
|
scene.Camera = new Camera()
|
||||||
{
|
{
|
||||||
RequestedWorldScale = new Vector2(0, 10)
|
|
||||||
};
|
};
|
||||||
|
|
||||||
ItemCollection col = new ItemCollection();
|
|
||||||
|
|
||||||
DrawObject2D textTex = new DrawObject2D()
|
|
||||||
{
|
|
||||||
Texture = font,
|
|
||||||
Material = {Blending = true}
|
|
||||||
};
|
|
||||||
float aspect = font.Height / (float) font.Width;
|
|
||||||
textTex.Transform.Size.Set(font.Width * aspect, font.Height * aspect);
|
|
||||||
textTex.Transform.Position.Set(textTex.Transform.Size.X / 2, 0);
|
|
||||||
|
|
||||||
Vector2 fontSize = new Vector2(font.Width * aspect, font.Height * aspect);
|
|
||||||
|
|
||||||
Material uvMaterial = new Material()
|
Material uvMaterial = new Material()
|
||||||
{
|
{
|
||||||
Tint = new Color4(1f, 0, 0, .5f),
|
Tint = new Color4(1f, 0, 0, .5f),
|
||||||
Blending = true
|
Blending = true,
|
||||||
|
Texture = font
|
||||||
};
|
};
|
||||||
|
|
||||||
col.Transform.Size.Set(1);
|
|
||||||
|
|
||||||
|
|
||||||
DrawText test = new DrawText(font, "Level Completed")
|
DrawText test = new DrawText(font, "Level Completed")
|
||||||
{
|
{
|
||||||
Material = uvMaterial,
|
Material = uvMaterial,
|
||||||
Font = font
|
Origin = TextOrigin.Right
|
||||||
};
|
};
|
||||||
test.Transform.Size.Set(aspect);
|
|
||||||
test.Transform.Position.Set(0, 2);
|
test.Transform.Position.Set(0, 2);
|
||||||
|
test.Transform.Size.Set(.5f);
|
||||||
|
|
||||||
col.Add(test, textTex);
|
scene.Objects.Add(test);
|
||||||
|
|
||||||
scene.Objects.Add(col);
|
|
||||||
|
|
||||||
window.UpdateFrame += WindowOnUpdateFrame;
|
window.UpdateFrame += WindowOnUpdateFrame;
|
||||||
window.RenderFrame += Window_RenderFrame;
|
window.RenderFrame += Window_RenderFrame;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue