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)))