docs/source/datastructures.rst @ c6658b4f41a5 default tip

Mention the ML
author Steve Losh <steve@stevelosh.com>
date Thu, 31 May 2012 18:53:16 -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.