More work on unit control panel
@@ -7,7 +7,7 @@
|
||||
version="1.1"
|
||||
id="svg4"
|
||||
sodipodi:docname="1.svg"
|
||||
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
|
||||
inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
@@ -32,38 +32,30 @@
|
||||
inkscape:cx="4.2536893"
|
||||
inkscape:cy="-1.2195892"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1017"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-height="1009"
|
||||
inkscape:window-x="1912"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg4"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:deskcolor="#d1d1d1" />
|
||||
<rect
|
||||
style="stroke-width:0.659;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:5.6;stroke-opacity:1;paint-order:stroke fill markers;fill-opacity:1"
|
||||
fill="#5ca7ff"
|
||||
stroke="#5ca7ff"
|
||||
id="rect1107"
|
||||
width="2.8299551"
|
||||
height="3.9513376"
|
||||
x="1.7056587"
|
||||
y="9.5718069" />
|
||||
<rect
|
||||
style="fill:none;stroke-width:0.659001;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:5.6;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
fill="#5ca7ff"
|
||||
stroke="#5ca7ff"
|
||||
id="rect1107-7"
|
||||
width="2.8299551"
|
||||
height="7.6993432"
|
||||
x="6.0053182"
|
||||
y="5.817802" />
|
||||
<rect
|
||||
style="fill:none;stroke-width:0.659001;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:5.6;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
fill="#5ca7ff"
|
||||
stroke="#5ca7ff"
|
||||
id="rect1107-9"
|
||||
width="2.8299551"
|
||||
height="11.89354"
|
||||
x="10.304977"
|
||||
y="1.7128451" />
|
||||
<g
|
||||
id="rect1107">
|
||||
<path
|
||||
style="color:#000000;fill:#5ca7ff;stroke-linecap:round;stroke-linejoin:bevel;stroke-dashoffset:5.6;-inkscape-stroke:none;paint-order:stroke fill markers"
|
||||
d="m 1.7050781,9.2421875 -0.328125,0.3300781 v 3.9511724 l 0.328125,0.330078 H 4.5351562 L 4.8652344,13.523438 V 9.5722656 L 4.5351562,9.2421875 Z M 2.0351563,9.9003906 H 4.2070312 V 13.193359 H 2.0351563 Z"
|
||||
id="path1" />
|
||||
<path
|
||||
style="color:#000000;fill:#5ca7ff;stroke-linecap:round;stroke-linejoin:bevel;stroke-dashoffset:5.6;-inkscape-stroke:none;paint-order:stroke fill markers"
|
||||
d="M 1.7056587,9.5718069 H 4.5356138 V 13.523144 H 1.7056587 Z"
|
||||
id="path2" />
|
||||
</g>
|
||||
<path
|
||||
style="color:#000000;fill:#5ca7ff;stroke-linecap:round;stroke-linejoin:bevel;stroke-dashoffset:5.6;-inkscape-stroke:none;paint-order:stroke fill markers"
|
||||
d="M 6.0058594,5.4882812 5.6757812,5.8183594 v 7.6992186 l 0.3300782,0.328125 h 2.8300781 l 0.328125,-0.328125 V 5.8183594 L 8.8359375,5.4882812 Z m 0.328125,0.6582032 h 2.171875 V 13.1875 h -2.171875 z"
|
||||
id="rect1107-7" />
|
||||
<path
|
||||
style="color:#000000;fill:#5ca7ff;stroke-linecap:round;stroke-linejoin:bevel;stroke-dashoffset:5.6;-inkscape-stroke:none;paint-order:stroke fill markers"
|
||||
d="M 10.304688,1.3828125 9.9746094,1.7128906 V 13.605469 l 0.3300786,0.330078 h 2.830078 l 0.330078,-0.330078 V 1.7128906 L 13.134766,1.3828125 Z m 0.330078,0.6601563 h 2.169922 V 13.277344 h -2.169922 z"
|
||||
id="rect1107-9" />
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.6 KiB |
@@ -7,7 +7,7 @@
|
||||
version="1.1"
|
||||
id="svg4"
|
||||
sodipodi:docname="2.svg"
|
||||
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
|
||||
inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
@@ -32,38 +32,37 @@
|
||||
inkscape:cx="4.2536893"
|
||||
inkscape:cy="-1.2195892"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1017"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-height="1009"
|
||||
inkscape:window-x="1912"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg4"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:deskcolor="#d1d1d1" />
|
||||
<rect
|
||||
style="stroke-width:0.659;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:5.6;stroke-opacity:1;paint-order:stroke fill markers;fill-opacity:1"
|
||||
fill="#5ca7ff"
|
||||
stroke="#5ca7ff"
|
||||
id="rect1107"
|
||||
width="2.8299551"
|
||||
height="3.9513376"
|
||||
x="1.7056587"
|
||||
y="9.5718069" />
|
||||
<rect
|
||||
style="stroke-width:0.659001;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:5.6;stroke-opacity:1;paint-order:stroke fill markers;fill-opacity:1"
|
||||
fill="#5ca7ff"
|
||||
stroke="#5ca7ff"
|
||||
id="rect1107-7"
|
||||
width="2.8299551"
|
||||
height="7.6993432"
|
||||
x="6.0053182"
|
||||
y="5.817802" />
|
||||
<rect
|
||||
style="fill:none;stroke-width:0.659001;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:5.6;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
fill="#5ca7ff"
|
||||
stroke="#5ca7ff"
|
||||
id="rect1107-9"
|
||||
width="2.8299551"
|
||||
height="11.89354"
|
||||
x="10.304977"
|
||||
y="1.7128451" />
|
||||
<g
|
||||
id="rect1107">
|
||||
<path
|
||||
style="color:#000000;fill:#5ca7ff;stroke-linecap:round;stroke-linejoin:bevel;stroke-dashoffset:5.6;-inkscape-stroke:none;paint-order:stroke fill markers"
|
||||
d="m 1.7050781,9.2421875 -0.328125,0.3300781 v 3.9511724 l 0.328125,0.330078 H 4.5351562 L 4.8652344,13.523438 V 9.5722656 L 4.5351562,9.2421875 Z M 2.0351563,9.9003906 H 4.2070312 V 13.193359 H 2.0351563 Z"
|
||||
id="path1" />
|
||||
<path
|
||||
style="color:#000000;fill:#5ca7ff;stroke-linecap:round;stroke-linejoin:bevel;stroke-dashoffset:5.6;-inkscape-stroke:none;paint-order:stroke fill markers"
|
||||
d="M 1.7056587,9.5718069 H 4.5356138 V 13.523144 H 1.7056587 Z"
|
||||
id="path2" />
|
||||
</g>
|
||||
<g
|
||||
id="rect1107-7">
|
||||
<path
|
||||
style="color:#000000;fill:#5ca7ff;stroke-linecap:round;stroke-linejoin:bevel;stroke-dashoffset:5.6;-inkscape-stroke:none;paint-order:stroke fill markers"
|
||||
d="M 6.0058594,5.4882812 5.6757812,5.8183594 v 7.6992186 l 0.3300782,0.328125 h 2.8300781 l 0.328125,-0.328125 V 5.8183594 L 8.8359375,5.4882812 Z m 0.328125,0.6582032 h 2.171875 V 13.1875 h -2.171875 z"
|
||||
id="path3" />
|
||||
<path
|
||||
style="color:#000000;fill:#5ca7ff;stroke-linecap:round;stroke-linejoin:bevel;stroke-dashoffset:5.6;-inkscape-stroke:none;paint-order:stroke fill markers"
|
||||
d="m 6.0053182,5.817802 h 2.8299551 v 7.699343 H 6.0053182 Z"
|
||||
id="path4" />
|
||||
</g>
|
||||
<path
|
||||
style="color:#000000;fill:#5ca7ff;stroke-linecap:round;stroke-linejoin:bevel;stroke-dashoffset:5.6;-inkscape-stroke:none;paint-order:stroke fill markers"
|
||||
d="M 10.304688,1.3828125 9.9746094,1.7128906 V 13.605469 l 0.3300786,0.330078 h 2.830078 l 0.330078,-0.330078 V 1.7128906 L 13.134766,1.3828125 Z m 0.330078,0.6601563 h 2.169922 V 13.277344 h -2.169922 z"
|
||||
id="rect1107-9" />
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.9 KiB |
@@ -7,13 +7,11 @@
|
||||
version="1.1"
|
||||
id="svg12"
|
||||
sodipodi:docname="evade.svg"
|
||||
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
|
||||
inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs16" />
|
||||
<sodipodi:namedview
|
||||
id="namedview14"
|
||||
pagecolor="#ffffff"
|
||||
@@ -27,40 +25,48 @@
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0"
|
||||
inkscape:zoom="23.771429"
|
||||
inkscape:cx="11.757812"
|
||||
inkscape:cy="9.4020433"
|
||||
inkscape:zoom="33.617877"
|
||||
inkscape:cx="16.761915"
|
||||
inkscape:cy="9.1469191"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1017"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-height="1009"
|
||||
inkscape:window-x="1912"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg12" />
|
||||
<path
|
||||
inkscape:current-layer="path4"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:deskcolor="#505050" />
|
||||
<defs
|
||||
id="defs16" />
|
||||
<path
|
||||
d="m 0.02182384,14.515426 c -0.0453,0.1119 -0.01864,0.2398 0.06662,0.325 0.08526,0.0853 0.21314,0.1119 0.32505,0.0666 l 1.95830996,-0.7833 c 0.15188,-0.0613 0.2891,-0.1505 0.405,-0.2664 l 1.02578,-1.0258 3.03735,0.7993 -0.2504,0.2504 c -0.1772,0.1772 -0.1772,0.4623 0,0.6395 0.1772,0.1772 0.4623,0.1772 0.6394,0 l 0.7461,-0.746 0.4263,-0.4263 0.3197,-0.3198 c 0.1772,-0.1771 0.1772,-0.4622 0,-0.6394 -0.1772,-0.1772 -0.4623,-0.1772 -0.6395,0 l -0.1065,0.1066 -1.9184,-1.9184 0.4356,-0.4356 1.4628,0.0959 c 0.0866,0.0066 0.1718,-0.0253 0.2331,-0.0866 l 0.2132,-0.2130999 c 0.1172,-0.1173 0.1172,-0.3091 0,-0.4263 l -1.2789,-1.2789 -0.8526,0.8526 c -0.1173,0.1172 -0.3091,0.1172 -0.4263,0 -0.1173,-0.1173 -0.1173,-0.3091 0,-0.4263 l 0.8526,-0.8526 -1.2789,-1.2789 c -0.1173,-0.1173 -0.3091,-0.1173 -0.4263,0 l -0.2132,0.2131 c -0.0613,0.0613 -0.0933,0.1465 -0.0866,0.2331 l 0.0959,1.4628 -0.4356,0.4356 -1.91834,-1.9183 0.10657,-0.1066 c 0.17717,-0.1772 0.17717,-0.4623 0,-0.6395 -0.17717,-0.1771 -0.46228,-0.1771 -0.63945,0 l -0.31972,0.3198 -0.4263,0.4263 -0.74602996,0.746 c -0.17717,0.1772 -0.17717,0.4623 0,0.6394 0.17717,0.1772 0.46228,0.1772 0.63944996,0 l 0.25041,-0.2504 0.79936,3.0373999 -1.02578,1.0258 c -0.11590996,0.1159 -0.20516996,0.2531 -0.26644996,0.405 z"
|
||||
fill="#5ca7ff"
|
||||
id="path2"
|
||||
style="stroke: none"/>
|
||||
<path
|
||||
d="m 9.0916338,5.3111261 c 2.5638002,-2.3307 8.3905002,-6.43275 11.1873002,-4.19528 3.4961,2.79688 4.1953,9.0895799 -2.7968,16.7808799"
|
||||
stroke="#5ca7ff"
|
||||
stroke-linecap="round"
|
||||
stroke-dasharray="2, 2"
|
||||
id="path4"
|
||||
style="fill:none" />
|
||||
<path
|
||||
id="path2"
|
||||
style="stroke: none" />
|
||||
<g
|
||||
id="path4">
|
||||
<path
|
||||
style="color:#000000;fill:#000000;stroke-linecap:round;stroke-dasharray:2, 2;-inkscape-stroke:none"
|
||||
d="M 9.09163,5.31113 C 9.52102,4.92078 10.0419,4.48075 10.6248,4.02913 m 1.6233,-1.1672 c 0.5514,-0.36616 1.1277,-0.71785 1.7123,-1.03361 m 1.8146,-0.838 c 0.6645,-0.249206 1.3176,-0.42323 1.9345,-0.490428 m 1.9608,0.245768 c 0.2155,0.095942 0.419,0.218495 0.6086,0.37019 0.3338,0.26698 0.642,0.56583 0.9205,0.8947 m 1.0464,1.69552 c 0.2526,0.58814 0.4328,1.23087 0.5286,1.92301 m 0.0433,1.99609 c -0.0542,0.62718 -0.1704,1.28349 -0.3551,1.96621 m -0.661,1.88542 c -0.249,0.5812 -0.5452,1.1777 -0.8919,1.7881 m -1.0681,1.6909 c -0.3638,0.5236 -0.764,1.0559 -1.2023,1.596 m -1.1572,1.3449"
|
||||
id="path1" />
|
||||
<path
|
||||
style="color:#000000;fill:#5ca7ff;stroke-linecap:round;stroke-dasharray:2, 2;-inkscape-stroke:none"
|
||||
d="m 17.644531,0.00390625 -0.242187,0.03125 -0.253907,0.04296875 -0.255859,0.05273437 -0.255859,0.0625 -0.259766,0.0703125 -0.257812,0.078125 -0.259766,0.0859375 -0.253906,0.0917969 a 0.5,0.5 0 0 0 -0.300781,0.64062495 0.5,0.5 0 0 0 0.640625,0.3007813 l 0.242187,-0.087891 0.234375,-0.078125 0.232422,-0.070312 0.230469,-0.0625 0.224609,-0.054687 0.222656,-0.046875 0.21875,-0.035156 0.222656,-0.0292968 A 0.5,0.5 0 0 0 18.205078,0.43554688 0.5,0.5 0 0 0 17.644531,0.00390625 Z m 1.853516,0.27148438 a 0.5,0.5 0 0 0 -0.28125,0.25976562 0.5,0.5 0 0 0 0.242187,0.66406245 l 0.07422,0.033203 0.06445,0.033203 0.06445,0.035156 0.0625,0.037109 0.0625,0.039063 0.06055,0.041016 0.06055,0.042969 0.05859,0.046875 0.115234,0.091797 0.111328,0.097656 0.111328,0.099609 0.107422,0.1015625 0.105469,0.1054688 0.101563,0.1074218 0.101562,0.109375 0.101563,0.1171875 a 0.5,0.5 0 0 0 0.705078,0.050781 0.5,0.5 0 0 0 0.04883,-0.7050782 l -0.109375,-0.1269531 -0.117188,-0.1289062 -0.11914,-0.125 -0.123047,-0.1210938 -0.125,-0.1191406 -0.126953,-0.11523437 -0.13086,-0.11328125 -0.134765,-0.10937501 -0.08398,-0.0644531 -0.08594,-0.0625 -0.08789,-0.0585938 -0.08789,-0.0566406 -0.0918,-0.0527344 -0.0918,-0.0507813 -0.0918,-0.046875 -0.08789,-0.0390625 A 0.5,0.5 0 0 0 19.498047,0.27539063 Z M 14.099609,1.3496094 A 0.5,0.5 0 0 0 13.71875,1.390625 l -0.220703,0.1210937 -0.222656,0.1269532 -0.222657,0.1289062 -0.220703,0.1308594 -0.216797,0.1347656 -0.216796,0.1347657 -0.214844,0.1386718 -0.210938,0.1367188 a 0.5,0.5 0 0 0 -0.142578,0.6933594 0.5,0.5 0 0 0 0.69336,0.1425781 l 0.205078,-0.1347656 0.205078,-0.1328125 0.208984,-0.1289063 0.208985,-0.1289062 0.208984,-0.125 0.212891,-0.1230469 0.210937,-0.1210938 0.216797,-0.1171875 A 0.5,0.5 0 0 0 14.398438,1.5878906 0.5,0.5 0 0 0 14.099609,1.3496094 Z m 7.957032,1.8945312 a 0.5,0.5 0 0 0 -0.273438,0.6503907 l 0.08789,0.2167968 0.07813,0.2109375 0.07227,0.2167969 0.06445,0.2226562 0.05859,0.2265625 0.05273,0.2324219 0.04492,0.2363281 0.03711,0.2480469 a 0.5,0.5 0 0 0 0.572265,0.4179688 0.5,0.5 0 0 0 0.416016,-0.5703125 l -0.04102,-0.265625 -0.05078,-0.2695313 -0.05859,-0.2636719 -0.06641,-0.2578125 -0.07422,-0.2558593 -0.08398,-0.2480469 -0.08984,-0.2441406 -0.09375,-0.2304688 A 0.5,0.5 0 0 0 22.056641,3.2441406 Z M 10.316406,3.6347656 10.099609,3.8046875 9.8867188,3.9765625 9.6796875,4.1445312 9.4785156,4.3105469 9.1015625,4.6328125 8.7597656,4.9375 A 0.5,0.5 0 0 0 8.71875,5.6425781 0.5,0.5 0 0 0 9.4238281,5.6855469 L 9.7597656,5.3867187 10.123047,5.0761719 10.314453,4.9160156 10.513672,4.7539062 10.71875,4.5898437 10.933594,4.4238281 a 0.5,0.5 0 0 0 0.08594,-0.703125 0.5,0.5 0 0 0 -0.703125,-0.085937 z m 12.550781,3.4921875 a 0.5,0.5 0 0 0 -0.546875,0.4492188 l -0.02344,0.2304687 -0.02734,0.2285157 -0.0332,0.2304687 -0.03906,0.2324219 -0.04492,0.2363281 -0.05078,0.2402344 -0.05859,0.2421875 -0.06445,0.2480469 a 0.5,0.5 0 0 0 0.359375,0.6093752 0.5,0.5 0 0 0 0.609375,-0.3574221 l 0.06641,-0.2597656 0.0625,-0.2636719 0.05664,-0.2597656 0.04883,-0.2578125 0.04297,-0.2558594 0.03711,-0.2519531 0.0293,-0.2519532 0.02344,-0.2421875 a 0.5,0.5 0 0 0 -0.447266,-0.546875 z m -1.248046,3.8847659 a 0.5,0.5 0 0 0 -0.275391,0.265625 l -0.09375,0.214844 -0.09766,0.21289 -0.101563,0.214844 -0.105469,0.216797 -0.111328,0.21875 -0.115234,0.21875 -0.119141,0.220703 -0.126953,0.226562 a 0.5,0.5 0 0 0 0.19336,0.679688 0.5,0.5 0 0 0 0.679687,-0.191406 l 0.128906,-0.232422 0.126953,-0.232422 0.121094,-0.232422 0.117188,-0.230469 0.111328,-0.228515 0.109375,-0.228516 0.101562,-0.226562 0.09766,-0.220704 a 0.5,0.5 0 0 0 -0.257813,-0.658203 0.5,0.5 0 0 0 -0.382812,-0.0078 z m -1.488282,3.537109 a 0.5,0.5 0 0 0 -0.697265,0.117188 l -0.277344,0.390625 -0.287109,0.390625 -0.302735,0.392578 -0.318359,0.40039 a 0.5,0.5 0 0 0 0.08008,0.703125 0.5,0.5 0 0 0 0.703125,-0.08008 l 0.324219,-0.40625 0.3125,-0.408203 0.298828,-0.40625 L 20.25,15.244141 a 0.5,0.5 0 0 0 -0.119141,-0.695313 z"
|
||||
id="path3" />
|
||||
</g>
|
||||
<path
|
||||
d="m 14.783034,12.805026 -0.1001,0.8985 0.9106,-0.2539 0.0806,0.6152 -0.8301,0.0586 0.5444,0.7251 -0.5542,0.2954 -0.3808,-0.7642 -0.3345,0.7593 -0.5762,-0.2905 0.5396,-0.7251 -0.8252,-0.0635 0.0952,-0.6103 0.8911,0.2539 -0.1001,-0.8985 z"
|
||||
fill="#5ca7ff"
|
||||
id="path6"
|
||||
style="stroke: none"/>
|
||||
<path
|
||||
id="path6"
|
||||
style="stroke: none" />
|
||||
<path
|
||||
d="m 13.384534,7.2113261 -0.1001,0.8984 0.9107,-0.2539 0.0805,0.6152 -0.83,0.0586 0.5444,0.7251 -0.5542,0.2954 -0.3809,-0.7641 -0.3344,0.7593 -0.5762,-0.2906 0.5395,-0.7251 -0.8252,-0.0634 0.0953,-0.6104 0.8911,0.2539 -0.1001,-0.8984 z"
|
||||
fill="#5ca7ff"
|
||||
id="path8"
|
||||
style="stroke: none"/>
|
||||
<path
|
||||
id="path8"
|
||||
style="stroke: none" />
|
||||
<path
|
||||
d="m 18.977834,7.2113261 -0.1001,0.8984 0.9106,-0.2539 0.0806,0.6152 -0.8301,0.0586 0.5445,0.7251 -0.5542,0.2954 -0.3809,-0.7641 -0.3345,0.7593 -0.5761,-0.2906 0.5395,-0.7251 -0.8252,-0.0634 0.0952,-0.6104 0.8911,0.2539 -0.1001,-0.8984 z"
|
||||
fill="#5ca7ff"
|
||||
id="path10"
|
||||
style="stroke: none"/>
|
||||
id="path10"
|
||||
style="stroke: none" />
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 8.2 KiB |
@@ -7,13 +7,11 @@
|
||||
version="1.1"
|
||||
id="svg12"
|
||||
sodipodi:docname="manoeuvre.svg"
|
||||
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
|
||||
inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs16" />
|
||||
<sodipodi:namedview
|
||||
id="namedview14"
|
||||
pagecolor="#ffffff"
|
||||
@@ -31,21 +29,22 @@
|
||||
inkscape:cx="11.757812"
|
||||
inkscape:cy="9.4020431"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1017"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-height="1009"
|
||||
inkscape:window-x="1912"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg12" />
|
||||
<path
|
||||
inkscape:current-layer="svg12"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:deskcolor="#505050" />
|
||||
<defs
|
||||
id="defs16" />
|
||||
<path
|
||||
d="m 0.02182384,14.515426 c -0.0453,0.1119 -0.01864,0.2398 0.06662,0.325 0.08526,0.0853 0.21314,0.1119 0.32505,0.0666 l 1.95830996,-0.7833 c 0.15188,-0.0613 0.2891,-0.1505 0.405,-0.2664 l 1.02578,-1.0258 3.03735,0.7993 -0.2504,0.2504 c -0.1772,0.1772 -0.1772,0.4623 0,0.6395 0.1772,0.1772 0.4623,0.1772 0.6394,0 l 0.7461,-0.746 0.4263,-0.4263 0.3197,-0.3198 c 0.1772,-0.1771 0.1772,-0.4622 0,-0.6394 -0.1772,-0.1772 -0.4623,-0.1772 -0.6395,0 l -0.1065,0.1066 -1.9184,-1.9184 0.4356,-0.4356 1.4628,0.0959 c 0.0866,0.0066 0.1718,-0.0253 0.2331,-0.0866 l 0.2132,-0.2130999 c 0.1172,-0.1173 0.1172,-0.3091 0,-0.4263 l -1.2789,-1.2789 -0.8526,0.8526 c -0.1173,0.1172 -0.3091,0.1172 -0.4263,0 -0.1173,-0.1173 -0.1173,-0.3091 0,-0.4263 l 0.8526,-0.8526 -1.2789,-1.2789 c -0.1173,-0.1173 -0.3091,-0.1173 -0.4263,0 l -0.2132,0.2131 c -0.0613,0.0613 -0.0933,0.1465 -0.0866,0.2331 l 0.0959,1.4628 -0.4356,0.4356 -1.91834,-1.9183 0.10657,-0.1066 c 0.17717,-0.1772 0.17717,-0.4623 0,-0.6395 -0.17717,-0.1771 -0.46228,-0.1771 -0.63945,0 l -0.31972,0.3198 -0.4263,0.4263 -0.74602996,0.746 c -0.17717,0.1772 -0.17717,0.4623 0,0.6394 0.17717,0.1772 0.46228,0.1772 0.63944996,0 l 0.25041,-0.2504 0.79936,3.0373999 -1.02578,1.0258 c -0.11590996,0.1159 -0.20516996,0.2531 -0.26644996,0.405 z"
|
||||
fill="#5ca7ff"
|
||||
id="path2"
|
||||
style="stroke: none"/>
|
||||
id="path2"
|
||||
style="stroke: none" />
|
||||
<path
|
||||
d="m 9.0916338,5.3111261 c 2.5638002,-2.3307 8.3905002,-6.43275 11.1873002,-4.19528 3.4961,2.79688 4.1953,9.0895799 -2.7968,16.7808799"
|
||||
stroke="#5ca7ff"
|
||||
stroke-linecap="round"
|
||||
stroke-dasharray="2, 2"
|
||||
id="path4"
|
||||
style="fill:none" />
|
||||
style="color:#000000;fill:#5ca7ff;stroke-linecap:round;stroke-dasharray:2, 2;-inkscape-stroke:none"
|
||||
d="m 17.644531,0.00390625 -0.242187,0.03125 -0.253907,0.04296875 -0.255859,0.05273437 -0.255859,0.0625 -0.259766,0.0703125 -0.257812,0.078125 -0.259766,0.0859375 -0.253906,0.0917969 a 0.5,0.5 0 0 0 -0.300781,0.64062495 0.5,0.5 0 0 0 0.640625,0.3007813 l 0.242187,-0.087891 0.234375,-0.078125 0.232422,-0.070312 0.230469,-0.0625 0.224609,-0.054687 0.222656,-0.046875 0.21875,-0.035156 0.222656,-0.0292968 A 0.5,0.5 0 0 0 18.205078,0.43554688 0.5,0.5 0 0 0 17.644531,0.00390625 Z m 1.853516,0.27148438 a 0.5,0.5 0 0 0 -0.28125,0.25976562 0.5,0.5 0 0 0 0.242187,0.66406245 l 0.07422,0.033203 0.06445,0.033203 0.06445,0.035156 0.0625,0.037109 0.0625,0.039063 0.06055,0.041016 0.06055,0.042969 0.05859,0.046875 0.115234,0.091797 0.111328,0.097656 0.111328,0.099609 0.107422,0.1015625 0.105469,0.1054688 0.101563,0.1074218 0.101562,0.109375 0.101563,0.1171875 a 0.5,0.5 0 0 0 0.705078,0.050781 0.5,0.5 0 0 0 0.04883,-0.7050782 l -0.109375,-0.1269531 -0.117188,-0.1289062 -0.11914,-0.125 -0.123047,-0.1210938 -0.125,-0.1191406 -0.126953,-0.11523437 -0.13086,-0.11328125 -0.134765,-0.10937501 -0.08398,-0.0644531 -0.08594,-0.0625 -0.08789,-0.0585938 -0.08789,-0.0566406 -0.0918,-0.0527344 -0.0918,-0.0507813 -0.0918,-0.046875 -0.08789,-0.0390625 A 0.5,0.5 0 0 0 19.498047,0.27539063 Z M 14.099609,1.3496094 A 0.5,0.5 0 0 0 13.71875,1.390625 l -0.220703,0.1210937 -0.222656,0.1269532 -0.222657,0.1289062 -0.220703,0.1308594 -0.216797,0.1347656 -0.216796,0.1347657 -0.214844,0.1386718 -0.210938,0.1367188 a 0.5,0.5 0 0 0 -0.142578,0.6933594 0.5,0.5 0 0 0 0.69336,0.1425781 l 0.205078,-0.1347656 0.205078,-0.1328125 0.208984,-0.1289063 0.208985,-0.1289062 0.208984,-0.125 0.212891,-0.1230469 0.210937,-0.1210938 0.216797,-0.1171875 A 0.5,0.5 0 0 0 14.398438,1.5878906 0.5,0.5 0 0 0 14.099609,1.3496094 Z m 7.957032,1.8945312 a 0.5,0.5 0 0 0 -0.273438,0.6503907 l 0.08789,0.2167968 0.07813,0.2109375 0.07227,0.2167969 0.06445,0.2226562 0.05859,0.2265625 0.05273,0.2324219 0.04492,0.2363281 0.03711,0.2480469 a 0.5,0.5 0 0 0 0.572265,0.4179688 0.5,0.5 0 0 0 0.416016,-0.5703125 l -0.04102,-0.265625 -0.05078,-0.2695313 -0.05859,-0.2636719 -0.06641,-0.2578125 -0.07422,-0.2558593 -0.08398,-0.2480469 -0.08984,-0.2441406 -0.09375,-0.2304688 A 0.5,0.5 0 0 0 22.056641,3.2441406 Z M 10.316406,3.6347656 10.099609,3.8046875 9.8867188,3.9765625 9.6796875,4.1445312 9.4785156,4.3105469 9.1015625,4.6328125 8.7597656,4.9375 A 0.5,0.5 0 0 0 8.71875,5.6425781 0.5,0.5 0 0 0 9.4238281,5.6855469 L 9.7597656,5.3867187 10.123047,5.0761719 10.314453,4.9160156 10.513672,4.7539062 10.71875,4.5898437 10.933594,4.4238281 a 0.5,0.5 0 0 0 0.08594,-0.703125 0.5,0.5 0 0 0 -0.703125,-0.085937 z m 12.550781,3.4921875 a 0.5,0.5 0 0 0 -0.546875,0.4492188 l -0.02344,0.2304687 -0.02734,0.2285157 -0.0332,0.2304687 -0.03906,0.2324219 -0.04492,0.2363281 -0.05078,0.2402344 -0.05859,0.2421875 -0.06445,0.2480469 a 0.5,0.5 0 0 0 0.359375,0.6093752 0.5,0.5 0 0 0 0.609375,-0.3574221 l 0.06641,-0.2597656 0.0625,-0.2636719 0.05664,-0.2597656 0.04883,-0.2578125 0.04297,-0.2558594 0.03711,-0.2519531 0.0293,-0.2519532 0.02344,-0.2421875 a 0.5,0.5 0 0 0 -0.447266,-0.546875 z m -1.248046,3.8847659 a 0.5,0.5 0 0 0 -0.275391,0.265625 l -0.09375,0.214844 -0.09766,0.21289 -0.101563,0.214844 -0.105469,0.216797 -0.111328,0.21875 -0.115234,0.21875 -0.119141,0.220703 -0.126953,0.226562 a 0.5,0.5 0 0 0 0.19336,0.679688 0.5,0.5 0 0 0 0.679687,-0.191406 l 0.128906,-0.232422 0.126953,-0.232422 0.121094,-0.232422 0.117188,-0.230469 0.111328,-0.228515 0.109375,-0.228516 0.101562,-0.226562 0.09766,-0.220704 a 0.5,0.5 0 0 0 -0.257813,-0.658203 0.5,0.5 0 0 0 -0.382812,-0.0078 z m -1.488282,3.537109 a 0.5,0.5 0 0 0 -0.697265,0.117188 l -0.277344,0.390625 -0.287109,0.390625 -0.302735,0.392578 -0.318359,0.40039 a 0.5,0.5 0 0 0 0.08008,0.703125 0.5,0.5 0 0 0 0.703125,-0.08008 l 0.324219,-0.40625 0.3125,-0.408203 0.298828,-0.40625 L 20.25,15.244141 a 0.5,0.5 0 0 0 -0.119141,-0.695313 z"
|
||||
id="path4" />
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 6.5 KiB |
@@ -7,13 +7,11 @@
|
||||
version="1.1"
|
||||
id="svg14"
|
||||
sodipodi:docname="passive.svg"
|
||||
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
|
||||
inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs18" />
|
||||
<sodipodi:namedview
|
||||
id="namedview16"
|
||||
pagecolor="#ffffff"
|
||||
@@ -28,42 +26,45 @@
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0"
|
||||
inkscape:zoom="23.771429"
|
||||
inkscape:cx="11.631611"
|
||||
inkscape:cy="6.7518029"
|
||||
inkscape:cx="11.589543"
|
||||
inkscape:cy="6.7518028"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1017"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-height="1009"
|
||||
inkscape:window-x="1912"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg14" />
|
||||
<path
|
||||
inkscape:current-layer="svg14"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:deskcolor="#505050" />
|
||||
<defs
|
||||
id="defs18" />
|
||||
<path
|
||||
d="M 0.1977,6.4546 C 0.07745,6.5055 0,6.6237 0,6.7542 0,6.8846 0.07745,7.0028 0.1977,7.0538 l 2.09719,0.8987 c 0.16304,0.0694 0.33629,0.106 0.51361,0.106 h 1.5693 l 1.712,2.9349 H 5.7067 c -0.2711,0 -0.4892,0.2181 -0.4892,0.4891 0,0.2711 0.2181,0.4892 0.4892,0.4892 H 6.848 7.5002 7.9893 c 0.2711,0 0.4892,-0.2181 0.4892,-0.4892 0,-0.271 -0.2181,-0.4891 -0.4892,-0.4891 H 7.8263 V 8.0585 h 0.6664 l 1.0456,1.1923 c 0.0611,0.0713 0.1508,0.1121 0.2445,0.1121 h 0.3261 c 0.1794,0 0.3261,-0.1467 0.3261,-0.3261 V 7.0802 H 9.1306 c -0.1793,0 -0.326,-0.1467 -0.326,-0.326 0,-0.1794 0.1467,-0.3261 0.326,-0.3261 H 10.435 V 4.4715 c 0,-0.1794 -0.1467,-0.3261 -0.3261,-0.3261 H 9.7828 c -0.0937,0 -0.1834,0.0407 -0.2445,0.112 L 8.4927,5.4498 H 7.8263 V 2.5149 h 0.163 c 0.2711,0 0.4892,-0.2181 0.4892,-0.4891 0,-0.2711 -0.2181,-0.4892 -0.4892,-0.4892 H 7.5002 6.848 5.7067 c -0.2711,0 -0.4892,0.2181 -0.4892,0.4892 0,0.271 0.2181,0.4891 0.4892,0.4891 H 6.0898 L 4.3778,5.4498 H 2.8085 c -0.17732,0 -0.35057,0.0367 -0.51361,0.106 z"
|
||||
fill="#5ca7ff"
|
||||
id="path2"
|
||||
style="stroke: none"/>
|
||||
<path
|
||||
d="M 12.8398,6.5498 H 23.2749"
|
||||
stroke="#5ca7ff"
|
||||
stroke-dasharray="2, 2"
|
||||
id="path2"
|
||||
style="stroke: none" />
|
||||
<path
|
||||
style="color:#000000;fill:#5ca7ff;stroke-dasharray:2, 2;-inkscape-stroke:none"
|
||||
d="m 12.839844,6.0488281 v 1 h 2 v -1 z m 4,0 v 1 h 2 v -1 z m 4,0 v 1 h 2 v -1 z"
|
||||
id="path4" />
|
||||
<path
|
||||
<path
|
||||
d="m 16.4116,9 -0.1,0.8984 0.9106,-0.2539 0.0806,0.6152 -0.8301,0.0586 0.5444,0.7251 -0.5542,0.2955 L 16.0821,10.5747 15.7476,11.334 15.1714,11.0434 15.711,10.3183 14.8858,10.2549 14.981,9.6445 15.8721,9.8984 15.772,9 Z"
|
||||
fill="#5ca7ff"
|
||||
id="path6"
|
||||
style="stroke: none"/>
|
||||
<path
|
||||
id="path6"
|
||||
style="stroke: none" />
|
||||
<path
|
||||
d="m 21.4116,10.6582 -0.1,0.8984 0.9106,-0.2539 0.0806,0.6153 -0.8301,0.0585 0.5444,0.7251 -0.5542,0.2955 -0.3808,-0.7642 -0.3345,0.7593 -0.5762,-0.2906 0.5396,-0.7251 -0.8252,-0.0634 0.0952,-0.6104 0.8911,0.2539 -0.1001,-0.8984 z"
|
||||
fill="#5ca7ff"
|
||||
id="path8"
|
||||
style="stroke: none"/>
|
||||
<path
|
||||
id="path8"
|
||||
style="stroke: none" />
|
||||
<path
|
||||
d="m 21.4116,0 -0.1,0.8984 0.9106,-0.2539 0.0806,0.6152 -0.8301,0.0586 0.5444,0.7251 L 21.4629,2.3389 21.0821,1.5747 20.7476,2.334 20.1714,2.0434 20.711,1.3183 19.8858,1.2549 19.981,0.6445 20.8721,0.8984 20.772,0 Z"
|
||||
fill="#5ca7ff"
|
||||
id="path10"
|
||||
style="stroke: none"/>
|
||||
<path
|
||||
id="path10"
|
||||
style="stroke: none" />
|
||||
<path
|
||||
d="m 16.4116,1.6582 -0.1,0.8984 0.9106,-0.2539 0.0806,0.6153 -0.8301,0.0585 0.5444,0.7251 L 16.4629,3.9971 16.0821,3.2329 15.7476,3.9922 15.1714,3.7016 15.711,2.9765 14.8858,2.9131 14.981,2.3027 15.8721,2.5566 15.772,1.6582 Z"
|
||||
fill="#5ca7ff"
|
||||
id="path12"
|
||||
style="stroke: none"/>
|
||||
id="path12"
|
||||
style="stroke: none" />
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 3.6 KiB |
@@ -1,13 +1,13 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
width="21.327999"
|
||||
height="21.327999"
|
||||
width="16"
|
||||
height="16"
|
||||
fill="none"
|
||||
version="1.1"
|
||||
viewBox="0 0 21.327999 21.327999"
|
||||
viewBox="0 0 16 16"
|
||||
id="svg7226"
|
||||
sodipodi:docname="airbase.svg"
|
||||
inkscape:version="1.2.2 (732a01da63, 2022-12-09)"
|
||||
inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
@@ -27,11 +27,11 @@
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
showgrid="false"
|
||||
inkscape:zoom="26.15625"
|
||||
inkscape:cx="10.666667"
|
||||
inkscape:cy="10.666667"
|
||||
inkscape:zoom="36.990523"
|
||||
inkscape:cx="13.692696"
|
||||
inkscape:cy="7.4208196"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1017"
|
||||
inkscape:window-height="1009"
|
||||
inkscape:window-x="1912"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
@@ -48,28 +48,15 @@
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<path
|
||||
d="m 10.664,18.4362 c 4.2922,0 7.7717,-3.4796 7.7717,-7.7717 0,-4.2921 -3.4796,-7.7717 -7.7717,-7.7717 -4.2921,0 -7.7717,3.4796 -7.7717,7.7717 0,4.2921 3.4796,7.7717 7.7717,7.7717 z m 0,2.8918 c 5.8893,0 10.664,-4.7742 10.664,-10.664 C 21.328,4.7742 16.5538,0 10.664,0 4.7742,0 0,4.7742 0,10.664 0,16.5538 4.7742,21.328 10.664,21.328 Z"
|
||||
clip-rule="evenodd"
|
||||
fill-rule="evenodd"
|
||||
stroke-width="0"
|
||||
fill="black"
|
||||
id="path7220" />
|
||||
<line
|
||||
x1="7.796"
|
||||
x2="13.187"
|
||||
y1="6.8541994"
|
||||
y2="14.231199"
|
||||
stroke="black"
|
||||
stroke-linecap="square"
|
||||
style="fill:none;"
|
||||
style="color:#000000;fill:#000000;stroke-linecap:square;-inkscape-stroke:none"
|
||||
d="M 5.921875,4.6113281 5.3164062,5.0527344 5.5371094,5.3554687 9.5761719,10.880859 9.796875,11.183594 10.400391,10.740234 10.179688,10.439453 6.1425781,4.9140625 Z"
|
||||
id="line7222" />
|
||||
<line
|
||||
x1="14.397999"
|
||||
x2="7.8680005"
|
||||
y1="11.885201"
|
||||
y2="11.450199"
|
||||
stroke="black"
|
||||
stroke-linecap="square"
|
||||
style="fill:none;"
|
||||
<path
|
||||
style="color:#000000;fill:#000000;stroke-linecap:square;-inkscape-stroke:none"
|
||||
d="m 5.5449219,8.1777344 -0.050781,0.7480469 0.375,0.025391 4.8906254,0.3242187 0.373047,0.025391 0.05078,-0.7480469 L 10.810547,8.5292969 5.9179687,8.203125 Z"
|
||||
id="line7224" />
|
||||
<path
|
||||
style="color:#000000;fill:#000000;stroke-linejoin:round;-inkscape-stroke:none;paint-order:stroke fill markers"
|
||||
d="m 8.0019531,0.08203125 c -4.3734295,0 -7.9472656,3.57383615 -7.9472656,7.94726565 0,4.3734291 3.5738361,7.9472661 7.9472656,7.9472661 4.3734299,0 7.9472659,-3.573837 7.9472659,-7.9472661 0,-4.3734295 -3.573836,-7.94726565 -7.9472659,-7.94726565 z m 0,2.69726565 c 2.9157129,0 5.2499999,2.3342873 5.2499999,5.25 0,2.9157131 -2.334287,5.2500001 -5.2499999,5.2500001 -2.9157126,0 -5.25,-2.334287 -5.25,-5.2500001 0,-2.9157127 2.3342874,-5.25 5.25,-5.25 z"
|
||||
id="path3" />
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.6 KiB |
|
Before Width: | Height: | Size: 9.8 KiB After Width: | Height: | Size: 9.2 KiB |
|
Before Width: | Height: | Size: 8.8 KiB After Width: | Height: | Size: 8.6 KiB |
@@ -1,20 +1,20 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
|
||||
inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
|
||||
sodipodi:docname="human.svg"
|
||||
id="svg6"
|
||||
version="1.1"
|
||||
fill="none"
|
||||
viewBox="0 0 12.14064 10.677204"
|
||||
height="10.677204"
|
||||
width="12.14064">
|
||||
width="12.14064"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
||||
<metadata
|
||||
id="metadata8">
|
||||
<rdf:RDF>
|
||||
@@ -23,7 +23,7 @@
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
@@ -39,11 +39,11 @@
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-x="1912"
|
||||
inkscape:window-height="1017"
|
||||
inkscape:window-height="1009"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:cy="3.5052403"
|
||||
inkscape:cx="-1.3921341"
|
||||
inkscape:zoom="27.733334"
|
||||
inkscape:cy="6.71199"
|
||||
inkscape:cx="5.7558661"
|
||||
inkscape:zoom="78.441714"
|
||||
showgrid="false"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:pageopacity="0.0"
|
||||
@@ -51,17 +51,12 @@
|
||||
borderopacity="1.0"
|
||||
bordercolor="#666666"
|
||||
pagecolor="#ffffff"
|
||||
id="namedview8" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccccccc"
|
||||
id="path1359"
|
||||
d="M 1.2277422,10.677204 C 0.50620893,10.667383 0.04230013,10.430984 0.00390353,9.8358148 -0.07761857,7.3028212 1.1300144,6.7967364 2.4770775,6.2662917 l 6.6154506,-0.012246 c 2.4502799,0.2890709 3.0477749,1.846629 3.0477749,3.4797821 0.0127,0.3604432 -0.331282,0.9019572 -1.478805,0.9433762 z"
|
||||
stroke-width="0"
|
||||
style="stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
fill="black" />
|
||||
id="namedview8"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:deskcolor="#505050" />
|
||||
<path
|
||||
fill="black"
|
||||
id="path916"
|
||||
stroke-width="0"
|
||||
stroke-width="0"
|
||||
d="m 5.9808108,5.7908995 c 1.6415273,0 2.9733343,-1.2969197 2.9733343,-2.8954494 C 8.9541451,1.2969203 7.6223381,0 5.9808108,0 4.3392825,0 3.0074758,1.2969203 3.0074758,2.8954501 c 0,1.5985297 1.3318067,2.8954494 2.973335,2.8954494 z M 8.6237741,6.4343342 H 7.4860601 C 7.0276691,6.6394281 6.5176619,6.7560505 5.9808108,6.7560505 5.4439597,6.7560505 4.9360143,6.6394281 4.475561,6.4343342 H 3.3378464 c -1.4598251,0 -2.64296517,1.152148 -2.64296517,2.5737386 v 0.321716 c 0,0.532843 0.44393577,0.9651492 0.99111197,0.9651492 h 8.5896338 c 0.547177,0 0.991112,-0.4323062 0.991112,-0.9651492 v -0.321716 c 0,-1.4215906 -1.18314,-2.5737386 -2.6429649,-2.5737386 z" />
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.4 KiB |
@@ -1 +1,40 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16" viewBox="0 0 512 512"><!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2023 Fonticons, Inc.--><path fill="black" d="M0 224.2C0 100.6 100.2 0 224 0h24c95.2 0 181.2 69.3 197.3 160.2c2.3 13 6.8 25.7 15.1 36l42 52.6c6.2 7.8 9.6 17.4 9.6 27.4c0 24.2-19.6 43.8-43.8 43.8H448v64c0 35.3-28.7 64-64 64H320v32c0 17.7-14.3 32-32 32H96c-17.7 0-32-14.3-32-32V407.3c0-16.7-6.9-32.5-17.1-45.8C16.6 322.4 0 274.1 0 224.2zM224 64c-8.8 0-16 7.2-16 16c0 33-39.9 49.5-63.2 26.2c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6C145.5 152.1 129 192 96 192c-8.8 0-16 7.2-16 16s7.2 16 16 16c33 0 49.5 39.9 26.2 63.2c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0C168.1 286.5 208 303 208 336c0 8.8 7.2 16 16 16s16-7.2 16-16c0-33 39.9-49.5 63.2-26.2c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6C302.5 263.9 319 224 352 224c8.8 0 16-7.2 16-16s-7.2-16-16-16c-33 0-49.5-39.9-26.2-63.2c6.2-6.2 6.2-16.4 0-22.6s-16.4-6.2-22.6 0C279.9 129.5 240 113 240 80c0-8.8-7.2-16-16-16zm-24 96a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm40 80a16 16 0 1 1 32 0 16 16 0 1 1 -32 0z"/></svg>
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
height="16"
|
||||
width="16"
|
||||
viewBox="0 0 16 16"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
sodipodi:docname="olympus.svg"
|
||||
inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs1" />
|
||||
<sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#eeeeee"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:zoom="35.929863"
|
||||
inkscape:cx="5.5803162"
|
||||
inkscape:cy="7.0554123"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1009"
|
||||
inkscape:window-x="1912"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg1" />
|
||||
<!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2023 Fonticons, Inc.-->
|
||||
<path
|
||||
fill="#000000"
|
||||
d="m 0.12088324,6.9633961 c 0,-3.8330142 3.10734636,-6.95276438 6.94656096,-6.95276438 h 0.744276 c 2.9522888,0 5.6192728,2.14909138 6.1185578,4.96803198 0.07132,0.4031484 0.210875,0.7969952 0.468272,1.1164118 l 1.30248,1.6312018 c 0.192271,0.2418893 0.297709,0.5395986 0.297709,0.8497136 0,0.7504767 -0.607824,1.358301 -1.358301,1.358301 h -0.626431 v 1.9847321 c 0,1.094704 -0.890029,1.984732 -1.984732,1.984732 h -1.984732 v 0.992367 c 0,0.548902 -0.443463,0.992365 -0.9923651,0.992365 H 3.0979803 c -0.5489022,0 -0.9923651,-0.443463 -0.9923651,-0.992365 V 12.64159 c 0,-0.51789 -0.2139791,-1.007871 -0.530297,-1.420323 C 0.63567188,10.00872 0.12088324,8.5108657 0.12088324,6.9633961 Z M 7.0674442,1.9953635 c -0.272899,0 -0.4961817,0.2232826 -0.4961817,0.4961818 0,1.0233783 -1.2373571,1.5350675 -1.9599237,0.8125014 -0.1922716,-0.1922715 -0.5085876,-0.1922715 -0.7008591,0 -0.1922697,0.1922691 -0.1922697,0.5085874 0,0.7008565 0.7225667,0.7225673 0.2108786,1.9599243 -0.8124994,1.9599243 -0.2729008,0 -0.4961835,0.2232826 -0.4961835,0.496183 0,0.2729016 0.2232827,0.4961822 0.4961835,0.4961822 1.023378,0 1.5350661,1.237357 0.8124994,1.9599243 -0.1922697,0.1922714 -0.1922697,0.5085874 0,0.7008589 0.1922715,0.1922691 0.5085875,0.1922691 0.7008591,0 0.7225666,-0.7225673 1.9599237,-0.2108781 1.9599237,0.8124991 0,0.272901 0.2232827,0.496184 0.4961817,0.496184 0.2729008,0 0.4961834,-0.223283 0.4961834,-0.496184 0,-1.0233772 1.2373571,-1.5350664 1.9599238,-0.8124991 0.1922696,0.1922691 0.5085876,0.1922691 0.7008586,0 0.19227,-0.1922715 0.19227,-0.5085875 0,-0.7008589 -0.7225662,-0.7225673 -0.210878,-1.9599243 0.8125,-1.9599243 0.272901,0 0.496182,-0.2232806 0.496182,-0.4961822 0,-0.2729004 -0.223281,-0.496183 -0.496182,-0.496183 -1.023378,0 -1.5350662,-1.237357 -0.8125,-1.9599243 0.19227,-0.1922691 0.19227,-0.5085874 0,-0.7008565 -0.192271,-0.1922715 -0.508589,-0.1922715 -0.7008586,0 C 8.8009847,4.0266128 7.5636276,3.5149236 7.5636276,2.4915453 7.5636276,2.2186461 7.340345,1.9953635 7.0674442,1.9953635 Z M 6.3231699,4.9724603 a 0.74427515,0.74427515 0 1 1 0,1.4885502 0.74427515,0.74427515 0 1 1 0,-1.4885502 z m 1.2404577,2.4809166 a 0.49618347,0.49618347 0 1 1 0.9923669,0 0.49618347,0.49618347 0 1 1 -0.9923669,0 z"
|
||||
id="path1"
|
||||
style="stroke-width:0.0310115" />
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 3.4 KiB |
@@ -0,0 +1,36 @@
|
||||
from svgpathtools import svg2paths, wsvg
|
||||
import os
|
||||
from glob import glob
|
||||
import svgelements
|
||||
|
||||
result = [y for x in os.walk(".") for y in glob(os.path.join(x[0], '*.svg'))]
|
||||
|
||||
with open(os.path.join( "..", "..", "..", "..", "src", "ui", "components", "olicons.tsx"), "w") as fp:
|
||||
fp.write('import { IconDefinition, IconName, IconPrefix } from "@fortawesome/fontawesome-svg-core";\n')
|
||||
for filename in result:
|
||||
try:
|
||||
iconName = filename.replace(".", "").replace("\\", "_").removesuffix("svg")
|
||||
iconName = iconName.replace("-", "_")
|
||||
temp = iconName.split('_')
|
||||
iconName = temp[0] + ''.join(ele.capitalize() for ele in temp[1:])
|
||||
|
||||
svg = svgelements.SVG.parse(filename)
|
||||
paths, attributes = svg2paths(filename)
|
||||
|
||||
fp.write(f"export const ol{iconName}: IconDefinition = {{")
|
||||
fp.write(" icon: [")
|
||||
fp.write(f" {svg.implicit_width}, {svg.implicit_height}, [], \"\",")
|
||||
fp.write("\"")
|
||||
|
||||
for path in paths:
|
||||
fp.write(path.d() + " ")
|
||||
|
||||
fp.write("\"")
|
||||
fp.write("]")
|
||||
|
||||
name = temp[0] + ''.join(ele.lower() + '-' for ele in temp[1:]).removesuffix('-')
|
||||
fp.write(f', iconName: "olympus-{name}" as IconName')
|
||||
fp.write(f', prefix: "fas" as IconPrefix')
|
||||
fp.write("}\n")
|
||||
except Exception as e:
|
||||
print(f"Failed to generate path for {iconName}: {e}")
|
||||
@@ -1,101 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="52"
|
||||
height="52"
|
||||
viewBox="0 0 13.758333 13.758333"
|
||||
version="1.1"
|
||||
id="svg5"
|
||||
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
|
||||
sodipodi:docname="target.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview7"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:document-units="mm"
|
||||
showgrid="false"
|
||||
width="52mm"
|
||||
units="px"
|
||||
inkscape:zoom="16.771208"
|
||||
inkscape:cx="31.989348"
|
||||
inkscape:cy="27.63665"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1017"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1" />
|
||||
<defs
|
||||
id="defs2">
|
||||
<linearGradient
|
||||
id="linearGradient4717"
|
||||
inkscape:swatch="solid">
|
||||
<stop
|
||||
style="stop-color:#0cffff;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop4715" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1">
|
||||
<ellipse
|
||||
style="fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1.03188;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:5.6;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
id="path5477"
|
||||
cx="6.8599777"
|
||||
cy="6.8209338"
|
||||
rx="1.9410306"
|
||||
ry="1.948356" />
|
||||
<rect
|
||||
style="fill:#ff5858;fill-opacity:1;stroke:#ffffff;stroke-width:0.79375;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:5.6;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
id="rect3980"
|
||||
width="0.54935014"
|
||||
height="2.6236348"
|
||||
x="6.5846372"
|
||||
y="3.3855996"
|
||||
rx="0.29515001" />
|
||||
<rect
|
||||
style="fill:#ff5858;fill-opacity:1;stroke:#ffffff;stroke-width:0.79375;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:5.6;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
id="rect3980-4"
|
||||
width="0.54935014"
|
||||
height="2.6236348"
|
||||
x="6.5858645"
|
||||
y="7.6347723"
|
||||
rx="0.29515001" />
|
||||
<rect
|
||||
style="fill:#ff5858;fill-opacity:1;stroke:#ffffff;stroke-width:0.79375;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:5.6;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
id="rect3980-47"
|
||||
width="0.54935014"
|
||||
height="2.6236348"
|
||||
x="6.5517845"
|
||||
y="-10.252322"
|
||||
rx="0.29515001"
|
||||
transform="rotate(90)" />
|
||||
<rect
|
||||
style="fill:#ff5858;fill-opacity:1;stroke:#ffffff;stroke-width:0.79375;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:5.6;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
id="rect3980-4-3"
|
||||
width="0.54935014"
|
||||
height="2.6236348"
|
||||
x="6.5530119"
|
||||
y="-6.003149"
|
||||
rx="0.29515001"
|
||||
transform="rotate(90)" />
|
||||
<ellipse
|
||||
style="fill:none;fill-opacity:1;stroke:#ff5858;stroke-width:0.449792;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:5.6;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
id="path5477-2"
|
||||
cx="6.8613305"
|
||||
cy="6.8167095"
|
||||
rx="1.9410306"
|
||||
ry="1.948356" />
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 3.7 KiB |
23
frontend/react/src/ui/components/olbuttongroup.tsx
Normal file
@@ -0,0 +1,23 @@
|
||||
import { IconProp } from "@fortawesome/fontawesome-svg-core";
|
||||
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
||||
import React from "react";
|
||||
|
||||
export function OlButtonGroup(props: {
|
||||
children?: JSX.Element | JSX.Element[]
|
||||
}) {
|
||||
|
||||
|
||||
return <div className="inline-flex rounded-md shadow-sm" >
|
||||
{props.children}
|
||||
</div>
|
||||
}
|
||||
|
||||
export function OlButtonGroupItem(props: {
|
||||
icon: IconProp
|
||||
active: boolean,
|
||||
onClick: () => void
|
||||
}) {
|
||||
return <button onClick={props.onClick} type="button" data-active={props.active} className="h-11 w-11 first-of-type:rounded-s-md last-of-type:rounded-e-md py-2 text-sm font-medium text-gray-900 bg-white border border-gray-200 hover:bg-gray-100 hover:text-blue-700 focus:z-10 focus:ring-2 focus:ring-blue-700 focus:text-blue-700 dark:bg-gray-700 dark:data-[active='true']:bg-blue-500 dark:border-gray-600 dark:text-white dark:hover:text-white dark:hover:bg-gray-500 dark:focus:ring-blue-500 dark:focus:text-white">
|
||||
<FontAwesomeIcon icon={props.icon} />
|
||||
</button>
|
||||
}
|
||||
@@ -2,18 +2,21 @@ import React from "react";
|
||||
import { Coalition } from "../../types/types";
|
||||
|
||||
export function OlCoalitionToggle(props: {
|
||||
coalition: Coalition,
|
||||
coalition: Coalition | undefined,
|
||||
onClick: () => void
|
||||
}) {
|
||||
return <div className="inline-flex items-center cursor-pointer" onClick={props.onClick}>
|
||||
<button className="sr-only peer" />
|
||||
<div data-coalition={props.coalition} className={"relative w-14 h-7 bg-gray-200 peer-focus:outline-none peer-focus:ring-2 peer-focus:ring-blue-300 " +
|
||||
<div data-flash={props.coalition === undefined} data-coalition={props.coalition ?? 'blue'} className={"relative w-14 h-7 bg-gray-200 peer-focus:outline-none peer-focus:ring-2 peer-focus:ring-blue-300 " +
|
||||
"dark:peer-focus:ring-blue-800 rounded-full peer " +
|
||||
" after:content-[''] after:absolute after:top-0.5 after:start-[4px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-6 " +
|
||||
"after:w-6 after:transition-all dark:border-gray-600 " +
|
||||
"data-[coalition='neutral']:after:translate-x-[50%] rtl:data-[coalition='neutral']:after:-translate-x-[50%] data-[coalition='neutral']:after:border-white " +
|
||||
"data-[coalition='red']:after:translate-x-full rtl:data-[coalition='red']:after:-translate-x-full data-[coalition='red']:after:border-white " +
|
||||
" data-[coalition='blue']:bg-blue-600 data-[coalition='neutral']:bg-gray-400 data-[coalition='red']:bg-red-500"}></div>
|
||||
<span className="ms-3 text-sm font-medium text-gray-900 dark:text-gray-300">Coalition ({props.coalition[0].toLocaleUpperCase() + props.coalition.substring(1)})</span>
|
||||
" data-[coalition='blue']:bg-blue-600 data-[coalition='neutral']:bg-gray-400 data-[coalition='red']:bg-red-500"}>
|
||||
</div>
|
||||
<span className="ms-3 text-sm font-medium text-gray-900 dark:text-gray-300 data-[flash='true']:after:animate-pulse">
|
||||
{props.coalition? `Coalition (${props.coalition[0].toLocaleUpperCase() + props.coalition.substring(1)})`: "Different values"}
|
||||
</span>
|
||||
</div>
|
||||
}
|
||||
@@ -74,7 +74,7 @@ export function OlDropdown(props: {
|
||||
})
|
||||
|
||||
return <div className={(props.className ?? "") + " relative"}>
|
||||
<button ref={buttonRef} onClick={() => { setOpen(!open) }} className={"w-full text-white bg-blue-700 hover:bg-blue-800 focus:ring-2 focus:outline-none focus:ring-blue-300 font-medium rounded-lg text-sm px-5 py-2.5 text-center inline-flex items-center justify-between border-[1px] dark:border-gray-600 dark:text-gray-100 dark:bg-gray-700 dark:hover:bg-gray-800 dark:focus:ring-blue-800"} type="button">
|
||||
<button ref={buttonRef} onClick={() => { setOpen(!open) }} className={"w-full text-white bg-blue-700 hover:bg-blue-800 focus:ring-2 focus:outline-none focus:ring-blue-300 font-medium rounded-lg text-sm px-5 py-2.5 text-center inline-flex items-center justify-between border dark:border-gray-600 dark:text-gray-100 dark:bg-gray-700 dark:hover:bg-gray-800 dark:focus:ring-blue-800"} type="button">
|
||||
{props.leftIcon && <FontAwesomeIcon icon={props.leftIcon} className="mr-3" />}
|
||||
<span className="text-nowrap text-ellipsis overflow-hidden">
|
||||
{props.label}
|
||||
|
||||
151
frontend/react/src/ui/components/olicons.tsx
Normal file
@@ -6,9 +6,9 @@ export function OlLabelToggle(props: {
|
||||
rightLabel: string,
|
||||
onClick: () => void
|
||||
}) {
|
||||
return <button onClick={props.onClick} className=" relative flex flex-row flex-none my-auto contents-center justify-between w-32 h-10 border-[1px] dark:border-transparent dark:bg-[#2A3949] rounded-lg py-[5px] px-1 select-none cursor-pointer focus:ring-2 focus:outline-none focus:ring-blue-300 dark:hover:bg-gray-800 dark:focus:ring-blue-800">
|
||||
<span data-toggled={props.toggled} className="absolute my-auto h-[28px] w-[54px] bg-blue-500 rounded-md data-[toggled='true']:translate-x-16 transition-transform"></span>
|
||||
<span data-active={!props.toggled} className="my-auto dark:data-[active='true']:text-white font-normal dark:data-[active='false']:text-gray-400 pl-3 z-ui-2 transition-colors">{props.leftLabel}</span>
|
||||
<span data-active={props.toggled} className="my-auto dark:data-[active='true']:text-white font-normal dark:data-[active='false']:text-gray-400 pr-3 z-ui-2 transition-colors">{props.rightLabel}</span>
|
||||
return <button onClick={props.onClick} className=" relative flex flex-row flex-none my-auto contents-center justify-between w-32 h-10 border dark:border-transparent dark:bg-[#2A3949] rounded-lg py-[5px] px-1 select-none cursor-pointer focus:ring-2 focus:outline-none focus:ring-blue-300 dark:hover:bg-gray-800 dark:focus:ring-blue-800">
|
||||
<span data-flash={props.toggled === undefined} data-toggled={props.toggled ?? false} className="data-[flash='true']:animate-pulse absolute my-auto h-[28px] w-[54px] bg-blue-500 rounded-md data-[toggled='true']:translate-x-16 transition-transform"></span>
|
||||
<span data-active={!(props.toggled ?? false)} className="my-auto dark:data-[active='true']:text-white font-normal dark:data-[active='false']:text-gray-400 pl-3 z-ui-2 transition-colors">{props.leftLabel}</span>
|
||||
<span data-active={props.toggled ?? false} className="my-auto dark:data-[active='true']:text-white font-normal dark:data-[active='false']:text-gray-400 pr-3 z-ui-2 transition-colors">{props.rightLabel}</span>
|
||||
</button>
|
||||
}
|
||||
@@ -21,7 +21,7 @@ export function OlRangeSlider(props: {
|
||||
return <input type="range"
|
||||
ref={elementRef}
|
||||
onChange={props.onChange}
|
||||
value={props.value}
|
||||
value={props.value ?? 0}
|
||||
min={props.min ?? 0}
|
||||
max={props.max ?? 100}
|
||||
step={props.step ?? 1}
|
||||
|
||||
16
frontend/react/src/ui/components/oltoggle.tsx
Normal file
@@ -0,0 +1,16 @@
|
||||
import React from "react";
|
||||
|
||||
export function OlToggle(props: {
|
||||
toggled: boolean | undefined,
|
||||
onClick: () => void
|
||||
}) {
|
||||
return <div className="inline-flex items-center cursor-pointer" onClick={props.onClick}>
|
||||
<button className="sr-only peer" />
|
||||
<div data-flash={props.toggled === undefined} data-toggled={props.toggled ?? false} className={"relative w-14 h-7 bg-gray-200 peer-focus:outline-none peer-focus:ring-2 peer-focus:ring-blue-300 " +
|
||||
"dark:peer-focus:ring-blue-800 rounded-full peer " +
|
||||
" after:content-[''] after:absolute after:top-0.5 after:start-[4px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-6 " +
|
||||
"after:w-6 after:transition-all dark:border-gray-600 " +
|
||||
"data-[toggled='true']:after:translate-x-full rtl:data-[toggled='true']:after:-translate-x-full data-[toggled='true']:after:border-white " +
|
||||
"data-[toggled='false']:bg-gray-500 dark:data-[toggled='true']:bg-blue-500 data-[flash='true']:after:animate-pulse"}></div>
|
||||
</div>
|
||||
}
|
||||
@@ -6,6 +6,7 @@ import { StateConsumer } from '../../statecontext';
|
||||
import { OlDropdownItem, OlDropdown } from '../components/oldropdown';
|
||||
import { OlLabelToggle } from '../components/ollabeltoggle';
|
||||
import { getApp } from '../../olympusapp';
|
||||
import { olButtonsVisibilityAirbase, olButtonsVisibilityAircraft, olButtonsVisibilityDcs, olButtonsVisibilityGroundunit, olButtonsVisibilityGroundunitSam, olButtonsVisibilityHelicopter, olButtonsVisibilityHuman, olButtonsVisibilityNavyunit, olButtonsVisibilityOlympus } from '../components/olicons';
|
||||
|
||||
export function Header() {
|
||||
return <StateConsumer>
|
||||
@@ -23,7 +24,7 @@ export function Header() {
|
||||
<div className="flex flex-row h-fit items-center justify-start gap-2">
|
||||
{
|
||||
Object.entries({
|
||||
'human': faPerson,'olympus': faBrain, 'dcs': faRobot
|
||||
'human': olButtonsVisibilityHuman,'olympus': olButtonsVisibilityOlympus, 'dcs': olButtonsVisibilityDcs
|
||||
}).map((entry) => {
|
||||
return <OlRoundStateButton
|
||||
onClick={() => {
|
||||
@@ -38,8 +39,8 @@ export function Header() {
|
||||
<div className="flex flex-row h-fit items-center justify-start gap-1">
|
||||
{
|
||||
Object.entries({
|
||||
'aircraft': faJetFighter,'helicopter': faHelicopter, 'groundunit-sam': faShieldAlt,
|
||||
'groundunit': faTruck, 'navyunit': faShip, 'airbase': faPlaneDeparture, 'dead': faSkull
|
||||
'aircraft': olButtonsVisibilityAircraft,'helicopter': olButtonsVisibilityHelicopter, 'groundunit-sam': olButtonsVisibilityGroundunitSam,
|
||||
'groundunit': olButtonsVisibilityGroundunit, 'navyunit': olButtonsVisibilityNavyunit, 'airbase': olButtonsVisibilityAirbase, 'dead': faSkull
|
||||
}).map((entry) => {
|
||||
return <OlRoundStateButton
|
||||
onClick={() => {
|
||||
|
||||
@@ -8,6 +8,7 @@ import { getApp } from "../../olympusapp";
|
||||
import { OlUnitEntryList } from "../components/olunitlistentry";
|
||||
import { UnitSpawnMenu } from "./unitspawnmenu";
|
||||
import { UnitBlueprint } from "../../interfaces";
|
||||
import { olButtonsVisibilityAircraft, olButtonsVisibilityGroundunit, olButtonsVisibilityGroundunitSam, olButtonsVisibilityHelicopter, olButtonsVisibilityNavyunit } from "../components/olicons";
|
||||
|
||||
library.add(faPlus);
|
||||
|
||||
@@ -62,7 +63,7 @@ export function SpawnMenu(props: {
|
||||
<div className="flex flex-col gap-1 max-h-80 overflow-y-scroll">
|
||||
{Object.keys(filteredAircraft).map((key) => {
|
||||
const blueprint = getApp().getAircraftDatabase().blueprints[key];
|
||||
return <OlUnitEntryList key={key} icon={faJetFighter} blueprint={blueprint} onClick={() => setBlueprint(blueprint)} />
|
||||
return <OlUnitEntryList key={key} icon={olButtonsVisibilityAircraft} blueprint={blueprint} onClick={() => setBlueprint(blueprint)} />
|
||||
})}
|
||||
</div>
|
||||
</OlAccordion>
|
||||
@@ -70,7 +71,7 @@ export function SpawnMenu(props: {
|
||||
<div className="flex flex-col gap-1 max-h-80 overflow-y-scroll">
|
||||
{Object.keys(filteredHelicopters).map((key) => {
|
||||
const blueprint = getApp().getHelicopterDatabase().blueprints[key];
|
||||
return <OlUnitEntryList key={key} icon={faHelicopter} blueprint={blueprint} onClick={() => setBlueprint(blueprint)} />
|
||||
return <OlUnitEntryList key={key} icon={olButtonsVisibilityHelicopter} blueprint={blueprint} onClick={() => setBlueprint(blueprint)} />
|
||||
})}
|
||||
</div>
|
||||
</OlAccordion>
|
||||
@@ -78,7 +79,7 @@ export function SpawnMenu(props: {
|
||||
<div className="flex flex-col gap-1 max-h-80 overflow-y-scroll">
|
||||
{Object.keys(filteredAirDefense).map((key) => {
|
||||
const blueprint = getApp().getGroundUnitDatabase().blueprints[key];
|
||||
return <OlUnitEntryList key={key} icon={faShieldAlt} blueprint={blueprint} onClick={() => setBlueprint(blueprint)} />
|
||||
return <OlUnitEntryList key={key} icon={olButtonsVisibilityGroundunitSam} blueprint={blueprint} onClick={() => setBlueprint(blueprint)} />
|
||||
})}
|
||||
</div>
|
||||
</OlAccordion>
|
||||
@@ -86,7 +87,7 @@ export function SpawnMenu(props: {
|
||||
<div className="flex flex-col gap-1 max-h-80 overflow-y-scroll">
|
||||
{Object.keys(filteredGroundUnits).map((key) => {
|
||||
const blueprint = getApp().getGroundUnitDatabase().blueprints[key];
|
||||
return <OlUnitEntryList key={key} icon={faTruck} blueprint={blueprint} onClick={() => setBlueprint(blueprint)} />
|
||||
return <OlUnitEntryList key={key} icon={olButtonsVisibilityGroundunit} blueprint={blueprint} onClick={() => setBlueprint(blueprint)} />
|
||||
})}
|
||||
</div>
|
||||
</OlAccordion>
|
||||
@@ -94,7 +95,7 @@ export function SpawnMenu(props: {
|
||||
<div className="flex flex-col gap-1 max-h-80 overflow-y-scroll">
|
||||
{Object.keys(filteredNavyUnits).map((key) => {
|
||||
const blueprint = getApp().getNavyUnitDatabase().blueprints[key];
|
||||
return <OlUnitEntryList key={key} icon={faShip} blueprint={blueprint} onClick={() => setBlueprint(blueprint)} />
|
||||
return <OlUnitEntryList key={key} icon={olButtonsVisibilityNavyunit} blueprint={blueprint} onClick={() => setBlueprint(blueprint)} />
|
||||
})}
|
||||
</div>
|
||||
</OlAccordion>
|
||||
|
||||
@@ -1,38 +1,57 @@
|
||||
import React, { useState } from "react";
|
||||
import { Menu } from "./components/menu";
|
||||
import { faGamepad } from '@fortawesome/free-solid-svg-icons';
|
||||
import { library } from '@fortawesome/fontawesome-svg-core'
|
||||
import { Unit } from "../../unit/unit";
|
||||
import { OlLabelToggle } from "../components/ollabeltoggle";
|
||||
import { OlRangeSlider } from "../components/olrangeslider";
|
||||
import { getApp } from "../../olympusapp";
|
||||
|
||||
const defaultUnitControlPanelData = {
|
||||
desiredAltitude: undefined as undefined | number,
|
||||
desiredAltitudeType: undefined as undefined | boolean
|
||||
}
|
||||
import { OlButtonGroup, OlButtonGroupItem } from "../components/olbuttongroup";
|
||||
import { ROEs, emissionsCountermeasures, reactionsToThreat } from "../../constants/constants";
|
||||
import { OlToggle } from "../components/oltoggle";
|
||||
import { OlCoalitionToggle } from "../components/olcoalitiontoggle";
|
||||
import { olButtonsEmissionsAttack, olButtonsEmissionsDefend, olButtonsEmissionsFree, olButtonsEmissionsSilent, olButtonsIntensity1, olButtonsIntensity2, olButtonsIntensity3, olButtonsRoeDesignated, olButtonsRoeFree, olButtonsRoeHold, olButtonsRoeReturn, olButtonsScatter1, olButtonsScatter2, olButtonsScatter3, olButtonsThreatEvade, olButtonsThreatManoeuvre, olButtonsThreatNone, olButtonsThreatPassive } from "../components/olicons";
|
||||
import { Coalition } from "../../types/types";
|
||||
|
||||
export function UnitControlMenu() {
|
||||
var [open, setOpen] = useState(false);
|
||||
var [selectedUnits, setSelectedUnits] = useState([] as Unit[]);
|
||||
|
||||
var [selectedUnitsData, setSelectedUnitsData] = useState(defaultUnitControlPanelData);
|
||||
var [selectedUnitsRequestedData, setSelectedUnitsRequestedData] = useState(defaultUnitControlPanelData);
|
||||
var [selectedUnitsData, setSelectedUnitsData] = useState({
|
||||
desiredAltitude: undefined as undefined | number,
|
||||
desiredAltitudeType: undefined as undefined | string,
|
||||
desiredSpeed: undefined as undefined | number,
|
||||
desiredSpeedType: undefined as undefined | string,
|
||||
ROE: undefined as undefined | string,
|
||||
reactionToThreat: undefined as undefined | string,
|
||||
emissionsCountermeasures: undefined as undefined | string,
|
||||
shotsScatter: undefined as undefined | number,
|
||||
shotsIntensity: undefined as undefined | number,
|
||||
operateAs: undefined as undefined | string,
|
||||
followRoads: undefined as undefined | boolean,
|
||||
isActiveAWACS: undefined as undefined | boolean,
|
||||
isActiveTanker: undefined as undefined | boolean,
|
||||
onOff: undefined as undefined | boolean
|
||||
});
|
||||
|
||||
/* */
|
||||
const minAltitude = 0;
|
||||
const maxAltitude = 60000;
|
||||
const altitudeStep = 500;
|
||||
const maxAltitude = getApp()?.getUnitsManager()?.getSelectedUnitsCategories().every((category) => { return category === 'Helicopter'}) ? 20000 : 60000;
|
||||
const altitudeStep = getApp()?.getUnitsManager()?.getSelectedUnitsCategories().every((category) => { return category === 'Helicopter'}) ? 100 : 500;
|
||||
const minSpeed = 0;
|
||||
const maxSpeed = getApp()?.getUnitsManager()?.getSelectedUnitsCategories().every((category) => { return category === 'Helicopter'}) ? 200 : 800;
|
||||
const speedStep = getApp()?.getUnitsManager()?.getSelectedUnitsCategories().every((category) => { return category === 'Helicopter'}) ? 5 : 10;;
|
||||
|
||||
/* When a unit is selected, open the menu */
|
||||
document.addEventListener("unitsSelection", (ev: CustomEventInit) => {
|
||||
setOpen(true);
|
||||
setSelectedUnits(ev.detail as Unit[])
|
||||
setSelectedUnits(ev.detail as Unit[]);
|
||||
|
||||
updateData();
|
||||
})
|
||||
|
||||
/* When a unit is deselected, refresh the view */
|
||||
document.addEventListener("unitDeselection", (ev: CustomEventInit) => {
|
||||
|
||||
/* TODO add delay to avoid doing it too many times */
|
||||
updateData();
|
||||
})
|
||||
|
||||
/* When all units are selected clean the view */
|
||||
@@ -41,9 +60,31 @@ export function UnitControlMenu() {
|
||||
setSelectedUnits([])
|
||||
})
|
||||
|
||||
document.addEventListener("unitUpdated", () => {
|
||||
/* Update the current values of the shown data */
|
||||
function updateData() {
|
||||
const getters = {
|
||||
desiredAltitude: (unit: Unit) => { return unit.getDesiredAltitude(); },
|
||||
desiredAltitudeType: (unit: Unit) => { return unit.getDesiredAltitudeType(); },
|
||||
desiredSpeed: (unit: Unit) => { return unit.getDesiredSpeed(); },
|
||||
desiredSpeedType: (unit: Unit) => { return unit.getDesiredSpeedType(); },
|
||||
ROE: (unit: Unit) => { return unit.getROE(); },
|
||||
reactionToThreat: (unit: Unit) => { return unit.getReactionToThreat(); },
|
||||
emissionsCountermeasures: (unit: Unit) => { return unit.getROE(); },
|
||||
shotsScatter: (unit: Unit) => { return unit.getShotsScatter(); },
|
||||
shotsIntensity: (unit: Unit) => { return unit.getShotsIntensity(); },
|
||||
operateAs: (unit: Unit) => { return unit.getOperateAs(); },
|
||||
followRoads: (unit: Unit) => { return unit.getFollowRoads(); },
|
||||
isActiveAWACS: (unit: Unit) => { return unit.getIsActiveAWACS(); },
|
||||
isActiveTanker: (unit: Unit) => { return unit.getIsActiveTanker(); },
|
||||
onOff: (unit: Unit) => { return unit.getOnOff(); },
|
||||
} as { [key in keyof (typeof selectedUnitsData)]: (unit: Unit) => void }
|
||||
|
||||
})
|
||||
var updatedData = selectedUnitsData;
|
||||
Object.entries(getters).forEach(([key, getter]) => {
|
||||
updatedData[key] = getApp()?.getUnitsManager()?.getSelectedUnitsVariable(getter);
|
||||
});
|
||||
setSelectedUnitsData(updatedData);
|
||||
}
|
||||
|
||||
/* Count how many units are selected of each type, divided by coalition */
|
||||
var unitOccurences = {
|
||||
@@ -51,6 +92,7 @@ export function UnitControlMenu() {
|
||||
red: {},
|
||||
neutral: {}
|
||||
}
|
||||
|
||||
selectedUnits.forEach((unit) => {
|
||||
if (!(unit.getName() in unitOccurences[unit.getCoalition()]))
|
||||
unitOccurences[unit.getCoalition()][unit.getName()] = 1;
|
||||
@@ -58,11 +100,14 @@ export function UnitControlMenu() {
|
||||
unitOccurences[unit.getCoalition()][unit.getName()]++;
|
||||
})
|
||||
|
||||
const selectedCategories = getApp()?.getUnitsManager()?.getSelectedUnitsCategories() ?? [];
|
||||
|
||||
return <Menu
|
||||
open={open}
|
||||
title="Unit control menu"
|
||||
onClose={() => { }}
|
||||
>
|
||||
{/* Units list */}
|
||||
<div className="dark:bg-[#243141] h-fit p-0 flex flex-col gap-0">
|
||||
<div>
|
||||
{
|
||||
@@ -85,43 +130,267 @@ export function UnitControlMenu() {
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
<div className="p-5">
|
||||
<div className="p-5 flex flex-col gap-5">
|
||||
{/* Altitude selector */
|
||||
selectedCategories.every((category) => { return ['Aircraft', 'Helicopter'].includes(category) }) && <div>
|
||||
<div className="flex flex-row content-center justify-between">
|
||||
<div className="flex flex-col">
|
||||
<span className="font-normal dark:text-white">Altitude</span>
|
||||
<span
|
||||
data-flash={selectedUnitsData.desiredAltitude === undefined}
|
||||
className="data-[flash='true']:animate-pulse dark:text-blue-500">{selectedUnitsData.desiredAltitude !== undefined ? (selectedUnitsData.desiredAltitude + " FT") : "Different values"}
|
||||
</span>
|
||||
</div>
|
||||
<OlLabelToggle
|
||||
toggled={selectedUnitsData.desiredAltitudeType === undefined ? undefined : selectedUnitsData.desiredAltitudeType === "AGL"}
|
||||
leftLabel={"AGL"}
|
||||
rightLabel={"ASL"}
|
||||
onClick={() => {
|
||||
selectedUnits.forEach((unit) => {
|
||||
unit.setAltitudeType((selectedUnitsData.desiredAltitudeType === "ASL") ? "AGL" : "ASL");
|
||||
setSelectedUnitsData({
|
||||
...selectedUnitsData,
|
||||
desiredAltitudeType: (selectedUnitsData.desiredAltitudeType === "ASL") ? "AGL" : "ASL"
|
||||
})
|
||||
})
|
||||
}} />
|
||||
</div>
|
||||
<OlRangeSlider
|
||||
onChange={(ev) => {
|
||||
selectedUnits.forEach((unit) => {
|
||||
unit.setAltitude(Number(ev.target.value));
|
||||
setSelectedUnitsData({
|
||||
...selectedUnitsData,
|
||||
desiredAltitude: Number(ev.target.value)
|
||||
})
|
||||
})
|
||||
}}
|
||||
value={selectedUnitsData.desiredAltitude}
|
||||
min={minAltitude}
|
||||
max={maxAltitude}
|
||||
step={altitudeStep}
|
||||
/>
|
||||
</div>
|
||||
}
|
||||
{/* Airspeed selector */}
|
||||
<div>
|
||||
<div className="flex flex-row content-center justify-between">
|
||||
<div className="flex flex-col">
|
||||
<span className="font-normal dark:text-white">Altitude</span>
|
||||
<span className="dark:text-blue-500">{`${selectedUnitsRequestedData.desiredAltitude} FT`}</span>
|
||||
<span className="font-normal dark:text-white">Speed</span>
|
||||
<span
|
||||
data-flash={selectedUnitsData.desiredSpeed === undefined}
|
||||
className="data-[flash='true']:animate-pulse dark:text-blue-500">{selectedUnitsData.desiredSpeed !== undefined ? (selectedUnitsData.desiredSpeed + " KTS") : "Different values"}
|
||||
</span>
|
||||
</div>
|
||||
<OlLabelToggle
|
||||
toggled={selectedUnitsRequestedData.desiredAltitudeType}
|
||||
leftLabel={"AGL"}
|
||||
rightLabel={"ASL"}
|
||||
toggled={selectedUnitsData.desiredSpeedType === undefined ? undefined : selectedUnitsData.desiredSpeedType === "GS"}
|
||||
leftLabel={"GS"}
|
||||
rightLabel={"CAS"}
|
||||
onClick={() => {
|
||||
selectedUnits.forEach((unit) => {
|
||||
unit.setAltitudeType((!selectedUnitsRequestedData.desiredAltitudeType) ? "AGL" : "ASL");
|
||||
setSelectedUnitsRequestedData({
|
||||
...selectedUnitsRequestedData,
|
||||
desiredAltitudeType: !selectedUnitsRequestedData.desiredAltitudeType
|
||||
unit.setSpeedType((selectedUnitsData.desiredSpeedType === "CAS") ? "GS" : "CAS");
|
||||
setSelectedUnitsData({
|
||||
...selectedUnitsData,
|
||||
desiredSpeedType: (selectedUnitsData.desiredSpeedType === "CAS") ? "GS" : "CAS"
|
||||
})
|
||||
})
|
||||
}} />
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
<OlRangeSlider
|
||||
onChange={(ev) => {
|
||||
selectedUnits.forEach((unit) => {
|
||||
unit.setAltitude(Number(ev.target.value));
|
||||
setSelectedUnitsRequestedData({
|
||||
...selectedUnitsRequestedData,
|
||||
desiredAltitude: Number(ev.target.value)
|
||||
unit.setSpeed(Number(ev.target.value));
|
||||
setSelectedUnitsData({
|
||||
...selectedUnitsData,
|
||||
desiredSpeed: Number(ev.target.value)
|
||||
})
|
||||
})
|
||||
}}
|
||||
value={selectedUnitsRequestedData.desiredAltitude}
|
||||
min={minAltitude}
|
||||
max={maxAltitude}
|
||||
step={altitudeStep} />
|
||||
value={selectedUnitsData.desiredSpeed}
|
||||
min={minSpeed}
|
||||
max={maxSpeed}
|
||||
step={speedStep}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<div className="flex flex-col gap-2">
|
||||
<span className="font-normal dark:text-white">Rules of engagement</span>
|
||||
<OlButtonGroup>
|
||||
{
|
||||
[olButtonsRoeHold, olButtonsRoeReturn, olButtonsRoeDesignated, olButtonsRoeFree].map((icon, idx) => {
|
||||
return <OlButtonGroupItem
|
||||
onClick={() => {
|
||||
selectedUnits.forEach((unit) => {
|
||||
unit.setROE(ROEs[idx]);
|
||||
setSelectedUnitsData({
|
||||
...selectedUnitsData,
|
||||
ROE: ROEs[idx]
|
||||
})
|
||||
})
|
||||
}}
|
||||
active={selectedUnitsData.ROE === ROEs[idx]}
|
||||
icon={icon} />
|
||||
})
|
||||
}
|
||||
</OlButtonGroup>
|
||||
</div>
|
||||
{
|
||||
selectedCategories.every((category) => { return ['Aircraft', 'Helicopter'].includes(category) }) && <> <div className="flex flex-col gap-2">
|
||||
<span className="font-normal dark:text-white">Threat reaction</span>
|
||||
<OlButtonGroup>
|
||||
{
|
||||
[olButtonsThreatNone, olButtonsThreatPassive, olButtonsThreatManoeuvre, olButtonsThreatEvade].map((icon, idx) => {
|
||||
return <OlButtonGroupItem
|
||||
onClick={() => {
|
||||
selectedUnits.forEach((unit) => {
|
||||
unit.setReactionToThreat(reactionsToThreat[idx]);
|
||||
setSelectedUnitsData({
|
||||
...selectedUnitsData,
|
||||
reactionToThreat: reactionsToThreat[idx]
|
||||
})
|
||||
})
|
||||
}}
|
||||
active={selectedUnitsData.reactionToThreat === reactionsToThreat[idx]}
|
||||
icon={icon} />
|
||||
})
|
||||
}
|
||||
</OlButtonGroup>
|
||||
</div>
|
||||
<div className="flex flex-col gap-2">
|
||||
<span className="font-normal dark:text-white">Radar and ECM</span>
|
||||
<OlButtonGroup>
|
||||
{
|
||||
[olButtonsEmissionsSilent, olButtonsEmissionsDefend, olButtonsEmissionsAttack, olButtonsEmissionsFree].map((icon, idx) => {
|
||||
return <OlButtonGroupItem
|
||||
onClick={() => {
|
||||
selectedUnits.forEach((unit) => {
|
||||
unit.setEmissionsCountermeasures(emissionsCountermeasures[idx]);
|
||||
setSelectedUnitsData({
|
||||
...selectedUnitsData,
|
||||
emissionsCountermeasures: emissionsCountermeasures[idx]
|
||||
})
|
||||
})
|
||||
}}
|
||||
active={selectedUnitsData.emissionsCountermeasures === emissionsCountermeasures[idx]}
|
||||
icon={icon} />
|
||||
})
|
||||
}
|
||||
</OlButtonGroup>
|
||||
</div>
|
||||
</>
|
||||
}
|
||||
{
|
||||
getApp()?.getUnitsManager()?.getSelectedUnitsVariable((unit) => { return unit.isTanker() }) &&
|
||||
<div className="flex content-center justify-between">
|
||||
<span className="font-normal dark:text-white"> Act as tanker </span>
|
||||
<OlToggle toggled={selectedUnitsData.isActiveTanker} onClick={() => {
|
||||
selectedUnits.forEach((unit) => {
|
||||
unit.setAdvancedOptions(!selectedUnitsData.isActiveTanker, unit.getIsActiveAWACS(), unit.getTACAN(), unit.getRadio(), unit.getGeneralSettings());
|
||||
setSelectedUnitsData({
|
||||
...selectedUnitsData,
|
||||
isActiveTanker: !selectedUnitsData.isActiveTanker
|
||||
})
|
||||
})
|
||||
}} />
|
||||
</div>
|
||||
}
|
||||
{
|
||||
getApp()?.getUnitsManager()?.getSelectedUnitsVariable((unit) => { return unit.isAWACS() }) &&
|
||||
<div className="flex content-center justify-between">
|
||||
<span className="font-normal dark:text-white"> Act as AWACS </span>
|
||||
<OlToggle toggled={selectedUnitsData.isActiveAWACS} onClick={() => {
|
||||
selectedUnits.forEach((unit) => {
|
||||
unit.setAdvancedOptions(unit.getIsActiveTanker(), !selectedUnitsData.isActiveAWACS, unit.getTACAN(), unit.getRadio(), unit.getGeneralSettings());
|
||||
setSelectedUnitsData({
|
||||
...selectedUnitsData,
|
||||
isActiveAWACS: !selectedUnitsData.isActiveAWACS
|
||||
})
|
||||
})
|
||||
}} />
|
||||
</div>
|
||||
}
|
||||
{
|
||||
selectedCategories.every((category) => { return ['GroundUnit', 'NavyUnit'].includes(category) }) && <> <div className="flex flex-col gap-2">
|
||||
<span className="font-normal dark:text-white">Shots scatter</span>
|
||||
<OlButtonGroup>
|
||||
{
|
||||
[olButtonsScatter1, olButtonsScatter2, olButtonsScatter3].map((icon, idx) => {
|
||||
return <OlButtonGroupItem
|
||||
onClick={() => {
|
||||
selectedUnits.forEach((unit) => {
|
||||
unit.setShotsScatter(idx);
|
||||
setSelectedUnitsData({
|
||||
...selectedUnitsData,
|
||||
shotsScatter: idx
|
||||
})
|
||||
})
|
||||
}}
|
||||
active={selectedUnitsData.shotsScatter === idx}
|
||||
icon={icon} />
|
||||
})
|
||||
}
|
||||
</OlButtonGroup>
|
||||
</div>
|
||||
<div className="flex flex-col gap-2">
|
||||
<span className="font-normal dark:text-white">Shots intensity</span>
|
||||
<OlButtonGroup>
|
||||
{
|
||||
[olButtonsIntensity1, olButtonsIntensity2, olButtonsIntensity3].map((icon, idx) => {
|
||||
return <OlButtonGroupItem
|
||||
onClick={() => {
|
||||
selectedUnits.forEach((unit) => {
|
||||
unit.setShotsIntensity(idx);
|
||||
setSelectedUnitsData({
|
||||
...selectedUnitsData,
|
||||
shotsIntensity: idx
|
||||
})
|
||||
})
|
||||
}}
|
||||
active={selectedUnitsData.shotsIntensity === idx}
|
||||
icon={icon} />
|
||||
})
|
||||
}
|
||||
</OlButtonGroup>
|
||||
</div>
|
||||
<div className="flex content-center justify-between">
|
||||
<span className="font-normal dark:text-white"> Operate as </span>
|
||||
<OlCoalitionToggle coalition={selectedUnitsData.operateAs as Coalition} onClick={() => {
|
||||
selectedUnits.forEach((unit) => {
|
||||
unit.setOperateAs(selectedUnitsData.operateAs === 'blue' ? 'red' : 'blue');
|
||||
setSelectedUnitsData({
|
||||
...selectedUnitsData,
|
||||
operateAs: selectedUnitsData.operateAs === 'blue' ? 'red' : 'blue'
|
||||
})
|
||||
})
|
||||
}} />
|
||||
</div>
|
||||
<div className="flex content-center justify-between">
|
||||
<span className="font-normal dark:text-white"> Follow roads </span>
|
||||
<OlToggle toggled={selectedUnitsData.followRoads} onClick={() => {
|
||||
selectedUnits.forEach((unit) => {
|
||||
unit.setFollowRoads(!selectedUnitsData.followRoads);
|
||||
setSelectedUnitsData({
|
||||
...selectedUnitsData,
|
||||
followRoads: !selectedUnitsData.followRoads
|
||||
})
|
||||
})
|
||||
}} />
|
||||
</div>
|
||||
|
||||
<div className="flex content-center justify-between">
|
||||
<span className="font-normal dark:text-white"> Enabled </span>
|
||||
<OlToggle toggled={selectedUnitsData.onOff} onClick={() => {
|
||||
selectedUnits.forEach((unit) => {
|
||||
unit.setOnOff(!selectedUnitsData.onOff);
|
||||
setSelectedUnitsData({
|
||||
...selectedUnitsData,
|
||||
onOff: !selectedUnitsData.onOff
|
||||
})
|
||||
})
|
||||
}} />
|
||||
</div>
|
||||
</>
|
||||
}
|
||||
</div>
|
||||
</Menu>
|
||||
}
|
||||
@@ -69,14 +69,14 @@ module.exports = function (configLocation) {
|
||||
|
||||
|
||||
// UNCOMMENT TO TEST ALL UNITS ****************
|
||||
/*
|
||||
|
||||
var databases = Object.assign({}, aircraftDatabase, helicopterDatabase, groundUnitDatabase, navyUnitDatabase);
|
||||
var t = Object.keys(databases).length;
|
||||
var l = Math.floor(Math.sqrt(t));
|
||||
let latIdx = 0;
|
||||
let lngIdx = 0;
|
||||
let idx = 1;
|
||||
console.log(l)
|
||||
|
||||
for (let name in databases) {
|
||||
if (databases[name].enabled) {
|
||||
DEMO_UNIT_DATA[idx] = JSON.parse(JSON.stringify(baseData));
|
||||
@@ -106,7 +106,7 @@ module.exports = function (configLocation) {
|
||||
}
|
||||
|
||||
|
||||
*/
|
||||
/*
|
||||
let idx = 1;
|
||||
DEMO_UNIT_DATA[idx] = JSON.parse(JSON.stringify(baseData));
|
||||
DEMO_UNIT_DATA[idx].name = "S_75M_Volhov";
|
||||
@@ -140,6 +140,9 @@ module.exports = function (configLocation) {
|
||||
DEMO_UNIT_DATA[idx].category = "Aircraft";
|
||||
DEMO_UNIT_DATA[idx].isLeader = false;
|
||||
DEMO_UNIT_DATA[idx].coalition = 1;
|
||||
DEMO_UNIT_DATA[idx].desiredAltitude = 10000;
|
||||
DEMO_UNIT_DATA[idx].desiredAltitudeType = 0;
|
||||
|
||||
|
||||
idx += 1;
|
||||
DEMO_UNIT_DATA[idx] = JSON.parse(JSON.stringify(baseData));
|
||||
@@ -168,7 +171,7 @@ module.exports = function (configLocation) {
|
||||
DEMO_UNIT_DATA[idx].position.lat += idx / 100;
|
||||
DEMO_UNIT_DATA[idx].category = "Aircraft";
|
||||
DEMO_UNIT_DATA[idx].isLeader = true;
|
||||
|
||||
*/
|
||||
|
||||
this.startTime = Date.now();
|
||||
}
|
||||
|
||||