dialogue thing looks nice.
This commit is contained in:
@@ -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)))
|
||||
|
||||
@@ -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))))
|
||||
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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))
|
||||
|
||||
Reference in New Issue
Block a user