def pressed(self, actor, event): self.changed() x, y = self.getpos(event) self.grid.toggle(x, y) self.boxes[x][y].paint() self.mini.grid = Grid.as_silhouette(self.grid) self.painting = True self.paintWhat = self.grid.get(x, y)
def __init__(self, grid, size): clutter.Group.__init__(self) self.size = size self.boxes = [] self.grid = grid self.mini = MiniSprite(Grid.as_silhouette(grid), size) self.mini.show() self.add(self.mini) self.rect = clutter.Rectangle() self.rect.set_color(clutter.color_from_string("#ffffff")) self.rect.set_opacity(50) self.rect.set_position(0,0) self.rect.set_size(self.grid.get_cols()*size, self.grid.get_rows()*size) self.rect.show() self.add(self.rect) w, h = self.grid.get_size() self.set_reactive(True) self.connect("button-press-event", self.pressed) self.connect("button-release-event", self.released) self.connect("motion-event", self.moved) self.changedHandler = None def makegetter(x, y): def cb(): return self.grid.get(x, y) return cb def maketoggler(x, y): def cb(): return self.grid.toggle(x, y) return cb for x in range(w): self.boxes.append([]) for y in range(h): t = Toggler(size-2, maketoggler(x, y), makegetter(x, y)) t.set_position(x*size+1, y*size+1) t.active = True self.add(t) self.boxes[x].append(t) self.painting = False self.paintWhat = False self.show_all()
def __init__(self, name, imagefile=None, cellsize=2): self.dx = 0 self.dy = 0 self.original = None self.ship = None self.imagefile = None self.speed = 0 # game units per second if imagefile: self.original = clutter.Group() im = clutter.texture_new_from_file(imagefile) im.set_filter_quality(clutter.TEXTURE_QUALITY_LOW) g = Grid.from_file(imagefile, cellsize) g.invert() self.silhouette = Grid.as_silhouette(g) fn = "/tmp/sil%d.png" % time.time() self.silhouette.to_file(fn, cellsize, fg=(255,255,255,255), bg=(0,0,0,0)) re = clutter.texture_new_from_file(fn) re.set_filter_quality(clutter.TEXTURE_QUALITY_LOW) re.show() w = im.get_width() im.set_size(w*4, w*4) #re = clutter.Rectangle(clutter.color_from_string("#ffffff")) re.set_size(im.get_width(), im.get_height()) self.original.add(re) self.original.add(im) self.original.set_opacity(0) self.original.show() self.ship = clutter.Clone(self.original) self.imagefile = imagefile speedfact = self.silhouette.count_pixels()/float(16*16) self.speed = 15 + (1-speedfact) * 10 # max speed = 25 self.invincible = False self.respawnInvincibleTime = 1 self.name = name self.lives = 5 self.isHit = False
def released(self, actor, event): self.changed() self.painting = False self.mini.grid = Grid.as_silhouette(self.grid) self.mini.repaint()