[pypy-svn] r30638 - in pypy/dist/pypy/translator/js: . demo/jsdemo jssrc tools
fijal at codespeak.net
fijal at codespeak.net
Thu Jul 27 16:01:17 CEST 2006
Author: fijal
Date: Thu Jul 27 16:00:49 2006
New Revision: 30638
Modified:
pypy/dist/pypy/translator/js/database.py
pypy/dist/pypy/translator/js/demo/jsdemo/bnb.py
pypy/dist/pypy/translator/js/jssrc/misc.js
pypy/dist/pypy/translator/js/tools/start_bnb.py
Log:
Fixed constant rendering order (I hope forever). BNB now playable.
Modified: pypy/dist/pypy/translator/js/database.py
==============================================================================
--- pypy/dist/pypy/translator/js/database.py (original)
+++ pypy/dist/pypy/translator/js/database.py Thu Jul 27 16:00:49 2006
@@ -37,6 +37,7 @@
self.function_names = {} # graph --> real_name
self.methods = {} # graph --> method_name
self.consts = {} # value --> const_name
+ self.reverse_consts = {}
self.const_names = set()
self.const_var = Variable("__consts")
self.name_manager = JavascriptNameManager(self)
@@ -116,7 +117,7 @@
return self.consts[const]
else:
self.consts[const]
- return const
+ return self.reverse_consts[self.consts[const]]
except KeyError:
log("New const:%r"%value)
if isinstance(value, ootype._string):
@@ -125,6 +126,7 @@
if name in self.const_names:
name += '__%d' % len(self.consts)
self.consts[const] = name
+ self.reverse_consts[name] = const
self.const_names.add(name)
self.pending_consts.append((const,name))
if retval == 'name':
@@ -150,13 +152,17 @@
while len(all_c) > 0:
const = all_c.pop()
if const not in rendered:
+ to_render = True
+ #if consts[const] == 'const_str__63':
+ # import pdb;pdb.set_trace()
if hasattr(const, 'depends_on') and const.depends_on:
for i in const.depends_on:
if i not in rendered and i not in dep_ok:
assert i.depends is None or const in i.depends
+ to_render = False
continue
- if (not hasattr(const, 'depends')) or (not const.depends) or const in dep_ok:
+ if to_render and (not hasattr(const, 'depends')) or (not const.depends) or const in dep_ok:
yield const,consts[const]
rendered.add(const)
else:
@@ -426,15 +432,21 @@
ilasm.load_str(self.name)
class DictConst(RecordConst):
+ def record_const(self, co):
+ #if isinstance(co, ootype._string) and co._str == 'fire':
+ # import pdb;pdb.set_trace()
+ name = self.db.record_const(co, None, 'const')
+ if name is not None:
+ self.depends.add(name)
+ name.depends_on.add(self)
+
def record_fields(self):
if not self.const:
return
for i in self.const._dict:
- name = self.db.record_const(self.const._dict[i], None, 'const')
- if name is not None:
- self.depends.add(name)
- name.depends_on.add(self)
+ self.record_const(i)
+ self.record_const(self.const._dict[i])
def init_fields(self, ilasm, const_var, name):
if not self.const:
Modified: pypy/dist/pypy/translator/js/demo/jsdemo/bnb.py
==============================================================================
--- pypy/dist/pypy/translator/js/demo/jsdemo/bnb.py (original)
+++ pypy/dist/pypy/translator/js/demo/jsdemo/bnb.py Thu Jul 27 16:00:49 2006
@@ -23,6 +23,7 @@
self.last_seen = set()
self.seen = set()
self.num_frame = 0
+ self.z_index = {}
def def_icon(self, icon_code):
self.sprite_sets[icon_code] = []
@@ -86,11 +87,11 @@
_render_xmlhttp = True
_methods = {
- 'get_message' : MethodDesc( [('callback', (lambda : None))] , {'aa':[{'aa':'bb'}]}),
+ 'get_message' : MethodDesc( [('player_id', -1), ('keys' , "aaa"), ('callback', (lambda : None))] , {'aa':[{'aa':'bb'}]}),
'add_player' : MethodDesc( [('player_id', 0), ('callback', (lambda : None))] , {'aa':[{'aa':'bb'}]}),
'remove_player': MethodDesc( [('player_id', 0), ('callback', (lambda : None))] , {'aa':[{'aa':'bb'}]}),
'player_name' : MethodDesc( [('player_id', 0), ('name', 'PyPy player'), ('callback', (lambda : None))] , {'aa':[{'aa':'bb'}]}),
- 'key' : MethodDesc( [('player_id', 0), ('keynum', '0'), ('callback', (lambda : None))] , {'aa':[{'aa':'bb'}]}),
+# 'key' : MethodDesc( [('player_id', 0), ('keynum', '0'), ('callback', (lambda : None))] , {'aa':[{'aa':'bb'}]}),
'initialize_session' : MethodDesc( [('callback', (lambda : None))], {'aa':'bb'}),
}
@@ -146,42 +147,10 @@
self.sessionSocket().send(message(CMSG_REMOVE_PLAYER, int(player_id)))
return dict()
- @turbogears.expose(format='json')
- def key(self, player_id, keynum):
- self.sessionSocket().send(message(CMSG_KEY, int(player_id), int(keynum)))
- return dict()
-
- @turbogears.expose(format='json')
- def key0(self):
- return self.key(0, 0)
-
- @turbogears.expose(format='json')
- def key1(self):
- return self.key(0, 1)
-
- @turbogears.expose(format='json')
- def key2(self):
- return self.key(0, 2)
-
- @turbogears.expose(format='json')
- def key3(self):
- return self.key(0, 3)
-
- @turbogears.expose(format='json')
- def key4(self):
- return self.key(0, 4)
-
- @turbogears.expose(format='json')
- def key5(self):
- return self.key(0, 5)
-
- @turbogears.expose(format='json')
- def key6(self):
- return self.key(0, 6)
-
- @turbogears.expose(format='json')
- def key7(self):
- return self.key(0, 7)
+## @turbogears.expose(format='json')
+## def key(self, player_id, keynum):
+## self.sessionSocket().send(message(CMSG_KEY, int(player_id), int(keynum)))
+## return dict()
@turbogears.expose(format='json')
def close(self):
@@ -218,7 +187,7 @@
return dict()
@turbogears.expose(format="json")
- def get_message(self):
+ def get_message(self, player_id, keys):
#XXX hangs if not first sending CMSG_PING!
sm = self.serverMessage()
data = sm.data
@@ -272,19 +241,31 @@
## new_sprite, s_num = sprite_manager.get_sprite(*next)
## to_append.append({'type':'show_sprite', 's':s_num, 'icon_code':str(next[0]), 'x':str(next[1]), 'y':str(next[2])})
- def get_partial_frame(next):
+ if player_id != -1:
+ if keys:
+ for i in keys.split(":"):
+ self.sessionSocket().send(message(CMSG_KEY, int(player_id), int(i)))
+
+ def get_partial_frame(next, z_num):
new_sprite, s_num = sprite_manager.get_sprite(*next)
if new_sprite == 'new':
- to_append.append({'type':'ns', 's':s_num, 'icon_code':str(next[0]), 'x':str(next[1]), 'y':str(next[2])})
+ to_append.append({'type':'ns', 's':s_num, 'icon_code':str(next[0]), 'x':str(next[1]), 'y':str(next[2]), 'z':z_num})
+ sprite_manager.z_index[s_num] = z_num
elif new_sprite == 'move':
- to_append.append({'type':'sm', 's':str(s_num), 'x':str(next[1]), 'y':str(next[2])})
-
+ to_append.append({'type':'sm', 's':str(s_num), 'x':str(next[1]), 'y':str(next[2]), 'z':z_num})
+ sprite_manager.z_index[s_num] = z_num
+ else:
+ if sprite_manager.z_index[s_num] != z_num:
+ to_append.append({'type':'zindex', 's':s_num, 'z':z_num})
+ sprite_manager.z_index[s_num] = z_num
+ return s_num
+
+ z_num = 0
for i, msg in enumerate(messages):
if msg['type'] == PMSG_INLINE_FRAME:
for next in msg['sprites']:
- #to_append.append({'type':'ns', 's':self.num, 'icon_code':str(next[0]), 'x':str(next[1]), 'y':str(next[2])})
- #self.num += 1
- get_partial_frame(next)
+ s_num = get_partial_frame(next, z_num)
+ z_num += 1
del messages[i]
empty_frame = False
Modified: pypy/dist/pypy/translator/js/jssrc/misc.js
==============================================================================
--- pypy/dist/pypy/translator/js/jssrc/misc.js (original)
+++ pypy/dist/pypy/translator/js/jssrc/misc.js Thu Jul 27 16:00:49 2006
@@ -7,7 +7,9 @@
function inherits(child, parent) {
child.parent = parent;
for (i in parent.prototype) {
- child.prototype[i] = parent.prototype[i];
+ if (!child.prototype[i]) {
+ child.prototype[i] = parent.prototype[i];
+ }
}
}
Modified: pypy/dist/pypy/translator/js/tools/start_bnb.py
==============================================================================
--- pypy/dist/pypy/translator/js/tools/start_bnb.py (original)
+++ pypy/dist/pypy/translator/js/tools/start_bnb.py Thu Jul 27 16:00:49 2006
@@ -14,7 +14,7 @@
from pypy.translator.js.test.runtest import compile_function
from pypy.translator.js.modules._dom import get_document
from pypy.translator.js.modules.xmlhttp import XMLHttpRequest
-from pypy.translator.js.modules.mochikit import log, logWarning, createLoggingPane
+from pypy.translator.js.modules.mochikit import log, logWarning, createLoggingPane, logDebug
from pypy.translator.js.modules.bltns import date
from pypy.translator.js.demo.jsdemo.bnb import BnbRootInstance
@@ -113,12 +113,35 @@
except KeyError:
self.hide_sprite(i)
+ def set_z_index(self, s_num, z):
+ self.sprites[s_num].style.zIndex = z
+
#def show_sprite(self, s):
# i = self.sprites[s]
# i.style.visibility = "visible"
sm = SpriteManager()
+class KeyManager(object):
+ def __init__(self):
+ self.keymappings = {ord('D'):'right', ord('S'):'fire', ord('A'):'left', ord('W'):'up'}
+ self.key_to_bnb_down = {'right':0, 'left':1, 'fire':3, 'up':2}
+ self.key_to_bnb_up = {'right':4, 'left':5, 'fire':7, 'up':6}
+ self.queue = []
+
+ def add_key_up(self, key):
+ self.queue.append(self.key_to_bnb_up[key])
+
+ def add_key_down(self, key):
+ self.queue.append(self.key_to_bnb_down[key])
+
+ def get_keys(self):
+ retval = self.queue
+ self.queue = []
+ return retval
+
+km = KeyManager()
+
def appendPlayfield(msg):
bgcolor = '#000000'
get_document().body.setAttribute('bgcolor', bgcolor)
@@ -146,8 +169,10 @@
sm.add_icon(msg['icon_code'], msg['filename'])
elif msg['type'] == 'ns':
sm.add_sprite(msg['s'], msg['icon_code'], msg['x'], msg['y'])
+ sm.set_z_index(msg['s'], msg['z'])
elif msg['type'] == 'sm':
sm.move_sprite(msg['s'], msg['x'], msg['y'])
+ sm.set_z_index(msg['s'], msg['z'])
elif msg['type'] == 'ds':
sm.hide_sprite(msg['s'])
elif msg['type'] == 'begin_clean_sprites':
@@ -156,6 +181,8 @@
sm.end_clean_sprites()
elif msg['type'] == 'show_sprite':
sm.show_sprite(msg['s'], msg['icon_code'], msg['x'], msg['y'])
+ elif msg['type'] == 'zindex':
+ sm.set_z_index(msg['s'], msg['z'])
#elif msg['type'] == 'ss':
# sm.show_sprite(msg['s'])
elif msg['type'] == 'player_icon' or msg['type'] == 'def_key' or \
@@ -186,69 +213,37 @@
def keydown(key):
#c = chr(int(key.keyCode)).lower()
#c = int(key.keyCode)
- c = key.keyCode
- if c == 48: #ord('0'):
- addPlayer(0)
- elif c == 49: #ord('1'): #bwah. should really work on being able to cast to int
- addPlayer(1)
- elif c == 50: #ord('2'):
- addPlayer(2)
- elif c == 51: #ord('3'):
- addPlayer(3)
- elif c == 52: #ord('4'):
- addPlayer(4)
- elif c == 53: #ord('5'):
- addPlayer(5)
- elif c == 54: #ord('6'):
- addPlayer(6)
- elif c == 55: #ord('7'):
- addPlayer(7)
- elif c == 56: #ord('8'):
- addPlayer(8)
- elif c == 57: #ord('9'):
- addPlayer(9)
- elif c == 68: #ord('D'): #right
- BnbRootInstance.key(player.id, 0, ignore_dispatcher)
- logKey('start right')
- elif c == 83: #ord('S'): #left
- BnbRootInstance.key(player.id, 1, ignore_dispatcher)
- logKey('start left')
- elif c == 69: #ord('E'): #up
- BnbRootInstance.key(player.id, 2, ignore_dispatcher)
- logKey('start up')
- elif c == 88: #ord('X'): #fire
- BnbRootInstance.key(player.id, 3, ignore_dispatcher)
- logKey('start fire')
- else:
+ try:
+ logWarning("Keydown pressed")
+ c = key.keyCode
+ if c > ord('0') and c < ord('9'):
+ addPlayer(int(chr(c)))
+ #for i in km.keymappings:
+ # log(str(i))
+ if c in km.keymappings:
+ logWarning('adding' + str(c))
+ km.add_key_down(km.keymappings[c])
+ #else:
logWarning('unknown keydown: ' + str(c))
-
+ except Exception, e:
+ log(str(e))
def keyup(key):
c = key.keyCode
- if c == 48 or c == 49 or c == 50 or c == 51 or c == 52 or\
- c == 53 or c == 54 or c == 55 or c == 56 or c == 57: #XXX c in (...) didn't work
+ if c > ord('0') and c < ord('9'):
pass #don't print warning
- elif c == 68: #ord('D'): #right
- BnbRootInstance.key(player.id, 4, ignore_dispatcher)
- logKey('stop right')
- elif c == 83: #ord('S'): #left
- BnbRootInstance.key(player.id, 5, ignore_dispatcher)
- logKey('stop left')
- elif c == 69: #ord('E'): #up
- BnbRootInstance.key(player.id, 6, ignore_dispatcher)
- logKey('stop up')
- elif c == 88: #ord('X'): #fire
- BnbRootInstance.key(player.id, 7, ignore_dispatcher)
- logKey('stop fire')
+ elif c in km.keymappings:
+ km.add_key_up(km.keymappings[c])
else:
logWarning('unknown keyup: ' + str(c))
-
+
def ignore_dispatcher(msgs):
pass
def bnb_dispatcher(msgs):
- BnbRootInstance.get_message(bnb_dispatcher)
-
+ #a = [str(i) for i in q]
+ #logDebug(str(a))
+ BnbRootInstance.get_message(player.id, ":".join([str(i) for i in km.get_keys()]), bnb_dispatcher)
#sm_restart = int(msgs['add_data'][0]['sm_restart'])
#if sm_restart == 123:
# log("sm_restart")
@@ -259,12 +254,12 @@
# get_document().body.removeChild(playfield)
# appendPlayfieldXXX()
- count = int(msgs['add_data'][0]['n'])
- if count != player.prev_count + 1:
- logWarning("incorrect response order, expected " + str(player.prev_count+1) + ' got ' + str(count))
- sm.frames.append(msgs)
- player.prev_count = count
- #else:
+## count = int(msgs['add_data'][0]['n'])
+## if count != player.prev_count + 1:
+## logWarning("incorrect response order, expected " + str(player.prev_count+1) + ' got ' + str(count))
+## sm.frames.append(msgs)
+## player.prev_count = count
+## #else:
# player.prev_count = count
# for i in sm.frames:
# render_frame(i)
@@ -277,14 +272,14 @@
get_document().title = str(stats.n_sprites) + " sprites " + str(stats.fps)
def session_dispatcher(msgs):
- BnbRootInstance.get_message(bnb_dispatcher)
+ BnbRootInstance.get_message(player.id, "", bnb_dispatcher)
def run_bnb():
def bnb():
genjsinfo = get_document().getElementById("genjsinfo")
get_document().body.removeChild(genjsinfo)
createLoggingPane(True)
- log("keys: [0-9] to select player, [esdx] to walk around")
+ log("keys: [0-9] to select player, [wsad] to walk around")
BnbRootInstance.initialize_session(session_dispatcher)
get_document().onkeydown = keydown
get_document().onkeyup = keyup
More information about the Pypy-commit
mailing list