Skip to content

Instantly share code, notes, and snippets.

@tmountain
Created January 27, 2010 14:06
Show Gist options
  • Save tmountain/287847 to your computer and use it in GitHub Desktop.
Save tmountain/287847 to your computer and use it in GitHub Desktop.
(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