From ec64f272c4f031fb9c56edeb615eab4eb92a912b Mon Sep 17 00:00:00 2001 From: Marco Date: Tue, 27 May 2025 15:38:08 +0200 Subject: [PATCH] Rotating prism sprite --- ExternalMaterial/Prism/Prism.png | 3 +++ ExternalMaterial/Prism/Prism.png.import | 34 ++++++++++++++++++++++++ ExternalMaterial/Prism/Prism.pxc | Bin 0 -> 2757 bytes ExternalMaterial/Prism/Prism.pxc1 | Bin 0 -> 2668 bytes Scenes/Actors/prism.tscn | 3 ++- Scripts/Actors/Prism.cs | 18 +++++++++++-- 6 files changed, 55 insertions(+), 3 deletions(-) create mode 100644 ExternalMaterial/Prism/Prism.png create mode 100644 ExternalMaterial/Prism/Prism.png.import create mode 100644 ExternalMaterial/Prism/Prism.pxc create mode 100644 ExternalMaterial/Prism/Prism.pxc1 diff --git a/ExternalMaterial/Prism/Prism.png b/ExternalMaterial/Prism/Prism.png new file mode 100644 index 00000000..e1e70681 --- /dev/null +++ b/ExternalMaterial/Prism/Prism.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:753a83794096ae16edc691f01ccb38acdc16ff7e455398abe7ad45ab6b579e56 +size 2134 diff --git a/ExternalMaterial/Prism/Prism.png.import b/ExternalMaterial/Prism/Prism.png.import new file mode 100644 index 00000000..7045e78a --- /dev/null +++ b/ExternalMaterial/Prism/Prism.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://kpiqfphw2d2q" +path="res://.godot/imported/Prism.png-4949829a99e4ae9ccbb82d10468e6a96.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://ExternalMaterial/Prism/Prism.png" +dest_files=["res://.godot/imported/Prism.png-4949829a99e4ae9ccbb82d10468e6a96.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/ExternalMaterial/Prism/Prism.pxc b/ExternalMaterial/Prism/Prism.pxc new file mode 100644 index 0000000000000000000000000000000000000000..9a256eff0cd9338977d01cb7f8fd7bd5b5264238 GIT binary patch literal 2757 zcmV;$3Oe<8ob6iaQ|ibTe}BqUz6wtErRvl<$By6=)Mo;|C$d z^}P@V=}7{>=b5cX)_ORc zM-XA27%^+GY}0b^Z-gn?ZW;l{S+T#>WdI!#0ZYP1MsYQ;bwX=sd9zeXSY|%Z?C6aQ zqy>8OA6KAqn=_cg5CMNVldLlG0^1}C%}B^JmS{OW z&(=o{P~lqVi4ur$P6@p^#Sr-h-g;n8k@=}Pl5&$H&vPPsQ`2T*Jh_J0hPiF9()<7> zZJ`Ddd#8!xAWu&K;GH7VDWlmbm%G@~I9bsfWBJ;p2aCRTH>kh%J(Z`iw6GqEoQS;x z8)cDU@fRC~KK8V0gt<)Dit+Lvg)cs_R8w!HT6psjcQtCl&>CTXg~TEdmMHGS&7_5s zu)*PGZyIf`j#pWY{B1RNHO3A{uBY3E4OdbL02T^xrjRHLw?5GY{QsQa@+$TvhfV2X zdIBAC%^^uWByejji+8xU(G%GE%hgg}Z6EW^R z!q!}q97iV5nhE^>nbB>|QmoA^Wra!uT3{tfn3(0)Cajl`cQ4=SrZ*7hjSQ8rCnu;R z@~6clNfHI&M3}^!vn#ZGP)(9yH@!g zftQr75WB+CGABq%yKeRu!^oV}xQX6q>4C`9mcU5z`jG=svSAKp6H#!q#7cN1Ig^k< zCP~zS6p$gEwB&nLOjO2Pc0Y z4A%1w3kAs$R1m^d6yW&3cG~}ko$XJOL?2s7 zB7F!?pYOh6k!9?t>nBoCcoRHqsu{Kk_ z9Weq&8-Dq+<`~x&y#S!l@B%lN@U7Zd5vP0KpP4r2|JO4(GWC-Up77$UWR84G|I#l> zQ!*TXe`5G_6elKqUyOU%r0^-3^5vS}bmFF8IG6cu?w6e}|Lo-UuVisMF2dq96HA|N zSUfARG~1V3)-|l58|UVtWYNPa>NA;7E9o)r@1Nq@(}+|iAezQBJ5Ig_q&oCRj%OG6OG=mnfL&%KMUd!Ir4wHeDE`{3j{~x- zFBp)1`K3^LFZrv}sl6px-1~HJijn&({QRf1rCAdgSy7nq`d%D1=2LTV8+h}Dp-ek= z3UTt`55uIPh)v0e4L}2JU+CeAHXt(*e|`m$sUM%rhJvF}ztvb?|uS)~;x`VqeTk zsh29^v5GFrbKeW{j+r({BF*kNQ{-mu`$}{N{2bs=)cN!8w}BnH=RPv2byzyYgtvYU zoOc`xEv8B6mp?B=;8}U-$Eunzeg99+b0B)gR*<}=SEq)Nyy$p99 zZ%Q4vKIwHVwR3H?r0Oi3SLbr4)^ER-D%V$_@z7?kK$Wvf%*2nqQhlKY$P#aFn!ZtC zy{i8htD)fb9K0iPIPJYWqOg?ITX$Au$s)sHblxc;xw#83E9yW$<_w22zE1)(k(PQ4!<`Q2XI&-dr z&s5q~Uu&zk3JATq63m3Q))L8N6t}L0_|_R;4J^Zwn+6xm+r!|(u6Nkm3TNp2bfDiY z_(oi*>*53{lNNvJ+@1C8L4c%k?DiJ&q{m#7wftMdek5P+tVhGT9C#szq(s^isoszU zo!4mP23A`4z~BY-O!VjVnB#BX!lB$-2(`FVCZp>OPPl1YiKmu0#g5WN;~s0ARVw1l52Q{_nq3O@zS4jLqpFBvxw2qAU<~Qo zZf#KR!TCJu(0tQf-S=bCX{ zPfGFE*s-j4&(*jKxYM5J3#gNd_U-a@SrjFf<)mf#`np^@;bK{=o$b@w8}>1fBBCzm zZMCQAcq(wR(D9zD!yz@+Qy&8&9N{L@Bq!rdI*C}b5lPwjO1!HuMF83H0I3>(!|`oN L`G5Wda%(z$Sp#gw literal 0 HcmV?d00001 diff --git a/ExternalMaterial/Prism/Prism.pxc1 b/ExternalMaterial/Prism/Prism.pxc1 new file mode 100644 index 0000000000000000000000000000000000000000..b061ec4d4af2a985a7bc49149f080950db30f3a4 GIT binary patch literal 2668 zcmV-y3X}DCob6g^Q{v1PzCUFuUxm5Z7pvY6itGX+i?~&)lXOTRn@I?W<$u53NeF>a zff=~odha`qLV7*xb53{88{xPi42bi`=K|q6rt8ST)O3jRHv(9m0f=+*Cs!bX5PHNp zRUmxej3F9bqzV+8p}Lmqqeqq&L`otVhAXhN#7ZP3@FePo4p1zp5$8Iv0*H5zLl>Y1|^GI~Lir!3QCFWXJ;HS>ROx>J-uVj!CgS zH-LUJbnFAqD7lUU)etd-Hwa%n81rD64wM06jZVJ@!1k)~(_ zLI?3g@o9r$jtvX_hKQ2wCK*^(#{O294m5}bEO75B#Z}+bFs*^%&J!sinR!4p!&f|z zOIW$)5;M;uB5W7}4TJ#Gpt?>7 zRJ1HX6o?4=K`cj#5=jXO3Rorxl0MzEpp5B8%!65&`)c5=@Q@IUQybG@p!%klCbHiL?F!ObwLRm9y=p>9jBK1=IGq!!-RCCnDib5j;Y=3ACY?L94Z5TwZ zsmT^l;9BRg60mX3Fugg&VEOv)dSFhG`KdXQa+5>XwL)`K)8p89at)CQbK4-Lc|MHW z0u{vePGZM#TrCEGHv&&5^j5cA?jcKKL`iE-#JWummjm^7*mxPZ3QHnsAw3is9(e~c z$|6OhFQyZC$kXZ$;xbt)Ld(AwKKVpaO}vq4qs?XJN^ZfxkdePaY!MEUDC$GaxP=jr z!J%e%7H+PNR>?;G$mV8a%s{qX&D2epNyP_9D8QOQtSr>}NEXn~Pj<_z=;s_ZC5ve> z$ZUN+<8OO!g8*~CWs}dCzt|IE%W}pRTp1ni+;?k)(}+WHi$nH9QmAa}jD&+YJhIr> z&zRJG*OrkR!$k}<+w+LGCjy(}%mV&X44Z|g7}+dSeOfu!6A{8i#k7#;=GuIyTR37w zFq??B)@K2JrsC(oKp>tyIj(O5s~7r7%RBL&l83!2^`_b_O-m##EYOa8t zLKQ4a#L$`w{QsHJZO#&`O)Vuur6I}Dg1}A3<(C$0lpOa?ywS$)kY6-YR6?E{qY}@a z7Lx>l=eQGL67`d&S(fHRN@P&56+~D>q3HPTg?zS%*57;Gqr=k2c=(4PR7CmeKREOc z4jmtdFuqVMn`Au_e*}Q(sW1kJHDat5_aMr*1i9*;3KANOoj&D?)dz@-+gl zD9sSNLX#rH2~wvq9xO-Ucv@qoTC=VBJXKo(BhKq(3p(+JIhc(_!H@zippp1Yf(MOp z!cJ{Og<6@WIEmzH-FeNW461q^S$(FdvNHpwQ9%@wsPN}X>$w)%cui;gjLsg6_;oN? z&pRv>#7B@1QIcQ5Bfme6(I}d5JPIrO!gOl>`wcF#?+5u-dC7pk{tktKOG`TwU1{G9;Mh!{blN$TP%tX#ji zOV#Nwg<4?y_gC6s0f40`6#nUxK;GV~l0SKV>k9kmdz{3C_qO1@2eRDWBmXC&>OqT> zKk2>M`{=#K@spLK4?GSg{OYBvml!9Z<8*`9FJivaQw}C#Z^aZ3pyGt|CXTh4^6iKb zDB7^Amo>+@w&?r733S)Da|vJ8M)N4$`})kZIsd<&!QrVNZ19K{&yqR(E%{46$4&8Y z^!<@ylTi#G_kA+%d6UA&c*>`1e$k1VzHu(~)!a`zpa0&;?eAo9J1)YaH4`hJZW=7j z(Ih<(+eRJMoNMd)qGXVxsxzQcpO%ti+@GJ~IRycH$X0l+TOg2V~rsnUs02;{%_>f?Yc>k|fq zZ@&~u?j^rFo!VQH#l24lrx>}v!himfwzO&-B}x(%)bIFFb1@q)Z+v&L)TLS1Odt*& zSC0g7w-DKvFZVp(458dJ;Kp^;MsI*SX@(PpkMFFuAuXBwBRBaZ=(Zyu9E5J)cDOo$ zT^)8SaNyhS1MZqo4BYkN`KY(Prvs>GY}{!T;Cogymb~W0X*&p?h;u%E8>`H8J$|42 zM8L)}wEVC+Cd*x8*tsrs?Z&jRHfT(>;ELc3M(AyNX}*6B#PeR+C%`ZxY9>k{wk0Y?4@;k);EW~Ba|b%zZ9o^s*cz4Zglejf4Mat zbmMa928<)b(w+*9rpRfmN=nzT(!K*a%PD8Pw?GF@_U1JhiTx#4i@Iezy3u5~>*f`& zj4Sx@LA|vZ-c^`uzNJ%?1%{S^+k5y=GZsMAF-jx8EA^a7pVrSR6@KpdLboQ&FS*7* zYQmvjm3Y2fS<)`hN90YfHZ1qyVi9&pwq-wvBWYf1NRgr|gIPV|dmXYfzwOxGv;zCR zwxmqD?Z9?HbkVY+hFiUZVv7;&7jR!1;%Cb8D9M>%T3$jws18EsitW;ny{FJG`c#}t z@mhE|yVru6D~@b)Al6*qBz)XRQ>IRuz4G|4zn%!>3kJl+o5&Z$*frv!VO*p@i?~by zg(K63IQI=!#kJ5$BSbDx5lKC!yzkk5T_~K3coo+|5oujmKxAdVMQURTjxrG9YJ#-l zG!3$*Gj6XV&yG0#YiY2i#TD0U>{yjG=SrD5)M+mAb+U2c@^+Q7$nyeCGs3D$d0mwo zbFr$)P50TKXoQ9iR+sgf?K!qw1z2gwean?w;8NO|hX4`EsA)XL2cS(lu~^d)admJe a-YgBkaBjH(7YDzhoMJ`!zy1S$MvCeBxHbd; literal 0 HcmV?d00001 diff --git a/Scenes/Actors/prism.tscn b/Scenes/Actors/prism.tscn index d134d30d..b6c5d243 100644 --- a/Scenes/Actors/prism.tscn +++ b/Scenes/Actors/prism.tscn @@ -1,7 +1,7 @@ [gd_scene load_steps=4 format=3 uid="uid://pvpt2af54s1a"] [ext_resource type="Script" uid="uid://yf367y2o5oyh" path="res://Scripts/Actors/Prism.cs" id="1_gnsdu"] -[ext_resource type="Texture2D" uid="uid://tm14o2xkomjb" path="res://Sprites/Icon.png" id="2_3vm23"] +[ext_resource type="Texture2D" uid="uid://kpiqfphw2d2q" path="res://ExternalMaterial/Prism/Prism.png" id="2_3vm23"] [sub_resource type="CircleShape2D" id="CircleShape2D_3vm23"] @@ -15,3 +15,4 @@ shape = SubResource("CircleShape2D_3vm23") [node name="Sprite2D" type="Sprite2D" parent="."] texture = ExtResource("2_3vm23") +hframes = 15 diff --git a/Scripts/Actors/Prism.cs b/Scripts/Actors/Prism.cs index 5620e98a..ddd992e9 100644 --- a/Scripts/Actors/Prism.cs +++ b/Scripts/Actors/Prism.cs @@ -4,12 +4,27 @@ namespace Cirno.Scripts.Actors; public partial class Prism : Area2D { - [Export] public float ReflectionAngle { get; set; } = 90f; + [Export] public float ReflectionAngle { get; private set; } = 90f; [Export] public float RotationAngle { get; set; } + private Sprite2D _sprite; + public override void _Ready() { this.AreaEntered += OnCollision; + _sprite = this.GetNode("Sprite2D"); + + SetReflectionAngle(ReflectionAngle); + + } + + public void SetReflectionAngle(float angle) + { + ReflectionAngle = angle; + var frames = _sprite.Hframes; + var frame = (int)(frames * angle / 360); + + _sprite.Frame = frame - 1; } private void OnCollision(Area2D other) @@ -17,7 +32,6 @@ public partial class Prism : Area2D if (other is not Bullet bullet) return; bullet.RotateBullet(ReflectionAngle); - } } \ No newline at end of file