From 79f81d4830c01ee79768ad419adf4b25731f5d58 Mon Sep 17 00:00:00 2001 From: Flavio Calva Date: Sat, 8 Jan 2022 12:30:08 +0100 Subject: [PATCH] mouse cursor --- assets/buttons/arrowUpLeft.png | Bin 0 -> 7454 bytes assets/buttons/mouse.png | Bin 0 -> 15695 bytes assets/buttons/move.png | Bin 0 -> 6012 bytes assets/buttons/rotate.png | Bin 0 -> 6296 bytes assets/buttons/trophy.png | Bin 0 -> 15290 bytes lib/engine/gui/cursor.py | 58 +++++++++++++++++++++------------ pmachines/scene.py | 7 ++++ prj.org | 3 +- 8 files changed, 45 insertions(+), 23 deletions(-) create mode 100644 assets/buttons/arrowUpLeft.png create mode 100644 assets/buttons/mouse.png create mode 100644 assets/buttons/move.png create mode 100644 assets/buttons/rotate.png create mode 100644 assets/buttons/trophy.png diff --git a/assets/buttons/arrowUpLeft.png b/assets/buttons/arrowUpLeft.png new file mode 100644 index 0000000000000000000000000000000000000000..5726d5a707ef0d5d94cc5f507bcdace998dad1ec GIT binary patch literal 7454 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 ttB`XAcl zQr4L+FVNVOHm?O#u-S`!VAkRpcE{pMhrubIY?2rQG&FDno{nC2 zQZ5Zi_{wy7hA^PC(3U5)a6TZ_q-qonrHYd345^exZJ?-0Qk9ZQBPk`RGAJmDR_ka= zD~()olLSUapR!xt$9j2|^GF3>rj)DV)8%qupq?u-FSoa6Adf%74pJlojF+TRm1LYG zo9*6dZg;<#em);WXV&k4etV4=V9VBo8H%#$E3RJ&y@m6p==da-60PN|Gi;-u`;;;~U;--NB8z)WZ38#f> zD!kN2Sje=+2N<67**VT-3YTkM_uWe^7U}o`*5l-={V7H=RvoRGs1dL-JTSqUR>Nvm zC{=b9MW?A~rFx>0qLoU-B&>|_uyIbdtfr3#G|n9()1cfn!YqN$=>OG ztgW1*N~ocTwG&#aGp$)>i&?EzS+Xc9Q>{1a(=sd?b(-0tr3@Nvw=I&|*B1ELMZlTm zk{WgH z!4RElOi4rZ&-z$+qBAapm9T>U59WR>keh&RaF}e?54TPYGQKcx;ar^s7WQuK?r^d9 zxiCG;15Y!WaR?{2$9yTswrbca zq>69i=gRnM#s@OW;f}x@LSe(+8S$MR6^y4GI89_XwC;x36eB6Dnv3ndXyMl0YuR0Y zeb?UTbkJp-&&}{A*3Fay((5TVlF`QKn8u!80NTR2I3GOBfGN#L_ScML31`1h+K>_x zst3wQ_GydN7YZBSRTa|fR7!Zkrww>TQqk_%)S`Q*qTR8n(ac|XSl*HJUVyk&JDQ&B$W|z*T5v;aTbzb_kqWBq_G1-^`-8nMhA0Gh7VF15~J1 z!maS}3_cl>J&%UH%cy5#{>VXeNcsE|dl~7I9$_p#l*XN&_2H_DiCp@G_bLV3yTO9h`3N1*!Z5fB+)-x0uTI$Wi|XOd4Nw5yaxL1o8Z@2%_^Y{QQa_s+0tAt%M-x*9c-Hw|0Je7C}6amSfGZ2hRPw@zlc2 zQ--{-9DMr{y*Iyhz2wD-dy8v#NiIEpI%9mTy`**EE0VgOPkAD7!kXm5zbZ#mpr;?tUSNP(ZYD1@eW6`j+UHe9~ zn)N5%y)g4L*=Jqrr;Yt$;P#yxDcOWGAFOMi_PQ|8%B_=LH4*{i+1Uecf!%LWrV}TK z!=sbT1;lKxzpY{G&SB&4%>3l?4R2e+&~FX8VZYfw`bcutiuu~6o1k9r8F}KEqkiw; z@U15V^Aehed|H3_{E`KXZslcTqHKCmy*b<*nqKWYqduQ!tJu2ftTs5BG3l$-5r`8u=R=pW)d8T09 zijLzYxmACW9C`bPckhlKXb+k9j48RE{-(Mg-k z6CQJa46?tUuyvd3>GUs;oA$TLPj>ESKiYAyY30#1?Q<(B^MaOKo2+5bsYC#pKAoNY zFXgTGccz{izvJS?RlZ;T>F@Fk*}UC3Uq7)tW&5r}R}#LuaC4r$Vp_6FJ?1A@TXQ#C z>n9PeU9+z(IndBCHb^F&8@lg$?t;!>QA_RlnvHJ?-aE^{XGx&mK24Kl5ivhpsOhGeWi`<>1RBR&8sX z(^_+~aJ%=+%Q-1m8c#Q{GnTGeww`(NgOiJ%x^_V}wa8K2{02Gy!K;Up2OJI_zLi+; zx@*951utz_HTpY6NBglvnMIZ4^IW*ID0j@#%;ql_&KaS)oVBGa_}#0u2UP16n%{nN zI{3(;4P7NQ=F958O}0}lE%xBkgOa;iVCfErb&M>0R%aqH|NEm|XMcdZ3tl;yGpxJK HC3XJ;@4kRF literal 0 HcmV?d00001 diff --git a/assets/buttons/move.png b/assets/buttons/move.png new file mode 100644 index 0000000000000000000000000000000000000000..4795f1bb3f559e68a46284a219b01ea2e4c71348 GIT binary patch literal 6012 zcmeHLc~leE8V^ee1k`{_5md&2R;o!R8zd=FAPI{Q!GI!`B9ml-BiT#_3AQRyKyU@> zL2c1ets9~hg&qY_s6kOw#JZrhr9NBG0xosK{oN#hQnl~-&g*{$CYkw`-?!fH&bfKf zQ$h!jJV*orVL*78ND6+1=F8Cmd>=i&&p;s9-k2Xd1D7IckWQ~vVk#8E({(6>8Zjk- zV7%0|W@_Qp4_(C1yk>9#Jx}UC;jXCw=A#pn<=F(Y6zN@H83CNE_~W~ zh3JMxjV?_;?yC-C96j;gfYwv7%J7eie~+Ac-d*ruNlHdD=TgVst?2V>TO)ogBh7py zZs_o6`I@Ltc=U`?F}CoE>!#+S=)~Y3+6mOfdRj`v#jXyw`&Y{@JWh7Ml{Gb2(iQRB zJp)_xoi9K8A-QnC<_3M>k;6eG4|YU*v#cVXGP&TW)HOeCZk04AbiqE4Ru93{{WI?# zoOIyK(gTsdjcK@E+IpXO=0U9T+Myd>v#1Mi`13aZaNq6e?YqAmXyV9+jv1T9-zgRp zF+bk@(}iL82sIVMM`dT7EG`&XU6ncWr$4^;jyrCuJ?AUk6uf?Ad|auH@uzFc>7-o~ z_WoGUHLUl!+Hm%wPsCtiBfmWKO5^)q{@AuNhxe7dEd)k0TUuq_JIB@?Or;M*%d2 z+6fY^oq5H@$uYwtPrC8s+7*tAal(hXk?mP&WN4a3SGXz6*0b0raz)(oExzM7eN^JL zW_Z{(AI9!uQo{I<`e)_WT7+WprqZ#T)RQv{zg^4TtiTeM)|+H-r9!E>xO7=)T$JX< zh8o4G%!nAn@ghNc0;z36G|gCDTe5n6+QqB8kf`degY7l3s;@nEoR8f(|70awb4ItQ z;%r%ZL0tWnkX&+h!RsV3pdU2!m5^UcTC zhE-X9T3riQdJVdIsJ8X~g{_!sy{?8pu*t@R!su|Ju($I;zZWkk5QH6$9+DjuQ@?R2 zaak@`v2DsQk$6NUNxY3bCwuzH$izoPiAUj(_e1L{fBm&dcCM~IK8_d{M1Ep37uQSi z0=JtHB&zJdEu&Za&j#boiGkbJtW%~gxBF7_)pk+B2}NA}t~h&g@E`|r(K_@*xYX_7 zz0|0mW78NLes6t{e6N(Z%*Lj`STuZ#No8Y1IVcr6CT}MSu zK`o^S3d+j-aPqjrA|LVu+_z7I9UrCJZ|5>` z_#WSCX?{_DlikhayOQ{l=fkcg-f24@aP+!e{+9SL+KkVINfm(?J0{*7SlQIox}ojK zLc)C)eQILGzA^%Vycz?eXoe(`FW0JRh(aqvX-2gUj4A>lV3JXX$Wu@plA+0%MnJh) zeTV{K3IQdKBY`D4Avzlio3BS>=1+;0&rgx_6qHF5NdZPa08pbi0vXjRje&0zP%OB7 zaBn8lDUd}3PZ3aNNTMO3R*yn#8k+`F#YSu%lQNM61?Uw@zEl*_0|A}{l-W40pc>LOIAWw~4Blo4D~1R)$n}^G$Fv&AjETs!skneb z0eq;}KebLG>4Vo8da?lWK{p~gI)et&)oS|78U|cE4}kPI^jZx=ESTtYDQeKB>gA|- z9;(5;`$I_47cu=85J0>ifI{BqfG$<9vgAV{r=u!V4Qv^J+l+obn>Uv}jehpb97~ih z`xhE6iS83Or#u-`>nuh95yRh=*Qr3{9aNI z*BEd_BS(AHF`zE;};BfCpQh zvM5=&@vq^Ui_H&;4i`|EG^@OY60JgTvkwAFB&JC$9 zU?3${I~LZA7d!#Qp9zBx9faKzxJ4xXZ$&_Z@P&F5!BG*o05;5EQyB~@%#39+_$&sW z!yXSa_&tDq(pr72R;v_azbm3SJWM}v|< zSp}3J^Zo)w_f8B5ya$Yn!!!zQn!&ffTWPaV&;c)(qJQq_|9rHFTqb8R{1j9_C5%wn zG8PAf%!R3l0_;01e;$)5vkr|nMH>o6rlm8Wah3)2h7iH-1%qzm#xj_ECY#UV^t4A$ zhyir-zSUdb0Q##P(9;wmRF8r3hUm3wOYsdj*faQwH;+R2Z$}~M53~O3`oKC$IU#S< zx43R~{G|;Tl*~#48#{PUp!dBf^wbjM@t^$ktcZWo1O&Y^@>cnMm#%l|daDe)mGHan zdY7)Z%D`I*zw565Te?Uujv7!6co$6r2MLBuc`P`DaF9iWiY&(wgoncFMc~d!7Zwi= zQJn{yFB`&_#qNMe#KR?GVw;Vlv%7Z-ds-K_PA6vQe+SB;Qr!H)rQ#h=4&xFQ36Lv(- zxC2x8gxbM`%XYPN%EGN>JMwY|itY-ZFOYPmd+r=0!Y|v|yShp`Ju|6Qfo+fy-g3rf zk9|Q#^P~n35hdgh#2^oMf4bNdtdQNcE3~bvo$ci_G&8T67B(=85b`OspB(Jom7#;| z8Q&AH1Ut%eGq^{-YZ^}oVB^=T>@vm^O}>lCHglIkEzp$V_Rc2XtOkdA|c-%OxQ3q%H(6ZB=626eek4xO60_^cC*7!m!=Kd3!$Nm z11)RHhJ=lAp)Wk=Ya_Ke{C>4d#OFhf+^WABQ3$=q_^i^ia!A-{mswAbiEY0n2osf_}?{8JDsfY>=diK?S73yyih7QkX-?B62yD z=l(RHWo1t(?x8$_O?%>V!Z literal 0 HcmV?d00001 diff --git a/assets/buttons/rotate.png b/assets/buttons/rotate.png new file mode 100644 index 0000000000000000000000000000000000000000..11b093f20d8a7fa6d9bc2fcecb4ad12e1c034f68 GIT binary patch literal 6296 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 literal 0 HcmV?d00001 diff --git a/assets/buttons/trophy.png b/assets/buttons/trophy.png new file mode 100644 index 0000000000000000000000000000000000000000..a013f429997e1ab8a8139038098545cf535ddc21 GIT binary patch literal 15290 zcmeI3du$X%9LKk%F;E@>{X^6!$AQShyS=?vd&~7`xoc@tuhh1LVj{5JooiR_Zjaq< zd#xf>K#&+isuUk!q7wcgwtvJ zex3RLzO(b0-^}el`)+N`qKSo17g7{8v8vKn2fqdFGxjm~H!`rb0e+2(R4!8}YWx%0 zCy)AM`&5c@^@t6PYNP)pmX|_iPLP^_IU0&UHAT4>L?ax(3aExA&@6^ajKhbH8V#aQ zVqEI*Tl^6(Xb~$rWl-N))4+GG;$4Dqfv3+~ zQCF21%d`Ovjs9ALSCWCjVRo2!ivh$>29gXYUMNv&#$(WniSyyEi;MUn%Bl{h;{k&bc^nlW4G97%rvgVREx zteJ{h2U0W3I-t_f5dm}^P^4Cw2T(pE+bt++c^jNk9MMA{n&EfPey9$exSKq?-p{-)Q)pTQd7=J45_K6l{7@ZSQg=l z&IJ)x+6w+3%vmgun}BX`m`YKBTc-mVUz@jfuGWLqqgxXlLGd9MCb>NDG-EklJFz_q z2N%~($4Y!Vd)ijjtzxR&CW;hL+c_DOHNzc& zIfQh>(HXg&`4%qR39}ZUdu%NWv;zj;MssAhd9+EhPY-x zN5ai+I@OpO)1CYUV7*dMlHp+nJT^C-tr^ME&VH@5Atf$W4~(16XiL{OY8yY;8q*h9 zE%1U*8}N#!qTT7K%O0GHcBiMNGM9u!)nkp1me!19X+KapjC%M`20TuO!{%_)>CNdG zwPF+m8+{@?OBHR0z^TQP(tEOIF3XvT^u#muVn80CVzr{T!pAfCWJo6;4M&$za$`Q? zAT^~&Y>e8GK~NglnBc-9LIngDN&_1cTv$Y?fZ#%DU}J&{iwG4ETqq4}OmJZlp#p*n zrGbqJE-WHcKyaZnura}fMT80nE|dl~Cb+POPyxY((!j<97ZwpJAh=K(*qGqLB0>cO z7fJ&g6I@tCsDR)?X<%c53yTO95L_q?Y)o)r5upNt3#EaL2`(%mR6uZ{G_Wzjg++u4 z2riTcHYT{Rh)@B+h0?&r1Q!+&Dj>K}8rYcN!XiQi1Q$vJ8xveuM5ut^LTO-Qf(wfX z6%bq~4Q%{CT!pEZEkPK*Vc8B}r5yU{d>MQV)4*5O`6;UNd5Y>kg#jNSX(RN+VCX?f+A@~`I4-8!;haNgQ&OWwc0o~howXj$L7 zH9f&Q-ygVq?E3KiSAReF6vcl$$ZR$5_59j#+I&Xo-al`{-K&dF+?(^qx9aU_4I|gi z|8VRBb=RcCeCrPL7x!FRe(B9yzw8j6?W}&`ox{ES&$|ZL+dZ>{>o=DRJ)2kb?YB=q z+{e?G^jY-ouI{bhHZF!uhoU1a*mSO+hRZlIGKQ+zBb>N<>GOZ!zf@Iujjwm%%D4Xm DO0>m3 literal 0 HcmV?d00001 diff --git a/lib/engine/gui/cursor.py b/lib/engine/gui/cursor.py index 580dd2e..9044867 100644 --- a/lib/engine/gui/cursor.py +++ b/lib/engine/gui/cursor.py @@ -1,3 +1,4 @@ +from panda3d.core import GraphicsWindow, WindowProperties from lib.lib.gui import Img from lib.gameobject import GameObject @@ -16,31 +17,46 @@ class MouseCursor(GameObject, MouseCursorFacade): GameObject.__init__(self) MouseCursorFacade.__init__(self) if not filepath: return - self.eng.lib.hide_std_cursor() + self.__set_std_cursor(False) self.cursor_img = Img(filepath, scale=scale, foreground=True) self.cursor_img.img.set_color(color) - if self.eng.cfg.dev_cfg.functional_test: - self.cursor_img.hide() + #if self.eng.cfg.dev_cfg.functional_test: + # self.cursor_img.hide() self.hotspot_dx = scale[0] * (1 - 2 * hotspot[0]) self.hotspot_dy = scale[2] * (1 - 2 * hotspot[1]) - self.eng.attach_obs(self.on_frame) - self.eng.attach_obs(self.on_frame_unpausable) - - def show_standard(self): self.eng.lib.show_std_cursor() - - def hide_standard(self): self.eng.lib.hide_std_cursor() - - def cursor_top(self): - self.cursor_img.reparent_to(self.cursor_img.parent) - - def __on_frame(self): - mouse = self.eng.lib.mousepos - if not mouse: return - h_x = mouse[0] * self.eng.lib.aspect_ratio + self.hotspot_dx + #self.eng.attach_obs(self.on_frame) + #self.eng.attach_obs(self.on_frame_unpausable) + taskMgr.add(self.__on_frame, 'on frame cursor') + + @staticmethod + def __set_std_cursor(show): + props = WindowProperties() + props.set_cursor_hidden(not show) + if isinstance(base.win, GraphicsWindow): + base.win.requestProperties(props) + + #def show_standard(self): self.eng.lib.show_std_cursor() + + #def hide_standard(self): self.eng.lib.hide_std_cursor() + + #def cursor_top(self): + # self.cursor_img.reparent_to(self.cursor_img.parent) + + def __on_frame(self, task): + mwn = base.mouseWatcherNode + if not mwn: mouse = 0, 0 + elif not mwn.hasMouse(): mouse = 0, 0 + else: mouse = mwn.get_mouse_x(), mwn.get_mouse_y() + if not mouse: return task.again + h_x = mouse[0] * base.getAspectRatio() + self.hotspot_dx self.cursor_img.set_pos((h_x, mouse[1] - self.hotspot_dy)) + return task.again + + #def on_frame(self): + # if not self.eng.pause.paused: self.__on_frame() - def on_frame(self): - if not self.eng.pause.paused: self.__on_frame() + #def on_frame_unpausable(self): + # if self.eng.pause.paused: self.__on_frame() - def on_frame_unpausable(self): - if self.eng.pause.paused: self.__on_frame() + def set_image(self, img): + self.cursor_img.img.set_texture(loader.load_texture(img), 1) diff --git a/pmachines/scene.py b/pmachines/scene.py index 3009fb7..75886b4 100644 --- a/pmachines/scene.py +++ b/pmachines/scene.py @@ -6,6 +6,7 @@ from direct.gui.DirectGuiGlobals import FLAT, DISABLED, NORMAL from direct.showbase.DirectObject import DirectObject from pmachines.items.background import Background from pmachines.items.box import Box +from lib.engine.gui.cursor import MouseCursor class Scene(DirectObject): @@ -14,6 +15,9 @@ class Scene(DirectObject): super().__init__() self._world = world self._set_camera() + self._cursor = MouseCursor( + 'assets/buttons/arrowUpLeft.png', (.04, 1, .04), (.5, .5, .5, 1), + (.01, .01)) self._set_gui() self._set_lights() self._set_input() @@ -119,6 +123,8 @@ class Scene(DirectObject): for hit in self._get_hits(): for item in [i for i in self.items if hit.get_node() == i.node]: getattr(item, method)(pos) + img = 'move' if method == 'on_click_l' else 'rotate' + self._cursor.set_image('assets/buttons/%s.png' % img) def on_click_l(self): self._on_click('on_click_l') @@ -128,6 +134,7 @@ class Scene(DirectObject): def on_release(self): [item.on_release() for item in self.items] + self._cursor.set_image('assets/buttons/arrowUpLeft.png') def on_frame(self, task): hits = self._get_hits() diff --git a/prj.org b/prj.org index b4213b6..de7dc9f 100644 --- a/prj.org +++ b/prj.org @@ -1,11 +1,10 @@ * issues * todo -** mouse cursor ** music and sfx ** instructions -** main menu ** configuration (physics debug) ** rotation with vectors/quaternions (fixes some glitches) +** main menu ** implement the operations of the buttons ** build pipeline ** magnet -- 2.30.2