a number of cool improvements, hotspots for cursors, non-jumpy text.

This commit is contained in:
Bryce Covert
2016-08-12 08:16:09 -07:00
parent 6f24840998
commit 8ecc23eae1
5 changed files with 163 additions and 125 deletions

View File

@@ -53,7 +53,8 @@
:on-talk :on-talk
(fn [screen entities {:keys [create-talk target-id color text x y scale scene-viewport id]}] (fn [screen entities {:keys [create-talk target-id color text x y scale scene-viewport id]}]
(let [font (bitmap-font "ego/font.fnt" ) (let [font (doto (bitmap-font "ego/font.fnt" )
(bitmap-font! :set-use-integer-positions false))
p (NinePatchEntity. (skin! (skin "ui/ui.json") :get-patch "ui-bg")) p (NinePatchEntity. (skin! (skin "ui/ui.json") :get-patch "ui-bg"))
_ (nine-patch! p :set-padding 25 25 5 15) _ (nine-patch! p :set-padding 25 25 5 15)

View File

@@ -66,6 +66,7 @@
disappear-left {1 [:disappear 0.7]} disappear-left {1 [:disappear 0.7]}
} }
:night-profile :sprite :night-profile :sprite
:label "Gandarf"
:cursor :talk :cursor :talk
:origin-x 0 :origin-x 0
:origin-y 0 :origin-y 0

View File

@@ -697,6 +697,7 @@
[:stand 1] sheep-1 [:stand 1] sheep-1
[:stand 2] sheep-2 [:stand 2] sheep-2
[:stand 3] sheep-3 [:stand 3] sheep-3
:label "Sheep"
:cursor :hand :cursor :hand
:origin-y 3 :origin-y 3
:origin-x 6 :origin-x 6
@@ -798,6 +799,7 @@
) )
:lamb (assoc (utils/get-texture "outsidehouse/lamb.png") :lamb (assoc (utils/get-texture "outsidehouse/lamb.png")
:cursor :look :cursor :look
:label "Baby lamb"
:x 10 :y 163 :baseline 77 :x 10 :y 163 :baseline 77
:right {:stand (animation 0.1 [lamb-stand]) :right {:stand (animation 0.1 [lamb-stand])
:walk lamb-walk} :walk lamb-walk}
@@ -827,6 +829,7 @@
:cauldron (rooms/make-entity :cauldron (assoc (animation->texture screen cauldron) :cauldron (rooms/make-entity :cauldron (assoc (animation->texture screen cauldron)
:cursor :look :cursor :look
:x 139 :y 73 :baseline 167 :x 139 :y 73 :baseline 167
:label "Magical cauldron"
:anim cauldron :anim cauldron
:anim-start 0 :anim-start 0
:night-profile :none :night-profile :none
@@ -836,6 +839,7 @@
:charcoal (rooms/make-entity :charcoal :charcoal (rooms/make-entity :charcoal
(assoc (animation->texture screen charcoal) (assoc (animation->texture screen charcoal)
:cursor :hand :cursor :hand
:label "Charcoal"
:anim charcoal :anim charcoal
:anim-start 0 :anim-start 0
:night-profile :none :night-profile :none

View File

@@ -44,6 +44,8 @@
[com.badlogic.gdx.graphics.g2d TextureRegion Animation Batch] [com.badlogic.gdx.graphics.g2d TextureRegion Animation Batch]
[com.badlogic.gdx.math Vector3 Matrix4] [com.badlogic.gdx.math Vector3 Matrix4]
[com.badlogic.gdx.utils.viewport FitViewport] [com.badlogic.gdx.utils.viewport FitViewport]
[com.badlogic.gdx.utils Align]
[com.badlogic.gdx.scenes.scene2d Actor Stage] [com.badlogic.gdx.scenes.scene2d Actor Stage]
[com.badlogic.gdx.graphics.glutils ShaderProgram] [com.badlogic.gdx.graphics.glutils ShaderProgram]
[java.lang Object] [java.lang Object]
@@ -902,12 +904,12 @@ void main ()
:else :else
(do (do
(graphics! :set-cursor (utils/cursor "cursor.png" (translate-depressed (or (:cursor new-current) new-current) (graphics! :set-cursor (utils/cursor "cursor.png"
(translate-depressed (or (:cursor new-current) new-current)
depressed?))) depressed?)))
(update-in entities [:cursor ] assoc (update-in entities [:cursor ] assoc
:last [new-current depressed?] :last [new-current depressed?]
:time-changed total-time)) :time-changed total-time)))))
)))
(defn get-looped-animation-point ^double [^Animation animation ^double total-time] (defn get-looped-animation-point ^double [^Animation animation ^double total-time]
@@ -1138,15 +1140,20 @@ void main ()
:on-show :on-show
(fn [screen entities options] (fn [screen entities options]
(log/info "Initializing scene.") (log/info "Initializing scene.")
(let [{cam :camera :as screen} (utils/setup-viewport screen 320 240)
(let [screen (assoc screen :total-time 0)] screen (assoc screen :total-time 0)]
(let [{cam :camera} (utils/setup-viewport screen 320 240)]
(set! (. cam zoom) 0.95) (set! (. cam zoom) 0.95)
(let [shader (ShaderProgram. ^String v-shader ^String pix-shader) (let [shader (ShaderProgram. ^String v-shader ^String pix-shader)
_ (log/info "shader log:" (.getLog shader)) _ (log/info "shader log:" (.getLog shader))
state (get-state @utils/selected-save) state (get-state @utils/selected-save)
start-pos [(:x state) (:y state)] start-pos [(:x state) (:y state)]
has-start-pos? (:x state) has-start-pos? (:x state)
font (doto (bitmap-font "label-font.fnt" )
(bitmap-font! :set-use-integer-positions false))
tr (bitmap-font! font :get-region)
_ (.setFilter (.getTexture tr) Texture$TextureFilter/Linear Texture$TextureFilter/Linear)
style (doto (style :label font (color :white))
(#(-> % .font .getData (.setScale 0.0625))))
_ (update! screen :shader shader) _ (update! screen :shader shader)
rooms {:inside-house (rooms.inside-house/make screen) rooms {:inside-house (rooms.inside-house/make screen)
@@ -1226,6 +1233,9 @@ void main ()
:value 0.0} :value 0.0}
:music-override {:object nil :music-override {:object nil
:value nil} :value nil}
:label (utils/add-actor-to-stage screen
(assoc (label "Sheep" style :set-alignment Align/left)
:x 0 :y 0 :baseline 10000))
:cursor {:id "cursor" :cursor {:id "cursor"
:last nil :last nil
:override :hourglass :override :hourglass
@@ -1251,7 +1261,7 @@ void main ()
(if-let [apply-state (get-in entities [:room :apply-state])] (if-let [apply-state (get-in entities [:room :apply-state])]
(apply-state screen entities) (apply-state screen entities)
entities))))) entities))))
:on-resume (fn [screen {{:keys [current override last active was-active]} :cursor :as entities} options] :on-resume (fn [screen {{:keys [current override last active was-active]} :cursor :as entities} options]
(let [current (or override (get-selected-inventory-item) :main) (let [current (or override (get-selected-inventory-item) :main)
@@ -1268,13 +1278,13 @@ void main ()
nil) nil)
:on-render :on-render
(fn [{:keys [^OrthographicCamera camera ^FitViewport viewport ^Stage renderer] :as screen} entities options] (fn [{:keys [^OrthographicCamera camera ^FitViewport viewport ^Stage renderer] :as screen} {{:keys [last-pos]} :cursor :keys [tweens] :as entities} options]
(steam/update) (steam/update)
(.apply viewport) (.apply viewport)
(if (get-in entities [:closing? :value]) (if (get-in entities [:closing? :value])
(let [entities (utils/apply-tweens screen entities (:tweens entities)) (let [entities (utils/apply-tweens screen entities tweens)
entities (update-current-sound-vols! entities) entities (update-current-sound-vols! entities)
entities (remove-ended-sounds screen entities) entities (remove-ended-sounds screen entities)
get-rendered (partial get-rendered entities) get-rendered (partial get-rendered entities)
@@ -1298,7 +1308,7 @@ void main ()
(render! screen [e]))) (render! screen [e])))
entities) entities)
(let [entities (fade-in-first-time-if-necessary screen entities) (let [entities (fade-in-first-time-if-necessary screen entities)
entities (utils/apply-tweens screen entities (:tweens entities)) entities (utils/apply-tweens screen entities tweens)
entities (update-cursor screen entities) entities (update-cursor screen entities)
entities (start-script-if-necessary screen entities :fg-actions) entities (start-script-if-necessary screen entities :fg-actions)
entities (update-from-script screen entities :fg-actions) entities (update-from-script screen entities :fg-actions)
@@ -1306,6 +1316,13 @@ void main ()
entities (update-from-script screen entities :bg-actions) entities (update-from-script screen entities :bg-actions)
entities (update-from-room screen entities) entities (update-from-room screen entities)
entities (update-from-hotspots screen entities) entities (update-from-hotspots screen entities)
[last-pos-x last-pos-y] (utils/unproject screen nil last-pos)
last-pos-x (double last-pos-x)
last-pos-y (double last-pos-y)
entities (update-in entities [:label] assoc
:x (unchecked-add last-pos-x 20.0)
:y (unchecked-subtract last-pos-y 12 ))
entities (if (and (@utils/settings :camera-man? true) entities (if (and (@utils/settings :camera-man? true)
@@ -1349,6 +1366,7 @@ void main ()
(assoc-in entities [:room :entities] (persistent! room)))) (assoc-in entities [:room :entities] (persistent! room))))
layers (get-in entities [:room :current-layers]) layers (get-in entities [:room :current-layers])
all-entities (concat layers (vals (get-in entities [:room :entities])))] all-entities (concat layers (vals (get-in entities [:room :entities])))]
(label! (:label entities) :set-text (get-in entities [:label :text]))
(clear!) (clear!)
(screen! talking-screen :on-update-camera { :scene-viewport (:viewport screen) :scene-camera (:camera screen)}) (screen! talking-screen :on-update-camera { :scene-viewport (:viewport screen) :scene-camera (:camera screen)})
(screen! fade-screen :update-fade { :opacity (get-in entities [:fade :opacity])}) (screen! fade-screen :update-fade { :opacity (get-in entities [:fade :opacity])})
@@ -1367,6 +1385,7 @@ void main ()
(if (:parallax e) (if (:parallax e)
(render-parallax screen e) (render-parallax screen e)
(render! screen [e]))) (render! screen [e])))
(render! screen [(:label entities)])
entities)))) entities))))
@@ -1818,7 +1837,7 @@ void main ()
:mouse-in? (zone/box 278 0 320 42) :mouse-in? (zone/box 278 0 320 42)
:opacity 0.8) :opacity 0.8)
:all-items (texture! (texture (pixmap "cursor.png")) :split 18 16) :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))})) (utils/add-actor-to-stage screen))}))
:on-render :on-render
@@ -1849,14 +1868,14 @@ void main ()
(grow-hud screen entities :save false))) (grow-hud screen entities :save false)))
entities (or (process-fsm screen entities) entities)] 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))) (render! screen [ (if (and hud-interactable? (not (:already-saved? entities)))
(:save entities) (:save entities)
(assoc (:save entities) :opacity 0.5)) (assoc (:save entities) :opacity 0.5))
(:fps entities) #_(:fps entities)
(if hud-interactable? (if hud-interactable?
(:inventory entities) (:inventory entities)
(assoc (:inventory entities) :opacity 0.5)) (assoc (:inventory entities) :opacity 0.5))

View File

@@ -47,6 +47,9 @@
(def ^:const +all-cursors+ [:main :wool :mushrooms :carrot :right :down :left :up :flask :flask-with-contents :trophy :ladder :stick :cat-toy :balloon :frog-legs :teddy :portrait :recipe :glass-eye :motivational-tapes :used-earplugs :grass :slobber :flask-with-strength :medal :kiss :sword :hourglass :mandrake :ball-n-chain :key :rope :crowbar :note-1 :ash :sack-lunch :flies :spear :monocle :feather :spell-component :money :charcoal :broken-clock :slingshot :camera :walkie-talkies :alarm-clock :walkie-talkie :flask-water :flask-water-stuff :flask-water-stuff-2 :note-2 :magic-slingshot :active-main :shovel :broom :tune :hand :hand-depressed :talk :talk-depressed :look :look-depressed]) (def ^:const +all-cursors+ [:main :wool :mushrooms :carrot :right :down :left :up :flask :flask-with-contents :trophy :ladder :stick :cat-toy :balloon :frog-legs :teddy :portrait :recipe :glass-eye :motivational-tapes :used-earplugs :grass :slobber :flask-with-strength :medal :kiss :sword :hourglass :mandrake :ball-n-chain :key :rope :crowbar :note-1 :ash :sack-lunch :flies :spear :monocle :feather :spell-component :money :charcoal :broken-clock :slingshot :camera :walkie-talkies :alarm-clock :walkie-talkie :flask-water :flask-water-stuff :flask-water-stuff-2 :note-2 :magic-slingshot :active-main :shovel :broom :tune :hand :hand-depressed :talk :talk-depressed :look :look-depressed])
(def ^:const +cursor-hotspots+ {:look [8 8]
:look-depressed [8 8]})
(def settings (atom {:music-volume 50.0 (def settings (atom {:music-volume 50.0
:sound-volume 75.0 :sound-volume 75.0
:fullscreen true})) :fullscreen true}))
@@ -69,12 +72,15 @@
target-width (* 16 scale) target-width (* 16 scale)
target-height (* 16 scale) target-height (* 16 scale)
resized (Pixmap. target-width target-height (.getFormat base-cursor)) resized (Pixmap. target-width target-height (.getFormat base-cursor))
index (.indexOf +all-cursors+ which)] index (.indexOf +all-cursors+ which)
[hot-x hot-y] (+cursor-hotspots+ which [0 0])
hot-x (int hot-x)
hot-y (int hot-y)]
(Pixmap/setFilter Pixmap$Filter/NearestNeighbour) (Pixmap/setFilter Pixmap$Filter/NearestNeighbour)
(pixmap! resized :draw-pixmap base-cursor (* index 18) 0 16 16 (pixmap! resized :draw-pixmap base-cursor (* index 18) 0 16 16
0 0 target-width target-height) 0 0 target-width target-height)
(graphics! :new-cursor resized 0 0 ))) (graphics! :new-cursor resized (* hot-x scale) (* hot-y scale) )))
(defn get-texture [path] (defn get-texture [path]
(let [atlas-name (str/replace path #".png" "") (let [atlas-name (str/replace path #".png" "")
@@ -388,6 +394,7 @@
(first raw-pos) (last raw-pos))) (first raw-pos) (last raw-pos)))
hovering-ego (hovering-ego entities last-pos) hovering-ego (hovering-ego entities last-pos)
current (get-in entities [:cursor :current]) current (get-in entities [:cursor :current])
entities (assoc-in entities [:label :text] "")
selected-inventory-item (@(resolve 'advent.screens.scene/get-selected-inventory-item))] selected-inventory-item (@(resolve 'advent.screens.scene/get-selected-inventory-item))]
(cond (cond
@@ -408,13 +415,19 @@
(assoc-in [:cursor :override] nil)) (assoc-in [:cursor :override] nil))
(and mouse-override (:only-script mouse-override)) (and mouse-override (:only-script mouse-override))
(assoc-in entities [:cursor :override] (:cursor mouse-override)) (-> entities
(assoc-in [:cursor :override] (:cursor mouse-override))
(assoc-in [:label :text] (:label mouse-override)))
selected-inventory-item selected-inventory-item
(assoc-in entities [:cursor :override] selected-inventory-item) (-> entities
(assoc-in [:cursor :override] selected-inventory-item)
(assoc-in [:label :text] (:label mouse-override)))
mouse-override mouse-override
(assoc-in entities [:cursor :override] (:cursor mouse-override)) (-> entities
(assoc-in [:cursor :override] (:cursor mouse-override))
(assoc-in [:label :text] (:label mouse-override)))
:else :else
(assoc-in entities [:cursor :override] :main)))) (assoc-in entities [:cursor :override] :main))))