dialogue thing looks nice.

This commit is contained in:
Bryce Covert
2016-11-16 08:43:17 -08:00
parent 94240558cd
commit 9d12bc549c
4 changed files with 92 additions and 55 deletions

View File

@@ -258,3 +258,74 @@
:on-resize (fn [{:keys [^FitViewport viewport]} entities {:keys [width height]}]
(.update viewport width height)))
(defscreen tooltip-screen
:on-show
(fn [screen entities options]
(let [screen (utils/setup-viewport screen 1280 960)]
(let [font (doto (bitmap-font "label-font.fnt" )
(bitmap-font! :set-use-integer-positions false))
tr (bitmap-font! font :get-region)
_ (.setFilter (.getTexture tr) Texture$TextureFilter/Linear Texture$TextureFilter/Linear)
style (doto (style :label font (color :white))
(#(-> % .font .getData (.setScale (* utils/ui-scale 0.25)))))]
{:label (as-> (label "" style) l
(do (label! l :set-alignment (if utils/mobile? Align/bottomLeft Align/center))
l)
(assoc l :x 0 :y 0 :baseline 10000)
(utils/add-actor-to-stage screen l))
:all-icons (texture! (texture (pixmap "cursor.png")) :split 18 16)
:action-icon nil})))
:on-render
(fn [{:keys [camera ^FitViewport viewport] :as screen} entities options]
(.apply viewport)
(render! screen [(:label entities) (:action-icon entities)])
entities)
:on-hover-start
(fn [screen {:keys [all-icons] :as entities} {:keys [hover-text x y scene-viewport cursor ]}]
(let [x (if utils/mobile? x (+ 8 x))
[scene-x scene-y] (scene-world->talk-world scene-viewport [x y])
depressed? (< 0.5 (- (or (:total-time screen) 0) (int (or (:total-time screen) 0))))]
(label! (get-in entities [:label]) :set-text hover-text)
(cond-> entities
true (assoc-in [:label :text] hover-text)
utils/mobile? (update-in [:label] assoc :x (* 20 4) :y 12)
(and utils/mobile? (or (:cursor (first (:last cursor))) (first (:last cursor))))
(assoc-in [:action-icon]
(assoc
(texture (aget all-icons 0 (.indexOf utils/+all-cursors+ (or (:cursor (first (:last cursor))) (utils/translate-depressed (first (:last cursor))
depressed?)))))
:x 4 :y 4
:width (* 18 4) :height (* 16 4)))
(not utils/mobile?) (update-in [:label] assoc :x scene-x :y scene-y)
true (update-in [:label] ensure-on-screen))))
#_#_:on-update-camera
(fn [{:keys [^FitViewport viewport] :as screen} entities {:keys [scene-viewport scene-camera]}]
(reduce-kv (fn [entities id e]
(if (:id e)
(let [[x y] (scene-world->talk-world scene-viewport [(:source-x e)
(:source-y e)])]
(-> entities
(assoc-in [id :x] (- x (/ (label! e :get-width) 2)))
(assoc-in [id :y] y)
(update-in [id] ensure-on-screen)))
entities))
entities
entities))
#_#_:on-hover-end
(fn [screen entities {:keys [id]}]
(utils/remove-actor-from-stage entities (or id :fg-actions))
(dissoc entities (or id :fg-actions)))
:on-resize (fn [{:keys [^FitViewport viewport]} entities {:keys [width height]}]
(.update viewport width height)))

View File

@@ -37,7 +37,7 @@
[advent.screens.rooms.space :as rooms.space]
[advent.screens.rooms.held :as rooms.held]
[advent.screens.rooms.cat-tree :as rooms.cat-tree]
[advent.screens.dialogue :refer [talking-screen toast-screen]]
[advent.screens.dialogue :refer [talking-screen toast-screen tooltip-screen]]
[advent.screens.inventory :refer [inventory-screen]]
[clojure.core.async :refer [put! <! <!! >! chan go thread take! alts!! poll! dropping-buffer]])
(:import [com.badlogic.gdx.graphics Pixmap$Format Pixmap Pixmap$Filter Texture Texture$TextureFilter GL20 GL30]
@@ -893,12 +893,7 @@ void main ()
entities)
entities))
(defn translate-depressed [cursor depressed?]
(if depressed?
(get {:hand :hand-depressed
:talk :talk-depressed
:look :look-depressed} cursor cursor)
cursor))
(defn update-cursor [{:keys [total-time] :as screen} {{:keys [override last depressed? time-changed] :or {time-changed 0}} :cursor :as entities}]
(let [new-current (or override (get-selected-inventory-item) :main)
@@ -917,7 +912,7 @@ void main ()
:else
(do
(graphics! :set-cursor (utils/cursor "cursor.png"
(translate-depressed (or (:cursor new-current) new-current)
(utils/translate-depressed (or (:cursor new-current) new-current)
depressed?)))
(update-in entities [:cursor ] assoc
:last [new-current depressed?]
@@ -1163,12 +1158,6 @@ void main ()
state (get-state @utils/selected-save)
start-pos [(:x state) (:y state)]
has-start-pos? (:x state)
font (doto (bitmap-font "label-font.fnt" )
(bitmap-font! :set-use-integer-positions false))
tr (bitmap-font! font :get-region)
_ (.setFilter (.getTexture tr) Texture$TextureFilter/Linear Texture$TextureFilter/Linear)
style (doto (style :label font (color :white))
(#(-> % .font .getData (.setScale (* utils/ui-scale 0.0625)))))
_ (update! screen :shader shader)
rooms {:inside-house (rooms.inside-house/make screen)
@@ -1249,14 +1238,6 @@ void main ()
:value 0.0}
:music-override {:object nil
:value nil}
:label (as-> (label "Sheep" style :set-alignment Align/center) l
(if utils/mobile?
(do l (label! l :set-alignment Align/bottomLeft)
l)
(do (label! l :set-alignment Align/center)
l))
(assoc l :x 0 :y 0 :baseline 10000)
(utils/add-actor-to-stage screen l))
:cursor {:id "cursor"
:last nil
:override :hourglass
@@ -1341,34 +1322,6 @@ void main ()
[last-pos-x last-pos-y] (utils/unproject screen nil last-pos)
last-pos-x (double last-pos-x)
last-pos-y (double last-pos-y)
entities (cond-> entities
(not utils/mobile?) (update-in [:label] assoc
:x (unchecked-subtract last-pos-x
cursor-offset-x)
:y (unchecked-add (unchecked-subtract last-pos-y 24 )
cursor-offset-y))
utils/mobile? (update-in [:label]
(fn [l]
(let [[x y] (utils/unproject screen options [(.getScreenX (:viewport screen)) (.getScreenHeight (:viewport screen))])]
(assoc l :x (unchecked-add 25 x) :y (unchecked-add 3 y)))))
(not utils/mobile?) (update-in [:label] ensure-on-screen))
entities (cond-> entities
utils/mobile? (update-in [:action-icon] (fn [ai]
(let [all-items (texture! (texture (pixmap "cursor.png")) :split 18 16)
[x y] (utils/unproject screen options [(.getScreenX (:viewport screen)) (.getScreenHeight (:viewport screen))])]
(try
(assoc
(texture (aget all-items 0 (.indexOf utils/+all-cursors+ (or (:cursor (first (:last (:cursor entities)))) (first (:last (:cursor entities)))))))
:x x :y (unchecked-add 1 y)
:baseline 9000)
(catch Exception e nil)
)))))
entities (if (and (@utils/settings :camera-man? true)
(not (get-in entities [:cam :paused?]))
(nil? (get-in entities [:tweens :cam-x]))
@@ -1410,7 +1363,15 @@ void main ()
(assoc-in entities [:room :entities] (persistent! room))))
layers (get-in entities [:room :current-layers])
all-entities (concat layers (vals (get-in entities [:room :entities])))]
(label! (:label entities) :set-text (get-in entities [:label :text]))
(screen! tooltip-screen :on-hover-start {:hover-text (get-in entities [:label :text])
:scene-viewport (:viewport screen)
:cursor (:cursor entities)
:x (unchecked-subtract last-pos-x
cursor-offset-x)
:y (unchecked-add (unchecked-subtract last-pos-y 16 )
cursor-offset-y)})
(clear!)
(screen! talking-screen :on-update-camera { :scene-viewport (:viewport screen) :scene-camera (:camera screen)})
(screen! fade-screen :update-fade { :opacity (get-in entities [:fade :opacity])})
@@ -1429,8 +1390,6 @@ void main ()
(if (:parallax e)
(render-parallax screen e)
(render! screen [e])))
(render! screen [(:label entities) (:action-icon entities)])
entities))))

View File

@@ -124,7 +124,7 @@
:finish (fn [entities]
(utils/stop-music (:music entities))
(reset! utils/selected-save save)
(set-screen! @(resolve 'advent.core/advent) scene/scene #_scene/demo scene/hud dialogue/talking-screen dialogue/choice-screen dialogue/toast-screen inventory/inventory-screen safe/safe-screen fade/fade-screen
(set-screen! @(resolve 'advent.core/advent) scene/scene #_scene/demo scene/hud dialogue/tooltip-screen dialogue/talking-screen dialogue/choice-screen dialogue/toast-screen inventory/inventory-screen safe/safe-screen fade/fade-screen
)
entities)
:ease tween/ease-in-cubic))

View File

@@ -30,7 +30,7 @@
entity)
(def ui-scale 1.5)
(def ui-scale 1.0)
(def mobile? (= 1.5 ui-scale))
(defn clear-stage [{:keys [^Stage renderer]}]
@@ -650,3 +650,10 @@
(defn stop-all-sounds! [entities]
(doseq [snd (get-in entities [:current-sounds :value])]
(sound! (:sound snd) :stop (:id snd))))
(defn translate-depressed [cursor depressed?]
(if depressed?
(get {:hand :hand-depressed
:talk :talk-depressed
:look :look-depressed} cursor cursor)
cursor))