resizing is well on its way to working.

This commit is contained in:
2015-02-21 01:18:07 -08:00
parent 843fde014d
commit 6419638b5e
10 changed files with 165 additions and 93 deletions

View File

@@ -1,16 +1,16 @@
(defproject advent "0.0.1-SNAPSHOT" (defproject advent "0.0.1-SNAPSHOT"
:description "FIXME: write description" :description "FIXME: write description"
:dependencies [[com.badlogicgames.gdx/gdx "1.5.0"] :dependencies [[com.badlogicgames.gdx/gdx "1.5.3"]
[com.badlogicgames.gdx/gdx-backend-lwjgl "1.5.0"] [com.badlogicgames.gdx/gdx-backend-lwjgl "1.5.3"]
[com.badlogicgames.gdx/gdx-box2d "1.5.0"] [com.badlogicgames.gdx/gdx-box2d "1.5.3"]
[com.badlogicgames.gdx/gdx-tools "1.5.0"] [com.badlogicgames.gdx/gdx-tools "1.5.3"]
[com.badlogicgames.gdx/gdx-box2d-platform "1.5.0" [com.badlogicgames.gdx/gdx-box2d-platform "1.5.3"
:classifier "natives-desktop"] :classifier "natives-desktop"]
[com.badlogicgames.gdx/gdx-bullet "1.5.0"] [com.badlogicgames.gdx/gdx-bullet "1.5.3"]
[com.badlogicgames.gdx/gdx-bullet-platform "1.5.0" [com.badlogicgames.gdx/gdx-bullet-platform "1.5.3"
:classifier "natives-desktop"] :classifier "natives-desktop"]
[com.badlogicgames.gdx/gdx-platform "1.5.0" [com.badlogicgames.gdx/gdx-platform "1.5.3"
:classifier "natives-desktop"] :classifier "natives-desktop"]
[org.clojure/clojure "1.6.0"] [org.clojure/clojure "1.6.0"]
[org.clojure/tools.nrepl "0.2.7"] [org.clojure/tools.nrepl "0.2.7"]

View File

@@ -566,8 +566,6 @@
(assoc-in e [:cursor :current] :main))) (assoc-in e [:cursor :current] :main)))
(continue [this screen entities] (continue [this screen entities]
(when music-changed?
(music! (get-in entities [:musics old-music]) :set-volume (max (- 1.0 (get-in entities [:fade :opacity])) 0.0)))
entities) entities)
(done? [this screen entities] (done? [this screen entities]

View File

@@ -27,7 +27,7 @@
(defscreen talking-screen (defscreen talking-screen
:on-show :on-show
(fn [screen entities] (fn [screen entities]
(update! screen :renderer (stage) :camera (orthographic)) (utils/setup-viewport screen 1280 960)
{}) {})
:on-render :on-render
(fn [screen [entities]] (fn [screen [entities]]
@@ -60,8 +60,8 @@
(dissoc entities target-id)) (dissoc entities target-id))
:on-resize (fn [screen entities] :on-resize (fn [{:keys [viewport width height]} entities]
(size! screen 1280 960))) (.update viewport width height)))
(def choice-height 30) (def choice-height 30)
@@ -81,7 +81,7 @@
(defscreen choice-screen (defscreen choice-screen
:on-show :on-show
(fn [screen entities] (fn [screen entities]
(update! screen :renderer (stage) :camera (orthographic)) (utils/setup-viewport screen 1280 960)
(let [font (bitmap-font "ego/font.fnt" ) (let [font (bitmap-font "ego/font.fnt" )
tr (bitmap-font! font :get-region) tr (bitmap-font! font :get-region)
scale 1 scale 1
@@ -117,7 +117,7 @@
(assoc-in [:state :np :height] (* 30 (inc choice-count)))))) (assoc-in [:state :np :height] (* 30 (inc choice-count))))))
:on-touch-up (fn [screen [entities]] :on-touch-up (fn [screen [entities]]
(let [{:keys [x y]} (input->screen screen {:x (:input-x screen) :y (:input-y screen)})] (let [[x y] (utils/unproject screen)]
(when (seq (get-in entities [:state :choices])) (when (seq (get-in entities [:state :choices]))
(when-let [choice (first (filter #(utils/intersects? % [x y]) (vals entities)))] (when-let [choice (first (filter #(utils/intersects? % [x y]) (vals entities)))]
((get-in entities [:state :callback]) (:index choice)) ((get-in entities [:state :callback]) (:index choice))
@@ -127,7 +127,7 @@
(select-keys [:state])))))) (select-keys [:state]))))))
:on-mouse-moved (fn [screen [entities]] :on-mouse-moved (fn [screen [entities]]
(let [{:keys [x y]} (input->screen screen {:x (:input-x screen) :y (:input-y screen)}) (let [[x y] (utils/unproject screen)
entities (assoc-in entities [:state :last-pos] [x y]) entities (assoc-in entities [:state :last-pos] [x y])
choice-count (dec (count entities))] choice-count (dec (count entities))]
(doseq [e (vals entities) (doseq [e (vals entities)
@@ -135,5 +135,5 @@
(style-label e (get-in entities [:state :font]) [x y])) (style-label e (get-in entities [:state :font]) [x y]))
entities)) entities))
:on-resize (fn [screen entities] :on-resize (fn [{:keys [width height viewport]} entities]
(size! screen 1280 960))) (.update viewport width height)))

View File

@@ -24,7 +24,8 @@
(defscreen inventory-screen (defscreen inventory-screen
:on-show :on-show
(fn [screen entities] (fn [screen entities]
(update! screen :renderer (stage) :camera (orthographic)) (utils/setup-viewport screen 1280 960)
(let [highlighted-text (assoc (label "Hello" (style :label (utils/get-font "ego/font.fnt") (color :white))) :x 0 :y 850 :width 1280)] (let [highlighted-text (assoc (label "Hello" (style :label (utils/get-font "ego/font.fnt") (color :white))) :x 0 :y 850 :width 1280)]
(label! highlighted-text :set-alignment Align/center) (label! highlighted-text :set-alignment Align/center)
{:overlay (assoc (texture "inventory-overlay.png" ) :x 0 :y 0 :scale-x 4 :scale-y 4 :origin-x 0 :origin-y 0) {:overlay (assoc (texture "inventory-overlay.png" ) :x 0 :y 0 :scale-x 4 :scale-y 4 :origin-x 0 :origin-y 0)
@@ -78,7 +79,7 @@
:box (zone/box (- offset-x padding) (- offset-y padding) (+ offset-x item-width padding) (+ offset-y item-width padding)))))) :box (zone/box (- offset-x padding) (- offset-y padding) (+ offset-x item-width padding) (+ offset-y item-width padding))))))
:on-mouse-moved (fn [screen [entities]] :on-mouse-moved (fn [screen [entities]]
(let [{:keys [x y]} (input->screen screen {:x (:input-x screen) :y (:input-y screen)}) (let [[x y] (utils/unproject screen)
selected-entity (first (filter #((:box %) x y) (:items entities)))] selected-entity (first (filter #((:box %) x y) (:items entities)))]
(if selected-entity (if selected-entity
(assoc entities :highlighted-item (:item selected-entity)) (assoc entities :highlighted-item (:item selected-entity))
@@ -101,4 +102,4 @@
(close entities))))) (close entities)))))
:on-resize (fn [screen entities] :on-resize (fn [screen entities]
(size! screen 1280 960))) (.update (:viewport screen) (:width screen) (:height screen) true)))

View File

@@ -255,7 +255,7 @@
(wizard-dialogue entities))))) (wizard-dialogue entities)))))
:cursor :right} :cursor :right}
:right-dir {:box [220 141 320 224] :right-dir {:box [220 141 320 204]
:script (actions/get-script :script (actions/get-script
entities entities
(actions/walk-to entities :ego [244 150]) (actions/walk-to entities :ego [244 150])

View File

@@ -39,7 +39,8 @@
(defscreen safe-screen (defscreen safe-screen
:on-show :on-show
(fn [screen entities] (fn [screen entities]
(update! screen :renderer (stage) :camera (orthographic)) (utils/setup-viewport screen 320 240)
(let [inputed-key (texture "inside-house/inputed-key.png")] (let [inputed-key (texture "inside-house/inputed-key.png")]
{:fade (assoc (texture "black.png") {:fade (assoc (texture "black.png")
:scale-x 80 :scale-x 80
@@ -79,7 +80,7 @@
:on-touch-up (fn [screen [entities]] :on-touch-up (fn [screen [entities]]
(when (:shown? entities) (when (:shown? entities)
(let [{:keys [x y]} (input->screen screen {:x (:input-x screen) :y (:input-y screen)})] (let [[x y] (utils/unproject screen)]
(if-let [button (get-button [x y])] (if-let [button (get-button [x y])]
(do (sound! (:sound button) :play) (do (sound! (:sound button) :play)
(let [new-state (update-in entities [:button-choices] #(conj % (:id button)))] (let [new-state (update-in entities [:button-choices] #(conj % (:id button)))]
@@ -103,6 +104,7 @@
(< y start-y) (< y start-y)
(> y (+ start-y 75))) (> y (+ start-y 75)))
(close entities)))))) (close entities))))))
:on-resize (fn [{:keys [width height viewport]} entities]
(.update viewport width height)))
:on-resize (fn [screen entities]
(size! screen 320 240)))

View File

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

View File

@@ -13,6 +13,7 @@
) )
(:import [com.badlogic.gdx.graphics Pixmap Pixmap$Filter Texture Texture$TextureFilter] (:import [com.badlogic.gdx.graphics Pixmap Pixmap$Filter Texture Texture$TextureFilter]
[com.badlogic.gdx.graphics.g2d TextureRegion] [com.badlogic.gdx.graphics.g2d TextureRegion]
[com.badlogic.gdx.utils.viewport FitViewport]
[com.badlogic.gdx.scenes.scene2d.utils Align] [com.badlogic.gdx.scenes.scene2d.utils Align]
[com.badlogic.gdx Application Audio Files Game Gdx Graphics Input [com.badlogic.gdx Application Audio Files Game Gdx Graphics Input
InputMultiplexer InputProcessor Net Preferences Screen])) InputMultiplexer InputProcessor Net Preferences Screen]))
@@ -33,33 +34,42 @@
(defscreen title-screen (defscreen title-screen
:on-show :on-show
(fn [screen entities] (fn [screen entities]
(update! screen :renderer (stage) :camera (orthographic)) (let [cam (orthographic)
(let [font (utils/get-font "ego/font.fnt") viewport (FitViewport. 1280 960 cam)]
start-playing (assoc (label "Embark on thy adventure" (style :label font (color 0.6 1.0 1.0 1.0))) :x 0 :y 100) (update! screen :renderer (stage) :camera cam :viewport viewport)
start-playing (center start-playing) (.apply viewport)
quit (assoc (label "Quit thy adventure" (style :label font (color 0.6 1.0 1.0 1.0))) :x 0 :y 50) (let [font (utils/get-font "ego/font.fnt")
quit (center quit) start-playing (assoc (label "Embark on thy adventure" (style :label font (color 0.6 1.0 1.0 1.0))) :x 0 :y 100)
music (utils/make-music "intro.ogg")] start-playing (center start-playing)
(label! start-playing :set-alignment Align/center) quit (assoc (label "Quit thy adventure" (style :label font (color 0.6 1.0 1.0 1.0))) :x 0 :y 50)
quit (center quit)
{:overlay (assoc (texture "title-overlay.png" ) :x 0 :y 0 :scale-x 4 :scale-y 4 :origin-x 0 :origin-y 0) music (utils/make-music "intro.ogg")]
:fade (assoc (texture "black.png") (label! start-playing :set-alignment Align/center)
:scale-x 80
:scale-y 80 {:overlay (assoc (texture "title-overlay.png" ) :x 0 :y 0 :scale-x 4 :scale-y 4 :origin-x 0 :origin-y 0)
:opacity 1.0) :fade (assoc (texture "black.png")
:font font :scale-x 80
:music music :scale-y 80
:volume 1.0 :opacity 1.0)
:start-showing? false :viewport viewport
:start-playing start-playing :font font
:quit quit :music music
:tweens {:fade-in (tween/tween :fade-in screen [:fade :opacity] 1.0 0.0 1.0 :volume 1.0
:finish #(do (utils/play-sound (:music %)) %) :start-showing? false
:ease tween/ease-in-quadratic)} :start-playing start-playing
})) :quit quit
:tweens {:fade-in (tween/tween :fade-in screen [:fade :opacity] 1.0 0.0 1.0
:finish #(do (utils/play-sound (:music %)) %)
:ease tween/ease-in-quadratic)}
})))
:on-render :on-render
(fn [screen [entities]] (fn [screen [entities]]
(.update (:camera screen))
(.apply (:viewport screen))
(clear!)
(let [entities (utils/apply-tweens screen entities (:tweens entities))] (let [entities (utils/apply-tweens screen entities (:tweens entities))]
(music! (:music entities) :set-volume 0.0 #_(:volume entities)) (music! (:music entities) :set-volume 0.0 #_(:volume entities))
(render! screen [(:overlay entities) (:start-playing entities) (:quit entities) (:fade entities)]) (render! screen [(:overlay entities) (:start-playing entities) (:quit entities) (:fade entities)])
@@ -69,13 +79,13 @@
entities) entities)
:on-mouse-moved (fn [screen [entities]] :on-mouse-moved (fn [screen [entities]]
(let [{:keys [x y]} (input->screen screen {:x (:input-x screen) :y (:input-y screen)})] (let [[x y] (utils/unproject screen)]
(style-label (:start-playing entities) (get-in entities [:font]) [x y]) (style-label (:start-playing entities) (get-in entities [:font]) [x y])
(style-label (:quit entities) (get-in entities [:font]) [x y]) (style-label (:quit entities) (get-in entities [:font]) [x y])
entities)) entities))
:on-touch-up (fn [screen [entities]] :on-touch-up (fn [screen [entities]]
(let [{:keys [x y]} (input->screen screen {:x (:input-x screen) :y (:input-y screen)})] (let [[x y] (utils/unproject screen)]
(cond (cond
(utils/intersects? (:start-playing entities) [x y]) (utils/intersects? (:start-playing entities) [x y])
(-> entities (-> entities
@@ -83,7 +93,7 @@
(tween/tween :fade-out screen [:fade :opacity] 0.0 1.0 1.0 (tween/tween :fade-out screen [:fade :opacity] 0.0 1.0 1.0
:finish (fn [entities] :finish (fn [entities]
(utils/stop-sound (:music entities)) (utils/stop-sound (:music entities))
(set-screen! @(resolve 'advent.core/advent) scene/scene scene/hud dialogue/talking-screen dialogue/choice-screen inventory/inventory-screen safe/safe-screen ) (set-screen! @(resolve 'advent.core/advent) scene/scene scene/hud dialogue/talking-screen dialogue/choice-screen inventory/inventory-screen safe/safe-screen)
entities) entities)
:ease tween/ease-in-cubic)) :ease tween/ease-in-cubic))
(assoc-in [:tweens :fade-out-music] (assoc-in [:tweens :fade-out-music]
@@ -100,5 +110,7 @@
:else :else
nil))) nil)))
:on-resize (fn [screen entities] :on-resize (fn [screen [entities]]
(size! screen 1280 960))) (println (game :width) (game :height) (:width screen) (:height screen))
(.update (:viewport entities) (game :width) (game :height) true)
nil))

View File

@@ -8,6 +8,8 @@
[clojure.edn :as edn]) [clojure.edn :as edn])
(:import [com.badlogic.gdx.graphics Pixmap Pixmap$Filter Texture Texture$TextureFilter] (:import [com.badlogic.gdx.graphics Pixmap Pixmap$Filter Texture Texture$TextureFilter]
[com.badlogic.gdx.graphics.g2d TextureRegion] [com.badlogic.gdx.graphics.g2d TextureRegion]
[com.badlogic.gdx.utils.viewport FitViewport]
[com.badlogic.gdx.scenes.scene2d Actor Stage]
[java.lang Object])) [java.lang Object]))
(defn log-coords [screen entities] (defn log-coords [screen entities]
@@ -148,3 +150,21 @@
current-time-music (musics (get-in entities [:room :music time]))] current-time-music (musics (get-in entities [:room :music time]))]
(or override-music current-music current-time-music))) (or override-music current-music current-time-music)))
(defn setup-viewport [screen width height]
(let [cam (orthographic)
viewport (FitViewport. width height cam)
stage (Stage. viewport)]
(update! screen :renderer stage :viewport viewport :camera cam)
(.apply viewport)
[cam viewport stage]))
(defn unproject [screen]
(let [pj (.unproject (:viewport screen) (vector-2 (:input-x screen) (:input-y screen)))
x (.x pj)
y (.y pj)]
[x y]))
(defn contains? [x1 y1 width height x y]
(and (< x1 x (+ x1 width))
(< y1 y (+ y1 height))))

View File

@@ -1,7 +1,7 @@
(ns advent.core.desktop-launcher (ns advent.core.desktop-launcher
(:require [advent.core :refer :all] (:require [advent.core :refer :all]
[clojure.tools.nrepl.server]) [clojure.tools.nrepl.server])
(:import [com.badlogic.gdx.backends.lwjgl LwjglApplication] (:import [com.badlogic.gdx.backends.lwjgl LwjglApplication LwjglApplicationConfiguration]
[org.lwjgl.input Keyboard]) [org.lwjgl.input Keyboard])
(:gen-class)) (:gen-class))
@@ -17,6 +17,13 @@
(defn -main (defn -main
[& [port]] [& [port]]
(when port (start-nrepl-expr (Integer/parseInt port))) (when port (start-nrepl-expr (Integer/parseInt port)))
(LwjglApplication. advent "advent" 1280 960) (if false
(let [cfg (LwjglApplicationConfiguration.)]
(set! (.width cfg) (doto (.width (LwjglApplicationConfiguration/getDesktopDisplayMode)) println))
(set! (.height cfg) (doto (.height (LwjglApplicationConfiguration/getDesktopDisplayMode)) println))
(set! (.fullscreen cfg) true)
(LwjglApplication. advent cfg))
(LwjglApplication. advent "advent" 1280 960))
(Keyboard/enableRepeatEvents true)) (Keyboard/enableRepeatEvents true))