resizing is well on its way to working.
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
(:require [play-clj.core :refer :all]
|
||||
[play-clj.ui :refer :all]
|
||||
[play-clj.utils :refer :all]
|
||||
[play-clj.math :refer :all]
|
||||
[play-clj.entities :as entities]
|
||||
[play-clj.g2d :refer :all]
|
||||
[clojure.zip :as zip]
|
||||
@@ -35,9 +36,13 @@
|
||||
[clojure.core.async :refer [put! <! <!! >! chan go thread take! alts!!]])
|
||||
(:import [com.badlogic.gdx.graphics Pixmap Pixmap$Filter Texture Texture$TextureFilter GL20 GL30]
|
||||
[com.badlogic.gdx.graphics.g2d TextureRegion Animation]
|
||||
[com.badlogic.gdx.utils.viewport FitViewport]
|
||||
[com.badlogic.gdx.scenes.scene2d Actor Stage]
|
||||
[java.lang Object]
|
||||
[com.badlogic.gdx Gdx]))
|
||||
|
||||
(declare hud)
|
||||
|
||||
|
||||
(def default-interaction
|
||||
{:get-script (fn [cursor [x y]] (if (= :main cursor)
|
||||
@@ -61,7 +66,7 @@
|
||||
|
||||
|
||||
(defn left-click [screen entities]
|
||||
(let [{:keys [x y]} (input->screen screen {:x (:input-x screen) :y (:input-y screen)})]
|
||||
(let [[x y] (utils/unproject screen)]
|
||||
(let [interaction (first (filter #((:mouse-in? %) entities x y)
|
||||
(get-in entities [:room :interactions])))
|
||||
interacting-entity (first (sort-by (comp - :baseline) (filter #(and (:mouse-in? %)
|
||||
@@ -387,6 +392,17 @@
|
||||
:mints-eaten 0
|
||||
:seen-intro? false}))
|
||||
|
||||
(defn fade-in-first-time-if-necessary [screen entities]
|
||||
(if (not (get-in entities [:started? :value]))
|
||||
(do (music! (utils/get-current-music entities) :set-volume (get-in entities [:volume :value]))
|
||||
(utils/play-sound (get-in entities [:musics (actions/get-music (get-in entities [:room :music]) (get-in entities [:state :time]))]))
|
||||
(assoc entities
|
||||
:tweens {:fade-in (tween/tween :fade-in screen [:fade :opacity] 1.0 0.0 1.0 :ease tween/ease-in-cubic)
|
||||
:fade-in-music (tween/tween :fade-in-music screen [:volume :value] 0.0 1.0 1.0 :ease tween/ease-in-cubic)}
|
||||
:started? {:value true
|
||||
:object nil}))
|
||||
entities))
|
||||
|
||||
(defn play-key-sounds [entities]
|
||||
(doseq [[target {:keys [previous-frame-index current-frame-index anim-sound-frames anim x y] :as e}] entities]
|
||||
(when (and (not= previous-frame-index current-frame-index)
|
||||
@@ -402,9 +418,9 @@
|
||||
:y-sign 2.0
|
||||
:x-sign (/ 1.0 (get-in entities [:ego :scale-x])))
|
||||
175.0))))
|
||||
vol (* vol vol-scale)]
|
||||
(when (> vol 0.05)
|
||||
(sound! (snd e) :play vol)))))))
|
||||
vol (* vol vol-scale)
|
||||
vol (max vol 0.005)]
|
||||
(sound! (snd e) :play vol))))))
|
||||
|
||||
|
||||
(defscreen scene
|
||||
@@ -415,9 +431,8 @@
|
||||
:on-show
|
||||
(fn [screen entities]
|
||||
(let [screen (assoc screen :total-time 0)]
|
||||
(let [cam (orthographic)]
|
||||
(let [[cam] (utils/setup-viewport screen 320 240)]
|
||||
(set! (. cam zoom) 0.95)
|
||||
(update! screen :renderer (stage) :camera cam)
|
||||
(let [_ (input! :set-cursor-image (utils/cursor "cursor.png" :main) 0 0)
|
||||
rooms {:inside-house (rooms.inside-house/make screen)
|
||||
:inside-stash (rooms.inside-stash/make screen)
|
||||
@@ -434,7 +449,8 @@
|
||||
:outside-jail (rooms.outside-jail/make screen)
|
||||
:outside-castle (rooms.outside-castle/make screen)}
|
||||
entities {:rooms rooms
|
||||
:cam {:value cam
|
||||
|
||||
:cam {:zoom 0.95
|
||||
:object nil}
|
||||
:musics {:object nil
|
||||
:inside-antique (utils/make-music "inside-antique.ogg")
|
||||
@@ -469,27 +485,29 @@
|
||||
:last :main
|
||||
:override nil
|
||||
:last-pos [0 0]}
|
||||
:tweens {:fade-in (tween/tween :fade-in screen [:fade :opacity] 1.0 0.0 1.5 :ease tween/ease-in-cubic)
|
||||
:fade-in-music (tween/tween :fade-in-music screen [:volume :value] 0.0 1.0 1.5 :ease tween/ease-in-cubic)}
|
||||
|
||||
:all-items (assoc items/items :object nil)
|
||||
:started? {:value false
|
||||
:object nil}
|
||||
:room (as-> (get rooms (:last-room (get-state))) room
|
||||
(assoc-in room [:entities :ego] (get-ego screen (:start-pos room) ((:scale-fn room) (:start-pos room)))))}]
|
||||
(music! (utils/get-current-music entities) :set-volume (get-in entities [:volume :value]))
|
||||
|
||||
(utils/play-sound (get-in entities [:musics (actions/get-music (get-in entities [:room :music]) (get-in entities [:state :time]))]))
|
||||
|
||||
(doseq [[k [start time fn]] (get-in entities [:room :timers])]
|
||||
(add-timer! screen k start time))
|
||||
#_(when (not (get-in entities [:state :seen-intro?]))
|
||||
((actions/get-script entities (rooms.dream/do-intro entities)) entities))
|
||||
|
||||
|
||||
(if-let [apply-state (get-in entities [:room :apply-state])]
|
||||
(apply-state entities)
|
||||
entities)))))
|
||||
|
||||
:on-render
|
||||
(fn [screen [entities]]
|
||||
(clear!)
|
||||
(let [entities (utils/apply-tweens screen entities (:tweens entities))
|
||||
(fn [{:keys [camera] :as screen} [entities]]
|
||||
(clear!)
|
||||
|
||||
(let [entities (fade-in-first-time-if-necessary screen entities)
|
||||
entities (utils/apply-tweens screen entities (:tweens entities))
|
||||
entities (update-cursor screen entities)
|
||||
entities (update-from-script screen entities)
|
||||
entities (update-from-hotspots screen entities)
|
||||
@@ -523,9 +541,9 @@
|
||||
layers (get-layers entities)
|
||||
|
||||
all-entities (concat (vals entities) layers (vals (get-in entities [:room :entities])))]
|
||||
(set! (. (:value (:cam entities)) zoom) (:zoom (:cam entities) 1.0))
|
||||
(set! (.. (:value (:cam entities)) position x) (:x (:cam entities) 160.0))
|
||||
(set! (.. (:value (:cam entities)) position y) (:y (:cam entities) 120.0))
|
||||
(set! (. camera zoom) (:zoom (:cam entities)))
|
||||
(set! (.. camera position x) (:x (:cam entities) 160.0))
|
||||
(set! (.. camera position y) (:y (:cam entities) 120.0))
|
||||
|
||||
(when (= (get-in entities [:fade :opacity])
|
||||
0.0)
|
||||
@@ -536,8 +554,8 @@
|
||||
(render! screen (sort-by :baseline all-entities))
|
||||
entities))
|
||||
|
||||
:on-resize (fn [screen entities]
|
||||
(size! screen 320 240))
|
||||
:on-resize (fn [{:keys [viewport width height]} [entities]]
|
||||
(.update viewport width height))
|
||||
|
||||
:on-hide (fn [screen [entities]]
|
||||
(doseq [snd (->> (get-in entities [:musics])
|
||||
@@ -546,16 +564,24 @@
|
||||
(utils/stop-sound snd)))
|
||||
|
||||
:on-mouse-moved
|
||||
(fn [screen [entities]]
|
||||
(let [pos (input->screen screen {:x (:input-x screen) :y (:input-y screen)})]
|
||||
(utils/update-override (assoc-in entities [:cursor :last-pos] [(:x pos) (:y pos)]))))
|
||||
(fn [{:keys [input-x input-y viewport] :as screen} [entities]]
|
||||
(if (utils/contains? (.getScreenX viewport) (.getScreenY viewport)
|
||||
(.getScreenWidth viewport) (.getScreenHeight viewport)
|
||||
input-x input-y)
|
||||
|
||||
(let [[x y] (utils/unproject screen)]
|
||||
(utils/update-override (assoc-in entities [:cursor :last-pos] [x y])))
|
||||
(assoc-in entities [:cursor :override] nil)))
|
||||
|
||||
:on-touch-up (fn [screen [entities]]
|
||||
(if (= (button-code :right)
|
||||
(:button screen))
|
||||
(assoc-in entities [:cursor :current] :main)
|
||||
(when (get-in entities [:state :active?])
|
||||
(left-click screen entities))))
|
||||
:on-touch-up (fn [{:keys [input-x input-y viewport] :as screen} [entities]]
|
||||
(when (utils/contains? (.getScreenX viewport) (.getScreenY viewport)
|
||||
(.getScreenWidth viewport) (.getScreenHeight viewport)
|
||||
input-x input-y)
|
||||
(if (= (button-code :right)
|
||||
(:button screen))
|
||||
(assoc-in entities [:cursor :current] :main)
|
||||
(when (get-in entities [:state :active?])
|
||||
(left-click screen entities)))))
|
||||
|
||||
:on-deactivate (fn [screen [entities]]
|
||||
(assoc-in entities [:state :active?] false))
|
||||
@@ -571,8 +597,14 @@
|
||||
:on-show-inventory (fn [screen [entities]]
|
||||
(click-inventory screen entities))
|
||||
:on-menu (fn [screen [entities]]
|
||||
(assoc-in entities [:tweens :fade-out] (tween/tween :fade-out screen [:fade :opacity] 0.0 1.0 1.0 :finish #(do (set-screen! @(resolve 'advent.core/advent) @(resolve 'advent.screens.title/title-screen))
|
||||
%))))
|
||||
(-> entities
|
||||
(assoc-in [:cursor :override] nil)
|
||||
(assoc-in [:tweens :fade-out-music]
|
||||
(tween/tween :fade-out-music screen [:volume :value] 1.0 0.0 1.0))
|
||||
(assoc-in [:tweens :fade-out]
|
||||
(tween/tween :fade-out screen [:fade :opacity] 0.0 1.0 1.0
|
||||
:finish #(do (set-screen! @(resolve 'advent.core/advent) @(resolve 'advent.screens.title/title-screen))
|
||||
%)))))
|
||||
|
||||
:on-start-script (fn [{:keys [script]} [entities]]
|
||||
(script entities)
|
||||
@@ -581,8 +613,9 @@
|
||||
(defscreen hud
|
||||
:on-show
|
||||
(fn [screen entities]
|
||||
(let [screen (assoc screen :total-time 0)]
|
||||
(update! screen :renderer (stage) :camera (orthographic))
|
||||
(let [screen (assoc screen :total-time 0)]
|
||||
(utils/setup-viewport screen 320 240)
|
||||
|
||||
{:close (assoc (texture "close.png") :x 304 :y 224 :width 16 :height 16 :baseline 9000)
|
||||
:inventory (assoc (texture "inventory.png") :x 278 :y 0 :baseline 9000
|
||||
:mouse-in? (zone/box 278 0 320 42))
|
||||
@@ -596,14 +629,13 @@
|
||||
|
||||
:on-resize
|
||||
(fn [screen entities]
|
||||
(size! screen 320 240))
|
||||
(.update (:viewport screen) (:width screen) (:height screen) true))
|
||||
|
||||
|
||||
|
||||
:on-touch-up
|
||||
(fn [screen [entities]]
|
||||
(if (= (button-code :left) (:button screen))
|
||||
(let [{:keys [x y]} (input->screen screen {:x (:input-x screen) :y (:input-y screen)})]
|
||||
(let [[x y] (utils/unproject screen)]
|
||||
(cond ((:mouse-in? (:inventory entities)) x y)
|
||||
(screen! scene :on-show-inventory)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user