From 3f354a651513b82f93ca222d92d412a08b47367c Mon Sep 17 00:00:00 2001 From: Bryce Covert Date: Wed, 29 Jul 2015 22:35:47 -0700 Subject: [PATCH] making the coin-getting puzzle. --- desktop/resources/castle-gate/Untitled.png | Bin 0 -> 1147 bytes desktop/resources/castle-gate/coinflip.png | Bin 0 -> 1147 bytes .../resources/castle-gate/coinflip.pxa/0.pxi | Bin 0 -> 264178 bytes .../resources/castle-gate/coinflip.pxa/1.pxi | Bin 0 -> 264178 bytes .../resources/castle-gate/coinflip.pxa/2.pxi | Bin 0 -> 264178 bytes .../resources/castle-gate/coinflip.pxa/3.pxi | Bin 0 -> 264178 bytes .../resources/castle-gate/coinflip.pxa/4.pxi | Bin 0 -> 264178 bytes .../castle-gate/coinflip.pxa/CelData.plist | 26 ++ desktop/resources/castle-gate/goon-2-flip.png | Bin 0 -> 1777 bytes .../castle-gate/goon-2-flip.pxa/0.pxi | Bin 0 -> 526584 bytes .../castle-gate/goon-2-flip.pxa/1.pxi | Bin 0 -> 264100 bytes .../castle-gate/goon-2-flip.pxa/2.pxi | Bin 0 -> 264100 bytes .../castle-gate/goon-2-flip.pxa/3.pxi | Bin 0 -> 526584 bytes .../castle-gate/goon-2-flip.pxa/CelData.plist | 22 ++ .../resources/castle-gate/goon-2.pxa/0.pxi | Bin 264076 -> 264100 bytes .../resources/castle-gate/goon-2.pxa/1.pxi | Bin 264076 -> 264100 bytes desktop/src-common/advent/#utils.clj# | 272 ++++++++++++++++++ .../advent/screens/rooms/castle_gate.clj | 43 ++- desktop/src-common/advent/screens/scene.clj | 1 + desktop/src-common/advent/utils.clj | 6 +- 20 files changed, 368 insertions(+), 2 deletions(-) create mode 100644 desktop/resources/castle-gate/Untitled.png create mode 100644 desktop/resources/castle-gate/coinflip.png create mode 100644 desktop/resources/castle-gate/coinflip.pxa/0.pxi create mode 100644 desktop/resources/castle-gate/coinflip.pxa/1.pxi create mode 100644 desktop/resources/castle-gate/coinflip.pxa/2.pxi create mode 100644 desktop/resources/castle-gate/coinflip.pxa/3.pxi create mode 100644 desktop/resources/castle-gate/coinflip.pxa/4.pxi create mode 100644 desktop/resources/castle-gate/coinflip.pxa/CelData.plist create mode 100644 desktop/resources/castle-gate/goon-2-flip.png create mode 100644 desktop/resources/castle-gate/goon-2-flip.pxa/0.pxi create mode 100644 desktop/resources/castle-gate/goon-2-flip.pxa/1.pxi create mode 100644 desktop/resources/castle-gate/goon-2-flip.pxa/2.pxi create mode 100644 desktop/resources/castle-gate/goon-2-flip.pxa/3.pxi create mode 100644 desktop/resources/castle-gate/goon-2-flip.pxa/CelData.plist create mode 100644 desktop/src-common/advent/#utils.clj# diff --git a/desktop/resources/castle-gate/Untitled.png b/desktop/resources/castle-gate/Untitled.png new file mode 100644 index 0000000000000000000000000000000000000000..d0f854712971bb5bab3ac1f504ec3b958979f9df GIT binary patch literal 1147 zcmV->1cdvEP)4Tx062|}Ro!pfR1`mnZ(O7nKcKOW4i$^9Ra0BJ8yc;~21%2p=|UR0&DbiW z$#rfTQ`a`O(`{9s_5yDV_yd5l2Of}kLK+Oj_Ok5(v`JGz71bo9J#^YYXp{DWs&KBa zQ@dTpxRI}aIp=pi@6k0t$5)!;m`NF6-tt{FpOKHBn3g+MAqmexC-gw4rh87hTrL7G z#)U`L!(So6-Zux@>;H3gR;i~0B%VTSS3P|m@o9jRsXML@Al^p#@G0Lx-0?i(9WEw_ zSYddU<1E8793KxjQ|c&UmW!mTC>k>?{om1c9S zUx<6_jj_!T&^M{wWM#>IBbOSf*xP<^F{$j$aOQ5Y{cT zROCL1M7^NKKL z&(yA}mSw#iM0^;IB{ZO5!wl{^Sg-*ysE~&Yz8!E;Qv(A`lu*=Clo*MpVGd>OdF6n^ zam1Jntk;<}MrqIC5$=Q>n{*R}?8oOIDUw5En2dl--Xw34!z7E+5pr-OgyQ-soSab)C%saskMla`aQLVzg0+MZf20tJU&K{hZoBrUc+U4e9&3o zw|KmGEe4#xz17wBu{f`SS_4i66?j31EjY7n{zGfhONK~c+td!TS#B}JoR}5UAd7p& z5phTyXSkK0xCeD3xaYP^o&J~#Xp9xFb0C;HHml5fA<%h1eR|qw7wxF+oNL9T1Aits?sKNIwvGaN)^WO$I^cUV)HzL_| z1K?{9p!>B*)`xfEv!4N6IG{J&h49W#Bz^(#YWw%`e_a{8n{G9m5AeR~_yl0%<7V@p zOg9UQAdoOgxrK8PpritP1Lj;WG^x1k>WlSkBxFhLtuo50001nBd@1cdvEP)4Tx062|}Ro!pfR1`mnZ(O7nKcKOW4i$^9Ra0BJ8yc;~21%2p=|UR0&DbiW z$#rfTQ`a`O(`{9s_5yDV_yd5l2Of}kLK+Oj_Ok5(v`JGz71bo9J#^YYXp{DWs&KBa zQ@dTpxRI}aIp=pi@6k0t$5)!;m`NF6-tt{FpOKHBn3g+MAqmexC-gw4rh87hTrL7G z#)U`L!(So6-Zux@>;H3gR;i~0B%VTSS3P|m@o9jRsXML@Al^p#@G0Lx-0?i(9WEw_ zSYddU<1E8793KxjQ|c&UmW!mTC>k>?{om1c9S zUx<6_jj_!T&^M{wWM#>IBbOSf*xP<^F{$j$aOQ5Y{cT zROCL1M7^NKKL z&(yA}mSw#iM0^;IB{ZO5!wl{^Sg-*ysE~&Yz8!E;Qv(A`lu*=Clo*MpVGd>OdF6n^ zam1Jntk;<}MrqIC5$=Q>n{*R}?8oOIDUw5En2dl--Xw34!z7E+5pr-OgyQ-soSab)C%saskMla`aQLVzg0+MZf20tJU&K{hZoBrUc+U4e9&3o zw|KmGEe4#xz17wBu{f`SS_4i66?j31EjY7n{zGfhONK~c+td!TS#B}JoR}5UAd7p& z5phTyXSkK0xCeD3xaYP^o&J~#Xp9xFb0C;HHml5fA<%h1eR|qw7wxF+oNL9T1Aits?sKNIwvGaN)^WO$I^cUV)HzL_| z1K?{9p!>B*)`xfEv!4N6IG{J&h49W#Bz^(#YWw%`e_a{8n{G9m5AeR~_yl0%<7V@p zOg9UQAdoOgxrK8PpritP1Lj;WG^x1k>WlSkBxFhLtuo5005SSC1(W>s7(L> N002ovPDHLkV1n3oDf<8b literal 0 HcmV?d00001 diff --git a/desktop/resources/castle-gate/coinflip.pxa/0.pxi b/desktop/resources/castle-gate/coinflip.pxa/0.pxi new file mode 100644 index 0000000000000000000000000000000000000000..a9c4c3a5962854973395dd9617bc34056ced1052 GIT binary patch literal 264178 zcmeIxTX0-;9l-IV*+N?aT}mmXP#S0`iZvvqS8qUDhzLm|+a%iyjhp08Q$P6z$@bEc1 z-_6-``Jey)vzx)OQgOW2-hQNUMpI_y36DLVZ=Fc0uY;%{OlLL zc>CAB`QW#v4)wN{_moP%n?2{G=95pEn>}^jY4iI^g~@nEesE+%rF>m+WZPIZnJ6ZE zbH#m0U+Yk*Fh0I{q*@&AKQ@zeMtXXBe!46@H{0~wg61>M+}fRMJ2tt43)7}_?(=6g zpS}2;B`xQkx3s@9Rv0SQCVPv!3nR(qa$$GUKT#Yn4wjPiv~+%&N$1TzeEx#wWf!*f z$1uB+$?-!Myzl+#%=Cox#6urgzC4|kX5)2gZ>?BL#(Vb`hijvKqe*dOv=$G)_{@VV z)7k0V`VebA^wFuc>(V*tNmC#GNZOp9oSu>|RfY<+(Azv*s1^G5w=ZvLKd@i-MQ)g?3}owd(%Mn zv^TCfKG31=%R9Gr6^iASs|%A!b?K#Bj?OS{$!+fM$xk1h>g{}e_xb*O^OmjKwq3hp zAO&-DP^Wert7CsjIzh_3PW3hIHXTc3v*vh zCicdep8WK=$>V1pyJ2$Q{!bt1eA|;j)RW)1r&6nw-$XROC*M^mzvb}up8WA)2eR4j zTwmaAsFZ8fN~x4ow{_>PNyf)2<>91ycyMv^XVRO}#pyZelEXI_n{WACsW;AduHTeh z*51~!a&5=U!1N)ZV<% zFMW9+`?eE&sH5es}Xd_kQEP z9V6A^aBj4+r!>5=TG+d#{&D&n++N@7Ef;IK;=W{7dS1FTZLNQ+_wOog%4XZ!RO-I|Rd82>u6qEn+q(bDLH(TZqIRES2R zTC_j9CAuTJH+mp?IC?aCJbEJfUiAIw$>^!*=g}{tr=w@0XQLORKSh6u{t>+ty&Sy~ z{VRGk`cFecVCOOA6*!AMtxB^8jGq?Et-gKh;E8*jqZ%%nKSN=?v3t?9*Q21o{D}P{UnMx z%=kt0>*zPpk?8l)-=e=aWSSbHnbD%?yl73-6~#K6u8(esVtq~VjHY--)BVwd(ZkUb z(c$R%=!Gc8Y7OpKfP zVf1wLO!V96xhM=Xe~A7Zy&Sz7h2hLFoH-{tJ6aO8#_uAwO#L@o-@beF&$0K+%w_)r DdxJ5l literal 0 HcmV?d00001 diff --git a/desktop/resources/castle-gate/coinflip.pxa/1.pxi b/desktop/resources/castle-gate/coinflip.pxa/1.pxi new file mode 100644 index 0000000000000000000000000000000000000000..b9092d95d6b5a19f3a5efa25494b0f7b60afd6f4 GIT binary patch literal 264178 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 r{x8Q$P6#MF!MQ? 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 literal 0 HcmV?d00001 diff --git a/desktop/resources/castle-gate/coinflip.pxa/CelData.plist b/desktop/resources/castle-gate/coinflip.pxa/CelData.plist new file mode 100644 index 00000000..36027d67 --- /dev/null +++ b/desktop/resources/castle-gate/coinflip.pxa/CelData.plist @@ -0,0 +1,26 @@ + + + + + + duration + 0.004999999888241291 + + + duration + 0.004999999888241291 + + + duration + 0.004999999888241291 + + + duration + 0.004999999888241291 + + + duration + 0.004999999888241291 + + + diff --git a/desktop/resources/castle-gate/goon-2-flip.png b/desktop/resources/castle-gate/goon-2-flip.png new file mode 100644 index 0000000000000000000000000000000000000000..000a3386758fa17d4c9446c263a157e49c525632 GIT binary patch literal 1777 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 literal 0 HcmV?d00001 diff --git a/desktop/resources/castle-gate/goon-2-flip.pxa/3.pxi b/desktop/resources/castle-gate/goon-2-flip.pxa/3.pxi new file mode 100644 index 0000000000000000000000000000000000000000..ec57a35aba4f443a0ef68c5f5be61a09cf7fafe4 GIT binary patch literal 526584 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 + + + + + duration + 1 + + + duration + 1 + + + duration + 1 + + + duration + 1 + + + diff --git a/desktop/resources/castle-gate/goon-2.pxa/0.pxi b/desktop/resources/castle-gate/goon-2.pxa/0.pxi index 8c2c348c853e6c0241d2e83772155e72ab05c77f..3d95b968d0fc9f1e8b15f807ec73b04822189e0a 100644 GIT binary patch delta 961 zcmX}qSxD4T6vy%Zax^i^g-|gAi_!=Ki-;B>a;!-t6%3mfv&m5#l^GkCT(YS&ZE=~= z?2lXKWENUsQ3(+tZ7(gLMi5aFL_{0WLOn$E6{QQGd(P86_jkEXtsw)gA)$LpitVLk z2?@_sO&34^a|7PcK{zS{^&aN|k-rd{uWrt$D!`F&wOu$WzTo3GbA+hx@x#K$Dma^Ts1ONPZ{byQeOeLnO5 zJ|`qNEi*N*D$lmrmAltok>?seKWL1L#Ja7Dq7ON26`}nL0rTTF5wDBa06qw zi~D$palF73-r^I!;48l22Y%v@qNt)MZZ&`=5J8xaFf2egA`yic#9}2@V-40~9X25e z$=He%q+&bLVL>)*il~Kfq8fGZC~i^PX?oC)5nRV@+`$+g;3cN;0pIak5lw-Pxd=x* zQeZ&|Tqr{YD#1{Vp;|MTsdd0`vvr~yJ`7}c-5`&_M3hC)hP-IC+fnfC}qM`?g2&(TW>cHoo|C@V$=l|!7`iejYz}bM^su@~S0+&Ln$!AqNt!jjT zcHOGVb~UEP^2}LjaOp3FT$9|`RBT*YU@NS$yDL1|_R@Xju9}AGvhn?%<^u;?^i`Uy z7p;f&0Zk@}_6~i!CKIB^j&vSvu|(?3sHZubj~&eF+j zOjmGA4S-OQbnpx zRKtTd_!X~IdnrN~!W6FHCT?RI_wfSrc#F^YhF^*l0*heAT3Atp8q~p!1~h?CL8#~k znW7ItFQ0x4Vi*&+h8y4#f=h_Ic!)=s#VfqQcl=bO7LO#PVGDMn5-sRL4+zu<)PlHx zNzj<)IT)v`g%2H|GZ_F4$q>RA$7L{8c?*v* UgXg>fRwAK)R^*ZWUsBHf2GFXtwg3PC diff --git a/desktop/resources/castle-gate/goon-2.pxa/1.pxi b/desktop/resources/castle-gate/goon-2.pxa/1.pxi index 76f3ccaed0cd0ef294220a285b584ee7b2cb5d90..4b4fa12ce2922c1004eadeb6aee7e9b47c6ef7d8 100644 GIT binary patch delta 961 zcmX}qSxD4T6vy%Zax^i^g-|gAi_!=Ki-;B>a;!-t6%3mfv&m5#l^GkCT(YS&ZE=~= z?2lXKWENUsQ3(+tZ7(gLMi5aFL_{0WLOn$E6{QQGd(P86_jkEXtsw)gA)$LpitVLk z2?@_sO&34^a|7PcK{zS{^&aN|k-rd{uWrt$D!`F&wOu$WzTo3GbA+hx@x#K$Dma^Ts1ONPZ{byQeOeLnO5 zJ|`qNEi*N*D$lmrmAltok>?seKWL1L#Ja7Dq7ON26`}nL0rTTF5wDBa06qw zi~D$palF73-r^I!;48l22Y%v@qNt)MZZ&`=5J8xaFf2egA`yic#9}2@V-40~9X25e z$=He%q+&bLVL>)*il~Kfq8fGZC~i^PX?oC)5nRV@+`$+g;3cN;0pIak5lw-Pxd=x* zQeZ&|Tqr{YD#1{Vp;|MTsdd0`vvr~yJ`7}c-5`&_M3hC)hP-IC+fnfC}qM`?g2&(TW>cHoo|C@V$=l|!7`iejYz}bM^su@~S0+&Ln$!AqNt!jjT zcHOGVb~UEP^2}LjaOp3FT$9|`RBT*YU@NS$yDL1|_R@Xju9}AGvhn?%<^u;?^i`Uy z7p;f&0Zk@}_6~i!CKIB^j&vSvu|(?3sHZubj~&eF+j zOjmGA4S-OQbnpx zRKtTd_!X~IdnrN~!W6FHCT?RI_wfSrc#F^YhF^*l0*heAT3Atp8q~p!1~h?CL8#~k znW7ItFQ0x4Vi*&+h8y4#f=h_Ic!)=s#VfqQcl=bO7LO#PVGDMn5-sRL4+zu<)PlHx zNzj<)IT)v`g%2H|GZ_F4$q>RA$7L{8c?*v* UgXg>fRwAK)R^*ZWUsBHf2GFXtwg3PC diff --git a/desktop/src-common/advent/#utils.clj# b/desktop/src-common/advent/#utils.clj# new file mode 100644 index 00000000..bb42ba11 --- /dev/null +++ b/desktop/src-common/advent/#utils.clj# @@ -0,0 +1,272 @@ +(ns advent.utils + (:refer-clojure :exclude [load]) + (:require [play-clj.core :refer :all] + [play-clj.ui :refer :all] + [play-clj.utils :refer :all] + [play-clj.math :refer :all] + [play-clj.g2d :refer :all] + [clojure.java.io :as io] + [clojure.edn :as edn]) + (:import [com.badlogic.gdx.graphics Pixmap Pixmap$Filter Texture Texture$TextureFilter] + [com.badlogic.gdx.graphics.g2d TextureRegion] + [com.badlogic.gdx.utils.viewport FitViewport] + [com.badlogic.gdx.scenes.scene2d Actor Stage] + [java.lang Object])) + +(defn log-coords [screen entities] + (let [{:keys [x y]} (input->screen screen {:x (:input-x screen) :y (:input-y screen)})] + (println (:input-x screen) (:input-y screen) "->" x y))) + +(def +all-cursors+ [:main :wool :mushrooms :carrot :right :down :left :up :flask :flask-with-contents :trophy :ladder :stick :cat-toy :balloon :frog-legs :teddy :portrait :recipe :glass-eye :motivational-tapes :used-earplugs :grass :slobber :flask-with-strength :medal :kiss :sword :hourglass :mandrake :ball-n-chain :key :rope :crowbar :note-1 :ash :sack-lunch :flies :spear :monocle :feather :spell-component :money :watch :broken-clock :slingshot :camera :walkie-talkies :alarm-clock :walkie-talkie :flask-water :flask-water-stuff :flask-water-stuff-2 :note-2 :magic-slingshot :active-main :shovel :broom]) + +(def settings (atom {:music-volume 50.0 + :sound-volume 75.0})) + +(defn current-music-volume [& [factor]] + (* (Math/pow (/ (:music-volume @settings) 100.0) 2) + 0.25 + (or factor 1.0))) + +(defn current-sound-volume [& [factor]] + (* (Math/pow (/ (:sound-volume @settings) 100.0) 2) + 0.5 + (or factor 1.0))) + +(defn cursor [filename which] + (let [scale 2 + base-cursor (pixmap filename) + target-width (* 16 scale) + target-height (* 16 scale) + resized (Pixmap. target-width target-height (.getFormat base-cursor)) + index (.indexOf +all-cursors+ which)] + #_(Pixmap/setFilter Pixmap$Filter/NearestNeighbour) + (pixmap! resized :draw-pixmap base-cursor (* index 16) 0 16 16 + 0 0 target-width target-height) + resized )) + +(defn save [entities] + (spit "save.edn" (entities :state))) + +(defn load [] + (assoc (edn/read-string (slurp "save.edn")) :active? true)) + +(defn load-settings! [] + (when (.exists (io/file "settings.edn")) + (reset! settings (edn/read-string (slurp "settings.edn"))))) + +(defn save-settings! [] + (spit "settings.edn" @settings)) + +(defn get-font [filename] + (let [font (bitmap-font filename) + tr (bitmap-font! font :get-region) + tx (.getTexture tr)] + (texture! tx :set-filter Texture$TextureFilter/Linear Texture$TextureFilter/Linear) + font)) + +(def +screen-width+ 320) +(def +screen-height+ 240) + +(defn scaler-fn-with-baseline [baseline minimum-size & [maximum-size]] + (let [maximum-size (or maximum-size 1.0)] + (fn [[_ y]] + (if (< y baseline) maximum-size + (let [percent-complete (- 1.0 (/ (- y baseline) (- +screen-height+ baseline))) + range (+ (* percent-complete (- maximum-size minimum-size)) minimum-size)] + range))))) + +(defn get-scale-value [image x y] + (let [base-y (Math/floor (- 240 y)) + other-y (Math/ceil (- 240 y)) + base-amount (- y (Math/floor y)) + other-amount (- 1.0 base-amount) + base-v (-> image + (pixmap! :get-pixel x base-y) + color + (.r)) + other-v (-> image + (pixmap! :get-pixel x other-y) + color + (.r))] + (+ (* base-v base-amount) + (* other-v other-amount)))) + +(defn scaler-fn-from-image [image minimum-size maximum-size] + (let [image (pixmap image) + maximum-size (or maximum-size 1.0)] + (fn [[x y]] + (let [percent-complete (get-scale-value image x y)] + (if (< y 0) + maximum-size + (+ (* percent-complete (- maximum-size minimum-size)) minimum-size)))))) + +(defn dist [x1 y1 x2 y2 & {:keys [y-sign x-sign]}] + (let [y-sign (or y-sign 1.0) + x-sign (or x-sign 1.0) + dx (* (- x1 x2) x-sign) + dy (* y-sign (- y1 y2))] + (Math/sqrt (+ (* dx dx) (* dy dy))))) + + +(defn flip [anim] + (animation (animation! anim :get-frame-duration) + (for [src-frame (animation! anim :get-key-frames) + :let [frame (texture (texture! src-frame :get-texture))]] + (do + (texture! frame :set-region src-frame) + (texture! frame :flip true false) + frame)))) + +(defn split-texture [file [w h] frames] + (let [sheet (texture! (texture file) :split w h)] + (for [i frames] + (aget sheet 0 i)))) + +(defn make-anim [file [w h] speed frames] + (animation speed (split-texture file [w h] frames))) + + +(defn make-bird [screen p] + (let [bird-sheet (texture! (texture "outside-castle/bird.png") :split 1 2) + bird-stand (animation 0.15 (for [i [0 1]] + (aget bird-sheet 0 i)))] + (assoc (animation->texture screen bird-stand) + :x 0 + :y 0 + :baseline 21 + :anim bird-stand + :anim-start 0 + :path (catmull-rom-spline (map #(apply vector-2* %) p) true) + :update-fn (fn [screen entities entity] + (let [speed 0.05 + pos-f (- (* (:total-time screen) speed) (int (* (:total-time screen) speed))) + v (vector-2 0 0) + a (catmull-rom-spline! (:path entity) :value-at v pos-f)] + (assoc entity :x (vector-2! v :x) :y (vector-2! v :y))))))) + +(defn path-point [speed screen entities entity] + (* (- (:total-time screen) (:path-start-time entity 0.0)) speed)) + +(defn update-path-location [speed screen entities entity] + (let [pos-in-path (or (:pos-in-path entity) 0.1) + _ (println pos-in-path) + pos-in-path (min pos-in-path 1.0) + v (vector-2 0 0) + a (catmull-rom-spline! (:path entity) :derivative-at v pos-in-path) + pos-in-path (+ pos-in-path (/ (* (:delta-time screen) speed) (.len v)) ) + a (catmull-rom-spline! (:path entity) :value-at v pos-in-path) + ] + + (assoc entity :x (vector-2! v :x) :y (vector-2! v :y) :pos-in-path pos-in-path))) + +(defn find-override [entities [x y]] + (first (concat (filter #(and ((:mouse-in? %) entities x y) + + (:override %)) + (get-in entities [:room :interactions])) + (filter #(and (:mouse-in? %) + ((:mouse-in? %) entities x y) + (not= "ego" (:id %)) + (:script %)) + (vals (get-in entities [:room :entities]))) + (filter #(and ((:mouse-in? %) entities x y) + (:script %)) + (get-in entities [:room :interactions]))))) + + + +(defn remove-interaction [entities id] + (update-in entities [:room :interactions] (fn [i] (remove #(= id (:id %)) i)))) + + +(defn play-sound [snd] + (music! snd :play)) + +(defn stop-sound [snd] + (music! snd :stop)) + +(defn make-music [r] + (doto (music r) (music! :set-looping true))) + + + +(defn apply-tweens [screen entities tweens] + (reduce (fn [e f] + (f e (:total-time screen))) + entities + (vals tweens))) + +(defn intersects? [e [x y]] + (and (:object e) + (< (:x e) x (+ (:x e) (or (:width e) (.getWidth (:object e))))) + (< (:y e) y (+ (:y e) (or (:height e) (.getHeight (:object e))))))) + +(defn get-current-music [entities] + (let [time (get-in entities [:state :time]) + musics (:musics entities) + override-music (musics (get-in entities [:music-override :value])) + current-music (musics (get-in entities [:room :music])) + current-time-music (musics (get-in entities [:room :music time]))] + (or override-music current-music current-time-music))) + + +(defn setup-viewport [screen width height] + (let [cam (orthographic) + viewport (FitViewport. width height cam) + stage (Stage. viewport)] + (update! screen :renderer stage :viewport viewport :camera cam) + (.apply viewport) + [cam viewport stage])) + +(defn unproject + ([screen] + (unproject screen [(:input-x screen) (:input-y screen)]) ) + ([screen [x y]] + (let [pj (.unproject ^FitViewport (:viewport screen) (vector-2 x y)) + x (.x pj) + y (.y pj)] + [x y]))) + +(defn project + ([screen [x y]] + (let [pj (.project ^FitViewport (:viewport screen) (vector-2 x y)) + x (.x pj) + y (.y pj)] + [x y]))) + +(defn contains-point? [x1 y1 width height x y] + (and (< x1 x (+ x1 width)) + (< y1 y (+ y1 height)))) + +(defn update-override [screen entities] + (let [last-pos (unproject screen (get-in entities [:cursor :last-pos]))] + (if (get-in entities [:state :active?]) + (if-let [mouse-override (find-override entities last-pos)] + (assoc-in entities [:cursor :override] (or (:cursor mouse-override) (when (#{:main :active-main} (get-in entities [:cursor :last])) :active-main))) + (assoc-in entities [:cursor :override] nil)) + entities))) + +(def default-night-merge {:r 0.08 :g 0.1 :b 0.36 :multiply-amount 1.0 :hue-amount 1.0}) +(def default-night-merge-sprite {:r 0.08 :g 0.1 :b 0.36 :multiply-amount 0.3 :hue-amount 0.4}) + +(defn clamp-volume [vol] + (max vol 0.005)) + +(defn proximity-volume [entities [x y] & {:keys [scale]}] + (-> (max 0.0 + (- 1.0 (/ (dist x y + (get-in entities [:room :entities :ego :x]) + (get-in entities [:room :entities :ego :y]) + :y-sign 2.0 + :x-sign (/ 1.0 (get-in entities [:room :entities :ego :scale-x]))) + 175.0))) + (* (or scale 1.0)) + (clamp-volume))) + +(defn fast-forward-particle [p] + (particle-effect! p :reset) + (particle-effect! p :start) + + (particle-effect! p :update 10.0) + (dotimes [_ 160] + (particle-effect! p :update 0.2))) diff --git a/desktop/src-common/advent/screens/rooms/castle_gate.clj b/desktop/src-common/advent/screens/rooms/castle_gate.clj index 68617f69..f5edbb18 100644 --- a/desktop/src-common/advent/screens/rooms/castle_gate.clj +++ b/desktop/src-common/advent/screens/rooms/castle_gate.clj @@ -4,9 +4,13 @@ [advent.screens.items :as items] [advent.screens.rooms.common :as common] [advent.utils :as utils] + + [advent.tween :as tween] [clojure.zip :as zip] [play-clj.core :refer :all] [play-clj.ui :refer :all] + + [play-clj.math :refer :all] [play-clj.utils :refer :all] [play-clj.g2d :refer :all])) @@ -94,6 +98,21 @@ :scripts {:walkie-talkies (actions/get-script entities (actions/do-dialogue entities :frankie "Tin cans? What do I need walkie talkies for?"))}))) +(defn make-coin-flip [screen] + (let [coin-flip (utils/make-anim "castle-gate/coinflip.png" [10 10] 0.05 (range 5))] + (assoc (animation->texture screen coin-flip) + :x 212 :y 114 :baseline 240 + :opacity 0.0 + :origin-x 5 + :origin-y 5 + :night-profile :none + :coinflip coin-flip + + + #_#_:anim coin-flip + #_#_:anim-start 0 + #_#_:stand coin-flip))) + (defn make-goon-1 [screen] (let [stand (utils/make-anim "castle-gate/goon-1.png" [12 33] 0.21 [0 0 0 0 0 0 0 0 0 1])] (assoc (animation->texture screen stand) @@ -106,12 +125,21 @@ :stand stand))) (defn make-goon-2 [screen] - (let [stand (utils/make-anim "castle-gate/goon-2.png" [12 32] 0.175 [0 0 0 0 0 0 0 0 0 0 0 0 0 1])] + (let [stand (utils/make-anim "castle-gate/goon-2.png" [12 32] 0.175 [0 0 0 0 0 0 0 0 0 0 0 0 0 1]) + flip (utils/make-anim "castle-gate/goon-2-flip.png" [12 32] 0.05 [1 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ])] (assoc (animation->texture screen stand) :x 208 :y 102 :baseline 138 :scale-x 1.4 :scale-y 1.4 :anim stand + :flip flip + :update-fn (fn [s es e] + (if (and (= (:flip e) (:anim e)) + (animation! (:flip e) + :is-animation-finished + (- (:total-time s) (:anim-start e)))) + (actions/start-animation s e :stand) + e)) :night-profile :sprite :anim-start 0 :stand stand))) @@ -122,12 +150,24 @@ (actions/transition-background entities :inside-castle [280 145]) (actions/walk-to entities :ego [245 90])) +(defn flip-coin [screen entities] + (-> entities + (update-in [:room :entities :coin-flip] (fn [cf] (-> (actions/start-animation screen cf :coinflip) + (assoc :opacity 1.0)))) + (assoc-in [:tweens :coin-y] (tween/tween :coin-y screen [:room :entities :coin-flip :y] 112 175 0.5 :ease tween/ease-out-cubic + :finish (fn [e] + (assoc-in e [:tweens :coin-y-2] (tween/tween :coin-y-2 (assoc screen :total-time (+ 0.5 (:total-time screen))) [:room :entities :coin-flip :y] 174 112 0.5 :ease tween/ease-in-cubic + :finish (fn [e] + (assoc-in e [:room :entities :coin-flip :opacity] 0.0))))))) + (update-in [:room :entities :goon-2] (fn [g] (-> (actions/start-animation screen g :flip)))))) + (defn make [screen] (let [throw-walkie (utils/make-anim "castle-gate/throw-walkie.png" [205 136] 0.1 (flatten [(repeat 55 0) (range 9) (repeat 55 8)])) walkie-visible (animation 1.0 [(last (utils/split-texture "castle-gate/throw-walkie.png" [205 136] (range 9)))]) walkie-invisible (animation 1.0 [(first (utils/split-texture "castle-gate/throw-walkie.png" [205 136] (range 9)))])] (rooms/make :music {:day :town-2 :night :night} + :timers {:taunt [4.0 8.0 flip-coin]} :interactions {:right-dir {:box [300 40 320 83] :script (actions/get-script entities (actions/walk-to entities :ego [301 46] :face :right) @@ -163,6 +203,7 @@ :goon-1 (make-goon-1 screen) :goon-2 (make-goon-2 screen) :outside-particles (common/make-outside-particles) + :coin-flip (make-coin-flip screen) } :walkie-talkies (rooms/make-entity :walkie-talkies (assoc (animation->texture screen walkie-visible) diff --git a/desktop/src-common/advent/screens/scene.clj b/desktop/src-common/advent/screens/scene.clj index 38bcbc3a..3ae72383 100644 --- a/desktop/src-common/advent/screens/scene.clj +++ b/desktop/src-common/advent/screens/scene.clj @@ -750,6 +750,7 @@ void main() :on-timer (fn [screen [entities]] (when-let [timer-fn (get-in entities [:room :timers (:id screen) 2])] + (println "here") (timer-fn screen entities))) :on-show diff --git a/desktop/src-common/advent/utils.clj b/desktop/src-common/advent/utils.clj index 598ea935..38c2c7db 100644 --- a/desktop/src-common/advent/utils.clj +++ b/desktop/src-common/advent/utils.clj @@ -144,8 +144,12 @@ a (catmull-rom-spline! (:path entity) :value-at v pos-f)] (assoc entity :x (vector-2! v :x) :y (vector-2! v :y))))))) +(defn path-point [speed screen entities entity] + (* (- (:total-time screen) (:path-start-time entity 0.0)) speed) + ) + (defn update-path-location [speed screen entities entity] - (let [pos-f (- (* (- (:total-time screen) (:path-start-time entity 0.0)) speed) (int (* (- (:total-time screen) (:path-start-time entity 0.0)) speed))) + (let [pos-f (- (path-point speed screen entities entity) (int (* (- (:total-time screen) (:path-start-time entity 0.0)) speed))) v (vector-2 0 0) a (catmull-rom-spline! (:path entity) :value-at v pos-f)] (assoc entity :x (vector-2! v :x) :y (vector-2! v :y))))