From 183b369441acea8dd80fe270da581266ca9f4a30 Mon Sep 17 00:00:00 2001 From: Remington Covert Date: Fri, 6 Mar 2015 07:13:18 -0800 Subject: [PATCH] correct cursor logic, scared animation update, choosable volume. --- desktop/resources/ego/scared-walk.png | Bin 2271 -> 2242 bytes desktop/resources/ego/scared-walk.pxa/0.pxi | Bin 264078 -> 264078 bytes desktop/resources/ego/scared-walk.pxa/1.pxi | Bin 264078 -> 264078 bytes desktop/resources/ego/scared-walk.pxa/2.pxi | Bin 264078 -> 264078 bytes desktop/resources/ego/scared-walk.pxa/3.pxi | Bin 264078 -> 264078 bytes desktop/resources/ego/scared-walk.pxa/4.pxi | Bin 264078 -> 264078 bytes desktop/resources/ego/scared-walk.pxa/5.pxi | Bin 264078 -> 264078 bytes desktop/resources/ego/scared.png | Bin 1894 -> 1899 bytes desktop/resources/ego/scared.pxa/0.pxi | Bin 526471 -> 526471 bytes desktop/resources/ego/scared.pxa/1.pxi | Bin 526470 -> 526470 bytes desktop/resources/ego/scared.pxa/2.pxi | Bin 526471 -> 526471 bytes desktop/resources/ego/scared.pxa/3.pxi | Bin 526470 -> 526470 bytes desktop/settings.edn | 2 +- desktop/src-common/advent/actions.clj | 15 ++-- .../src-common/advent/screens/dialogue.clj | 52 ++++++++--- desktop/src-common/advent/screens/scene.clj | 34 +++---- desktop/src-common/advent/screens/title.clj | 83 ++++++++---------- desktop/src-common/advent/utils.clj | 36 +++++--- 18 files changed, 129 insertions(+), 93 deletions(-) diff --git a/desktop/resources/ego/scared-walk.png b/desktop/resources/ego/scared-walk.png index fb6559e9768bef99e7b393da8ad5227663f9e545..48b858726a10649a5d1f1747c833e7a98b3c2c8b 100644 GIT binary patch delta 1150 zcmV-^1cCeC5yBC$R0MxnNkl;)S%Qy4p&D@{o z%S-RV^WM4ho$sFSoO|buPl#&!zZ7^kw%50**cNZIHn6tq$MJtTT|!8(we`8DgS&QW zqZIw&?P(oo7;B5?3$8Z)N(Sf%fC3@%fkO=P^xKjQkGuNbGAXN%`z(|9%W zFA~E>0A6U%-d=Xqjo_#$)> zo7>NX*TFEdW_W*d`A<3Ul+SbnRGNR$BPfYLXQ!HgD89A6MqC)|3Uz=9??*0)HQUbvizzXDO9 zEuI!|fq#FZ0X6~vOJX)M(UPl+v_FXDd^e`$b?036GUhba66kVr6r8)1t_ zUY$Y3z;lh;{;e}PZqfAhx9)W>4Ho;d%N z!ppayI01gWBtDx_h z5?7};HIZu0!lxQwOP=st5S`*pVzCyAr;mS04#H3l)N$nK8)+)t&+5s9w766Q(twq? z2QjmD5a&VS^SN@3O-z7k&F$Thr$L;LvH@_@W+$uc22PIF(#7!{$Q(Auzamjd=N*C$I~3|RdVono=>+1z825J^V3-Q1Q5Wa*DZEH zH{OJkD#nD%!lON^>BWj0Ff_m5;iJrGIdF$}MGK-EpOu{QnQ-U1DG#5^9G7w(^QG=3 zCDn;d!qc2eo-A%EIcPofS^0Qu+Sn+M5h#JhYRXeCE(v8;r>Y866);xdF9f&wPuc8N Q)c^nh07*qoM6N<$f>7BklK=n! delta 1180 zcmV;N1Y`Tc5#JH8R0Mx^NklS|~;?l(LKrlYVF+P4mt3T+Ym!H*^95HMf29KG2!I43@}Z+O!Y`EYu|fXBGk-+yy#?5b#k0k8vB_S| z{0qde5r8M!e(kFi|IX+JajgDFpa;hNR1}HcG3L;EB2!K2UJlQiZT3gSH-p-D|#IyN_ zcLb&&t=H{nl6EkW@MVj4jekJ_Yz1hkJ0P;T2J!9f3$ZZyTuMDVa7EB*kb^OXE#5W$ z1rOn<0KeW31v04$=uP|;`!#7q*fxqH3*(~Szk`!^$1;>*LSf;Gv<7LPct@ejQPK>*sZ zNG57SK$SNBXpeN8zHv_4+4=nKNDdS+Oz|%A4;6oa^e_>C@7_;CV{(`8JkvvAgTAV% zF7}kz;`t&j@s|a#5rAWP@(_ie01^pB;DxZoBQB4jy8$@1-28(A*b*RN@qFOPW1OD= z%<*~uH$vz%nBraLA9@SQKVZj5&!CSAh(X%D5D@R&!1@1xdf9=7Kv0Z@f3@&viM}5YIw2Y1?Zn!%;2NU zXxVXB=DHR{*FP;d#WUf~V^bVHmTDKPI>w95#Rb*zjl1KIrM4(krEQv`nl0!c(cRA>e5S3PJHK@@%)&PH>HT6h{H7AnD1S|}(O2niBP zMJ>cefU=xXnD_3rpJ-Pd2$7(g(t+vP3$-oaP})FWUp$Z~ct3td(&H3Ya1?_4XFrHaMBm>$3^)+yfiY&{3Xarb zco`2oD$}nIlR^4zy@P}+i8K=D=bih6D~aghF~yN8=+@mTJDm#04)`Dmt!5*Q#F^K< zC2>f)cuaAm3gW*!TQMG51SH`U!vzs5i?59u8-XMKUOj*DnBqtkBsyWvNTPr3*1q>z zo1vQ$a4_NCbt+$#tTfpqMI< z2*MFQG}A?o*Vaz3u+E z6?`>=97tvQaPrI^NvmXw(PEgsrhTBy8~Vbj^8lGUwu0f!N!OD>8G-7_09 kvVb0=i!rz54Cop71N|B9bgv5`nE(I)07*qoM6N<$f<4ECLI3~& delta 801 zcmV++1K#}W4(1N9Qv`nk{YgYYRA>e5S3PJHK@@%)&L(<@T6hv97AnD1S|}(O5QAW; zsD;=_FbHB1n}8r92wEs;ok9pUDx!@<4C22KC17z9^$LR;3{eyeA}Fl)<}%}(pWB_)}L#W*Jj99&sU zWMPGwj^o37mmx`lC?f;J7z$2Aass--0~f#Im_5EexdirYnrAxNt0MWa2jnMI97YhY zlz2ft-8&cK#f9)tSEUul{d~pgP_x|H-2v01dzd+jYK79ddK++EonLPp3XVol|HeKj zls3cnH&5W()MI~t6sRfS(_p3J$0)j181faHI;t&3N#6 z8UB2p5b1aI4+CClq?I_o?>_>((ugS@TO6r^?mn1in@-{6(HKd>R&$Y7;w;*+J#|Q? zcx-W`3gZ7mrrmL6u#8jO&BZ`-*F^@_^M;2^zMGk z(qD7@f(3sK@|2KpB!c8LYa?1grsuXcUvVUYuyRy!si2T>B!X0O@-aY8P=hLv2*OwR z$b28X*id_eslG2yA5cxkaY#7YNt%DeEx&R}N`7*D6uM@ItmnCoR4iX{8WMk`Ch9Uqa$Njc<&$YV*dl9Jo)Ybr zHfY*n=-Uhy`nNltwp0)%#s%B8S&}$b7Wby&p{wtb6!oXcxL~0_#dE=+{x@xZRqQf*U4o5`M(tZ9A-IE)}ua!F*Ep1F|W1CA-i f+?E+LU}oSiGm9uSZ@`*t00000NkvXXu0mjf^d^6j diff --git a/desktop/resources/ego/scared.pxa/0.pxi b/desktop/resources/ego/scared.pxa/0.pxi index 4c2b12ea4de17b56f82ab6848275885b654d5b11..474df50bd28f6a0ba10384d995871376f4e2ec88 100644 GIT binary patch delta 81 zcmZplsL(!9p`nGbg=q_Of2#lk1H=EPyF0-6KM-thY-4}GJiWe?S%4qJ2g$v^aTvsG WpV!F@#4JF}3dC&N=XJ8btOEe}4=qRl delta 83 zcmZplsL(!9p`nGbg=q_Oe=GNYAb7gF1BAEF>STV&EIp@4`2WMjK_H3$3=9ll+4naN YgV^o!I+=l(1&CRJm~H#KPWG2|0C2f1w*UYD diff --git a/desktop/resources/ego/scared.pxa/1.pxi b/desktop/resources/ego/scared.pxa/1.pxi index 7484b5184eacb1c6a911ca627899e2264c6cf271..a799262db2a4e7bac06409b78938cffe87e7fbec 100644 GIT binary patch delta 81 zcmZphsL(c1p`nGbg=q_Of2#lk1H=EPyF0-6KM-thY-4}GJiWe?S%4qJ2g$v^aTvsG WpV!F@#4JF}3dC&N=XJ8br~?4^ZY@Os delta 83 zcmZphsL(c1p`nGbg=q_Oe=GNYAb7gF1BAEF>STV&EIp@4`2WMjK_H3$3=9ll+4naN YgV^o!I+=l(1&CRJm~H#KPWBgd0B{s6v;Y7A diff --git a/desktop/resources/ego/scared.pxa/2.pxi b/desktop/resources/ego/scared.pxa/2.pxi index 210670e0e4bf9a8285922879d71c5bcbb13c8201..d9eca387ef515b36552118efc4b5d4b177b7dc12 100644 GIT binary patch delta 81 zcmZplsL(!9p`nGbg=q_Of2#lk1H=EPyF0-6KM-thY-4}GJiWe?S%4qJ2g$v^aTvsG WpV!F@#4JF}3dC&N=XJ8btOEe}4=qRl delta 83 zcmZplsL(!9p`nGbg=q_Oe=GNYAb7gF1BAEF>STV&EIp@4`2WMjK_H3$3=9ll+4naN YgV^o!I+=l(1&CRJm~H#KPWG2|0C2f1w*UYD diff --git a/desktop/resources/ego/scared.pxa/3.pxi b/desktop/resources/ego/scared.pxa/3.pxi index 8f38c5e200d3b704f907420d85ec6ef3ef6958cf..9b5cb21145509d849a3bc0d154221db0d9d44605 100644 GIT binary patch delta 81 zcmZphsL(c1p`nGbg=q_Of2#lk1H=EPyF0-6KM-thY-4}GJiWe?S%4qJ2g$v^aTvsG WpV!F@#4JF}3dC&N=XJ8br~?4^ZY@Os delta 83 zcmZphsL(c1p`nGbg=q_Oe=GNYAb7gF1BAEF>STV&EIp@4`2WMjK_H3$3=9ll+4naN YgV^o!I+=l(1&CRJm~H#KPWBgd0B{s6v;Y7A diff --git a/desktop/settings.edn b/desktop/settings.edn index 6de83e6a..75134168 100644 --- a/desktop/settings.edn +++ b/desktop/settings.edn @@ -1 +1 @@ -{:sound-volume 84.0, :music-volume 38.0} \ No newline at end of file +{:sound-volume 45.0, :music-volume 53.0} \ No newline at end of file diff --git a/desktop/src-common/advent/actions.clj b/desktop/src-common/advent/actions.clj index 211ed10e..1a32101e 100644 --- a/desktop/src-common/advent/actions.clj +++ b/desktop/src-common/advent/actions.clj @@ -344,13 +344,14 @@ scaled (get-in entities [:room :entities target-id :scaled]) scale-fn (get-in entities [:room :scale-fn]) scale (get-in entities [:room :entities target-id :scale-y] 1) - height (* scale height)] + height (* scale height)] (screen! dialogue/talking-screen :on-talk :text text - :x target-x :y (+ (get-in entities [:room :entities target-id :y]) height) - :color (get-in entities [:room :entities target-id :talk-color]) - - :target-id target-id - :scale scale) + :scene-viewport (:viewport screen) + :x target-x :y (+ target-y height) + :color (get-in entities [:room :entities target-id :talk-color]) + + :target-id target-id + :scale scale) (if animate? (update-in entities [:room :entities target-id ] #(start-animation screen % (or anim :talk))) entities))) @@ -611,7 +612,7 @@ entities (if apply-state (apply-state entities) entities) - entities (utils/update-override entities)] + entities (utils/update-override screen entities)] (when (and (not= new-music old-music) transition-music?) (doseq [[k v] (:musics entities) :when (and v (not= new-music k))] diff --git a/desktop/src-common/advent/screens/dialogue.clj b/desktop/src-common/advent/screens/dialogue.clj index 21f1c17d..ff0aa900 100644 --- a/desktop/src-common/advent/screens/dialogue.clj +++ b/desktop/src-common/advent/screens/dialogue.clj @@ -12,6 +12,7 @@ (:import [com.badlogic.gdx.graphics Pixmap Pixmap$Filter Texture Texture$TextureFilter] [com.badlogic.gdx.graphics.g2d TextureRegion] [com.badlogic.gdx.scenes.scene2d.utils Align] + [com.badlogic.gdx.math Vector3 Vector2 Matrix4] [com.badlogic.gdx Screen])) (defn ensure-on-screen [talk] @@ -19,10 +20,19 @@ minimum-x margin-width maximum-x (- (game :width) margin-width) label-width (label! talk :get-width) - label-right (+ (:x talk) label-width)] - (cond (> label-right maximum-x) (assoc talk :x (- maximum-x label-width)) - (< (:x talk) minimum-x) (assoc talk :x minimum-x) - :else talk))) + label-right (+ (:x talk) label-width) + talk (cond (> label-right maximum-x) (assoc talk :x (- maximum-x label-width)) + (< (:x talk) minimum-x) (assoc talk :x minimum-x) + :else talk)] + (doto talk + (label! :set-x (:x talk)) + (label! :set-y (:y talk))))) + +(defn scene-world->talk-world [scene-viewport [x y]] + (let [[screen-x screen-y] (utils/project {:viewport scene-viewport} [x y]) + x (/ screen-x (/ (game :width) 1280.0 )) + y (/ screen-y (/ (game :height) 960.0 ))] + [x y])) (defscreen talking-screen :on-show @@ -30,12 +40,13 @@ (utils/setup-viewport screen 1280 960) {}) :on-render - (fn [screen [entities]] + (fn [{:keys [camera] :as screen} [entities]] + (render! screen (vals entities)) entities) :on-talk - (fn [{:keys [create-talk target-id color text x y scale]} [entities]] + (fn [{:keys [create-talk target-id color text x y scale scene-viewport] :as screen} [entities]] (let [font (bitmap-font "ego/font.fnt" ) p (nine-patch {:region (:object (texture "talk-bg-2.png")) :left 9 :top 9 :right 9 :bottom 9}) _ (nine-patch! p :set-padding 25 25 5 15) @@ -48,16 +59,31 @@ _ (texture! tx :set-filter Texture$TextureFilter/Linear Texture$TextureFilter/Linear) style (style :label font color) #__ #_(set! (.background style) bg) - talk (assoc (label text style) :y (* 4 y) )] - (label! talk :set-font-scale scale) - (label! talk :set-alignment Align/center) - (assoc entities target-id (-> talk - (assoc :x (- (* 4 x) (/ (label! talk :get-width) 2))) - ensure-on-screen )))) + [source-x source-y] [x y] + + [x y] (scene-world->talk-world scene-viewport [source-x + source-y]) + talk (assoc (label text style :set-font-scale scale :set-alignment Align/center) + :source-x source-x :source-y source-y) + x (- x (/ (label! talk :get-width) 2)) + talk (assoc talk :x x :y y) + talk (ensure-on-screen talk)] + + (assoc entities :dialogue talk))) + + :on-update-camera + (fn [{:keys [scene-viewport scene-camera viewport] :as screen} [ {:keys [dialogue] :as entities}]] + (when dialogue + (let [[x y] (scene-world->talk-world scene-viewport [(:source-x dialogue) + (:source-y dialogue)])] + (-> entities + (assoc-in [:dialogue :x] (- x (/ (label! dialogue :get-width) 2))) + (assoc-in [:dialogue :y] y) + (update-in [:dialogue] ensure-on-screen))))) :stop-talk (fn [{:keys [target-id] } [entities]] - (dissoc entities target-id)) + (dissoc entities :dialogue)) :on-resize (fn [{:keys [viewport width height]} entities] diff --git a/desktop/src-common/advent/screens/scene.clj b/desktop/src-common/advent/screens/scene.clj index c58be20f..2b5738f2 100644 --- a/desktop/src-common/advent/screens/scene.clj +++ b/desktop/src-common/advent/screens/scene.clj @@ -621,23 +621,26 @@ all-entities (concat (vals entities) layers (vals (get-in entities [:room :entities])))] (when (nil? (:zoom (:cam entities))) (println entities)) + (screen! talking-screen :on-update-camera :scene-viewport (:viewport screen) :scene-camera (:camera screen)) (set! (. camera zoom) (:zoom (:cam entities))) (set! (.. camera position x) (:x (:cam entities) 160.0)) (set! (.. camera position y) (:y (:cam entities) 120.0)) - - (when (= (get-in entities [:fade :opacity]) - 0.0) - (play-key-sounds entities)) - (doseq [m (vals (get-in entities [:musics]))] - (when m - (music! m :set-volume (utils/current-music-volume (get-in entities [:volume :value]))))) - (doseq [e (sort-by :baseline all-entities)] - (if (:parallax e) - (render-parallax screen e) - (render! screen [e]))) - - - entities)) + (let [entities (utils/update-override screen entities)] + + + (when (= (get-in entities [:fade :opacity]) + 0.0) + (play-key-sounds entities)) + (doseq [m (vals (get-in entities [:musics]))] + (when m + (music! m :set-volume (utils/current-music-volume (get-in entities [:volume :value]))))) + (doseq [e (sort-by :baseline all-entities)] + (if (:parallax e) + (render-parallax screen e) + (render! screen [e]))) + + + entities))) :on-resize (fn [{:keys [viewport width height]} [entities]] (.update viewport width height)) @@ -654,8 +657,7 @@ (.getScreenWidth viewport) (.getScreenHeight viewport) input-x input-y) - (let [[x y] (utils/unproject screen)] - (utils/update-override (assoc-in entities [:cursor :last-pos] [x y]))) + (utils/update-override screen (assoc-in entities [:cursor :last-pos] [input-x input-y])) (assoc-in entities [:cursor :override] nil))) :on-touch-up (fn [{:keys [input-x input-y viewport] :as screen} [entities]] diff --git a/desktop/src-common/advent/screens/title.clj b/desktop/src-common/advent/screens/title.clj index c864b5c9..7f9c05e7 100644 --- a/desktop/src-common/advent/screens/title.clj +++ b/desktop/src-common/advent/screens/title.clj @@ -34,51 +34,46 @@ (defscreen title-screen :on-show (fn [screen entities] - (let [cam (orthographic) - viewport (FitViewport. 1280 960 cam)] - (utils/load-settings!) - (update! screen :renderer (stage) :camera cam :viewport viewport) - (.apply viewport) - (let [font (utils/get-font "ego/font.fnt") - start-playing (assoc (label "Embark on thy adventure" (style :label font (color 0.6 1.0 1.0 1.0))) :x 0 :y 100) - start-playing (center start-playing) - quit (assoc (label "Quit thy adventure" (style :label font (color 0.6 1.0 1.0 1.0))) :x 0 :y 50) - quit (center quit) - music (utils/make-music "intro.ogg") - ui-skin (skin "ui/ui.json")] - (label! start-playing :set-alignment Align/center) - - {:overlay (assoc (texture "title-overlay.png" ) :x 0 :y 0 :scale-x 4 :scale-y 4 :origin-x 0 :origin-y 0) - :fade (assoc (texture "black.png") - :scale-x 80 - :scale-y 80 - :opacity 1.0) - :music-volume-slider (assoc (slider {:min 0 :max 100 :step 1} ui-skin :set-value (:music-volume @utils/settings)) - :x ( - (/ (game :width) 2) - 150) - :width 300 - :y 200) - :sound-volume-slider (assoc (slider {:min 0 :max 100 :step 1 } ui-skin :set-value (:sound-volume @utils/settings)) - :width 300 - :x ( - (/ (game :width) 2) - 150) - :y 150) - :viewport viewport - :font font - :music music - :volume 1.0 - :start-showing? false - :start-playing start-playing - :quit quit - :tweens {:fade-in (tween/tween :fade-in screen [:fade :opacity] 1.0 0.0 1.0 - :finish #(do (utils/play-sound (:music %)) %) - :ease tween/ease-in-quadratic)}}))) + + (utils/setup-viewport screen 1280 960) + (utils/load-settings!) + (let [font (utils/get-font "ego/font.fnt") + start-playing (assoc (label "Embark on thy adventure" (style :label font (color 0.6 1.0 1.0 1.0))) :x 0 :y 100) + start-playing (center start-playing) + quit (assoc (label "Quit thy adventure" (style :label font (color 0.6 1.0 1.0 1.0))) :x 0 :y 50) + quit (center quit) + music (utils/make-music "intro.ogg") + ui-skin (skin "ui/ui.json")] + (label! start-playing :set-alignment Align/center) + + {:overlay (assoc (texture "title-overlay.png" ) :x 0 :y 0 :scale-x 4 :scale-y 4 :origin-x 0 :origin-y 0) + :fade (assoc (texture "black.png") + :scale-x 80 + :scale-y 80 + :opacity 1.0) + :music-volume-slider (assoc (slider {:min 0 :max 100 :step 1} ui-skin :set-value (:music-volume @utils/settings)) + :x ( - (/ (game :width) 2) + 150) + :width 300 + :y 200) + :sound-volume-slider (assoc (slider {:min 0 :max 100 :step 1 } ui-skin :set-value (:sound-volume @utils/settings)) + :width 300 + :x ( - (/ (game :width) 2) + 150) + :y 150) + + :font font + :music music + :volume 1.0 + :start-showing? false + :start-playing start-playing + :quit quit + :tweens {:fade-in (tween/tween :fade-in screen [:fade :opacity] 1.0 0.0 1.0 + :finish #(do (utils/play-sound (:music %)) %) + :ease tween/ease-in-quadratic)}})) :on-render (fn [screen [entities]] - (.update (:camera screen)) - (.apply (:viewport screen)) - (clear!) (let [entities (utils/apply-tweens screen entities (:tweens entities))] @@ -129,6 +124,6 @@ :else nil))) - :on-resize (fn [screen [entities]] - (.update (:viewport entities) (game :width) (game :height) true) + :on-resize (fn [{:keys [viewport width height]} [entities]] + (.update viewport width height) nil)) diff --git a/desktop/src-common/advent/utils.clj b/desktop/src-common/advent/utils.clj index a963b4a5..1b369641 100644 --- a/desktop/src-common/advent/utils.clj +++ b/desktop/src-common/advent/utils.clj @@ -129,13 +129,7 @@ (:cursor %)) (get-in entities [:room :interactions])))) -(defn update-override [entities] - (if (get-in entities [:state :active?]) - (let [last-pos (get-in entities [:cursor :last-pos])] - (if-let [mouse-override (find-override entities last-pos)] - (assoc-in entities [:cursor :override] (:cursor mouse-override)) - (assoc-in entities [:cursor :override] nil))) - entities)) + (defn remove-interaction [entities id] (update-in entities [:room :interactions] (fn [i] (remove #(= id (:id %)) i)))) @@ -180,12 +174,30 @@ (.apply viewport) [cam viewport stage])) -(defn unproject [screen] - (let [pj (.unproject (:viewport screen) (vector-2 (:input-x screen) (:input-y screen))) - x (.x pj) - y (.y pj)] - [x y])) +(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] (:cursor mouse-override)) + (assoc-in entities [:cursor :override] nil)) + entities)))