Created
January 27, 2010 14:06
-
-
Save tmountain/287847 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(ns util) | |
(defn pickup | |
"generic helper to pickup an item" | |
[entity item slot] | |
(dosync (alter entity assoc slot item))) | |
(defn take-weapon | |
"set an entity to wield a weapon" | |
[entity weapon] | |
(pickup entity weapon :weapon)) | |
(defn take-armor | |
"set an entity to wear some armor" | |
[entity armor] | |
(pickup entity [armor] :armor)) | |
(defn is-dead? | |
"returns true if dead, false otherwise" | |
[entity] | |
(< (:hp @entity) 1)) | |
(defn accum-exp | |
"adds experience to a player's existing pool" | |
[entity exp] | |
(dosync (alter entity assoc :exp (+ (:exp @entity) exp)))) | |
(defn inc-attr | |
"increases an attribute by the given amount" | |
[entity val attr] | |
(dosync (alter entity assoc attr (+ (attr @entity) val)))) | |
(defn dec-attr | |
"decreases an attribute by the given amount" | |
[entity val attr] | |
(dosync (alter entity assoc attr (- (attr @entity) val)))) | |
(defn inc-speed | |
"increases an entities speed by the given amount" | |
[entity val] | |
(inc-attr entity val :speed)) | |
(defn dec-speed | |
"decreases an entities speed by the given amount" | |
[entity val] | |
(dec-attr entity val :speed)) | |
(defn increase-hp | |
"increases an entities hp by the given amount" | |
[entity val] | |
(let [hp (:hp @entity) | |
hp-max (:hp-max @entity)] | |
(if (> (+ hp val) hp-max) | |
(inc-attr entity (- hp-max hp) :hp) | |
(inc-attr entity val :hp)))) | |
(defn decrease-hp | |
"decreases an entities hp by the given amount" | |
[entity val] | |
(dec-attr entity val :hp)) | |
(defn add-to-room | |
"generic helper to add to a room" | |
[room thing slot] | |
(dosync (alter room assoc slot (conj (slot @room) thing)))) | |
(defn rem-from-room | |
"generic helper to remove from a room" | |
[room thing slot] | |
(dosync (alter room assoc slot (disj (slot @room) thing)))) | |
(defn add-item-to-room | |
"adds an item to a room" | |
[room item] | |
(add-to-room room item :items)) | |
(defn rem-item-from-room | |
"removes an item from a room" | |
[room item] | |
(rem-from-room room item :items)) | |
(defn add-player-to-room | |
"adds a player to a room" | |
[room player] | |
(add-to-room room player :players)) | |
(defn rem-player-from-room | |
"removes a player from a room" | |
[room player] | |
(rem-from-room room player :players)) | |
(defn add-monster-to-room | |
"adds a monster to a room" | |
[room monster] | |
(add-to-room room monster :monsters)) | |
(defn rem-monster-from-room | |
"removes a monster from a room" | |
[room monster] | |
(rem-from-room room monster :monsters)) | |
(defn get-players-in-room | |
"get players in a room" | |
[room] | |
(:players @room)) | |
(defn get-monsters-in-room | |
"get players in a room" | |
[room] | |
(:monsters @room)) | |
(defn get-items-in-room | |
"get items in a room" | |
[room] | |
(:items @room)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment