Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimon Schampijer <simon@schampijer.de>2007-07-11 16:44:41 (GMT)
committer Simon Schampijer <simon@schampijer.de>2007-07-11 16:44:41 (GMT)
commit89b880031d5d3d086dc737ca3367172443ea5aa5 (patch)
tree2632af408844ca10be2ad5c0e03a4e12b31b9807
parentfdc224fb0597bf34b4e0bf4ec169c0b87b5312cc (diff)
- Some more work on collaboration.
- Added the hole drumgit game
-rw-r--r--activity/activity-memosono.svg (renamed from activity/activity-memorygame.svg)0
-rw-r--r--activity/activity.info4
-rw-r--r--buddiespanel.py2
-rw-r--r--controller.py2
-rw-r--r--csound/csoundserver.py2
-rw-r--r--games/drumgit/drumgit.mson26
-rw-r--r--gridtest_cs.py93
-rw-r--r--gridtest_gst.py105
-rw-r--r--images/black.pngbin276 -> 229 bytes
-rwxr-xr-xmemosonoactivity.py40
-rw-r--r--playtile.py11
-rw-r--r--playview.py20
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
index 987b088..5fdc7f7 100644
--- a/images/black.png
+++ b/images/black.png
Binary files differ
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)