From 0878f8530d957372f575c5b0d83b7c202568a6b5 Mon Sep 17 00:00:00 2001 From: = Date: Tue, 16 Sep 2014 12:54:00 -0700 Subject: [PATCH] creating make-background, which should make making backgrounds easier. --- desktop/resources/cursor.png | Bin 2246 -> 2244 bytes desktop/resources/pathfind-test-big.png | Bin 6350 -> 0 bytes desktop/src-common/advent/screens/scene.clj | 138 +++++++++----------- 3 files changed, 63 insertions(+), 75 deletions(-) delete mode 100644 desktop/resources/pathfind-test-big.png diff --git a/desktop/resources/cursor.png b/desktop/resources/cursor.png index d87b759e821b1988721a068d78a0de993d359f84..5c6b7c01d6013d51d2a3fc584d7f8dab6bb9b310 100644 GIT binary patch delta 1152 zcmV-`1b_R+5yTO&R0MxpNkly9^ zy>v1R!($-+2_ghtBuNs2E{jPAyKE*&;YBFA2x5VUc0Cz&>JYTA_nG`WzB@bf-n@M) z9dbbDJM;Z9-A&uh7prxE=666Al5pYM2FSB`~3A#mw9 zU$57_^Fh2c_FSWreU==2e2+2NtR#?NLyqDe$dU+8<{kw1CLekO!B}xUHoLX86=$M# zeSLkYK=nC9b5Z!1a~!83R9qa!bM^48R;#L1D#h+MBEW^7p3Ieiz%ML3R^xX^qudsr zE-9%y4Dh4HLZN?FtI1&`7mGzLrvcUH5TgZz06(*ZV3jC%<5JKU`lS3L0>C&k z2^#wdqrnI0Y?=(zjo()x0jO%}zi+>H-k#IFmz`Auw_gHZsZ^ra<#Jie(8DgQ0+Ega z4vn(xcXxLa4^i4vh96pYcekQUT~bc~>1WH$RY{~T*N%T9K@$OxSQZihbb!sC8|7H{ zApu+s;Q#!(;Zm#m>P%1=nYNNZf{y?MT@nHFrXA+k=I7@rHude2pecywKmrICTTT-b z6V_;^FOA~zZy^Aj(vkq*bofc|0XCbQ$DH{F0I(;{4XTs%-|E!0DY~hV(Z8kq+w!{l z*tnzi)@FYrU6Nn|pJbn;k2}O9UthfoKp+1kUswKC0&qc}hatZ0_~y$-@O9}A6&y<& z`0-%~@Nx42e(?64%3Zyp`t#4#nOj3@b*UH_*TKyP_`Lbs8y7?Ez9vC`enyQnYU-K2`kCRQPk^ZaQC!WZYAh}; zDjuGUgE<`R*w~mF7#NVMNCq&Qo14lO1O9li!#{14`H&2@7}AdVhyVl~w?6GB;Psmi zxzc})$>8?Qp$L4F1afTt3P1(;u@hE+o*UjOLwB1_dWoxVi(18d9!8eBVcY$r@&pf2B&)O{@Fi<-^J_Yb&C14DKj(PL; z(}sP!KLg>9&65O-Cwmw8(niWWOkdz^z62p{jCR+iA9CT^kX`F{lmL9)lL%Ot4d8gY zZa!_Y_SigPND>fq%)4$4bhgHLY5f=r{>TM6v=gJ9_36VLWZzB>(m%5dV%W%$IdB*N z8(&#jiT*H-I}D#Sv-)F=tTD3sC+)MN6(DJ`!`92g`sZvv?9Cp0000H!;90$B;@^5a`a4$I5SQY;n|&)a4?nw_1Mqyw1x`Way3H#hf0WN$bA;hB5?3VfYM zwOSS1k2+b-ha!Jw(Ps?UnLqBO84(lqc|_a#@^9(@2nZt|bF7I0^iW3cm1OSOLac)4 zh!EHteIViOkN3>UkF5{R+jF+(inD9r_5*ZErBdNk%H?u2$3FDJE)ef=;sSYldplP> zU(O91|_Z|kmY zsjW-}9mA7W5@_(@fS_w4VBOTi8U@|YCV5F<^W|I907BQ6)7aRU)s1OOrKJ3=1b_k9 zla>T%>j&m~002><{(%;`7$MlgPe&@#)61RVL0Zj&~!Hyq>03SCW z;0N#COX1p8>1%r-=WY+m%0j0Mmj-2`+$qzQYS;zD+672j`p3vFpx2V-AiYmq^#A}q zTkLB+-Np$ZbkgJjJqmq>ukC2b*EOKe*i8hWQ;vUdN@cF;5g^_ex*QN}?6DJQJ#$X* zu@3Ot4{kod=gr?*zZCB7MkMHKo08$Zsyw%MKhwPvd=SMYX}ZSz{Jgaus1XV~GBVO| zfpjbYg9~Q!0egIR!9J^Kd`JeH53R?2Cjn3>ylZSmH0Jo`?Z-m#=6G=D)?f_2Ndo5_y%x&1R{5~K3far&F2S{No?26;f=K2 zTI6LD))9Lk0zpXYL)*K+HuGm5+BQw>1`t>TIH#kuNh1Ng3NW%0U=AVZST}F~zDE6T z-hTt(0XdTdb&vI#3;eo9<19}N=z+EbAxjn1GK6MT|B47B>Bp~Qm*Js1CPv|eJ9sR-{xukuS(vD-E__U!9J?1(G940x{0eo{1 z!$uCDU7CI5xU{qs|5}lEE6#mbABVN~)vlof_>_b)_(Tc>+I+3^XZMM0xl-wJ(m*Bq@xfL)>Wa2)NiDt zE$hZtip$$mrp(*Ia zR#Nob?0m?~zK5r|+~jJ^f$TImxfl>%6vs*8jOOH?qdwH8(rAVzmXv=PVNHlDpp4IW z9X4J)p>l7cWJ{GdW?+bn?+3-%@Xj(r7-V2C=Fg4lDNCD2`0ue#Ftv7D3I=bQbE3C{ z6IOL9kJ|2Eo`0yv|9wQi|4S4MDgh;Vr<1vj^>92_WrjneM!9z=${@}7Qq5R1{`z;Q zd(^#g%bK=y-(hAk)n&2o97mS&bP@EVr>+`1 zVcSXWWqCI3Vop|_ONIHXbzXxt*^DXdMSfU%xAa5VyEp}v>Y%j|I6qLWmof-qiGJT! zFtmobkAc^eH5cLyjZ26LWm6uiXj|Eq7rmG*Pt|=(c>Od*(kQx@%cd!zBc5^K!FSiM zGy{~%-D6wqzGY?}=A^S&yrvAQ+0U8tg#rP!YK1_u2ccqa%`8z-}#cNdRd?Fo$dM%BWb{Wedsr^3Fi zuSy4woB>`j8dvWM(3z9xR*GTMb|ET1Bz`==BXG2lpy2-H&3SUvtmdLYDWUr2@CxD0 z8Txj3<}dBVQ1nf3YNZO#F^k%$ps@ZPIn#Y|3m36*=>jV&`0fL#e*C8M;k{NXE9WbR zqsaMin;y|h+wQuKb8JNw@0E=@ND}Q4miV=Q-?ank#=`L20QifIc*kx@cXU>LwkjuY z`=8$^3;Pdvuk_$}K*xfn4!g_Ri+3BQnlZ6jcPsqs`=`h6kX+`M%3fDg0+_Y zUFhi$(KSO0wKGAr5}f5X)}dsc)%^%>3QM(6C6`S(t4;>ZOgB$jNRykhGWTKOX3pe27y;G8x( zWaxvx_#j)U#C1xvpF(@4qPT(!>eb)y)NoQEgkngTVq~3D^kYLyM|civYXB^2^Tont ztGw$xk)zg@U2PpjaY{~3>F*s%KGj1BCQvNJXMtP@}zIYe&>c$ z@^(C;x}J%b@iTk-_C-vLFE`KSaGKNK<|AobdWyKy#^B(Q`;SHOzv<#aBS-GT|AcYg zi}!LF|7de1?_c{rXfe-1S-i^SGC5RFR4CzOW3M1$3%s zV}ucniG22Sj|hll@%`Sn!~ zB+|#fMq9$QU>UCGj%Ic#=MA#d!qoaPXM6+eHM{qd8P|zG_Jxu~3c2aY{kWcZ+~;Cx ze-NffK!QQg0>R1MWf#>tF`6hCs1ySLm1aS#f-vA|*g!)I2?Eoi;rLUEWG{F>#e)=w?g6zhw8iu>IZaRBYf=NF%3qTqFs~DNeMigB52J@eNebft(d{l% zL4`~JKMLA0K|bA zp^AD10P?-WZUAcgMhimeypY*~rKR>l@&C zk9-1LmfM}~TE@Vh4jSnt+=C$!Oi}PHvTQm3o$0DG8WQwhigKp5TGLPn52s@eGgJFZ z!f6$(_SapzWN1cay?EoxB``E=BKJ48!%_l&e{=*^=4Rm2O6F~= zi@@P!hc+LB4se5YK&OOMF-ET#p{?TY_Yo|k<-}Deqm6OhZIZqM@gN8TZ05o0T7g{S zrD-y0WB+)XQ@^3{bdVyUY@vu^tPUyua^!Z+lqDZ`=(ObG$yd*8wbhY#@+_-?WzYtg zO2YD#c+E54*WcpKpWhDVG;NfWx5!I)jh=R{n*Sr(#}E(?k%q=(@r-Pc&2uizc9~Z- zpRG~+WTR^N(fYjJ`(WLdc)I1XZr+pS`B_(eJ0J0B8Y^bvFlp%eH{b2%PNcIW&24C2r*AL(*yv+`D|o02ym#T8rCo{Y9)zY_cMBJy>kN`wZl) z^sU0b-Lu^NNY%gI;C9%sbygmmdOVo(XJN-;lH>WspA#DQpY`o5XbanD#Gtt!yJQoY z@Z~J)-K1PQw>$+sq{^jZo`p7szxgV2ewj`!bH;`=E3d209dw%Sv%e`QcAWRtKM~29 zBXao(HpX^kBRoFQR~wssY;a??s5siHE^jfCIR|SOm!a2I z$dZSiGD)Aw9Cev%2is=SUqS@#%Xb&XV%!H`dq4NWZ7u)dm(K9Gu*7-qZASZ~Do7j^ zn&;Zj?VYiWoV4_`N;My^pn}8s8?EbI?#IslUbXr=r`G7QtT*DmUpJH* zI(2xlIfjxDyw&};9y-uF(!4vRIMSLc>S-NbMv*b5jZr0PAt8- zlB?5!&idvZZddJul$3jhGmbY>WO=qzB+or=;x8lE3maYRj`}i=(z~W1Ro)vvN22^I zLGhtuQ&PYqwjL}MLsef&0{YWrR?6!45`M9U~1X$)=9F@;D+EU1ArjRS=(jg z_9Sn)U+fFDt;h7-@8t)lZMSiY43JUhZ#)PkjO%9+dAG&qnX|8*Ze=s)Z48Ta`%?BU zZCif^BljqQTKcr0aONdKdz*hlU7}~_*ZZq&^nY4T*46~fA{eDUt}mElw0t%?dBGOz z=J#%AD%NhN<4)c7^uaowL81Ji2o(@f!ch|;D&ogqBCA|B9DQX^obb4ApBuR|X)fxz@EKGnRtEP{oq5lo?g6~d1AGIG#h zaI7EG=a+!3ASa>4*$pq|_HP+7ymDj1>kFM-6clv;Ts)8lRDM!bYtzdJ-Ah!$t9n$;PJl5xXdBYW{gT$|gN zue@+R?dr-=|P$}eNNYLz`iQ=LWq36ct`beKp{yN%|W85NW8c7HfhheU|`2$3- z5hMAl5YWV1^IF~0nnRPkl-s8pq|e~Um#pn_n0_(J^ZDAR4D9dcF=+<8T1lKuS709~D=k-fQ z?$-E8#zU*aSnLxEa089U7xIw)3NV9~Hyh{l^ZTIECh2)O?YMIyjkW2ayjo6D>3ar& z(Q&en3HG+n$y+%A03HN`%L1!PXFb%FJ(8)NKmbH(_!DZ)20!Xj>QCZWP8qA_xXb3A z#b$Vo)@-c=>KuXicUs1}(xNsv;>xm&$RYCo^i1$66Ua)*uFu4}-wqfMn}_^(m!v1j5&6DfmQ)Yf$Wsp z_J8a5+HrjEaDU1GmVq+0zfq4ol3alU+Tvy4bj*1 zbQ4tm;>qeH{!@Oe*J(k0kn~l*)Sxw)6fK>Y7Of%UA=)>!ZhnODPYfL91z9)$Vaqdr z6BIgfm2TR%)0s!bC;t4xfR#G3G>v?a9I@qDNav={q5j>z{3=n|Hf&xUn1ADmejHLz zJdP98!Vpi@)|?Z;h}-5&*sx1Ol>+a<4J7EkUt;8_udGSsSB`-+{mGNY4`%10{Q&h9 zKdixD#nyKbehkXjZjJcMcrfwJjVUnAx(?ax3mTCAJ-0PW_K%!mTd>?f4az(pWf2d2c9w7 zcv5O^i~VRZaD)h!#&T<6^r0N3U{jBOheFlLB~2N5I>F8i)uj$YXPlEJ3R$N*C-G}W z#x4d)T{)jS>sdpmz(w9{4Y^Y$xYM=Jd%!3*n^`M0`sFVbMz#lE7{wQpXvPU9hO2`u zV!r03+37ctZ#<18Tf(A65TktX+qrqJ#)!$PsnhhQcWO(c5&wSf`$TyRlDqlxy8fJ@aVgJX6p!#9aPb_l%h0Y^&;-6@O9lX0pp;Z->X#mk;O2@jwe+Qa~35kIaBf#!Ps=uNQYlqsa}{=~`d1T+{zG!D!Mn zEtURoT2Ev}0UcNT+u?LsoO23pb|glj=p1P>$u0v<-ueS+tVHtnzhV{@dj@G{H{q<3= zpBfhv{*>&)_Sny4<*Oa7AEoU@w(l2Da%$_@Q z72h9hzMHG=xVgp7Xp%B(RE%GAFzIGgXyFt-p73hWyG~SAth^Ri?0#kPFkQTsqkohz zZzDI97-U7#%iAMjY;7}G=8c?ZvA4owHF^&2w$&mwrq^$&YmK!&{D|?e6@O}zfY?!| zC(l4d(}TQrQx=KfUKeLKqw)(Z?Xct&ITk-HR%&j^wqTVt^IWl$i(cM>V7Syr&aNuW z^9dbf56RLahNu@z_xwirkB#&7V2mF#9{pQSo`dXfSS?DQ!-Q8Z$8*&7qGqt&8w1R; z;7udqU0Jj|NF;1j*{rL^JVe^zCr5BeMXRIR#vCK#UQ;5NbcxgP0Rn9Zs)aaMLHS6R z#t9C1_tpK=ANt9G#{Y^ZDUbD9Th|Ix=5Mvtf_sdG_NxB9id<)u#YmGb$f9LIt&frj z1cej0`mDKniW+2`(zZhY1)KInAUbkIQsan988G>{IW(WVBD48aN<9MdCR>IM%+0n$ zI7TdFTAO^>yF0A=^Cs3V;2&9TFaepY1L!96)$HY2R#%R$UB?@)4I}UC)!Dg#IFB8Q zzgTa=t2J`9$LU8~Bfq^z6RUy1jodz+G?IPOL|VBDvSW8e^+9F?%0mr)y}K~Mp=MNl z=Cd0q{&)A|V_M1dS_Yt5S0DQBxY!y-u{EIr@gdh#yef}HWO3Z{4}pp7!(P>3WkS0r zOmcUR=SsiSGFMY&oJ zM1yF?iFlL=^ug5KiAD-wbv}W1UJijS!*Kcn>L<*lsu(N3_^{FKF5TFe&d54@kWX2| zM#oG_hP?0nO)4Hf4UfA@KqK@CsoBG`>b`f-fZr!*DF`A92GV-)yjQg&48X=+^8x_k zh8SeQRAK`GU?!%!f&%DKDiZ+604B+bl89sbFZN#_{3i~c@zsoh?`n2gR-hz9pD{i- z80(Uv^Z-O+57jxC5d~W)RR#gT-`SSJN7ygm@>MdwMZ`<`?*1tNO7g05screen screen {:x (:input-x screen) :y (:input-y screen)}) interaction (first (filter #(mouse-in? % [x y]) (get-in entities [:background :interactions]))) - cursor-override (find-override screen entities [x y]) ;; TODO - hacky way of resetting queue entities (if-let [current-action (get-in entities [:actions :current])] (assoc (actions/terminate current-action screen entities) :actions {:channel (chan) :current nil :started? false}) entities) - script (or (when cursor-override - (interact cursor-override screen entities [x y])) - (when interaction + script (or (when interaction (interact interaction screen entities [x y])) (interact default-interaction screen entities [x y]))] @@ -103,6 +101,21 @@ (input! :set-cursor-image (utils/cursor "cursor.png" (or override current)) 0 0)) (assoc-in entities [:cursor :last] (or override current))) +(defn make-background [& {:keys [collision interactions] :as params}] + (let [interactions-as-list (for [[id spec] interactions] + (reify + IMouseIn + (mouse-in? [_ location] + (apply (apply zone/box (:box spec)) location)) + IInteractable + (interact [_ screen entities location] + ((:script spec) entities)) + ICursorOverridable + (cursor-override [this] (:cursor spec))) + )] + (merge params {:collision (advent.pathfind/map-from-resource collision) + :interactions interactions-as-list}))) + (defscreen scene :on-show (fn [screen entities] @@ -116,7 +129,7 @@ house (texture "house.png") overdirt (texture "overdirt.png") music (sound "town-music.mp3") - _ (sound! music :loop) + ;;_ (sound! music :loop) ] { :actions {:object nil @@ -127,75 +140,50 @@ :current :main :last :main :override nil} + :sheep (assoc (animation->texture screen sheep) :x 38 :y 160 :baseline 160 :anim sheep) - :background (assoc {} - :collision (advent.pathfind/map-from-resource "pathfind-test-big.png") - :baseline 0 - :mouse-overrides [(reify - IMouseIn - (mouse-in? [_ location] - (apply (zone/box 300 131 320 224) location)) - IInteractable - (interact [_ _ entities _] - (actions/get-script - (actions/walk-to entities :ego [319 160]))) - ICursorOverridable - (cursor-override [_] :right)) - (reify - IMouseIn - (mouse-in? [_ location] - (apply (zone/box 60 180 224 240) location)) - IInteractable - (interact [_ _ entities _] - (actions/get-script - (actions/walk-to entities :ego [137 204]))) - ICursorOverridable - (cursor-override [_] :up)) - (reify - IMouseIn - (mouse-in? [_ location] - (apply (zone/box 0 40 20 140) location)) - IInteractable - (interact [_ _ entities _] - (actions/get-script - (actions/walk-to entities :ego [0 80]))) - ICursorOverridable - (cursor-override [_] :left))] - :interactions [(reify - IMouseIn - (mouse-in? [_ location] - (apply (zone/box 258 100 281 160) location)) - IInteractable - (interact [_ _ entities _] - (actions/get-script - (actions/walk-to entities :ego [262 88]) - (actions/talk entities :ego (str "Anyone home?"))))) - (reify - IMouseIn - (mouse-in? [_ location] - (apply (zone/box 274 55 305 88) location)) - IInteractable - (interact [_ screen entities _] - (actions/get-script - (actions/talk entities :ego (str "It's the coolest sword I've ever seen!")) - (actions/walk-to entities :ego [290 66]) - (actions/talk entities :ego "Maybe I can pull it out.")))) - (reify - IMouseIn - (mouse-in? [_ location] - (apply (zone/box 38 160 71 181) location)) - IInteractable - (interact [_ screen entities _] - (actions/get-script - (if ((get-in entities [:ego :inventory]) :wool) - (actions/talk entities :ego "The sheep has given me enough wool.") - (do (actions/give entities :ego :wool) - (actions/talk entities :ego "I guess his wool is shedding."))))))] - :scale-fn (scaler-fn-with-baseline 110 0.10 1.00) - :layers [(assoc background :x 0 :y 0 :baseline 0) - (assoc house :x 0 :y 0 :baseline 122) - (assoc overdirt :x 0 :y 0 :baseline 240) - (assoc background-trees :x 0 :y 0 :baseline 44)]) + :background (make-background :interactions + {:door {:box [258 100 281 160] + :script (fn [entities] + (actions/get-script + (actions/walk-to entities :ego [262 88]) + (actions/talk entities :ego (str "Anyone home?"))))} + :sword {:box [274 55 305 88] + :script (fn [entities] + (actions/get-script + (actions/talk entities :ego (str "It's the coolest sword I've ever seen!")) + (actions/walk-to entities :ego [290 66]) + (actions/talk entities :ego "Maybe I can pull it out.")))} + :sheep {:box [38 160 71 181] + :script (fn [entities] + (actions/get-script + (if ((get-in entities [:ego :inventory]) :wool) + (actions/talk entities :ego "The sheep has given me enough wool.") + (do (actions/give entities :ego :wool) + (actions/talk entities :ego "I guess his wool is shedding.")))))} + :right-dir {:box [300 131 320 224] + :script (fn [entities] + (actions/get-script + (actions/walk-to entities :ego [319 160]))) + :cursor :right} + :up-dir {:box [60 180 224 240] + :script (fn [entities] + (actions/get-script + (actions/walk-to entities :ego [137 204]))) + :cursor :up} + + :left-dir {:box [0 40 20 140] + :script (fn [entities] + (actions/get-script + (actions/walk-to entities :ego [0 80]))) + :cursor :left}} + + :layers [(assoc background :x 0 :y 0 :baseline 0) + (assoc house :x 0 :y 0 :baseline 122) + (assoc overdirt :x 0 :y 0 :baseline 240) + (assoc background-trees :x 0 :y 0 :baseline 44)] + :collision "outsidehouse/collision.png" + :scale-fn (scaler-fn-with-baseline 110 0.10 1.00)) :ego (get-ego screen) :fps (assoc (label "0" (color :white) ) :x 5 :baseline 9000) }))