correct cursor logic, scared animation update, choosable volume.
This commit is contained in:
@@ -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]
|
||||
|
||||
Reference in New Issue
Block a user