should be a fullscreen that pleases everyone.

This commit is contained in:
Bryce Covert
2016-02-22 09:18:45 -08:00
parent 35ecbb8ca2
commit a252571f59
4 changed files with 66 additions and 22 deletions

View File

@@ -96,10 +96,6 @@
:the-end (assoc (utils/get-texture "the-end.png") :x 0 :y 0 :scale-x 4 :scale-y 4 :origin-x 0 :origin-y 0)
:tweens {:fade-in
(tween/tween :fade-in screen [:fade :opacity] 1.0 0.0 5.0 :ease tween/ease-out-cubic)}}))
:on-pause (fn [_ _]
(utils/set-fullscreen! false)
nil)
:on-render
(fn [{:keys [^FitViewport viewport] :as screen} [entities]]

View File

@@ -1169,9 +1169,6 @@ void main ()
(doseq [[k [start time fn]] (get-in entities [:room :timers])]
(add-timer! screen k start time)))
:on-pause (fn [_ _]
(utils/set-fullscreen! false)
nil)
:on-key-up
(fn [screen entities]

View File

@@ -371,10 +371,7 @@
:ease tween/ease-in-quadratic)}}
]
(merge entities (:main-menu entities)))))
:on-pause (fn [_ _]
(utils/set-fullscreen! false)
nil)
:on-render
(fn [{:keys [^FitViewport viewport] :as screen} [entities]]
@@ -387,7 +384,7 @@
entities (update-in entities [:banner-back] merge (animation->texture screen (:anim (:banner-back entities))))]
(when (:fullscreen-button (:settings-menu entities))
(text-button! (:fullscreen-button (:settings-menu entities))
:set-text (if (.isFullscreen Gdx/graphics)
:set-text (if (utils/is-fullscreen?)
"Windowed"
"Fullscreen")))

View File

@@ -432,19 +432,73 @@
(dotimes [_ 160]
(particle-effect! p :update 0.2)))
(defn os->key []
(let [os-name (System/getProperty "os.name")]
(cond
(or (.startsWith os-name "Linux") (.startsWith os-name "LINUX")) :linux
(.startsWith os-name "Mac") :mac
:else :windows)))
(defmulti make-windowed os->key)
(defmulti make-fullscreen os->key)
(defmulti is-fullscreen? os->key)
(defmethod make-windowed :linux []
(do
(log/info "Making windowed 800x600 decorated window")
(System/setProperty "org.lwjgl.opengl.Window.undecorated", "false")
(.setDisplayMode Gdx/graphics 800 600 false)))
(defmethod make-fullscreen :linux []
(let [width (-> Gdx/graphics .getDesktopDisplayMode .width)
height (-> Gdx/graphics .getDesktopDisplayMode .height)]
(log/info "Making fullscreen " width "x" height " as undecorated window")
(System/setProperty "org.lwjgl.opengl.Window.undecorated", "true")
(.setDisplayMode Gdx/graphics
width
height
false)))
(defmethod is-fullscreen? :linux []
(= "true" (System/getProperty "org.lwjgl.opengl.Window.undecorated")))
(defn make-fullscreen-normal []
(let [width (-> Gdx/graphics .getDesktopDisplayMode .width)
height (-> Gdx/graphics .getDesktopDisplayMode .height)]
(log/info "Making fullscreen " width "x" height " as true fullscreen")
(.setDisplayMode Gdx/graphics
width
height
true)
(set! (.foregroundFPS (-> (class Gdx/graphics)
(.getDeclaredField (name "config"))
(doto (.setAccessible true))
(.get Gdx/graphics))) 60)))
(defn make-windowed-normal []
(do
(log/info "Making windowed 1280x960 decorated window")
(System/setProperty "org.lwjgl.opengl.Window.undecorated", "false")
(.setDisplayMode Gdx/graphics 1280 960 false)))
(defn is-fullscreen?-normal []
(.isFullscreen Gdx/graphics))
(defmethod make-windowed :mac [] (make-windowed-normal))
(defmethod make-fullscreen :mac [] (make-fullscreen-normal))
(defmethod is-fullscreen? :mac [] (is-fullscreen?-normal))
(defmethod make-windowed :windows [] (make-windowed-normal))
(defmethod make-fullscreen :windows [] (make-fullscreen-normal))
(defmethod is-fullscreen? :windows [] (is-fullscreen?-normal))
(defn set-fullscreen! [val]
(try
(if val
(on-gl (.setDisplayMode Gdx/graphics
(doto (.width (.getDesktopDisplayMode Gdx/graphics)) log/info)
(doto (.height (.getDesktopDisplayMode Gdx/graphics)) log/info)
true)
(set! (.foregroundFPS (-> (class Gdx/graphics)
(.getDeclaredField (name "config"))
(doto (.setAccessible true))
(.get Gdx/graphics))) 60))
(on-gl (.setDisplayMode Gdx/graphics 1280 960 false)))
(on-gl (make-fullscreen))
(on-gl (make-windowed)))
(on-gl
(swap! settings assoc :fullscreen val)
(save-settings!))
@@ -453,7 +507,7 @@
(log/error e))))
(defn toggle-fullscreen! []
(if (.isFullscreen Gdx/graphics)
(if (is-fullscreen?)
(set-fullscreen! false)
(set-fullscreen! true)))