src/caves/entities/lichen.clj @ 1a3a4f8d5d85
Refactor the world code into separate files.
This pulls out the world generation code into its own file. It was
getting a bit crowded in there.
author |
Steve Losh <steve@stevelosh.com> |
date |
Wed, 01 Aug 2012 21:13:37 -0400 |
parents |
f57db9d7ccff |
children |
(none) |
(ns caves.entities.lichen
(:use [caves.entities.core :only [Entity get-id add-aspect]]
[caves.entities.aspects.receiver :only [send-message-nearby]]
[caves.entities.aspects.destructible :only [Destructible]]
[caves.world.core :only [find-empty-neighbor]]))
(defrecord Lichen [id glyph color location hp max-hp name])
(defn make-lichen [location]
(map->Lichen {:id (get-id)
:name "lichen"
:glyph "F"
:color :green
:location location
:hp 6
:max-hp 6}))
(defn should-grow []
(< (rand) (/ 1 500)))
(defn grow [{:keys [location]} world]
(if-let [target (find-empty-neighbor world location)]
(let [new-lichen (make-lichen target)
world (assoc-in world [:entities (:id new-lichen)] new-lichen)
world (send-message-nearby location "The lichen grows." world)]
world)
world))
(extend-type Lichen Entity
(tick [this world]
(if (should-grow)
(grow this world)
world)))
(add-aspect Lichen Destructible)