a better approach to dialogue treees.
This commit is contained in:
@@ -68,28 +68,29 @@
|
||||
entities)
|
||||
|
||||
:on-present-choices
|
||||
(fn [{:keys [pairs]} [entities]]
|
||||
(fn [{:keys [choices callback]} [entities]]
|
||||
(let [font (bitmap-font "ego/font.fnt" )
|
||||
tr (bitmap-font! font :get-region)
|
||||
scale 1
|
||||
tx (.getTexture tr)
|
||||
_ (texture! tx :set-filter Texture$TextureFilter/Linear Texture$TextureFilter/Linear)]
|
||||
(into entities (for [[[text result-script] i] (map vector pairs (range))]
|
||||
[i (assoc (label text (style :label font (color :white))) :x 30 :y (* 30 i) :result-script result-script)]))))
|
||||
(-> entities
|
||||
(into (for [[text i] (map vector (keys choices) (range))]
|
||||
[i (assoc (label text (style :label font (color :white))) :x 30 :y (* 30 i))]))
|
||||
(assoc :state {:object nil :callback callback :choices choices}))))
|
||||
|
||||
:on-touch-down (fn [screen [entities]]
|
||||
(let [{:keys [x y]} (input->screen screen {:x (:input-x screen) :y (:input-y screen)})]
|
||||
(when (seq entities)
|
||||
(when (< y (* 30 (count entities)))
|
||||
(run! @(resolve 'advent.screens.scene/scene) :on-reactivate)
|
||||
(run! @(resolve 'advent.screens.scene/scene) :on-start-script :script (:result-script (entities (int (/ y 30)))))
|
||||
((get-in entities [:state :callback]) (nth (keys (get-in entities [:state :choices])) (int (/ y 30))))
|
||||
{}))))
|
||||
|
||||
:on-mouse-moved (fn [screen [entities]]
|
||||
(let [{:keys [x y]} (input->screen screen {:x (:input-x screen) :y (:input-y screen)})
|
||||
font (bitmap-font "ego/font.fnt" )]
|
||||
(when (seq entities)
|
||||
(doseq [index (range (count entities))]
|
||||
(doseq [index (range (dec (count entities)))]
|
||||
(if (< (* index 30) y (* (inc index) 30))
|
||||
(label! (entities index) :set-style (style :label font (color :yellow)))
|
||||
(label! (entities index) :set-style (style :label font (color :white))))))))
|
||||
|
||||
Reference in New Issue
Block a user