progress on interactions with cursors
This commit is contained in:
@@ -221,7 +221,8 @@ void main ()
|
||||
(get-in entities [:room :interactions]))) )
|
||||
|
||||
(defn get-interacting-entity [entities x y]
|
||||
(let [interactable-entities (if (= (doto (get-selected-inventory-item) (#(log/info "clicked with " %)) ) :main)
|
||||
(let [interactable-entities (if (= (doto (get-selected-inventory-item)
|
||||
(#(log/info "clicked with " %)) ) :main)
|
||||
(vals (dissoc (get-in entities [:room :entities]) :ego))
|
||||
(vals (get-in entities [:room :entities])))
|
||||
interacting-entity (first (sort-by (comp - :baseline)
|
||||
@@ -248,13 +249,13 @@ void main ()
|
||||
(or (= (get-in entities [:cursor :down-target])
|
||||
(or (:id interacting-entity) (:id interaction) nil))
|
||||
(get-in entities [:cursor :came-from-inventory?])))
|
||||
((or (when (and interacting-entity (not (:cursor interaction)))
|
||||
((or (when (and (not (:override-cursor interaction))
|
||||
interacting-entity)
|
||||
(do (screen! hud :on-start-script {})
|
||||
((:get-script interacting-entity) (get-script-selector entities) [x y])))
|
||||
(when interaction
|
||||
(do (screen! hud :on-start-script {})
|
||||
((:get-script interaction) (or (when (:cursor interaction) :main)
|
||||
(get-script-selector entities))
|
||||
((:get-script interaction) (get-script-selector entities)
|
||||
[x y])))
|
||||
|
||||
((:get-script default-interaction) (get-script-selector entities) [x y])) entities))
|
||||
@@ -878,17 +879,35 @@ void main ()
|
||||
entities)
|
||||
entities))
|
||||
|
||||
(defn update-cursor [screen {{:keys [override last active was-active]} :cursor :as entities}]
|
||||
(if (= 0.0 (get-in entities [:fade :opacity]))
|
||||
(let [new-current (or override (get-selected-inventory-item) :main)]
|
||||
(when-not (and (= new-current
|
||||
last)
|
||||
(= active was-active))
|
||||
(let [image-path (if active "cursor_light.png" "cursor.png")]
|
||||
(graphics! :set-cursor (utils/cursor image-path (or (:cursor new-current) new-current)))))
|
||||
(update-in entities [:cursor ] assoc :last new-current
|
||||
:was-active active))
|
||||
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)
|
||||
time-changed (double time-changed)
|
||||
total-time (double total-time)]
|
||||
(cond
|
||||
(not= 0.0 (get-in entities [:fade :opacity]))
|
||||
entities
|
||||
|
||||
(< (unchecked-subtract total-time time-changed) 0.15)
|
||||
entities
|
||||
|
||||
(= [new-current depressed?] last)
|
||||
entities
|
||||
|
||||
:else
|
||||
(do
|
||||
(graphics! :set-cursor (utils/cursor "cursor.png" (translate-depressed (or (:cursor new-current) new-current)
|
||||
depressed?)))
|
||||
(update-in entities [:cursor ] assoc
|
||||
:last [new-current depressed?]
|
||||
:time-changed total-time))
|
||||
)))
|
||||
|
||||
|
||||
(defn get-looped-animation-point ^double [^Animation animation ^double total-time]
|
||||
@@ -1236,7 +1255,7 @@ void main ()
|
||||
|
||||
:on-resume (fn [screen {{:keys [current override last active was-active]} :cursor :as entities} options]
|
||||
(let [current (or override (get-selected-inventory-item) :main)
|
||||
image-path (if active "cursor_light.png" "cursor.png")]
|
||||
image-path "cursor.png"]
|
||||
(graphics! :set-cursor (utils/cursor image-path (or (:cursor current) current))))
|
||||
(doseq [[k [start time fn]] (get-in entities [:room :timers])]
|
||||
(add-timer! screen k start time)))
|
||||
@@ -1337,7 +1356,7 @@ void main ()
|
||||
(set! (. camera zoom) (:zoom (:cam entities)))
|
||||
(set! (.. camera position x) (:x (:cam entities) 160.0))
|
||||
(set! (.. camera position y) (:y (:cam entities) 120.0)))
|
||||
(let [#_#_entities (utils/update-override screen entities options)
|
||||
(let [entities (utils/update-override screen entities options)
|
||||
entities (play-key-sounds screen entities)
|
||||
entities (update-current-sound-vols! entities)
|
||||
entities (remove-ended-sounds screen entities)]
|
||||
@@ -1371,6 +1390,7 @@ void main ()
|
||||
(when (utils/contains-point? (.getScreenX viewport) (.getScreenY viewport)
|
||||
(.getScreenWidth viewport) (.getScreenHeight viewport)
|
||||
input-x input-y)
|
||||
; TODO: override cursor when started in black
|
||||
(when (and (= (button-code :left)
|
||||
(:button options))
|
||||
(get-in entities [:state :active?])
|
||||
@@ -1379,22 +1399,31 @@ void main ()
|
||||
(let [[x y] (utils/unproject screen options)
|
||||
interaction (get-interaction entities x y)
|
||||
interacting-entity (get-interacting-entity entities x y)]
|
||||
(assoc-in entities [:cursor :down-target] (or (:id interacting-entity ) (:id interaction) nil))))))
|
||||
(-> entities
|
||||
(assoc-in [:cursor :depressed?] true)
|
||||
(assoc-in [:cursor :down-target] (or (:id interacting-entity ) (:id interaction) nil)))))))
|
||||
|
||||
:on-touch-up (fn [{:keys [^FitViewport viewport] :as screen} entities {:keys [input-x input-y] :as options}]
|
||||
|
||||
(when (utils/contains-point? (.getScreenX viewport) (.getScreenY viewport)
|
||||
(.getScreenWidth viewport) (.getScreenHeight viewport)
|
||||
input-x input-y)
|
||||
(if (= (button-code :right)
|
||||
(:button options))
|
||||
(do
|
||||
(screen! hud :on-return-item {}))
|
||||
(when (and (get-in entities [:state :active?])
|
||||
(or (not (get-in entities [:state :hud-active?]))
|
||||
(get-in entities [:fg-actions :script-running?]))
|
||||
(= 0.0 (get-in entities [:fade :opacity])))
|
||||
(left-click screen entities options)))))
|
||||
(let [entities (assoc-in entities [:cursor :depressed?] false)]
|
||||
(cond
|
||||
(not (utils/contains-point? (.getScreenX viewport) (.getScreenY viewport)
|
||||
(.getScreenWidth viewport) (.getScreenHeight viewport)
|
||||
input-x input-y))
|
||||
entities
|
||||
|
||||
(= (button-code :right)
|
||||
(:button options))
|
||||
(do (screen! hud :on-return-item {})
|
||||
entities)
|
||||
|
||||
(and (get-in entities [:state :active?])
|
||||
(or (not (get-in entities [:state :hud-active?]))
|
||||
(get-in entities [:fg-actions :script-running?]))
|
||||
(= 0.0 (get-in entities [:fade :opacity])))
|
||||
(left-click screen entities options)
|
||||
|
||||
:else
|
||||
entities)))
|
||||
|
||||
:on-deactivate (fn [screen entities options]
|
||||
(assoc-in entities [:state :active?] false))
|
||||
|
||||
Reference in New Issue
Block a user