Moving drawing functions back into core
This commit is contained in:
@@ -6,6 +6,7 @@
|
||||
InputMultiplexer InputProcessor Net Screen]
|
||||
[com.badlogic.gdx.graphics Camera Color GL20 OrthographicCamera
|
||||
PerspectiveCamera]
|
||||
[com.badlogic.gdx.graphics.g2d SpriteBatch TextureRegion]
|
||||
[com.badlogic.gdx.input GestureDetector
|
||||
GestureDetector$GestureListener]
|
||||
[com.badlogic.gdx.maps MapLayer MapLayers]
|
||||
|
||||
@@ -112,6 +112,91 @@
|
||||
[]
|
||||
(Stage.))
|
||||
|
||||
(defmacro stage
|
||||
[& options]
|
||||
`(u/calls! ^Stage (stage*) ~@options))
|
||||
|
||||
(defmacro stage!
|
||||
[screen k & options]
|
||||
`(u/call! ^Stage (:renderer ~screen) ~k ~@options))
|
||||
|
||||
; batch
|
||||
|
||||
(defmulti batch #(-> % :renderer class))
|
||||
|
||||
(defmethod batch BatchTiledMapRenderer
|
||||
[{:keys [^BatchTiledMapRenderer renderer]}]
|
||||
(.getSpriteBatch renderer))
|
||||
|
||||
(defmethod batch Stage
|
||||
[{:keys [^Stage renderer]}]
|
||||
(.getSpriteBatch renderer))
|
||||
|
||||
(defmulti batch-begin! type)
|
||||
|
||||
(defmethod batch-begin! SpriteBatch
|
||||
[^SpriteBatch batch]
|
||||
(.begin batch))
|
||||
|
||||
(defmulti batch-end! type)
|
||||
|
||||
(defmethod batch-end! SpriteBatch
|
||||
[^SpriteBatch batch]
|
||||
(.end batch))
|
||||
|
||||
; rendering
|
||||
|
||||
(defmulti draw-entity! #(-> % second :type))
|
||||
|
||||
(defmethod draw-entity! :actor
|
||||
[[^SpriteBatch batch {:keys [^Actor object] :as entity}]]
|
||||
(assert object)
|
||||
(doseq [[k v] entity]
|
||||
(case k
|
||||
:x (.setX object v)
|
||||
:y (.setY object v)
|
||||
:width (.setWidth object v)
|
||||
:height (.setHeight object v)
|
||||
nil))
|
||||
(.draw object batch 1))
|
||||
|
||||
(defmethod draw-entity! :texture
|
||||
[[^SpriteBatch batch {:keys [^TextureRegion object x y width height]}]]
|
||||
(assert (and object x y width height))
|
||||
(.draw batch object (float x) (float y) (float width) (float height)))
|
||||
|
||||
(defn draw! [{:keys [renderer] :as screen} entities]
|
||||
(assert renderer)
|
||||
(let [^SpriteBatch batch (batch screen)]
|
||||
(batch-begin! batch)
|
||||
(doseq [entity entities]
|
||||
(draw-entity! [batch entity]))
|
||||
(batch-end! batch))
|
||||
entities)
|
||||
|
||||
(defn ^:private render-map!
|
||||
[{:keys [^BatchTiledMapRenderer renderer ^Camera camera]}]
|
||||
(when camera (.setView renderer camera))
|
||||
(.render renderer))
|
||||
|
||||
(defn ^:private render-stage!
|
||||
[{:keys [^Stage renderer ^Camera camera]}]
|
||||
(when camera
|
||||
(.setCamera renderer camera)
|
||||
(.setViewport renderer (. camera viewportWidth) (. camera viewportHeight)))
|
||||
(.draw renderer))
|
||||
|
||||
(defn render!
|
||||
([{:keys [renderer] :as screen}]
|
||||
(cond
|
||||
(isa? (type renderer) BatchTiledMapRenderer)
|
||||
(render-map! screen)
|
||||
(isa? (type renderer) Stage)
|
||||
(render-stage! screen)))
|
||||
([screen entities]
|
||||
(render! screen)
|
||||
(draw! screen entities)))
|
||||
|
||||
(defn ^:private refresh-renderer!
|
||||
[{:keys [renderer ui-listeners]} entities]
|
||||
(when (isa? (type renderer) Stage)
|
||||
@@ -125,30 +210,6 @@
|
||||
(remove-input! renderer)
|
||||
(add-input! renderer)))
|
||||
|
||||
(defmacro stage
|
||||
[& options]
|
||||
`(u/calls! ^Stage (stage*) ~@options))
|
||||
|
||||
(defmacro stage!
|
||||
[screen k & options]
|
||||
`(u/call! ^Stage (:renderer ~screen) ~k ~@options))
|
||||
|
||||
(defmulti render! #(-> % :renderer type) :default nil)
|
||||
|
||||
(defmethod render! nil [screen])
|
||||
|
||||
(defmethod render! BatchTiledMapRenderer
|
||||
[{:keys [^BatchTiledMapRenderer renderer ^Camera camera]}]
|
||||
(when camera (.setView renderer camera))
|
||||
(.render renderer))
|
||||
|
||||
(defmethod render! Stage
|
||||
[{:keys [^Stage renderer ^Camera camera]}]
|
||||
(when camera
|
||||
(.setCamera renderer camera)
|
||||
(.setViewport renderer (. camera viewportWidth) (. camera viewportHeight)))
|
||||
(.draw renderer))
|
||||
|
||||
; cameras
|
||||
|
||||
(defn orthographic-camera*
|
||||
|
||||
@@ -1,62 +1,11 @@
|
||||
(ns play-clj.g2d
|
||||
(:require [play-clj.utils :as u])
|
||||
(:import [com.badlogic.gdx.graphics Texture]
|
||||
[com.badlogic.gdx.graphics.g2d Animation SpriteBatch TextureRegion]
|
||||
[com.badlogic.gdx.maps.tiled.renderers BatchTiledMapRenderer]
|
||||
[com.badlogic.gdx.scenes.scene2d Actor Stage]))
|
||||
[com.badlogic.gdx.graphics.g2d Animation BitmapFont TextureRegion]))
|
||||
|
||||
; drawing
|
||||
|
||||
(defmulti sprite-batch #(-> % :renderer class) :default nil)
|
||||
|
||||
(defmethod sprite-batch nil [_])
|
||||
|
||||
(defmethod sprite-batch BatchTiledMapRenderer
|
||||
[{:keys [^BatchTiledMapRenderer renderer]}]
|
||||
(.getSpriteBatch renderer))
|
||||
|
||||
(defmethod sprite-batch Stage
|
||||
[{:keys [^Stage renderer]}]
|
||||
(.getSpriteBatch renderer))
|
||||
|
||||
(defn draw-actor!
|
||||
[^SpriteBatch batch {:keys [^Actor object] :as entity}]
|
||||
(assert object)
|
||||
(doseq [[k v] entity]
|
||||
(case k
|
||||
:x (.setX object v)
|
||||
:y (.setY object v)
|
||||
:width (.setWidth object v)
|
||||
:height (.setHeight object v)
|
||||
nil))
|
||||
(.draw object batch 1))
|
||||
|
||||
(defn draw-texture!
|
||||
[^SpriteBatch batch {:keys [^TextureRegion object x y width height]}]
|
||||
(assert (and object x y width height))
|
||||
(.draw batch object (float x) (float y) (float width) (float height)))
|
||||
|
||||
(defn draw-entity!
|
||||
[^SpriteBatch batch entity]
|
||||
(if (not (map? entity))
|
||||
(draw-entity! batch (u/create-entity entity))
|
||||
(case (:type entity)
|
||||
:actor
|
||||
(draw-actor! batch entity)
|
||||
:texture
|
||||
(draw-texture! batch entity)
|
||||
nil)))
|
||||
|
||||
(defn draw! [{:keys [renderer] :as screen} entities]
|
||||
(assert renderer)
|
||||
(let [^SpriteBatch batch (sprite-batch screen)]
|
||||
(.begin batch)
|
||||
(doseq [entity entities]
|
||||
(draw-entity! batch entity))
|
||||
(.end batch))
|
||||
entities)
|
||||
|
||||
; textures
|
||||
(defmacro bitmap-font
|
||||
[& options]
|
||||
`(BitmapFont. ~@options))
|
||||
|
||||
(defn texture*
|
||||
[arg]
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
[play-clj.utils :as u])
|
||||
(:import [com.badlogic.gdx Files Gdx]
|
||||
[com.badlogic.gdx.graphics Color Texture]
|
||||
[com.badlogic.gdx.graphics.g2d BitmapFont TextureRegion]
|
||||
[com.badlogic.gdx.graphics.g2d TextureRegion]
|
||||
[com.badlogic.gdx.scenes.scene2d Actor Stage]
|
||||
[com.badlogic.gdx.scenes.scene2d.ui ButtonGroup CheckBox Dialog
|
||||
HorizontalGroup Image ImageButton ImageTextButton Label ScrollPane
|
||||
@@ -15,19 +15,12 @@
|
||||
TiledDrawable]
|
||||
[com.esotericsoftware.tablelayout Cell]))
|
||||
|
||||
; temporary inclusion to prevent breaking the template
|
||||
(defonce draw! g2d/draw!)
|
||||
|
||||
(defmacro drawable
|
||||
[type & options]
|
||||
`(~(symbol (str u/main-package ".scenes.scene2d.ui."
|
||||
(u/key->pascal type) "Drawable."))
|
||||
~@options))
|
||||
|
||||
(defmacro bitmap-font
|
||||
[& options]
|
||||
`(BitmapFont. ~@options))
|
||||
|
||||
(defmacro style
|
||||
[type & options]
|
||||
`(~(symbol (str u/main-package ".scenes.scene2d.ui."
|
||||
@@ -246,7 +239,7 @@
|
||||
[^String text arg]
|
||||
(u/create-entity
|
||||
(if (isa? (type arg) Color)
|
||||
(Label. text (style :label (bitmap-font) arg))
|
||||
(Label. text (style :label (g2d/bitmap-font) arg))
|
||||
(Label. text arg))))
|
||||
|
||||
(defmacro label
|
||||
|
||||
Reference in New Issue
Block a user