progress on interactions with cursors

This commit is contained in:
Bryce Covert
2016-08-11 21:22:56 -07:00
parent a3536d7b0d
commit 626eb12f98
7 changed files with 133 additions and 89 deletions

View File

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