Clean up sidebar, add health and energy
author |
Steve Losh <steve@stevelosh.com> |
date |
Sat, 07 Jan 2017 16:26:29 +0000 |
parents |
692ec1bec892
|
children |
8961421a3c9b
|
branches/tags |
(none) |
files |
package.lisp src/entities/player.lisp src/main.lisp |
Changes
--- a/package.lisp Sat Jan 07 16:14:15 2017 +0000
+++ b/package.lisp Sat Jan 07 16:26:29 2017 +0000
@@ -50,6 +50,10 @@
(:export
:player
:make-player
+ :player/health
+ :health-description
+ :player/energy
+ :energy-description
:coords
:coords/x
--- a/src/entities/player.lisp Sat Jan 07 16:14:15 2017 +0000
+++ b/src/entities/player.lisp Sat Jan 07 16:26:29 2017 +0000
@@ -1,7 +1,23 @@
(in-package :ap.entities)
+(defun health-description (health-value)
+ (cond ((< health-value 0.0) "dead")
+ ((< health-value 10.0) "almost dead")
+ ((< health-value 50.0) "in bad shape")
+ ((< health-value 70.0) "feeling decent")
+ ((<= health-value 100.0) "feeling healthy")))
-(define-entity player (coords visible))
+(defun energy-description (energy-value)
+ (cond ((< energy-value 0.0) "starving")
+ ((< energy-value 30.0) "famished")
+ ((< energy-value 50.0) "very hungry")
+ ((< energy-value 70.0) "hungry")
+ ((< energy-value 80.0) "peckish")
+ ((<= energy-value 100.0) "full")))
+
+(define-entity player (coords visible)
+ (health :accessor player/health :initform 100.0)
+ (energy :accessor player/energy :initform 100.0))
(defun make-player ()
(create-entity 'player
--- a/src/main.lisp Sat Jan 07 16:14:15 2017 +0000
+++ b/src/main.lisp Sat Jan 07 16:26:29 2017 +0000
@@ -23,7 +23,7 @@
(defparameter *wat* nil)
(defparameter *player* nil)
-(defparameter *sidebar-width* 20)
+(defparameter *sidebar-width* 30)
;;;; More Utils Lol
@@ -165,6 +165,18 @@
(with-color (window (visible/color entity))
(charms:write-string-at-point window (visible/glyph entity) sx sy)))))
+(defun render-sidebar (window)
+ (charms:clear-window window)
+ (border window)
+ (write-string-left window
+ (format nil "You are ~A" (health-description
+ (player/health *player*)))
+ 1 1)
+ (write-string-left window
+ (format nil " ~A" (energy-description
+ (player/energy *player*)))
+ 1 2))
+
(defun world-map-input (window)
(case (charms:get-char window)
@@ -175,13 +187,13 @@
(:down (zapf *view-y* (clamp (1+ %) 0 20000)))))
(defun world-map ()
- (with-dims ((- *screen-width* 2) (- *screen-height* 2))
+ (with-dims ((- *screen-width* 2) (- *screen-height* 1))
(with-panels-and-windows
((map-pan map-win (- *width* *sidebar-width*) *height* 0 0)
(bar-pan bar-win *sidebar-width* *height* (- *width* *sidebar-width*) 0))
(iterate
- (charms:clear-window bar-win)
- (border bar-win)
+ (with-window-dims bar-win
+ (render-sidebar bar-win))
(with-window-dims map-win
(center-view-on-player *width* *height*)
(render-map map-win))