Added diagonal ramps
This commit is contained in:
@@ -1 +1 @@
|
|||||||
{"shapes": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 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, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]}
|
{"shapes": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 5, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 2, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]}
|
||||||
@@ -1,37 +1 @@
|
|||||||
{
|
{"shapes": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]}
|
||||||
"shapes": [
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -112,15 +112,19 @@ errorret_t assetChunkLoad(assetcustom_t custom) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Init the mesh
|
// Init the mesh
|
||||||
mesh_t *mesh = &chunk->meshes[i];
|
if(modelHeader.vertexCount > 0) {
|
||||||
meshInit(
|
mesh_t *mesh = &chunk->meshes[i];
|
||||||
mesh,
|
meshInit(
|
||||||
MESH_PRIMITIVE_TRIANGLES,
|
mesh,
|
||||||
modelHeader.vertexCount,
|
MESH_PRIMITIVE_TRIANGLES,
|
||||||
&chunk->vertices[vertexIndex]
|
modelHeader.vertexCount,
|
||||||
);
|
&chunk->vertices[vertexIndex]
|
||||||
|
);
|
||||||
|
|
||||||
vertexIndex += modelHeader.vertexCount;
|
vertexIndex += modelHeader.vertexCount;
|
||||||
|
} else {
|
||||||
|
chunk->meshes[i].vertexCount = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
errorOk();
|
errorOk();
|
||||||
|
|||||||
@@ -25,6 +25,10 @@ TILE_SHAPE_RAMP_SOUTH = 2
|
|||||||
TILE_SHAPE_RAMP_WEST = 3
|
TILE_SHAPE_RAMP_WEST = 3
|
||||||
TILE_SHAPE_RAMP_EAST = 4
|
TILE_SHAPE_RAMP_EAST = 4
|
||||||
TILE_SHAPE_RAMP_NORTH = 5
|
TILE_SHAPE_RAMP_NORTH = 5
|
||||||
|
TILE_SHAPE_RAMP_SOUTHWEST = 6
|
||||||
|
TILE_SHAPE_RAMP_SOUTHEAST = 7
|
||||||
|
TILE_SHAPE_RAMP_NORTHWEST = 8
|
||||||
|
TILE_SHAPE_RAMP_NORTHEAST = 9
|
||||||
|
|
||||||
RPG_CAMERA_FOV = 70
|
RPG_CAMERA_FOV = 70
|
||||||
RPG_CAMERA_PIXELS_PER_UNIT = 1.0
|
RPG_CAMERA_PIXELS_PER_UNIT = 1.0
|
||||||
|
|||||||
@@ -84,8 +84,30 @@ void entityWalk(entity_t *entity, const entitydir_t direction) {
|
|||||||
// Are we walking up a ramp?
|
// Are we walking up a ramp?
|
||||||
if(
|
if(
|
||||||
tileIsRamp(tileCurrent) &&
|
tileIsRamp(tileCurrent) &&
|
||||||
(direction+TILE_SHAPE_RAMP_SOUTH) == tileCurrent &&
|
(
|
||||||
newPos.z < (MAP_CHUNK_DEPTH - 1)
|
// Can only walk UP the direction the ramp faces.
|
||||||
|
(direction+TILE_SHAPE_RAMP_SOUTH) == tileCurrent ||
|
||||||
|
// If diagonal ramp, can go up one of two ways only.
|
||||||
|
(
|
||||||
|
(
|
||||||
|
tileCurrent == TILE_SHAPE_RAMP_SOUTHEAST &&
|
||||||
|
(direction == ENTITY_DIR_SOUTH || direction == ENTITY_DIR_EAST)
|
||||||
|
) ||
|
||||||
|
(
|
||||||
|
tileCurrent == TILE_SHAPE_RAMP_SOUTHWEST &&
|
||||||
|
(direction == ENTITY_DIR_SOUTH || direction == ENTITY_DIR_WEST)
|
||||||
|
) ||
|
||||||
|
(
|
||||||
|
tileCurrent == TILE_SHAPE_RAMP_NORTHEAST &&
|
||||||
|
(direction == ENTITY_DIR_NORTH || direction == ENTITY_DIR_EAST)
|
||||||
|
) ||
|
||||||
|
(
|
||||||
|
tileCurrent == TILE_SHAPE_RAMP_NORTHWEST &&
|
||||||
|
(direction == ENTITY_DIR_NORTH || direction == ENTITY_DIR_WEST)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
// Must be able to walk up.
|
||||||
|
) && newPos.z < (MAP_CHUNK_DEPTH - 1)
|
||||||
) {
|
) {
|
||||||
tileNew = TILE_SHAPE_NULL;// Force check for ramp above.
|
tileNew = TILE_SHAPE_NULL;// Force check for ramp above.
|
||||||
worldpos_t abovePos = newPos;
|
worldpos_t abovePos = newPos;
|
||||||
@@ -104,7 +126,29 @@ void entityWalk(entity_t *entity, const entitydir_t direction) {
|
|||||||
if(
|
if(
|
||||||
tileBelow != TILE_SHAPE_NULL &&
|
tileBelow != TILE_SHAPE_NULL &&
|
||||||
tileIsRamp(tileBelow) &&
|
tileIsRamp(tileBelow) &&
|
||||||
(entityDirGetOpposite(direction)+TILE_SHAPE_RAMP_SOUTH) == tileBelow
|
(
|
||||||
|
// This handles regular cardinal ramps
|
||||||
|
(entityDirGetOpposite(direction)+TILE_SHAPE_RAMP_SOUTH) == tileBelow ||
|
||||||
|
// This handles diagonal ramps
|
||||||
|
(
|
||||||
|
(
|
||||||
|
tileBelow == TILE_SHAPE_RAMP_SOUTHEAST &&
|
||||||
|
(direction == ENTITY_DIR_NORTH || direction == ENTITY_DIR_WEST)
|
||||||
|
) ||
|
||||||
|
(
|
||||||
|
tileBelow == TILE_SHAPE_RAMP_SOUTHWEST &&
|
||||||
|
(direction == ENTITY_DIR_NORTH || direction == ENTITY_DIR_EAST)
|
||||||
|
) ||
|
||||||
|
(
|
||||||
|
tileBelow == TILE_SHAPE_RAMP_NORTHEAST &&
|
||||||
|
(direction == ENTITY_DIR_SOUTH || direction == ENTITY_DIR_WEST)
|
||||||
|
) ||
|
||||||
|
(
|
||||||
|
tileBelow == TILE_SHAPE_RAMP_NORTHWEST &&
|
||||||
|
(direction == ENTITY_DIR_SOUTH || direction == ENTITY_DIR_EAST)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
) {
|
) {
|
||||||
// We will fall to this tile.
|
// We will fall to this tile.
|
||||||
fall = true;
|
fall = true;
|
||||||
|
|||||||
@@ -127,6 +127,7 @@ void mapDispose() {
|
|||||||
|
|
||||||
void mapChunkUnload(chunk_t* chunk) {
|
void mapChunkUnload(chunk_t* chunk) {
|
||||||
for(uint8_t i = 0; i < chunk->meshCount; i++) {
|
for(uint8_t i = 0; i < chunk->meshCount; i++) {
|
||||||
|
if(chunk->meshes[i].vertexCount == 0) continue;
|
||||||
meshDispose(&chunk->meshes[i]);
|
meshDispose(&chunk->meshes[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -135,6 +136,7 @@ errorret_t mapChunkLoad(chunk_t* chunk) {
|
|||||||
char_t buffer[64];
|
char_t buffer[64];
|
||||||
|
|
||||||
chunk->meshCount = 0;
|
chunk->meshCount = 0;
|
||||||
|
memoryZero(chunk->meshes, sizeof(chunk->meshes));
|
||||||
|
|
||||||
snprintf(buffer, sizeof(buffer), "map/map/%d_%d_%d.dcf",
|
snprintf(buffer, sizeof(buffer), "map/map/%d_%d_%d.dcf",
|
||||||
chunk->position.x,
|
chunk->position.x,
|
||||||
|
|||||||
@@ -9,15 +9,11 @@
|
|||||||
|
|
||||||
bool_t tileIsWalkable(const tile_t tile) {
|
bool_t tileIsWalkable(const tile_t tile) {
|
||||||
switch(tile) {
|
switch(tile) {
|
||||||
case TILE_SHAPE_FLOOR:
|
case TILE_SHAPE_NULL:
|
||||||
case TILE_SHAPE_RAMP_NORTH:
|
return false;
|
||||||
case TILE_SHAPE_RAMP_SOUTH:
|
|
||||||
case TILE_SHAPE_RAMP_EAST:
|
|
||||||
case TILE_SHAPE_RAMP_WEST:
|
|
||||||
return true;
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return false;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -27,6 +23,10 @@ bool_t tileIsRamp(const tile_t tile) {
|
|||||||
case TILE_SHAPE_RAMP_SOUTH:
|
case TILE_SHAPE_RAMP_SOUTH:
|
||||||
case TILE_SHAPE_RAMP_EAST:
|
case TILE_SHAPE_RAMP_EAST:
|
||||||
case TILE_SHAPE_RAMP_WEST:
|
case TILE_SHAPE_RAMP_WEST:
|
||||||
|
case TILE_SHAPE_RAMP_NORTHEAST:
|
||||||
|
case TILE_SHAPE_RAMP_NORTHWEST:
|
||||||
|
case TILE_SHAPE_RAMP_SOUTHEAST:
|
||||||
|
case TILE_SHAPE_RAMP_SOUTHWEST:
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|||||||
@@ -169,6 +169,7 @@ void sceneMapRenderMap() {
|
|||||||
|
|
||||||
for(uint8_t j = 0; j < chunk->meshCount; j++) {
|
for(uint8_t j = 0; j < chunk->meshCount; j++) {
|
||||||
mesh_t *mesh = &chunk->meshes[j];
|
mesh_t *mesh = &chunk->meshes[j];
|
||||||
|
if(mesh->vertexCount == 0) continue;
|
||||||
textureBind(NULL);
|
textureBind(NULL);
|
||||||
meshDraw(mesh, -1, -1);
|
meshDraw(mesh, -1, -1);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import json
|
|||||||
from assetstool.args import args
|
from assetstool.args import args
|
||||||
from assetstool.assetcache import assetCache, assetGetCache
|
from assetstool.assetcache import assetCache, assetGetCache
|
||||||
from assetstool.assethelpers import getAssetRelativePath
|
from assetstool.assethelpers import getAssetRelativePath
|
||||||
from editortool.map.mapdefs import TILE_WIDTH, TILE_HEIGHT, TILE_DEPTH, CHUNK_WIDTH, CHUNK_HEIGHT, CHUNK_DEPTH, CHUNK_TILE_COUNT
|
from dusk.defs import TILE_WIDTH, TILE_HEIGHT, TILE_DEPTH, CHUNK_WIDTH, CHUNK_HEIGHT, CHUNK_DEPTH, CHUNK_TILE_COUNT
|
||||||
|
|
||||||
def processTile(tileIndex, x=0, y=0, z=0, chunkX=0, chunkY=0, chunkZ=0):
|
def processTile(tileIndex, x=0, y=0, z=0, chunkX=0, chunkY=0, chunkZ=0):
|
||||||
vertices = []
|
vertices = []
|
||||||
|
|||||||
@@ -3,11 +3,6 @@ import os
|
|||||||
import sys
|
import sys
|
||||||
|
|
||||||
current_file_path = os.path.abspath(__file__)
|
current_file_path = os.path.abspath(__file__)
|
||||||
print(current_file_path)
|
|
||||||
|
|
||||||
ASSET_FILE_NAME_MAX_LENGTH = 256
|
|
||||||
|
|
||||||
|
|
||||||
duskDefsPath = os.path.join(os.path.dirname(current_file_path), "..", "..", "src", "duskdefs.env")
|
duskDefsPath = os.path.join(os.path.dirname(current_file_path), "..", "..", "src", "duskdefs.env")
|
||||||
|
|
||||||
# Ensure the .env file exists
|
# Ensure the .env file exists
|
||||||
@@ -16,5 +11,30 @@ if not os.path.isfile(duskDefsPath):
|
|||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
load_dotenv(dotenv_path=duskDefsPath)
|
load_dotenv(dotenv_path=duskDefsPath)
|
||||||
|
defs = {key: os.getenv(key) for key in os.environ.keys()}
|
||||||
|
|
||||||
defs = {key: os.getenv(key) for key in os.environ.keys()}
|
# Parsed out definitions
|
||||||
|
CHUNK_WIDTH = int(defs.get('CHUNK_WIDTH'))
|
||||||
|
CHUNK_HEIGHT = int(defs.get('CHUNK_HEIGHT'))
|
||||||
|
CHUNK_DEPTH = int(defs.get('CHUNK_DEPTH'))
|
||||||
|
CHUNK_TILE_COUNT = CHUNK_WIDTH * CHUNK_HEIGHT * CHUNK_DEPTH
|
||||||
|
CHUNK_VERTEX_COUNT_MAX = int(defs.get('CHUNK_VERTEX_COUNT_MAX'))
|
||||||
|
|
||||||
|
TILE_WIDTH = float(defs.get('TILE_WIDTH'))
|
||||||
|
TILE_HEIGHT = float(defs.get('TILE_HEIGHT'))
|
||||||
|
TILE_DEPTH = float(defs.get('TILE_DEPTH'))
|
||||||
|
|
||||||
|
RPG_CAMERA_PIXELS_PER_UNIT = float(defs.get('RPG_CAMERA_PIXELS_PER_UNIT'))
|
||||||
|
RPG_CAMERA_Z_OFFSET = float(defs.get('RPG_CAMERA_Z_OFFSET'))
|
||||||
|
RPG_CAMERA_FOV = float(defs.get('RPG_CAMERA_FOV'))
|
||||||
|
|
||||||
|
MAP_WIDTH = 5
|
||||||
|
MAP_HEIGHT = 5
|
||||||
|
MAP_DEPTH = 3
|
||||||
|
MAP_CHUNK_COUNT = MAP_WIDTH * MAP_HEIGHT * MAP_DEPTH
|
||||||
|
|
||||||
|
TILE_SHAPES = {}
|
||||||
|
for key in defs.keys():
|
||||||
|
if key.startswith('TILE_SHAPE_'):
|
||||||
|
globals()[key] = int(defs.get(key))
|
||||||
|
TILE_SHAPES[key] = int(defs.get(key))
|
||||||
@@ -2,7 +2,7 @@ import math
|
|||||||
import time
|
import time
|
||||||
from OpenGL.GL import *
|
from OpenGL.GL import *
|
||||||
from OpenGL.GLU import *
|
from OpenGL.GLU import *
|
||||||
from editortool.map.mapdefs import TILE_WIDTH, TILE_HEIGHT, TILE_DEPTH, RPG_CAMERA_PIXELS_PER_UNIT, RPG_CAMERA_Z_OFFSET, RPG_CAMERA_FOV
|
from dusk.defs import TILE_WIDTH, TILE_HEIGHT, TILE_DEPTH, RPG_CAMERA_PIXELS_PER_UNIT, RPG_CAMERA_Z_OFFSET, RPG_CAMERA_FOV
|
||||||
|
|
||||||
class Camera:
|
class Camera:
|
||||||
def __init__(self, parent):
|
def __init__(self, parent):
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
from dusk.event import Event
|
from dusk.event import Event
|
||||||
from editortool.map.mapdefs import CHUNK_WIDTH, CHUNK_HEIGHT, CHUNK_DEPTH, CHUNK_VERTEX_COUNT_MAX, TILE_SHAPE_NULL
|
from dusk.defs import CHUNK_WIDTH, CHUNK_HEIGHT, CHUNK_DEPTH, CHUNK_VERTEX_COUNT_MAX, TILE_SHAPE_NULL
|
||||||
from editortool.map.tile import Tile
|
from editortool.map.tile import Tile
|
||||||
from editortool.map.vertexbuffer import VertexBuffer
|
from editortool.map.vertexbuffer import VertexBuffer
|
||||||
from OpenGL.GL import *
|
from OpenGL.GL import *
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel, QPushButton, QGridLayout, QTreeWidget, QTreeWidgetItem, QComboBox
|
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel, QPushButton, QGridLayout, QTreeWidget, QTreeWidgetItem, QComboBox
|
||||||
from editortool.map.mapdefs import CHUNK_WIDTH, CHUNK_HEIGHT, CHUNK_DEPTH, TILE_SHAPES
|
from dusk.defs import CHUNK_WIDTH, CHUNK_HEIGHT, CHUNK_DEPTH, TILE_SHAPES
|
||||||
|
|
||||||
class ChunkPanel(QWidget):
|
class ChunkPanel(QWidget):
|
||||||
def __init__(self, parent):
|
def __init__(self, parent):
|
||||||
@@ -68,7 +68,7 @@ class ChunkPanel(QWidget):
|
|||||||
|
|
||||||
def onPositionChange(self, pos):
|
def onPositionChange(self, pos):
|
||||||
self.updateChunkList()
|
self.updateChunkList()
|
||||||
|
|
||||||
tile = self.parent.map.getTileAtWorldPos(*self.parent.map.position)
|
tile = self.parent.map.getTileAtWorldPos(*self.parent.map.position)
|
||||||
if tile is None:
|
if tile is None:
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
from OpenGL.GL import *
|
from OpenGL.GL import *
|
||||||
from editortool.map.mapdefs import TILE_WIDTH, TILE_HEIGHT, TILE_DEPTH
|
from dusk.defs import TILE_WIDTH, TILE_HEIGHT, TILE_DEPTH
|
||||||
|
|
||||||
class Grid:
|
class Grid:
|
||||||
def __init__(self, lines=1000):
|
def __init__(self, lines=1000):
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ from PyQt5.QtWidgets import QFileDialog, QMessageBox
|
|||||||
from PyQt5.QtCore import QTimer
|
from PyQt5.QtCore import QTimer
|
||||||
import os
|
import os
|
||||||
from editortool.map.chunk import Chunk
|
from editortool.map.chunk import Chunk
|
||||||
from editortool.map.mapdefs import MAP_WIDTH, MAP_HEIGHT, MAP_DEPTH, CHUNK_WIDTH, CHUNK_HEIGHT, CHUNK_DEPTH
|
from dusk.defs import MAP_WIDTH, MAP_HEIGHT, MAP_DEPTH, CHUNK_WIDTH, CHUNK_HEIGHT, CHUNK_DEPTH
|
||||||
import traceback
|
import traceback
|
||||||
|
|
||||||
MAP_DEFAULT_PATH = os.path.join(os.path.dirname(__file__), '../../../assets/map/')
|
MAP_DEFAULT_PATH = os.path.join(os.path.dirname(__file__), '../../../assets/map/')
|
||||||
|
|||||||
@@ -1,26 +0,0 @@
|
|||||||
from dusk.defs import defs
|
|
||||||
|
|
||||||
CHUNK_WIDTH = int(defs.get('CHUNK_WIDTH'))
|
|
||||||
CHUNK_HEIGHT = int(defs.get('CHUNK_HEIGHT'))
|
|
||||||
CHUNK_DEPTH = int(defs.get('CHUNK_DEPTH'))
|
|
||||||
CHUNK_TILE_COUNT = CHUNK_WIDTH * CHUNK_HEIGHT * CHUNK_DEPTH
|
|
||||||
CHUNK_VERTEX_COUNT_MAX = int(defs.get('CHUNK_VERTEX_COUNT_MAX'))
|
|
||||||
|
|
||||||
TILE_WIDTH = float(defs.get('TILE_WIDTH'))
|
|
||||||
TILE_HEIGHT = float(defs.get('TILE_HEIGHT'))
|
|
||||||
TILE_DEPTH = float(defs.get('TILE_DEPTH'))
|
|
||||||
|
|
||||||
RPG_CAMERA_PIXELS_PER_UNIT = float(defs.get('RPG_CAMERA_PIXELS_PER_UNIT'))
|
|
||||||
RPG_CAMERA_Z_OFFSET = float(defs.get('RPG_CAMERA_Z_OFFSET'))
|
|
||||||
RPG_CAMERA_FOV = float(defs.get('RPG_CAMERA_FOV'))
|
|
||||||
|
|
||||||
MAP_WIDTH = 5
|
|
||||||
MAP_HEIGHT = 5
|
|
||||||
MAP_DEPTH = 3
|
|
||||||
MAP_CHUNK_COUNT = MAP_WIDTH * MAP_HEIGHT * MAP_DEPTH
|
|
||||||
|
|
||||||
TILE_SHAPES = {}
|
|
||||||
for key in defs.keys():
|
|
||||||
if key.startswith('TILE_SHAPE_'):
|
|
||||||
globals()[key] = int(defs.get(key))
|
|
||||||
TILE_SHAPES[key] = int(defs.get(key))
|
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel, QLineEdit, QPushButton, QHBoxLayout, QMessageBox
|
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel, QLineEdit, QPushButton, QHBoxLayout, QMessageBox
|
||||||
from editortool.map.mapdefs import CHUNK_WIDTH, CHUNK_HEIGHT, CHUNK_DEPTH
|
from dusk.defs import CHUNK_WIDTH, CHUNK_HEIGHT, CHUNK_DEPTH
|
||||||
|
|
||||||
class MapInfoPanel(QWidget):
|
class MapInfoPanel(QWidget):
|
||||||
def __init__(self, parent):
|
def __init__(self, parent):
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import OpenGL.GL as gl
|
import OpenGL.GL as gl
|
||||||
from dusk.defs import defs
|
from dusk.defs import defs
|
||||||
import colorsys
|
import colorsys
|
||||||
from editortool.map.mapdefs import TILE_WIDTH, TILE_HEIGHT, TILE_DEPTH
|
from dusk.defs import TILE_WIDTH, TILE_HEIGHT, TILE_DEPTH
|
||||||
|
|
||||||
class SelectBox:
|
class SelectBox:
|
||||||
def __init__(self, parent):
|
def __init__(self, parent):
|
||||||
|
|||||||
@@ -1,10 +1,12 @@
|
|||||||
from OpenGL.GL import *
|
from OpenGL.GL import *
|
||||||
from editortool.map.mapdefs import (
|
from dusk.defs import (
|
||||||
TILE_WIDTH, TILE_HEIGHT, TILE_DEPTH,
|
TILE_WIDTH, TILE_HEIGHT, TILE_DEPTH,
|
||||||
CHUNK_WIDTH, CHUNK_HEIGHT, CHUNK_DEPTH,
|
CHUNK_WIDTH, CHUNK_HEIGHT, CHUNK_DEPTH,
|
||||||
TILE_SHAPE_NULL, TILE_SHAPE_FLOOR,
|
TILE_SHAPE_NULL, TILE_SHAPE_FLOOR,
|
||||||
TILE_SHAPE_RAMP_NORTH, TILE_SHAPE_RAMP_SOUTH,
|
TILE_SHAPE_RAMP_NORTH, TILE_SHAPE_RAMP_SOUTH,
|
||||||
TILE_SHAPE_RAMP_EAST, TILE_SHAPE_RAMP_WEST
|
TILE_SHAPE_RAMP_EAST, TILE_SHAPE_RAMP_WEST,
|
||||||
|
TILE_SHAPE_RAMP_SOUTHWEST, TILE_SHAPE_RAMP_SOUTHEAST,
|
||||||
|
TILE_SHAPE_RAMP_NORTHWEST, TILE_SHAPE_RAMP_NORTHEAST
|
||||||
)
|
)
|
||||||
|
|
||||||
def getItem(arr, index, default):
|
def getItem(arr, index, default):
|
||||||
@@ -39,79 +41,138 @@ class Tile:
|
|||||||
self.chunk.onChunkData.invoke(self.chunk)
|
self.chunk.onChunkData.invoke(self.chunk)
|
||||||
|
|
||||||
def getBaseTileModel(self):
|
def getBaseTileModel(self):
|
||||||
vertices = []
|
vertices = []
|
||||||
indices = []
|
indices = []
|
||||||
uvs = []
|
uvs = []
|
||||||
colors = []
|
colors = []
|
||||||
|
|
||||||
if self.shape == TILE_SHAPE_NULL:
|
if self.shape == TILE_SHAPE_NULL:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
elif self.shape == TILE_SHAPE_FLOOR:
|
elif self.shape == TILE_SHAPE_FLOOR:
|
||||||
vertices = [
|
vertices = [
|
||||||
(self.posX, self.posY, self.posZ),
|
(self.posX, self.posY, self.posZ),
|
||||||
(self.posX + TILE_WIDTH, self.posY, self.posZ),
|
(self.posX + TILE_WIDTH, self.posY, self.posZ),
|
||||||
(self.posX + TILE_WIDTH, self.posY + TILE_HEIGHT, self.posZ),
|
(self.posX + TILE_WIDTH, self.posY + TILE_HEIGHT, self.posZ),
|
||||||
(self.posX, self.posY + TILE_HEIGHT, self.posZ)
|
(self.posX, self.posY + TILE_HEIGHT, self.posZ)
|
||||||
]
|
]
|
||||||
indices = [0, 1, 2, 0, 2, 3]
|
indices = [0, 1, 2, 0, 2, 3]
|
||||||
uvs = [ (0, 0), (1, 0), (1, 1), (0, 1) ]
|
uvs = [ (0, 0), (1, 0), (1, 1), (0, 1) ]
|
||||||
colors = [ (255, 255, 255, 255) ] * 4
|
colors = [ (255, 255, 255, 255) ] * 4
|
||||||
|
|
||||||
elif self.shape == TILE_SHAPE_RAMP_NORTH:
|
elif self.shape == TILE_SHAPE_RAMP_NORTH:
|
||||||
vertices = [
|
vertices = [
|
||||||
(self.posX, self.posY, self.posZ + TILE_DEPTH),
|
(self.posX, self.posY, self.posZ + TILE_DEPTH),
|
||||||
(self.posX + TILE_WIDTH, self.posY, self.posZ + TILE_DEPTH),
|
(self.posX + TILE_WIDTH, self.posY, self.posZ + TILE_DEPTH),
|
||||||
(self.posX + TILE_WIDTH, self.posY + TILE_HEIGHT, self.posZ),
|
(self.posX + TILE_WIDTH, self.posY + TILE_HEIGHT, self.posZ),
|
||||||
(self.posX, self.posY + TILE_HEIGHT, self.posZ)
|
(self.posX, self.posY + TILE_HEIGHT, self.posZ)
|
||||||
]
|
]
|
||||||
indices = [0, 1, 2, 0, 2, 3]
|
indices = [0, 1, 2, 0, 2, 3]
|
||||||
uvs = [ (0, 0), (1, 0), (1, 1), (0, 1) ]
|
uvs = [ (0, 0), (1, 0), (1, 1), (0, 1) ]
|
||||||
colors = [ (255, 0, 0, 255) ] * 4
|
colors = [ (255, 0, 0, 255) ] * 4
|
||||||
|
|
||||||
elif self.shape == TILE_SHAPE_RAMP_SOUTH:
|
elif self.shape == TILE_SHAPE_RAMP_SOUTH:
|
||||||
vertices = [
|
vertices = [
|
||||||
(self.posX, self.posY, self.posZ),
|
(self.posX, self.posY, self.posZ),
|
||||||
(self.posX + TILE_WIDTH, self.posY, self.posZ),
|
(self.posX + TILE_WIDTH, self.posY, self.posZ),
|
||||||
(self.posX + TILE_WIDTH, self.posY + TILE_HEIGHT, self.posZ + TILE_DEPTH),
|
(self.posX + TILE_WIDTH, self.posY + TILE_HEIGHT, self.posZ + TILE_DEPTH),
|
||||||
(self.posX, self.posY + TILE_HEIGHT, self.posZ + TILE_DEPTH)
|
(self.posX, self.posY + TILE_HEIGHT, self.posZ + TILE_DEPTH)
|
||||||
]
|
]
|
||||||
indices = [0, 1, 2, 0, 2, 3]
|
indices = [0, 1, 2, 0, 2, 3]
|
||||||
uvs = [ (0, 0), (1, 0), (1, 1), (0, 1) ]
|
uvs = [ (0, 0), (1, 0), (1, 1), (0, 1) ]
|
||||||
colors = [ (0, 255, 0, 255) ] * 4
|
colors = [ (0, 255, 0, 255) ] * 4
|
||||||
|
|
||||||
elif self.shape == TILE_SHAPE_RAMP_EAST:
|
elif self.shape == TILE_SHAPE_RAMP_EAST:
|
||||||
vertices = [
|
vertices = [
|
||||||
(self.posX, self.posY, self.posZ),
|
(self.posX, self.posY, self.posZ),
|
||||||
(self.posX + TILE_WIDTH, self.posY, self.posZ + TILE_DEPTH),
|
(self.posX + TILE_WIDTH, self.posY, self.posZ + TILE_DEPTH),
|
||||||
(self.posX + TILE_WIDTH, self.posY + TILE_HEIGHT, self.posZ + TILE_DEPTH),
|
(self.posX + TILE_WIDTH, self.posY + TILE_HEIGHT, self.posZ + TILE_DEPTH),
|
||||||
(self.posX, self.posY + TILE_HEIGHT, self.posZ)
|
(self.posX, self.posY + TILE_HEIGHT, self.posZ)
|
||||||
]
|
]
|
||||||
indices = [0, 1, 2, 0, 2, 3]
|
indices = [0, 1, 2, 0, 2, 3]
|
||||||
uvs = [ (0, 0), (1, 0), (1, 1), (0, 1) ]
|
uvs = [ (0, 0), (1, 0), (1, 1), (0, 1) ]
|
||||||
colors = [ (0, 0, 255, 255) ] * 4
|
colors = [ (0, 0, 255, 255) ] * 4
|
||||||
|
|
||||||
elif self.shape == TILE_SHAPE_RAMP_WEST:
|
elif self.shape == TILE_SHAPE_RAMP_WEST:
|
||||||
vertices = [
|
vertices = [
|
||||||
(self.posX, self.posY, self.posZ + TILE_DEPTH),
|
(self.posX, self.posY, self.posZ + TILE_DEPTH),
|
||||||
(self.posX + TILE_WIDTH, self.posY, self.posZ),
|
(self.posX + TILE_WIDTH, self.posY, self.posZ),
|
||||||
(self.posX + TILE_WIDTH, self.posY + TILE_HEIGHT, self.posZ),
|
(self.posX + TILE_WIDTH, self.posY + TILE_HEIGHT, self.posZ),
|
||||||
(self.posX, self.posY + TILE_HEIGHT, self.posZ + TILE_DEPTH)
|
(self.posX, self.posY + TILE_HEIGHT, self.posZ + TILE_DEPTH)
|
||||||
]
|
]
|
||||||
indices = [0, 1, 2, 0, 2, 3]
|
indices = [0, 1, 2, 0, 2, 3]
|
||||||
uvs = [ (0, 0), (1, 0), (1, 1), (0, 1) ]
|
uvs = [ (0, 0), (1, 0), (1, 1), (0, 1) ]
|
||||||
colors = [ (255, 255, 0, 255) ] * 4
|
colors = [ (255, 255, 0, 255) ] * 4
|
||||||
|
|
||||||
|
elif self.shape == TILE_SHAPE_RAMP_SOUTHWEST:
|
||||||
|
vertices = [
|
||||||
|
(self.posX, self.posY, self.posZ + TILE_DEPTH),
|
||||||
|
(self.posX + TILE_WIDTH, self.posY, self.posZ),
|
||||||
|
(self.posX + TILE_WIDTH, self.posY + TILE_HEIGHT, self.posZ + TILE_DEPTH),
|
||||||
|
(self.posX, self.posY + TILE_HEIGHT, self.posZ + TILE_DEPTH)
|
||||||
|
]
|
||||||
|
indices = [0, 1, 2, 0, 2, 3]
|
||||||
|
uvs = [ (0, 0), (1, 0), (1, 1), (0, 1) ]
|
||||||
|
colors = [ (255, 128, 0, 255) ] * 4
|
||||||
|
|
||||||
else:
|
elif self.shape == TILE_SHAPE_RAMP_NORTHWEST:
|
||||||
print("Unknown tile shape:", self.shape)
|
vertices = [
|
||||||
pass
|
(self.posX, self.posY, self.posZ + TILE_DEPTH),
|
||||||
|
(self.posX + TILE_WIDTH, self.posY, self.posZ + TILE_DEPTH),
|
||||||
|
(self.posX + TILE_WIDTH, self.posY + TILE_HEIGHT, self.posZ),
|
||||||
|
(self.posX, self.posY + TILE_HEIGHT, self.posZ + TILE_DEPTH)
|
||||||
|
]
|
||||||
|
indices = [0, 1, 2, 0, 2, 3]
|
||||||
|
uvs = [ (0, 0), (1, 0), (1, 1), (0, 1) ]
|
||||||
|
colors = [ (128, 255, 0, 255) ] * 4
|
||||||
|
|
||||||
return {
|
elif self.shape == TILE_SHAPE_RAMP_NORTHEAST:
|
||||||
'vertices': vertices,
|
vertices = [
|
||||||
'indices': indices,
|
(self.posX, self.posY, self.posZ + TILE_DEPTH),
|
||||||
'uvs': uvs,
|
(self.posX + TILE_WIDTH, self.posY, self.posZ + TILE_DEPTH),
|
||||||
'colors': colors
|
(self.posX + TILE_WIDTH, self.posY + TILE_HEIGHT, self.posZ + TILE_DEPTH),
|
||||||
}
|
(self.posX, self.posY + TILE_HEIGHT, self.posZ)
|
||||||
|
]
|
||||||
|
indices = [0, 1, 2, 0, 2, 3]
|
||||||
|
uvs = [ (0, 0), (1, 0), (1, 1), (0, 1) ]
|
||||||
|
colors = [ (0, 255, 128, 255) ] * 4
|
||||||
|
|
||||||
|
elif self.shape == TILE_SHAPE_RAMP_SOUTHEAST:
|
||||||
|
vertices = [
|
||||||
|
(self.posX, self.posY, self.posZ),
|
||||||
|
(self.posX + TILE_WIDTH, self.posY, self.posZ + TILE_DEPTH),
|
||||||
|
(self.posX + TILE_WIDTH, self.posY + TILE_HEIGHT, self.posZ + TILE_DEPTH),
|
||||||
|
(self.posX, self.posY + TILE_HEIGHT, self.posZ + TILE_DEPTH)
|
||||||
|
]
|
||||||
|
indices = [0, 1, 2, 0, 2, 3]
|
||||||
|
uvs = [ (0, 0), (1, 0), (1, 1), (0, 1) ]
|
||||||
|
colors = [ (255, 128, 255, 255) ] * 4
|
||||||
|
|
||||||
|
else:
|
||||||
|
# Solid black cube for unknown shape
|
||||||
|
x0, y0, z0 = self.posX, self.posY, self.posZ
|
||||||
|
x1, y1, z1 = self.posX + TILE_WIDTH, self.posY + TILE_HEIGHT, self.posZ + TILE_DEPTH
|
||||||
|
vertices = [
|
||||||
|
(x0, y0, z0), (x1, y0, z0), (x1, y1, z0), (x0, y1, z0), # bottom
|
||||||
|
(x0, y0, z1), (x1, y0, z1), (x1, y1, z1), (x0, y1, z1) # top
|
||||||
|
]
|
||||||
|
indices = [
|
||||||
|
0,1,2, 0,2,3, # bottom
|
||||||
|
4,5,6, 4,6,7, # top
|
||||||
|
0,1,5, 0,5,4, # front
|
||||||
|
2,3,7, 2,7,6, # back
|
||||||
|
1,2,6, 1,6,5, # right
|
||||||
|
3,0,4, 3,4,7 # left
|
||||||
|
]
|
||||||
|
uvs = [ (0,0) ] * 8
|
||||||
|
colors = [ (0,0,0,255) ] * 8
|
||||||
|
|
||||||
|
return {
|
||||||
|
'vertices': vertices,
|
||||||
|
'indices': indices,
|
||||||
|
'uvs': uvs,
|
||||||
|
'colors': colors
|
||||||
|
}
|
||||||
|
|
||||||
def buffer(self, vertexBuffer):
|
def buffer(self, vertexBuffer):
|
||||||
if self.shape == TILE_SHAPE_NULL:
|
if self.shape == TILE_SHAPE_NULL:
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ from editortool.map.mapinfopanel import MapInfoPanel
|
|||||||
from editortool.map.menubar import MapMenubar
|
from editortool.map.menubar import MapMenubar
|
||||||
from editortool.map.statusbar import StatusBar
|
from editortool.map.statusbar import StatusBar
|
||||||
from editortool.map.map import Map
|
from editortool.map.map import Map
|
||||||
from editortool.map.mapdefs import CHUNK_WIDTH, CHUNK_HEIGHT, CHUNK_DEPTH
|
from dusk.defs import CHUNK_WIDTH, CHUNK_HEIGHT, CHUNK_DEPTH, TILE_SHAPE_NULL, TILE_SHAPE_FLOOR
|
||||||
from editortool.map.selectbox import SelectBox
|
from editortool.map.selectbox import SelectBox
|
||||||
from editortool.map.camera import Camera
|
from editortool.map.camera import Camera
|
||||||
from editortool.map.grid import Grid
|
from editortool.map.grid import Grid
|
||||||
@@ -73,10 +73,7 @@ class MapWindow(QMainWindow):
|
|||||||
QMessageBox.Save
|
QMessageBox.Save
|
||||||
)
|
)
|
||||||
if reply == QMessageBox.Save:
|
if reply == QMessageBox.Save:
|
||||||
self.saveFile()
|
self.map.save()
|
||||||
if self.map.isDirty():
|
|
||||||
event.ignore()
|
|
||||||
return
|
|
||||||
elif reply == QMessageBox.Cancel:
|
elif reply == QMessageBox.Cancel:
|
||||||
event.ignore()
|
event.ignore()
|
||||||
return
|
return
|
||||||
@@ -109,4 +106,16 @@ class MapWindow(QMainWindow):
|
|||||||
self.map.moveRelative(amtX, amtY, amtZ)
|
self.map.moveRelative(amtX, amtY, amtZ)
|
||||||
event.accept()
|
event.accept()
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
if key == Qt.Key_Delete:
|
||||||
|
tile = self.map.getTileAtWorldPos(*self.map.position)
|
||||||
|
if tile is not None:
|
||||||
|
tile.setShape(TILE_SHAPE_NULL)
|
||||||
|
event.accept()
|
||||||
|
return True
|
||||||
|
if key == Qt.Key_Insert:
|
||||||
|
tile = self.map.getTileAtWorldPos(*self.map.position)
|
||||||
|
if tile is not None and tile.shape == TILE_SHAPE_NULL:
|
||||||
|
tile.setShape(TILE_SHAPE_FLOOR)
|
||||||
|
event.accept()
|
||||||
return super().eventFilter(obj, event)
|
return super().eventFilter(obj, event)
|
||||||
Reference in New Issue
Block a user