docs/source/datastructures.rst @ 7942222da830
Followbox and associated improvements.
It's still a bit buggy, but I'm done for the night.
author |
Steve Losh <steve@stevelosh.com> |
date |
Fri, 02 Sep 2011 20:10:35 -0400 |
parents |
99b79096ff32 |
children |
(none) |
Data Structures
===============
World data is shared between all the bots you create in a single process. This helps
keep memory usage down by not storing duplicate copies of chunk and entity
information for each bot in the same world.
Worlds
------
``World`` objects have several pieces of data. Please read the Transactions section
to learn why the data is structured the way it is.
``(:time world)`` is a ref containing the current world time.
``(:entities world)`` is a ref containing a map of entity IDs to ``Entity`` refs.
``(:chunks world)`` is a ref containing a map of chunk coordinates ([x y z] vectors)
to ``Chunk`` refs.
Locations
---------
``Location`` objects represent the locations of entities in the world. They have the
following pieces of data:
* ``(:x location)``
* ``(:y location)``
* ``(:z location)``
* ``(:yaw location)``
* ``(:pitch location)``
* ``(:stance location)``
* ``(:onground location)``
Entities
--------
``Entity`` objects represent a single entity in the world. One of these is your
bot's player.
``(:eid entity)`` is the ID of the entity.
``(:loc entity)`` is a ``Location`` object representing the location of the entity in
the world.
``(:despawned entity)`` is a boolean that indicates whether the entity has despawned.
You should never need to read this, but please read the Transactions section for the
reason why it's included.
``(:velocity entity)`` is the y velocity of the entity. Only exists for bots, and
you should never need to touch it.
Chunks
------
A chunk has four arrays representing the data for blocks in the chunk. You shouldn't
need to access chunk data directly -- there are helper functions in
``clojurecraft.chunks`` that will look up block objects for you.
Blocks
------
Bots
----
``Bot`` objects are your gateway to observing and interacting with the world.
``(:world bot)`` is a ``World`` object representing the bot's world.
``(:player bot)`` is a ref containing the ``Entity`` representing the bot. This is
just a shortcut so you don't have to pull it out of the ``:entities`` map in the
bot's world all the time.