Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWalter Bender <walter@sugarlabs.org>2013-10-07 17:47:27 (GMT)
committer Walter Bender <walter@sugarlabs.org>2013-10-07 17:47:27 (GMT)
commit9a72bd2af36099323c245a066d13b6464d795a32 (patch)
treee45606717ed7626fc5b821c7712e9385d4931216
parent74c3f5ddc3ff238aab3728dac4cc65901dbba664 (diff)
add support for querying remote turtle position, heading
-rw-r--r--TurtleArt/taturtle.py22
-rw-r--r--plugins/turtle_blocks_extras/turtle_blocks_extras.py42
2 files changed, 64 insertions, 0 deletions
diff --git a/TurtleArt/taturtle.py b/TurtleArt/taturtle.py
index 5e24ce7..b87d0a6 100644
--- a/TurtleArt/taturtle.py
+++ b/TurtleArt/taturtle.py
@@ -34,6 +34,7 @@ from tacanvas import wrap100, COLOR_TABLE
from sprites import Sprite
from tautils import (debug_output, data_to_string, round_int, get_path,
image_to_base64)
+from TurtleArt.talogo import logoerror
SHAPES = 36
DEGTOR = pi / 180.
@@ -151,6 +152,27 @@ class Turtles:
self._active_turtle.hide()
self.set_turtle(self._default_turtle_name)
+ def get_turtle_x(self, turtle_name):
+ if turtle_name not in self.dict:
+ debug_output('%s not found in turtle dictionary' % (turtle_name),
+ self.turtle_window.running_sugar)
+ raise logoerror("#syntaxerror")
+ return self.dict[turtle_name].get_x()
+
+ def get_turtle_y(self, turtle_name):
+ if turtle_name not in self.dict:
+ debug_output('%s not found in turtle dictionary' % (turtle_name),
+ self.turtle_window.running_sugar)
+ raise logoerror("#syntaxerror")
+ return self.dict[turtle_name].get_y()
+
+ def get_turtle_heading(self, turtle_name):
+ if turtle_name not in self.dict:
+ debug_output('%s not found in turtle dictionary' % (turtle_name),
+ self.turtle_window.running_sugar)
+ raise logoerror("#syntaxerror")
+ return self.dict[turtle_name].get_heading()
+
def set_turtle(self, turtle_name, colors=None):
''' Select the current turtle and associated pen status '''
if turtle_name not in self.dict:
diff --git a/plugins/turtle_blocks_extras/turtle_blocks_extras.py b/plugins/turtle_blocks_extras/turtle_blocks_extras.py
index b1b003f..a0fa6c3 100644
--- a/plugins/turtle_blocks_extras/turtle_blocks_extras.py
+++ b/plugins/turtle_blocks_extras/turtle_blocks_extras.py
@@ -676,6 +676,26 @@ module found in the Journal'))
lambda self, x:
self.tw.turtles.set_turtle(x))
+ primitive_dictionary['turtlex'] = self._prim_turtle_x
+ palette.add_block('turtlex',
+ style='number-style-1arg',
+ label=_('turtle x'),
+ prim_name='turtlex',
+ default=['Yertle'],
+ help_string=_('Returns x coordinate of turtle'))
+ self.tw.lc.def_prim('turtlex', 1,
+ lambda self, t: primitive_dictionary['turtlex'](t))
+
+ primitive_dictionary['turtley'] = self._prim_turtle_y
+ palette.add_block('turtley',
+ style='number-style-1arg',
+ label=_('turtle y'),
+ prim_name='turtley',
+ default=['Yertle'],
+ help_string=_('Returns y coordinate of turtle'))
+ self.tw.lc.def_prim('turtley', 1,
+ lambda self, t: primitive_dictionary['turtley'](t))
+
primitive_dictionary['activeturtle'] = self._prim_active_turtle
palette.add_block('activeturtle',
style='box-style',
@@ -688,6 +708,16 @@ module found in the Journal'))
lambda self:
primitive_dictionary['activeturtle']())
+ primitive_dictionary['turtleh'] = self._prim_turtle_h
+ palette.add_block('turtleh',
+ style='number-style-1arg',
+ label=_('turtle heading'),
+ prim_name='turtleh',
+ default=['Yertle'],
+ help_string=_('Returns heading of turtle'))
+ self.tw.lc.def_prim('turtleh', 1,
+ lambda self, t: primitive_dictionary['turtleh'](t))
+
primitive_dictionary['skin'] = self._prim_reskin
palette.add_block('skin',
hidden=True,
@@ -1454,6 +1484,18 @@ Journal objects'))
self.tw.lc.stop_logo()
raise logoerror("#notanumber")
+ def _prim_turtle_x(self, t):
+ """ Return x coordinate of turtle t """
+ return self.tw.turtles.get_turtle_x(t)
+
+ def _prim_turtle_y(self, t):
+ """ Return y coordinate of turtle t """
+ return self.tw.turtles.get_turtle_y(t)
+
+ def _prim_turtle_h(self, t):
+ """ Return heading of turtle t """
+ return self.tw.turtles.get_turtle_heading(t)
+
def _prim_clamp(self, blklist):
""" Run clamp blklist """
self.tw.lc.icall(self.tw.lc.evline, blklist[:])