From 86e2111461fab98d8c188d50ec8bd0c72c527f73 Mon Sep 17 00:00:00 2001 From: Pootle daemon Date: Mon, 13 Jun 2011 14:23:40 +0000 Subject: Merge branch 'master' of git.sugarlabs.org:turtleart/mainline --- (limited to 'TurtleArt/taturtle.py') diff --git a/TurtleArt/taturtle.py b/TurtleArt/taturtle.py index a7a3205..0ca72e4 100644 --- a/TurtleArt/taturtle.py +++ b/TurtleArt/taturtle.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -#Copyright (c) 2010 Walter Bender +#Copyright (c) 2010,11 Walter Bender #Permission is hereby granted, free of charge, to any person obtaining a copy #of this software and associated documentation files (the "Software"), to deal @@ -19,14 +19,15 @@ #OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN #THE SOFTWARE. -from taconstants import TURTLE_LAYER +from random import uniform +from math import sin, cos, pi +from gettext import gettext as _ + +from taconstants import TURTLE_LAYER, DEFAULT_TURTLE_COLORS from tasprite_factory import SVG, svg_str_to_pixbuf from tacanvas import wrap100, color_table from sprites import Sprite - -import logging -_logger = logging.getLogger('turtleart-activity') - +from tautils import debug_output SHAPES = 36 @@ -59,6 +60,8 @@ class Turtles: else: if colors == None: Turtle(self, k) + elif type(colors) in [list, tuple]: + Turtle(self, k, colors) else: Turtle(self, k, colors.split(',')) return self.dict[k] @@ -120,11 +123,25 @@ class Turtle: self.pen_gray = 100 self.pen_size = 5 self.pen_state = True + self.label_block = None self._prep_shapes(key, turtles, turtle_colors) + # Choose a random angle from which to attach the turtle label if turtles.sprite_list is not None: self.spr = Sprite(turtles.sprite_list, 0, 0, self.shapes[0]) + angle = uniform(0, pi * 4 / 3.0) # 240 degrees + w = self.shapes[0].get_width() + r = w * 0.67 + # Restrict angle the the sides 30-150; 210-330 + if angle > pi * 2 / 3.0: + angle += pi / 2.0 # + 90 + self.label_xy = [int(r * sin(angle)), + int(r * cos(angle) + w / 2.0)] + else: + angle += pi / 6.0 # + 30 + self.label_xy = [int(r * sin(angle) + w / 2.0), + int(r * cos(angle) + w / 2.0)] else: self.spr = None turtles.add_to_dict(key, self) @@ -149,9 +166,16 @@ class Turtle: self.shapes = generate_turtle_pixbufs(self.colors) else: if turtles is not None: - self.colors = ['#008000', '#00A000'] + self.colors = DEFAULT_TURTLE_COLORS self.shapes = turtles.get_pixbufs() + def set_turtle_colors(self, turtle_colors): + ''' reset the colors of a preloaded turtle ''' + if turtle_colors is not None: + self.colors = turtle_colors[:] + self.shapes = generate_turtle_pixbufs(self.colors) + self.set_heading(self.heading) + def set_shapes(self, shapes): """ Reskin the turtle """ n = len(shapes) @@ -159,7 +183,8 @@ class Turtle: self.shapes = shapes[:] else: if n != 1: - _logger.debug("%d images passed to set_shapes: ignoring" % (n)) + debug_output("%d images passed to set_shapes: ignoring" % (n), + self.tw.running_sugar) images = [shapes[0]] if self.heading == 0: for i in range(3): @@ -213,6 +238,8 @@ class Turtle: """ Hide the turtle. """ if self.spr is not None: self.spr.hide() + if self.label_block is not None: + self.label_block.spr.hide() self.hidden = True def show(self): @@ -222,14 +249,25 @@ class Turtle: self.hidden = False self.move((self.x, self.y)) self.set_heading(self.heading) + if self.label_block is not None: + self.label_block.spr.move((self.x + self.label_xy[0], + self.y + self.label_xy[1])) + self.label_block.spr.set_layer(TURTLE_LAYER + 1) def move(self, pos): """ Move the turtle. """ self.x, self.y = int(pos[0]), int(pos[1]) if not self.hidden and self.spr is not None: self.spr.move(pos) + if self.label_block is not None: + self.label_block.spr.move((pos[0] + self.label_xy[0], + pos[1] + self.label_xy[1])) return(self.x, self.y) + def get_name(self): + ''' return turtle name (key) ''' + return self.name + def get_xy(self): """ Return the turtle's x, y coordinates. """ return(self.x, self.y) -- cgit v0.9.1