# HG changeset patch # User Steve Losh # Date 1313349531 14400 # Node ID 1d52b74b6239cab5096bf843e510a6fc9a1dbbde # Parent 82b346fcfbf2e392aac986dd4f844debafca796f Add look and turn actions. diff -r 82b346fcfbf2 -r 1d52b74b6239 docs/source/actions.rst --- a/docs/source/actions.rst Fri Aug 12 21:38:25 2011 -0400 +++ b/docs/source/actions.rst Sun Aug 14 15:18:51 2011 -0400 @@ -42,6 +42,104 @@ Tells the bot to jump, if possible. +look-to +------- + +``(clojurecraft.actions/look-to bot pitch)`` + +Changes the position of the bot's head. ``pitch`` can be anywhere from ``-90`` to +``90``. + +* ``-90``: looking straight up. +* ``0``: looking straight ahead. +* ``90``: looking straight down. + +look-up +------- + +``(clojurecraft.actions/look-up bot)`` + +Changes the position of the bot's head to look straight up. + +Exactly equivalent to ``(clojurecraft.actions/look-to bot -90.0)``. + +look-down +--------- + +``(clojurecraft.actions/look-down bot)`` + +Changes the position of the bot's head to look straight down. + +Exactly equivalent to ``(clojurecraft.actions/look-to bot 90.0)``. + +look-straight +------------- + +``(clojurecraft.actions/look-straight bot)`` + +Changes the position of the bot's head to look straight ahead. + +Exactly equivalent to ``(clojurecraft.actions/look-to bot 0.0)``. + +turn-to +------- + +``(clojurecraft.actions/turn-to bot yaw)`` + +Changes the direction the bot is looking. ``yaw`` can be anywhere from ``0`` to +``359``. + +* ``0``: looking in the -z direction. +* ``90``: looking in the -x direction. +* ``180``: looking in the +z direction. +* ``270``: looking in the +x direction. + +A few notes: + +* Changing your bot's yaw by too large an increment at once seems to be handled + weirdly by the vanilla client. It will turn partway toward the destination yaw, + pause, and then turn the rest of the way. +* Changing the direction the bot is looking affects the *head* of your bot, not + necessarily the *body*. The body will rotate as much as is necessary to prevent + an Exorcist-style head-spin. I don't know of a way to force the body to face + a certain direction at the moment, but I'll keep looking. + +turn-north +---------- + +``(clojurecraft.actions/turn-north bot)`` + +Changes the direction the bot is looking to north. + +Exactly equivalent to ``(clojurecraft.actions/turn-to bot 90.0)``. + +turn-south +---------- + +``(clojurecraft.actions/turn-south bot)`` + +Changes the direction the bot is looking to south. + +Exactly equivalent to ``(clojurecraft.actions/turn-to bot 270.0)``. + +turn-east +--------- + +``(clojurecraft.actions/turn-east bot)`` + +Changes the direction the bot is looking to east. + +Exactly equivalent to ``(clojurecraft.actions/turn-to bot 180.0)``. + +turn-west +--------- + +``(clojurecraft.actions/turn-west bot)`` + +Changes the direction the bot is looking to west. + +Exactly equivalent to ``(clojurecraft.actions/turn-to bot 0.0)``. + move ---- diff -r 82b346fcfbf2 -r 1d52b74b6239 src/clojurecraft/actions.clj --- a/src/clojurecraft/actions.clj Fri Aug 12 21:38:25 2011 -0400 +++ b/src/clojurecraft/actions.clj Sun Aug 14 15:18:51 2011 -0400 @@ -27,6 +27,46 @@ (delay (write-packet bot :chat {:message message}))) + +(defn turn-to [bot yaw] + (delay + (let [player (:player bot)] + (dosync + (let [location (:loc @player) + new-location (assoc location :yaw yaw)] + (alter player assoc :loc new-location)))))) + +(defn turn-north [bot] + (turn-to bot 90.0)) + +(defn turn-south [bot] + (turn-to bot 270.0)) + +(defn turn-east [bot] + (turn-to bot 180.0)) + +(defn turn-west [bot] + (turn-to bot 0.0)) + + +(defn look-to [bot pitch] + (delay + (let [player (:player bot)] + (dosync + (let [location (:loc @player) + new-location (assoc location :pitch pitch)] + (alter player assoc :loc new-location)))))) + +(defn look-up [bot] + (look-to bot -90.0)) + +(defn look-down[bot] + (look-to bot 90.0)) + +(defn look-straight [bot] + (look-to bot 0.0)) + + (defn respawn [bot] (delay (write-packet bot :respawn {:world 0}))) ; Always respawn in the normal (non-Nether) world for now. diff -r 82b346fcfbf2 -r 1d52b74b6239 src/clojurecraft/in.clj --- a/src/clojurecraft/in.clj Fri Aug 12 21:38:25 2011 -0400 +++ b/src/clojurecraft/in.clj Sun Aug 14 15:18:51 2011 -0400 @@ -132,10 +132,11 @@ :z (-read-int conn))) (defn- read-packet-useentity [bot conn] - (assoc {} - :user (-read-int conn) - :target (-read-int conn) - :leftclick (-read-bool conn))) + (let [payload (assoc {} + :user (-read-int conn) + :target (-read-int conn) + :leftclick (-read-bool conn))] + payload)) (defn- read-packet-updatehealth [bot conn] (let [payload (assoc {}