Liking cljdoc? Tell your friends :D

Zaffre

A fast Clojure library for emulating a terminal

Zaffre is fast console library for drawing characters to a screen.

Screenshot using 2-bit tileset by Muziak

Features

  • It's fast. Zaffre uses LWJGL and OpenGL to render characters as fast as possible.
  • Unicode support (minus CJK code points)
  • CP437 tileset support (eg: loading Dwarf Fortress Wiki: Tileset repository)
  • Cross-platform codebase
  • Thread safe
  • Multiple fonts
  • Glyph stacking
  • Non-character tiles ie: sprites
  • Mix different font sizes
Screenshot using 16x16 Fantasy tileset by Jerom

Not Features

  • Effects
  • Animation
  • GUI control emulation

Usage

Add the dependency to your project:

[zaffre "0.4.0-SNAPSHOT"]

Quickstart

Runs a little hello world terminal

(ns examples.basic
  (:require [zaffre.terminal :as zat]
            [zaffre.glterminal :as zgl]
            [zaffre.events :as zevents]
            [zaffre.font :as zfont]
            [zaffre.tilesets :as ztiles]
            [zaffre.util :as zutil]
            [clojure.core.async :as async :refer [<! <!! go-loop]]))

(defn -main [& _]
   (zgl/create-terminal
     {:app {           ;; Setup a layer group `:app`
       :layers [:text] ;; With one layer `:text`
       :columns 16     ;; 16 characters wide
       :rows 16        ;; 16 characters tall
       :pos [0 0]      ;; With no position offset
       :font (constantly ztiles/pastiche-16x16)}} ;; Give the group a nice font
     {:title "Zaffre demo"     ;; Set the window title
      :screen-width (* 16 16)  ;; Screen dimentions in pixels
      :screen-height (* 16 16)} ;; Since our font is 16x16 and our layer group
                                ;; is also 16x16
     (fn [terminal]     ;; Receive the terminal in a callback
       (let [last-key (atom nil)]   ;; Save the last key press in an atom
             ;; Every 33ms, draw a full frame
         (zat/do-frame terminal 33
           (let [key-in (or @last-key \?)]
             ;; For each frame
             (zat/clear! terminal) ;; Clear the terminal
             ;; Draw strings
             (zutil/put-string terminal :text 0 0 "Hello world")
             (zutil/put-string terminal :text 12 0 (str key-in))))
         ;; Receive key presses
         (zevents/add-event-listener terminal :keypress
           (fn [new-key]
             ;; Save last key
             (reset! last-key new-key)
             ;; Make the `q` key quit the application
             (case new-key
               \q (zat/destroy! terminal)
               nil)))))))
Screenshot

More Examples

Run with

lein run -m examples.basic

or

lein run -m examples.tileset

etc.

Got to https://github.com/aaron-santos/zaffre/tree/master/src/examples for more.

License

Copyright © 2016 Aaron Santos

Distributed under the MIT license.

Can you improve this documentation?Edit on GitHub

cljdoc is a website building & hosting documentation for Clojure/Script libraries

× close