diff options
-rw-r--r-- | activity/activity-memosono.svg (renamed from activity/activity-memorygame.svg) | 0 | ||||
-rw-r--r-- | activity/activity.info | 4 | ||||
-rw-r--r-- | buddiespanel.py | 2 | ||||
-rw-r--r-- | controller.py | 2 | ||||
-rw-r--r-- | csound/csoundserver.py | 2 | ||||
-rw-r--r-- | games/drumgit/drumgit.mson | 26 | ||||
-rw-r--r-- | gridtest_cs.py | 93 | ||||
-rw-r--r-- | gridtest_gst.py | 105 | ||||
-rw-r--r-- | images/black.png | bin | 276 -> 229 bytes | |||
-rwxr-xr-x | memosonoactivity.py | 40 | ||||
-rw-r--r-- | playtile.py | 11 | ||||
-rw-r--r-- | playview.py | 20 |
12 files changed, 71 insertions, 234 deletions
diff --git a/activity/activity-memorygame.svg b/activity/activity-memosono.svg index 5a5bf83..5a5bf83 100644 --- a/activity/activity-memorygame.svg +++ b/activity/activity-memosono.svg diff --git a/activity/activity.info b/activity/activity.info index 8b954a8..2949e26 100644 --- a/activity/activity.info +++ b/activity/activity.info @@ -1,6 +1,6 @@ [Activity] name = Memosono -service_name = com.erikos.MemosonoActivity +service_name = org.laptop.Memosono class = memosonoactivity.MemosonoActivity -icon = activity-memorygame +icon = activity-memosono activity_version = 11 diff --git a/buddiespanel.py b/buddiespanel.py index 665c371..e3361ad 100644 --- a/buddiespanel.py +++ b/buddiespanel.py @@ -35,7 +35,7 @@ class BuddyPlayer(hippo.CanvasBox, hippo.CanvasItem): nick = buddy.props.nick if not nick: nick = "" - self.name = hippo.CanvasText(text=nick, color=color.WHITE.get_int()) + self.name = hippo.CanvasText(text=nick, size_mode=hippo.CANVAS_SIZE_WRAP_WORD, color=color.WHITE.get_int()) self.append(self.icon) self.append(self.name) diff --git a/controller.py b/controller.py index 495aeec..4970d87 100644 --- a/controller.py +++ b/controller.py @@ -80,7 +80,7 @@ class Controller(ExportedGObject): for handle in removed: buddy = self._get_buddy(handle) if buddy is not None: - _logger.debug('buddy %r was removed', buddy) + _logger.debug('-----> buddy %r was removed', buddy) self.buddies_panel.remove_player(buddy) self.numplayers-=1 if self.is_initiator: diff --git a/csound/csoundserver.py b/csound/csoundserver.py index 45eca28..6e7c815 100644 --- a/csound/csoundserver.py +++ b/csound/csoundserver.py @@ -31,7 +31,7 @@ class CsoundServer(Thread): def perform(self, msg): _logger.debug(' [perform_cb] %s'%str(msg)) - self.perf.InputMessage(msg) + self.perf.InputMessage(str(msg)) def quit(self): _logger.info('quit') diff --git a/games/drumgit/drumgit.mson b/games/drumgit/drumgit.mson index 0c3aaae..4498ae5 100644 --- a/games/drumgit/drumgit.mson +++ b/games/drumgit/drumgit.mson @@ -1,17 +1,29 @@ <?xml version="1.0"?> <memosono name="drumgit"> - <pair aimg="guitar10_2.jpg" asnd="guitcello.aiff" bimg="guitar10_2.jpg" bsnd="guitcello.aiff" color="100" /> - <pair aimg="guitar8_2.jpg" asnd="git_hit1.aiff" bimg="guitar8_2.jpg" bsnd="git_hit1.aiff" color="100" /> + <pair aimg="drumkit1_b.jpg" asnd="beat1_a.aiff" bimg="drumkit1_b.jpg" bsnd="beat1_a.aiff" color="100" /> <pair aimg="drumkit2_b.jpg" asnd="beat1_b.aiff" bimg="drumkit2_b.jpg" bsnd="beat1_b.aiff" color="100" /> + <pair aimg="drumkit3_b.jpg" asnd="beat1_c.aiff" bimg="drumkit3_b.jpg" bsnd="beat1_c.aiff" color="100" /> + <pair aimg="drumkit4_b.jpg" asnd="beat8.aiff" bimg="drumkit4_b.jpg" bsnd="beat8.aiff" color="100" /> -</memosono> + <pair aimg="drumkit6_b.jpg" asnd="beat3.aiff" bimg="drumkit6_b.jpg" bsnd="beat3.aiff" color="100" /> + <pair aimg="drumkit7_b.jpg" asnd="beat4.aiff" bimg="drumkit7_b.jpg" bsnd="beat4.aiff" color="100" /> + <pair aimg="drumkit8_b.jpg" asnd="beat14.aiff" bimg="drumkit8_b.jpg" bsnd="beat14.aiff" color="100" /> + <pair aimg="drumkit9_b.jpg" asnd="beat6_2.aiff" bimg="drumkit9_b.jpg" bsnd="beat6_2.aiff" color="100" /> + <pair aimg="guitar1_2.jpg" asnd="bending_a.aiff" bimg="guitar1_2.jpg" bsnd="bending_a.aiff" color="100" /> + <pair aimg="guitar2_2.jpg" asnd="bending_b.aiff" bimg="guitar2_2.jpg" bsnd="bending_b.aiff" color="100" /> + <pair aimg="guitar3_2.jpg" asnd="flashcomp2a.aiff" bimg="guitar3_2.jpg" bsnd="flashcomp2a.aiff" color="100" /> + <pair aimg="guitar4_2.jpg" asnd="flashcomp2b.aiff" bimg="guitar4_2.jpg" bsnd="flashcomp2b.aiff" color="100" /> -<!-- - <pair aimg="guitar12_2.jpg" bimg="guitar12_2.jpg" color="100" /> - <pair aimg="guitar8_2.jpg" bimg="guitar8_2.jpg" color="100" /> - <pair aimg="drumkit2_b.jpg" bimg="drumkit2_b.jpg" color="100" /> + <pair aimg="guitar5_2.jpg" asnd="gedaempft.aiff" bimg="guitar5_2.jpg" bsnd="gedaempft.aiff" color="100" /> + <pair aimg="guitar6_2.jpg" asnd="gedaempft.aiff" bimg="guitar6_2.jpg" bsnd="gedaempft.aiff" color="100" /> + <pair aimg="guitar7_2.jpg" asnd="ungedaempft.aiff" bimg="guitar7_2.jpg" bsnd="ungedaempft.aiff" color="100" /> + <pair aimg="guitar8_2.jpg" asnd="jimi4.aiff" bimg="guitar8_2.jpg" bsnd="jimi4.aiff" color="100" /> +</memosono> + +<!-- + <pair aimg="" asnd="" bimg="" bsnd="" color="100" /> drumkit1_b.jpg beat1_a.aiff drumkit2_b.jpg beat1_b.aiff drumkit3_b.jpg beat1_c.aiff diff --git a/gridtest_cs.py b/gridtest_cs.py deleted file mode 100644 index 6bcc89b..0000000 --- a/gridtest_cs.py +++ /dev/null @@ -1,93 +0,0 @@ -import gtk -import os -import random -import hippo -import gobject - -from playview import PlayView -from gmodel import Model - -from csound.csoundserver import CsoundServer - - -GAME_PATH = os.path.join(os.path.dirname(__file__),'games/drumgit') -IMAGES_PATH = os.path.join(os.path.dirname(__file__),'games/drumgit/images') -SOUNDS_PATH = os.path.join(os.path.dirname(__file__),'games/drumgit/sounds') - -class Test(object): - def __init__(self): - - self.cs = CsoundServer() - self.cs.start() - gtk.gdk.threads_init() - - self.model = Model(GAME_PATH, os.path.dirname(__file__)) - self.model.read('drumgit.mson') - self.model.def_grid() - print '%s' %self.model.pairs[0]._properties - print '%s' %self.model.pairs[1]._properties - print '%s' %self.model.pairs[2]._properties - print 'self.grid: %s'%self.model.grid - - self.pv = PlayView( len(self.model.grid) ) - for tile in self.pv.tiles: - tile.connect('button-press-event', self._button_press_cb, self.pv.tiles.index(tile)) - - hbox = hippo.CanvasBox(spacing=4, - orientation=hippo.ORIENTATION_HORIZONTAL) - hbox.append(self.pv, hippo.PACK_EXPAND) - - canvas = hippo.Canvas() - canvas.set_root(hbox) - - window = gtk.Window() - window.connect('destroy', gtk.main_quit) - window.connect('key-press-event', self.key_press_cb) - window.add(canvas) - window.show_all() - try: - gtk.main() - except KeyboardInterupt: - pass - - def _handle_query(self, source, condition): - data, self.replyaddr = source.recvfrom(1024) - self.oscapi.handlemsg(data, self.replyaddr) - return True - - def _ping(self, *msg): - self.oscapi.send(msg[1], '/CSOUND/pong', []) - - def key_press_cb(self, window, event): - if gtk.gdk.keyval_name(event.keyval) in ('Escape', 'q'): - gtk.main_quit() - self.cs.quit() - - def _button_press_cb(self, tile, event, tilenum=None): - print 'selected tile=%s'%str(tilenum) - pairkey, moch, state = self.model.grid[tilenum] - color = self.model.pairs[pairkey].props.color - if moch == 0: - if self.model.pairs[pairkey].props.aimg != None: - img = os.path.join(IMAGES_PATH, self.model.pairs[pairkey].props.aimg) - self.pv.flip(tilenum, img, color) - gobject.timeout_add(2000, self._turn_back, tilenum) - if self.model.pairs[pairkey].props.asnd != None: - snd = os.path.join(SOUNDS_PATH, self.model.pairs[pairkey].props.asnd) - self.cs.perform('i 108 0.0 3.0 "%s" 1 0.7 0.5 0'%snd) - elif moch == 1: - if self.model.pairs[pairkey].props.bimg != None: - img = os.path.join(IMAGES_PATH, self.model.pairs[pairkey].props.bimg) - self.pv.flip(tilenum, img, color) - gobject.timeout_add(2000, self._turn_back, tilenum) - if self.model.pairs[pairkey].props.bsnd != None: - snd = os.path.join(SOUNDS_PATH, self.model.pairs[pairkey].props.bsnd) - self.cs.perform('i 108 0.0 3.0 "%s" 1 0.7 0.5 0'%snd) - - def _turn_back(self, tilenum): - self.pv.flip(tilenum, os.path.join(os.path.dirname(__file__), 'images/black.png'), 100) - return False - -if __name__ == '__main__': - Test() - diff --git a/gridtest_gst.py b/gridtest_gst.py deleted file mode 100644 index 034dc84..0000000 --- a/gridtest_gst.py +++ /dev/null @@ -1,105 +0,0 @@ -import gtk -import os -import random -import hippo -import gobject - -import pygst -pygst.require("0.10") -import gst - -from playview import PlayView -from gmodel import Model - - -GAME_PATH = os.path.join(os.path.dirname(__file__),'games/drumgit') -IMAGES_PATH = os.path.join(os.path.dirname(__file__),'games/drumgit/images') -SOUNDS_PATH = os.path.join(os.path.dirname(__file__),'games/drumgit/sounds') - -class Test(object): - def __init__(self): - - self.model = Model(GAME_PATH, os.path.dirname(__file__)) - self.model.read('drumgit.mson') - self.model.def_grid() - print '%s' %self.model.pairs[0]._properties - print '%s' %self.model.pairs[1]._properties - print '%s' %self.model.pairs[2]._properties - print 'self.grid: %s'%self.model.grid - - self.pv = PlayView( len(self.model.grid) ) - for tile in self.pv.tiles: - tile.connect('button-press-event', self._button_press_cb, self.pv.tiles.index(tile)) - - hbox = hippo.CanvasBox(spacing=4, - orientation=hippo.ORIENTATION_HORIZONTAL) - hbox.append(self.pv, hippo.PACK_EXPAND) - - canvas = hippo.Canvas() - canvas.set_root(hbox) - - window = gtk.Window() - window.connect('destroy', gtk.main_quit) - window.connect('key-press-event', self.key_press_cb) - window.add(canvas) - window.show_all() - - - self.player = gst.element_factory_make("playbin", "player") - fakesink = gst.element_factory_make('fakesink', "my-fakesink") - self.player.set_property("video-sink", fakesink) - bus = self.player.get_bus() - bus.add_signal_watch() - bus.connect('message', self.on_message) - - try: - gtk.main() - except KeyboardInterupt: - pass - - def key_press_cb(self, window, event): - if gtk.gdk.keyval_name(event.keyval) in ('Escape', 'q'): - gtk.main_quit() - - def _button_press_cb(self, tile, event, tilenum=None): - print 'selected tile=%s'%str(tilenum) - pairkey, moch, state = self.model.grid[tilenum] - color = self.model.pairs[pairkey].props.color - if moch == 0: - if self.model.pairs[pairkey].props.aimg != None: - img = os.path.join(IMAGES_PATH, self.model.pairs[pairkey].props.aimg) - self.pv.flip(tilenum, img, color) - gobject.timeout_add(2000, self._turn_back, tilenum) - if self.model.pairs[pairkey].props.asnd != None: - snd = os.path.join(SOUNDS_PATH, self.model.pairs[pairkey].props.asnd) - ssnd = os.path.join('/home/erikos/sugar-jhbuild/source/memosono', snd) - print ssnd - self.player.set_property('uri', "file://" + ssnd) - self.player.set_state(gst.STATE_PLAYING) - elif moch == 1: - if self.model.pairs[pairkey].props.bimg != None: - img = os.path.join(IMAGES_PATH, self.model.pairs[pairkey].props.bimg) - self.pv.flip(tilenum, img, color) - gobject.timeout_add(2000, self._turn_back, tilenum) - if self.model.pairs[pairkey].props.bsnd != None: - snd = os.path.join(SOUNDS_PATH, self.model.pairs[pairkey].props.bsnd) - ssnd = os.path.join('/home/erikos/sugar-jhbuild/source/memosono', snd) - print ssnd - self.player.set_property('uri', "file://" + ssnd) - self.player.set_state(gst.STATE_PLAYING) - - def _turn_back(self, tilenum): - self.pv.flip(tilenum, os.path.join(os.path.dirname(__file__), 'images/black.png'), 100) - return False - - def on_message(self, bus, message): - t = message.type - print t - if t == gst.MESSAGE_EOS: - self.player.set_state(gst.STATE_NULL) - elif t == gst.MESSAGE_ERROR: - self.player.set_state(gst.STATE_NULL) - -if __name__ == '__main__': - Test() - gtk.gdk.threads_init() diff --git a/images/black.png b/images/black.png Binary files differindex 987b088..5fdc7f7 100644 --- a/images/black.png +++ b/images/black.png diff --git a/memosonoactivity.py b/memosonoactivity.py index e375669..48783c9 100755 --- a/memosonoactivity.py +++ b/memosonoactivity.py @@ -1,6 +1,6 @@ #! /usr/bin/env python # -# Copyright (C) 2006 Simon Schampijer +# Copyright (C) 2006, 2007 Simon Schampijer # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -23,7 +23,6 @@ import gobject import gtk import os import logging -import dbus import telepathy import telepathy.client import hippo @@ -48,8 +47,14 @@ class MemosonoActivity(Activity): _logger.debug('Starting Memosono activity...') self.set_title(_('Memsosono Activity')) - - self.pv = PlayView( 6 ) + + w = self.get_screen().get_width() + h = self.get_screen().get_height() + ### FIXME: do better grid calculation + if w <= 1024: + self.pv = PlayView(600, 600, 32) + else: + self.pv = PlayView(800, 800, 32) self.buddies_panel = BuddiesPanel() @@ -78,7 +83,6 @@ class MemosonoActivity(Activity): self.pservice = presenceservice.get_instance() - bus = dbus.Bus() name, path = self.pservice.get_preferred_connection() self.tp_conn_name = name self.tp_conn_path = path @@ -255,12 +259,20 @@ class MemosonoActivity(Activity): def _buddy_left_cb(self, activity, buddy): _logger.debug('buddy left') self.buddies_panel.remove_watcher(buddy) - - def _cleanup_cb(self, data=None): - if self.ctrl != None: - self.ctrl.cs.quit() - _logger.debug(" Memosono closes: close csound server. ") - + + def write_file(self, file_path): + """Store game state in Journal. + + Handling the Journal is provided by Activity - we only need + to define this method. + """ + _logger.debug(" Write game state. ") + f = open(file_path, 'w') + try: + f.write('erikos won the game') + finally: + f.close() + def _focus_in(self, event, data=None): if self.ctrl != None: self.ctrl.cs.start() @@ -271,4 +283,8 @@ class MemosonoActivity(Activity): self.ctrl.cs.start() _logger.debug(" Memosono is invisible: pause csound server. ") - + def _cleanup_cb(self, data=None): + if self.ctrl != None: + self.ctrl.cs.quit() + _logger.debug(" Memosono closes: close csound server. ") + diff --git a/playtile.py b/playtile.py index a720174..e3c2494 100644 --- a/playtile.py +++ b/playtile.py @@ -9,11 +9,13 @@ class PlayTile(hippo.CanvasBox, hippo.CanvasItem): __gtype_name__ = 'PlayTile' _BORDER_DEFAULT = units.points_to_pixels(1.0) - def __init__(self, num, **kargs): + def __init__(self, num, x, y, **kargs): hippo.CanvasBox.__init__(self, **kargs) self.num = num self.image = os.path.join(os.path.dirname(__file__), 'images/black.png') + self.scale_x = x + self.scale_y = y self._radius = units.points_to_pixels(5) self.props.border_color = 100 @@ -52,10 +54,11 @@ class PlayTile(hippo.CanvasBox, hippo.CanvasItem): hbox.props.spacing = units.points_to_pixels(5) hbox.props.padding_top = units.points_to_pixels(5) hbox.props.padding_bottom = units.points_to_pixels(5) - + self.img_widget = gtk.Image() - self.img_pixbuf = gtk.gdk.pixbuf_new_from_file(self.image) - self.img_widget.set_from_pixbuf(self.img_pixbuf) + pixbuf_i = gtk.gdk.pixbuf_new_from_file(self.image) + self.scaledbuf_i = pixbuf_i.scale_simple(self.scale_x, self.scale_y, gtk.gdk.INTERP_BILINEAR) + self.img_widget.set_from_pixbuf(self.scaledbuf_i) canvas_widget = hippo.CanvasWidget() canvas_widget.props.widget = self.img_widget diff --git a/playview.py b/playview.py index df0b983..1a9a15d 100644 --- a/playview.py +++ b/playview.py @@ -2,28 +2,32 @@ import hippo import os import cairo import gtk +import math from sugar.graphics import color from playtile import PlayTile class PlayView(hippo.CanvasBox, hippo.CanvasItem): - def __init__(self, numtiles, **kargs): + def __init__(self, wx, wy, numtiles, **kargs): hippo.CanvasBox.__init__(self, **kargs) - self.props.orientation = hippo.ORIENTATION_VERTICAL - - self.tiles = [] - + self.props.orientation = hippo.ORIENTATION_VERTICAL + self.tiles = [] tile_num = 0 + numx = math.pow(float(numtiles), 0.5) + if numx%1 != 0: + numx = int(numx)+1 + self.y = self.x = (int(wx/numx)-10) + while tile_num < numtiles: - if tile_num == 0 or ((tile_num)%4) == 0: + if tile_num == 0 or ((tile_num)%numx) == 0: box = hippo.CanvasBox() box.props.orientation = hippo.ORIENTATION_HORIZONTAL self.append(box) - tile = PlayTile(tile_num) + tile = PlayTile(tile_num, self.x, self.y) self.tiles.append(tile) box.append(tile) @@ -32,7 +36,7 @@ class PlayView(hippo.CanvasBox, hippo.CanvasItem): def flip(self, tile_num, obj, color): tile = self.tiles[tile_num] tile.img_pixbuf = gtk.gdk.pixbuf_new_from_file(obj) - tile.img_widget.set_from_pixbuf(tile.img_pixbuf) + tile.img_widget.set_from_pixbuf(tile.img_pixbuf.scale_simple(self.x, self.y, gtk.gdk.INTERP_BILINEAR)) tile.props.background_color = color tile.emit_paint_needed(0, 0, -1, -1) |