From 707ad758819b6fe80a1cb9acf49657920b47a336 Mon Sep 17 00:00:00 2001 From: martinRenou Date: Sat, 19 May 2018 11:59:02 +0200 Subject: [PATCH 01/13] Start implementing python gui --- .gitignore | 1 + .travis.yml | 2 + gui/CMakeLists.txt | 1 + gui/setup.py.in | 1 + gui/toonchess/ToonChess.py | 52 ++++++++++++++++++ gui/toonchess/__init__.py | 0 .../__pycache__/get_share_path.cpython-36.pyc | Bin 0 -> 276 bytes gui/toonchess/get_share_path.py.in | 2 + share/toonchess/logo.png | Bin 0 -> 120005 bytes 9 files changed, 59 insertions(+) create mode 100644 gui/CMakeLists.txt create mode 100644 gui/setup.py.in create mode 100644 gui/toonchess/ToonChess.py create mode 100644 gui/toonchess/__init__.py create mode 100644 gui/toonchess/__pycache__/get_share_path.cpython-36.pyc create mode 100644 gui/toonchess/get_share_path.py.in create mode 100644 share/toonchess/logo.png diff --git a/.gitignore b/.gitignore index 0ad9c61..3d7a4c8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ build/* *.gch src/get_share_path.cxx +gui/toonchess/get_share_path.py diff --git a/.travis.yml b/.travis.yml index 092dd8e..c778f54 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,6 +9,8 @@ before_install: - sudo apt-get update -qq - sudo apt-get install -qq cmake stockfish xorg-dev freeglut3-dev + - pip install traitsui pyqt5 + # Install valgrind for checking memory leaks on tests - sudo apt-get install -qq valgrind diff --git a/gui/CMakeLists.txt b/gui/CMakeLists.txt new file mode 100644 index 0000000..4640904 --- /dev/null +++ b/gui/CMakeLists.txt @@ -0,0 +1 @@ +# TODO diff --git a/gui/setup.py.in b/gui/setup.py.in new file mode 100644 index 0000000..8a3b459 --- /dev/null +++ b/gui/setup.py.in @@ -0,0 +1 @@ +# TODO diff --git a/gui/toonchess/ToonChess.py b/gui/toonchess/ToonChess.py new file mode 100644 index 0000000..0538b47 --- /dev/null +++ b/gui/toonchess/ToonChess.py @@ -0,0 +1,52 @@ +from traits.api import Button, Color, HasStrictTraits, Str, Range, Enum +from traitsui.api import Item, UItem, RangeEditor, spring, VGroup, HGroup, View +from pyface.image_resource import ImageResource + +from get_share_path import get_share_path + + +class ToonChess(HasStrictTraits): + resolution = Enum('fullscreen', '800/600', '1024/000', '1920/1600') + shadows = Enum('high', 'low', 'very low') + antialiasing = Enum('high', 'low', 'none') + + difficulty = Enum('very high', 'high', 'normal', 'easy') + + user_color = Color() + ai_color = Color() + + play_button = Button("Play") + reset_button = Button("Reset default") + + traits_view = View( + VGroup( + HGroup( + Item('resolution'), + Item('shadows'), + Item('antialiasing'), + label='Graphical settings', + show_border=True + ), + HGroup( + Item('difficulty'), + show_border=True + ), + HGroup( + Item('user_color', style='custom'), + Item('ai_color', style='custom'), + label='Game colors', + show_border=True + ), + HGroup( + UItem('play_button'), + UItem('reset_button'), + show_border=True + ), + ), + resizable=True, + title='ToonChess', + icon=ImageResource(get_share_path() + 'logo.png') + ) + +if __name__ == '__main__': + ToonChess().configure_traits() diff --git a/gui/toonchess/__init__.py b/gui/toonchess/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/gui/toonchess/__pycache__/get_share_path.cpython-36.pyc b/gui/toonchess/__pycache__/get_share_path.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e013c58da462b4196d11091765f272b6271d0058 GIT binary patch literal 276 zcmXr!<>h+y=6{qu0|UcjAcg}bAj<)Wi+O-V3PTEG3quq`3R5tHCUY`S1P&O1EN37t zW&si@j6iuNzba|{(&8fhoc!d(9R1>q#G+LFlKlL<NoJnDOMY@`Zfaghv3>|pk26?LdTAz-3F)aN@nBQq3ld8*^a?6(@u3QV%r6Fc ifPt}y8A$qRLTH4Y5Ee+uEe@O9{FKt1R6DRPkR||*ia(|R literal 0 HcmV?d00001 diff --git a/gui/toonchess/get_share_path.py.in b/gui/toonchess/get_share_path.py.in new file mode 100644 index 0000000..6ac29a0 --- /dev/null +++ b/gui/toonchess/get_share_path.py.in @@ -0,0 +1,2 @@ +def get_share_path(): + return @TOONCHESS_SHARE_PATH@ diff --git a/share/toonchess/logo.png b/share/toonchess/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..d501e517d997fbb059c430ce3be4910571727606 GIT binary patch literal 120005 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�dC3bp9E47$8z`V6x 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%0Akz^S`soHb#C?Fx0Cj0L1 z^&9yw84KjIP?jjh14xP8iK#Pa3(oHjD?cSUE4c&XK9-ZSa}yZL34lOW`A>EA_2Zk(;}{$3=l z!V!C=#ndd?yN}gK13-b)eq=)bUO}U<^f=x6I5^QoFG^QRtQJhVlFJd(n z*)1EvJd2x@?u&Vxs7v-V6FMH8eclQDf7YS5B7|wjohSat)5<8>JPLP6JNsc_{J06f z;f|5YeYy~dPe+AL09^KmwMpUm%RC7XKb@BB8o+sP-@?bk0Y7}J2NzH`x4?Vba*@X_ zLjZIMSfMo5wZAYwFi&<1z)8LHTzdlM2^D3jsP2@oFJxp(H@3(2t|Af2FRhN-CC)Ol zSsnhzh9wfAFPxs4xR7Q34wnDOp43DFnq zx_Wo(8ah%52>}PTZ{Fv&o%?;h;&Nq+*gvzqi+;jp6tBU4fWZ!r^bnQT9)=QF4%0sV z=kGp|uYCQ%ST+L{?qdzmU50J07k#f?6LiqC0E=`Cs&jQcgNwS&shzohr% z8?tuzG$D!kCO_<5ZsCrWjCyXkBtN6&W7E+vry?hO8Q(^)GGFo?yrz!BWPHXQu~O7)$)%`N>T$^Mf4sP|2NhqhhKAqM1kjgIfLJ-H}j{cW^22* z(x?!|xO$ZC{cvq{Au|f!qoP-&y=penO!L?|CgLH)wn93zJ zYUe~c9j@vNI*bKn&QNoMUcG;FD##|GmdM1{&lvyI2TKqJZ6gJ*aG<#wgNg>JJhNRf z6%q_))c-kvo10ZH|INfY0ni;ifgkq;kqM59*{N~$LHF|Vaz3!w+(+=GkM|Xvpdv^f zExaE&-Jl~N-pP?k${^sKTGV)h7gpml_on`@Ae4vtuazDvQ3wXJ+1`J-33g1wV>!0d z#>)%rXy+?TGjYM-B)E5Z!L;5bQ*qg7%3=4h;l-kqYL>tk^r^K-#OA5S$)1+*XPA6o zYm4Y&WAwsvHky34f=dcliGW$_PGNoW_4nlbFU7U<1WF&II{j{V3m2aks%mfh1$}g9 zYwHwbnK+FK?C!NXS*QY_{0j{EWuYQn*>dm@*o}b9;j!+ItW$5BI<6lhlc9J$5yCfX zC(lNq>W~`;)p7+g`3&CVo5X&_vZ)YO$zFf5r>B4Ne0EEf16)pm$BN`)`pA9#-BoX- zBH3QOGt5lO?Oslh;sZVykNqq2*7Ibq6oCqimWm>;?0OZAw;2Y$)PmRShx8-_Wyg4l zeQy(M6sKRqI^@Z9?!WIu${5*ypOV$JRsIgwOw9mi-2c2AtNh{%J{xOaO3>Q#!`Sl{ z*y+oGWwFEpZxz7c_zohc8&}n*yjQ#T?CbiNZmAfoNqLv8cxE)G4k?y5s9YI&TTr!W zTnEY5ZGSnz3%bP65-)~`AW^a{PueoWmFPul{YP;Ae2)(TA?U%j>PHYv0Lt8g)=Xfm z0O8;OQ~`=`1+c5reFo+h*`=lO+lvq|%vMhO?kmFr%rF!Cc?A{tMLjoN>40{!u3`-(gjG`Ew0zDwig5MUuDaf4cRjCSV#rF?k(xANmy`+?>Nccd}raMxg-CV6@9 zF0q1cGKReKfyy+6-Ns|@q33m8-L&=c@`nl{u<&nk{tLI!)lnM#+&KmEk(N%1GCbm3 zoydtF%#B7bnezTH(+omN)7mrpC+=o7l_DaF^)jq}P7BxZ$w6Vv{Yu_kI#U%2W-t%u znO_OR>7(ic@q`7;dh*nWQq5R-#hYLcSKXHE;Oj>jNx_QIE+BmTIVh`q*{EwSCk=z@ z02nIJN4x>iU3?rec^;Oel9Bvhz7(awNlD!j6C>C5^%I(NRwH_Ew;=_Dbbik)D_eCFGlQ zZ@qsFt;X7NQn)TEu4^=O3R`KnpBDEdufG=kob)sZ7;4@R_s4#rU0-56hI=XTExrlR zrw;G#WhuV}z))YXxqHxR^W44fQUeBG${>DmD-f}`tZWmkK5P(o+#tHTGRz5BS<5f& zU)9=fyR{8-Cn#5DwGqx}k{8Q;>89dEBvqy+53eeF;H-Rhri)0jlONz>?jJK>%%6xP z6Obhag})0Z{2fCu*>m%0$8h>&F*6L$9wI_^_`2Z+-ExBv=0*pdeiNjA3%zCH3hT4r z3HDu7TXg*Hz?PU2OT&c)D~9l-Vm67)D1tnh7Z@gIq=A0KYrOKZ+YcPmq*YGOn;-^z zbJ=-pMk+ri4Rl~2FtE71{Dm{K0qUK;-3v7%BP#dk5u2z(PTOVmuHk)i465&>aIGuK zaebSGKl!r)TGJ`JG2@I8vO6ZHm%B23w2s6yWuSTea4OXfgq3WvhI)MlvN| zy=Efq(7O;hx$7FRh^m&rQ>vSiBZz-Pu>F|L0D@h&!KS;SuDW|RCvYl)p~FJE!Si0^ z*sdvnn1G@c8FVE8>N5P9CN$Y`*Y5rJ#716wwPjoo#`J6*r`JwnLd3pTyegyOr?lk4 zB&_^ms9Vy-&Hdzti>iLH@?vYp1h}6q9SF;2k4=XD!4DqhagB`IRI6(4eH<=+11fh0 zB_)lBUYn0wRqBAd@rtqSqG25Pq*cohk5W znWp&7&xJ^;s7w#{K&Z6uasneZv5@W?Ln?qLBONQTjD(>jRDxu#@jz#43mL!>f3WmRG~dtHMLJH~ zE{jZTqeYF3DsMxJf#45>6ioWJ3~Ai~ z8P}|RTgiGr`ruZ z`a_w-||)dwbluv{?9rrBhhM29G)=ARl%A_2R3i4TB48WnNIma6qMhuP;w< zZ@jv;c1XHS`zQ>ZF8upE65-W=ME7gxsi2DW4bXT8dc;SnXE%#^36{TCOoLYJsv`j zKV9$k4$#(*(Z**t3M$&rbuF#W%UKzu5Gm2noLmTX_QHZEO|W}H6W3klK_$vH3_JDC zvZ%gzA~T%khL>-cFz5b)K7dpJf=h??0Njh4pYdM#hhElM7{`jb_YBiwEC*0eW;YMs zpo9zgl}JdZ<}+-QI8(puMk!fS(sOz`txcaN5cMg?riqx6&+sbQF8EgUIkUV!G5OQD z0s3N(hw5B7m6)jS;LUO~ZUTxg=CT9S(5QHxS#;f`GfHRSgM-9&RplbEdLKRYvCqEY zqx*cd9;;48Upi$O;bAq3`gKRkvlvkvEzQuNie?;Gq>+VElSku3$wR5t-sNyUiGLI4 zjGR`e*%YuR_Vg40*sT9D%)Kuxz=7Dq4Lselh|k!j72^E#3p;MX zA~jZ1K|AlAdL{KKIyVKm7(RneJn@EyW3YYtMkByCa-Y0l)OQ`Zvz9tu8=mGXleCUm zoZExnzg3~uA7#VWfEwtfRmZB3w7iKY2herLq;*2{WvlHgGFk@ zAH+!h=p=~_i>FQwm#>^o8OJ{p-Lh=HaPWBP`|l*iPRKrPbk#D;q7pF4-pG1Yw6SK? zj(wTCZ(plaw07Z9qQ?h>Tf(kb=^w4<@(;dZ`1nO*H6&5ez-ROu2sf^6m211-&n-_{ zy?NmS@i8(JZU?q69&R^?Z|`FaJj+Qts-LDYrq!0&g%pTJb9PTT_{xP_OfA+&PNvAQ-y6e*CVjc!IWIgXFnEI20H$-!M+H9_{ zSHWjCg9qXZ3)(WVdD(bJNQRSqm$jXgB6CiB>LPtobt4s>1~$km*qZJe5#k*Ga*93n zlq4ks`^gFY`!+WM(AiVYcL4)^3tV_x5k?Qx%0<2-ryyD-txlNhLyFpuO9XOSPd9!1ZE*#SkykG zHx1i;qTO>(KEB>|ThMLIPE6W)t(}${BB-K;Bpqg^r%}kAFZPcp zOYzP0xi_>2 z2tQivN>bh7@TEmP-&H>U0icN&GFkKT)N$sMBLBMc*^_(6?N2z2N(Z6N-y`>qf@mC5 zXZQN7y8Osl?gx>HM6Hwz&P(5|Y%Zr3R)^1>cWPYJUL8A=l~i6ZzdBv4wweU7>hh*- zF`mw8y461egD*a$&XE7w{+XyH+ieShG}Of+X4E>)vwG;e9l-r1y>DXn#|Yy6M`pL! zoTXVRtScR}B#sw>x3B%0~md4Xsxd4h3~}gvknPQ6~%C0866_3R*CzFKB2WR^6HqI}1}e4Fqti zc?&mS=JE!B1-e+-Dqv5bsDN;s+ z3YaXSmGOm0VijyxJhS(wjTAZ+N#Vr@q!>tKhdwSpc{f}Zt8|7D;O%YsTwh%};YHEQ z*`PR5Paur7R#n*M@+c57`~T20^zxzNXob|BEDWSasMd+R@+48>{mf*{Rv;8Aa)=`$ zb9at*sSL=SL@-Oqw@#nMxNheVsNCY1>Pd50ip(4@?(vrcX4HNKi z1-Av0hk8|f&+$diV`ENV2sx{l%`o&4LpeIZz_XR&JgiWW7rCuFlxF*!XsjA4p4jwx>7vYLY} z>SkN|_FCt2(@|sk;M_jMJF(M>N0sVwQs<<{3_>l3XJ3SwTz1N8O4q-A0X1E`3+A(5 zRcMdwa_d_TXj@YeH;YE#u11_Mw%Zf4refx&Fp((`6O)R)_U-sCaSbnFtj(lNTg-S5 zYbOwr`niQL7K%$w7&BqDbv}eX^`9^Z@$z`VP#xDV-2kvaFW^#Wo(|L<^Rz*y&KlmA zzafZrUSAJ;<0hD~UAER7_5AQur1|z++6cYiVj5}IxA7&hFX0X9Zx9|4(OohF%vA3j zmH+ni@1E1DrtXt zC%Px14Y92Ie&$K8rTfkuvLUOkv14f~4363pUisc7I0SH_c9mYZ0~NnQ0+8dwcJ8NM`zv>}T4&CzYAeh9bx z=T{gZrXe**fv~j$-)3xnoA754ebr4!MPDC+qwBkIVMImNg_r$K6ew@=k{JBQ7(ZAs=R zV8^P<8JeW)3L-vyqY9+9e>+aUp7k(EDxT#`jRfb1$fdr@<+D)j_W%Y2X{5lQwO#6U z_ZdZF1f1|+12%iaapoT8n}6}jt!$FmZCDOZv_G&bseTehviiyX#F||Ro3&0-cR^60 zCe4LHh>Gn8BU5pc($}urKk!@9oM=jy$an?(0x$I3`D{y_UukSY^bgJ@ZpzWzd z$@}kfOR#~LSKW%ZdZhW7E>GQ2!+_bZ?ef1!&)l$Oy->-v7{m-VR-;K}uTM1g$rKnw|KI{{F3SYbJtQ+xtr(VsX$-3@0_O*5A&G@5>|R z=?98rYJODkNMw$|3(a7C`8vszjyfmpre} zB62*297=z)>+qcP;lx8RK8K#1(AFx~+5Upb{3~on3-$T5CA?c&u&xp;(U^nz{vS6z z%NYvPZ_1B8EDO{{acrg4wmR%tmed4uJbdvZ=Ld&mzoH|I7yh`-h)DKQXYN_@!86_q zW7;CNXYcAE6sdnunO>wtYQ;{R(XviJYEv%(f1_m3WG0M7?cmPa45Ho0#KNMYP=9|7 zkuYWHn5gn4^W9CV=Ey>%HETciA;`7ZIV9`x*?yyL?%Jk3W^U7Lpj+T)1D|o-cdpb( zp4qIYOt>qZituOE`*i6fj?|&JU}r0P491-%?#MFiFI8olqUA_n1<;$iRA8yidEMMBZ8%<6bh#z%rkm5FRQ@2|8j(nkVMfQ5D8)T5ggy1as_>Gs8ApD zrTJ>bgC;Ia$v~p%pvX8L19CG6TrvzrIFv)9V*GB7AI_eL=lxDEJ$E)@<(`gZ+-vWa zJ-z?N`$-z823F)F_P<%3vC!T$h(BqUokWU9^&&nAWM*l3w8Di7GtxOz_zf^?6Ur zPw_|Nhqo|__xs~)N}f+^=%p~243eeapb5?Q19F%#dj3CbmvvH*vnGny>ig_#9l`6s zsml|+u=JP(0|;>wH3)y2-q-s6{3D)RyVs!Jnr z$D-SWOWkPq$3iD#;vgr4Y=WEwwzb(4y9q+p&P+{G>zc}fM;Q7DcSFU4&iTM{T9x?; zS23!eJTdtMMnP>d7x6-H97SIzoDkLKdtTSXyp8}u58_nyr#bdWX__X|=|7RuJ{O%x zfxi~r)BBd|rT_YEnd525elFtHoqgQ)eA*3*@;;JG{(M`&!c}~F8cUlH8M@>@V?v!3 zYRj$wNu^7bk5x41x#ph{jHCV7pzA1DK2O1yE~99AwKo#?pJR({qkbJzz#AHTEQW7{ zx@g2<^p5itjrwl6=4d>tKfjzY!I9{xy&?}Ao=ELOTIaQsJVAbndHE1ADA9uv82Z?( zNJ+({HzYVPg<@1hny(6c1A}|QdjVgLjsR`rDzjbANcD@`-(>+)V}xQf+36~)C)@8o zt}i;DTf6<429LxS@>d=XLvM$AIL?|>+H13Y(OO2j!6!Yc->)TFu#JX7D!l2`f5ls? z5AZZ`LzUFd^dR7aRO^oD*byCRqr0_;`i~Fj3`=_(GSDYd3e3FYOEaY=;1IM*GEeRC zp-CB`-*NxR2@#ZA>(r48w%QrB&To=yt3KB(#*DV%CLmJm73Ep_c_h961BZ;l9Eu>b z%@9C6ehN`NRpyH^!MR6GV2#V>J5Ba@Qe}h+X8bm(9-o@(0V}==-ZEYL{T8*CmzM-C zc1(%A-jobfkLyeGKh4Er#2y6)rl;v#eBe#JH@zCb;lK6%tMRD>J^ktPmgBt6I9J*0 zM3MM`Z%gKV$6tCPos|~KkM|W z0B_xnsGP`IH{p&JHC_3Y{cg$RO5Ho^R0{~f9Nkw^@=X3D+(cTd;_D5kMF9`1Z)Wm- zTx9VB{fK46`+}A{h3x#y(|bCqkC8Bb(1pGdTDVr?kC%FGP)AMD=uCtMQbHdirgipp zq)y%MuBa}*;dPiYa*Sy4UeFpZyN`fT38qS)1$)c#mNBrfh|1f|8LMOS5z-rS<8LWO zgd3l<{{214`gb?Scd{LCwA?4eVKmYwdc$}0?`@4FC^$y{73OaB(V>?wamPf=SPgwmj<1vPiaec=~QIrNfl|}8o z>}#`M;0xhEN_dE2VUNS;;Gs=+p3_T4`xOr!n8QRk&+TJ=|xmcB}C z*R6GWLWOOojEpW>TAK|SsWGPi!+2kxf0qMsq!=$a3_w796OcD}26O7OF3lTA@9&C& z*rL~kcJnm{Z#A!_B@KK7uZIA!+-|cQUCLdrY5(w$xa)X-O;@3w@@mt zC=ZhZ9D^itO5Y=`Om8=Cqle42&u56cujN#YcBiCDJ~2m1!(+7&hWgw&iRfy><=ZOX zu6c|4E&leFi&MUNBvX=Bl$N^|t&Dr^zhvE`)w7VRDLAxcrq~COPnGnc(Xhy(4TOGD z5MeLM0B79HwI4c*ERtTU>en+@LO@sa4nd|)g@}%mY>w|is58q&KUy4-n!l8F4QW(@ zsg@;$l3>5Zo#s2=C;!(4n9+ClYyB9J(a}yIIcRZdNx?&=Yk>UuZAzGvgEzRVL+fXe zC_Nu|-TsOSAJ+|NhEP4uWi|S(4tZ}!oR|&-2$<__1I7g2`t-ZVJVbD$J3?xuYA|AT z0<1K9Zf|%ZBW2JIW$ z91pft>FU2^J`31+uZs|0Jh>YL4GB1xU1$3Ec<*G{@5C|~(U48K_ptEehK|Vlj2qPY ztFb3r+EV9w87B;E?HzLH2Tz&sRcF@*gA(fdeRmRv9RtbuIwBuDGB$SEpp7T2>${Tx zn@uL;vih7f)xrHB7)eCjF12krm=oA9Gg#h8Qac}1S6H)uGA*vI8rCeloz4b#ERaq6 z5{?iG7zmhKci$Mj3$94jX>N?-@VPr_y!>O%{SSBB$+P`(tYh8oHjIha z8WPl6tHg2pE2w!|hc~Vsr-d@uOTR8)CyA^Y9$+HKE|cxQC|oLd@eQ;KqTz$^c|MHT z>W>IAh+j70+;Sdb6(ocyi}LaUXJ=xrptqNKez19jebRW>>kQMvKbc;X+5LV*Sh3 z_i0IHA%|LA5B2A$N8)zJRr3G50NG><5tEGh8+NfUKi;8mY9fN-PQ(^YG$t84J`*Ev&$J@=2Sv1?i-174^!$1LdFHs7S))`m1u_?lZPBSu|!K54*V0 zsNB46N#$<7Hr;b2XiV{K~yREkCw&4tvHPeimfW{~nMl5-#dbjgy zp;L27mEH)#qkUWnM#gNG@48daA?~&30u*3sqcRCIm|9(*Vo-N6sXZFDA z`{R5l<)!yu%gOiSainpKh#tay(VR+SEd6ggA-sW;oli7@&}xM%Tqsioi`JXZ{NyhH z!tO(nw%FahJ;pPSbl}D|;DZgoZvv^VAjwceVy>PCIrVKr(=QhF&;c_uLmBR&F>8iY zS#IGd2SuPcBu07dy&|z3DMkE>#}lOltX~64|9LLWTXgKkEK;Xc zGujRf85p+iQ`ckk)x!#Q+u(`EV6*!Vv=HBTMdbe*`Kt#wT` ze`O4u3EFeDd5A>g2dp{re;!6~Kk@hVeOL>=^^j)_*~rcR;ntt` zjpJyB&s%ITtHrTILt=ryMXaqfjsFzo^o_XIs2@Rrw?h6-8T#A7sVYsC?yxXaK|#S3 z5ig6|(CTU~dIko7=;$%SGaT>OaXUKWU8h+ z^~GJD*pVF)QcQ{^nCQq5D{HJt(W0|?exUbzD&#$A9g|=nJ%}=}Cs$b1N|m@IorM+u z#ak(&Ngb@Z7Wea{`%9-&pZ}EnI4f;1LM7g;==SD2NTY!?- ztS5m)`K~s3g7MTX+Ywb#LKn9s_rOBz)ExkE!a@T)kNdw4$yYJ@yAi>N(0v!m8oPLL z>jNVgfy-lmKgyW!1qP6z!4_XzX^rfLW6F!QA3&W!su$G3fdi~Wc?kQK2aNzmd9_ae z?ga?hN>^sEZ+HbZ-T)v9aEV^H>vwl|ag}q&Zp7YpHBe@w0_u!WPC+tif^aSedwk*_ zy5G{rYMrk?HhYC|l0~I=9Q?{lIU8WCV6!yxO9Lv;iR<)H$A_dh1Y!6bpB*ODAgQeP zSeJ<_BmyL-!^PwL6!h`_U&o>bT>h*H_)dD=`#&?a3a&;@I?xtlW{Ss>%!nM@$ls%p;X)7Ts&6!>?q#OGREzgf^`r}UXO`w3=P zfRv_EFNEKHeJ@;>{euJQERHp%zW|AG`}=Ks7g+cmTU!0cXWzU}Zy-ejj`ja97_MHo z_W|S34H!s!f#$1ZXt^(s-Z_D>Goj}DfQ2(TKRNqij<9Wk zek!&Y>PNbr{Xup6TV~$k25*Az2>J}xGCB`T0S7xC!8@33*bk)_lN%c!fm40&=txt< z&BP?&>B-lYFRc`_L+@oJsvXb{{vYkikm&*b*HheEpFR^VKpXkxbG-t-;mr{T-&*^E zARix}mv#T_Pqho=4uXET^rm)VzL-d;9S#S>s)88>KSnib&u4;-Yndno8Is@6pbeOX zoDEp%*1m1h&wN~ghnkX6d<^gW*Z?UikZ|Qlp_RL7RbKv4;w%(vb)I4jhDh5(YY(mx z(oJ~dNc!dWasg;nuNtvOCY{9K+KV=w5a{yxvi2-Fo?mUZm4xSoGb3LaMv3FY8XKbS zCYz_eyeiGq(~M+UiA+K9*9zh&g5KQ?%DA|?o^@gS{#W*+IlSd>v%>W)`bR6PZ!hfL zmxu1}Uwea{^tUQ2Mmz-3W8P|s-0_3Sk;6C8e8n;*G0KL=6mRE>*r9EpI7389**iyaC{+xTBlslFV|1Q^{z9NU}eP?5|sc^XyzT0 z-1>Fr*Hsq0;=+tcg^Eh>M*-4kMX`XH?#}5(&&wvm3n)WJajDQ3yac@eI%nloR#p}R z{R5;Vd#>HD_5o{6`1ihjms0iKG>kc4$1UdUKKfWid{Ousvp!Q!+4-UYYE71Xm!#MU z6!3&Nm0ARz3(nVFJ4$_t6pwwMHIuI#)Ma0*O6*9u73k86BdKzN!qMJbmhIKw>G|y` z#Kr=r5q|t;a0RXv+x(uc_zmc_(}MiVROOAeVxgXS$$j=JoD{@)C_D+_9>Svze)k_n zU`NgXbr8I@!Am`|@b&&DqkA%V_!-iq6OfGc=||H`L0eMn32=+*RY4bKQI^q)^qZ(p z>{DF)>dbb(2mc!zGJmhb5@O5OcLPnBI73Oby`2*w4X^fc;MiB(_O)aifh|w!cD`ay z#_Sl=RpsMP8_GC!Xt`Lm)Vxyp!FVGt(L^e>z+qjUHjk_?xBtr;kq&4hbwenQ0%VH6 zOgc|gS8oCaxzKg=|9Alf#1Z(8_xaY&B*1P++pqEQVfDJ}WoK+a+L^P%EXW3WCID}P zL@zh1OjEGKgUIrTIpfi}{#gi(ohA~BuQ=_&=>bXXZ!f0HN=B8zkBkgvp{C*(g1}2| zlJAl7Taf6Zf_d+igoDJKJRZV>vM_T3a?Ewmpjl1%{g89;3i>v;cuR3(c0y#%QGD)V z$aT)q7}}f@u_httd+o5`PY{03U`6I6%r2hFVP1Ey9ws06BBBN zK37_qo;##3Yk~C6cbM}WzGvu8=5Z+OAuBEJ&cH-GIh8k3c>QpJ?ojrZO7$_Rf_a+E z>fgVpgq6M81hZNJle2^J1h8E!%hNU9Pdi~%LoK1tocM9B-S7^%kA)1XHw?x`-_g*v zqNL$nB~&EZT>9c=ThErg)+gSRP_ikSNh2kdG{6{f6 z`dZf+|CPC~m-F<)`WJ#IM~T}KncJ`41wq&SW{_py`{UtE5rBNU8q<=>Qv=NJQGmB7 zsjMt&YDxtQ?m$ljzC>DpzG?k?eR=-~LU_L2UhINc<98tO!myIKc0rLnSwm5lfdP=^ zUc%1TgNY4a77qZrhKXg<$KNNc_JpWD>r zrOg;{T3>&CA($3hEaKWQg&Rg&tv8%9GBd#yH#YR^kDSRF!L7GBH6Ced>;&f{yeZ)b zkw4y%%cvcD|5U#Tm$f>jVj+a#LCDX!&lE8x@vF1uijpc;^xp`coqwC1EijKGmk8$D z!#4?dFs&3GBvqvpBnUs?<#%mpQlfbrSqjEF8tUrKGETfhjjJw$$?4<6j5+&bd@pHU zz{v(Xmmuiob1&h`zMuCxJeBIz$voh#uHDTx+yM43R8XY$y8mSo3aHCpr%KpS0Mpjk z%q&0qlh{MY>R`7gTj@?E(y~4Bg^-0c*{jPI>rZy$BSxi@K$JQ-TqZ=nF(Xyq$2ju{ z*AU{&Ht+EQKP4Er^FQmGCyp)Ul#pEX*DdOPx$d#nIQ@*2!$e6=awYNg%kP)jA- z@NemNxZAglcOTH?WijYDnU7F?(X10Xi<>|7BO`9+_`EW1~(cv>@1S&9A zh<{zbBvF$;bkoqA*aYgNyZc)Jw3h4YhSd}J-qZxJuMtE+ph{~!@j2PV_Pc@40(tge z83Yq6v^i3NlVl6ze~5uJPoUi^>cV*>fLrJ#sdwhRQH2f7Gq8Wwe46_aKvr`IXAeqX zB4PKsaWIwLAE!6XkS$Eb=&jOI1f9Ljqc?k2a_j|!udJ#3TCuR^S1!}LSdug7cUwdS zqN#n1&@VE3$5cWV0eW(@a=CdGCD})Xedc|e^`Fopoo*jcQsX@^UV$y~^?B2g8j*pKA zmv8<0tz-@kh#wN~n#*b_&s+ag28X&cY|kjW>cL#IK)xC8K=R*W`A+Um8BeMrR{TIv z)7Nu0wth%HH|d`+o(4KM24gcG7x*FY(E2n7w3G1$UQaBn3Y!|6LC8>%^ts7eltWp2%ou%-)_gB2shH=N zWZ{V5c5T{Q#8twF!H3@cYIFcTG_R^q)*u{jYcw_V{Y~sOE*|5nODS=?yN)^bdK#m9 zMmtXm##K@9RMROWB^*(L1M^>yx|*~S5Ofx51Evv05G&gz5#TA85idU%)5Q^k-BEmIBN{Ge^G0^#YTl~GV? z7kBrI*ck8p>?Uk-e$}d+@)3)V5|+o`Aj39jCe;b`9rRga@rvdsGJhhYLrKX{aif39 z6+rrHA{We9J;&0C%yiW_YW0*zigdDASx9R&1r;E%^mqz*(X`R1%x2EFr31gnRUnBw z>l<(GLg`C$EB8FgwYkv+^(>A8odqgx+JZ@2Mxl&&V)RPSLu(>~n<^cKr#k5Jx}o#l zT1hzazl%{cg8g89i>I6rv_d@mG8bCEQI9%?E&5Z7my%O3BB5^JtuX+Z3VfhA1X+%b z2PZYWRSw#1cR>`%?Qx?WnHyjCUTVJWm?h-I0%3(Q42q;XYFeFAN?!|Fp|Hj{iT>RLR{&}Lb4Czr z6(`H1%$iA^su(|NRo)sLV zFnXBYvHc69N6)Uz_jpwVZ#E39>DA!!sJ$sW5WS6xwoyuPaLF@ng#*jt2mD9fG{ z(@l~qP=5(><2GDcTpWB!$OzE9iz|tw7SMBz2T z|7WH2w>Yy5claAs!DTM_sz!-s_)Dy)@a4E<^N0XX{z~0`^Wl#kGv>DF_yIE$z(7MZ zdIk>oiMhA6nw4F~>)=9S_gEcSYC&(Wk4q_~J>^f;7ag0221$l0R9t!NfS=TK^JBgH z)%aT-Pnx+Y8m=-XahVS^lRSkLL=jC{p z2Eq@!j72`_EEPbii_nUnvM^fZ0ZGNU2H`&-=t^NiX=9_RKDq?#MrP<#Y~#mWdrUL+ zVq#zrxU5JK8~iHQtwlQsmMerDsePo>_BPh3;A~!p1ho&5i^qYFP2bCRLIK%x?WUJfT1JOTVfKiM?bn5va$)jt?wQEvHE)H_Y*@o7eRJ0;}e3O4q7YmY0`$_t#_sjrDqU` zPzr;-^Xk)}&3*D#j?0gW;7nJ16St(tNrK@Gm?0ee{oX!H{&D4!?q+*bB&NH6C4+jT zYkLfhcVgC-0U?T0*^Kv!R zeb)0Qis*&X@{6OwC?M3#&7d&z&SC zF56p~m|E1k1{KiFFdA4pj`$qL8DAXx+V8sjetfW5pB4{S_c)kW+~`3OA(YE^v)1wD z+Zn2B>Sy$K?Jdi;u(PmI-nkDjH zZn^GOq^;Oe#)S3n!*#ffelYlSFBV31T3@zo3cF zJoIN?G8ZL*lndZKI;?lsnBdI$g2wHSlIUyZtQ6p_q)@@5$S~{nlb~ zKlRm$x$bXZd0SY`|6(@-rT}#0Vcf!GpjHK6B-g7b5~YI2MlLc;aO?wEhc5p`oe!gb zSZH*mQf|T22=jaXV$7GiXZ0z+dR5F$uC&Ye^}4%BLtGwMRi}T6RE>04Jm2wTC#75AKP7M z_YndgHpl*Obob&VNov_?h^-ZPAiwXX0!GjQ7glKCEBi)&s^^T(>qJy#`j|L2=G3xnnY#-oCHHSLV@(+%w;^8!8=MdYWhx>IR`=6t7p~L7iI;|1IaKJ42tD~JqM@Di& z)Em_`a<*b*xniQDA^iNZ8XBL|ng9mH>7?!2Y0c-l+FIj`!inX*4gR0UZsPV%zo%V4 z%KK|28A#$raB_>s{fFdF&F^{R6$|8|^GPXFe_3&^y9u3sA#coZV--XQT+qid_jCTY zUB%GD)$B%Pa=j`FDcWC3!;k_s;8baw78C)rDBREuE8$BN{Wh(5W8`51?qu#sO(T#9Nh zECGlAC#D#Vn006X<3fvh=Y{y&L2JE={{~touwNimrlzJ{HV!g!^zq(cr)mcT6wr=sXQz83ENJ#vsBME4qob=(hp)^Bj`xhbtSw3yxm zQXLYnVW5Nw>zeg>W`%1JAuvpEF0dE=-0q*=uiU5+93QCK&@r&IqzCBMn4tn;1wKK1 zz@&Qp`d(|~>?Lb1>tT!G^6F~8)O!wqEB&6Y{Y)X&LMk>kHh=1u>{<2}y$$IzMr#}m zBMQAzN9bw84*r{C{}23Q;vi1gub0L}7$V1$3AC7i@^5UiA*p$Em3{s*>OKp&BBYe4 z)#iP$nJZNpFA6LaouyDIe{veR&75!`<>mJUjuL0RgTiB@ptpAsmXx3glE%ltC+m2Z!TN2Tdim7PNCRAS#Tc`zyR$~exxhR6g=opCx6p1$UEuIQ0d zglT}Cdo4=BJRrb0==Mr&kkSi$Y*GPHXM`7DJ)q}mhH)RQe1LxJ<>okl2Nc_;?4yap57>?y2f@>GCACji_xeA_tZ6xhFtAl1`euYl|MLRyKysQ1iphXG zJgBD{Khgqd$-r5YHWRsG(Y5jOW1Wt&Dsu!BuhGDAwmOn^2(&i)0zAK-0t16+4uX`U zN8*!7Nzo^kNya^c4^F?N52qT4IoG3XJ5Zhq3{4uj2m`|l6cPofNZUq!lC-%$(lp+2 z9UH2}&7i{EsY0Zs80)3|uT_8g2CgeYffrq4BJh0NgNiIp+&Y0klUv@}KN}(|j$VaF zHyD-eO|3}-7N9pC0Co4@^Tn<3zKfpL$;A9T$%|0xYGB`xmi2gK`SYjM&=&a%d*9yR zW8y0aP8dCKjW`<7WzEUScyR+K-+#2=fVxU>ycpz46AY}j-+5 z8$*8b-+)NyLNwd!2IiNXqN1Z0 zyASdK<1Ti5Q)E=Ib;`KkqC{mGV&2|-VNNg4){_Va6BL-E`{h_b{)H=}&tCkic`lY9 zqb3eL}&xc?h3dur6* z(*r*R<|PY5FJTR3aAXiLcJ-#b<0z+)^XQ zm~%JHmwdv6-1adSh;1h=75#g~OG?vjmUP4GmqJR7r@FCA1B!dEu>;A`7&GzA$2^de zcm;nxu;4a5XbRG{)Pe%i|Jr%iS!+cS@Y}r!eE8o^_;!Fp%gH&^)4rSqhm|dVs7}fm(ursH$izYg!*-XsvhSC-^fsElI_H z7k{fI{Ku{;n(`{mI3JScY`J_ISNg1<87lJh%KF2%g@IFd07>-8Ac!px@+Sk?Kr0@o z82RSTu7io!o9G>Jh!L@4^FfhBBlLUf2=$}UCX5^2U+^+n0bXDb^V`tp0{;4qDzJuW z$$Jd(Vh1A74Y6F&ZCby?qUErlwQc`r#$Vx-$@Z1NlH{pJ(H!D) z&tC8t&Zq@uULCrp4y5Qmu+a|n8}8cEYqJ(k;xMh%KYX1Tali=zCM{h-p1VUL8I$80 z%;b$2KTXU@yIOsH1+6bMIAJLpa!d06X=Z)N`~^H$Sze_ji@0Gl^*T5SYx3(NvPUSK zrl{=Rmj{)H_wJTk^X|J>cXOaA-)SA@-O?`1rVR8mB>@HJ{Xbyx1O)_S*<-=>9S6>x zzCPXmv>APzt?lT9lL*79c~_R&0&O&vlW6fiKRyZ|eNdg)9mZKa1;J-EKs%TleX1WwJ%J%WZ2i!B^@%vu(j~jw~ zzMY*N$i6TYRf~p;IJDlnN}p9kQ+YRo4eC1x)aM)TQ0GyFK z)9a$~dv)B1!MpcDkm-rGcv;N%=kQb2XZm<(yMXGD*Vj{LjGK-1RG zojDJHJp?Um;79hjg0CyHeC9{|zcS=2nvW@dd2o!X!-A6n7KZ_nj z@K95<`O!HCUWKELZSzpX3WAE4$G=bihFT6*9@H*GbLNd>K2m&tEf@FMU&#r%3I8`@ z{?fma7+jWN%b((&6uV(2?+6oPm~z5gSGsi5>a;pVhA>k(;kFUk(se%|)ZxHP0?yve zi0S_+&}4yt0K`Jw-Q55i4dNW9dU~7y<8J06Z2-mr&P5$yfg)f877%oUg60U)!^Q%F z{4>jRvda60oh}POvPce_Fm!ps3{4Spx2ns(Oh9)SwY0W;YP~ef=`^oMsyyn`PD7HoN_Z?6=ilo6DRISrYK2BL4AtgYqNd(E6Cun9DSTnbPb zt$9i+2Rx}AS7M880zDQLN1R^g=f`)u_Sv=X8#VI2{LOMBqSeI3?!m)!%Z&R-(}ouI z?_j*EOvO=@6&w=A6LdFB2TYNtatbf6^exbRZl~Bd$wcFvda01KlvM4{<0AbTatSqG z=$DNFU{ae=Iq>Gx){Z^23n)je;s6*cC^&d~f8YFmoYLOk03s`Ul=HVOb!=Y_?1=#Z zaQy+QAT3S84UjBa+1Qu@#u)7AVUXW5HNJD*$7bVa6#=`_kOSae6@(PoSz-G_A^>S* z7;XC2TpWtgIt>NAFUhnwuV7i406v(*x77WCYyaAY{jWz780>7LXWi9R%0tGq3CZbE zx5aANTNj!K7Hg!3UU5$lET|xpga2Pm0E>r=gyS9J#&x!1@KTs*rQ3_f5e8<83S?m^ zGa$t|aVlx(FW)|>`aU6^|2qh*nQY~gcUfkYdL|VQS65d7hSnL7PkVZLK4fCzpp8WI znSo>#06k}8!~l&Yz&CkMya|-Xn5n}VuJr^S=74Q2A52Uoxv0R|J@DNLbpnM0BHNKX;1-F9 zOgTTw(!Bk86sj`nY#4=5q_MJOJp_W)Hz%e@iGoy$z$L=(uFt<=SNoG)v~spfC5w}+ zLpid~g##!ZxncO`Sv-kuz)geb+cxJ33JSW|vy=hmleezP-lvDh=OS&lzh!w~{g{wAN?7DM z*MIv%q>zBlpI!Uk)P9XmnF(ow=1;9nsWU0{V;IPv^iy{ZcY-U?^4Z>!X~wPQeT(fe zuY%wZSqi7!nqM$ny-V{{mGTJt@g(mE(NPO^To^y5Om@hH1u^W6xp{3jMl%XNW?QsD zu?Ju+t0{{&7JdEmPX>W}X$OPbT-JwyMT3^))>eBv#j9u91%%C?S--HfzdBMga#fW& zmPjrja0g+5Vxlc=B+iW?N5X@|Q3f`8=wa__*-;<=?VC|47jhW>5eJ#n&$sxPyM7BR zKl;%B(Op;{ag*a|D9{fOz`9hC+@O4|ZXxnGPCCazfoUvB789mkpWFbtywJfFRtIwX zs#S$MMx)t^_tvn}q{6>a*^A_4T)Z~)cjXSOso@pq?ZUdTrzhqH1!jZNIoCD}sYA~+ zo_7=7h3jb|PqE5>^C;pfiKZlFF24S63aSZ;?Y^E?m>E~W88K?qo5{`-!&{yrg(Uc5 zcyq*7iEU_P@UHvAmLO}QX+Y|7F*ced;z1`%%~-8Efdmznlky~T^h~zQ5DGq9P-e%%aF^S!P7a{Pujvz{w6`fnDNeIii?aS}(f3cK)}XV0ql9k&ceELZ6c?8PPh zl^AS8C6oA(J7Zl&_I0?YAGe=nxM7^E0BBzzk4u)L3>LJVyXbRz5PP`Ei+vyQ#`;w{yRM7NViIASue?;*%4C?WKQc;TUt-!zQ zZvDRX@P1nur^Y7J3-Kkgd{*qaU~QQ8+EL#zCw%lSn}&^4EdVbHYn?eN+iX*wOmMvO zVVIJoM0QSALVr#q1BOfxd09bJUQC_kyAg!^@H z<8pNPu2bgU>>p0iBrb-_D`r}A-C-x3mme01X=En(U)~WeujG;A{mAo7x9}HElRV@M zgU-fVdGE9N4RW@{u**CeENNtTfGx!OClkejsN}`oy2-Fd7+|&n-rZCj#t@T>Wpn z8>$O^WP!QABur1|VVAygQ-}=-CXD1aqmgIUE(H`q4v=*K(^(j%>Wv9-NK1}l0<@=I zR70RJ_Qud75EN$$gEyD5$mm^#BTuE@ss5-kss2_#;0am|&4k2(Guin;kRqyE(E&jW zqQH%+3Fo0~@h0n26P>bDO??|o^b9)Z&`L4ju4T41{MwQ|vb~y8cRO;BX(-yNhr|sh zkYFB%rSI>t5J}=m%8!l?kcJiYFonO1mCeMdD5Lz(pAj@ul^}UaVhPdSaXwwj9wy3iNGdw2( z&91V@z=HN4r5vpNhh@*^`_AuH)3Y}bXc7Q1C}c0U9FZyVXm^CN>XAEc7<;U&mJTqJ z`IN@sa?>y>n1Zfw7I<+eD(Lx#jfQAHDVX{Lpc$#a1FZm|%HG*8JhE?t7WcIf;EVPG zs!}~ru?ITUJwEAuW_9=d>3{$akhw}e{^|u}oi71wQWm84xpj(>w$d+o2mYLcOg#WM zR2Dv6KNbRh%lOm`$nqg~N8?f_i87}9Zt5#FwB&`8A||FUbwyg^1CQT2Hqx&-iJOGR z2_#7Qw^?Oo4Jm^}O8;uAsHfKVES}{WAPz@f8A^3GHi}3x91z{Vhqk zL!SE>c!Nf1g_vFY3G&ENM%;KeS^O%v&xwt0L>nW5xBBF6$qV|A{6tg)NzMzE;@5oNzI z84*#@ZUX)$0P?`C1K`o2QRU zVLuXV=B9@&k=Nw^ zVc{!g-;(ZN(V{6SEB|gd{pav!sAIKoNHW^DsA__xpbGWY4lvE}_tpr651Qbq`bjQ* zAvU6=ZC874{KAhIF6)+nA4>?eNEU(0BZ9v0jPt-n@b!Yebh+r-5k3?sdJ|E>>ww@@ zoq9V{_|LuQt3bPMq5kVySnKfdoHC+q({OgI>v`_i zBNz7mz9ADBG^8Q<0kz1K_OtK)?OLQHjGou+gd}Px z!xp2Xl}Y0QX*<@rYFzkagckGlKc0ctzW!T%8Wn9}`{P=@rOAsl9d?!&b zXNNmAae7Ec>YZ<4>pSYO!UTgzKTuwwmVjUTnI;*@K+1g{l$lm4kG~v8xx@rYRm`_v zaMM-S)&i<8TA-c)`}C=Lb=s8^F6&oZ%yVB<0u7+e&1r)v&nnIO$eo;=dWVL76cKd0R({H7xqxRUMd-9kT& zl@(xasXrR%*B{0g;kr2={c-=9599R13hjAIG)t2%leO<%$qjdm`m_vrJr$FzboW!` z1Ez|79`$w=Pp8=U#UEN0l*P!t?k|{~v8lKLdL|C{(Y)}`;w&)XJCjA?j!S4jf)1L( zhW<_1k{F1m`IdRu{C^D&h!0{#_sE-@vw>s*5ORnC^9KYuzCE>}2F(~lLmEKvlt5Nh zl>q1yn%v!7-n&%yh%RtTNZljHDM}AqGb@8P(!7#h$wXqNNv&<-_NtGNmuPWD{}wJH zuQ_?b!I1)nT9_9vlm|$o`SQP){_y`f#sb(b@h_Z@+$9MK3E8V?(|dLw%RDst6-OGs z&NeX_Ck#G(OlKp0maj+eHb76iIU!J4<8S@?m7ORj?bev0PkP46isVlN9T(%OjQLZ} zH-^5-2Bz+4GLBp$Yn_Vf^C7^DMnZq(ud;3w`n2Vb;mLBA@Nr&bevI^q%xwK zWi%}(6?8?j&qvehz`jWR*!_s-UBk)eN`cUc`T4=xmQ!B9U+Zyr-`C(g`T7ky;48k| zdDHp}P(bw!4{ri2h$&F-28p42`d*-;tD-uWno5s@lWLdw_VvqlwtkJQOlDbim&=6M zC%?i93cszm2aJa9?C<6^HYOgV3rI;Bw=er#UE$&d<34=&Fvk~JBMds01x0KdAx=Ll z!FF;#{2H4Q$^Q)3mzl=bp4i8i&jXza`x5={F^0QALnn`+VHwrC!|S3<20`&VQM-y32oHh_;iv&>1~h4co5y!R<0?MM&ApG32z9;2y2`MnvSiD{6MEf6 z_Z1D0k6VBEU;>=`ds)Ec{zRY<*QWk#z7rsH(ZPH0=+{Jm+!CQ*UWQNdeU%ebsR1t* zkQJ(`tsS44Nseog=?c6wxT?()sD^Y-AV{B%_pkV1-{Zf&9eASQ%UpAB3V`XEsCP$O;~hBAAG0=fJ-4wNPX#|J;IQ)1*J zs$1WUIyZhas5~#ejNC00bxuh`1G0ojfKagl6MHaMZx;DoOAa_w0DoZwT7#>qs>mheXjT-gD0Df(`fj`Ay@bcX&l5m|K8!KE)O%Ztd4X{#dm|qTNobGBiG2%H6)xOy z3p*`heyuR5AXcb~gS(}JdrrZKX=q-(d?^P+#jvrlzr1)1n91)s*#XQ4Ak)tFXO%&U z6NFKF0MFmjA{|@?x!e#@TW!*0)ExQqz0m1_d2aBV2U1JJ=2HWOapwy$V(yvD!x_|- zKJxM%2FIro^|y&6Jx?_rJK}%X^Q=2FN`bpd2+zUx$`;{ai!7mej*xA3x(jwk){i>x z1~D|yG~~_c#^q!VMX2Md7&{)ZDPE>}4Sk%@NqnhIo^3HRA+PhAyO%`ky?zq4Fp*GA z@g7f@yvN!`!@tt$$@!kHMBj{79$&7~k00Qz*#1mM|3U{zrEnz!S>NfhBBSASGoxda@L-HZ+=}pX%2CkjM0w|A)6 z#V*}t>~mKer)VkESj4pB+QJNm0p3j~*xd-_WtFi>>ZNJq3nL3j%ul9XZ_x^0QpnbF zV{Mp97327cp8TRKd)GMYZo1z{8T1#4Sug$@OL<@ZSO2kaQ7NpAQ{CL$gNtj3gMZ7} zZv6M?!Cf?m*!kF>pC$F5UbMyn}r_Dzky`AXFHT;?ut*5`_J`7X4i{V$pa($cS9 z!_XioY>>KHZjR_(8~bT1zCmPi1B`YYld6yMxID8;U;*BQ47K9dZm`BQ#1JKa@0;WD z^2=cQQ;f=T6RK8BS8)N?gz5h5@0K6C3xEKnN1m2J+#h5NgD?AyX1xiv8sLNLT@?Fg8mB(9}l3($Dl@2HrD)FS@AW_ejU+-q~sxFz~;e@ z>b~kc=m*S_aftfm^+3FuT&5efC8Xe6d- zx(t8ym%>qD7BLYk3yt|9!hCJ8P-+Q5l)(}`^IE47Li^gUwj#5NjRGM zGli-zK%mR`bom_py26~}9qQ*V!|qlHKiw?re*)ct*j{7%*CUJj#gCVMZwU@`VvY$C z&|OUbG1U0{F4uILonrHRT}$^NWS2D3>s3jugWpElb=~&$`O)s86oXqEcDY6APxn{- zXlNA4PzAaFGH@(eR z1U^$RVa-}U`FG|!zh@FED;k^9I?4I+2Q)IQ&E0lFf&trRt4<+rbv{;Q$svUlAaG8L$- zB1FgX@wyfzfHMD?SXvTDdnYA%H(}$wnXq`c(NGcbI15Ib@BU{a$eRg=7hOS7W!|nKDMP|iR zfoiOvyAqK^I1zQYv5EsW>iDqt?EMPwQW0gCRXA?FmcQ}%U?KRQ$5dspf=J_qzK zu;rA?9EARYGfa(zU*}lE2_$)IOTynTG^W0vzZOeb2>tijW$(I_R*Wh?+N*P568nbZ zu&}b@0HXyI)y>X(6joJ#BXz_B6re)dSu6t19q_@@f;+P^1W zl-92pNINeV6xzCdo13ZSB!|B-TpV~kz1S9RBl=uuV=E~;)=xYtBDsE{&B9GTmBE#D zYTy)V8B7Iz|3I0ADGt*c`$BZd?Ze3PC5rsm#++#MJ+9MA)T^D)pq#=m@|K&f*5#FB zO?C;@<9sG|(!-a!q>it@&u3-f`FfgBy}vzs*VJtOW^T2sCAdkJRj2a@`@u_LeeS6; ztJunpGvgw*JN~|XU)~kZgL=&HI!(+e$uq({oD(#4-8XKh+h1KqgI`yBF%qaz5J8DP z#RKt9?IC?ne+z^XkfWre!T}Dpu>Qn6#YW;e-zM(AGi6{AyQK{Gyx70+K9#1O$CQC_ z=p=g)MI~(DxZ`lwl`s4@Rul?okLk_w@N30wi7xr-{Dnkc$w~5wCinJtTz6u3bOI>F zYdypJ7-8Ap8AOR!Yo&_RAqTvF8_XO=)2Cd0uKqDDE4$q#)!e2`!`?F7FZQzSXt*vH-* zoK>*A-{;}c>4U#5={xlD7`h^MggE%eCx8BIq73xE@GkI`1eGk^qno!rABR_OdYCfU z=%YBUqP%6+jN>Ju+w3!)tU8c3DBGBh*JMF{85qw@s&y3BNKbs!%)Fy8d@xeC)-rQ- z<9{ff$a8@)>VG)LsIfNAe#~VtHSk2*bwx6Pe!3Swe8a+4{IDrAT1yTsnxk4~-=TE& zR{)7r&n<~`M^NqRZXCsR?QqwDDM9(?gk-kol7Eb@!(1g~PChI#mG1|zI6XX(Rx`Vi zM4F?tC6ql`yVP){qhP;bp4*s)?G~{Op)wHoVDUg{Mz??W+vJVOu?bz()j8Vf*B|Mk z_x=}?uWc|c_!OyhT72rhap+*03ltKORC9CtmhSj%VZq1KtK)=(5MyLfMrF4J({^$6 zS2(|eNf&{Q$L9RSLRd6k>4@KcUTQ$XgXkXD;`gIEo52gX-nbWnQ4V_KeYRjXQ@p{t zaaekS9GzbmuE-{e*C2j^FbY8Z%#4?%8~Tzn3MPCYS+5Jc-UgFkKu}WreY9Kh0rvL4 zw*J4Kk9EKyy_7wC#3YOuy#9ct6OlsoICmp>$D6)uwSg@do|-KlP#t zSrL-n0r8ej>o!lS=JlJA0C0Ezdm$CBz^<^Y0`XBcQQg;Ya?&EH5m^^0mM>9h2tnH| z|5}B)DL>W*q!aU#3}JTa;-}SA6H{?7L9Pd!wkNP~E>4wJrK*za=cw_qp`m%ZQRb?Y z!9NEZX(f%n#}OB#A~RdQtq+W(sY6`e)3%BhXN{yl)+|@7msF8-LnORH9-Q={VwNH)ma%L(HX&iV|Oz6|_Lsn9gthC6}(= zGKd$5oJu*{!C_StLIPS6fH~@2Jd=v?())RNx)J^Z#SUayMY^I_DwCm^(3aov-70L`1y2#0j1X)sbfJ@%%S@ws(!V8 zbbiVd!c8HaV9_AaG<9foNmx}vf6*$-lX9#zNca$t5)|vvv>zr{OM;8&bAzjjJ9*~{ zqa104q2B?6l+AMO$@ouAZ^L{P+u6S>n2CUauk~X~hc_?9v#nq~MUw9k#i%sQga+nJ zL!()U3tSxo>+5y52OgmaE5$77$}v#i>RweDM|L~NcTp=KU|=Ah{=$pk4nW&Cm6;l0 z@tw&P`aS?TtNSPCR937yah3LahZb6jxINkqyy?Gp|KWri8CzlNNJz*vRJ3^fi=b+x zh=Gh>v&BplVcBExamaBS{;K#YLLw!Xa3V_B6dsuKNjKE-8+|40`@aZrq>JrmdrVh~ zQ36jBLSwHL9Sq)333VAqj>C8V!8IVcF8ovYaI{9C zFD-!@zd^M`yO5|>&}^bI9y94PzKI;fd-F9j=~{Io<)E;1S$ImnWR7014U#lkfby^sCdKQMPb;tN4-P;P)cDe6b35D!{c z``0UCHch%ijB=dobl6wpCAngzg{#gqC53KPu&bMC;bk$%uUIw4*J4%tP$A8S1S*Z$ zJ;X*#OoY%-LJiZvjBf^e%L*PRrh8hgSre$B!0bbRegC`GW^1JmR0iI zic?Aa#Vuh%Nk85+!$j1pP!&naD1|X)Z41PWF0Diq*5o4^C?;94&tCyn)uMK9N2Rvt z=C2mY(WvPa`|EOZ=Q5)#F?bL>xFTDkjQ#9CmKCh|4#lxyZyw0IFU?G<-#nLei{B$e zeZy6r({)c(G=JHLs+P+w`4n%T>xasug@^%%2=aLnW7?Pv84xP@65SC}j<+978gnuh z`jo;jk~d4OT%gALKtlJiA{kT|O#gNneI0cj0?RUy$Ci5A%2o&ZjFjx-cVi>r8e4lz zeBN@>apF1RIi(k~k3&_mx0@qXHaO9wac?NJ;v-@iLa}oZ3K?n&YXUB44o0e*GqKLU zsF#SBrqigVBed8gB!^0?YdR)Of=3D2qnFyk;ez8PriQa6lt?;b6R8dmZa_3vG`H>5Rk7z-|e7 z`b|BVzIbI`l1JbY;o(FEO#*Sj+*{ipoY>}zt{CTNK+bSe0V|M|>@rg~zLDRk5~|lH zS?`Zfv2d1Sro~A|JHWa_BV_+auFzQmHs6}o4xGFEiQ9Ugw1;TTnmwNYL9gl=c1Q?o z16*DAp=U~5Zj6*JJTN2XWQLdp!FT_NqZxXhaV0c^9lM%RQkG3X!t=jux^E#V`#opG zcAd$U?DhFC21pMfqN*p#wkt4&HTmu4z>tVH*p6g}9>s?SFiPX`x0Tn4CFtqnLVUvL&YC_i)51cDl z`=~aEr?4gcu(RU}nkmVkZ@^lwe8J#he)k|1h6op0*daRW)wDKpE8*!^QTB#x5QaeNSL^ER0XCIVIAa^!!Z?Fco-4qcjwQDaW* z&%wmzG>7^;q|IMfY{+7uvdbz82wnnx`&vR9Aqn2<#ABa&UEMd*pwIaQ&bOrl|(c=Pg0`;8=$hL_L zwZE&0oE1$?bZ=md@#hd90?A;En2?+h!$rkTUP&a2t zO!>$sL-%QB;OfmHn4h_tv!kmXr7(Dsy5mo8h>|6#fd%ULi5F8#4wbDt0)*KmCdpsh+%N&@^XM7f75r0 zp{r6D!kDW|@+0*>!?>JybR+%|jJ>w@5k3PMR*@O>B|#oisfgQ;3JM0`PFEOH=W~3( zS_%79(42a7gw`edh&n-usWhE7_Dfh`rVbBYwU7{9T+l1-KLSD$CxoTNm&`0eqWA0J zR$1{or_yg+Wqe=8FcXge%7)7jnBU~i{t#!T0y$1Cb!ME!sV=Xj#&L*sC{|97iks;t zBTKqp%RY!WG8CDltNT2Nu$M|t*O8W6geqHm)qX6vgjGTet6I_5j`LIEM$Y3Ua~?ci zTpjcPu4Wc8vS8pksIaGCc+(TW@-R-hnv=1PFdy^C29_g5u68l1%!ctXWocNKH_=7} zcXo*lre!Cg4w#z8##?2&3lwC1VqjT?lGHk0jBz1*{KUcYkiW){x$xE^uOwwW*A!dN zl%tC$3@o&XjD@8>%aV*lmXPd5`FuVER0iJNKN;O=XN6BFbtp9zAgdr0?={nDQ_*@( zC5ACigI?rGMgW7q%;Ff|K6@a=bem5;%fbStB!nJDEkMJ)SB@pdb@ge6#^Wp0oTeN@H!Rp4WJpnUJ7V+hW2d7AAU}kOkua6Z1C+s81zrxA?f2%9ZWf6WO5}|jQFugTk z6Rt8PdQBoNnoSB}K{$amVmWvge~$a(c_vOi&JWX)piYK%S>bX96pk&rs4=>g@RKB7 zmX#0pAKV@ccv{K8knlnIvti(=gSKDT`-j}_<*_knRZp)3UH4$WCqqM2=D_JvU=L>D zQHaM_A06&j`YiqQ>K~=D434&Q5_B@0*Ljxd7WH5c-Bnp;k>R$1ia?5?pk9rP3`z~g zL-r^<<2*Qbl<62Q$^7if=C>?fO4X v5z?P5KCf63evZ{8efD`P!w`IZ?mvv}f_JmO-kpo0fgh-%hC=BJBme&cJ}OVj literal 0 HcmV?d00001 From 41836cb1b73df2bf8020c38c025717ef4cd345c7 Mon Sep 17 00:00:00 2001 From: martinRenou Date: Sat, 19 May 2018 17:13:45 +0200 Subject: [PATCH 02/13] Add config file and improve gui --- .gitignore | 1 + gui/toonchess/ToonChess.py | 106 +++++++++++++++++++++++++++++++++---- gui/toonchess/utils.py | 10 ++++ share/toonchess/config.txt | 13 +++++ 4 files changed, 119 insertions(+), 11 deletions(-) create mode 100644 gui/toonchess/utils.py create mode 100644 share/toonchess/config.txt diff --git a/.gitignore b/.gitignore index 3d7a4c8..3c6edb9 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ build/* *.gch src/get_share_path.cxx gui/toonchess/get_share_path.py +gui/toonchess/__pycache__/* diff --git a/gui/toonchess/ToonChess.py b/gui/toonchess/ToonChess.py index 0538b47..54db310 100644 --- a/gui/toonchess/ToonChess.py +++ b/gui/toonchess/ToonChess.py @@ -1,23 +1,55 @@ -from traits.api import Button, Color, HasStrictTraits, Str, Range, Enum -from traitsui.api import Item, UItem, RangeEditor, spring, VGroup, HGroup, View +import subprocess +from concurrent import futures + +from traits.api import ( + Button, Bool, Color, Instance, HasStrictTraits, Str, Enum, on_trait_change +) +from traitsui.api import Item, UItem, VGroup, HGroup, View from pyface.image_resource import ImageResource from get_share_path import get_share_path +from utils import get_config + +default = { + 'resolution': 'fullscreen', + 'shadows': 'high', + 'antialiasing': 'high', + 'difficulty': 'easy', + 'ai': 'stockfish', + 'user_pieces_color': '255,237,178', + 'user_smoke_color': '105,94,59', + 'ai_pieces_color': '130,20,20', + 'ai_smoke_color': '77,31,102', + 'background_color': '255,255,255', + 'board_color_1': '179,153,105', + 'board_color_2': '255,255,255', + 'allowed_move_color': '240,207,87', +} class ToonChess(HasStrictTraits): - resolution = Enum('fullscreen', '800/600', '1024/000', '1920/1600') + resolution = Enum('fullscreen', '1024/576', '1920/1600') shadows = Enum('high', 'low', 'very low') antialiasing = Enum('high', 'low', 'none') - difficulty = Enum('very high', 'high', 'normal', 'easy') + difficulty = Enum('impossible', 'hard', 'normal', 'easy') + ai = Str('stockfish') - user_color = Color() - ai_color = Color() + user_pieces_color = Color() + ai_pieces_color = Color() + user_smoke_color = Color() + ai_smoke_color = Color() + background_color = Color() + board_color_1 = Color() + board_color_2 = Color() + allowed_move_color = Color() play_button = Button("Play") reset_button = Button("Reset default") + game_running = Bool(False) + _executor = Instance(futures.ThreadPoolExecutor) + traits_view = View( VGroup( HGroup( @@ -27,26 +59,78 @@ class ToonChess(HasStrictTraits): label='Graphical settings', show_border=True ), + '20', HGroup( + Item('ai', label='AI'), Item('difficulty'), + label='AI settings', show_border=True ), - HGroup( - Item('user_color', style='custom'), - Item('ai_color', style='custom'), + '20', + VGroup( + HGroup( + VGroup( + Item('user_pieces_color', label='Pieces'), + Item('user_smoke_color', label='Smoke'), + label='User', + show_border=True + ), + VGroup( + Item('ai_pieces_color', label='Pieces'), + Item('ai_smoke_color', label='Smoke'), + label='AI', + show_border=True + ), + ), + Item('background_color', label='Background'), + Item('board_color_1'), + Item('board_color_2'), + Item('allowed_move_color'), label='Game colors', show_border=True ), HGroup( - UItem('play_button'), + UItem('play_button', enabled_when=("not game_running")), UItem('reset_button'), show_border=True ), + show_border=True ), - resizable=True, + resizable=False, title='ToonChess', icon=ImageResource(get_share_path() + 'logo.png') ) + def __init__(self, **traits): + config = get_config() + + values = { + key: config.get(key, value) + for key, value in default.items() + } + self.set(**values) + + super(ToonChess, self).__init__(**traits) + + @on_trait_change('play_button') + def _on_play_click(self): + self.game_running = True + future = self._executor.submit(self._play) + future.add_done_callback(self._game_done) + + def _play(self): + process = subprocess.Popen("ToonChess") + out, err = process.communicate() + + def _game_done(self, future): + self.game_running = False + + def __executor_default(self): + return futures.ThreadPoolExecutor(max_workers=1) + + @on_trait_change('reset_button') + def _on_reset_click(self): + self.set(**default) + if __name__ == '__main__': ToonChess().configure_traits() diff --git a/gui/toonchess/utils.py b/gui/toonchess/utils.py new file mode 100644 index 0000000..448f8d7 --- /dev/null +++ b/gui/toonchess/utils.py @@ -0,0 +1,10 @@ +from get_share_path import get_share_path + + +def get_config(): + with open(get_share_path() + 'config.txt', 'r') as fobj: + config = {} + for line in fobj: + key, value = line.split() + config[key] = value + return config diff --git a/share/toonchess/config.txt b/share/toonchess/config.txt new file mode 100644 index 0000000..f690887 --- /dev/null +++ b/share/toonchess/config.txt @@ -0,0 +1,13 @@ +resolution fullscreen +shadows high +antialiasing high +difficulty easy +ai stockfish +user_pieces_color 255,237,178 +user_smoke_color 105,94,59 +ai_pieces_color 130,20,20 +ai_smoke_color 77,31,102 +background_color 255,255,255 +board_color_1 179,153,105 +board_color_2 255,255,255 +allowed_move_color 240,207,87 From 070c7bf720301179cfc1253240630e7b1c9be317 Mon Sep 17 00:00:00 2001 From: martinRenou Date: Sat, 19 May 2018 18:26:46 +0200 Subject: [PATCH 03/13] First working version for reading/writing config --- .gitignore | 1 + CMakeLists.txt | 14 ++++++++++++++ {share => config}/toonchess/config.txt | 0 gui/toonchess/ToonChess.py | 14 ++++++++------ .../__pycache__/get_share_path.cpython-36.pyc | Bin 276 -> 276 bytes gui/toonchess/get_config_path.py.in | 2 ++ gui/toonchess/utils.py | 18 ++++++++++++++++-- 7 files changed, 41 insertions(+), 8 deletions(-) rename {share => config}/toonchess/config.txt (100%) create mode 100644 gui/toonchess/get_config_path.py.in diff --git a/.gitignore b/.gitignore index 3c6edb9..85b9b86 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ build/* *.gch src/get_share_path.cxx +gui/toonchess/get_config_path.py gui/toonchess/get_share_path.py gui/toonchess/__pycache__/* diff --git a/CMakeLists.txt b/CMakeLists.txt index 420809f..4b18739 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,12 +8,22 @@ set(ToonChess_VERSION_MAJOR 0) set(ToonChess_VERSION_MINOR 1) set(TOONCHESS_SHARE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/share) +set(TOONCHESS_CONFIG_DIR ${CMAKE_CURRENT_SOURCE_DIR}/config) set(TOONCHESS_SHARE_PATH "\"${CMAKE_INSTALL_PREFIX}/share/toonchess/\"") +set(TOONCHESS_CONFIG_PATH "\"$ENV{HOME}/.config/toonchess/\"") configure_file ( "${CMAKE_SOURCE_DIR}/src/get_share_path.cxx.in" "${CMAKE_SOURCE_DIR}/src/get_share_path.cxx" ) +configure_file ( + "${CMAKE_SOURCE_DIR}/gui/toonchess/get_config_path.py.in" + "${CMAKE_SOURCE_DIR}/gui/toonchess/get_config_path.py" +) +configure_file ( + "${CMAKE_SOURCE_DIR}/gui/toonchess/get_share_path.py.in" + "${CMAKE_SOURCE_DIR}/gui/toonchess/get_share_path.py" +) # Add CXX files set( @@ -57,6 +67,10 @@ set( # Install assets install(DIRECTORY "${TOONCHESS_SHARE_DIR}/toonchess" DESTINATION "share") +install(DIRECTORY "${TOONCHESS_CONFIG_DIR}/toonchess" + DESTINATION "$ENV{HOME}/.config" + PATTERN "toonchess/config.txt" + PERMISSIONS WORLD_READ WORLD_WRITE) # Define sources and executable set(EXECUTABLE_NAME "ToonChess") diff --git a/share/toonchess/config.txt b/config/toonchess/config.txt similarity index 100% rename from share/toonchess/config.txt rename to config/toonchess/config.txt diff --git a/gui/toonchess/ToonChess.py b/gui/toonchess/ToonChess.py index 54db310..85499a2 100644 --- a/gui/toonchess/ToonChess.py +++ b/gui/toonchess/ToonChess.py @@ -8,7 +8,7 @@ from pyface.image_resource import ImageResource from get_share_path import get_share_path -from utils import get_config +from utils import get_config, set_config default = { 'resolution': 'fullscreen', @@ -28,7 +28,7 @@ class ToonChess(HasStrictTraits): - resolution = Enum('fullscreen', '1024/576', '1920/1600') + resolution = Enum('fullscreen', '1920/1600', '1024/576') shadows = Enum('high', 'low', 'very low') antialiasing = Enum('high', 'low', 'none') @@ -47,7 +47,7 @@ class ToonChess(HasStrictTraits): play_button = Button("Play") reset_button = Button("Reset default") - game_running = Bool(False) + _game_running = Bool(False) _executor = Instance(futures.ThreadPoolExecutor) traits_view = View( @@ -90,7 +90,7 @@ class ToonChess(HasStrictTraits): show_border=True ), HGroup( - UItem('play_button', enabled_when=("not game_running")), + UItem('play_button', enabled_when=("not _game_running")), UItem('reset_button'), show_border=True ), @@ -114,7 +114,9 @@ def __init__(self, **traits): @on_trait_change('play_button') def _on_play_click(self): - self.game_running = True + set_config(self.trait_get()) + + self._game_running = True future = self._executor.submit(self._play) future.add_done_callback(self._game_done) @@ -123,7 +125,7 @@ def _play(self): out, err = process.communicate() def _game_done(self, future): - self.game_running = False + self._game_running = False def __executor_default(self): return futures.ThreadPoolExecutor(max_workers=1) diff --git a/gui/toonchess/__pycache__/get_share_path.cpython-36.pyc b/gui/toonchess/__pycache__/get_share_path.cpython-36.pyc index e013c58da462b4196d11091765f272b6271d0058..22290a98964d0a27f670544e2e82605085b3a1ef 100644 GIT binary patch delta 17 YcmbQjG=+)7n3tDphBHI-Mh+fE03uZbhyVZp delta 17 YcmbQjG=+)7n3tF9)tmoO8##Cw0WWz4fdBvi diff --git a/gui/toonchess/get_config_path.py.in b/gui/toonchess/get_config_path.py.in new file mode 100644 index 0000000..5df0ae6 --- /dev/null +++ b/gui/toonchess/get_config_path.py.in @@ -0,0 +1,2 @@ +def get_config_path(): + return @TOONCHESS_CONFIG_PATH@ diff --git a/gui/toonchess/utils.py b/gui/toonchess/utils.py index 448f8d7..351786a 100644 --- a/gui/toonchess/utils.py +++ b/gui/toonchess/utils.py @@ -1,10 +1,24 @@ -from get_share_path import get_share_path +from get_config_path import get_config_path def get_config(): - with open(get_share_path() + 'config.txt', 'r') as fobj: + with open(get_config_path() + 'config.txt', 'r') as fobj: config = {} for line in fobj: key, value = line.split() config[key] = value return config + + +def set_config(config): + with open(get_config_path() + 'config.txt', 'w') as fobj: + for key, value in config.items(): + if key.startswith('_') or key.endswith('_'): + continue + if 'color' in key: + r, g, b, _ = value.getRgb() + fobj.write( + str(key) + ' ' + str(r) + ',' + + str(g) + ',' + str(b) + '\n') + continue + fobj.write(str(key) + ' ' + str(value) + '\n') From 4c97aa8c3b803962721134f246ed66c4706c9089 Mon Sep 17 00:00:00 2001 From: martinRenou Date: Sat, 19 May 2018 19:34:03 +0200 Subject: [PATCH 04/13] Add deployment of the python part --- .gitignore | 2 + .travis.yml | 3 +- CMakeLists.txt | 48 ++++++++++-------- config/toonchess/config.txt | 2 +- gui/CMakeLists.txt | 31 ++++++++++- gui/setup.py.in | 19 ++++++- gui/toonchess/ToonChess.py | 22 ++++---- gui/toonchess/__main__.py | 8 +++ .../__pycache__/get_share_path.cpython-36.pyc | Bin 276 -> 0 bytes gui/toonchess/utils.py | 2 +- share/applications/toonchess.desktop | 7 +++ .../icons/hicolor/128x128/apps/ToonChess.png | Bin 0 -> 13413 bytes .../icons/hicolor/192x192/apps/ToonChess.png | Bin 0 -> 22044 bytes .../icons/hicolor/256x256/apps/ToonChess.png | Bin 0 -> 30990 bytes share/icons/hicolor/48x48/apps/ToonChess.png | Bin 0 -> 3273 bytes .../icons/hicolor/512x512/apps/ToonChess.png | Bin 0 -> 68980 bytes share/icons/hicolor/64x64/apps/ToonChess.png | Bin 0 -> 5255 bytes share/icons/hicolor/72x72/apps/ToonChess.png | Bin 0 -> 6185 bytes share/icons/hicolor/96x96/apps/ToonChess.png | Bin 0 -> 9166 bytes share/toonchess/{logo.png => ToonChess.png} | Bin 20 files changed, 110 insertions(+), 34 deletions(-) create mode 100644 gui/toonchess/__main__.py delete mode 100644 gui/toonchess/__pycache__/get_share_path.cpython-36.pyc create mode 100755 share/applications/toonchess.desktop create mode 100644 share/icons/hicolor/128x128/apps/ToonChess.png create mode 100644 share/icons/hicolor/192x192/apps/ToonChess.png create mode 100644 share/icons/hicolor/256x256/apps/ToonChess.png create mode 100644 share/icons/hicolor/48x48/apps/ToonChess.png create mode 100644 share/icons/hicolor/512x512/apps/ToonChess.png create mode 100644 share/icons/hicolor/64x64/apps/ToonChess.png create mode 100644 share/icons/hicolor/72x72/apps/ToonChess.png create mode 100644 share/icons/hicolor/96x96/apps/ToonChess.png rename share/toonchess/{logo.png => ToonChess.png} (100%) diff --git a/.gitignore b/.gitignore index 85b9b86..d1c6674 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,8 @@ build/* *.gch src/get_share_path.cxx +gui/setup.py gui/toonchess/get_config_path.py gui/toonchess/get_share_path.py gui/toonchess/__pycache__/* +*egg-info diff --git a/.travis.yml b/.travis.yml index c778f54..45e60d7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,7 +9,8 @@ before_install: - sudo apt-get update -qq - sudo apt-get install -qq cmake stockfish xorg-dev freeglut3-dev - - pip install traitsui pyqt5 + - sudo apt-get install -qq python3-pyqt5 + - pip install traitsui # Install valgrind for checking memory leaks on tests - sudo apt-get install -qq valgrind diff --git a/CMakeLists.txt b/CMakeLists.txt index 4b18739..6d075e3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,11 +1,12 @@ -cmake_minimum_required (VERSION 2.8.2) +cmake_minimum_required (VERSION 3.0.2) set(CMAKE_CXX_STANDARD 11) project(ToonChess) # The version number -set(ToonChess_VERSION_MAJOR 0) -set(ToonChess_VERSION_MINOR 1) +set(TOONCHESS_VERSION_MAJOR 0) +set(TOONCHESS_VERSION_MINOR 1) +set(TOONCHESS_VERSION "${TOONCHESS_VERSION_MAJOR}.${TOONCHESS_VERSION_MINOR}") set(TOONCHESS_SHARE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/share) set(TOONCHESS_CONFIG_DIR ${CMAKE_CURRENT_SOURCE_DIR}/config) @@ -16,14 +17,6 @@ configure_file ( "${CMAKE_SOURCE_DIR}/src/get_share_path.cxx.in" "${CMAKE_SOURCE_DIR}/src/get_share_path.cxx" ) -configure_file ( - "${CMAKE_SOURCE_DIR}/gui/toonchess/get_config_path.py.in" - "${CMAKE_SOURCE_DIR}/gui/toonchess/get_config_path.py" -) -configure_file ( - "${CMAKE_SOURCE_DIR}/gui/toonchess/get_share_path.py.in" - "${CMAKE_SOURCE_DIR}/gui/toonchess/get_share_path.py" -) # Add CXX files set( @@ -64,16 +57,14 @@ set( ${CMAKE_SOURCE_DIR}/src/get_share_path.cxx ) -# Install assets -install(DIRECTORY "${TOONCHESS_SHARE_DIR}/toonchess" - DESTINATION "share") -install(DIRECTORY "${TOONCHESS_CONFIG_DIR}/toonchess" - DESTINATION "$ENV{HOME}/.config" - PATTERN "toonchess/config.txt" - PERMISSIONS WORLD_READ WORLD_WRITE) +# Define option for building python UI or not +OPTION(TOONCHESS_BUILD_PYTHON_GUI "Python GUI for ToonChess" ON) +set(EXECUTABLE_NAME "toonchess") +if(TOONCHESS_BUILD_PYTHON_GUI) + set(EXECUTABLE_NAME "toonchess3d") +endif() # Define sources and executable -set(EXECUTABLE_NAME "ToonChess") add_executable(${EXECUTABLE_NAME} src/ToonChess.cxx ${CXX_FILES}) # Tests @@ -164,5 +155,22 @@ if(PNG_FOUND) endif() endif() -install(TARGETS ToonChess +# Install python gui +add_subdirectory("${CMAKE_SOURCE_DIR}/gui") + +# Install assets, icons, config file +install(DIRECTORY "${TOONCHESS_SHARE_DIR}/toonchess" + DESTINATION "share") +install(DIRECTORY "${TOONCHESS_SHARE_DIR}/applications" + DESTINATION "$ENV{HOME}/.local/share" + USE_SOURCE_PERMISSIONS) +install(DIRECTORY "${TOONCHESS_SHARE_DIR}/icons" + DESTINATION "$ENV{HOME}/.local/share" + USE_SOURCE_PERMISSIONS) +install(DIRECTORY "${TOONCHESS_CONFIG_DIR}/toonchess" + DESTINATION "$ENV{HOME}/.config" + PATTERN "toonchess/config.txt" + PERMISSIONS WORLD_READ WORLD_WRITE) + +install(TARGETS ${EXECUTABLE_NAME} RUNTIME DESTINATION bin) diff --git a/config/toonchess/config.txt b/config/toonchess/config.txt index f690887..c03b0a1 100644 --- a/config/toonchess/config.txt +++ b/config/toonchess/config.txt @@ -1,4 +1,4 @@ -resolution fullscreen +mode fullscreen shadows high antialiasing high difficulty easy diff --git a/gui/CMakeLists.txt b/gui/CMakeLists.txt index 4640904..6d22d2e 100644 --- a/gui/CMakeLists.txt +++ b/gui/CMakeLists.txt @@ -1 +1,30 @@ -# TODO +cmake_minimum_required (VERSION 3.0.2) + +configure_file ( + "${CMAKE_SOURCE_DIR}/gui/toonchess/get_config_path.py.in" + "${CMAKE_SOURCE_DIR}/gui/toonchess/get_config_path.py" +) +configure_file ( + "${CMAKE_SOURCE_DIR}/gui/toonchess/get_share_path.py.in" + "${CMAKE_SOURCE_DIR}/gui/toonchess/get_share_path.py" +) + +find_program(PYTHON "python" REQUIRED) + +if (PYTHON) + set(SETUP_PY_IN "${CMAKE_CURRENT_SOURCE_DIR}/setup.py.in") + set(SETUP_PY "${CMAKE_CURRENT_SOURCE_DIR}/setup.py") + set(DEPS "${CMAKE_CURRENT_SOURCE_DIR}/toonchess/__init__.py") + set(OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/build/timestamp") + + configure_file(${SETUP_PY_IN} ${SETUP_PY}) + + add_custom_command(OUTPUT ${OUTPUT_DIR} + COMMAND ${PYTHON} ${SETUP_PY} build + COMMAND ${CMAKE_COMMAND} -E touch ${OUTPUT_DIR} + DEPENDS ${DEPS}) + + add_custom_target(target ALL DEPENDS ${OUTPUT_DIR}) + + install(CODE "execute_process(COMMAND ${PYTHON} ${SETUP_PY} install)") +endif() diff --git a/gui/setup.py.in b/gui/setup.py.in index 8a3b459..6bbe04d 100644 --- a/gui/setup.py.in +++ b/gui/setup.py.in @@ -1 +1,18 @@ -# TODO +from setuptools import setup + +setup( + name='ToonChess', + author='Martin Renou', + version='${TOONCHESS_VERSION}', + package_dir={ '': '${CMAKE_CURRENT_SOURCE_DIR}' }, + install_requires=[ + "traitsui", + "pyqt5" + ], + packages=['toonchess'], + entry_points={ + 'gui_scripts': [ + 'toonchess = toonchess.__main__:main' + ] + }, +) diff --git a/gui/toonchess/ToonChess.py b/gui/toonchess/ToonChess.py index 85499a2..3a7d1e6 100644 --- a/gui/toonchess/ToonChess.py +++ b/gui/toonchess/ToonChess.py @@ -7,11 +7,11 @@ from traitsui.api import Item, UItem, VGroup, HGroup, View from pyface.image_resource import ImageResource -from get_share_path import get_share_path -from utils import get_config, set_config +from toonchess.get_share_path import get_share_path +from toonchess.utils import get_config, set_config default = { - 'resolution': 'fullscreen', + 'mode': 'fullscreen', 'shadows': 'high', 'antialiasing': 'high', 'difficulty': 'easy', @@ -28,7 +28,7 @@ class ToonChess(HasStrictTraits): - resolution = Enum('fullscreen', '1920/1600', '1024/576') + mode = Enum('fullscreen', 'window') shadows = Enum('high', 'low', 'very low') antialiasing = Enum('high', 'low', 'none') @@ -53,7 +53,7 @@ class ToonChess(HasStrictTraits): traits_view = View( VGroup( HGroup( - Item('resolution'), + Item('mode'), Item('shadows'), Item('antialiasing'), label='Graphical settings', @@ -98,7 +98,7 @@ class ToonChess(HasStrictTraits): ), resizable=False, title='ToonChess', - icon=ImageResource(get_share_path() + 'logo.png') + icon=ImageResource('ToonChess.png', search_path=get_share_path()) ) def __init__(self, **traits): @@ -115,13 +115,14 @@ def __init__(self, **traits): @on_trait_change('play_button') def _on_play_click(self): set_config(self.trait_get()) + self._changed = False self._game_running = True future = self._executor.submit(self._play) future.add_done_callback(self._game_done) def _play(self): - process = subprocess.Popen("ToonChess") + process = subprocess.Popen("toonchess3d") out, err = process.communicate() def _game_done(self, future): @@ -134,5 +135,8 @@ def __executor_default(self): def _on_reset_click(self): self.set(**default) -if __name__ == '__main__': - ToonChess().configure_traits() + @on_trait_change('mode,shadows,antialiasing,difficulty,ai,\ + user_pieces_color,user_smoke_color,ai_pieces_color,ai_smoke_color,\ + background_color,board_color_1,board_color_2,allowed_move_color') + def _on_change(self): + set_config(self.trait_get()) diff --git a/gui/toonchess/__main__.py b/gui/toonchess/__main__.py new file mode 100644 index 0000000..758485e --- /dev/null +++ b/gui/toonchess/__main__.py @@ -0,0 +1,8 @@ +from toonchess.ToonChess import ToonChess + + +def main(): + ToonChess().configure_traits() + +if __name__ == '__main__': + main() diff --git a/gui/toonchess/__pycache__/get_share_path.cpython-36.pyc b/gui/toonchess/__pycache__/get_share_path.cpython-36.pyc deleted file mode 100644 index 22290a98964d0a27f670544e2e82605085b3a1ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 276 zcmXr!<>i{;%n)tQz`*brh~a<<$Z`PUVjduo!jQt)!Vtxf!W7J)$(#%nfdfV$%NdA^ zS%5?eBT$~nuS#0Kw75t=CqFqcN542Du_#r)BtJhdIU}{WSbrr$5l9b$_~oFVk)NBY zpPN`zl9{LPlAm0fo0?ZrtRDi@;|$i5UYdzyLV9XRJlNFug2a*xy@JYHe5gVo^NT?q iU|=j_29kc75E@}8gauM^i^C>2KczG$)efu+qzM3cfIY1M diff --git a/gui/toonchess/utils.py b/gui/toonchess/utils.py index 351786a..3669aaa 100644 --- a/gui/toonchess/utils.py +++ b/gui/toonchess/utils.py @@ -1,4 +1,4 @@ -from get_config_path import get_config_path +from toonchess.get_config_path import get_config_path def get_config(): diff --git a/share/applications/toonchess.desktop b/share/applications/toonchess.desktop new file mode 100755 index 0000000..7240e37 --- /dev/null +++ b/share/applications/toonchess.desktop @@ -0,0 +1,7 @@ +[Desktop Entry] +Type=Application +Name=ToonChess +Comment=ToonChess: Open-source 3D chess game +Exec=toonchess +Icon=ToonChess +Terminal=false diff --git a/share/icons/hicolor/128x128/apps/ToonChess.png b/share/icons/hicolor/128x128/apps/ToonChess.png new file mode 100644 index 0000000000000000000000000000000000000000..60ecec70589e9b524aa8f61c69e7924968e41f52 GIT binary patch literal 13413 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 MPD)9#M%*OyKlrqUWdHyG literal 0 HcmV?d00001 diff --git a/share/icons/hicolor/192x192/apps/ToonChess.png b/share/icons/hicolor/192x192/apps/ToonChess.png new file mode 100644 index 0000000000000000000000000000000000000000..85de3bdd7ae0cdc97afb32f186a36e467d874061 GIT binary patch literal 22044 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 literal 0 HcmV?d00001 diff --git a/share/icons/hicolor/48x48/apps/ToonChess.png b/share/icons/hicolor/48x48/apps/ToonChess.png new file mode 100644 index 0000000000000000000000000000000000000000..aa53ae14241584bb520dd1858c14d7b2aee1fc59 GIT binary patch literal 3273 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 N002ovPDHLkV1n*D#g_m8 literal 0 HcmV?d00001 diff --git a/share/icons/hicolor/72x72/apps/ToonChess.png b/share/icons/hicolor/72x72/apps/ToonChess.png new file mode 100644 index 0000000000000000000000000000000000000000..9304d1d376e4b4acb0588751a800728ff8229795 GIT binary patch literal 6185 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 Hu0mjfhv}L3 literal 0 HcmV?d00001 diff --git a/share/icons/hicolor/96x96/apps/ToonChess.png b/share/icons/hicolor/96x96/apps/ToonChess.png new file mode 100644 index 0000000000000000000000000000000000000000..710e787e136d66eb284d817f6e1877ed0191d33e GIT binary patch literal 9166 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 Y0Vil}SHuGc761SM07*qoM6N<$f}uxX`~Uy| literal 0 HcmV?d00001 diff --git a/share/toonchess/logo.png b/share/toonchess/ToonChess.png similarity index 100% rename from share/toonchess/logo.png rename to share/toonchess/ToonChess.png From 28c65e0d72dbac3f6d05c390abe93e42156aef54 Mon Sep 17 00:00:00 2001 From: martinRenou Date: Mon, 21 May 2018 09:18:43 +0200 Subject: [PATCH 05/13] Add show_suggested_move option --- config/toonchess/config.txt | 1 + gui/toonchess/ToonChess.py | 9 +++++++-- gui/toonchess/utils.py | 2 +- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/config/toonchess/config.txt b/config/toonchess/config.txt index c03b0a1..e2be22b 100644 --- a/config/toonchess/config.txt +++ b/config/toonchess/config.txt @@ -3,6 +3,7 @@ shadows high antialiasing high difficulty easy ai stockfish +show_suggested_move true user_pieces_color 255,237,178 user_smoke_color 105,94,59 ai_pieces_color 130,20,20 diff --git a/gui/toonchess/ToonChess.py b/gui/toonchess/ToonChess.py index 3a7d1e6..e65fa14 100644 --- a/gui/toonchess/ToonChess.py +++ b/gui/toonchess/ToonChess.py @@ -16,6 +16,7 @@ 'antialiasing': 'high', 'difficulty': 'easy', 'ai': 'stockfish', + 'show_suggested_move': True, 'user_pieces_color': '255,237,178', 'user_smoke_color': '105,94,59', 'ai_pieces_color': '130,20,20', @@ -34,6 +35,7 @@ class ToonChess(HasStrictTraits): difficulty = Enum('impossible', 'hard', 'normal', 'easy') ai = Str('stockfish') + show_suggested_move = Bool(True) user_pieces_color = Color() ai_pieces_color = Color() @@ -63,6 +65,7 @@ class ToonChess(HasStrictTraits): HGroup( Item('ai', label='AI'), Item('difficulty'), + Item('show_suggested_move'), label='AI settings', show_border=True ), @@ -108,6 +111,9 @@ def __init__(self, **traits): key: config.get(key, value) for key, value in default.items() } + # Special case for show_suggested_move + values['show_suggested_move'] = values.get( + 'show_suggested_move', 'true') == 'true' self.set(**values) super(ToonChess, self).__init__(**traits) @@ -115,7 +121,6 @@ def __init__(self, **traits): @on_trait_change('play_button') def _on_play_click(self): set_config(self.trait_get()) - self._changed = False self._game_running = True future = self._executor.submit(self._play) @@ -135,7 +140,7 @@ def __executor_default(self): def _on_reset_click(self): self.set(**default) - @on_trait_change('mode,shadows,antialiasing,difficulty,ai,\ + @on_trait_change('mode,shadows,antialiasing,difficulty,ai,show_suggested_move,\ user_pieces_color,user_smoke_color,ai_pieces_color,ai_smoke_color,\ background_color,board_color_1,board_color_2,allowed_move_color') def _on_change(self): diff --git a/gui/toonchess/utils.py b/gui/toonchess/utils.py index 3669aaa..2ab4ad6 100644 --- a/gui/toonchess/utils.py +++ b/gui/toonchess/utils.py @@ -21,4 +21,4 @@ def set_config(config): str(key) + ' ' + str(r) + ',' + str(g) + ',' + str(b) + '\n') continue - fobj.write(str(key) + ' ' + str(value) + '\n') + fobj.write(str(key) + ' ' + str(value).lower() + '\n') From 9420d591a4ff588fd7dbefcef612702f8ebb0558 Mon Sep 17 00:00:00 2001 From: martinRenou Date: Mon, 21 May 2018 09:24:31 +0200 Subject: [PATCH 06/13] Fix issue with PATH variable --- share/applications/toonchess.desktop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/share/applications/toonchess.desktop b/share/applications/toonchess.desktop index 7240e37..167dc14 100755 --- a/share/applications/toonchess.desktop +++ b/share/applications/toonchess.desktop @@ -2,6 +2,6 @@ Type=Application Name=ToonChess Comment=ToonChess: Open-source 3D chess game -Exec=toonchess +Exec=bash -c "source ~/.bashrc && toonchess" Icon=ToonChess Terminal=false From 7abfa12b1403a7be7e5307476124d251ad5fa3e2 Mon Sep 17 00:00:00 2001 From: martinRenou Date: Mon, 21 May 2018 11:49:00 +0200 Subject: [PATCH 07/13] Update c++ code so that it takes the config into account --- .gitignore | 3 +- CMakeLists.txt | 7 +- config/toonchess/config.txt | 2 +- gui/toonchess/ToonChess.py | 2 +- ...StockfishConnector.cxx => AIConnector.cxx} | 40 +++-- ...StockfishConnector.hxx => AIConnector.hxx} | 18 +- src/ChessGame/ChessGame.cxx | 42 ++--- src/ChessGame/ChessGame.hxx | 14 +- src/ColorPicking/ColorPicking.cxx | 2 +- src/ShadowMapping/ShadowMapping.cxx | 4 +- src/ShadowMapping/ShadowMapping.hxx | 2 +- src/SmokeGenerator/SmokeGenerator.cxx | 2 +- src/SmokeGenerator/SmokeGenerator.hxx | 2 +- src/ToonChess.cxx | 88 ++++++---- src/constants.hxx | 10 +- src/get_config_path.cxx.in | 9 + src/get_config_path.hxx | 8 + src/shader/ShaderProgram.cxx | 10 +- src/shader/ShaderProgram.hxx | 15 +- src/utils/math.hxx | 13 ++ src/utils/utils.cxx | 156 ++++++++++++++++++ src/utils/utils.hxx | 27 +++ 22 files changed, 366 insertions(+), 110 deletions(-) rename src/ChessGame/{StockfishConnector.cxx => AIConnector.cxx} (82%) rename src/ChessGame/{StockfishConnector.hxx => AIConnector.hxx} (74%) create mode 100644 src/get_config_path.cxx.in create mode 100644 src/get_config_path.hxx diff --git a/.gitignore b/.gitignore index d1c6674..beb521e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,9 @@ build/* *.gch src/get_share_path.cxx +src/get_config_path.cxx gui/setup.py -gui/toonchess/get_config_path.py gui/toonchess/get_share_path.py +gui/toonchess/get_config_path.py gui/toonchess/__pycache__/* *egg-info diff --git a/CMakeLists.txt b/CMakeLists.txt index 6d075e3..1710365 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,6 +17,10 @@ configure_file ( "${CMAKE_SOURCE_DIR}/src/get_share_path.cxx.in" "${CMAKE_SOURCE_DIR}/src/get_share_path.cxx" ) +configure_file ( + "${CMAKE_SOURCE_DIR}/src/get_config_path.cxx.in" + "${CMAKE_SOURCE_DIR}/src/get_config_path.cxx" +) # Add CXX files set( @@ -24,7 +28,7 @@ set( ${CMAKE_SOURCE_DIR}/src/Camera/Camera.cxx ${CMAKE_SOURCE_DIR}/src/ChessGame/ConnectionException.cxx - ${CMAKE_SOURCE_DIR}/src/ChessGame/StockfishConnector.cxx + ${CMAKE_SOURCE_DIR}/src/ChessGame/AIConnector.cxx ${CMAKE_SOURCE_DIR}/src/ChessGame/GameException.cxx ${CMAKE_SOURCE_DIR}/src/ChessGame/ChessGame.cxx @@ -54,6 +58,7 @@ set( ${CMAKE_SOURCE_DIR}/src/utils/utils.cxx ${CMAKE_SOURCE_DIR}/src/utils/math.cxx + ${CMAKE_SOURCE_DIR}/src/get_config_path.cxx ${CMAKE_SOURCE_DIR}/src/get_share_path.cxx ) diff --git a/config/toonchess/config.txt b/config/toonchess/config.txt index e2be22b..831ff8d 100644 --- a/config/toonchess/config.txt +++ b/config/toonchess/config.txt @@ -1,5 +1,5 @@ mode fullscreen -shadows high +shadows low antialiasing high difficulty easy ai stockfish diff --git a/gui/toonchess/ToonChess.py b/gui/toonchess/ToonChess.py index e65fa14..e192ed3 100644 --- a/gui/toonchess/ToonChess.py +++ b/gui/toonchess/ToonChess.py @@ -12,7 +12,7 @@ default = { 'mode': 'fullscreen', - 'shadows': 'high', + 'shadows': 'low', 'antialiasing': 'high', 'difficulty': 'easy', 'ai': 'stockfish', diff --git a/src/ChessGame/StockfishConnector.cxx b/src/ChessGame/AIConnector.cxx similarity index 82% rename from src/ChessGame/StockfishConnector.cxx rename to src/ChessGame/AIConnector.cxx index 291df03..aebb46d 100644 --- a/src/ChessGame/StockfishConnector.cxx +++ b/src/ChessGame/AIConnector.cxx @@ -9,7 +9,7 @@ #include "ConnectionException.hxx" -#include "StockfishConnector.hxx" +#include "AIConnector.hxx" /* Read a complete line in a pipe and return it as a string \param readPipe FILE object in which you want to read a line @@ -52,12 +52,13 @@ void writeLine(FILE* writePipe, std::string line, bool print){ if(print) std::cout << line; }; -StockfishConnector::StockfishConnector() : moves{""}{ +AIConnector::AIConnector(const std::string& ai, const int& difficulty) + : moves{""}, ai{ai}, difficultyLevel{difficulty}{ parentWritePipeF = NULL; parentReadPipeF = NULL; }; -void StockfishConnector::startCommunication(){ +void AIConnector::startCommunication(){ const char* readMode = "r"; const char* writeMode = "w"; @@ -76,7 +77,7 @@ void StockfishConnector::startCommunication(){ int parentReadPipe = fd[0]; int childWritePipe = fd[1]; - // Create a fork of the process, the child process runs stockfish while the + // Create a fork of the process, the child process runs AI while the // parent process runs the 3D view pid_t pid = fork(); @@ -85,7 +86,7 @@ void StockfishConnector::startCommunication(){ throw ConnectionException("Failed to fork process"); } - // In the child process running Stockfish + // In the child process running AI if(pid == 0){ // Redirect stdin to child read pipe and stdout to child write pipe dup2(childReadPipe, fileno(stdin)); @@ -95,14 +96,14 @@ void StockfishConnector::startCommunication(){ close(parentWritePipe); close(childReadPipe); - // Run stockfish - execlp("stockfish", "stockfish", (char *)NULL); + // Run AI + execlp(ai.c_str(), ai.c_str(), (char *)NULL); // If everything went fine, this code shouldn't be reached writeLine(fdopen(childWritePipe, writeMode), "stop\n", true); close(childWritePipe); throw ConnectionException( - "Could not run stockfish, please be sure it's installed"); + "Could not run the AI, please be sure it's installed: " + ai); } // In the parent process running the GUI @@ -116,11 +117,8 @@ void StockfishConnector::startCommunication(){ std::string line; std::vector splittedLine; - // Check that stockfish properly started - line = readLine(parentReadPipeF, true); - splittedLine = split(line, ' '); - if(splittedLine.at(0).compare("Stockfish") != 0) throw ConnectionException( - "Communication with stockfish did'nt start properly, closing"); + // Check that the AI properly started + readLine(parentReadPipeF, true); // Set the difficulty option std::string difficultyOption = "setoption name Skill Level value "; @@ -128,16 +126,16 @@ void StockfishConnector::startCommunication(){ difficultyOption.append("\n"); writeLine(parentWritePipeF, difficultyOption, true); - // Say to stockfish that we are ready + // Say to AI that we are ready writeLine(parentWritePipeF, "isready\n", true); - // Wait for stockfish answer + // Wait for AI answer line = readLine(parentReadPipeF, true); if(line.compare("readyok\n") != 0) throw ConnectionException( - "Stockfish not ready, closing"); + "AI not ready, closing"); } -std::string StockfishConnector::getNextAIMove(std::string userMove){ +std::string AIConnector::getNextAIMove(std::string userMove){ std::string line; std::vector splittedLine; @@ -148,7 +146,7 @@ std::string StockfishConnector::getNextAIMove(std::string userMove){ moves.append(userMove); moves.append(" "); - // Send message to stockfish + // Send message to AI line = "position startpos moves "; line.append(moves); line.append("\ngo\n"); @@ -158,7 +156,7 @@ std::string StockfishConnector::getNextAIMove(std::string userMove){ while(true){ line = readLine(parentReadPipeF, false); - // Check if stockfish took a decision + // Check if AI took a decision splittedLine = split(line, ' '); if(splittedLine.at(0).compare("bestmove") == 0) break; } @@ -186,8 +184,8 @@ std::string StockfishConnector::getNextAIMove(std::string userMove){ return aiMove; } -StockfishConnector::~StockfishConnector(){ - // Say to stockfish that we are closing +AIConnector::~AIConnector(){ + // Say to AI that we are closing writeLine(parentWritePipeF, "quit\n", true); // Wait for the child process to die properly diff --git a/src/ChessGame/StockfishConnector.hxx b/src/ChessGame/AIConnector.hxx similarity index 74% rename from src/ChessGame/StockfishConnector.hxx rename to src/ChessGame/AIConnector.hxx index e388e26..63b4156 100644 --- a/src/ChessGame/StockfishConnector.hxx +++ b/src/ChessGame/AIConnector.hxx @@ -1,15 +1,17 @@ -#ifndef STOCKFISHCONNECTOR_HXX -#define STOCKFISHCONNECTOR_HXX +#ifndef AI_CONNECTOR_HXX +#define AI_CONNECTOR_HXX #include #include #include "../constants.hxx" -class StockfishConnector { +class AIConnector { private: + std::string ai; + /* Communication pipes between child and parent processes - (respectively stockfish and the GUI) + (respectively AI and the GUI) */ FILE* parentWritePipeF; FILE* parentReadPipeF; @@ -22,11 +24,11 @@ private: public: /* Constructor */ - StockfishConnector(); + AIConnector(const std::string& ai, const int& difficulty); - /* Function which starts Stockfish and initialize the communication + /* Function which starts the AI and initialize the communication /throw ConnectionException if something went wrong while initializing - connection with stockfish + connection with the AI */ void startCommunication(); @@ -40,7 +42,7 @@ public: std::string suggestedUserMove = "(none)"; /* Destructor, this will properly stop the communication */ - ~StockfishConnector(); + ~AIConnector(); }; #endif diff --git a/src/ChessGame/ChessGame.cxx b/src/ChessGame/ChessGame.cxx index 6b37547..8ed5f7c 100644 --- a/src/ChessGame/ChessGame.cxx +++ b/src/ChessGame/ChessGame.cxx @@ -1,22 +1,23 @@ #include "../Event/Event.hxx" #include "../Event/EventStack.hxx" -#include "StockfishConnector.hxx" +#include "AIConnector.hxx" #include "GameException.hxx" #include "ChessGame.hxx" -ChessGame::ChessGame(){ - // Start communication with stockfish - stockfishConnector = new StockfishConnector(); +ChessGame::ChessGame(const std::string& ai, const int& difficulty, bool show_suggested_move) + : show_suggested_move{show_suggested_move}{ + // Start communication with the AI + aiConnector = new AIConnector(ai, difficulty); lastUserMove = ""; clock = new Clock(); }; void ChessGame::start(){ - stockfishConnector->startCommunication(); + aiConnector->startCommunication(); } Vector2i ChessGame::uciFormatToPosition(std::string position){ @@ -364,7 +365,7 @@ void ChessGame::perform(){ } else if(state == AI_TURN) { // Get AI decision according to the last user move - std::string aiMove = stockfishConnector->getNextAIMove( + std::string aiMove = aiConnector->getNextAIMove( lastUserMove); // If the AI tried to move one user's pawn, stop the game @@ -386,18 +387,21 @@ void ChessGame::perform(){ // Remove the piece from its old position board[aiMoveStartPosition.x][aiMoveStartPosition.y] = EMPTY; - // Get suggested user next move if available - if(stockfishConnector->suggestedUserMove.compare("(none)") != 0){ - std::string startPosition_str = \ - stockfishConnector->suggestedUserMove.substr(0, 2); - std::string endPosition_str = \ - stockfishConnector->suggestedUserMove.substr(2, 2); - - suggestedUserMoveStartPosition = uciFormatToPosition(startPosition_str); - suggestedUserMoveEndPosition = uciFormatToPosition(endPosition_str); - }else{ - suggestedUserMoveStartPosition = {-1, -1}; - suggestedUserMoveEndPosition = {-1, -1}; + if(show_suggested_move) + { + // Get suggested user next move if available + if(aiConnector->suggestedUserMove.compare("(none)") != 0){ + std::string startPosition_str = \ + aiConnector->suggestedUserMove.substr(0, 2); + std::string endPosition_str = \ + aiConnector->suggestedUserMove.substr(2, 2); + + suggestedUserMoveStartPosition = uciFormatToPosition(startPosition_str); + suggestedUserMoveEndPosition = uciFormatToPosition(endPosition_str); + }else{ + suggestedUserMoveStartPosition = {-1, -1}; + suggestedUserMoveEndPosition = {-1, -1}; + } } // Transition to AI_MOVING state @@ -407,6 +411,6 @@ void ChessGame::perform(){ }; ChessGame::~ChessGame(){ - delete stockfishConnector; + delete aiConnector; delete clock; }; diff --git a/src/ChessGame/ChessGame.hxx b/src/ChessGame/ChessGame.hxx index d956ca4..026c678 100644 --- a/src/ChessGame/ChessGame.hxx +++ b/src/ChessGame/ChessGame.hxx @@ -7,7 +7,7 @@ #include "../constants.hxx" #include "../Clock/Clock.hxx" #include "../utils/math.hxx" -#include "StockfishConnector.hxx" +#include "AIConnector.hxx" // cppcheck-suppress noCopyConstructor @@ -16,8 +16,8 @@ private: /* Last user move */ std::string lastUserMove; - /* The connector with Stockfish */ - StockfishConnector* stockfishConnector; + /* The connector with ai */ + AIConnector* aiConnector; /* The state of the game, should be USER_TURN, AI_TURN or WAITING */ int state = USER_TURN; @@ -67,7 +67,7 @@ private: public: /* Constructor */ - explicit ChessGame(); + explicit ChessGame(const std::string& ai, const int& difficulty, bool show_suggested_move); /* The checkerboard */ int board[8][8] = { @@ -106,6 +106,8 @@ public: one was selected */ Vector2i oldSelectedPiecePosition = {-1, -1}; + bool show_suggested_move = true; + /* Start position of the suggested user move, {-1, -1} if nothing is suggested */ Vector2i suggestedUserMoveStartPosition = {-1, -1}; @@ -115,7 +117,7 @@ public: Vector2i suggestedUserMoveEndPosition = {-1, -1}; /* Start the game engine - \throw ConnectionException if communication with Stockfish didn't start + \throw ConnectionException if communication with AI didn't start properly */ void start(); @@ -126,7 +128,7 @@ public: /* Perform the chess rules depending on the game state, if it's the USER_TURN it will move one chess piece according to the currently clicked piece, if it's WAITING it will wait one second before changing to AI_TURN, if it's - AI_TURN it will ask Stockfish what is the next AI move + AI_TURN it will ask the AI what is the next AI move \throw GameException if chess rules are not respected */ void perform(); diff --git a/src/ColorPicking/ColorPicking.cxx b/src/ColorPicking/ColorPicking.cxx index c8f1513..949b8a1 100644 --- a/src/ColorPicking/ColorPicking.cxx +++ b/src/ColorPicking/ColorPicking.cxx @@ -71,7 +71,7 @@ void colorPickingRender( colorPickingProgram->setMoveMatrix(&movementMatrix); // Set color depending on the position - colorPickingProgram->setVector4f("color", x/8.0, y/8.0, 0.0, 1.0); + colorPickingProgram->setVector4f("color", {float(x/8.0), float(y/8.0), 0.0, 1.0}); // Display board cell meshes->at(BOARDCELL)->draw(); diff --git a/src/ShadowMapping/ShadowMapping.cxx b/src/ShadowMapping/ShadowMapping.cxx index 0a27639..100a579 100644 --- a/src/ShadowMapping/ShadowMapping.cxx +++ b/src/ShadowMapping/ShadowMapping.cxx @@ -88,7 +88,9 @@ void shadowMappingRender( } }; -ShadowMapping::ShadowMapping(){} +ShadowMapping::ShadowMapping(GLuint resolution) : resolution{resolution} +{ +} void ShadowMapping::initBuffers(){ // Create FBO for shadow mapping diff --git a/src/ShadowMapping/ShadowMapping.hxx b/src/ShadowMapping/ShadowMapping.hxx index 461e4a0..bcd75fc 100644 --- a/src/ShadowMapping/ShadowMapping.hxx +++ b/src/ShadowMapping/ShadowMapping.hxx @@ -27,7 +27,7 @@ private: public: /* Constructor */ - explicit ShadowMapping(); + explicit ShadowMapping(GLuint resolution); /* Initialization of the buffer objects */ void initBuffers(); diff --git a/src/SmokeGenerator/SmokeGenerator.cxx b/src/SmokeGenerator/SmokeGenerator.cxx index a64204b..8bb02c4 100644 --- a/src/SmokeGenerator/SmokeGenerator.cxx +++ b/src/SmokeGenerator/SmokeGenerator.cxx @@ -90,7 +90,7 @@ void SmokeGenerator::initBuffers(){ void SmokeGenerator::generate( Vector3f position, int numberParticles, - Vector3f color, + Vector4f color, float sizeFactor){ if(nbParticles + numberParticles > maxNbParticles){ std::cout << "Cannot create more particles..." << std::endl; diff --git a/src/SmokeGenerator/SmokeGenerator.hxx b/src/SmokeGenerator/SmokeGenerator.hxx index 1b05459..de1c207 100644 --- a/src/SmokeGenerator/SmokeGenerator.hxx +++ b/src/SmokeGenerator/SmokeGenerator.hxx @@ -89,7 +89,7 @@ public: void generate( Vector3f position, int numberParticles, - Vector3f color, + Vector4f color, float sizeFactor); /* Draw smoke in the currently bound framebuffer object */ diff --git a/src/ToonChess.cxx b/src/ToonChess.cxx index 1c2cb4b..c51a883 100644 --- a/src/ToonChess.cxx +++ b/src/ToonChess.cxx @@ -31,6 +31,8 @@ #include "utils/utils.hxx" #include "utils/math.hxx" +#include "get_config_path.hxx" + #include "ChessGame/ChessGame.hxx" // Globals @@ -59,6 +61,7 @@ void celShadingRender( ShadowMapping* shadowMapping, Camera* camera, DirectionalLight* light, + Config* config, float elapsedTime); void resize_callback(GLFWwindow* window, int new_width, int new_height) @@ -101,18 +104,39 @@ void cursor_move_callback(GLFWwindow* window, double xpos, double ypos) mousePosition.y = yposi; } +void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods) +{ + if (key == GLFW_KEY_ESCAPE && action == GLFW_RELEASE) + { + glfwSetWindowShouldClose(window, GL_TRUE); + } +} + int main() { + // Load config + Config config = loadConfig(get_config_path() + "config.txt"); + // Initialize glfw if (!glfwInit()) return 1; // Antialiasing level - glfwWindowHint(GLFW_SAMPLES, ANTIALIASING_LOW); + if(config.antialiasing != ANTIALIASING_NONE) + { + glfwWindowHint(GLFW_SAMPLES, config.antialiasing); + } + // Create a window and its OpenGL context GLFWwindow* window; - // Create a windowed mode window and its OpenGL context - window = glfwCreateWindow(width, height, "ToonChess", NULL, NULL); + if(config.mode == FULLSCREEN) + { + window = glfwCreateWindow(width, height, "ToonChess", glfwGetPrimaryMonitor(), NULL); + } + else + { + window = glfwCreateWindow(width, height, "ToonChess", NULL, NULL); + } if (!window) { glfwTerminate(); @@ -122,7 +146,10 @@ int main() // Make the window's context current glfwMakeContextCurrent(window); - glEnable(GL_MULTISAMPLE); + if(config.antialiasing != ANTIALIASING_NONE) + { + glEnable(GL_MULTISAMPLE); + } // Enable depth test glEnable(GL_DEPTH_TEST); @@ -139,12 +166,14 @@ int main() } catch(const std::exception& e){ std::cerr << e.what() << std::endl; + glfwTerminate(); + return 1; } // Create an instance of the Game (This starts the communication with - // Stockfish and could fail) - ChessGame* game = new ChessGame(); + // the AI and could fail) + ChessGame* game = new ChessGame(config.ai, config.difficulty, config.show_suggested_move); try{ game->start(); } catch(const std::exception& e){ @@ -152,6 +181,7 @@ int main() delete game; deletePrograms(&programs); + glfwTerminate(); return 1; } @@ -165,6 +195,7 @@ int main() delete game; deletePrograms(&programs); + glfwTerminate(); return 1; } @@ -184,7 +215,7 @@ int main() colorPicking->initBuffers(); // Initialize shadow mapping - ShadowMapping* shadowMapping = new ShadowMapping(); + ShadowMapping* shadowMapping = new ShadowMapping(config.shadows); shadowMapping->initBuffers(); // Main clock @@ -212,10 +243,10 @@ int main() glfwSetFramebufferSizeCallback(window, resize_callback); glfwSetMouseButtonCallback(window, mouse_button_callback); glfwSetCursorPosCallback(window, cursor_move_callback); + glfwSetKeyCallback(window, key_callback); // Render loop - bool running = true; - while(running and !glfwWindowShouldClose(window)) + while(!glfwWindowShouldClose(window)) { // Get elapsed time since game started float elapsedTime = mainClock.getElapsedTime(); @@ -255,7 +286,7 @@ int main() } catch(const std::exception& e){ std::cerr << e.what() << std::endl; - running = false; + glfwSetWindowShouldClose(window, GL_TRUE); } // Simulate dynamics world @@ -270,8 +301,8 @@ int main() gameEvent.fragment.position, (int)round(gameEvent.fragment.volume), gameEvent.fragment.piece > 0 ? - Vector3f(0.41, 0.37, 0.23) : - Vector3f(0.30, 0.12, 0.40), + config.user_smoke_color : + config.ai_smoke_color, 0.7 ); } @@ -299,7 +330,7 @@ int main() 0.0 }, 1, - Vector3f(1.0, 1.0, 1.0), + Vector4f(1.0, 1.0, 1.0, 1.0), 0.2 ); } @@ -323,7 +354,10 @@ int main() // Do the cel-shading rendering glBindFramebuffer(GL_FRAMEBUFFER, 0); - glClearColor(1, 1, 1, 1); + glClearColor( + config.background_color.x, config.background_color.y, + config.background_color.z, config.background_color.w + ); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glViewport(0, 0, width, height); @@ -331,7 +365,7 @@ int main() // Display all pieces on the screen using the cel-shading effect celShadingRender( game, physicsWorld, &pieces, &programs, shadowMapping, camera, &light, - elapsedTime); + &config, elapsedTime); // Display smoke particles smokeGenerator->draw(camera); @@ -363,6 +397,7 @@ void celShadingRender( ShadowMapping* shadowMapping, Camera* camera, DirectionalLight* light, + Config* config, float elapsedTime){ // The movement Matrix std::vector movementMatrix; @@ -473,10 +508,7 @@ void celShadingRender( ); // Set lightDirection - celShadingProgram->setVector3f( - "lightDirection", - light->direction.x, light->direction.y, light->direction.z - ); + celShadingProgram->setVector3f("lightDirection", light->direction); // Display fragments for(unsigned int i = 0; i < physicsWorld->fragmentPool.size(); i++){ @@ -493,8 +525,8 @@ void celShadingRender( // Compute color depending of the team physicsWorld->fragmentPool.at(i).first > 0 ? - celShadingProgram->setVector4f("color", 1.0, 0.93, 0.70, 1.0) : - celShadingProgram->setVector4f("color", 0.51, 0.08, 0.08, 1.0); + celShadingProgram->setVector4f("color", config->user_pieces_color) : + celShadingProgram->setVector4f("color", config->ai_pieces_color); // Draw fragment fragment->mesh->draw(); @@ -515,12 +547,12 @@ void celShadingRender( // Draw the checkerboard (x + y) % 2 == 0 ? - celShadingProgram->setVector4f("color", 0.70, 0.60, 0.41, 1.0) : - celShadingProgram->setVector4f("color", 1.0, 1.0, 1.0, 1.0); + celShadingProgram->setVector4f("color", config->board_color_1) : + celShadingProgram->setVector4f("color", config->board_color_2); if((game->selectedPiecePosition.x == x and game->selectedPiecePosition.y == y) or game->allowedNextPositions[x][y]){ - celShadingProgram->setVector4f("color", 0.94, 0.81, 0.34, 1.0); + celShadingProgram->setVector4f("color", config->allowed_move_color); } // Translate the piece @@ -545,8 +577,8 @@ void celShadingRender( if(piece != EMPTY){ // Display cel-shading mesh piece > 0 ? - celShadingProgram->setVector4f("color", 1.0, 0.93, 0.70, 1.0) : - celShadingProgram->setVector4f("color", 0.51, 0.08, 0.08, 1.0); + celShadingProgram->setVector4f("color", config->user_pieces_color) : + celShadingProgram->setVector4f("color", config->ai_pieces_color); pieces->at(abs(piece))->draw(); } @@ -577,8 +609,8 @@ void celShadingRender( celShadingProgram->setNormalMatrix(&normalMatrix); game->movingPiece > 0 ? - celShadingProgram->setVector4f("color", 1.0, 0.93, 0.70, 1.0) : - celShadingProgram->setVector4f("color", 0.51, 0.08, 0.08, 1.0); + celShadingProgram->setVector4f("color", config->user_pieces_color) : + celShadingProgram->setVector4f("color", config->ai_pieces_color); pieces->at(abs(game->movingPiece))->draw(); } diff --git a/src/constants.hxx b/src/constants.hxx index f9830f6..08720d1 100644 --- a/src/constants.hxx +++ b/src/constants.hxx @@ -40,7 +40,7 @@ const int CHILD_PROCESS_ID = 21; // ShadowMapping const int SHADOWMAPPING_HIGH = 1024; const int SHADOWMAPPING_LOW = 512; -const int SHADOWMAPPING_VERYLOW = 256; +const int SHADOWMAPPING_VERY_LOW = 256; // Antialiasing level const int ANTIALIASING_HIGH = 4; @@ -48,9 +48,13 @@ const int ANTIALIASING_LOW = 2; const int ANTIALIASING_NONE = 0; // Game difficulty -const int DIFFICULTY_VERY_HIGH = 20; -const int DIFFICULTY_HIGH = 15; +const int DIFFICULTY_IMPOSSIBLE = 20; +const int DIFFICULTY_HARD = 15; const int DIFFICULTY_NORMAL = 5; const int DIFFICULTY_EASY = 0; +// Game mode +const int WINDOW = 30; +const int FULLSCREEN = 31; + #endif diff --git a/src/get_config_path.cxx.in b/src/get_config_path.cxx.in new file mode 100644 index 0000000..6dd4e65 --- /dev/null +++ b/src/get_config_path.cxx.in @@ -0,0 +1,9 @@ +#include + +#include "get_config_path.hxx" + +std::string get_config_path() +{ + static std::string config_path = @TOONCHESS_CONFIG_PATH@; + return config_path; +}; diff --git a/src/get_config_path.hxx b/src/get_config_path.hxx new file mode 100644 index 0000000..25f8f91 --- /dev/null +++ b/src/get_config_path.hxx @@ -0,0 +1,8 @@ +#ifndef GET_CONFIG_PATH_HXX_ +#define GET_CONFIG_PATH_HXX_ + +#include + +std::string get_config_path(); + +#endif diff --git a/src/shader/ShaderProgram.cxx b/src/shader/ShaderProgram.cxx index 716e2dd..dd7170b 100644 --- a/src/shader/ShaderProgram.cxx +++ b/src/shader/ShaderProgram.cxx @@ -71,18 +71,16 @@ void ShaderProgram::setInt(std::string name, GLfloat value){ glUniform1i(location, value); }; -void ShaderProgram::setVector3f( - std::string name, GLfloat x, GLfloat y, GLfloat z){ +void ShaderProgram::setVector3f(std::string name, Vector3f vec){ GLuint location = glGetUniformLocation(id, name.c_str()); - glUniform3f(location, x, y, z); + glUniform3f(location, vec.x, vec.y, vec.z); }; -void ShaderProgram::setVector4f( - std::string name, GLfloat x, GLfloat y, GLfloat z, GLfloat w){ +void ShaderProgram::setVector4f(std::string name, Vector4f vec){ GLuint location = glGetUniformLocation(id, name.c_str()); - glUniform4f(location, x, y, z, w); + glUniform4f(location, vec.x, vec.y, vec.z, vec.w); }; void ShaderProgram::setMatrix4fv( diff --git a/src/shader/ShaderProgram.hxx b/src/shader/ShaderProgram.hxx index 804b0a2..521eba5 100644 --- a/src/shader/ShaderProgram.hxx +++ b/src/shader/ShaderProgram.hxx @@ -5,6 +5,7 @@ #include +#include "../utils/math.hxx" #include "Shader.hxx" class ShaderProgram { @@ -38,23 +39,17 @@ class ShaderProgram { glUseProgram before using this method, otherwise there will be undefined behavior depending on the context \param name The uniform name - \param x First component of the vec3 - \param y Second component of the vec3 - \param z Third component of the vec3 + \param vec */ - void setVector3f(std::string name, GLfloat x, GLfloat y, GLfloat z); + void setVector3f(std::string name, Vector3f vec); /* Set a vec4 uniform value, given its name. The program must be bound with glUseProgram before using this method, otherwise there will be undefined behavior depending on the context \param name The uniform name - \param x First component of the vec4 - \param y Second component of the vec4 - \param z Third component of the vec4 - \param w Fourth component of the vec4 + \param vec */ - void setVector4f( - std::string name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); + void setVector4f(std::string name, Vector4f vec); /* Set a matrix uniform value, given its name. The program must be bound with glUseProgram before using this method, otherwise there will be undefined diff --git a/src/utils/math.hxx b/src/utils/math.hxx index 58c3e99..5427c43 100644 --- a/src/utils/math.hxx +++ b/src/utils/math.hxx @@ -39,6 +39,19 @@ class Vector3f : x{x_init}, y{y_init}, z{z_init} {}; }; +class Vector4f +{ + public: + + float x; + float y; + float z; + float w; + + Vector4f(float x_init = 0.0, float y_init = 0.0, float z_init = 0.0, float w_init = 0.0) + : x{x_init}, y{y_init}, z{z_init}, w{w_init} {}; +}; + /* Generate and return a perspective matrix. Inspired from the gluPerspective function, but it only creates the matrix and returns it, it doesn't call glMultMatrix under the hood. diff --git a/src/utils/utils.cxx b/src/utils/utils.cxx index 5d5375c..f678496 100644 --- a/src/utils/utils.cxx +++ b/src/utils/utils.cxx @@ -7,7 +7,9 @@ #include +#include "../constants.hxx" #include "utils.hxx" +#include "math.hxx" std::string loadFile(const std::string& path){ std::ifstream in(path); @@ -154,6 +156,160 @@ std::vector split(const std::string &s, char delim){ return elems; } +bool str_equal(const std::string& str1, const std::string& str2){ + return str1.compare(str2) == 0; +} + +Vector4f extractColor(const std::string& str){ + std::vector strColors = split(str, ','); + std::vector colors; + + for(const auto& strColor: strColors){ + float value = 0; + if(not str_equal(strColor, "0")){ + value = std::stof(strColor) / 255.; + } + colors.push_back(value); + } + + return Vector4f(colors.at(0), colors.at(1), colors.at(2), 1.0); +} + +Config loadConfig(const std::string& path){ + Config config; + + std::ifstream fobj(path); + std::string line; + + while(std::getline(fobj, line)){ + std::vector splittedLine = split(line, ' '); + + if(str_equal(splittedLine.at(0), "mode")){ + if(str_equal(splittedLine.at(1), "window")){ + config.mode = WINDOW; + } + else if(str_equal(splittedLine.at(1), "fullscreen")){ + config.mode = FULLSCREEN; + } + + continue; + } + + if(str_equal(splittedLine.at(0), "shadows")){ + if(str_equal(splittedLine.at(1), "high")){ + config.shadows = SHADOWMAPPING_HIGH; + } + else if(str_equal(splittedLine.at(1), "low")){ + config.shadows = SHADOWMAPPING_LOW; + } + else if(str_equal(splittedLine.at(1), "very") and + str_equal(splittedLine.at(2), "low")){ + config.shadows = SHADOWMAPPING_VERY_LOW; + } + + continue; + } + + if(str_equal(splittedLine.at(0), "antialiasing")){ + if(str_equal(splittedLine.at(1), "high")){ + config.antialiasing = ANTIALIASING_HIGH; + } + else if(str_equal(splittedLine.at(1), "low")){ + config.antialiasing = ANTIALIASING_LOW; + } + else if(str_equal(splittedLine.at(1), "none")){ + config.antialiasing = ANTIALIASING_NONE; + } + + continue; + } + + if(str_equal(splittedLine.at(0), "difficulty")){ + if(str_equal(splittedLine.at(1), "impossible")){ + config.difficulty = DIFFICULTY_IMPOSSIBLE; + } + else if(str_equal(splittedLine.at(1), "hard")){ + config.difficulty = DIFFICULTY_HARD; + } + else if(str_equal(splittedLine.at(1), "normal")){ + config.difficulty = DIFFICULTY_NORMAL; + } + else if(str_equal(splittedLine.at(1), "easy")){ + config.difficulty = DIFFICULTY_EASY; + } + + continue; + } + + if(str_equal(splittedLine.at(0), "ai")){ + config.ai = splittedLine.at(1); + + continue; + } + + if(str_equal(splittedLine.at(0), "show_suggested_move")){ + if(str_equal(splittedLine.at(1), "true")){ + config.show_suggested_move = true; + } + else if(str_equal(splittedLine.at(1), "false")){ + config.show_suggested_move = false; + } + + continue; + } + + if(str_equal(splittedLine.at(0), "user_pieces_color")){ + config.user_pieces_color = extractColor(splittedLine.at(1)); + + continue; + } + + if(str_equal(splittedLine.at(0), "user_smoke_color")){ + config.user_smoke_color = extractColor(splittedLine.at(1)); + + continue; + } + + if(str_equal(splittedLine.at(0), "ai_pieces_color")){ + config.ai_pieces_color = extractColor(splittedLine.at(1)); + + continue; + } + + if(str_equal(splittedLine.at(0), "ai_smoke_color")){ + config.ai_smoke_color = extractColor(splittedLine.at(1)); + + continue; + } + + if(str_equal(splittedLine.at(0), "background_color")){ + config.background_color = extractColor(splittedLine.at(1)); + + continue; + } + + if(str_equal(splittedLine.at(0), "board_color_1")){ + config.board_color_1 = extractColor(splittedLine.at(1)); + + continue; + } + + if(str_equal(splittedLine.at(0), "board_color_2")){ + config.board_color_2 = extractColor(splittedLine.at(1)); + + continue; + } + + if(str_equal(splittedLine.at(0), "allowed_move_color")){ + config.allowed_move_color = extractColor(splittedLine.at(1)); + + continue; + } + + return config; + } +}; + bool _displayGLErrors(const char *file, int line){ GLenum errorCode; bool foundError(false); diff --git a/src/utils/utils.hxx b/src/utils/utils.hxx index 5c9d877..61a9564 100644 --- a/src/utils/utils.hxx +++ b/src/utils/utils.hxx @@ -6,6 +6,27 @@ #include +#include "../constants.hxx" +#include "math.hxx" + +struct Config +{ + int mode = FULLSCREEN; + int shadows = SHADOWMAPPING_LOW; + int antialiasing = ANTIALIASING_HIGH; + std::string ai = "stockfish"; + int difficulty = DIFFICULTY_EASY; + bool show_suggested_move = true; + Vector4f user_pieces_color = {1.0, 0.93, 0.7, 1.0}; + Vector4f user_smoke_color = {0.41, 0.37, 0.23, 1.0}; + Vector4f ai_pieces_color = {0.51, 0.08, 0.08, 1.0}; + Vector4f ai_smoke_color = {0.3, 0.12, 0.4, 1.0}; + Vector4f background_color = {1.0, 1.0, 1.0, 1.0}; + Vector4f board_color_1 = {0.7, 0.6, 0.41, 1.0}; + Vector4f board_color_2 = {1.0, 1.0, 1.0, 1.0}; + Vector4f allowed_move_color = {0.94, 0.81, 0.34, 1.0}; +}; + /* Function used to load files like shader source code \param path The path to the file that you want to load \return the string containing the content of the file @@ -28,6 +49,12 @@ void split(const std::string &s, char delim, Out result); */ std::vector split(const std::string &s, char delim); +/* Function used to load config file + \param path The path to the file that you want to load + \return the config struct +*/ +Config loadConfig(const std::string& path); + /* Function used to display OpenGL errors \param file The name of current file \param line The line where displayGLErrors is called From 65db3a5f8efa3785b7d991b59f353f785163b4ca Mon Sep 17 00:00:00 2001 From: martinRenou Date: Mon, 21 May 2018 12:01:42 +0200 Subject: [PATCH 08/13] Build test on travis --- .travis.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 45e60d7..092dd8e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,9 +9,6 @@ before_install: - sudo apt-get update -qq - sudo apt-get install -qq cmake stockfish xorg-dev freeglut3-dev - - sudo apt-get install -qq python3-pyqt5 - - pip install traitsui - # Install valgrind for checking memory leaks on tests - sudo apt-get install -qq valgrind From 33005fd67cf1180525db6480e2a1ea42abbae518 Mon Sep 17 00:00:00 2001 From: martinRenou Date: Mon, 21 May 2018 12:12:29 +0200 Subject: [PATCH 09/13] Fix cppcheck --- src/ChessGame/AIConnector.cxx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/ChessGame/AIConnector.cxx b/src/ChessGame/AIConnector.cxx index aebb46d..ef3c844 100644 --- a/src/ChessGame/AIConnector.cxx +++ b/src/ChessGame/AIConnector.cxx @@ -115,7 +115,6 @@ void AIConnector::startCommunication(){ parentWritePipeF = fdopen(parentWritePipe, writeMode); std::string line; - std::vector splittedLine; // Check that the AI properly started readLine(parentReadPipeF, true); From 13566461c240af10c6f0c9eefc1f84c48330ba8e Mon Sep 17 00:00:00 2001 From: martinRenou Date: Mon, 21 May 2018 12:17:10 +0200 Subject: [PATCH 10/13] Fix tests --- tests/ChessGame/test_chessgame.cxx | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/tests/ChessGame/test_chessgame.cxx b/tests/ChessGame/test_chessgame.cxx index 448a98b..93b959e 100644 --- a/tests/ChessGame/test_chessgame.cxx +++ b/tests/ChessGame/test_chessgame.cxx @@ -4,7 +4,7 @@ TEST(chess_game, initialization){ - ChessGame* game = new ChessGame(); + ChessGame* game = new ChessGame("stockfish", 0, true); game->start(); EXPECT_EQ(game->oldSelectedPiecePosition.x, -1); @@ -36,7 +36,7 @@ TEST(chess_game, initialization){ }; TEST(chess_game, unselect_piece){ - ChessGame* game = new ChessGame(); + ChessGame* game = new ChessGame("stockfish", 0, true); game->start(); // Select PAWN (simulating click on a pawn) @@ -74,7 +74,7 @@ TEST(chess_game, unselect_piece){ }; TEST(chess_game, pawn_move_1){ - ChessGame* game = new ChessGame(); + ChessGame* game = new ChessGame("stockfish", 0, true); game->start(); // Select PAWN (simulating click on a pawn) @@ -123,7 +123,7 @@ TEST(chess_game, pawn_move_1){ }; TEST(chess_game, pawn_move_2){ - ChessGame* game = new ChessGame(); + ChessGame* game = new ChessGame("stockfish", 0, true); game->start(); // Select PAWN (simulating click on a pawn) @@ -157,7 +157,7 @@ TEST(chess_game, pawn_move_2){ }; TEST(chess_game, pawn_forbiden_move){ - ChessGame* game = new ChessGame(); + ChessGame* game = new ChessGame("stockfish", 0, true); game->start(); // Select PAWN (simulating click on a pawn) @@ -191,7 +191,7 @@ TEST(chess_game, pawn_forbiden_move){ }; TEST(chess_game, knight_move_1){ - ChessGame* game = new ChessGame(); + ChessGame* game = new ChessGame("stockfish", 0, true); game->start(); // Select KNIGHT (simulating click on a pawn) @@ -225,7 +225,7 @@ TEST(chess_game, knight_move_1){ }; TEST(chess_game, knight_move_2){ - ChessGame* game = new ChessGame(); + ChessGame* game = new ChessGame("stockfish", 0, true); game->start(); // Select KNIGHT (simulating click on a pawn) From 804cad557e10b53c56b063aeb79ea44e45ba3ab2 Mon Sep 17 00:00:00 2001 From: martinRenou Date: Mon, 21 May 2018 12:29:24 +0200 Subject: [PATCH 11/13] Print toonchess and toonchess3d during build --- .travis.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.travis.yml b/.travis.yml index 092dd8e..c822e82 100644 --- a/.travis.yml +++ b/.travis.yml @@ -39,5 +39,7 @@ script: - cd build - cmake -DTOONCHESS_BUILD_TESTS=ON .. - sudo make -j6 install + - which toonchess + - which toonchess3d - ./toonchess_tests - valgrind --leak-check=full --track-origins=yes --error-exitcode=1 ./toonchess_tests From 6fedc5276445c48df8cd9cc9a9485a7be680b2d4 Mon Sep 17 00:00:00 2001 From: martinRenou Date: Mon, 21 May 2018 12:50:07 +0200 Subject: [PATCH 12/13] Update README --- README.md | 43 +++++++++++++++++++++++++++++++++++++------ 1 file changed, 37 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index ffb2f82..2b5e0fe 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,17 @@

ToonChess

-

3D Chess game based on OpenGL and Stockfish

+

3D Chess game based on OpenGL

Website

[![Build Status](https://travis-ci.org/martinRenou/ToonChess.svg?branch=master)](https://travis-ci.org/martinRenou/ToonChess) ## Installation (linux only) -Install [CMake](https://cmake.org/), [Stockfish](https://stockfishchess.org/) and [OpenGL](https://www.opengl.org/): +### Installation of dependencies + +Install [CMake](https://cmake.org/) and [OpenGL](https://www.opengl.org/): ```bash -sudo apt-get install cmake stockfish xorg-dev freeglut3-dev +sudo apt-get install cmake xorg-dev freeglut3-dev ``` Install [Bullet Physics](http://bulletphysics.org/wordpress/): @@ -22,21 +24,50 @@ sudo make install cd .. ``` +If you want to use [Stockfish](https://stockfishchess.org/) as AI (Stockfish will be used by default but any AI using the [UCI protocol](http://wbec-ridderkerk.nl/html/UCIProtocol.html) can work with ToonChess) you can install it using the following: +```bash +sudo apt-get install stockfish +``` + +### Installation of ToonChess + +You can install the Python GUI for ToonChess, it provides a nice GUI for changing game parameters like the AI that you want to use, the screen resolution or color of pieces. + +But it's not required to install the Python GUI if you do not want to, you would still be able to configure ToonChess as you wish, manually changing the `/home/user/.config/toonchess/config.txt` file. + Download source code: ```bash git clone https://github.com/martinRenou/ToonChess.git cd ToonChess ``` +#### Installation of ToonChess with Python GUI + +If you want to, you can install the python GUI for ToonChess, you will need one of the following installed on your computer in order to make it work: + +- PyQt +- wxPython +- PySide +- PyQt5 + Install ToonChess: ```bash -mkdir build && cd build && cmake .. +mkdir build && cd build +cmake .. +sudo make install +``` + +#### Installation of ToonChess without Python GUI + +```bash +mkdir build && cd build +cmake -DTOONCHESS_BUILD_PYTHON_GUI=OFF .. sudo make install ``` -Run it! +#### Run it! ```bash -ToonChess +toonchess ``` ## Tests From c855bb8395b6bfa5fc0a5d0fd241003a1b769c8f Mon Sep 17 00:00:00 2001 From: martinRenou Date: Wed, 30 May 2018 17:45:31 +0200 Subject: [PATCH 13/13] Add resolution option and error handling --- CMakeLists.txt | 4 --- config/toonchess/config.txt | 1 + gui/toonchess/ToonChess.py | 40 +++++++++++++++++++++++---- src/ChessGame/AIConnector.cxx | 15 ++++------ src/ChessGame/ChessGame.cxx | 9 +++--- src/ChessGame/ConnectionException.cxx | 12 -------- src/ChessGame/ConnectionException.hxx | 19 ------------- src/ChessGame/GameException.cxx | 12 -------- src/ChessGame/GameException.hxx | 19 ------------- src/ToonChess.cxx | 29 +++++++++++++------ src/shader/CompilationException.cxx | 14 ---------- src/shader/CompilationException.hxx | 20 -------------- src/shader/LinkingException.cxx | 12 -------- src/shader/LinkingException.hxx | 19 ------------- src/shader/Shader.cxx | 4 +-- src/shader/ShaderProgram.cxx | 5 ++-- src/utils/utils.cxx | 9 ++++++ src/utils/utils.hxx | 1 + 18 files changed, 81 insertions(+), 163 deletions(-) delete mode 100644 src/ChessGame/ConnectionException.cxx delete mode 100644 src/ChessGame/ConnectionException.hxx delete mode 100644 src/ChessGame/GameException.cxx delete mode 100644 src/ChessGame/GameException.hxx delete mode 100644 src/shader/CompilationException.cxx delete mode 100644 src/shader/CompilationException.hxx delete mode 100644 src/shader/LinkingException.cxx delete mode 100644 src/shader/LinkingException.hxx diff --git a/CMakeLists.txt b/CMakeLists.txt index 1710365..29393c1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -27,9 +27,7 @@ set( CXX_FILES ${CMAKE_SOURCE_DIR}/src/Camera/Camera.cxx - ${CMAKE_SOURCE_DIR}/src/ChessGame/ConnectionException.cxx ${CMAKE_SOURCE_DIR}/src/ChessGame/AIConnector.cxx - ${CMAKE_SOURCE_DIR}/src/ChessGame/GameException.cxx ${CMAKE_SOURCE_DIR}/src/ChessGame/ChessGame.cxx ${CMAKE_SOURCE_DIR}/src/Clock/Clock.cxx @@ -45,8 +43,6 @@ set( ${CMAKE_SOURCE_DIR}/src/PhysicsWorld/Fragment.cxx ${CMAKE_SOURCE_DIR}/src/PhysicsWorld/PhysicsWorld.cxx - ${CMAKE_SOURCE_DIR}/src/shader/CompilationException.cxx - ${CMAKE_SOURCE_DIR}/src/shader/LinkingException.cxx ${CMAKE_SOURCE_DIR}/src/shader/Shader.cxx ${CMAKE_SOURCE_DIR}/src/shader/ShaderProgram.cxx ${CMAKE_SOURCE_DIR}/src/shader/shaderPrograms.cxx diff --git a/config/toonchess/config.txt b/config/toonchess/config.txt index 831ff8d..9196c9f 100644 --- a/config/toonchess/config.txt +++ b/config/toonchess/config.txt @@ -1,4 +1,5 @@ mode fullscreen +resolution 1600x900 shadows low antialiasing high difficulty easy diff --git a/gui/toonchess/ToonChess.py b/gui/toonchess/ToonChess.py index e192ed3..745ab69 100644 --- a/gui/toonchess/ToonChess.py +++ b/gui/toonchess/ToonChess.py @@ -2,16 +2,19 @@ from concurrent import futures from traits.api import ( - Button, Bool, Color, Instance, HasStrictTraits, Str, Enum, on_trait_change + Button, Bool, Color, Instance, HasStrictTraits, Str, + Enum, on_trait_change, Event ) from traitsui.api import Item, UItem, VGroup, HGroup, View from pyface.image_resource import ImageResource +from pyface.api import error from toonchess.get_share_path import get_share_path from toonchess.utils import get_config, set_config default = { 'mode': 'fullscreen', + 'resolution': '1600x900', 'shadows': 'low', 'antialiasing': 'high', 'difficulty': 'easy', @@ -30,6 +33,10 @@ class ToonChess(HasStrictTraits): mode = Enum('fullscreen', 'window') + resolution = Enum( + '1024x576', '1152x648', '1280x720', '1280x800', + '1366x768', '1440x900', '1600x900', '1680x1050', + '1920x1080', '1920x1200', '2560x1440', '2560x1600') shadows = Enum('high', 'low', 'very low') antialiasing = Enum('high', 'low', 'none') @@ -51,13 +58,19 @@ class ToonChess(HasStrictTraits): _game_running = Bool(False) _executor = Instance(futures.ThreadPoolExecutor) + _game_error_event = Event(Str) traits_view = View( VGroup( HGroup( - Item('mode'), - Item('shadows'), - Item('antialiasing'), + VGroup( + Item('mode'), + Item('shadows'), + ), + VGroup( + Item('resolution'), + Item('antialiasing'), + ), label='Graphical settings', show_border=True ), @@ -127,9 +140,23 @@ def _on_play_click(self): future.add_done_callback(self._game_done) def _play(self): - process = subprocess.Popen("toonchess3d") + process = subprocess.Popen( + "toonchess3d", shell=True, + stdout=subprocess.PIPE, stderr=subprocess.PIPE, + universal_newlines=True) out, err = process.communicate() + if err: + self._game_error_event = str(err) + + @on_trait_change('_game_error_event', dispatch='ui') + def show_error(self, error_message): + error( + None, + error_message, + 'Runtime error' + ) + def _game_done(self, future): self._game_running = False @@ -142,6 +169,7 @@ def _on_reset_click(self): @on_trait_change('mode,shadows,antialiasing,difficulty,ai,show_suggested_move,\ user_pieces_color,user_smoke_color,ai_pieces_color,ai_smoke_color,\ - background_color,board_color_1,board_color_2,allowed_move_color') + background_color,board_color_1,board_color_2,allowed_move_color,\ + resolution') def _on_change(self): set_config(self.trait_get()) diff --git a/src/ChessGame/AIConnector.cxx b/src/ChessGame/AIConnector.cxx index ef3c844..d116c64 100644 --- a/src/ChessGame/AIConnector.cxx +++ b/src/ChessGame/AIConnector.cxx @@ -2,13 +2,12 @@ #include #include #include +#include #include #include #include "../utils/utils.hxx" -#include "ConnectionException.hxx" - #include "AIConnector.hxx" /* Read a complete line in a pipe and return it as a string @@ -64,14 +63,14 @@ void AIConnector::startCommunication(){ int fd[2]; if(pipe(fd) == -1){ - throw ConnectionException("Failed to create pipes"); + throw std::runtime_error("AI connection error: failed to create pipes"); } int childReadPipe = fd[0]; int parentWritePipe = fd[1]; if(pipe(fd) == -1){ - throw ConnectionException("Failed to create pipes"); + throw std::runtime_error("AI connection error: failed to create pipes"); } int parentReadPipe = fd[0]; @@ -83,7 +82,7 @@ void AIConnector::startCommunication(){ // If there is an error creating child process if(pid < 0){ - throw ConnectionException("Failed to fork process"); + throw std::runtime_error("AI connection error: failed to fork process"); } // In the child process running AI @@ -102,8 +101,7 @@ void AIConnector::startCommunication(){ // If everything went fine, this code shouldn't be reached writeLine(fdopen(childWritePipe, writeMode), "stop\n", true); close(childWritePipe); - throw ConnectionException( - "Could not run the AI, please be sure it's installed: " + ai); + throw std::runtime_error("AI connection error: could not run the AI, please be sure \"" + ai + "\" is installed or in the path"); } // In the parent process running the GUI @@ -130,8 +128,7 @@ void AIConnector::startCommunication(){ // Wait for AI answer line = readLine(parentReadPipeF, true); - if(line.compare("readyok\n") != 0) throw ConnectionException( - "AI not ready, closing"); + if(line.compare("readyok\n") != 0) throw std::runtime_error("AI connection error: AI not ready, closing"); } std::string AIConnector::getNextAIMove(std::string userMove){ diff --git a/src/ChessGame/ChessGame.cxx b/src/ChessGame/ChessGame.cxx index 8ed5f7c..e22a034 100644 --- a/src/ChessGame/ChessGame.cxx +++ b/src/ChessGame/ChessGame.cxx @@ -1,8 +1,9 @@ +#include + #include "../Event/Event.hxx" #include "../Event/EventStack.hxx" #include "AIConnector.hxx" -#include "GameException.hxx" #include "ChessGame.hxx" @@ -31,7 +32,7 @@ Vector2i ChessGame::uciFormatToPosition(std::string position){ } } - if(not found) throw GameException("Oups, something went wrong..."); + if(not found) throw std::runtime_error("Game error: Tried to access an out of bound position on the board"); Vector2i outPosition = {x - 1, y - 1}; return outPosition; @@ -39,7 +40,7 @@ Vector2i ChessGame::uciFormatToPosition(std::string position){ std::string ChessGame::positionToUciFormat(Vector2i position){ if(boardAt(position.x, position.y) == OUT_OF_BOUND) - throw GameException("Oups, something went wrong..."); + throw std::runtime_error("Game error: Tried to access an out of bound position on the board"); return uciGrid[position.x][position.y]; }; @@ -372,7 +373,7 @@ void ChessGame::perform(){ Vector2i aiMoveStartPosition = uciFormatToPosition( aiMove.substr(0, 2)); if(boardAt(aiMoveStartPosition.x, aiMoveStartPosition.y) >= 0){ - throw GameException("A forbiden move has been performed!"); + throw std::runtime_error("Game error: A forbiden move has been performed!"); } // Set the currently moving piece diff --git a/src/ChessGame/ConnectionException.cxx b/src/ChessGame/ConnectionException.cxx deleted file mode 100644 index ae20d27..0000000 --- a/src/ChessGame/ConnectionException.cxx +++ /dev/null @@ -1,12 +0,0 @@ -#include - -#include "ConnectionException.hxx" - -ConnectionException::ConnectionException(const std::string& msg) : - msg{"\033[1;31mConnection error: \033[0m" + msg}{} - -ConnectionException::~ConnectionException() throw(){}; - -const char* ConnectionException::what() const throw(){ - return msg.c_str(); -}; diff --git a/src/ChessGame/ConnectionException.hxx b/src/ChessGame/ConnectionException.hxx deleted file mode 100644 index 8a030a8..0000000 --- a/src/ChessGame/ConnectionException.hxx +++ /dev/null @@ -1,19 +0,0 @@ -#ifndef COMPILATIONEXCEPTION_HXX_ -#define COMPILATIONEXCEPTION_HXX_ - -#include -#include - -class ConnectionException : public std::exception{ - private: - std::string msg; - - public: - explicit ConnectionException(const std::string& msg); - - virtual ~ConnectionException() throw(); - - virtual const char* what() const throw(); -}; - -#endif diff --git a/src/ChessGame/GameException.cxx b/src/ChessGame/GameException.cxx deleted file mode 100644 index 2dfd6ff..0000000 --- a/src/ChessGame/GameException.cxx +++ /dev/null @@ -1,12 +0,0 @@ -#include - -#include "GameException.hxx" - -GameException::GameException(const std::string& msg) : - msg{"\033[1;31mGame error: \033[0m" + msg}{} - -GameException::~GameException() throw(){}; - -const char* GameException::what() const throw(){ - return msg.c_str(); -}; diff --git a/src/ChessGame/GameException.hxx b/src/ChessGame/GameException.hxx deleted file mode 100644 index b780388..0000000 --- a/src/ChessGame/GameException.hxx +++ /dev/null @@ -1,19 +0,0 @@ -#ifndef GAMEEXCEPTION_HXX_ -#define GAMEEXCEPTION_HXX_ - -#include -#include - -class GameException : public std::exception{ - private: - std::string msg; - - public: - explicit GameException(const std::string& msg); - - virtual ~GameException() throw(); - - virtual const char* what() const throw(); -}; - -#endif diff --git a/src/ToonChess.cxx b/src/ToonChess.cxx index c51a883..4210c80 100644 --- a/src/ToonChess.cxx +++ b/src/ToonChess.cxx @@ -37,8 +37,8 @@ // Globals bool resizing = false; -int width = 1024; -int height = 576; +int width = 1600; +int height = 900; bool cameraMoving = false; int dX = 0; int dY = 0; @@ -114,12 +114,20 @@ void key_callback(GLFWwindow* window, int key, int scancode, int action, int mod int main() { + int return_code = 0; + // Load config Config config = loadConfig(get_config_path() + "config.txt"); + width = config.resolution.x; + height = config.resolution.y; + // Initialize glfw if (!glfwInit()) - return 1; + { + return_code = 1; + return return_code; + } // Antialiasing level if(config.antialiasing != ANTIALIASING_NONE) @@ -140,7 +148,8 @@ int main() if (!window) { glfwTerminate(); - return 1; + return_code = 1; + return return_code; } // Make the window's context current @@ -168,7 +177,8 @@ int main() glfwTerminate(); - return 1; + return_code = 1; + return return_code; } // Create an instance of the Game (This starts the communication with @@ -183,7 +193,8 @@ int main() deletePrograms(&programs); glfwTerminate(); - return 1; + return_code = 1; + return return_code; } // Create SmokeGenerator @@ -197,7 +208,8 @@ int main() deletePrograms(&programs); glfwTerminate(); - return 1; + return_code = 1; + return return_code; } smokeGenerator->initBuffers(); @@ -286,6 +298,7 @@ int main() } catch(const std::exception& e){ std::cerr << e.what() << std::endl; + return_code = 1; glfwSetWindowShouldClose(window, GL_TRUE); } @@ -386,7 +399,7 @@ int main() delete physicsWorld; delete camera; - return 0; + return return_code; } void celShadingRender( diff --git a/src/shader/CompilationException.cxx b/src/shader/CompilationException.cxx deleted file mode 100644 index 48d9cee..0000000 --- a/src/shader/CompilationException.cxx +++ /dev/null @@ -1,14 +0,0 @@ -#include - -#include "CompilationException.hxx" - -CompilationException::CompilationException( - const std::string& shaderPath, const std::string& msg) : - msg{"\033[1;31mCompilation error for shader \033[0m" + - shaderPath + ":\n" + msg}{} - -CompilationException::~CompilationException() throw(){}; - -const char* CompilationException::what() const throw(){ - return msg.c_str(); -}; diff --git a/src/shader/CompilationException.hxx b/src/shader/CompilationException.hxx deleted file mode 100644 index 7ac7f49..0000000 --- a/src/shader/CompilationException.hxx +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef COMPILATIONEXCEPTION_HXX_ -#define COMPILATIONEXCEPTION_HXX_ - -#include -#include - -class CompilationException : public std::exception{ - private: - std::string msg; - - public: - explicit CompilationException( - const std::string& shaderPath, const std::string& msg); - - virtual ~CompilationException() throw(); - - virtual const char* what() const throw(); -}; - -#endif diff --git a/src/shader/LinkingException.cxx b/src/shader/LinkingException.cxx deleted file mode 100644 index 5281f05..0000000 --- a/src/shader/LinkingException.cxx +++ /dev/null @@ -1,12 +0,0 @@ -#include - -#include "LinkingException.hxx" - -LinkingException::LinkingException(const std::string& msg) : - msg{"\033[1;31mLinking error for a shader program: \033[0m" + msg}{} - -LinkingException::~LinkingException() throw(){}; - -const char* LinkingException::what() const throw(){ - return msg.c_str(); -}; diff --git a/src/shader/LinkingException.hxx b/src/shader/LinkingException.hxx deleted file mode 100644 index 2115c9b..0000000 --- a/src/shader/LinkingException.hxx +++ /dev/null @@ -1,19 +0,0 @@ -#ifndef LINKINGEXCEPTION_HXX_ -#define LINKINGEXCEPTION_HXX_ - -#include -#include - -class LinkingException : public std::exception{ - private: - std::string msg; - - public: - explicit LinkingException(const std::string& msg); - - virtual ~LinkingException() throw(); - - virtual const char* what() const throw(); -}; - -#endif diff --git a/src/shader/Shader.cxx b/src/shader/Shader.cxx index 5b1bcd8..8662841 100644 --- a/src/shader/Shader.cxx +++ b/src/shader/Shader.cxx @@ -5,9 +5,9 @@ #include #include #include +#include #include "../utils/utils.hxx" -#include "CompilationException.hxx" #include "Shader.hxx" @@ -36,7 +36,7 @@ void Shader::compile(){ std::vector errorLog(maxLength); glGetShaderInfoLog(id, maxLength, &maxLength, &errorLog[0]); - throw CompilationException(filePath, &errorLog[0]); + throw std::runtime_error("Shader compilation error: " + filePath + std::string(errorLog.begin(), errorLog.end())); } } diff --git a/src/shader/ShaderProgram.cxx b/src/shader/ShaderProgram.cxx index dd7170b..3b37a53 100644 --- a/src/shader/ShaderProgram.cxx +++ b/src/shader/ShaderProgram.cxx @@ -4,10 +4,9 @@ #include #include -#include +#include #include "Shader.hxx" -#include "LinkingException.hxx" #include "ShaderProgram.hxx" @@ -55,7 +54,7 @@ void ShaderProgram::compile(){ // Don't leak shaders either deleteShaders(&shaders); - throw LinkingException(&infoLog[0]); + throw std::runtime_error("Shader linking error: " + std::string(infoLog.begin(), infoLog.end())); } // Detach shaders from the program diff --git a/src/utils/utils.cxx b/src/utils/utils.cxx index f678496..5f6ec97 100644 --- a/src/utils/utils.cxx +++ b/src/utils/utils.cxx @@ -195,6 +195,15 @@ Config loadConfig(const std::string& path){ continue; } + if(str_equal(splittedLine.at(0), "resolution")){ + std::vector resolution = split(splittedLine.at(1), 'x'); + config.resolution = { + std::stoi(resolution.at(0)), std::stoi(resolution.at(1)) + }; + + continue; + } + if(str_equal(splittedLine.at(0), "shadows")){ if(str_equal(splittedLine.at(1), "high")){ config.shadows = SHADOWMAPPING_HIGH; diff --git a/src/utils/utils.hxx b/src/utils/utils.hxx index 61a9564..ef27e4b 100644 --- a/src/utils/utils.hxx +++ b/src/utils/utils.hxx @@ -12,6 +12,7 @@ struct Config { int mode = FULLSCREEN; + Vector2i resolution = {1600, 900}; int shadows = SHADOWMAPPING_LOW; int antialiasing = ANTIALIASING_HIGH; std::string ai = "stockfish";