Moving drawing functions back into core

This commit is contained in:
oakes
2014-01-16 00:31:01 -05:00
parent fcb26ae47b
commit cb5e5f7461
4 changed files with 92 additions and 88 deletions

View File

@@ -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]

View File

@@ -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*

View File

@@ -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]

View File

@@ -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