From 940d6a19572553d5c27eb338c5aa889bd71b30b1 Mon Sep 17 00:00:00 2001 From: Dennis Ranke Date: Thu, 9 Dec 2021 22:21:50 +0100 Subject: [PATCH] start line implementation, still a little buggy --- examples/curlywas/line.cwa | 74 +++++++++++++++++++++++++++++++++++++ platform/src/font.png | Bin 3083 -> 3080 bytes platform/src/font.pxo | Bin 4740 -> 4731 bytes 3 files changed, 74 insertions(+) create mode 100644 examples/curlywas/line.cwa diff --git a/examples/curlywas/line.cwa b/examples/curlywas/line.cwa new file mode 100644 index 0000000..27f4bfa --- /dev/null +++ b/examples/curlywas/line.cwa @@ -0,0 +1,74 @@ +import "env.memory" memory(4); + +import "env.cls" fn cls(i32); +import "env.setPixel" fn setPixel(i32, i32, i32); +import "env.time" fn time() -> f32; +import "env.sin" fn sin(f32) -> f32; +import "env.cos" fn cos(f32) -> f32; + +fn line(x1: f32, y1: f32, x2: f32, y2: f32, col: i32) { + let swapTmp: f32; + if x1 > x2 { + swapTmp = x1; + x1 = x2; + x2 = swapTmp; + swapTmp = y1; + y1 = y2; + y2 = swapTmp; + } + if x1 < 0.5 & x2 >= 0.5 { + y1 = y1 + (y2 - y1) * (0.5 - x1) / (x2 - x1); + x1 = 0.5; + } + if x1 < 319.5 & x2 >= 319.5 { + y2 = y2 + (y2 - y1) * (319.5 - x2) / (x2 - x1); + x2 = 319.5; + } + + if y1 > y2 { + swapTmp = x1; + x1 = x2; + x2 = swapTmp; + swapTmp = y1; + y1 = y2; + y2 = swapTmp; + } + if y1 < 0.5 & y2 >= 0.5 { + x1 = x1 + (x2 - x1) * (0.5 - y1) / (y2 - y1); + y1 = 0.5; + } + if y1 < 239.5 & y2 >= 239.5 { + x2 = x2 + (x2 - x1) * (239.5 - y2) / (y2 - y1); + y2 = 239.5; + } + + let dx = x2 - x1; + let dy = y2 - y1; + let steps: i32; + if abs(dx) >= dy { + dy = dy / abs(dx); + steps = abs(dx) as i32; + dx = select(dx > 0 as f32, 1 as f32, -1 as f32); + } else { + dx = dx / dy; + steps = dy as i32; + dy = 1 as f32; + } + + loop pixels { + setPixel(x1 as i32, y1 as i32, col); + x1 = x1 + dx; + y1 = y1 + dy; + branch_if (steps := steps - 1) >= 0: pixels; + } +} + +export fn upd() { + cls(0); + let i: i32; + loop lines { + let angle = i as f32 * (3.1415 / 25.0) + time() * 0.1; + line(160.0, 120.0, 160.0 + sin(angle) * 200.0, 120.0 + cos(angle) * 200.0, 47); + branch_if (i := i + 1) < 50: lines; + } +} diff --git a/platform/src/font.png b/platform/src/font.png index 783a6913a50e5a567fc13f6e13815c86f3e4ce4c..06c2f99689c4c14ccda565d89db6efc0343be26e 100644 GIT binary patch delta 2937 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 delta 2942 zcmV-^3xV{A7>gK?F&o86L_t(|ob6rhuInfaOsez#uiX8yqU$=gXOT=~e~9>JXd`+g zn7aL-C5=~e=_+^Cathp1#L9)uSd==dA1Y26l!e}@~e@FZ_ho~k#zyl zIHTLM0Vs>iA(5CK1F#sK1&maJGqQkL3V`^YVgVLnT$yHm6rdV~>*tmBh(8l$vo54U z&$N$1MG><5ru**yw#Po&V&eJRjK7Z-8N~n$Kc+tuW1Qg*M!7(1f8QecUly?yg`;%G z12dV5zecD8YCT{JL75cSqP2K12g$>s6l`tA2y?_*kShPo_&P0%QqyW>kp-ia%=+kg zuF-I0%T2c#s_I2|9WMF z+{W)wB&HoH0UE!@e~QpqfTx8cqHJr7(OE{uJ&oqiw6lGxG_DKWRvlnEuC`(ky1x&= z`a~wp%kXdgM%D?u7$9o_Jo&sd)8lFJl{5^0B>x{XL8eZ?3J^vAC^M)8TG={*$Cn9m zGv>Hr3FO*GfwO*Q$<+ED>HzI;RB9BZUmj+sUTFN8m{If4fBZ9`>Hw9&XG~I>zDm37 zWA&S@bh9_V9h}TO%ore(k7@xBj~-NWZL3dD>`_G}#kP1bW3V`UAtWlkNEgAvThvI% zyP3(6yzb`S4uzl!lZH&WHL@^Fp3KVVjh)#9-B(u$vvPTspfW!M7|(614)AFFF?l?j zM~|d$eX4nMf2JL!yexktziwlYp=W|%jjtfEvVgtxs33E9WHO0Nox*yC;wE{`uHj`r z4ZF)GGc}I}*{`yh-uM=M239SHprM$R-p;y@yz@)LFEXnI>7%N$Yp;NpprxC0Y;pvD!*zKjTtW^6I(~{XqYiZ zg8o9tonbBVNHd?|QyKG&_X8e23ebdLYSgX2MpX2P=+Wfa@w5C{AKhaCygt=RppIdB zE3s}Re-JSnRSAqrvHG4V#iG)#H;%`DGZS$4=vls05)9z?E!Uw zN)UM`{xfk41^5*o-h*nDkgX9|u9{iP^)H2NHO0)>%1_vW}XY4(4PK?a9Mns0;8m zxS>@VuPS>s88k*Hp+`R|g`RatzAQi`O=IAtVbMfbQ)ZovtQoY-K1yRF`d`BS7Sc1q zf3rT)qw)Gi(QcL=wRyGlOcb4s0cK|bRdg%B6Y$GR!*78DvhWxB09r$i!zrzYIDHXd!2`UoocFF43FfGVQlhfNi^e!LO3#j1AZAf48gy zj4BRg+OHVXYp=M_YCBa2*!Sa)5;LD8ptaZ2c9d_ArqA}X(AFxt_vEwYAp2@seLutn zpv@nlAk__&GDdU}J*z~~=6jorHV6g8T1KyrE8})^3&3u??l0w!_*nC;jL&R7`qcd` znXLImGD0QXZf*g36+p@u@zeb>e=_t~0v5=EMDqw0WV^WqK$EcK&CuT=29P`$W$DQR zv|_+4pfQa;84D17&cwd|_fOR|x#T@VziqMNuqR)l-Lsz_A1$YKtzE)TS%8drmCso| z)_gPLGyHpeeKz3F=X(Y@u<^=YEPZi}|Z3A1QPsx8-;B zwKWcFNuz#E*?N`kb}xf^6sc+jkU}GigW59(hTVAfIpS+7z^|I%9-tGNIqkBIb(z(T z&-T;fd}RSzC~trWJ@i+^lcWb7e^HgM2N|n@=&L+tfT{z?y0llL*6k6GS?#jQmjQ~V zC2y~~#`x&S&oeU2Xg~ZsyyA28>F{_kb#3o?R6f?0A+t%$=31p)xn7KNSTgH1_ueze zF{1Wp?p}N8mqC#^vlIyl=<$`$<-&WswM@(=vF`=+Ca`mFeXREpvafzme}L9;ltn%K zJiOO8d5fes!)lYlMK3wzwOm;J=Pha^Pc$#jf@s;Sdj?1jba;^a3+n)p#$*Z^Q6N@X z6g?g)<{a|e{rFbWvPfE4JbK-aSsQ)wBexJCQdUoX&D)FtdbKyA*NgA@F%NpvA_Z&x zEEB9PgGGlHH=@^l<-MmQe^F3qDVR0?487UDZQC22dKA=E=&e)YwV`$--&x4WICB0y z?O$~O#(Y;79|exlW?8=5QZR;Rj~misXnt0#A!YFbzEQ|nxAyE$KJW-o)NT3JsGn^2 z{I3_pMf@2b*t_T!pD4)Gbov^}h7{Jy3cNVRT08SUk7mH0BV|dXvAEjk%9c>bLU0QLOMAkce;5KSH}T>I3U@13S7TKDFGqIYI4Xgrpe z=PueaYtHgdx9K&MZJNIvyYzhkZ{k(|s!u-Sau}u1h&HWi5n7vP;w_8gJ+tBjDZ6!@ zk4wNxAynLlf930$(~S6f?Z^swK&fBj+r~gy5M!;ZPyNj6$L^i^?*uZ$Oq$5h zdJ(au3|jfA|%)Q{XTvn1PLE8^ak;GjslZ0%s?icV>cxW zZ+vV1*8QOl!1$L?qrk-21?zz|#$9Ba1*BkJ`;gbcS-M##e-iO#+E9=fMd!V!#yD&| zVYO4GV9f++7YpW;M!c&sGGkai)$_;t+8WCnpPe6~k1~j;{gu(Go_>hdJ7G*=B`b$D zhAy~7GNSQxtwCl6nfie@)<_Hbi2-^vwATXkS|Fy+ObgHhJx&yZWGy5E`q#nHbA28C zX&Tl7F%>)}e}H4s$L#$GurY=gb1;P>y$9PySO6_xG{9XV?X$ChD9vK-(fAn)<=tB` zz*ibLYJ(T%Aag*iJ}?br1*oK1mI=$yOS(}(XSE&8aaKE$8M#-_6@T6aMp3F}6y=o> ztsKYeH!{MVfl3rV6VZNXH(@E+OXsngskKph&`g>Ve<_c3Z=H%>OE41p1bV@(7sPt> z8WI05pT5WMR`m7ZWe^)IS=YJ`lde_huZCVsYd)SLSY|n**ECE(iPBZMwqFXM88Pro zkknYV-4dJuq8Z`)Bj{+`YV+DXdTD7R{=N8=f+Imu8lwBmN+VHvS8bQbw(D`CRPK!S z>^xuXR7M5}l|o3?hglP_1V!yqc26$UZe6qO4CL4-i1Y$v=3vNqMvD7&y>0jV4n+a07*qoM6N<$f&+82z5oCK diff --git a/platform/src/font.pxo b/platform/src/font.pxo index 5fe7f8acaa8475a856ec09e3c8ab4ae806da2e95..47b9bf2d41f473abc67a4718741ec3657c0c2a57 100644 GIT binary patch delta 733 zcmV<30wVo{CHo|hKm}$2003jLMXwBhjR{(b)O?iw*ue^~q;`td4n>?gaD!jc&T> zAUpcngp2;klgArslOAgJeJ1+hZ_qJy&E}^XexbIbKG%1aHQ|7nDY)_j=RvXE)@I~U z`hv={OJL+LtY@99nVLe}j}~!%a=v(IWWahjdz*4Z^F7g{}~Q_FW|ELzXs%} z(VMXwBh-3kCe0003000030fibAz&jG;&NLhJx65tZ3 z3J?OWfC#`)g%wVm%!0zC1I1?L%Lm%t7!gwrLX$c?^zvy6Hpb0qc)NgMT*@Ex7j3_51-xl}rg`01|mruyPbvbB`wfAaprfWQ<#>lC@WZ7u`S#GC)hd#zY zoUElDK_3r9S5xcz7r8w-}2Qa z<+GA&%@aqqBAy+z26fE_&iFQeCtPwL92~@A9D?r6VP5F-0!~E7Nm~P8!wil}2jAaU zx^;Vq*565NfBwwh-I*Jq#q-_xLymw({egdI&>V~?bc)c4U>;V009300094iG^pY48NmgNS$H0Q5&#n*1gHXp z04~VF6IxhNNkKtU=y0O%S3C0+H(bW`W02(*Zgkdklf!bQ@tVF#Bkj=#KrAZ<_0H+|<