001  (ns the-great-game.objects.game-object
002    "Anything at all in the game world")
003  
004  (defprotocol ProtoObject
005    "An object in the world"
006    (id [object] "Returns the unique id of this object.")
007    (reify-object
008      [object]
009      "Adds this `object` to the global object list. If the `object` has a
010      non-nil value for its `id` method, keys it to that id - **but** if the
011      id value is already in use, throws a hard exception. Returns the id to
012      which the object is keyed in the global object list."))
013  
014  (defrecord GameObject
015    [id]
016    ;; "An object in the world"
017    ProtoObject
018    (id [_] id)
019    (reify-object [object] "TODO: doesn't work yet"))