add projectiles

This commit is contained in:
PoliEcho 2025-08-23 15:51:45 +02:00
parent de460abd29
commit ef8d4c3ad2
12 changed files with 8792 additions and 81 deletions

BIN
assets/basic_projectile.pdf Normal file

Binary file not shown.

765
assets/basic_projectile.svg Normal file
View File

@ -0,0 +1,765 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
version="1.1"
id="svg1"
width="5"
height="5"
viewBox="0 0 5 4.9999998"
sodipodi:docname="basic_projectile.svg"
inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)"
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="#000000"
bordercolor="#999999"
borderopacity="1"
inkscape:showpageshadow="2"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:zoom="71.026432"
inkscape:cx="6.152639"
inkscape:cy="6.3849469"
inkscape:window-width="1918"
inkscape:window-height="1038"
inkscape:window-x="0"
inkscape:window-y="20"
inkscape:window-maximized="1"
inkscape:current-layer="g1">
<inkscape:page
x="0"
y="0"
inkscape:label="1"
id="page1"
width="5"
height="5"
margin="0"
bleed="0" />
</sodipodi:namedview>
<g
id="g1"
inkscape:groupmode="layer"
inkscape:label="1">
<g
id="g143"
transform="matrix(0.13064905,0,0,0.13056588,-49.567112,-70.542334)">
<path
id="path2"
d="m 110,148.5 -0.002,0.12668 -0.005,0.1266 -0.008,0.12644 -0.0112,0.1262 -0.0144,0.12587 -0.0176,0.12546 -0.0208,0.12498 -0.0239,0.12441 -0.0271,0.12377 -0.0302,0.12304 -0.0333,0.12223 -0.0364,0.12135 -0.0395,0.12039 -0.0425,0.11935 -0.0455,0.11824 -0.0485,0.11705 -0.0514,0.11578 -0.0544,0.11444 -0.0572,0.11302 -0.0601,0.11154 -0.0629,0.10998 -0.0657,0.10835 -0.0684,0.10666 -0.0711,0.10488 -0.0737,0.10306 -0.0763,0.10115 -0.0788,0.0992 -0.0813,0.0972 -0.0837,0.0951 -0.0861,0.0929 -0.0884,0.0907 -0.0907,0.0884 -0.0929,0.0861 -0.0951,0.0837 -0.0972,0.0813 -0.0992,0.0788 -0.10117,0.0763 -0.10307,0.0737 -0.10491,0.071 -0.10667,0.0683 -0.10836,0.0656 -0.11,0.0629 -0.11155,0.0601 -0.11304,0.0572 -0.11445,0.0543 -0.1158,0.0514 -0.11705,0.0485 -0.11825,0.0455 -0.11936,0.0425 -0.1204,0.0394 -0.12136,0.0364 -0.12225,0.0333 -0.12304,0.0302 -0.12377,0.0271 -0.12442,0.0239 -0.12498,0.0207 -0.12547,0.0176 -0.12588,0.0144 -0.12619,0.0112 -0.12644,0.008 -0.12661,0.005 -0.12668,0.002 -0.12668,-0.002 -0.1266,-0.005 -0.12644,-0.008 -0.12619,-0.0112 -0.12587,-0.0145 -0.12546,-0.0176 -0.12497,-0.0208 -0.12441,-0.024 -0.12376,-0.0271 -0.12303,-0.0302 -0.12223,-0.0333 -0.12134,-0.0364 -0.12038,-0.0395 -0.11934,-0.0425 -0.11823,-0.0455 -0.11703,-0.0485 -0.11577,-0.0515 -0.11443,-0.0544 -0.11301,-0.0573 -0.11152,-0.0601 -0.10997,-0.0629 -0.10834,-0.0657 -0.10663,-0.0684 -0.10487,-0.0711 -0.10304,-0.0737 -0.10113,-0.0763 -0.0992,-0.0788 -0.0971,-0.0813 -0.0951,-0.0838 -0.0929,-0.0862 -0.0907,-0.0885 -0.0884,-0.0907 -0.0861,-0.093 -0.0837,-0.0951 -0.0813,-0.0972 -0.0788,-0.0992 -0.0762,-0.10119 -0.0736,-0.10309 -0.071,-0.10492 -0.0683,-0.10669 -0.0656,-0.10838 -0.0628,-0.11001 -0.06,-0.11157 -0.0572,-0.11305 -0.0543,-0.11447 -0.0514,-0.1158 -0.0484,-0.11707 -0.0455,-0.11826 -0.0424,-0.11937 -0.0394,-0.12041 -0.0363,-0.12137 -0.0332,-0.12225 -0.0302,-0.12305 -0.027,-0.12378 -0.0239,-0.12442 -0.0207,-0.12499 -0.0175,-0.12547 -0.0144,-0.12588 -0.0112,-0.1262 -0.008,-0.12644 -0.005,-0.12661 -0.002,-0.12668 0.002,-0.12668 0.005,-0.1266 0.008,-0.12643 0.0113,-0.12619 0.0145,-0.12587 0.0177,-0.12545 0.0208,-0.12497 0.024,-0.1244 0.0271,-0.12375 0.0303,-0.12303 0.0334,-0.12222 0.0365,-0.12133 0.0395,-0.12037 0.0426,-0.11934 0.0456,-0.11821 0.0485,-0.11703 0.0515,-0.11575 0.0544,-0.11442 0.0573,-0.11299 0.0601,-0.11151 0.0629,-0.10995 0.0657,-0.10833 0.0684,-0.10662 0.0711,-0.10485 0.0738,-0.10302 0.0763,-0.10112 0.0789,-0.0991 0.0814,-0.0971 0.0838,-0.095 0.0862,-0.0929 0.0885,-0.0907 0.0908,-0.0884 0.093,-0.0861 0.0951,-0.0837 0.0972,-0.0812 0.0992,-0.0787 0.1012,-0.0762 0.10311,-0.0736 0.10493,-0.071 0.10671,-0.0683 0.1084,-0.0656 0.11002,-0.0628 0.11158,-0.06 0.11307,-0.0572 0.11447,-0.0543 0.11582,-0.0513 0.11708,-0.0484 0.11827,-0.0454 0.11938,-0.0424 0.12042,-0.0394 0.12138,-0.0363 0.12226,-0.0332 0.12306,-0.0301 0.12378,-0.027 0.12443,-0.0239 0.12499,-0.0207 0.12548,-0.0175 0.12588,-0.0143 0.1262,-0.0111 0.12645,-0.008 0.1266,-0.005 0.12669,-0.002 0.12668,0.002 0.1266,0.005 0.12643,0.008 0.12618,0.0113 0.12587,0.0145 0.12545,0.0177 0.12496,0.0209 0.1244,0.024 0.12374,0.0272 0.12302,0.0303 0.12221,0.0334 0.12133,0.0365 0.12036,0.0395 0.11932,0.0426 0.11821,0.0456 0.11701,0.0486 0.11574,0.0515 0.1144,0.0544 0.11299,0.0573 0.11149,0.0602 0.10994,0.063 0.1083,0.0657 0.10661,0.0685 0.10484,0.0711 0.103,0.0738 0.1011,0.0764 0.0991,0.0789 0.0971,0.0814 0.095,0.0838 0.0928,0.0862 0.0906,0.0885 0.0884,0.0908 0.086,0.093 0.0836,0.0951 0.0812,0.0972 0.0787,0.0993 0.0762,0.10122 0.0736,0.10312 0.071,0.10496 0.0683,0.10672 0.0656,0.10841 0.0628,0.11004 0.06,0.1116 0.0571,0.11308 0.0542,0.11449 0.0513,0.11582 0.0484,0.1171 0.0454,0.11828 0.0424,0.11939 0.0393,0.12043 0.0363,0.12138 0.0332,0.12227 0.0301,0.12307 0.027,0.12379 0.0238,0.12443 0.0207,0.125 0.0175,0.12548 0.0143,0.12588 0.0111,0.12621 0.008,0.12645 0.005,0.1266 z"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path3"
d="m 101.09084,151.61745 -0.96548,-4.23005"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path4"
d="m 100.12536,147.3874 2.70522,-3.39225"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path5"
d="m 102.83058,143.99515 h 4.33884"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path6"
d="m 107.16942,143.99515 2.70522,3.39225"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path7"
d="m 109.87464,147.3874 -0.96548,4.23005"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path8"
d="M 108.90916,151.61745 105,153.5"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path9"
d="m 105,153.5 -3.90916,-1.88255"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path10"
d="m 106.95458,152.55872 h -3.90916"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path11"
d="m 103.04542,152.55872 -2.43732,-3.0563"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path12"
d="m 100.6081,149.50242 0.86987,-3.81115"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path13"
d="M 101.47797,145.69127 105,143.99515"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path14"
d="m 105,143.99515 3.52203,1.69612"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path15"
d="m 108.52203,145.69127 0.86987,3.81115"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path16"
d="m 109.3919,149.50242 -2.43732,3.0563"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path17"
d="m 105,152.55872 -3.17324,-1.52815"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path18"
d="m 101.82676,151.03057 -0.78372,-3.43372"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path19"
d="m 101.04304,147.59685 2.19595,-2.75364"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path20"
d="m 103.23899,144.84321 h 3.52202"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path21"
d="m 106.76101,144.84321 2.19595,2.75364"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path22"
d="m 108.95696,147.59685 -0.78372,3.43372"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path23"
d="M 108.17324,151.03057 105,152.55872"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path24"
d="m 103.41338,151.79465 -1.97848,-2.48094"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path25"
d="m 101.4349,149.31371 0.70611,-3.09368"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path26"
d="M 102.14101,146.22003 105,144.84321"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path27"
d="m 105,144.84321 2.85899,1.37682"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path28"
d="m 107.85899,146.22003 0.70611,3.09368"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path29"
d="m 108.5651,149.31371 -1.97848,2.48094"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path30"
d="m 106.58662,151.79465 h -3.17324"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path31"
d="m 105,151.79465 -2.57586,-1.24047"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path32"
d="m 102.42414,150.55418 -0.63619,-2.78731"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path33"
d="m 101.78795,147.76687 1.78255,-2.23525"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path34"
d="m 103.5705,145.53162 h 2.85899"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path35"
d="m 106.42949,145.53162 1.78256,2.23525"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path36"
d="m 108.21205,147.76687 -0.63619,2.78731"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path37"
d="M 107.57586,150.55418 105,151.79465"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path38"
d="m 107.32077,146.64925 0.57318,2.51127"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path39"
d="m 107.89395,149.16052 -1.60602,2.01389"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path40"
d="m 106.28793,151.17441 h -2.57586"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path41"
d="m 103.71207,151.17441 -1.60602,-2.01389"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path42"
d="m 102.10605,149.16052 0.57318,-2.51127"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path43"
d="M 102.67923,146.64925 105,145.53162"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path44"
d="m 105,145.53162 2.32077,1.11763"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path45"
d="m 102.90906,150.16747 -0.51642,-2.26258"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path46"
d="m 102.39264,147.90489 1.44698,-1.81445"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path47"
d="m 103.83962,146.09044 h 2.32076"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path48"
d="m 106.16038,146.09044 1.44698,1.81445"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path49"
d="m 107.60736,147.90489 -0.51642,2.26258"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path50"
d="M 107.09094,150.16747 105,151.17441"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path51"
d="m 105,151.17441 -2.09094,-1.00694"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path52"
d="m 106.04547,150.67094 h -2.09094"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path53"
d="m 103.95453,150.67094 -1.30368,-1.63476"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path54"
d="m 102.65085,149.03618 0.46528,-2.03852"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path55"
d="M 103.11613,146.99766 105,146.09044"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path56"
d="m 105,146.09044 1.88387,0.90722"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path57"
d="m 106.88387,146.99766 0.46528,2.03852"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path58"
d="m 107.34915,149.03618 -1.30368,1.63476"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path59"
d="M 106.69731,149.85356 105,150.67094"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path60"
d="m 105,150.67094 -1.69731,-0.81738"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path61"
d="m 103.30269,149.85356 -0.4192,-1.83664"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path62"
d="m 102.88349,148.01692 1.17457,-1.47287"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path63"
d="m 104.05806,146.54405 h 1.88388"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path64"
d="m 105.94194,146.54405 1.17457,1.47287"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path65"
d="m 107.11651,148.01692 -0.4192,1.83664"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path66"
d="m 104.15134,150.26225 -1.05825,-1.32701"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path67"
d="m 103.09309,148.93524 0.37768,-1.65476"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path68"
d="M 103.47077,147.28048 105,146.54405"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path69"
d="m 105,146.54405 1.52922,0.73643"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path70"
d="m 106.52922,147.28048 0.37769,1.65476"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path71"
d="m 106.90691,148.93524 -1.05825,1.32701"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path72"
d="m 105.84866,150.26225 h -1.69732"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path73"
d="m 105,150.26225 -1.37778,-0.66351"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path74"
d="m 103.62222,149.59874 -0.34029,-1.49088"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path75"
d="m 103.28193,148.10786 0.95346,-1.19559"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path76"
d="m 104.23539,146.91227 h 1.52922"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path77"
d="m 105.76461,146.91227 0.95346,1.19559"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path78"
d="m 106.71807,148.10786 -0.34029,1.49088"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path79"
d="M 106.37778,149.59874 105,150.26225"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path80"
d="m 106.54793,148.8533 -0.85904,1.0772"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path81"
d="m 105.68889,149.9305 h -1.37778"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path82"
d="m 104.31111,149.9305 -0.85904,-1.0772"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path83"
d="m 103.45207,148.8533 0.30659,-1.34324"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path84"
d="M 103.75866,147.51006 105,146.91227"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path85"
d="m 105,146.91227 1.24134,0.59779"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path86"
d="m 106.24134,147.51006 0.30659,1.34324"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path87"
d="m 106.39463,148.18168 -0.27622,1.21022"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path88"
d="M 106.11841,149.3919 105,149.9305"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path89"
d="m 105,149.9305 -1.11841,-0.5386"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path90"
d="m 103.88159,149.3919 -0.27622,-1.21022"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path91"
d="m 103.60537,148.18168 0.77396,-0.97052"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path92"
d="m 104.37933,147.21116 h 1.24134"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path93"
d="m 105.62067,147.21116 0.77396,0.97052"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path94"
d="m 105.5592,149.6612 h -1.1184"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path95"
d="m 104.4408,149.6612 -0.69732,-0.87441"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path96"
d="m 103.74348,148.78679 0.24887,-1.09037"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path97"
d="M 103.99235,147.69642 105,147.21116"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path98"
d="m 105,147.21116 1.00765,0.48526"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path99"
d="m 106.00765,147.69642 0.24887,1.09037"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path100"
d="m 106.25652,148.78679 -0.69732,0.87441"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path101"
d="m 104.49617,147.45379 h 1.00766"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path102"
d="m 105.50383,147.45379 0.62826,0.78782"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path103"
d="m 106.13209,148.24161 -0.22423,0.98239"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path104"
d="M 105.90786,149.224 105,149.6612"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path105"
d="m 105,149.6612 -0.90786,-0.4372"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path106"
d="m 104.09214,149.224 -0.22423,-0.98239"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path107"
d="m 103.86791,148.24161 0.62826,-0.78782"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path108"
d="m 105,147.45379 0.81796,0.39391"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path109"
d="m 105.81796,147.8477 0.20201,0.8851"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path110"
d="m 106.01997,148.7328 -0.56604,0.7098"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path111"
d="m 105.45393,149.4426 h -0.90786"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path112"
d="m 104.54607,149.4426 -0.56604,-0.7098"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path113"
d="m 103.98003,148.7328 0.20201,-0.8851"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path114"
d="M 104.18204,147.8477 105,147.45379"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path115"
d="m 104.59102,147.65075 h 0.81796"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path116"
d="m 105.40898,147.65075 0.50999,0.6395"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path117"
d="m 105.91897,148.29025 -0.18202,0.79745"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path118"
d="M 105.73695,149.0877 105,149.4426"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path119"
d="m 105,149.4426 -0.73695,-0.3549"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path120"
d="m 104.26305,149.0877 -0.18202,-0.79745"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path121"
d="m 104.08103,148.29025 0.50999,-0.6395"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path122"
d="m 104.17204,148.68898 0.16399,-0.71848"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path123"
d="M 104.33603,147.9705 105,147.65075"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path124"
d="m 105,147.65075 0.66397,0.31975"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path125"
d="m 105.66397,147.9705 0.16399,0.71848"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path126"
d="m 105.82796,148.68898 -0.45948,0.57617"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path127"
d="m 105.36848,149.26515 h -0.73696"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path128"
d="m 104.63152,149.26515 -0.45948,-0.57617"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path129"
d="m 105,149.26515 -0.59822,-0.28809"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path130"
d="m 104.40178,148.97706 -0.14775,-0.64732"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path131"
d="m 104.25403,148.32974 0.41398,-0.51912"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path132"
d="m 104.66801,147.81062 h 0.66398"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path133"
d="m 105.33199,147.81062 0.41398,0.51912"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path134"
d="m 105.74597,148.32974 -0.14775,0.64732"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path135"
d="M 105.59822,148.97706 105,149.26515"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path136"
d="m 105.29911,149.1211 h -0.59822"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path137"
d="m 104.70089,149.1211 -0.37298,-0.4677"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path138"
d="m 104.32791,148.6534 0.13311,-0.58322"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path139"
d="M 104.46102,148.07018 105,147.81062"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path140"
d="m 105,147.81062 0.53897,0.25956"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path141"
d="m 105.53897,148.07018 0.13312,0.58322"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path142"
d="m 105.67209,148.6534 -0.37298,0.4677"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
<path
id="path143"
d="m 105.62111,148.5 -0.0129,0.12582 -0.0381,0.1206 -0.0617,0.11038 -0.0828,0.0956 -0.10046,0.0768 -0.11395,0.0549 -0.1227,0.0307 -0.12637,0.005 -0.1248,-0.0205 -0.11805,-0.0454 -0.10641,-0.0684 -0.0904,-0.0885 -0.0705,-0.10497 -0.0478,-0.11708 -0.0231,-0.12435 0.003,-0.12645 0.0281,-0.12331 0.0525,-0.11506 0.0747,-0.10204 0.0938,-0.0848 0.10908,-0.064 0.11978,-0.0406 0.12553,-0.0155 0.12606,0.0103 0.12136,0.0356 0.11165,0.0594 0.0973,0.0808 0.0789,0.0988 0.0572,0.11278 0.0332,0.12204 0.008,0.10119 z"
style="fill:none;stroke:#ffffff;stroke-width:0.13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(3.7775238,0,0,-3.7799327,1.8887619,1120.75)" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 50 KiB

7770
misc/basic_projectile.dxf Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,13 +1,9 @@
#pragma once
#include <SDL3/SDL_stdinc.h>
#ifndef CONST_NS
#define CONST_NS
constexpr int SCREEN_WIDTH = 1600;
constexpr int SCREEN_HEIGHT = 1200;
constexpr int WORLD_WIDTH = 20000;
constexpr int WORLD_HEIGHT = 200000;
constexpr int TARGET_FPS = 120;
constexpr Uint64 TARGET_FRAME_TIME_NS = 1'000'000'000 / TARGET_FPS;
#endif

3
src/macro.hpp Normal file
View File

@ -0,0 +1,3 @@
#pragma once
#define FIND_CENTER(rect) {rect.x + (rect.w / 2), rect.y + (rect.h / 2)}

View File

@ -1,21 +1,28 @@
#include "const.hpp"
#include "projectiles.hpp"
#include "types.hpp"
#include <SDL3/SDL.h>
#include <SDL3/SDL_events.h>
#include <SDL3/SDL_iostream.h>
#include <SDL3/SDL_mouse.h>
#include <SDL3/SDL_render.h>
#include <SDL3/SDL_scancode.h>
#include <SDL3/SDL_stdinc.h>
#include <SDL3/SDL_surface.h>
#include <SDL3/SDL_timer.h>
#include <SDL3/SDL_video.h>
#include <SDL3_image/SDL_image.h>
#include <cstddef>
#include <cstring>
#include <vector>
sdl_session main_sdl_session;
SDL_DisplayMode *mode;
#define WIDTH_RATIO 15
#define HEIGHT_RATIO 41.53846153846154
#define MIN_INPUT_DELAY 0
#define MIN_INPUT_DELAY_MOVEMENT 0
#define MIN_INPUT_DELAY_FIRE 200
int main(int argc, char *argv[]) {
SDL_Init(SDL_INIT_VIDEO);
@ -29,35 +36,36 @@ int main(int argc, char *argv[]) {
main_sdl_session.renderer =
SDL_CreateRenderer(main_sdl_session.window, "gpu,vulcan");
SDL_Texture *player_ship_texture = nullptr;
{
SDL_IOStream *texture_file = SDL_IOFromFile("assets/player_ship.svg", "r");
SDL_Surface *player_ship_surface = IMG_LoadSizedSVG_IO(
texture_file,
static_cast<int>(static_cast<double>(mode->w) /
static_cast<double>(WIDTH_RATIO)),
static_cast<int>(static_cast<double>(mode->h) /
static_cast<double>(HEIGHT_RATIO)));
player_ship_type player_ship = [&mode]() -> player_ship_type {
SDL_Texture *player_ship_texture = nullptr;
SDL_IOStream *texture_file = SDL_IOFromFile("assets/player_ship.svg", "r");
float ship_width = static_cast<float>(static_cast<double>(mode->w) /
static_cast<double>(WIDTH_RATIO));
float ship_height = static_cast<float>(static_cast<double>(mode->h) /
static_cast<double>(HEIGHT_RATIO));
SDL_Surface *player_ship_surface =
IMG_LoadSizedSVG_IO(texture_file, ship_width, ship_height);
SDL_CloseIO(texture_file);
player_ship_texture = SDL_CreateTextureFromSurface(
main_sdl_session.renderer, player_ship_surface);
SDL_DestroySurface(player_ship_surface);
}
SDL_FRect player_ship_rect = {
0, 0,
static_cast<float>(static_cast<double>(mode->w) /
static_cast<double>(WIDTH_RATIO)),
static_cast<float>(static_cast<double>(mode->h) /
static_cast<double>(HEIGHT_RATIO))};
SDL_FRect player_ship_rect = {0, 0, ship_width, ship_height};
SDL_FPoint gun_offset = {ship_width * 0.9f, ship_height * 0.9f};
return {player_ship_rect, gun_offset, player_ship_texture};
}();
bool running = true;
Uint64 lastFrameTime = SDL_GetTicksNS();
float deltaTime = 0.0f;
Uint8 player_ship_speed = 1;
std::vector<projectile> projectiles;
while (running) {
const Uint64 frameStart = SDL_GetTicksNS();
@ -72,35 +80,61 @@ int main(int argc, char *argv[]) {
}
}
const bool *keystate = SDL_GetKeyboardState(NULL);
static Uint32 last_toggle_direction[4];
std::memset(last_toggle_direction, 0, sizeof(last_toggle_direction));
if ((keystate[SDL_SCANCODE_DOWN] || keystate[SDL_SCANCODE_S]) &&
(SDL_GetTicks() - last_toggle_direction[0] > MIN_INPUT_DELAY)) {
player_ship_rect.y += player_ship_speed;
last_toggle_direction[0] = SDL_GetTicks();
}
if ((keystate[SDL_SCANCODE_UP] || keystate[SDL_SCANCODE_W]) &&
(SDL_GetTicks() - last_toggle_direction[1] > MIN_INPUT_DELAY)) {
player_ship_rect.y -= player_ship_speed;
last_toggle_direction[1] = SDL_GetTicks();
}
if ((keystate[SDL_SCANCODE_RIGHT] || keystate[SDL_SCANCODE_D]) &&
(SDL_GetTicks() - last_toggle_direction[2] > MIN_INPUT_DELAY)) {
player_ship_rect.x += player_ship_speed;
last_toggle_direction[2] = SDL_GetTicks();
}
if ((keystate[SDL_SCANCODE_LEFT] || keystate[SDL_SCANCODE_A]) &&
(SDL_GetTicks() - last_toggle_direction[3] > MIN_INPUT_DELAY)) {
player_ship_rect.x -= player_ship_speed;
last_toggle_direction[3] = SDL_GetTicks();
{
const bool *keystate = SDL_GetKeyboardState(NULL);
static Uint32 last_toggle_direction[4];
std::memset(last_toggle_direction, 0, sizeof(last_toggle_direction));
if ((keystate[SDL_SCANCODE_DOWN] || keystate[SDL_SCANCODE_S]) &&
(SDL_GetTicks() - last_toggle_direction[0] >
MIN_INPUT_DELAY_MOVEMENT)) {
player_ship.rect.y += player_ship_speed;
last_toggle_direction[0] = SDL_GetTicks();
}
if ((keystate[SDL_SCANCODE_UP] || keystate[SDL_SCANCODE_W]) &&
(SDL_GetTicks() - last_toggle_direction[1] >
MIN_INPUT_DELAY_MOVEMENT)) {
player_ship.rect.y -= player_ship_speed;
last_toggle_direction[1] = SDL_GetTicks();
}
if ((keystate[SDL_SCANCODE_RIGHT] || keystate[SDL_SCANCODE_D]) &&
(SDL_GetTicks() - last_toggle_direction[2] >
MIN_INPUT_DELAY_MOVEMENT)) {
player_ship.rect.x += player_ship_speed;
last_toggle_direction[2] = SDL_GetTicks();
}
if ((keystate[SDL_SCANCODE_LEFT] || keystate[SDL_SCANCODE_A]) &&
(SDL_GetTicks() - last_toggle_direction[3] >
MIN_INPUT_DELAY_MOVEMENT)) {
player_ship.rect.x -= player_ship_speed;
last_toggle_direction[3] = SDL_GetTicks();
}
const SDL_MouseButtonFlags mousestate =
SDL_GetMouseState(nullptr, nullptr);
static Uint32 last_fire = 0;
if ((mousestate & SDL_BUTTON_LMASK || keystate[SDL_SCANCODE_SPACE]) &&
SDL_GetTicks() - last_fire > MIN_INPUT_DELAY_FIRE) {
projectiles.push_back(
spawn_projectile({player_ship.rect.x + player_ship.gun_offset.x,
player_ship.rect.y + player_ship.gun_offset.y},
1, 0, 3, "assets/basic_projectile.svg", nullptr));
last_fire = SDL_GetTicks();
}
}
SDL_SetRenderDrawColor(main_sdl_session.renderer, 0, 0, 0, 255);
SDL_RenderClear(main_sdl_session.renderer);
SDL_RenderTexture(main_sdl_session.renderer, player_ship_texture, nullptr,
&player_ship_rect);
for (projectile &p : projectiles) {
if (p.rect.x > mode->w || p.rect.y > mode->h) {
projectiles.erase(projectiles.begin() + (&p - projectiles.data()));
} else { // TODO colision detection
step_projectile(p);
}
}
SDL_RenderTexture(main_sdl_session.renderer, player_ship.texture, nullptr,
&player_ship.rect);
SDL_RenderPresent(main_sdl_session.renderer);
@ -118,7 +152,7 @@ int main(int argc, char *argv[]) {
lastFrameTime = SDL_GetTicksNS();
}
SDL_DestroyTexture(player_ship_texture);
SDL_DestroyTexture(player_ship.texture);
SDL_DestroyRenderer(main_sdl_session.renderer);
SDL_DestroyWindow(main_sdl_session.window);
SDL_Quit();

3
src/main.hpp Normal file
View File

@ -0,0 +1,3 @@
#pragma once
#include "types.hpp"
extern sdl_session main_sdl_session;

29
src/meth.cpp Normal file
View File

@ -0,0 +1,29 @@
#pragma once
#include "types.hpp"
#include <cmath>
SDL_FPoint find_dst_point_with_angle_and_distance(SDL_FPoint start, Angle angle,
float distance) {
float angle_rad = (angle - 90) * M_PI / 180.0f;
float dx = std::cos(angle_rad) * distance;
float dy = std::sin(angle_rad) * distance;
float calculated_distance = std::sqrt(dx * dx + dy * dy);
SDL_FPoint result;
if (calculated_distance > 0) {
dx /= calculated_distance;
dy /= calculated_distance;
result.x = start.x + dx * distance;
result.y = start.y + dy * distance;
} else {
result.x = start.x;
result.y = start.y;
}
return result;
}

5
src/meth.hpp Normal file
View File

@ -0,0 +1,5 @@
#pragma once
#include "types.hpp"
#include <SDL3/SDL_rect.h>
SDL_FPoint find_dst_point_with_angle_and_distance(SDL_FPoint start, Angle angle,
float distance);

63
src/projectiles.cpp Normal file
View File

@ -0,0 +1,63 @@
#include "macro.hpp"
#include "main.hpp"
#include "meth.hpp"
#include "types.hpp"
#include <SDL3/SDL.h>
#include <SDL3/SDL_rect.h>
#include <SDL3/SDL_render.h>
#include <SDL3/SDL_surface.h>
#include <SDL3_image/SDL_image.h>
#include <array>
void step_projectile(projectile p);
projectile spawn_projectile(SDL_FPoint position, float size_multiplier,
Angle angle, float speed, char *texture_file_name,
SDL_FRect *target) {
projectile p;
SDL_IOStream *texture_file = SDL_IOFromFile(texture_file_name, "r");
std::array<int, 2> texture_base_size;
{
SDL_Surface *tmp_surface = IMG_LoadSVG_IO(texture_file);
texture_base_size = {tmp_surface->w, tmp_surface->h};
SDL_DestroySurface(tmp_surface);
}
SDL_SeekIO(texture_file, 0, SDL_IO_SEEK_SET); // reset to top of the file
SDL_Surface *projectile_surface =
IMG_LoadSizedSVG_IO(texture_file, texture_base_size[0] * size_multiplier,
texture_base_size[1] * size_multiplier);
SDL_CloseIO(texture_file);
p.texture = SDL_CreateTextureFromSurface(main_sdl_session.renderer,
projectile_surface);
SDL_DestroySurface(projectile_surface);
p.angle = angle;
p.rect = {position.x, position.y, static_cast<float>(p.texture->w),
static_cast<float>(p.texture->h)};
p.speed = speed;
if (target == nullptr) {
p.target = nullptr;
p.guided = false;
} else {
p.target = target;
p.guided = true;
}
return p;
}
void step_projectile(projectile &p) {
SDL_FPoint center = FIND_CENTER(p.rect);
SDL_FPoint dst =
find_dst_point_with_angle_and_distance(center, p.angle, p.speed);
p.rect.x = dst.x - (p.rect.w / 2);
p.rect.y = dst.y - (p.rect.h / 2);
center = FIND_CENTER(p.rect);
SDL_RenderTexture(main_sdl_session.renderer, p.texture, nullptr, &p.rect);
// SDL_RenderTextureRotated(main_sdl_session.renderer, p.texture, nullptr,
// &p.rect, p.angle, &center, SDL_FLIP_NONE);
}

7
src/projectiles.hpp Normal file
View File

@ -0,0 +1,7 @@
#pragma once
#include "types.hpp"
#include <SDL3/SDL_rect.h>
projectile spawn_projectile(SDL_FPoint position, float size_multiplier,
Angle angle, float speed, char *texture_file_name,
SDL_FRect *target);
void step_projectile(projectile &p);

View File

@ -1,12 +1,9 @@
#include "const.hpp"
#pragma once
#include <SDL3/SDL.h>
#include <SDL3/SDL_rect.h>
#include <SDL3_image/SDL_image.h>
#include <cmath>
#include <iostream>
#include <optional>
#ifndef TYPES_NS
#define TYPES_NS
struct Angle {
private:
@ -41,9 +38,61 @@ public:
normalize();
return *this;
}
// Binary operators for int
Angle operator+(int rhs) const {
return Angle(static_cast<int>(value) + rhs);
}
Angle operator-(int rhs) const {
return Angle(static_cast<int>(value) - rhs);
}
Angle operator*(int rhs) const {
return Angle(static_cast<int>(value * rhs));
}
Angle operator/(int rhs) const {
return Angle(static_cast<int>(value / rhs));
}
// Binary operators for double
Angle operator+(double rhs) const {
return Angle(static_cast<int>(value + rhs));
}
Angle operator-(double rhs) const {
return Angle(static_cast<int>(value - rhs));
}
Angle operator*(double rhs) const {
return Angle(static_cast<int>(value * rhs));
}
Angle operator/(double rhs) const {
return Angle(static_cast<int>(value / rhs));
}
// Binary operators for float
Angle operator+(float rhs) const {
return Angle(static_cast<int>(value + rhs));
}
Angle operator-(float rhs) const {
return Angle(static_cast<int>(value - rhs));
}
Angle operator*(float rhs) const {
return Angle(static_cast<int>(value * rhs));
}
Angle operator/(float rhs) const {
return Angle(static_cast<int>(value / rhs));
}
// Type conversion
operator int() const { return value; }
operator int() const { return static_cast<int>(value); }
operator double() const { return static_cast<double>(value); }
operator float() const { return value; }
// Stream output
friend std::ostream &operator<<(std::ostream &os, const Angle &a) {
@ -51,35 +100,22 @@ public:
}
};
struct basic_cords {
float x;
float y;
};
struct Entity {
SDL_FRect position;
SDL_FRect Tposition;
bool gotoT = false;
SDL_Texture *texture;
SDL_Rect srcRect;
float speed;
Angle angle = 0;
basic_cords Central_position(std::optional<float> x = std::nullopt,
std::optional<float> y = std::nullopt) {
if (x != std::nullopt) {
position.x = *x - position.w / 2;
}
if (y != std::nullopt) {
position.y = *y - position.h / 2;
}
return {position.x + position.w / 2, position.y + position.h / 2};
}
};
struct sdl_session {
SDL_Window *window;
SDL_Renderer *renderer;
};
#endif
struct player_ship_type {
SDL_FRect rect;
SDL_FPoint gun_offset;
SDL_Texture *texture;
};
struct projectile {
SDL_FRect rect;
SDL_Texture *texture;
float speed;
Angle angle = 0;
bool guided;
SDL_FRect *target;
};