Overhaul tilemap, add building ownership layer
This commit is contained in:
Binary file not shown.
|
Before Width: | Height: | Size: 8.0 KiB After Width: | Height: | Size: 8.1 KiB |
@@ -309,6 +309,67 @@
|
|||||||
"x":0,
|
"x":0,
|
||||||
"y":0
|
"y":0
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"data":[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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 329, 329, 329, 0, 0, 329, 329, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 329, 329, 329, 0, 0, 329, 329, 329, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 329, 329, 329, 0, 0, 329, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 329, 329, 329, 329, 329, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
|
"height":50,
|
||||||
|
"id":32,
|
||||||
|
"name":"BuildingOwnership",
|
||||||
|
"opacity":0.6,
|
||||||
|
"type":"tilelayer",
|
||||||
|
"visible":true,
|
||||||
|
"width":80,
|
||||||
|
"x":0,
|
||||||
|
"y":0
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"draworder":"topdown",
|
"draworder":"topdown",
|
||||||
"id":31,
|
"id":31,
|
||||||
@@ -343,8 +404,8 @@
|
|||||||
"x":0,
|
"x":0,
|
||||||
"y":0
|
"y":0
|
||||||
}],
|
}],
|
||||||
"nextlayerid":32,
|
"nextlayerid":33,
|
||||||
"nextobjectid":19727,
|
"nextobjectid":19728,
|
||||||
"orientation":"orthogonal",
|
"orientation":"orthogonal",
|
||||||
"renderorder":"right-down",
|
"renderorder":"right-down",
|
||||||
"tiledversion":"1.10.2",
|
"tiledversion":"1.10.2",
|
||||||
|
|||||||
@@ -107,14 +107,18 @@ int main(int argc, const char **argv) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
while (!WindowShouldClose()) {
|
while (!WindowShouldClose()) {
|
||||||
|
float dt = GetFrameTime();
|
||||||
if (NK)
|
if (NK)
|
||||||
UpdateNuklear(NK);
|
UpdateNuklear(NK);
|
||||||
if (appDesc.update)
|
if (appDesc.update)
|
||||||
appDesc.update(0.0f, appDesc.userData);
|
appDesc.update(dt, appDesc.userData);
|
||||||
|
|
||||||
|
if (ECS)
|
||||||
|
ecs_progress(ECS, dt);
|
||||||
|
|
||||||
BeginDrawing();
|
BeginDrawing();
|
||||||
if (appDesc.render)
|
if (appDesc.render)
|
||||||
appDesc.render(0.0f, appDesc.userData);
|
appDesc.render(dt, appDesc.userData);
|
||||||
if (NK)
|
if (NK)
|
||||||
DrawNuklear(NK);
|
DrawNuklear(NK);
|
||||||
EndDrawing();
|
EndDrawing();
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
#include "map.h"
|
#include "map.h"
|
||||||
|
|
||||||
|
#include "../core/logger.h"
|
||||||
#include "../core/memory.h"
|
#include "../core/memory.h"
|
||||||
#include "../math/vec2i.h"
|
#include "../math/vec2i.h"
|
||||||
|
|
||||||
@@ -8,6 +9,15 @@
|
|||||||
|
|
||||||
BzTileMap BZ_TILEMAP_INVALID = {.isValid = false};
|
BzTileMap BZ_TILEMAP_INVALID = {.isValid = false};
|
||||||
|
|
||||||
|
bool bzTileLayerClear(BzTileLayer *layer, BzTile *data, i32 dataCount) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
bool bzTileObjectsClear(BzTileObjectGroup *objectGroup, BzTileObject *objects, i32 objectCount) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
BzTileLayerFunc BZ_TILE_LAYER_CLEAR = bzTileLayerClear;
|
||||||
|
BzTileObjectsFunc BZ_TILE_OBJECTS_CLEAR = bzTileObjectsClear;
|
||||||
|
|
||||||
int16_t bzTileLayerGetTile(BzTileLayer *layer, i32 x, i32 y) {
|
int16_t bzTileLayerGetTile(BzTileLayer *layer, i32 x, i32 y) {
|
||||||
return layer->data[layer->width * y + x];
|
return layer->data[layer->width * y + x];
|
||||||
@@ -19,9 +29,9 @@ static void handleTileLayer(BzTileLayer *layer, cute_tiled_layer_t *cuteLayer) {
|
|||||||
layer->data = NULL;
|
layer->data = NULL;
|
||||||
if (layer->dataCount > 0) {
|
if (layer->dataCount > 0) {
|
||||||
layer->data = bzAlloc(layer->dataCount * sizeof(*layer->data));
|
layer->data = bzAlloc(layer->dataCount * sizeof(*layer->data));
|
||||||
layer->minData = layer->maxData = (i16) cuteLayer->data[0];
|
layer->minData = layer->maxData = (BzTile) cuteLayer->data[0];
|
||||||
for (i32 i = 0; i < layer->dataCount; i++) {
|
for (i32 i = 0; i < layer->dataCount; i++) {
|
||||||
layer->data[i] = (i16) cuteLayer->data[i];
|
layer->data[i] = (BzTile) cuteLayer->data[i];
|
||||||
if (layer->data[i] < layer->minData)
|
if (layer->data[i] < layer->minData)
|
||||||
layer->minData = layer->data[i];
|
layer->minData = layer->data[i];
|
||||||
else if (layer->data[i] > layer->maxData)
|
else if (layer->data[i] > layer->maxData)
|
||||||
@@ -41,7 +51,7 @@ static void handleTileLayer(BzTileLayer *layer, cute_tiled_layer_t *cuteLayer) {
|
|||||||
// tileset.c
|
// tileset.c
|
||||||
BzTileShape bzCuteObjectToTileShape(cute_tiled_object_t *object);
|
BzTileShape bzCuteObjectToTileShape(cute_tiled_object_t *object);
|
||||||
|
|
||||||
static void handleTileObjectLayer(BzTileObjectLayer *layer, cute_tiled_layer_t *cuteLayer,
|
static void handleTileObjectLayer(BzTileObjectGroup *layer, cute_tiled_layer_t *cuteLayer,
|
||||||
BzStringHashFunc hashFunc) {
|
BzStringHashFunc hashFunc) {
|
||||||
// Count objects
|
// Count objects
|
||||||
layer->objectCount = 0;
|
layer->objectCount = 0;
|
||||||
@@ -61,12 +71,9 @@ static void handleTileObjectLayer(BzTileObjectLayer *layer, cute_tiled_layer_t *
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void createColliders(BzTileMap *map) {
|
static void updateColliders(BzTileMap *map, i32 startX, i32 startY, i32 endX, i32 endY) {
|
||||||
map->collidersCount = map->width * map->height;
|
BZ_ASSERT(startX >= 0 && endX <= map->width &&
|
||||||
map->colliderMap = bzAlloc(map->collidersCount * sizeof(*map->colliderMap));
|
startY >= 0 && endY <= map->height);
|
||||||
for (i32 i = 0; i < map->collidersCount; i++) {
|
|
||||||
map->colliderMap[i] = (BzTileCollider) {{BZ_TILE_SHAPE_NONE}};
|
|
||||||
}
|
|
||||||
|
|
||||||
// Top-most layer takes priority
|
// Top-most layer takes priority
|
||||||
for (i32 i = map->layerCount - 1; i >= 0; i--) {
|
for (i32 i = map->layerCount - 1; i >= 0; i--) {
|
||||||
@@ -74,8 +81,8 @@ static void createColliders(BzTileMap *map) {
|
|||||||
if (!layer->data) continue;
|
if (!layer->data) continue;
|
||||||
if (layer->tilesetIdx == -1) continue;
|
if (layer->tilesetIdx == -1) continue;
|
||||||
BzTileset *tileset = map->tilesets + layer->tilesetIdx;
|
BzTileset *tileset = map->tilesets + layer->tilesetIdx;
|
||||||
for (i32 y = 0; y < map->height; y++) {
|
for (i32 y = startY; y < endY; y++) {
|
||||||
for (i32 x = 0; x < map->width; x++) {
|
for (i32 x = startX; x < endX; x++) {
|
||||||
i32 tile = bzTileLayerGetTile(layer, x, y);
|
i32 tile = bzTileLayerGetTile(layer, x, y);
|
||||||
BzTileShape tilesetShape = bzTilesetGetTileCollider(tileset, tile);
|
BzTileShape tilesetShape = bzTilesetGetTileCollider(tileset, tile);
|
||||||
if (tilesetShape.type == BZ_TILE_SHAPE_NONE ||
|
if (tilesetShape.type == BZ_TILE_SHAPE_NONE ||
|
||||||
@@ -99,6 +106,16 @@ static void createColliders(BzTileMap *map) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void createColliders(BzTileMap *map) {
|
||||||
|
map->collidersCount = map->width * map->height;
|
||||||
|
map->colliderMap = bzAlloc(map->collidersCount * sizeof(*map->colliderMap));
|
||||||
|
for (i32 i = 0; i < map->collidersCount; i++) {
|
||||||
|
map->colliderMap[i] = (BzTileCollider) {{BZ_TILE_SHAPE_NONE}};
|
||||||
|
}
|
||||||
|
|
||||||
|
updateColliders(map, 0, 0, map->width, map->height);
|
||||||
|
}
|
||||||
|
|
||||||
BzTileMap bzTileMapCreate(const BzTileMapDesc *desc) {
|
BzTileMap bzTileMapCreate(const BzTileMapDesc *desc) {
|
||||||
BzTileMap map = {};
|
BzTileMap map = {};
|
||||||
// Auto detect tileset count.
|
// Auto detect tileset count.
|
||||||
@@ -123,13 +140,13 @@ BzTileMap bzTileMapCreate(const BzTileMapDesc *desc) {
|
|||||||
cute_tiled_layer_t *cuteLayer = cuteMap->layers;
|
cute_tiled_layer_t *cuteLayer = cuteMap->layers;
|
||||||
while (cuteLayer) {
|
while (cuteLayer) {
|
||||||
BZ_ASSERT(map.layerCount < BZ_MAX_MAP_LAYERS);
|
BZ_ASSERT(map.layerCount < BZ_MAX_MAP_LAYERS);
|
||||||
BZ_ASSERT(map.objectLayerCount < BZ_MAX_MAP_LAYERS);
|
BZ_ASSERT(map.objectGroupCount < BZ_MAX_MAP_LAYERS);
|
||||||
|
|
||||||
// Find slot
|
// Find slot
|
||||||
i32 slot = -1;
|
i32 slot = -1;
|
||||||
for (i32 i = 0; i < BZ_MAX_MAP_LAYERS; i++) {
|
for (i32 i = 0; i < BZ_MAX_MAP_LAYERS; i++) {
|
||||||
const BzTileLayerDesc *layerDesc = desc->layers + i;
|
const BzTileLayerDesc *layerDesc = desc->layers + i;
|
||||||
const BzTileObjectsDesc *objectsDesc = desc->objectLayers + i;
|
const BzTileObjectsDesc *objectsDesc = desc->objectGroups + i;
|
||||||
if (layerDesc->name && strcmp(layerDesc->name, cuteLayer->name.ptr) == 0 ||
|
if (layerDesc->name && strcmp(layerDesc->name, cuteLayer->name.ptr) == 0 ||
|
||||||
objectsDesc->name && strcmp(objectsDesc->name, cuteLayer->name.ptr) == 0) {
|
objectsDesc->name && strcmp(objectsDesc->name, cuteLayer->name.ptr) == 0) {
|
||||||
slot = i;
|
slot = i;
|
||||||
@@ -139,33 +156,25 @@ BzTileMap bzTileMapCreate(const BzTileMapDesc *desc) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (slot == -1) {
|
if (slot == -1) {
|
||||||
|
bzLogWarning("Dangling layer: %s", cuteLayer->name.ptr);
|
||||||
cuteLayer = cuteLayer->next;
|
cuteLayer = cuteLayer->next;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cuteLayer->data) {
|
if (cuteLayer->data) {
|
||||||
BzTileLayer *layer = map.layers + slot;
|
BzTileLayer *layer = map.layers + slot;
|
||||||
const BzTileLayerDesc *layerDesc = desc->layers + slot;
|
layer->desc = desc->layers[slot];
|
||||||
handleTileLayer(layer, cuteLayer);
|
handleTileLayer(layer, cuteLayer);
|
||||||
if (layerDesc->handler && !layerDesc->handler(layer)) {
|
layer->hasOwnership = true;
|
||||||
bzFree(layer->data);
|
|
||||||
layer->data = NULL;
|
|
||||||
layer->dataCount = 0;
|
|
||||||
}
|
|
||||||
map.layerCount++;
|
map.layerCount++;
|
||||||
} else {
|
} else {
|
||||||
BzTileObjectLayer *objectLayer = map.objectLayers + slot;
|
BzTileObjectGroup *objectGroup = map.objectGroups + slot;
|
||||||
const BzTileObjectsDesc *objectLayerDesc = desc->objectLayers + slot;
|
objectGroup->desc = desc->objectGroups[slot];
|
||||||
BzStringHashFunc *hashFunc = objectLayerDesc->hashFunc;
|
if (!objectGroup->desc.hashFunc)
|
||||||
if (!hashFunc)
|
objectGroup->desc.hashFunc = bzStringDefaultHash;
|
||||||
hashFunc = bzStringDefaultHash;
|
handleTileObjectLayer(objectGroup, cuteLayer, objectGroup->desc.hashFunc);
|
||||||
handleTileObjectLayer(objectLayer, cuteLayer, hashFunc);
|
|
||||||
if (objectLayerDesc->handler && !objectLayerDesc->handler(objectLayer)) {
|
map.objectGroupCount++;
|
||||||
bzFree(objectLayer->objects);
|
|
||||||
objectLayer->objects = NULL;
|
|
||||||
objectLayer->objectCount = 0;
|
|
||||||
}
|
|
||||||
map.objectLayerCount++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
cuteLayer = cuteLayer->next;
|
cuteLayer = cuteLayer->next;
|
||||||
@@ -197,7 +206,6 @@ BzTileMap bzTileMapCreate(const BzTileMapDesc *desc) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
cute_tiled_free_map(cuteMap);
|
cute_tiled_free_map(cuteMap);
|
||||||
|
|
||||||
createColliders(&map);
|
createColliders(&map);
|
||||||
@@ -206,28 +214,62 @@ BzTileMap bzTileMapCreate(const BzTileMapDesc *desc) {
|
|||||||
return map;
|
return map;
|
||||||
}
|
}
|
||||||
|
|
||||||
void bzTileMapDestroy(BzTileMap *tilemap) {
|
void bzTileMapDestroy(BzTileMap *map) {
|
||||||
for (i32 i = 0; i < tilemap->layerCount; i++) {
|
for (i32 i = 0; i < map->layerCount; i++) {
|
||||||
BzTileLayer *layer = tilemap->layers + i;
|
BzTileLayer *layer = map->layers + i;
|
||||||
if (layer->data) {
|
if (layer->hasOwnership && layer->data) {
|
||||||
bzFree(layer->data);
|
bzFree(layer->data);
|
||||||
layer->data = NULL;
|
layer->data = NULL;
|
||||||
layer->dataCount = 0;
|
layer->dataCount = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (i32 i = 0; i < tilemap->objectLayerCount; i++) {
|
for (i32 i = 0; i < map->objectGroupCount; i++) {
|
||||||
BzTileObjectLayer *objectLayer = tilemap->objectLayers + i;
|
BzTileObjectGroup *objectLayer = map->objectGroups + i;
|
||||||
if (objectLayer->objects) {
|
if (objectLayer->hasOwnership && objectLayer->objects) {
|
||||||
bzFree(objectLayer->objects);
|
bzFree(objectLayer->objects);
|
||||||
objectLayer->objects = NULL;
|
objectLayer->objects = NULL;
|
||||||
objectLayer->objectCount = 0;
|
objectLayer->objectCount = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bzFree(tilemap->colliderMap);
|
bzFree(map->colliderMap);
|
||||||
tilemap->collidersCount = 0;
|
map->collidersCount = 0;
|
||||||
|
|
||||||
*tilemap = BZ_TILEMAP_INVALID;
|
*map = BZ_TILEMAP_INVALID;
|
||||||
|
}
|
||||||
|
|
||||||
|
void bzTileMapOverrideLayer(BzTileMap *map, i32 slotID, BzTileLayerFunc func) {
|
||||||
|
BZ_ASSERT(slotID >= 0 && slotID < map->layerCount);
|
||||||
|
BzTileLayer *layer = map->layers + slotID;
|
||||||
|
i32 dataCount = layer->dataCount;
|
||||||
|
BzTile *data = layer->data;
|
||||||
|
if (func(layer, data, dataCount)) {
|
||||||
|
if (!layer->hasOwnership) return;
|
||||||
|
bzFree(layer->data);
|
||||||
|
if (layer->data == data) {
|
||||||
|
layer->data = NULL;
|
||||||
|
layer->dataCount = 0;
|
||||||
|
}
|
||||||
|
layer->hasOwnership = false;
|
||||||
|
} else {
|
||||||
|
BZ_ASSERT(data == layer->data && dataCount == layer->dataCount);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void bzTileMapOverrideObjectGroup(BzTileMap *map, i32 slotID, BzTileObjectsFunc func) {
|
||||||
|
BZ_ASSERT(slotID >= 0 && slotID < map->objectGroupCount);
|
||||||
|
BzTileObjectGroup *objectGroup = map->objectGroups + slotID;
|
||||||
|
BzTileObject *objects = objectGroup->objects;
|
||||||
|
i32 objectCount = objectGroup->objectCount;
|
||||||
|
if (func(objectGroup, objects, objectCount)) {
|
||||||
|
bzFree(objectGroup->objects);
|
||||||
|
if (objectGroup->objects == objects) {
|
||||||
|
objectGroup->objects = NULL;
|
||||||
|
objectGroup->objectCount = 0;
|
||||||
|
}
|
||||||
|
objectGroup->hasOwnership = false;
|
||||||
|
} else {
|
||||||
|
BZ_ASSERT(objects == objectGroup->objects && objectCount == objectGroup->objectCount);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -238,7 +280,7 @@ static void drawLayer(BzTileLayer *layer, BzTileset *tileset) {
|
|||||||
|
|
||||||
for (i32 y = 0; y < layer->height; y++) {
|
for (i32 y = 0; y < layer->height; y++) {
|
||||||
for (i32 x = 0; x < layer->width; x++) {
|
for (i32 x = 0; x < layer->width; x++) {
|
||||||
i16 tile = bzTileLayerGetTile(layer, x, y);
|
BzTile tile = bzTileLayerGetTile(layer, x, y);
|
||||||
if (tile - tileset->startID != -1) {
|
if (tile - tileset->startID != -1) {
|
||||||
Rectangle rec = bzTilesetGetTileRegion(tileset, tile);
|
Rectangle rec = bzTilesetGetTileRegion(tileset, tile);
|
||||||
DrawTextureRec(tileset->tiles, rec, drawPos, WHITE);
|
DrawTextureRec(tileset->tiles, rec, drawPos, WHITE);
|
||||||
@@ -251,7 +293,7 @@ static void drawLayer(BzTileLayer *layer, BzTileset *tileset) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void drawObjectLayer(BzTileObjectLayer *objectLayer) {
|
static void drawObjectLayer(BzTileObjectGroup *objectLayer) {
|
||||||
Color color = ORANGE;
|
Color color = ORANGE;
|
||||||
for (int i = 0; i < objectLayer->objectCount; i++) {
|
for (int i = 0; i < objectLayer->objectCount; i++) {
|
||||||
BzTileShape shape = objectLayer->objects[i].shape;
|
BzTileShape shape = objectLayer->objects[i].shape;
|
||||||
@@ -282,8 +324,8 @@ void bzTileMapDraw(BzTileMap *map) {
|
|||||||
drawLayer(map->layers + i, tileset);
|
drawLayer(map->layers + i, tileset);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i32 i = 0; i < map->objectLayerCount; i++) {
|
for (i32 i = 0; i < map->objectGroupCount; i++) {
|
||||||
BzTileObjectLayer *objectLayer = map->objectLayers + i;
|
BzTileObjectGroup *objectLayer = map->objectGroups + i;
|
||||||
if (!objectLayer->objects) continue;
|
if (!objectLayer->objects) continue;
|
||||||
drawObjectLayer(objectLayer);
|
drawObjectLayer(objectLayer);
|
||||||
}
|
}
|
||||||
@@ -324,6 +366,13 @@ void bzTileMapDrawColliders(BzTileMap *map) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void bzTileMapUpdateCollider(BzTileMap *map, i32 x, i32 y) {
|
||||||
|
i32 idx = y * map->width + x;
|
||||||
|
BZ_ASSERT(idx >= 0 && idx < map->collidersCount);
|
||||||
|
map->colliderMap[idx] = (BzTileCollider){};
|
||||||
|
updateColliders(map, x, y, x + 1, y + 1);
|
||||||
|
}
|
||||||
|
|
||||||
BzTileCollider bzTileMapGetCollider(BzTileMap *map, i32 x, i32 y) {
|
BzTileCollider bzTileMapGetCollider(BzTileMap *map, i32 x, i32 y) {
|
||||||
i32 idx = y * map->width + x;
|
i32 idx = y * map->width + x;
|
||||||
if (idx < 0 || idx >= map->collidersCount) {
|
if (idx < 0 || idx >= map->collidersCount) {
|
||||||
|
|||||||
@@ -8,14 +8,38 @@
|
|||||||
#define BZ_MAX_MAP_TILESETS 8
|
#define BZ_MAX_MAP_TILESETS 8
|
||||||
#define BZ_MAP_COLLIDER_DEPTH 2
|
#define BZ_MAP_COLLIDER_DEPTH 2
|
||||||
|
|
||||||
|
typedef struct BzTileLayer BzTileLayer;
|
||||||
|
typedef struct BzTileObject BzTileObject;
|
||||||
|
typedef struct BzTileObjectGroup BzTileObjectGroup;
|
||||||
|
|
||||||
|
typedef void (*BzTileLayerRenderFunc)(BzTileLayer *layer);
|
||||||
|
typedef void (*BzTileObjectGroupRenderFunc)(BzTileObjectGroup *objectGroup);
|
||||||
|
|
||||||
|
typedef struct BzTileLayerDesc {
|
||||||
|
const char *name; // Matches map layer names
|
||||||
|
BzTileLayerRenderFunc renderer;
|
||||||
|
} BzTileLayerDesc;
|
||||||
|
typedef struct BzTileObjectsDesc {
|
||||||
|
const char *name; // Matches map layer names
|
||||||
|
BzTileObjectGroupRenderFunc renderer;
|
||||||
|
BzStringHashFunc hashFunc;
|
||||||
|
} BzTileObjectsDesc;
|
||||||
|
|
||||||
|
typedef struct BzTileMapDesc {
|
||||||
|
const char *path;
|
||||||
|
BzTileset tilesets[BZ_MAX_MAP_TILESETS];
|
||||||
|
|
||||||
|
BzTileLayerDesc layers[BZ_MAX_MAP_LAYERS];
|
||||||
|
BzTileObjectsDesc objectGroups[BZ_MAX_MAP_LAYERS];
|
||||||
|
} BzTileMapDesc;
|
||||||
|
|
||||||
typedef struct BzTileLayer {
|
typedef struct BzTileLayer {
|
||||||
i32 id;
|
i32 id;
|
||||||
|
|
||||||
int16_t *data;
|
BzTile *data;
|
||||||
i32 dataCount;
|
i32 dataCount;
|
||||||
i16 minData;
|
BzTile minData;
|
||||||
i16 maxData;
|
BzTile maxData;
|
||||||
|
|
||||||
i32 width;
|
i32 width;
|
||||||
i32 height;
|
i32 height;
|
||||||
@@ -26,47 +50,23 @@ typedef struct BzTileLayer {
|
|||||||
|
|
||||||
i32 tilesetIdx;
|
i32 tilesetIdx;
|
||||||
|
|
||||||
void *userData;
|
BzTileLayerDesc desc;
|
||||||
|
bool hasOwnership;
|
||||||
} BzTileLayer;
|
} BzTileLayer;
|
||||||
|
|
||||||
typedef struct BzTileObject {
|
typedef struct BzTileObject {
|
||||||
u32 id;
|
u32 id;
|
||||||
BzTileShape shape;
|
BzTileShape shape;
|
||||||
|
|
||||||
void *userData;
|
|
||||||
} BzTileObject;
|
} BzTileObject;
|
||||||
|
|
||||||
typedef struct BzTileObjectLayer {
|
typedef struct BzTileObjectGroup {
|
||||||
BzTileObject *objects;
|
BzTileObject *objects;
|
||||||
i32 objectCount;
|
i32 objectCount;
|
||||||
} BzTileObjectLayer;
|
|
||||||
|
|
||||||
// Return true, if you want to keep data allocated
|
BzTileObjectsDesc desc;
|
||||||
typedef bool BzTileLayerFunc(BzTileLayer *layer);
|
bool hasOwnership;
|
||||||
typedef bool BzTileObjectsFunc(BzTileObjectLayer *objectLayer);
|
} BzTileObjectGroup;
|
||||||
|
|
||||||
typedef void BzTileLayerRenderFunc(BzTileLayer *layer);
|
|
||||||
typedef void BzTileObjectsRenderFunc(BzTileObjectLayer *objectLayer);
|
|
||||||
|
|
||||||
typedef struct BzTileLayerDesc {
|
|
||||||
const char *name; // Matches map layer names
|
|
||||||
BzTileLayerFunc *handler;
|
|
||||||
BzTileLayerRenderFunc *renderer;
|
|
||||||
} BzTileLayerDesc;
|
|
||||||
typedef struct BzTileObjectsDesc {
|
|
||||||
const char *name; // Matches map layer names
|
|
||||||
BzTileObjectsFunc *handler;
|
|
||||||
BzTileObjectsRenderFunc *renderer;
|
|
||||||
BzStringHashFunc *hashFunc;
|
|
||||||
} BzTileObjectsDesc;
|
|
||||||
|
|
||||||
typedef struct BzTileMapDesc {
|
|
||||||
const char *path;
|
|
||||||
BzTileset tilesets[BZ_MAX_MAP_TILESETS];
|
|
||||||
|
|
||||||
BzTileLayerDesc layers[BZ_MAX_MAP_LAYERS];
|
|
||||||
BzTileObjectsDesc objectLayers[BZ_MAX_MAP_LAYERS];
|
|
||||||
} BzTileMapDesc;
|
|
||||||
|
|
||||||
typedef struct BzTileCollider {
|
typedef struct BzTileCollider {
|
||||||
BzTileShape shapes[BZ_MAP_COLLIDER_DEPTH];
|
BzTileShape shapes[BZ_MAP_COLLIDER_DEPTH];
|
||||||
@@ -86,8 +86,8 @@ typedef struct BzTileMap {
|
|||||||
BzTileLayer layers[BZ_MAX_MAP_LAYERS];
|
BzTileLayer layers[BZ_MAX_MAP_LAYERS];
|
||||||
i32 layerCount;
|
i32 layerCount;
|
||||||
|
|
||||||
BzTileObjectLayer objectLayers[BZ_MAX_MAP_LAYERS];
|
BzTileObjectGroup objectGroups[BZ_MAX_MAP_LAYERS];
|
||||||
i32 objectLayerCount;
|
i32 objectGroupCount;
|
||||||
|
|
||||||
BzTileset tilesets[BZ_MAX_MAP_TILESETS];
|
BzTileset tilesets[BZ_MAX_MAP_TILESETS];
|
||||||
i32 tilesetCount;
|
i32 tilesetCount;
|
||||||
@@ -97,14 +97,25 @@ typedef struct BzTileMap {
|
|||||||
|
|
||||||
extern BzTileMap BZ_TILEMAP_INVALID;
|
extern BzTileMap BZ_TILEMAP_INVALID;
|
||||||
|
|
||||||
|
// Return true, if you want to override data (you are responsible for cleanup, if you override)
|
||||||
|
typedef bool (*BzTileLayerFunc)(BzTileLayer *layer, BzTile *data, i32 dataCount);
|
||||||
|
typedef bool (*BzTileObjectsFunc)(BzTileObjectGroup *objectGroup, BzTileObject *objects, i32 objectsCount);
|
||||||
|
|
||||||
|
extern BzTileLayerFunc BZ_TILE_LAYER_CLEAR;
|
||||||
|
extern BzTileObjectsFunc BZ_TILE_OBJECTS_CLEAR;
|
||||||
|
|
||||||
int16_t bzTileLayerGetTile(BzTileLayer *layer, i32 x, i32 y);
|
int16_t bzTileLayerGetTile(BzTileLayer *layer, i32 x, i32 y);
|
||||||
|
|
||||||
BzTileMap bzTileMapCreate(const BzTileMapDesc *desc);
|
BzTileMap bzTileMapCreate(const BzTileMapDesc *desc);
|
||||||
void bzTileMapDestroy(BzTileMap *tilemap);
|
void bzTileMapDestroy(BzTileMap *map);
|
||||||
|
|
||||||
|
void bzTileMapOverrideLayer(BzTileMap *map, i32 slotID, BzTileLayerFunc func);
|
||||||
|
void bzTileMapOverrideObjectGroup(BzTileMap *map, i32 slotID, BzTileObjectsFunc func);
|
||||||
|
|
||||||
void bzTileMapDraw(BzTileMap *map);
|
void bzTileMapDraw(BzTileMap *map);
|
||||||
void bzTileMapDrawColliders(BzTileMap *map);
|
void bzTileMapDrawColliders(BzTileMap *map);
|
||||||
BzTileCollider bzTileMapGetCollider(BzTileMap *map, i32 x, i32 y);
|
BzTileCollider bzTileMapGetCollider(BzTileMap *map, i32 x, i32 y);
|
||||||
|
void bzTileMapUpdateCollider(BzTileMap *map, i32 x, i32 y);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -78,7 +78,7 @@ BzTileset bzTilesetCreate(const BzTilesetDesc *desc) {
|
|||||||
return tileset;
|
return tileset;
|
||||||
}
|
}
|
||||||
|
|
||||||
Rectangle bzTilesetGetTileRegion(BzTileset *tileset, int tileID) {
|
Rectangle bzTilesetGetTileRegion(BzTileset *tileset, BzTile tileID) {
|
||||||
tileID = tileID - tileset->startID;
|
tileID = tileID - tileset->startID;
|
||||||
if (tileID < 0 || tileID >= tileset->tileCount) {
|
if (tileID < 0 || tileID >= tileset->tileCount) {
|
||||||
return (Rectangle){};
|
return (Rectangle){};
|
||||||
@@ -88,7 +88,7 @@ Rectangle bzTilesetGetTileRegion(BzTileset *tileset, int tileID) {
|
|||||||
return (Rectangle) {posX * tileset->tileWidth, posY * tileset->tileHeight,
|
return (Rectangle) {posX * tileset->tileWidth, posY * tileset->tileHeight,
|
||||||
tileset->tileWidth, tileset->tileHeight};
|
tileset->tileWidth, tileset->tileHeight};
|
||||||
}
|
}
|
||||||
BzTileShape bzTilesetGetTileCollider(BzTileset *tileset, int tileID) {
|
BzTileShape bzTilesetGetTileCollider(BzTileset *tileset, BzTile tileID) {
|
||||||
tileID = tileID - tileset->startID;
|
tileID = tileID - tileset->startID;
|
||||||
|
|
||||||
if (tileID < 0 || tileID >= tileset->tileCount) {
|
if (tileID < 0 || tileID >= tileset->tileCount) {
|
||||||
|
|||||||
@@ -5,6 +5,8 @@
|
|||||||
|
|
||||||
#include <raylib.h>
|
#include <raylib.h>
|
||||||
|
|
||||||
|
typedef i16 BzTile;
|
||||||
|
|
||||||
typedef struct BzTilesetDesc {
|
typedef struct BzTilesetDesc {
|
||||||
const char *path;
|
const char *path;
|
||||||
const char *texturePath;
|
const char *texturePath;
|
||||||
@@ -44,8 +46,8 @@ extern BzTileset BZ_TILESET_INVALID;
|
|||||||
|
|
||||||
BzTileset bzTilesetCreate(const BzTilesetDesc *desc);
|
BzTileset bzTilesetCreate(const BzTilesetDesc *desc);
|
||||||
|
|
||||||
Rectangle bzTilesetGetTileRegion(BzTileset *tileset, int tileID);
|
Rectangle bzTilesetGetTileRegion(BzTileset *tileset, BzTile tileID);
|
||||||
BzTileShape bzTilesetGetTileCollider(BzTileset *tileset, int tileID);
|
BzTileShape bzTilesetGetTileCollider(BzTileset *tileset, BzTile tileID);
|
||||||
|
|
||||||
void bzTilesetDestroy(BzTileset *tileset);
|
void bzTilesetDestroy(BzTileset *tileset);
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
#include "../defines.h"
|
#include "../defines.h"
|
||||||
|
|
||||||
typedef u32 BzStringHashFunc(const char *str);
|
typedef u32 (*BzStringHashFunc)(const char *str);
|
||||||
|
|
||||||
// djb2 hash algorithm
|
// djb2 hash algorithm
|
||||||
// From: https://stackoverflow.com/questions/7666509/hash-function-for-string
|
// From: https://stackoverflow.com/questions/7666509/hash-function-for-string
|
||||||
|
|||||||
11
game/components.h
Normal file
11
game/components.h
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
#ifndef PIXELDEFENSE_COMPONENTS_H
|
||||||
|
#define PIXELDEFENSE_COMPONENTS_H
|
||||||
|
|
||||||
|
#include <breeze.h>
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
f32 x;
|
||||||
|
f32 y;
|
||||||
|
} Position, Velocity;
|
||||||
|
|
||||||
|
#endif //PIXELDEFENSE_COMPONENTS_H
|
||||||
51
game/main.c
51
game/main.c
@@ -15,7 +15,7 @@ typedef struct Game {
|
|||||||
|
|
||||||
static Game GAME = {};
|
static Game GAME = {};
|
||||||
|
|
||||||
bool handleGameObjects(BzTileObjectLayer *objectLayer) {
|
bool handleGameObjects(BzTileObjectGroup *objectLayer, BzTileObject *objects, i32 objectCount) {
|
||||||
for (i32 i = 0; i < objectLayer->objectCount; i++) {
|
for (i32 i = 0; i < objectLayer->objectCount; i++) {
|
||||||
BzTileObject object = objectLayer->objects[i];
|
BzTileObject object = objectLayer->objects[i];
|
||||||
if (bzStringDefaultHash("camera") == object.id) {
|
if (bzStringDefaultHash("camera") == object.id) {
|
||||||
@@ -24,11 +24,19 @@ bool handleGameObjects(BzTileObjectLayer *objectLayer) {
|
|||||||
GAME.camera.target.y = object.shape.y;
|
GAME.camera.target.y = object.shape.y;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool handleBuildLayer(BzTileLayer *layer) {
|
bool handleBuildLayer(BzTileLayer *layer, BzTile *data, i32 dataCount) {
|
||||||
return false;
|
for (i32 y = 0; y < layer->height; y++) {
|
||||||
|
for (i32 x = 0; x < layer->width; x++) {
|
||||||
|
BzTile *tile = data + y * layer->width + x;
|
||||||
|
if (*tile == 0) continue;
|
||||||
|
*tile = 0;
|
||||||
|
bzTileMapUpdateCollider(&GAME.map, x, y);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool canBuildOn(BzTileMap *map, i32 tileX, i32 tileY, i32 sizeX, i32 sizeY) {
|
bool canBuildOn(BzTileMap *map, i32 tileX, i32 tileY, i32 sizeX, i32 sizeY) {
|
||||||
@@ -82,6 +90,20 @@ bool canBuildOn(BzTileMap *map, i32 tileX, i32 tileY, i32 sizeX, i32 sizeY) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
typedef enum Layers {
|
||||||
|
LAYER_TERRAIN = 0,
|
||||||
|
LAYER_FOLIAGE,
|
||||||
|
LAYER_TREES,
|
||||||
|
LAYER_TREES2,
|
||||||
|
LAYER_BUILDINGS,
|
||||||
|
LAYER_BUILDING_OWNER,
|
||||||
|
} Layers;
|
||||||
|
|
||||||
|
typedef enum ObjectGroup {
|
||||||
|
OBJECTS_GAME = 0,
|
||||||
|
OBJECTS_ENTITIES,
|
||||||
|
} ObjectGroup;
|
||||||
|
|
||||||
bool init(Game *game) {
|
bool init(Game *game) {
|
||||||
int screenWidth = 1280;
|
int screenWidth = 1280;
|
||||||
int screenHeight = 720;
|
int screenHeight = 720;
|
||||||
@@ -106,16 +128,23 @@ bool init(Game *game) {
|
|||||||
.tilesets[0]=game->terrainTileset,
|
.tilesets[0]=game->terrainTileset,
|
||||||
.tilesets[1]=game->buildingsTileset,
|
.tilesets[1]=game->buildingsTileset,
|
||||||
|
|
||||||
.layers[0]=(BzTileLayerDesc) {"Terrain", NULL},
|
.layers[LAYER_TERRAIN]=(BzTileLayerDesc) {"Terrain"},
|
||||||
.layers[1]=(BzTileLayerDesc) {"Foliage", NULL},
|
.layers[LAYER_FOLIAGE]=(BzTileLayerDesc) {"Foliage"},
|
||||||
.layers[2]=(BzTileLayerDesc) {"Trees", NULL},
|
.layers[LAYER_TREES]=(BzTileLayerDesc) {"Trees"},
|
||||||
.layers[3]=(BzTileLayerDesc) {"TreesS", NULL},
|
.layers[LAYER_TREES2]=(BzTileLayerDesc) {"TreesS"},
|
||||||
.layers[4]=(BzTileLayerDesc) {"Buildings", handleBuildLayer},
|
.layers[LAYER_BUILDINGS]=(BzTileLayerDesc) {"Buildings"},
|
||||||
|
.layers[LAYER_BUILDING_OWNER]=(BzTileLayerDesc) {"BuildingOwnership"},
|
||||||
|
|
||||||
.objectLayers[0]=(BzTileObjectsDesc) {"Game", handleGameObjects},
|
.objectGroups[OBJECTS_GAME]=(BzTileObjectsDesc) {"Game"},
|
||||||
.objectLayers[1]=(BzTileObjectsDesc ) {"Entities", NULL}
|
.objectGroups[OBJECTS_ENTITIES]=(BzTileObjectsDesc ) {"Entities"}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
bzTileMapOverrideLayer(&game->map, LAYER_BUILDINGS, handleBuildLayer);
|
||||||
|
bzTileMapOverrideLayer(&game->map, LAYER_BUILDING_OWNER, BZ_TILE_LAYER_CLEAR);
|
||||||
|
|
||||||
|
bzTileMapOverrideObjectGroup(&game->map, OBJECTS_GAME, handleGameObjects);
|
||||||
|
bzTileMapOverrideObjectGroup(&game->map, OBJECTS_ENTITIES, BZ_TILE_OBJECTS_CLEAR);
|
||||||
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
|
Before Width: | Height: | Size: 8.0 KiB After Width: | Height: | Size: 8.1 KiB |
BIN
rawAssets/buildings/owner_0.kra
Normal file
BIN
rawAssets/buildings/owner_0.kra
Normal file
Binary file not shown.
BIN
rawAssets/buildings/owner_1.kra
Normal file
BIN
rawAssets/buildings/owner_1.kra
Normal file
Binary file not shown.
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<map version="1.10" tiledversion="1.10.2" orientation="orthogonal" renderorder="right-down" width="80" height="50" tilewidth="16" tileheight="16" infinite="0" nextlayerid="32" nextobjectid="19728">
|
<map version="1.10" tiledversion="1.10.2" orientation="orthogonal" renderorder="right-down" width="80" height="50" tilewidth="16" tileheight="16" infinite="0" nextlayerid="33" nextobjectid="19728">
|
||||||
<editorsettings>
|
<editorsettings>
|
||||||
<export target="../assets/maps/test.tmj" format="json"/>
|
<export target="../assets/maps/test.tmj" format="json"/>
|
||||||
</editorsettings>
|
</editorsettings>
|
||||||
@@ -273,6 +273,60 @@
|
|||||||
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,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,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,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,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,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,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,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
|
||||||
|
</data>
|
||||||
|
</layer>
|
||||||
|
<layer id="32" name="BuildingOwnership" width="80" height="50" opacity="0.6">
|
||||||
|
<data encoding="csv">
|
||||||
|
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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,0,0,0,0,0,0,0,0,0,0,329,329,329,0,0,329,329,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,0,0,0,0,0,0,0,0,0,0,0,329,329,329,0,0,329,329,329,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,0,0,0,0,0,0,0,0,0,0,329,329,329,0,0,329,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,0,0,0,0,0,0,0,0,0,0,0,0,0,329,329,329,329,329,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||||
</data>
|
</data>
|
||||||
</layer>
|
</layer>
|
||||||
<objectgroup id="31" name="Entities"/>
|
<objectgroup id="31" name="Entities"/>
|
||||||
|
|||||||
Reference in New Issue
Block a user