(ns advent.core (:require [play-clj.core :refer :all] [play-clj.ui :refer :all] [play-clj.g2d :refer :all])) (defscreen main-screen :on-show (fn [screen entities] (update! screen :renderer (stage) :camera (orthographic)) (let [player-sheet (texture! (texture "player.png") :split 18 36) background (texture "bg3.png")] [(assoc background :scale-y 1.0 :scale-x 1.0 :origin-y 0 :origin-x 0 :ego? false :x -60 :y -34) {:right (animation 0.1 (for [i (range 8)] (texture (aget player-sheet 0 i)))) :left (animation 0.1 (for [i (range 8)] (texture (aget player-sheet 1 i)))) :anim (animation 0.1 (for [i (range 8)] (texture (aget player-sheet 0 i)))) :x 0 :y 25 :origin-x 0 :origin-y 0 :x-velocity 1 :ego? true}])) :on-render (fn [screen entities] (clear!) (render! screen (for [entity entities] (if (:ego? entity) (merge (animation->texture screen (:anim entity)) {:ego? (:ego? entity) :x (+ (:x entity) (:x-velocity entity)) :y 0 :origin-x 0 :origin-y 0 :anim (:anim entity) :x-velocity (:x-velocity entity) :left (:left entity) :right (:right entity)} (when (> (:x entity) (width screen)) {:x-velocity -1 :anim (:left entity)}) (when (< (:x entity) 0) {:x-velocity 1 :anim (:right entity)})) entity)))) :on-resize (fn [screen entities] (height! screen 135)) :on-scrolled (fn [screen entities] (set! (. (:camera screen) zoom) (min 1.5 (max (+ (.zoom (:camera screen)) (* 0.01 (:amount screen))) 1))) nil)) (defgame advent :on-create (fn [this] (set-screen! this main-screen)))