Switch from characters to numerical tile IDs
This commit is contained in:
parent
31c131289c
commit
1f9cd7a110
4 changed files with 128 additions and 137 deletions
202
dist/resources/map/test.json
vendored
202
dist/resources/map/test.json
vendored
|
@ -1,111 +1,111 @@
|
||||||
{
|
{
|
||||||
"tiles": {
|
"tiles": [
|
||||||
"G": "grass",
|
"grass",
|
||||||
"<": "road_left",
|
"road_left",
|
||||||
">": "road_right"
|
"road_right"
|
||||||
},
|
],
|
||||||
"collision": [
|
"collision": [
|
||||||
"00000001100000000000000000000000",
|
[false, false, false, false, false, false, false, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false],
|
||||||
"00000001100000000000000000000000",
|
[false, false, false, false, false, false, false, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false],
|
||||||
"00000001100000000000000000000000",
|
[false, false, false, false, false, false, false, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false],
|
||||||
"00000001100000000000000000000000",
|
[false, false, false, false, false, false, false, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false],
|
||||||
"00000001100000000000000000000000",
|
[false, false, false, false, false, false, false, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false],
|
||||||
"00000001100000000000000000000000",
|
[false, false, false, false, false, false, false, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false],
|
||||||
"00000000000000000000000000000000",
|
[false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false],
|
||||||
"00000001100000000000000000000000",
|
[false, false, false, false, false, false, false, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false],
|
||||||
"00000001100000000000000000000000",
|
[false, false, false, false, false, false, false, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false],
|
||||||
"00000001100000000000000000000000",
|
[false, false, false, false, false, false, false, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false],
|
||||||
"00000001100000000000000000000000",
|
[false, false, false, false, false, false, false, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false],
|
||||||
"00000001100000000000000000000000",
|
[false, false, false, false, false, false, false, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false],
|
||||||
"00000001100000000000000000000000",
|
[false, false, false, false, false, false, false, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false],
|
||||||
"00000001100000000000000000000000",
|
[false, false, false, false, false, false, false, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false],
|
||||||
"00000001100000000000000000000000",
|
[false, false, false, false, false, false, false, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false],
|
||||||
"00000001100000000000000000000000",
|
[false, false, false, false, false, false, false, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false],
|
||||||
"00000001100000000000000000000000",
|
[false, false, false, false, false, false, false, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false],
|
||||||
"00000001100000000000000000000000",
|
[false, false, false, false, false, false, false, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false],
|
||||||
"00000001100000000000000000000000",
|
[false, false, false, false, false, false, false, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false],
|
||||||
"00000001100000000000000000000000",
|
[false, false, false, false, false, false, false, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false],
|
||||||
"00000001100000000000000000000000",
|
[false, false, false, false, false, false, false, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false],
|
||||||
"00000001100000000000000000000000",
|
[false, false, false, false, false, false, false, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false],
|
||||||
"00000001100000000000000000000000",
|
[false, false, false, false, false, false, false, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false],
|
||||||
"00000001100000000000000000000000",
|
[false, false, false, false, false, false, false, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false],
|
||||||
"00000001100000000000000000000000",
|
[false, false, false, false, false, false, false, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false],
|
||||||
"00000001100000000000000000000000",
|
[false, false, false, false, false, false, false, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false],
|
||||||
"00000001100000000000000000000000",
|
[false, false, false, false, false, false, false, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false],
|
||||||
"00000001100000000000000000000000",
|
[false, false, false, false, false, false, false, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false],
|
||||||
"00000001100000000000000000000000",
|
[false, false, false, false, false, false, false, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false],
|
||||||
"00000001100000000000000000000000",
|
[false, false, false, false, false, false, false, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false],
|
||||||
"00000001100000000000000000000000",
|
[false, false, false, false, false, false, false, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false],
|
||||||
"00000001100000000000000000000000"
|
[false, false, false, false, false, false, false, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false]
|
||||||
],
|
],
|
||||||
"layers": [
|
"layers": [
|
||||||
[
|
[
|
||||||
"GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG",
|
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||||
"GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG",
|
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||||
"GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG",
|
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||||
"GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG",
|
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||||
"GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG",
|
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||||
"GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG",
|
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||||
"GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG",
|
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||||
"GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG",
|
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||||
"GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG",
|
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||||
"GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG",
|
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||||
"GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG",
|
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||||
"GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG",
|
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||||
"GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG",
|
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||||
"GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG",
|
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||||
"GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG",
|
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||||
"GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG",
|
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||||
"GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG",
|
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||||
"GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG",
|
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||||
"GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG",
|
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||||
"GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG",
|
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||||
"GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG",
|
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||||
"GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG",
|
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||||
"GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG",
|
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||||
"GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG",
|
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||||
"GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG",
|
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||||
"GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG",
|
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||||
"GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG",
|
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||||
"GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG",
|
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||||
"GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG",
|
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||||
"GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG",
|
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||||
"GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG",
|
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||||
"GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG"
|
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
" <> ",
|
[0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
" <> ",
|
[0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
" <> ",
|
[0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
" <> ",
|
[0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
" <> ",
|
[0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
" <> ",
|
[0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
" ",
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
" <> ",
|
[0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
" <> ",
|
[0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
" <> ",
|
[0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
" <> ",
|
[0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
" <> ",
|
[0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
" <> ",
|
[0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
" <> ",
|
[0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
" <> ",
|
[0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
" <> ",
|
[0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
" <> ",
|
[0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
" <> ",
|
[0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
" <> ",
|
[0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
" <> ",
|
[0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
" <> ",
|
[0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
" <> ",
|
[0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
" <> ",
|
[0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
" <> ",
|
[0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
" <> ",
|
[0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
" <> ",
|
[0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
" <> ",
|
[0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
" <> ",
|
[0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
" <> ",
|
[0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
" <> ",
|
[0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
" <> ",
|
[0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
" <> "
|
[0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,21 +1,21 @@
|
||||||
import {mapFromObject} from '../../util';
|
import {mapFromObject} from '../../util';
|
||||||
|
|
||||||
interface Input {
|
interface Input {
|
||||||
readonly tiles: {[key: string]: string};
|
readonly tiles: string[];
|
||||||
readonly collision: string[];
|
readonly collision: boolean[][];
|
||||||
readonly layers: string[][][];
|
readonly layers: number[][][];
|
||||||
}
|
}
|
||||||
|
|
||||||
export default class MapData {
|
export default class MapData {
|
||||||
public readonly tiles: Map<string, string>;
|
public readonly tiles: string[];
|
||||||
public readonly collision: string[];
|
public readonly collision: boolean[][];
|
||||||
public readonly layers: string[][][];
|
public readonly layers: number[][][];
|
||||||
|
|
||||||
public readonly width: number;
|
public readonly width: number;
|
||||||
public readonly height: number;
|
public readonly height: number;
|
||||||
|
|
||||||
constructor(data: Input) {
|
constructor(data: Input) {
|
||||||
this.tiles = mapFromObject(data.tiles);
|
this.tiles = data.tiles;
|
||||||
this.collision = data.collision;
|
this.collision = data.collision;
|
||||||
this.layers = data.layers;
|
this.layers = data.layers;
|
||||||
|
|
||||||
|
|
|
@ -1,38 +1,38 @@
|
||||||
import MapData from '../model/data/MapData';
|
import MapData from '../model/data/MapData';
|
||||||
import { mapValues, nextPowerOf2 } from '../util';
|
import { nextPowerOf2 } from '../util';
|
||||||
|
|
||||||
import Renderer from './renderer/Renderer';
|
import Renderer from './renderer/Renderer';
|
||||||
import { SpriteCoords, SpriteView, SpriteViewBuilder } from './sprite';
|
import { SpriteCoords, SpriteView, SpriteViewBuilder } from './sprite';
|
||||||
import { loadImages, mkTexture } from './util/image';
|
import { loadImage, mkTexture } from './util/image';
|
||||||
|
|
||||||
interface TileMap {
|
interface Tileset {
|
||||||
texture: WebGLTexture;
|
texture: WebGLTexture;
|
||||||
tiles: Map<string, SpriteCoords>;
|
tiles: SpriteCoords[];
|
||||||
}
|
}
|
||||||
|
|
||||||
function loadTiles(tiles: Map<string, string>): Promise<Map<string, HTMLImageElement>> {
|
function loadTiles(tiles: string[]): Promise<HTMLImageElement[]> {
|
||||||
return loadImages(mapValues((t) => `resources/sprite/tile/${t}.png`, tiles));
|
return Promise.all(tiles.map((t) => loadImage(`resources/sprite/tile/${t}.png`)));
|
||||||
}
|
}
|
||||||
|
|
||||||
function mkTileMap(
|
function mkTileset(
|
||||||
gl: WebGLRenderingContext,
|
gl: WebGLRenderingContext,
|
||||||
tiles: Map<string, HTMLImageElement>,
|
tiles: HTMLImageElement[],
|
||||||
): TileMap {
|
): Tileset {
|
||||||
const tileSize = 32;
|
const tileSize = 32;
|
||||||
|
|
||||||
const canvasDim = nextPowerOf2(Math.sqrt(tiles.size));
|
const canvasDim = nextPowerOf2(Math.sqrt(tiles.length));
|
||||||
const canvasSize = canvasDim * tileSize;
|
const canvasSize = canvasDim * tileSize;
|
||||||
|
|
||||||
const canvas = document.createElement('canvas');
|
const canvas = document.createElement('canvas');
|
||||||
canvas.width = canvas.height = canvasSize;
|
canvas.width = canvas.height = canvasSize;
|
||||||
|
|
||||||
let x = 0, y = 0;
|
let x = 0, y = 0;
|
||||||
const map: Map<string, SpriteCoords> = new Map();
|
const tileCoords: SpriteCoords[] = [];
|
||||||
const ctx = canvas.getContext('2d') as CanvasRenderingContext2D;
|
const ctx = canvas.getContext('2d') as CanvasRenderingContext2D;
|
||||||
|
|
||||||
for (const [k, tile] of tiles) {
|
for (const tile of tiles) {
|
||||||
ctx.drawImage(tile, x * tileSize, y * tileSize);
|
ctx.drawImage(tile, x * tileSize, y * tileSize);
|
||||||
map.set(k, [x / canvasDim, y / canvasDim, (x + 1) / canvasDim, (y + 1) / canvasDim]);
|
tileCoords.push([x / canvasDim, y / canvasDim, (x + 1) / canvasDim, (y + 1) / canvasDim]);
|
||||||
|
|
||||||
x++;
|
x++;
|
||||||
if (x === canvasDim) {
|
if (x === canvasDim) {
|
||||||
|
@ -43,31 +43,28 @@ function mkTileMap(
|
||||||
|
|
||||||
return {
|
return {
|
||||||
texture: mkTexture(gl, canvas),
|
texture: mkTexture(gl, canvas),
|
||||||
tiles: map,
|
tiles: tileCoords,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
function addSprite(builder: SpriteViewBuilder, tileMap: TileMap, x: number, y: number, tile: string) {
|
function addSprite(builder: SpriteViewBuilder, tileset: Tileset, x: number, y: number, tile: number) {
|
||||||
if (tile === ' ')
|
if (tile === 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
const tilePos = tileMap.tiles.get(tile);
|
const tilePos = tileset.tiles[tile - 1];
|
||||||
if (!tilePos)
|
|
||||||
throw new Error('invalid tile specifier in map data');
|
|
||||||
|
|
||||||
builder.addSprite([x, y, x + 1, y + 1], tilePos);
|
builder.addSprite([x, y, x + 1, y + 1], tilePos);
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function loadMap(r: Renderer, map: MapData): Promise<SpriteView> {
|
export async function loadMap(r: Renderer, map: MapData): Promise<SpriteView> {
|
||||||
const tiles = await loadTiles(map.tiles);
|
const tiles = await loadTiles(map.tiles);
|
||||||
const tileMap = mkTileMap(r.getContext(), tiles);
|
const tileset = mkTileset(r.getContext(), tiles);
|
||||||
|
|
||||||
const builder = new SpriteViewBuilder(r, tileMap.texture);
|
const builder = new SpriteViewBuilder(r, tileset.texture);
|
||||||
|
|
||||||
for (const layer of map.layers)
|
for (const layer of map.layers)
|
||||||
for (let x = 0; x < map.width; x++)
|
for (let x = 0; x < map.width; x++)
|
||||||
for (let y = 0; y < map.height; y++)
|
for (let y = 0; y < map.height; y++)
|
||||||
addSprite(builder, tileMap, x, y, layer[y][x]);
|
addSprite(builder, tileset, x, y, layer[y][x]);
|
||||||
|
|
||||||
return builder.build();
|
return builder.build();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
import { mapValuesAsync } from '../../util';
|
|
||||||
|
|
||||||
export function loadImage(url: string): Promise<HTMLImageElement> {
|
export function loadImage(url: string): Promise<HTMLImageElement> {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
const img = new Image();
|
const img = new Image();
|
||||||
|
@ -9,10 +7,6 @@ export function loadImage(url: string): Promise<HTMLImageElement> {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
export function loadImages(urls: Map<string, string>): Promise<Map<string, HTMLImageElement>> {
|
|
||||||
return mapValuesAsync(loadImage, urls);
|
|
||||||
}
|
|
||||||
|
|
||||||
export function mkTexture(gl: WebGLRenderingContext, src: HTMLCanvasElement|HTMLImageElement): WebGLTexture {
|
export function mkTexture(gl: WebGLRenderingContext, src: HTMLCanvasElement|HTMLImageElement): WebGLTexture {
|
||||||
const texture = gl.createTexture();
|
const texture = gl.createTexture();
|
||||||
if (!texture)
|
if (!texture)
|
||||||
|
|
Reference in a new issue