src/caves/entities/aspects/attacker.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.aspects.attacker (:use [caves.entities.aspects.receiver :only [send-message]] [caves.entities.aspects.destructible :only [Destructible take-damage defense-value]] [caves.entities.core :only [defaspect]])) (declare get-damage) (defaspect Attacker (attack [this target world] {:pre [(satisfies? Destructible target)]} (let [damage (get-damage this target world)] (->> world (take-damage target damage) (send-message this "You strike the %s for %d damage!" [(:name target) damage]) (send-message target "The %s strikes you for %d damage!" [(:name this) damage])))) (attack-value [this world] (get this :attack 1))) (defn get-damage [attacker target world] (let [attack (attack-value attacker world) defense (defense-value target world) max-damage (max 0 (- attack defense)) damage (inc (rand-int max-damage))] damage))