[game-baker commit] r296 - in trunk/trunk: . GUI demos/catch_the_puppy runtime

0 views
Skip to first unread message

codesite...@google.com

unread,
Feb 17, 2009, 9:46:00 AM2/17/09
to game-ba...@googlegroups.com
Author: timwintle
Date: Tue Feb 17 06:37:55 2009
New Revision: 296

Added:
trunk/trunk/grgr.gb
- copied unchanged from r295, /branches/kreezii-branch/grgr.gb
trunk/trunk/hcr.ogg
- copied unchanged from r295, /branches/kreezii-branch/hcr.ogg
trunk/trunk/runtime/gbplayer.py
- copied unchanged from r295,
/branches/kreezii-branch/runtime/gbplayer.py
Modified:
trunk/trunk/ (props changed)
trunk/trunk/CHANGELOG
trunk/trunk/GUI/constants.py
trunk/trunk/GUI/main_window_events.py
trunk/trunk/GUI/treeview.py
trunk/trunk/demos/catch_the_puppy/catch_the_puppy.gb
trunk/trunk/game.py
trunk/trunk/gamebaker.py
trunk/trunk/runtime/__init__.py
trunk/trunk/runtime/script_objects.py

Log:

Merge from branches/kreezii-branch into trunk -
Doesn't include merged changes to the glade xml file.

branch was cut at r292, merged at r295 inclusive


Modified: trunk/trunk/CHANGELOG
==============================================================================
--- trunk/trunk/CHANGELOG (original)
+++ trunk/trunk/CHANGELOG Tue Feb 17 06:37:55 2009
@@ -1,3 +1,4 @@
+Feb 17 Merge from branches/kreezii-branch into trunk - branched
at r292, merged at r295 inclusive (TimWintle)
Feb 17 Fixed reference to image for sprites in visual GameScreen
layout (TimWintle)
Feb 16 Issue 54 - Visual GameScreen layout. Very buggy, but
functional. (johngunderman)


Modified: trunk/trunk/GUI/constants.py
==============================================================================
--- trunk/trunk/GUI/constants.py (original)
+++ trunk/trunk/GUI/constants.py Tue Feb 17 06:37:55 2009
@@ -6,6 +6,10 @@
7:"EVENT_RMOUSEUP",
9:"EVENT_OFFSCREEN",
11: "EVENT_TIMER",
+ 64:"EVENT_DOWN_KEY_SPACE",
+ -64:"EVENT_UP_KEY_SPACE",
+ 54:"EVENT_DOWN_KEY_ESCAPE",
+ -54:"EVENT_UP_KEY_ESCAPE",
-546:"EVENT_UP_KEY_UP",
-548:"EVENT_DOWN_KEY_UP",
546:"EVENT_UP_KEY_DOWN",

Modified: trunk/trunk/GUI/main_window_events.py
==============================================================================
--- trunk/trunk/GUI/main_window_events.py (original)
+++ trunk/trunk/GUI/main_window_events.py Tue Feb 17 06:37:55 2009
@@ -84,6 +84,7 @@
"on_btn_gamescreen_ok_clicked":self.gamescreen_ok,
"on_btn_obj_ok_clicked":self.object_ok,
"on_btn_sprite_ok_clicked":self.sprite_ok,
+ "on_btn_sound_ok_clicked":self.sound_ok,
"on_gameproperties1_activate":self.show_game_properties,
"on_mnu_import_sprite_activate":self.import_sprite,
"on_mnu_import_workstate_activate":self.import_workstate,
@@ -101,7 +102,11 @@
"new_keydown_right_event":(lambda
x:self.add_new_event(runtime.EVENT_KEYDOWN * K_RIGHT)),
"new_keydown_up_event":(lambda
x:self.add_new_event(runtime.EVENT_KEYDOWN * K_UP)),
"new_keydown_down_event":(lambda
x:self.add_new_event(runtime.EVENT_KEYDOWN * K_DOWN)),
+ "new_keydown_space_event":(lambda
x:self.add_new_event(runtime.EVENT_KEYDOWN * K_SPACE)),
+ "new_keydown_escape_event":(lambda
x:self.add_new_event(runtime.EVENT_KEYDOWN * K_ESCAPE)),

+ "new_keyup_escape_event":(lambda
x:self.add_new_event(runtime.EVENT_KEYUP * K_ESCAPE)),
+ "new_keyup_space_event":(lambda
x:self.add_new_event(runtime.EVENT_KEYUP * K_SPACE)),
"new_keyup_left_event":(lambda
x:self.add_new_event(runtime.EVENT_KEYUP * K_LEFT)),
"new_keyup_right_event":(lambda
x:self.add_new_event(runtime.EVENT_KEYUP * K_RIGHT)),
"new_keyup_up_event":(lambda
x:self.add_new_event(runtime.EVENT_KEYUP * K_UP)),
@@ -109,6 +114,13 @@
"new_l_mouse_up_event":(lambda
x:self.add_new_event(runtime.EVENT_LMOUSEUP )),
"new_r_mouse_up_event":(lambda
x:self.add_new_event(runtime.EVENT_RMOUSEUP )),
"new_timer_event":(lambda
x:self.add_new_event(runtime.EVENT_TIMER )),
+ "remove_active_event":self.remove_active_event,
+ "show_active_frame":self.show_active_frame,
+ "save_active_frame":self.save_active_frame,
+ "add_active_frame":self.add_active_frame,
+ "on_add_new_sprite":self.on_add_new_sprite,
+ "on_add_new_sound":self.on_add_new_sound,
+ "remove_active_frame":self.remove_active_frame,
"on_delete1_activate":self.delete_item,
"on_popup_new_activate":self.new_item_from_treeview,
"gamescreen_delete_initial_object":self.gamescreen_delete_initial_object,
@@ -128,7 +140,7 @@

def show_about(self,widget=None):
self.wTree.get_widget("aboutdialog1").show()
-
+
def treeview_click(self,widget=None,event=None):
if event.button == 3:
self.show_popup("popup_edit",event)
@@ -143,8 +155,9 @@
if obj.objtype == "Gameobject":
self.new_game_object()
elif obj.objtype == "Sprite":
- # TODO
- pass
+ self.on_add_new_sprite()
+ elif obj.objtype == "Sound":
+ self.on_add_new_sound()
elif obj.objtype == "Gamescreen":
self.new_game_screen()
elif obj.objtype == "Workstate":
@@ -159,8 +172,26 @@
self.new_workstate()
elif objtype == "gameobjects":
self.new_game_object()
+ elif objtype == "sprites":
+ self.on_add_new_sprite()
+ elif objtype == "sounds":
+ self.on_add_new_sound()
pass
-
+
+ def remove_active_event(self,widget=None):
+ cb = self.get_widget("cbxworkstateevents")
+ model = cb.get_model()
+ active = cb.get_active()
+ activeact = int(model[active][1])
+ #We can't delete the INIT event
+ if activeact != 1:
+ iter = cb.get_active_iter()
+ model.remove(iter)
+ cb.set_model(model)
+ #We set INIT event
+ cb.set_active(0)
+ del self.selectedworkstate.actions[activeact]
+
def add_new_event(self,event):

if not self.selectedworkstate.actions.has_key(event):
@@ -264,6 +295,8 @@
# Itterate through list and update startobjects
treeview = self.get_widget("treeview_gamescreen_objects")
model = treeview.get_model()
+
+ self.selectedgamescreen.dimensions = (int(
self.get_widget("txt_gamescreen_xdimension").get_text() ),int(
self.get_widget("txt_gamescreen_ydimension").get_text() ))

# Need TODO - change this so it stores a string, not a reference
(in engine too)
startobjects = [m[0] for m in model]
@@ -300,8 +333,48 @@

self.get_widget("wnd_workstate").hide()

-
+ def show_active_frame(self,widget=None,prop2 = None, prop3 = None):
+ selection =
self.get_widget("treeview_sprite_images").get_selection()
+ model,sel_iter = selection.get_selected()
+ obj = model.get_value(sel_iter, 0)
+
self.get_widget("txt_frame_image").set_text(self.selectedsprite.imagefiles[obj]["filename"])
+
self.get_widget("spin_top_frame").set_value(self.selectedsprite.imagefiles[obj]["topleft"][0])
+
self.get_widget("spin_left_frame").set_value(self.selectedsprite.imagefiles[obj]["topleft"][1])
+
self.get_widget("spin_bottom_frame").set_value(self.selectedsprite.imagefiles[obj]["bottomright"][0])
+
self.get_widget("spin_right_frame").set_value(self.selectedsprite.imagefiles[obj]["bottomright"][1])

+ def save_active_frame(self,widget=None):
+ selection =
self.get_widget("treeview_sprite_images").get_selection()
+ model,sel_iter = selection.get_selected()
+ obj = model.get_value(sel_iter, 0)
+
self.selectedsprite.imagefiles[obj]["filename"]=self.get_widget("txt_frame_image").get_text()
+
self.selectedsprite.imagefiles[obj]["topleft"]=(self.get_widget("spin_top_frame").get_value_as_int(),self.get_widget("spin_left_frame").get_value_as_int())
+
self.selectedsprite.imagefiles[obj]["bottomright"]=(self.get_widget("spin_bottom_frame").get_value_as_int(),self.get_widget("spin_right_frame").get_value_as_int())
+
+ def remove_active_frame(self,widget=None):
+ selection =
self.get_widget("treeview_sprite_images").get_selection()
+ model,sel_iter = selection.get_selected()
+ obj = model.get_value(sel_iter, 0)
+
+ if not sel_iter is None:
+ del self.selectedsprite.imagefiles[obj]
+ del model[sel_iter]
+ treeview = self.get_widget("treeview_sprite_images")
+ treestore = gtk.TreeStore(gobject.TYPE_INT)
+ model.clear()
+ n=0
+ while n < self.selectedsprite.number_of_frames():
+ insert_iter = treestore.append(None, [int(n)])
+ n+=1
+ treeview.set_model(treestore)
+
+ def add_active_frame(self,widget=None):
+ treeview = self.get_widget("treeview_sprite_images")
+ model=treeview.get_model()
+ newframe=self.selectedsprite.number_of_frames()
+ model.append(None, [newframe])
+
self.selectedsprite.imagefiles.append({"bottomright":(0,0),"filename":"newsprite","topleft":(0,0)})
+
def sprite_ok(self,widget=None):
oldname = find_item_name(self.game.sprites,self.selectedsprite)
newname = self.get_widget("txt_sprite_name").get_text()
@@ -310,12 +383,38 @@
del self.game.sprites[oldname]

self.treeviewhelp.update_item_list()
-
+
+ r = int( self.get_widget("alpha_sprite_r").get_text() )
+ g = int( self.get_widget("alpha_sprite_g").get_text() )
+ b = int( self.get_widget("alpha_sprite_b").get_text() )
+
+ self.selectedsprite.alphakey = (r,g,b)
self.selectedsprite.framerate =
self.get_widget("spin_sprite_framerate").get_value_as_int()

self.get_widget("wnd_sprite").hide()

+ def sound_ok(self,widget=None):
+ oldname = find_item_name(self.game.sounds,self.selectedsound)
+ newname = self.get_widget("txt_sound_name").get_text()
+ if not oldname == newname:
+ self.game.sounds[newname] = self.selectedsound
+ del self.game.sounds[oldname]
+
+ self.treeviewhelp.update_item_list()
+
+ pathsoundfile=self.get_widget("txt_sound_file").get_text()
+ if not pathsoundfile == "":
+ self.selectedsound.soundfile=pathsoundfile
+ else:
+ self.selectedsound.soundfile=None

+ loopsound=self.get_widget("chkloopsnd").get_active()
+ if loopsound == True:
+ self.selectedsound.loop=True
+ else:
+ self.selectedsound.loop=False
+
+ self.get_widget("wnd_sound").hide()

def workstate_cancel(self,widget=None):
self.get_widget("wnd_workstate").hide()
@@ -328,12 +427,12 @@
text = self.get_widget("text_event_script")
textbuffer = text.get_buffer()
# Warn if the existing event is not saved.
- # Have to try this as it's not set initially
+ # Have to try this as it's not set
initiallself.get_widget("txt_gamescreen_dimensions").set_text(
str(obj.dimensions[0]) )y
startiter, enditer = textbuffer.get_bounds()
if widget is not None:
if
self.selectedworkstate.actions[self.selected_workstate_event] \
!=
textbuffer.get_text(startiter, enditer):
- msg = GUI.msgbox.gbYesNoMsgbox("<p>There are unsaved
changes.</p><p>Do you wish to save changes to this event?</p>", modal=True)
+ msg = GUI.msgbox.gbYesNoMsgbox("Do you wish to save
changes to this event?", modal=True)
check = msg.run()
msg.destroy()
if check == gtk.RESPONSE_YES:
@@ -413,6 +512,8 @@
self.delete_gamescreen(obj)
elif obj.objtype == "Workstate":
self.delete_workstate(obj)
+ elif obj.objtype == "Sound":
+ self.delete_sound(obj)

self.treeviewhelp.update_item_list()
except Exception, inst:
@@ -431,8 +532,6 @@
except Exception, inst:
print inst

-
-
def open_properties(self,widget=None,prop2 = None, prop3 = None):
selection = self.get_widget("treeview1").get_selection()
model,sel_iter = selection.get_selected()
@@ -472,17 +571,53 @@


elif obj.objtype == "Sprite":
+ self.get_widget("wnd_sprite").show()

self.get_widget("txt_sprite_name").set_text(find_item_name(self.game.sprites,obj))
self.get_widget("lbl_sprite_frames").set_text(str(
obj.number_of_frames() ))

self.get_widget("spin_sprite_framerate").set_value(int(obj.framerate))
+
+ try:
+ alphakey = obj.alphakey
+ except:
+ alphakey=(255,255,255)
+
+ self.get_widget("alpha_sprite_r").set_text(
str(alphakey[0]) )
+ self.get_widget("alpha_sprite_g").set_text(
str(alphakey[1]) )
+ self.get_widget("alpha_sprite_b").set_text(
str(alphakey[2]) )
+
+ self.selectedsprite = obj
+
+ treeview = self.get_widget("treeview_sprite_images")
+ treestore = gtk.TreeStore(gobject.TYPE_INT)
+
+ n=0

- self.selectedsprite = obj
-
- self.get_widget("wnd_sprite").show()
-
+ while n < obj.number_of_frames():
+ insert_iter = treestore.append(None, [int(n)])
+ n+=1
+ treeview.set_model(treestore)
+
+ elif obj.objtype == "Sound":
+ self.get_widget("wnd_sound").show()
+
self.get_widget("txt_sound_name").set_text(find_item_name(self.game.sounds,obj))
+
+ self.selectedsound = obj
+
+ if not obj.soundfile is None:
+
self.get_widget("txt_sound_file").set_text(obj.soundfile)
+ else:
+ self.get_widget("txt_sound_file").set_text("")
+
+ if obj.loop:
+ self.get_widget("chkloopsnd").set_active(True)
+ else:
+ self.get_widget("chkloopsnd").set_active(False)
+
elif obj.objtype == "Gamescreen":
self.get_widget("wnd_gamescreen").show()

self.get_widget("txt_gamescreen_name").set_text(find_item_name(self.game.gamescreens,obj))
+ self.get_widget("txt_gamescreen_xdimension").set_text(
str(obj.dimensions[0]) )
+ self.get_widget("txt_gamescreen_ydimension").set_text(
str(obj.dimensions[1]) )
try:
color = obj.color
except:
@@ -506,7 +641,7 @@
treestore = gtk.TreeStore(gobject.TYPE_PYOBJECT,
gobject.TYPE_STRING,gobject.TYPE_STRING)

for go in obj.startobjects:
- insert_iter = treestore.append(None,
[go,go.name,go.name])
+ insert_iter = treestore.append(None,
[go,go.name,go.name])
treeview.set_model(treestore)


@@ -569,6 +704,16 @@
self.treeviewhelp.update_item_list()


+ def on_add_new_sprite(self,widget = None):
+ self.add_sprite()
+ self.get_widget("wnd_new_item").hide()
+ self.treeviewhelp.update_item_list()
+
+ def on_add_new_sound(self,widget = None):
+ self.add_sound()
+ self.get_widget("wnd_new_item").hide()
+ self.treeviewhelp.update_item_list()
+
def open_file(self,widget = None):

file_open = GUI.file_dialog(title="Open Game File",style="open")

Modified: trunk/trunk/GUI/treeview.py
==============================================================================
--- trunk/trunk/GUI/treeview.py (original)
+++ trunk/trunk/GUI/treeview.py Tue Feb 17 06:37:55 2009
@@ -25,7 +25,7 @@
# the second is for reference in code
# (Split for multilingual reasons)
fullcats = [["Game Screens","gamescreens"],["Game
Objects","gameobjects"],
- ["Workstates","workstates"],["Sprites","sprites"]]
+
["Workstates","workstates"],["Sprites","sprites"],["Sounds","sounds"]]


# Create our object categories
@@ -48,12 +48,14 @@
self.delete_old_items("gamescreens",self.game.gamescreens)
self.delete_old_items("gameobjects",self.game.gameobjects)
self.delete_old_items("sprites",self.game.sprites)
+ self.delete_old_items("sounds",self.game.sounds)

# Add New items:
self.add_new_items("workstates",self.game.workstates)
self.add_new_items("gamescreens",self.game.gamescreens)
self.add_new_items("gameobjects",self.game.gameobjects)
self.add_new_items("sprites",self.game.sprites)
+ self.add_new_items("sounds",self.game.sounds)


def add_new_items(self,foldername,gamedict):

Modified: trunk/trunk/demos/catch_the_puppy/catch_the_puppy.gb
==============================================================================
--- trunk/trunk/demos/catch_the_puppy/catch_the_puppy.gb (original)
+++ trunk/trunk/demos/catch_the_puppy/catch_the_puppy.gb Tue Feb 17
06:37:55 2009
@@ -20,7 +20,8 @@
sprite: puppyspr
gamescreens:
screen1: !!python/object:game.GameScreen
- dimensions: !!python/tuple [800, 600]
+ color: !!python/tuple [255, 255, 255]
+ dimensions: !!python/tuple [850, 600]
objtype: Gamescreen
startobjects:
- *id001
@@ -30,7 +31,7 @@
sprites:
puppyspr: !!python/object:game.Sprite
alphakey: !!python/tuple [0, 255, 0]
- framerate: 2
+ framerate: 1
imagefiles:
- bottomright: !!python/tuple [45, 45]
filename: images/puppy.bmp

Modified: trunk/trunk/game.py
==============================================================================
--- trunk/trunk/game.py (original)
+++ trunk/trunk/game.py Tue Feb 17 06:37:55 2009
@@ -13,6 +13,7 @@
self.workstates = {}
self.gameobjects = {}
self.sprites = {}
+ self.sounds = {}
self.startscreen = None

def gamescreen(self,dimensions,name):
@@ -37,6 +38,11 @@
spr = Sprite(name)
self.sprites[name] = spr
return spr
+
+ def sound(self,name):
+ snd = Sound(name)
+ self.sounds[name] = snd
+ return snd

@@ -85,4 +91,10 @@
def number_of_frames(self):
return len(self.imagefiles)

-
+class Sound(object):
+ def __init__(self,name=""):
+ self.objtype="Sound"
+ self.name=name
+ self.soundfile = None
+ self.loop = False
+ pass
\ No newline at end of file

Modified: trunk/trunk/gamebaker.py
==============================================================================
--- trunk/trunk/gamebaker.py (original)
+++ trunk/trunk/gamebaker.py Tue Feb 17 06:37:55 2009
@@ -87,6 +87,12 @@
, gtk.CellRendererText(),
text=2) # position of column
treeview.append_column(column)
+
+ treeview = self.wTree.get_widget("treeview_sprite_images")
+ column = gtk.TreeViewColumn("Frame"
+ , gtk.CellRendererText(),
+ text=0) # position of column
+ treeview.append_column(column)


# Connect specific events
@@ -152,6 +158,28 @@
if resolution is None:
resolution = (800,600)
mytestGameScreen = self.game.gamescreen(resolution,name)
+
+ def add_sprite(self,name=None):
+ if name is None or self.game.sprites.has_key(name):
+ if name is None:
+ name = "Sprite"
+ count = 1
+ while self.game.sprites.has_key(name + "%d"%count):
+ count+=1
+ name = name + "%d"%count
+ mytestGameSprite = self.game.sprite(name)
+ return mytestGameSprite
+
+ def add_sound(self,name=None):
+ if name is None or self.game.sounds.has_key(name):
+ if name is None:
+ name = "Sound"
+ count = 1
+ while self.game.sounds.has_key(name + "%d"%count):
+ count+=1
+ name = name + "%d"%count
+ mytestSound = self.game.sound(name)
+ return mytestSound

def delete_gameobject(self,go):
name = find_item_name(self.game.gameobjects,go)
@@ -163,6 +191,11 @@
del self.game.sprites[name]
# TODO Have to delete or warn about references

+ def delete_sound(self,sound):
+ name = find_item_name(self.game.sounds,sound)
+ del self.game.sounds[name]
+ # TODO Have to delete or warn about references
+
def delete_gamescreen(self,gs):
name = find_item_name(self.game.gamescreens,gs)
del self.game.gamescreens[name]
@@ -196,6 +229,7 @@
self.game.sprites[name] = newsprite


+
def debug(game,path_to_game):
print sys.path
if not path_to_game in sys.path:

Modified: trunk/trunk/runtime/__init__.py
==============================================================================
--- trunk/trunk/runtime/__init__.py (original)
+++ trunk/trunk/runtime/__init__.py Tue Feb 17 06:37:55 2009
@@ -49,8 +49,12 @@
return saved[name]
else:
return
RunGameScreen(screen,game,game.gamescreens[name],scriptvars,scriptglobals)
-
- scriptvar = scriptgame(game, self.save_game)
+
+ self.gamesounds = {}
+ for a in game.sounds:
+ self.gamesounds[a] =
script_objects.script_sounds(game.sounds[a].soundfile,game.sounds[a].loop)
+
+ scriptvar = scriptgame(game, self.save_game,self.gamesounds)
self.scriptgame = scriptvar

pygame.init()
@@ -58,6 +62,7 @@
# Run Game init code to import modules etc.
scriptglobals={\
"mouse": script_objects.script_mouse()}
+
# TODO:
# From Release 0.2 onward we can remove the except - left in to
# retain compatibility with previous 0.1.x releases' games
@@ -169,6 +174,10 @@


pygame.quit()
+
+ #Stop all sounds
+ for a in game.sounds:
+ self.gamesounds[a].delete_sound()


Modified: trunk/trunk/runtime/script_objects.py
==============================================================================
--- trunk/trunk/runtime/script_objects.py (original)
+++ trunk/trunk/runtime/script_objects.py Tue Feb 17 06:37:55 2009
@@ -3,9 +3,14 @@
from pygame.locals import *
import pygame.locals as pygamelocals
import random
+import pickle

from gb_exceptions import *

+import ao
+import sys
+import ogg.vorbis
+import threading
"""
******************************************
script objects:
@@ -22,19 +27,31 @@
"""The object used in scripting language for a *game*
- all in-game data should be stored here so
games can be saved easily"""
- def __init__(self,game,save_game):
+ def __init__(self,game,save_game,gamesounds):
self.vars = {}
self.score = 0
self.get_fps = None # Set to be the clock's fps function
# at runtime
self.save_game = save_game
+ self.gamesounds = gamesounds
pass

def change_game_screen(self,gs,savestate=False):
raise game_event(["changeGameScreen",gs,savestate])
-
-
-
+
+ def save_game(self,gamestate):
+ #TODO
+ output = open('savedgame.pkl','wb')
+ pickle.dump(gamestate,output)
+ output.close()
+
+ def load_game(self):
+ #TODO
+ pkl_file = open('savedgame.pkl','rb')
+ savedgame = pickle.load(pkl_file)
+ pkl_file.close()
+
+ return savedgame

class script_gameobject_dict(scriptobject):
"""Simple sequence object for game objects
@@ -80,7 +97,12 @@

# New interface to gameobjects 24th May 08
self.gameobjects=script_gameobject_dict(self.__gameobjects)
-
+
+ def change_dimension(self,xdim,ydim):
+ """Changes the screen dimensions"""
+ self.width = xdim
+ self.height = ydim
+
def get_object(self,name):
"""Returns the gameobject script interfaces for active game
objects"""
return self.__gameobjects[name].scriptvar
@@ -450,4 +472,49 @@
get_rel = __mouse.get_rel
set_pos = __mouse.set_pos

-
+class script_sounds(threading.Thread):
+ def __init__(self, songtitle, loop, device_type="oss"):
+ threading.Thread.__init__(self)
+ try:
+ self.mf = ogg.vorbis.VorbisFile(songtitle)
+ except IOError:
+ self.mf = None
+
+ if not self.mf is None:
+ self.info = self.mf.info()
+ self.dev = ao.AudioDevice(device_type, rate=self.info.rate)
+ self.play = True
+ else:
+ self.play = False
+
+ self.loop = loop
+ self.paused = False
+ self.started = False
+
+ def run(self):
+ while self.play:
+ if self.paused == False:
+ (buf, bytes, bit) = self.mf.read(4096)
+ if bytes is 0:
+ if self.loop == True:
+ self.mf.time_seek(0)
+ else:
+ self.stop_sound()
+ self.dev.play(buf, bytes)
+
+ def stop_sound(self):
+ if self.play:
+ self.mf.time_seek(0)
+ self.paused = True
+
+ def play_sound(self):
+ if self.play:
+ if self.started is False:
+ self.start()
+ self.started = True
+ else:
+ if self.paused is True:
+ self.paused = False
+
+ def delete_sound(self):
+ self.play = False

Reply all
Reply to author
Forward
0 new messages