Пример #1
0
    def renderFrame(self):
	if not self.screen:
	    self.screen = Screen()

	self.screen.drawThis( self.titleBGImg )

	selectionBox = UIImage("box.png",
				pos=self.UI[self.selected].pos,
				size=[(self.res[0]*0.05)*10, self.res[1]*0.05])
	selectionBox.center()
	self.screen.drawThis( selectionBox )

	for uiObj in self.UI.values():
	    # draw the background image firstly
	    self.screen.drawThis( uiObj )

	return self
Пример #2
0
    def renderFrame(self):
	""" RenderFrame - Base Class """
	Screen().drawThis( self.titleBGImg )

	playerChoiceBox = UIImage( "box.png"\
				, pos=self.UI[self.plChoice].pos
				, size=[self.res[0]*0.42, self.res[1]*0.42] )
	playerChoiceBox.center()
	Screen().drawThis( playerChoiceBox )

	selectionBox = UIImage( "box.png"\
				, pos=self.UI[self.selected].pos
				, size=[(self.res[0]*0.03)*5, (self.res[0]*0.03)*2] )
	selectionBox.center()
	Screen().drawThis( selectionBox )

	for uiObj in self.UI.values():
	    Screen().drawThis( uiObj )

	return self
Пример #3
0
    def renderFrame(self):
	""" RenderFrame - Base Class """

	Screen().drawThis( self.titleBGImg )
	Screen().drawThis( self.entryBox )
	Screen().drawThis( self.keysBox )

	selectionBox = UIImage("box.png",
				pos=self.UI[self.selected].pos,
				size=[(self.res[0]*0.03)*5, (self.res[0]*0.03)*2])
	selectionBox.center()
	Screen().drawThis( selectionBox )

	for uiObj in self.UI.values():
	    # draw the background image firstly
	    Screen().drawThis( uiObj )

	for letter in self.screenKeys.values():
	    Screen().drawThis( letter )

	return self
Пример #4
0
class WaitingForPlayersState(EngineState):

    def __init__(self, engine):
	"""
	The game determines what is happening on screen
	based on what state the GameEngine instance has.
	"""
	self.engine = engine

	self.res = self.engine.setsMgr.screenRes
	res = self.res

	# get/load the font
	self.font = FontManager().loadFont( 'Basic' )
	self.UI = {}
	self.UI['waiting'] = UIText("Waiting"
		, pos=[res[0]*0.5, res[1]*0.3], font=self.font, scale=0.04)
	self.UI['waiting'].center()
	self.UI['for'] = UIText("For"
		, pos=[res[0]*0.5, res[1]*0.5], font=self.font, scale=0.04)
	self.UI['for'].center()
	self.UI['players'] = UIText("Players"
		, pos=[res[0]*0.5, res[1]*0.7], font=self.font, scale=0.04)
	self.UI['players'].center()
	self.UI['back'] = UIText("Back"\
		, pos=[res[0]*0.5, res[1]*0.9], font=self.font, scale=0.04)
	self.UI['back'].center()

	self.selectionBox = UIImage( "box.png"\
				, pos=self.UI['back'].pos
				, size=[(self.res[0]*0.03)*5, (self.res[0]*0.03)*2] )
	self.selectionBox.center()

	self.titleBGImg = UIImage("TitleScreenBG.png"\
		, pos=[0,0], size=res)


	glutTimerFunc(50, self.engine.on_update, 50)

    def renderFrame(self):
	""" RenderFrame - Base Class """
	
	Screen().drawThis( self.titleBGImg )
	
	Screen().drawThis( self.selectionBox )	

	for uiObj in self.UI.values():
	    Screen().drawThis( uiObj )

	return self

    def update(self, elapsed):
	"""
	"""
	# go to the next state
	if len( self.engine.gameWorld.peers ) > 0:
	    return GameState(self.engine)
	else:
	    return self

    def on_key_press(self, key, x, y):
	"""
	On key press
	"""
	if key == chr(27):   # Escape
	    return ChoosePlayerState(self.engine)
	return self


    def on_mouse(self, button, state, x, y):
	"""
	On mouse press/release
	"""
	if self.UI['back'].CollidePoint( (x,y) ):
	    return ChoosePlayerState(self.engine)
	return self

    def on_socket(self, elapsed):
	"""
	On socket
	"""
	return self

    def Step(self):
	"""
	Step
	"""
	pass
Пример #5
0
class CreateServerState(EngineState):

    def __init__(self, engine):
	"""
	The game determines what is happening on screen
	based on what state the GameEngine instance has.
	"""
	self.engine = engine

	self.screen = Screen()
	self.res = self.engine.setsMgr.screenRes
	res = self.res # typing 'self.res' was making lines too long. :P
	
	# get/load the font
	self.font = FontManager().loadFont( 'Basic' )

	# screen objects
	self.UI = {}
	self.UI['title'] = UIText("Start a Server"\
		, pos=[res[0]*.01,res[1]*.10], font=self.font, scale=0.05)
	self.UI['server_name'] = UIText("Server Name"\
		, [res[0]*0.3, res[1]*0.2], self.font, 0.034)
	self.UI['text_entry'] = UIText(self.engine.serverName\
		, [res[0]*0.5, res[1]*0.3], self.font, 0.047)
	self.UI['text_entry'].center()
	self.UI['backspace'] = UIText("BKSP"\
		, [res[0]*0.24, res[1]*0.74], self.font, 0.031)
	self.UI['space'] = UIText("SPACE"\
		, [res[0]*0.6, res[1]*0.74], self.font, 0.031)
	self.UI['back'] = UIText("Back"\
		, pos=[res[0]*0.1, res[1]*0.9], font=self.font, scale=0.031)
	self.UI['back'].center()
	self.UI['create'] = UIText("Create"\
		, pos=[res[0]*0.9, res[1]*0.9], font=self.font, scale=0.031)
	self.UI['create'].center()
	
	self.selected = 'create'

	self.titleBGImg = UIImage("TitleScreenBG.png", pos=[0,0], size=res)
	
	self.entryBox = UIImage("box.png",
				pos=[res[0]*0.5, res[1]*0.3],
				size=[(0.03*res[0])*12, 0.05*res[1]])
	self.entryBox.center()

	# This is the text input that currently has focus; 
	#   the default is text_entry
	self.hasFocus = self.UI['text_entry']
	self.ServerNameMax = 12

	# Here, a hash is created containing a UIText for each letter
	#   in the alphabet.
	# They are spaced and stacked on the screen so that they lie
	#   in 3 rows of 8, 9, and 9 letters each.
	self.screenKeys = {}
	lettPos = [res[0]*0.32, res[1]*0.45]
	lettersToAdd = 8
	lettScale = 0.04
	for letter in map(chr, range(65, 91)):
	    
	    # add the letter to the hash
	    self.screenKeys[letter] = UIText(letter, [lettPos[0], lettPos[1]],
		    self.font, lettScale)

	    # This denotes that the last letter in the row has been added
	    #	
	    if lettersToAdd == 1:
		lettersToAdd = 9    # the subsequent rows all have 9 letters
		lettPos[0] = res[0]*0.3   # reset the x pos (slightly less ^\ )
		lettPos[1] += lettScale+(lettScale*res[0])  # increment the y pos
	    else:
		lettersToAdd -= 1	    # decrement the counter
		lettPos[0] += lettScale+(lettScale*res[0])  # increment the x pos

	self.keysBox = UIImage("box.png", pos=self.screenKeys['N'].pos\
		, size=[ (lettScale*res[0])*10, (lettScale*res[1])*6 ])
	self.keysBox.center()    


    def createServer( self ):
	"""
	for the sake of code reuse
	"""
	if system() == "Linux" or system() == "Macintosh":
	    Popen( [r'/usr/bin/python2.7'
		,os.path.join( self.engine.setsMgr.home_dir
				, 'StartServer.py' )] )
	elif system() == "Windows":
	    Popen([r'C:\Python27\python.exe'
		,os.path.join( self.engine.setsMgr.home_dir
				, 'StartServer.py' )])
	else:
	    print "you are on an unsupported platform for spawning a server"
	
	# declare that this game instance is the server owner
	self.engine.serverOwner = True
	self.engine.serverName = self.UI['text_entry'].getText()
	return ChoosePlayerState(self.engine)


    def renderFrame(self):
	""" RenderFrame - Base Class """

	#screen = Screen()

	Screen().drawThis( self.titleBGImg )
	Screen().drawThis( self.entryBox )
	Screen().drawThis( self.keysBox )

	selectionBox = UIImage("box.png",
				pos=self.UI[self.selected].pos,
				size=[(self.res[0]*0.03)*5, (self.res[0]*0.03)*2])
	selectionBox.center()
	Screen().drawThis( selectionBox )

	for scrObj in self.UI.values():
	    Screen().drawThis( scrObj )

	for letter in self.screenKeys.values():
	    Screen().drawThis( letter )

	return self

    def on_key_press(self, key, x, y):
	"""
	On key press
	"""
	# Esc
	if key == chr(27):			    # Escape
	    return TitleScreenState(self.engine)

	# Enter
	elif key == chr(13):
	    if self.selected == "back":
		return TitleScreenState(self.engine)
	    elif self.selected == "create":
		return self.createServer()

	# Arrow keys
	elif key >= 100 and key <= 103:
	    if self.selected == "back":
		self.selected = "create"
	    elif self.selected == "create":
		self.selected = "back"

	elif self.hasFocus != None:
	    if key == chr(32):			    # Space Bar
		if len(self.hasFocus.getText()) < self.ServerNameMax:
		    self.hasFocus.push(" ")
	    if key == chr(8) or key == chr(127):    # BS or Del
		self.hasFocus.pop()
	    if key.isalpha() or key.isdigit():	    # letter/numbers
		if len(self.hasFocus.getText()) < self.ServerNameMax:
		    self.hasFocus.push(key)

	return self


    def on_mouse_motion(self, x, y):
	"""
	On mouse motion
	"""
	if self.UI['back'].CollidePoint( (x,y) ):
	    self.selected = "back"
	    
	elif self.UI['create'].CollidePoint( (x,y) ):
	    self.selected = "create"

	return self

    def on_mouse(self, button, state, x, y):
	"""
	On mouse press
	"""
	if button == GLUT_LEFT_BUTTON and state == GLUT_UP:
	    if self.UI['back'].CollidePoint((x,y)):
		return TitleScreenState(self.engine)

	    if self.UI['create'].CollidePoint((x,y)):
		return self.createServer()

	    # test for user clicks on the screen keys
	    for letter in self.screenKeys:
		if self.screenKeys[letter].CollidePoint((x,y)):
		    if len(self.hasFocus.getText()) < self.ServerNameMax:
			self.UI['text_entry'].push( letter )

	    if self.UI['backspace'].CollidePoint((x,y)):
		self.UI['text_entry'].pop()

	    if self.UI['space'].CollidePoint((x,y)):
		if len(self.hasFocus.getText()) < self.ServerNameMax:
		    self.UI['text_entry'].push(" ")
		    
		

	return self
Пример #6
0
class JoinServerState(EngineState):

    def __init__(self, engine):
	"""
	The game determines what is happening on screen
	based on what state the GameEngine instance has.
	"""
	self.engine = engine

	self.res = self.engine.setsMgr.screenRes
	res = self.res

	# get/load the font
	self.font = FontManager().loadFont( 'Basic' )

	self.UI = {}
	self.UI['title'] = UIText("Join a Server"\
		, pos=[res[0]*.01,res[1]*.10], font=self.font, scale=0.05)
	self.UI['back'] = UIText("Back"\
		, pos=[res[0]*0.1, res[1]*0.9], font=self.font, scale=0.03)
	self.UI['back'].center()
	self.UI['join'] = UIText("Join"\
		, pos=[res[0]*0.9, res[1]*0.9], font=self.font, scale=0.03)
	self.UI['join'].center()
	self.UI['backspace'] = UIText("BKSP"\
		, [res[0]*0.24, res[1]*0.65], self.font, 0.03)
	self.UI['space'] = UIText("SPACE"\
		, [res[0]*0.6, res[1]*0.65], self.font, 0.03)
	self.UI['ip_entry'] = UIText(self.engine.host\
		, [res[0]*0.5, res[1]*0.3], self.font, 0.03)
	self.UI['ip_entry'].center()
	
	self.selected = 'join'

	self.entryBox = UIImage("box.png",
				pos=[res[0]*0.5, res[1]*0.3],
				size=[(0.03*res[0])*12, 0.05*res[1]])
	self.entryBox.center()

	self.titleBGImg = UIImage("TitleScreenBG.png"\
		, pos=[0,0], size=res)

	# This is the text input that currently has focus; 
	#   the default is text_entry
	self.hasFocus = self.UI['ip_entry']

	# Here, a hash is created containing a UIText for each letter
	#   in the alphabet.
	# They are spaced and stacked on the screen so that they lie
	#   in 3 rows of 8, 9, and 9 letters each.

	self.screenKeys = {"." : UIText(".", 
				    [res[0]*0.5, res[1]*0.65],
				    self.font, 0.06) }
	self.screenKeys["."].center()
	self.screenKeys["localhost"] = UIText("localhost", 
						[res[0]*0.33, res[1]*0.48],
						self.font, 0.04)

	lettPos = [res[0]*0.3, res[1]*0.56]
	lettScale = 0.04
	for letter in map( str, range(10) ):
	    # add the letter to the hash
	    self.screenKeys[letter] = UIText(letter, 
					    [lettPos[0], lettPos[1]],
					    self.font, lettScale)
	    lettPos[0] += lettScale+(lettScale*res[0])  # increment the x pos

	self.keysBox = UIImage("box.png",
			    pos=list(self.screenKeys["5"].pos),
			    size=[ (lettScale*res[0])*15, (lettScale*res[1])*7 ] )
	self.keysBox.center()    


    def renderFrame(self):
	""" RenderFrame - Base Class """

	Screen().drawThis( self.titleBGImg )
	Screen().drawThis( self.entryBox )
	Screen().drawThis( self.keysBox )

	selectionBox = UIImage("box.png",
				pos=self.UI[self.selected].pos,
				size=[(self.res[0]*0.03)*5, (self.res[0]*0.03)*2])
	selectionBox.center()
	Screen().drawThis( selectionBox )

	for uiObj in self.UI.values():
	    # draw the background image firstly
	    Screen().drawThis( uiObj )

	for letter in self.screenKeys.values():
	    Screen().drawThis( letter )

	return self

    def on_key_press(self, key, x, y):
	"""
	On key press
	"""

	# Esc
	if key == chr(27):
	    return TitleScreenState(self.engine)

	# Enter
	elif key == chr(13):
	    if self.selected == "back":
		return TitleScreenState(self.engine)
	    elif self.selected == "join":
		self.engine.host = self.UI['ip_entry'].getText()
		return ChoosePlayerState(self.engine)

	elif key >= 100 and key <= 103:
	    if self.selected == "back":
		self.selected = "join"
	    elif self.selected == "join":
		self.selected = "back"

	elif self.hasFocus != None:
	    if key == chr(8) or key == chr(127):    # BS or Del
		if self.UI['ip_entry'].getText() == "localhost":
		    self.UI['ip_entry'].setText( "" )
		else:
		    self.hasFocus.pop()
	    elif key == ".":
		self.hasFocus.push(".")
	    elif key.isdigit():
		if len( self.UI['ip_entry'].getText() ) < 15:
		    if self.UI['ip_entry'].getText() == "localhost":
			self.UI['ip_entry'].setText( "" )
		    self.hasFocus.push(key)

	return self


    def on_mouse_motion(self, x, y):
	"""
	On mouse motion
	"""
	if self.UI['back'].CollidePoint( (x,y) ):
	    self.selected = "back"
	    
	elif self.UI['join'].CollidePoint( (x,y) ):
	    self.selected = "join"

	return self

    def on_mouse(self, button, state, x, y):
	"""
	On mouse press
	"""
	if button == GLUT_LEFT_BUTTON and state == GLUT_UP:
	    if self.UI['back'].CollidePoint((x,y)):
		return TitleScreenState(self.engine)

	    if self.UI['join'].CollidePoint((x,y)):
		self.engine.host = self.UI['ip_entry'].getText()
		return ChoosePlayerState(self.engine)

	    # test for user clicks on the screen keys
	    if len( self.UI['ip_entry'].getText() ) < 15:
		for letter in self.screenKeys:
		    if self.screenKeys[letter].CollidePoint((x,y)):
			if letter == "localhost":
			    self.UI['ip_entry'].setText("localhost")
			else:
			    if self.UI['ip_entry'].getText().isalpha():
				self.UI['ip_entry'].setText( "" )
			    self.UI['ip_entry'].push( letter )

	    if self.UI['backspace'].CollidePoint((x,y)):
		if self.UI['ip_entry'].getText() == "localhost":
		    self.UI['ip_entry'].setText( "" )
		else:
		    self.UI['ip_entry'].pop()

	    if self.UI['space'].CollidePoint((x,y)):
		self.UI['ip_entry'].push(" ")
		    

	return self