alexanderfast / unitytilemap Goto Github PK
View Code? Open in Web Editor NEWA TileMap library for Unity written in C#.
License: MIT License
A TileMap library for Unity written in C#.
License: MIT License
got it kinda working like this but of course there is a better way
if (rotate == TileRotate.Rotate0)
{
if (flip == TileFlip.FlipNone)
{
// 0-1
// /
// 2-3
// rotate 0
uv[index + 0] = ToUv(new Vector2(tr.xMin, tr.yMin), Texture);
uv[index + 1] = ToUv(new Vector2(tr.xMax, tr.yMin), Texture);
uv[index + 2] = ToUv(new Vector2(tr.xMin, tr.yMax), Texture);
uv[index + 3] = ToUv(new Vector2(tr.xMax, tr.yMax), Texture);
}
else if (flip == TileFlip.FlipX)
{
// 1-0
// /
// 3-2
// rotate 0 flip x
uv[index + 1] = ToUv(new Vector2(tr.xMin, tr.yMin), Texture);
uv[index + 0] = ToUv(new Vector2(tr.xMax, tr.yMin), Texture);
uv[index + 3] = ToUv(new Vector2(tr.xMin, tr.yMax), Texture);
uv[index + 2] = ToUv(new Vector2(tr.xMax, tr.yMax), Texture);
}
else if (flip == TileFlip.FlipY)
{
// 2-3
// /
// 0-1
// rotate 0 flip y
uv[index + 2] = ToUv(new Vector2(tr.xMin, tr.yMin), Texture);
uv[index + 3] = ToUv(new Vector2(tr.xMax, tr.yMin), Texture);
uv[index + 0] = ToUv(new Vector2(tr.xMin, tr.yMax), Texture);
uv[index + 1] = ToUv(new Vector2(tr.xMax, tr.yMax), Texture);
}
}
else if (rotate == TileRotate.Rotate90)
{
if (flip == TileFlip.FlipNone)
{
// 2-0
// /
// 3-1
// rotate 90
uv[index + 2] = ToUv(new Vector2(tr.xMin, tr.yMin), Texture);
uv[index + 0] = ToUv(new Vector2(tr.xMax, tr.yMin), Texture);
uv[index + 3] = ToUv(new Vector2(tr.xMin, tr.yMax), Texture);
uv[index + 1] = ToUv(new Vector2(tr.xMax, tr.yMax), Texture);
}
else if (flip == TileFlip.FlipX)
{
// 3-1
// /
// 2-0
// rotate 90 flip x
uv[index + 3] = ToUv(new Vector2(tr.xMin, tr.yMin), Texture);
uv[index + 1] = ToUv(new Vector2(tr.xMax, tr.yMin), Texture);
uv[index + 2] = ToUv(new Vector2(tr.xMin, tr.yMax), Texture);
uv[index + 0] = ToUv(new Vector2(tr.xMax, tr.yMax), Texture);
}
else if (flip == TileFlip.FlipY)
{
// 0-2
// /
// 1-3
// rotate 90 flip y
uv[index + 0] = ToUv(new Vector2(tr.xMin, tr.yMin), Texture);
uv[index + 2] = ToUv(new Vector2(tr.xMax, tr.yMin), Texture);
uv[index + 1] = ToUv(new Vector2(tr.xMin, tr.yMax), Texture);
uv[index + 3] = ToUv(new Vector2(tr.xMax, tr.yMax), Texture);
}
}
else if (rotate == TileRotate.Rotate180)
{
if (flip == TileFlip.FlipNone)
{
// 3-2
// /
// 1-0
// rotate 180
uv[index + 3] = ToUv(new Vector2(tr.xMin, tr.yMin), Texture);
uv[index + 2] = ToUv(new Vector2(tr.xMax, tr.yMin), Texture);
uv[index + 1] = ToUv(new Vector2(tr.xMin, tr.yMax), Texture);
uv[index + 0] = ToUv(new Vector2(tr.xMax, tr.yMax), Texture);
}
else if (flip == TileFlip.FlipX)
{
// 2-3
// /
// 0-1
// rotate 180 flip x
uv[index + 2] = ToUv(new Vector2(tr.xMin, tr.yMin), Texture);
uv[index + 3] = ToUv(new Vector2(tr.xMax, tr.yMin), Texture);
uv[index + 0] = ToUv(new Vector2(tr.xMin, tr.yMax), Texture);
uv[index + 1] = ToUv(new Vector2(tr.xMax, tr.yMax), Texture);
}
else if (flip == TileFlip.FlipY)
{
// 1-0
// /
// 3-2
// rotate 180 flip y
uv[index + 1] = ToUv(new Vector2(tr.xMin, tr.yMin), Texture);
uv[index + 0] = ToUv(new Vector2(tr.xMax, tr.yMin), Texture);
uv[index + 3] = ToUv(new Vector2(tr.xMin, tr.yMax), Texture);
uv[index + 2] = ToUv(new Vector2(tr.xMax, tr.yMax), Texture);
}
}
else if (rotate == TileRotate.Rotate270)
{
if (flip == TileFlip.FlipNone)
{
// 1-3
// /
// 0-2
// rotate 270
uv[index + 1] = ToUv(new Vector2(tr.xMin, tr.yMin), Texture);
uv[index + 3] = ToUv(new Vector2(tr.xMax, tr.yMin), Texture);
uv[index + 0] = ToUv(new Vector2(tr.xMin, tr.yMax), Texture);
uv[index + 2] = ToUv(new Vector2(tr.xMax, tr.yMax), Texture);
}
else if (flip == TileFlip.FlipX)
{
// 0-2
// /
// 1-3
// rotate 270 flip x
uv[index + 0] = ToUv(new Vector2(tr.xMin, tr.yMin), Texture);
uv[index + 2] = ToUv(new Vector2(tr.xMax, tr.yMin), Texture);
uv[index + 1] = ToUv(new Vector2(tr.xMin, tr.yMax), Texture);
uv[index + 3] = ToUv(new Vector2(tr.xMax, tr.yMax), Texture);
}
else if (flip == TileFlip.FlipY)
{
// 3-1
// /
// 2-0
// rotate 270 flip y
uv[index + 3] = ToUv(new Vector2(tr.xMin, tr.yMin), Texture);
uv[index + 1] = ToUv(new Vector2(tr.xMax, tr.yMin), Texture);
uv[index + 2] = ToUv(new Vector2(tr.xMin, tr.yMax), Texture);
uv[index + 0] = ToUv(new Vector2(tr.xMax, tr.yMax), Texture);
}
}
// vertices going counter clockwise // 2--3 // | /| // |/ | // 0--1
// vertices going clockwise // 2--3 // | /| // |/ | // 0--1
can't both be right... but they can both be wrong? :)
thanks
Here is the spritesheet I'm using. (3 pixel offset, 2 pixels between each tile, each tile is 21x21)
Steps to reproduce:
There is a maximum size for a TileMap (depending on MeshMode, max texture size for SingleQuad and max vertex count if QuadGrid). To get around this limitation a ChunkManager class should be added.
It's main responsibility is to automatically and under-the-hood split up the TileMap into several chunks, thus circumventing the above limitations.
It should support three ChunkModes which will most likely be three implementations/classes. Those are (names obviously subject to change):
For use when the above limitations doesn't become a problem, easier to understand and work with for newcomers experimenting with the code.
For use when the above limitations do become a problem and the TileMap needs to be split. The number and size of chunks are known upfront making it somewhat easy to work with.
For use when the TileMap becomes so large that it's impossible to keep it all instantiated at once. There needs be methods of loading and unloading chunks. This also supports the use-case of "infinite worlds". Like MineCraft, the first time a chunk is visited it's generated, when the player walks away it's unloaded, when the player returns it's reloaded (not re-generated).
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.