001 (ns cc.journeyman.the-great-game.playroom
002 (:require [jme-clj.core :refer [add add-to-root box defsimpleapp fly-cam geo
003 get* get-state load-texture rotate run set*
004 setc set-state start unshaded-mat]])
005 (:import [com.jme3.math ColorRGBA]))
006
007 ;; At present this file is just somewhere to play around with jme-clj examples
008
009 (declare app)
010
011 (defn init []
012 (let [cube (geo "jMonkey cube" (box 1 1 1))
013 mat (unshaded-mat)]
014 (set* mat :texture "ColorMap" (load-texture "textures/Monkey.jpg"))
015 (set* cube :material mat)
016 (add-to-root cube)
017 {:cube cube}))
018
019 ;; Let's create simple-update fn with no body for now.
020 (defn simple-update [tpf]
021 (let [{:keys [cube]} (get-state)]
022 (rotate cube 0 (* 2 tpf) 0)))
023
024
025 ;; Kills the running app var and closes its window.
026 ;; (unbind-app #'app)
027
028 ;; We define the `app` var.
029 (defsimpleapp app
030 :opts {:show-settings? false
031 :pause-on-lost-focus? false
032 :settings {:title "My JME Game"
033 :load-defaults? true
034 :frame-rate 60
035 :width 800
036 :height 600}}
037 :init init
038 :update simple-update)
039
040 (start app)
041
042 ;; Reinitialises the running app
043 ;;(run app
044 ;; (re-init init))
045
046 ;; By default, there is a Fly Camera attached to the app that you can control with W, A, S and D keys.
047 ;; Let's increase its movement speed. Now, you fly faster :)
048 (run app
049 (set* (fly-cam) :move-speed 15))
050
051
052 ;; Updates the app
053 (run app
054 (let [{:keys [cube]} (get-state)]
055 (set* cube :local-translation (add (get* cube :local-translation) 1 1 1))))
056
057 ;; Updates the app adding a second cube
058 (run app
059 (let [cube (geo "jMonkey cube" (box 1 1 1))
060 mat (unshaded-mat)]
061 (set* mat :texture "ColorMap" (load-texture "textures/Monkey.jpg"))
062 (setc cube
063 :material mat
064 :local-translation [-3 0 0])
065 (add-to-root cube)
066 (set-state :cube2 cube)))
067
068 ;; We added the new cube, but it's not rotating. We need to update the simple-update fn.
069 (defn simple-update [tpf]
070 (let [{:keys [cube cube2]} (get-state)]
071 (rotate cube 0 (* 2 tpf) 0)
072 (rotate cube2 0 (* 2 tpf) 0)))