correct cursor logic, scared animation update, choosable volume.

This commit is contained in:
2015-03-06 07:13:18 -08:00
parent b057593b86
commit 183b369441
18 changed files with 129 additions and 93 deletions

View File

@@ -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]