New sign definitions

+Added definitions and icons for signs: W1, W13, W13a, W15, W17, W28
*Fixed text retrieval for older types of W27 and W8 signs, where the speed limit is specified in the prefab name instead of the data field
This commit is contained in:
izawartka 2025-06-12 13:16:53 +02:00
parent 871505568d
commit 3e82d1627b
9 changed files with 107 additions and 4 deletions

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="100mm" height="100mm" version="1.1" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
<path d="m50 70c-2.2091 0-4 1.7909-4 4v14c0 2.2091 1.7909 4 4 4s4-1.7909 4-4v-14c0-2.2091-1.7909-4-4-4z" color="#000000"/>
<path d="m38 8c-6.5788 0-12 5.4212-12 12v44c0 6.5788 5.4212 12 12 12h24c6.5788 0 12-5.4212 12-12v-44c0-6.5788-5.4212-12-12-12zm0 8h24c2.2852 0 4 1.7148 4 4v44c0 2.2852-1.7148 4-4 4h-24c-2.2852 0-4-1.7148-4-4v-44c0-2.2852 1.7148-4 4-4z" stop-color="#000000"/>
<path d="m35.777 10.102a3 3 0 0 0-2.2773 0.30078 3 3 0 0 0-1.0977 4.0977l15 26a3.0003 3.0003 0 0 0 5.1953 0l15-26a3 3 0 0 0-1.0977-4.0977 3 3 0 0 0-4.0977 1.0977l-12.402 21.498-12.402-21.498a3 3 0 0 0-1.8203-1.3984z" stop-color="#000000" stroke-linecap="round" stroke-linejoin="round"/>
<path d="m50 42a3.0003 3.0003 0 0 0-2.5977 1.5l-15 26a3 3 0 0 0 1.0977 4.0977 3 3 0 0 0 4.0977-1.0977l12.402-21.498 12.402 21.498a3 3 0 0 0 4.0977 1.0977 3 3 0 0 0 1.0977-4.0977l-15-26a3.0003 3.0003 0 0 0-2.5977-1.5z" stop-color="#000000" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="100mm" height="140mm" version="1.1" viewBox="0 0 100 140" xmlns="http://www.w3.org/2000/svg">
<g stroke-linecap="round">
<path d="m50 6c-2.2091 0-4 1.7909-4 4v120c0 2.2091 1.7909 4 4 4s4-1.7909 4-4v-120c0-2.2091-1.7909-4-4-4z" stop-color="#000000"/>
<g stroke-linejoin="round">
<path d="m40.691 5.0059a3 3 0 0 0-2.1738 0.74219 3 3 0 0 0-0.26953 4.2344l44 50a3 3 0 0 0 4.2344 0.26953 3 3 0 0 0 0.26953-4.2344l-44-50a3 3 0 0 0-2.0605-1.0117z" stop-color="#000000"/>
<path d="m86.482 40.748a3 3 0 0 0-4.2344 0.26953l-44 50a3 3 0 0 0 0.26953 4.2344 3 3 0 0 0 4.2344-0.26953l44-50a3 3 0 0 0-0.26953-4.2344z" stop-color="#000000"/>
<path d="m65.416 33.92a3 3 0 0 0-2.0684 0.99609l-50.086 56.086a3 3 0 0 0 0.24023 4.2363 3 3 0 0 0 4.2363-0.24023l50.084-56.086a3 3 0 0 0-0.23828-4.2344 3 3 0 0 0-2.168-0.75781z" stop-color="#000000"/>
<path d="m59.309 5.0059a3 3 0 0 0-2.0605 1.0117l-44 50a3 3 0 0 0 0.26953 4.2344 3 3 0 0 0 4.2344-0.26953l44-50a3 3 0 0 0-0.26953-4.2344 3 3 0 0 0-2.1738-0.74219z" stop-color="#000000"/>
<path d="m15.691 40.006a3 3 0 0 0-2.1738 0.74219 3 3 0 0 0-0.26953 4.2344l44 50a3 3 0 0 0 4.2344 0.26953 3 3 0 0 0 0.26953-4.2344l-44-50a3 3 0 0 0-2.0605-1.0117z" stop-color="#000000"/>
<path d="m32.416 34.678a3 3 0 0 0-0.23828 4.2344l50.084 56.086a3 3 0 0 0 4.2363 0.24023 3 3 0 0 0 0.24023-4.2363l-50.086-56.086a3 3 0 0 0-4.2363-0.23828z" stop-color="#000000"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="100mm" height="140mm" version="1.1" viewBox="0 0 100 140" xmlns="http://www.w3.org/2000/svg">
<g stroke-linecap="round">
<path d="m50 6c-2.2091 0-4 1.7909-4 4v120c0 2.2091 1.7909 4 4 4s4-1.7909 4-4v-120c0-2.2091-1.7909-4-4-4z" stop-color="#000000"/>
<g stroke-linejoin="round">
<path d="m21.412 4.3535a3 3 0 0 0-4.0586 1.2344 3 3 0 0 0 1.2344 4.0586l60 32a3 3 0 0 0 4.0586-1.2344 3 3 0 0 0-1.2344-4.0586z" stop-color="#000000"/>
<path d="m78.588 4.3535-60 32a3 3 0 0 0-1.2344 4.0586 3 3 0 0 0 4.0586 1.2344l60-32a3 3 0 0 0 1.2344-4.0586 3 3 0 0 0-4.0586-1.2344z" stop-color="#000000"/>
<path d="m19.127 21.131a3 3 0 0 0-1.7734 1.457 3 3 0 0 0 1.2344 4.0586l60 32a3 3 0 0 0 4.0586-1.2344 3 3 0 0 0-1.2344-4.0586l-60-32a3 3 0 0 0-2.2852-0.22266z" stop-color="#000000"/>
<path d="m78.588 21.354-60 32a3 3 0 0 0-1.2344 4.0586 3 3 0 0 0 4.0586 1.2344l60-32a3 3 0 0 0 1.2344-4.0586 3 3 0 0 0-4.0586-1.2344z" stop-color="#000000"/>
<path d="m19.127 64.131a3 3 0 0 0-1.7734 1.457 3 3 0 0 0 1.2344 4.0586l60 32a3 3 0 0 0 4.0586-1.2344 3 3 0 0 0-1.2344-4.0586l-60-32a3 3 0 0 0-2.2852-0.22266z" stop-color="#000000"/>
<path d="m78.588 64.354-60 32a3 3 0 0 0-1.2344 4.0586 3 3 0 0 0 4.0586 1.2344l60-32a3 3 0 0 0 1.2344-4.0586 3 3 0 0 0-4.0586-1.2344z" stop-color="#000000"/>
<path d="m19.127 81.131a3 3 0 0 0-1.7734 1.457 3 3 0 0 0 1.2344 4.0586l60 32a3 3 0 0 0 4.0586-1.2344 3 3 0 0 0-1.2344-4.0586l-60-32a3 3 0 0 0-2.2852-0.22266z" stop-color="#000000"/>
<path d="m78.588 81.354-60 32a3 3 0 0 0-1.2344 4.0586 3 3 0 0 0 4.0586 1.2344l60-32a3 3 0 0 0 1.2344-4.0586 3 3 0 0 0-4.0586-1.2344z" stop-color="#000000"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="100mm" height="100mm" version="1.1" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
<path d="m50 54c-2.2091 0-4 1.7909-4 4v30c0 2.2091 1.7909 4 4 4s4-1.7909 4-4v-30c0-2.2091-1.7909-4-4-4z" color="#000000"/>
<path d="m69 14-37 20 37 20z"/>
<path d="m35.32 10c-5.1112 0-9.3203 4.2091-9.3203 9.3203v29.359c0 5.1112 4.2091 9.3203 9.3203 9.3203h29.359c5.1112 0 9.3203-4.2091 9.3203-9.3203v-29.359c0-5.1112-4.2091-9.3203-9.3203-9.3203zm0 6h29.359c1.891 0 3.3203 1.4293 3.3203 3.3203v29.359c0 1.891-1.4293 3.3203-3.3203 3.3203h-29.359c-1.891 0-3.3203-1.4293-3.3203-3.3203v-29.359c0-1.891 1.4293-3.3203 3.3203-3.3203z" stop-color="#000000" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 752 B

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="100mm" height="100mm" version="1.1" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
<path d="m50 54c-2.2091 0-4 1.7909-4 4v30c0 2.2091 1.7909 4 4 4s4-1.7909 4-4v-30c0-2.2091-1.7909-4-4-4z" color="#000000"/>
<path d="m31 14 37 20-37 20z"/>
<path d="m35.32 10c-5.1112 0-9.3203 4.2091-9.3203 9.3203v29.359c0 5.1112 4.2091 9.3203 9.3203 9.3203h29.359c5.1112 0 9.3203-4.2091 9.3203-9.3203v-29.359c0-5.1112-4.2091-9.3203-9.3203-9.3203zm0 6h29.359c1.891 0 3.3203 1.4293 3.3203 3.3203v29.359c0 1.891-1.4293 3.3203-3.3203 3.3203h-29.359c-1.891 0-3.3203-1.4293-3.3203-3.3203v-29.359c0-1.891 1.4293-3.3203 3.3203-3.3203z" stop-color="#000000" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 752 B

View File

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="100mm" height="100mm" version="1.1" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
<path d="m50 37.25c-7.0298 0-12.75 5.7203-12.75 12.75s5.7203 12.75 12.75 12.75 12.75-5.7203 12.75-12.75-5.7203-12.75-12.75-12.75zm0 1.9999v10.75h10.75c-2.6e-5 5.9489-4.8009 10.75-10.75 10.75v-10.75h-10.75c0-5.9489 4.8013-10.75 10.75-10.75z" stroke-linecap="round" stroke-linejoin="round" stroke-width="8"/>
</svg>

After

Width:  |  Height:  |  Size: 460 B

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="100mm" height="100mm" version="1.1" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
<path d="m50 54c-2.2091 0-4 1.7909-4 4v30c0 2.2091 1.7909 4 4 4s4-1.7909 4-4v-30c0-2.2091-1.7909-4-4-4z" color="#000000"/>
<path d="m50 8c-14.312 0-26 11.688-26 26s11.688 26 26 26 26-11.688 26-26-11.688-26-26-26zm0 8c9.9885 0 18 8.0115 18 18s-8.0115 18-18 18-18-8.0115-18-18 8.0115-18 18-18z" stop-color="#000000" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 517 B

View File

@ -5,11 +5,25 @@ const DefinedSigns = {
"name": "W27",
"icon": "w27.svg",
"offsetY": -1.4364,
"text": "data",
"text": ["fun", "data"],
"textFun": (object) => object.prefab_name?.match(/^sign_w27_(\d+)/)?.[1] || null,
"textSize": 0.22,
"textOffsetX": 1.89,
"textOffsetY": 1.2
},
"sign_w28_": {
"name": "W28",
"icon": "w28.svg",
"offsetY": -1.4364,
"text": ["fun"],
"textFun": (object) => {
const channel = object.prefab_name?.match(/^sign_w28_(\d+)/)?.[1];
return channel ? `R${channel}` : null;
},
"textSize": 0.22,
"textOffsetX": 1.89,
"textOffsetY": 1.25
},
"sign_w11p_400m": {
"name": "W11p 400m",
"icon": "w11p_2.svg",
@ -71,6 +85,35 @@ const DefinedSigns = {
"offsetY": -3.3264,
"height": 1.5
},
"sign_w13a": {
"name": "W13a",
"icon": "w13a.svg",
"offsetY": -2.01096,
"height": 1.4
},
"sign_w13": {
"name": "W13",
"icon": "w13.svg",
"offsetY": -2.01096,
"height": 1.4
},
"sign_w15_p": {
"name": "W15 Right",
"icon": "w15_r.svg",
},
"sign_w15_l": {
"name": "W15 Left",
"icon": "w15_l.svg"
},
"sign_w17": {
"name": "W17",
"icon": "w17.svg"
},
"w1_": {
"name": "W1",
"icon": "w1.svg",
"offsetY": 3.89
},
"sign_w4": {
"name": "W4",
"icon": "w4.svg",
@ -116,7 +159,8 @@ const DefinedSigns = {
"name": "W8",
"icon": "w8.svg",
"offsetY": -1.4364,
"text": "data",
"text": ["fun", "data"],
"textFun": (object) => object.prefab_name?.match(/^sign_w8_(\d+)/)?.[1] || null,
"textSize": 0.14,
"textOffsetX": 1.89,
"textOffsetY": 0.9

View File

@ -25,8 +25,9 @@ export default class Sign extends TrackObject {
static isSign(text) {
const values = text.split(";");
const prefabInfo = values[2]?.trim() || "";
return prefabInfo.startsWith("sign_");
const prefabName = values[2]?.trim() || "";
if(prefabName.startsWith("sign_")) return true;
if(prefabName.startsWith("w1_")) return true;
}
static fromText(text) {