mirror of
https://github.com/Ellpeck/MLEM.git
synced 2024-11-22 20:58:34 +01:00
fixed DataTextureAtlas frm instruction failing if the original texture has an offset
This commit is contained in:
parent
7d8b14ee8d
commit
c3c8b132da
2 changed files with 13 additions and 10 deletions
|
@ -6,6 +6,7 @@ using System.Text.RegularExpressions;
|
||||||
using Microsoft.Xna.Framework;
|
using Microsoft.Xna.Framework;
|
||||||
using Microsoft.Xna.Framework.Content;
|
using Microsoft.Xna.Framework.Content;
|
||||||
using Microsoft.Xna.Framework.Graphics;
|
using Microsoft.Xna.Framework.Graphics;
|
||||||
|
using MLEM.Extensions;
|
||||||
using MLEM.Misc;
|
using MLEM.Misc;
|
||||||
using MLEM.Textures;
|
using MLEM.Textures;
|
||||||
#if FNA
|
#if FNA
|
||||||
|
@ -148,7 +149,8 @@ namespace MLEM.Data {
|
||||||
customData.Clear();
|
customData.Clear();
|
||||||
foreach (var key in fromRegion.GetDataKeys())
|
foreach (var key in fromRegion.GetDataKeys())
|
||||||
customData.Add(key, fromRegion.GetData<string>(key));
|
customData.Add(key, fromRegion.GetData<string>(key));
|
||||||
location = fromRegion.Area;
|
// our main texture might be a sub-region already, so we have to take that into account
|
||||||
|
location = fromRegion.Area.OffsetCopy(new Point(-texture.U, -texture.V));
|
||||||
pivot = fromRegion.PivotPixels;
|
pivot = fromRegion.PivotPixels;
|
||||||
if (pivot != Vector2.Zero && !pivotRelative)
|
if (pivot != Vector2.Zero && !pivotRelative)
|
||||||
pivot += location.Location.ToVector2();
|
pivot += location.Location.ToVector2();
|
||||||
|
|
|
@ -9,43 +9,44 @@ namespace Tests {
|
||||||
public class TestDataTextureAtlas {
|
public class TestDataTextureAtlas {
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
public void Test() {
|
public void Test([Values(0, 4)] int regionX, [Values(0, 4)] int regionY) {
|
||||||
using var game = TestGame.Create();
|
using var game = TestGame.Create();
|
||||||
using var texture = new Texture2D(game.GraphicsDevice, 1, 1);
|
using var texture = new Texture2D(game.GraphicsDevice, 1, 1);
|
||||||
var atlas = DataTextureAtlas.LoadAtlasData(new TextureRegion(texture), game.RawContent, "Texture.atlas");
|
var region = new TextureRegion(texture, regionX, regionY, 1, 1);
|
||||||
|
var atlas = DataTextureAtlas.LoadAtlasData(region, game.RawContent, "Texture.atlas");
|
||||||
Assert.AreEqual(12, atlas.Regions.Count());
|
Assert.AreEqual(12, atlas.Regions.Count());
|
||||||
|
|
||||||
// no pivot
|
// no pivot
|
||||||
var plant = atlas["Plant"];
|
var plant = atlas["Plant"];
|
||||||
Assert.AreEqual(plant.Area, new Rectangle(96, 0, 16, 32));
|
Assert.AreEqual(plant.Area, new Rectangle(96 + regionX, 0 + regionY, 16, 32));
|
||||||
Assert.AreEqual(plant.PivotPixels, Vector2.Zero);
|
Assert.AreEqual(plant.PivotPixels, Vector2.Zero);
|
||||||
|
|
||||||
// no added offset
|
// no added offset
|
||||||
var table = atlas["LongTableUp"];
|
var table = atlas["LongTableUp"];
|
||||||
Assert.AreEqual(table.Area, new Rectangle(0, 32, 64, 48));
|
Assert.AreEqual(table.Area, new Rectangle(0 + regionX, 32 + regionY, 64, 48));
|
||||||
Assert.AreEqual(table.PivotPixels, new Vector2(16, 48 - 32));
|
Assert.AreEqual(table.PivotPixels, new Vector2(16, 48 - 32));
|
||||||
|
|
||||||
// added offset
|
// added offset
|
||||||
var table2 = atlas["LongTableDown"];
|
var table2 = atlas["LongTableDown"];
|
||||||
Assert.AreEqual(table2.Area, new Rectangle(64, 32, 64, 48));
|
Assert.AreEqual(table2.Area, new Rectangle(64 + regionX, 32 + regionY, 64, 48));
|
||||||
Assert.AreEqual(table2.PivotPixels, new Vector2(112 - 64, 48 - 32));
|
Assert.AreEqual(table2.PivotPixels, new Vector2(112 - 64, 48 - 32));
|
||||||
|
|
||||||
// negative pivot
|
// negative pivot
|
||||||
var negativePivot = atlas["TestRegionNegativePivot"];
|
var negativePivot = atlas["TestRegionNegativePivot"];
|
||||||
Assert.AreEqual(negativePivot.Area, new Rectangle(0, 32, 16, 16));
|
Assert.AreEqual(negativePivot.Area, new Rectangle(0 + regionX, 32 + regionY, 16, 16));
|
||||||
Assert.AreEqual(negativePivot.PivotPixels, new Vector2(-32, 46 - 32));
|
Assert.AreEqual(negativePivot.PivotPixels, new Vector2(-32, 46 - 32));
|
||||||
|
|
||||||
// cpy (pivot pixels should be identical to LongTableUp because they're region-internal)
|
// cpy (pivot pixels should be identical to LongTableUp because they're region-internal)
|
||||||
var copy1 = atlas["Copy1"];
|
var copy1 = atlas["Copy1"];
|
||||||
Assert.AreEqual(copy1.Area, new Rectangle(0 + 16, 32, 64, 48));
|
Assert.AreEqual(copy1.Area, new Rectangle(0 + 16 + regionX, 32 + regionY, 64, 48));
|
||||||
Assert.AreEqual(copy1.PivotPixels, new Vector2(16, 48 - 32));
|
Assert.AreEqual(copy1.PivotPixels, new Vector2(16, 48 - 32));
|
||||||
var copy2 = atlas["Copy2"];
|
var copy2 = atlas["Copy2"];
|
||||||
Assert.AreEqual(copy2.Area, new Rectangle(0 + 32, 32 + 4, 64, 48));
|
Assert.AreEqual(copy2.Area, new Rectangle(0 + 32 + regionX, 32 + 4 + regionY, 64, 48));
|
||||||
Assert.AreEqual(copy2.PivotPixels, new Vector2(16, 48 - 32));
|
Assert.AreEqual(copy2.PivotPixels, new Vector2(16, 48 - 32));
|
||||||
|
|
||||||
// frm
|
// frm
|
||||||
var copy3 = atlas["Copy3"];
|
var copy3 = atlas["Copy3"];
|
||||||
Assert.AreEqual(copy3.Area, new Rectangle(0 + 2, 32 + 4, 64, 48));
|
Assert.AreEqual(copy3.Area, new Rectangle(0 + 2 + regionX, 32 + 4 + regionY, 64, 48));
|
||||||
Assert.AreEqual(copy3.PivotPixels, new Vector2(16, 48 - 32));
|
Assert.AreEqual(copy3.PivotPixels, new Vector2(16, 48 - 32));
|
||||||
|
|
||||||
// data
|
// data
|
||||||
|
|
Loading…
Reference in a new issue