(ns advent.screens.splash (:require [clojure.string :as str] [play-clj.core :refer :all] [play-clj.math :refer :all] [play-clj.ui :refer :all] [play-clj.utils :refer :all] [play-clj.g2d :refer :all] [advent.utils :as utils] [clojure.tools.logging :as log] [advent.saves :as saves] [advent.tween :as tween] [advent.steam :as steam] [advent.screens.title :as title] ) (:import [com.badlogic.gdx.graphics Pixmap Pixmap$Filter Texture Texture$TextureFilter Color] [com.badlogic.gdx.graphics.g2d TextureRegion] [play_clj.entities NinePatchEntity] [com.badlogic.gdx.utils.viewport FitViewport] [com.badlogic.gdx.scenes.scene2d.ui Slider$SliderStyle Widget ButtonGroup TextButton$TextButtonStyle CheckBox$CheckBoxStyle CheckBox Button] [com.badlogic.gdx.scenes.scene2d Group Actor] [play_clj.entities ActorEntity] [com.badlogic.gdx.scenes.scene2d.utils Align NinePatchDrawable TextureRegionDrawable] [com.badlogic.gdx Application Audio Files Game Gdx Graphics Input InputMultiplexer InputProcessor Net Preferences Screen])) (defn fade-in [screen e thing then] (assoc-in e [:tweens :fade-in] (tween/tween :fade-in screen [thing :opacity] 0.0 1.0 2.0 :finish then :ease tween/ease-in-quadratic))) (defn fade-out [screen e thing then] (assoc-in e [:tweens :fade-out] (tween/tween :fade-out screen [thing :opacity] 1.0 0.0 2.0 :finish then :ease tween/ease-in-quadratic))) (defscreen splash-screen :on-show (fn [screen entities] (utils/setup-viewport screen 1280 960) (log/info "Starting splash screen.") (input! :set-cursor-image (utils/cursor "cursor.png" :hourglass) 0 0) (let [entities {:background (assoc (utils/get-texture "black.png") :scale-x 80 :scale-y 80 :opacity 1.0 :origin-x 0 :origin-y 0 :z 0) :poslogo (assoc (utils/get-texture "pos.png") :x 640 :y 480 :scale-x 2 :scale-y 2 :origin-x 145 :origin-y 64 :z 1 :opacity 0.0) :dbhlogo (assoc (utils/get-texture "dbh.png") :x 0 :y 0 :origin-x 0 :origin-y 0 :z 1 :opacity 0.0) }] (fade-in screen entities :dbhlogo (fn [entities] (fade-out (assoc-in screen [:total-time] 2.0) entities :dbhlogo (fn [entities] (fade-in (assoc-in screen [:total-time] 4.0) entities :poslogo (fn [entities] (fade-out (assoc-in screen [:total-time] 6.0) entities :poslogo (fn [entities] (set-screen! @(resolve 'advent.core/advent) title/title-screen) entities)))))))))) :on-render (fn [{:keys [^FitViewport viewport] :as screen} [entities]] (steam/update) (.apply viewport) (clear!) (let [entities (utils/apply-tweens screen entities (:tweens entities))] (render! screen (sort-by :z (filter :object (vals entities))) ) entities)) :show-screen (fn [entities] entities) :on-key-up (fn [screen entities] (when (= (key-code :escape) (:key screen)) (utils/toggle-fullscreen!)) nil) :on-resize (fn [{:keys [viewport width height]} [entities]] (.update viewport width height false) nil))