diff --git a/desktop/src-common/advent/screens/credits.clj b/desktop/src-common/advent/screens/credits.clj index 1997e7e9..1fa2e06d 100644 --- a/desktop/src-common/advent/screens/credits.clj +++ b/desktop/src-common/advent/screens/credits.clj @@ -134,12 +134,15 @@ (= 0.0 (get-in entities [:fade :opacity]))) (let [[[logo & msg] & remaining-messages] (:remaining-messages entities)] (if msg - (-> entities - (fade-logo-if-necessary screen logo) - (assoc :credit-table (msg->table msg entities)) - (assoc-in [:tweens [:fade :in]] (chain-tweens screen entities)) - (assoc :remaining-messages remaining-messages) - (assoc :last-logo logo)) + (do + (utils/clear-stage screen) + (-> entities + (fade-logo-if-necessary screen logo) + (assoc :credit-table (->> (msg->table msg entities) + (utils/add-actor-to-stage screen))) + (assoc-in [:tweens [:fade :in]] (chain-tweens screen entities)) + (assoc :remaining-messages remaining-messages) + (assoc :last-logo logo))) (do (set-screen! @(resolve 'advent.core/advent) @(resolve 'advent.screens.title/title-screen)) entities))) entities)) @@ -147,7 +150,7 @@ (defscreen credits :on-show - (fn [screen entities] + (fn [screen entities options] (utils/setup-viewport screen 1280 960) (graphics! :set-cursor (utils/cursor "cursor.png" :main)) (let [font (bitmap-font "ego/font.fnt" )] @@ -185,24 +188,24 @@ :tweens {:fade-in (tween/tween :fade-in screen [:fade :opacity] 1.0 0.0 5.0 :ease tween/ease-out-cubic)}})) :on-key-up - (fn [screen entities] + (fn [screen entities options] (when (= (key-code :escape) (:key screen)) (utils/toggle-fullscreen!)) nil) :on-render - (fn [{:keys [^FitViewport viewport] :as screen} entities] + (fn [{:keys [^FitViewport viewport] :as screen} entities options] (.apply viewport) - (let [entities (utils/apply-tweens screen entities (:tweens entities)) - entities (start-message-if-necessary screen entities)] + (let [entities (start-message-if-necessary screen entities) + entities (utils/apply-tweens screen entities (:tweens entities))] (clear!) (render! screen [(:bg entities) (:credit-table entities) (:fade entities) (:dbh entities) (:pos entities)]) entities)) - :on-touch-up (fn [screen entities] + :on-touch-up (fn [screen entities options] (set-screen! @(resolve 'advent.core/advent) @(resolve 'advent.screens.title/title-screen))) - :on-resize (fn [{:keys [width height ^FitViewport viewport]} entities] + :on-resize (fn [{:keys [^FitViewport viewport]} entities {:keys [width height]}] (.update viewport width height))) diff --git a/desktop/src-common/advent/screens/dialogue.clj b/desktop/src-common/advent/screens/dialogue.clj index f362f9a3..83f619c9 100644 --- a/desktop/src-common/advent/screens/dialogue.clj +++ b/desktop/src-common/advent/screens/dialogue.clj @@ -70,8 +70,8 @@ (assoc :source-x source-x :source-y source-y) (doto (label! :set-wrap true) - (#(label! % :set-width (min 700 (+ 50 (label! % :get-width))))) - )) + (#(label! % :set-width (min 700 (+ 50 (label! % :get-width)))))) + (#(utils/add-actor-to-stage screen %))) x (- x (/ (label! talk :get-width) 2)) talk (assoc talk :x x :y y :id id) talk (ensure-on-screen talk)] @@ -94,6 +94,7 @@ :stop-talk (fn [screen entities {:keys [id]}] + (utils/remove-actor-from-stage entities (or id :fg-actions)) (dissoc entities (or id :fg-actions))) @@ -154,7 +155,8 @@ (label! :set-x (:x e)) (label! :set-y (:y e)) (label! :set-height (:height e)) - (label! :set-font-scale 0.25))])) + (label! :set-font-scale 0.25) + (#(utils/add-actor-to-stage screen %)))])) (assoc-in [:state :choices] choices) (assoc-in [:state :callback] callback) (assoc-in [:state :np :height] (* choice-height (inc choice-count)))))) @@ -163,6 +165,7 @@ (let [[x y] (utils/unproject screen options)] (when (seq (get-in entities [:state :choices])) (when-let [choice (first (filter #(utils/intersects? % [x y]) (vals entities)))] + (utils/clear-stage screen) ((get-in entities [:state :callback]) (:index choice)) (-> entities (assoc-in [:state :callback] nil) @@ -211,16 +214,20 @@ talk (label message style :set-alignment Align/center :set-font-scale 0.25) x (- x (/ (label! talk :get-width) 2)) talk (assoc talk :x x :y y :opacity 1.0) - talk (ensure-on-screen talk)] + #_#_talk (ensure-on-screen talk)] + (utils/add-actor-to-stage screen talk) (-> entities (assoc :dialogue talk) (assoc-in [:tweens :fade-out-toast] (tween/tween :fade-out-toast screen [:dialogue :opacity] 1.0 0.0 1.0 - :finish #(dissoc % :dialogue)))))) + :finish #(do + (utils/remove-actor-from-stage entities :dialogue) + (dissoc % :dialogue))))))) :stop-talk (fn [_ entities {:keys [target-id]}] + (utils/remove-actor-from-stage entities :dialogue) (dissoc entities :dialogue)) diff --git a/desktop/src-common/advent/screens/inventory.clj b/desktop/src-common/advent/screens/inventory.clj index 86a51957..98f46ada 100644 --- a/desktop/src-common/advent/screens/inventory.clj +++ b/desktop/src-common/advent/screens/inventory.clj @@ -111,10 +111,10 @@ (defscreen inventory-screen :on-show (fn [screen entities options] - (utils/setup-viewport screen 1280 960) - - (let [hovered-text (assoc (label "Hello" (style :label (utils/get-font "ego/font.fnt") (color :white)) :set-font-scale 0.25) :x 0 :y 850 :width 1280 )] + (let [screen (utils/setup-viewport screen 1280 960) + hovered-text (assoc (label "Hello" (style :label (utils/get-font "ego/font.fnt") (color :white)) :set-font-scale 0.25) :x 0 :y 850 :width 1280 )] (label! hovered-text :set-alignment Align/bottom) + (utils/add-actor-to-stage screen hovered-text) {:overlay (assoc (utils/get-texture "inventory-overlay.png" ) :x 0 :y 0 :scale-x 4 :scale-y 4 :origin-x 0 :origin-y 0 :opacity 0.0) :fade (assoc (utils/get-texture "black.png") :scale-x 80 diff --git a/desktop/src-common/advent/screens/scene.clj b/desktop/src-common/advent/screens/scene.clj index fc9cc702..35f0861a 100644 --- a/desktop/src-common/advent/screens/scene.clj +++ b/desktop/src-common/advent/screens/scene.clj @@ -895,7 +895,7 @@ void main () (let [t (double total-time)] (rem t (animation! animation :get-animation-duration)))) -(defn animate [{:keys [anim anim-loop? anim-merges anim-start] :or {anim-loop? true} :as entity} {:keys [delta-time total-time] :or {delta-time 0} :as screen}] +(defn animate [{:keys [anim anim-loop? anim-merges anim-start] :or {anim-loop? true anim-start 0} :as entity} {:keys [delta-time total-time] :or {delta-time 0} :as screen}] (let [delta-time (double delta-time) total-time (double total-time) anim-start (double anim-start) @@ -1754,8 +1754,9 @@ void main () (defscreen hud :on-show (fn [screen entities options] - (let [screen (assoc screen :total-time 0)] - (utils/setup-viewport screen 320 240) + (let [screen (assoc screen :total-time 0) + screen (utils/setup-viewport screen 320 240)] + {:inv-fsm {:state :none :state-data {} @@ -1788,7 +1789,8 @@ void main () :mouse-in? (zone/box 278 0 320 42) :opacity 0.8) :all-items (texture! (texture (pixmap "cursor.png")) :split 18 16) - #_#_:fps (assoc (label "" (color :white) ) :x 5 :baseline 0 :opacity 0.1)})) + :fps (->> (assoc (label "" (color :white) ) :x 5 :baseline 0 :opacity 0.1) + (utils/add-actor-to-stage screen))})) :on-render (fn [{:keys [^FitViewport viewport] :as screen} entities options] @@ -1818,13 +1820,14 @@ void main () (grow-hud screen entities :save false))) entities (or (process-fsm screen entities) entities)] - #_(label! (:fps entities) :set-text (str (game :fps))) + (label! (:fps entities) :set-text (str (game :fps))) (render! screen [ (if (and hud-interactable? (not (:already-saved? entities))) (:save entities) (assoc (:save entities) :opacity 0.5)) + (:fps entities) (if hud-interactable? (:inventory entities) (assoc (:inventory entities) :opacity 0.5)) @@ -1869,7 +1872,6 @@ void main () :on-start-script (fn [_ entities _] - (println "here") (-> entities (update-in [:inv-fsm :pending-states] conj [:none nil]) (assoc-in [:already-saved?] false))) diff --git a/desktop/src-common/advent/screens/title.clj b/desktop/src-common/advent/screens/title.clj index 6236098f..7b3a2e84 100644 --- a/desktop/src-common/advent/screens/title.clj +++ b/desktop/src-common/advent/screens/title.clj @@ -481,27 +481,32 @@ (dissoc :save-menu) (dissoc :chapters-menu) (dissoc :settings-menu) - (assoc :main-menu (main-menu screen))) + (assoc :main-menu (->> (main-menu screen) + (utils/add-actor-to-stage screen)))) (#{:dont-delete-button } actor-key) (as-> entities entities (dissoc entities :confirm-delete) - (assoc entities :save-menu (saves-menu entities (:renderer screen)))) + (assoc entities :save-menu (->> (saves-menu entities (:renderer screen)) + (utils/add-actor-to-stage screen)))) (= :load actor-key) (as-> entities entities (dissoc entities :main-menu) - (assoc entities :save-menu (saves-menu entities (:renderer screen)))) + (assoc entities :save-menu (->> (saves-menu entities (:renderer screen)) + (utils/add-actor-to-stage screen)))) (= :chapters actor-key) (-> entities (dissoc :main-menu) - (assoc :chapters-menu (chapters-menu ))) + (assoc :chapters-menu (->> (chapters-menu ) + (utils/add-actor-to-stage screen)))) (= :settings actor-key) (-> entities (dissoc :main-menu) - (assoc :settings-menu (settings-menu))) + (assoc :settings-menu (->> (settings-menu) + (utils/add-actor-to-stage screen)))) (= :toggle-fullscreen actor-key) (utils/toggle-fullscreen!) @@ -522,7 +527,8 @@ (= :delete actor-key) (as-> entities entities (dissoc entities :save-menu) - (assoc entities :confirm-delete (confirm-delete entities))) + (assoc entities :confirm-delete (->> (confirm-delete entities) + (utils/add-actor-to-stage screen)))) (= :confirm-delete-button actor-key) (do @@ -530,7 +536,8 @@ (as-> entities entities (dissoc entities :confirm-delete) (assoc entities :saves-list (utils/snapshot-screenshots)) - (assoc entities :save-menu (saves-menu entities (:renderer screen))))) + (assoc entities :save-menu (->> (saves-menu entities (:renderer screen)) + (utils/add-actor-to-stage screen))))) (:save e) (do diff --git a/desktop/src-common/advent/utils.clj b/desktop/src-common/advent/utils.clj index ee2bf040..6214bf5b 100644 --- a/desktop/src-common/advent/utils.clj +++ b/desktop/src-common/advent/utils.clj @@ -29,6 +29,16 @@ (.addListener ^Actor object listener)) entity) +(defn clear-stage [{:keys [^Stage renderer]}] + (.clear renderer)) + +(defn remove-actor-from-stage + ([entities id] + (remove-actor-from-stage (id entities))) + ([{:keys [^Actor object]}] + (when object + (.remove object)))) + (defn log-coords [screen entities] (let [{:keys [x y]} (input->screen screen {:x (:input-x screen) :y (:input-y screen)})] (log/info (:input-x screen) (:input-y screen) "->" x y)))