Skip to content

Commit

Permalink
In game menu (quit confirm missing)
Browse files Browse the repository at this point in the history
  • Loading branch information
wezu committed Jul 7, 2016
1 parent ccc3f90 commit cc378ac
Show file tree
Hide file tree
Showing 14 changed files with 201 additions and 25 deletions.
1 change: 1 addition & 0 deletions config.txt
Expand Up @@ -44,6 +44,7 @@ textures-power-2 None
ui_color1 0.33 0.894 1.0 1.0
ui_color2 0.94 0.0 0.1 1.0
ui_color3 0.33 0.56 1.0 1.0
ui_menu_shadow 0.45
undecorated False
use-filters 1
use-fxaa 1
Expand Down
Binary file added gui/button4.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added gui/button5.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added gui/button6.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified gui/menu_frame.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added gui/menu_shadow.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
28 changes: 26 additions & 2 deletions source/client.py
Expand Up @@ -59,6 +59,7 @@ def __init__(self):
self.loading_status=set()
self.level_root=render.attachNewNode('level_root')
self.level_root.hide()
self.is_in_game=False

#events
base.win.setCloseRequestEvent('exit-event')
Expand All @@ -69,7 +70,8 @@ def __init__(self):
self.accept( 'load-level', self.onLevelLoad)
self.accept( 'loading-done', self.onLoadingDone)
self.accept( 'reload-shaders', self.onShaderReload)

self.accept( 'client-set-team', self.onTeamCahnge)
self.accept( 'client-quit', self.onQuit)
# Task
taskMgr.add(self.update, 'client_update')

Expand Down Expand Up @@ -155,6 +157,26 @@ def loadLevel(self, task):
return task.done

#events
def onQuit(self):
self.level_root.removeNode()
self.level_root=render.attachNewNode('level_root')
self.level_root.hide()
if self.ui.is_zoomed:
self.ui.zoom()
self.sun_and_sky.hide()
self.droid.disable()
self.ui.unbindKeys()
self.ui.in_game_menu.hide()
self.ui.main_menu.show()
self.audio.setMusic('background')
self.loading_status=set()
self.is_in_game=False
messenger.send('world-clear-level')


def onTeamCahnge(self, team):
self.droid.setTeam(team)

def onShaderReload(self):
log.debug('Client: Reloading shaders')
for mesh in self.level_root.getChildren():
Expand All @@ -179,6 +201,7 @@ def onLoadingDone(self, target):
self.ui.in_game_menu.showElements('hud_')
self.ui.hideSoftCursor()
self.ui.is_main_menu=False
self.is_in_game=True
messenger.send('world-link-objects', [self.droid.node, 'pc_droid_node'])

def onLevelLoad(self, map_name):
Expand Down Expand Up @@ -210,7 +233,8 @@ def onWindowMinimize(self):
def onWindowFocus(self):
self.window_focused=base.win.getProperties().getForeground()
log.debug('window-event: Focus set to '+str(self.window_focused))
self.ui.in_game_menu.showMenu(self.window_focused)
if self.is_in_game:
self.ui.in_game_menu.showMenu(self.window_focused)
if not self.window_focused:
self.ui.cursor_pos=(0,0,0)
if cfg['pause-on-focus-lost']:
Expand Down
126 changes: 118 additions & 8 deletions source/ingamemenu.py
Expand Up @@ -54,6 +54,7 @@ def __init__(self, ui):
self.current_weapon_slot=None
self.cash=2000
self.current_order=None
self.last_gun_change_time=0.0
#crosshair
self.elements['hud_crosshair']=DirectFrame(frameSize=_rec2d(64,64),
frameColor=(1,1,1,1.0),
Expand All @@ -73,6 +74,15 @@ def __init__(self, ui):
self.elements['hud_score_team']=self.makeFrame('\1red\1 0\2 \1cyan\1 vs\2 \1blue\1 0\2', path+'gui/score_bar2.png', ui.top_right, (-256,0), (256,64), (-128, 20))
self.elements['hud_score_time']=self.makeFrame('10:00', path+'gui/time.png', ui.top, (-64,0), (128,64), (-64, 34),ui.font)

self.elements['menu_shadow']=DirectFrame(frameSize=_rec2d(512,512),
frameColor=(1,1,1,1.0),
frameTexture=loadTex(path+'gui/menu_shadow.png'),
parent=self.ui.center)
_resetPivot(self.elements['menu_shadow'])
self.elements['menu_shadow'].setColor((0,0,0,0))
self.elements['menu_shadow'].setTransparency(TransparencyAttrib.MAlpha)
self.elements['menu_shadow'].setPos(_pos2d(-256,-240))

self.elements['menu_frame']=self.makeFrame('', path+'gui/menu_frame.png', ui.center, (-256,-240), (512,512), (-256, 380))

self.elements['menu_weapon1']=self.makeDropDownButton(path+'gui/gun_pistol.png', (10,57), self.elements['menu_frame'], cmd=self.showGunsToBuy,arg=1, txt='')
Expand All @@ -90,16 +100,41 @@ def __init__(self, ui):
self.elements['buy_gun_'+gun_name]=self.makeDropDownButton(path+gun['icon'], (10,89+32*index), self.elements['menu_frame'], cmd=self.buyGun, arg=gun_name, txt='$'+str(gun['cost']))

temp_droid_list=[
{'orders':'defend', 'name':'droid 0'},
{'orders':'attack', 'name':'droid 1'},
{'orders':'attack', 'name':'droid 2'},
{'orders':'support', 'name':'droid 3'}
{'orders':'defend', 'name':'Dinkleberg'},
{'orders':'attack', 'name':'Megan'},
{'orders':'attack', 'name':'Hypnotoad'},
{'orders':'support', 'name':'Count Spankulot'},
{'orders':'support', 'name':'droid 5'},
{'orders':'support', 'name':'droid 6'},
{'orders':'support', 'name':'droid 7'},
{'orders':'support', 'name':'droid 8'}
]
self.setDroidSlaves(temp_droid_list)

self.elements['menu_team']=self.makeFrame('CHANGE TEAM:', path+'gui/empty_64.png', ui.center, (-256,-240), (512,512), (-256, 270))
self.elements['menu_team']['text_fg']=cfg['ui_color1']
self.elements['menu_team_red']=self.makeButton('\1red\1JOIN RED\2', path+'gui/button6.png', ui.center, (-256,32), (256,64), (-230, 18),cmd=self.setTeam, arg='red', align=TextNode.ALeft)
self.elements['menu_team_blue']=self.makeButton('\1blue\1JOIN BLUE\2', path+'gui/button5.png', ui.center, (0,32), (256,64), (-220, 18),cmd=self.setTeam, arg='blue', align=TextNode.ALeft)


self.elements['menu_quit_txt']=self.makeFrame('EXIT MATCH:', path+'gui/empty_64.png', ui.center, (-256,-240), (512,512), (-256, 100))
self.elements['menu_quit_txt']['text_fg']=cfg['ui_color1']
self.elements['menu_quit']=self.makeButton('QUIT', path+'gui/button4.png', ui.center, (-128,196), (256,64), (-128, 18), cmd=self.quit)
self.elements['menu_close']=self.makeButton('', path+'gui/close.png', ui.center, (128+60,-256+22), (64,64), (0, 0), cmd=self.hideMenu, active_area=(48, 48, 16,0))
self.elements['menu_close'].setColor(cfg['ui_color2'])

#set the shader for all elements except the scrolld frame/canvas
self.setShader(path+'shaders/gui_v.glsl', path+'shaders/gui_f.glsl')

def quit(self, *args):
self.is_menu_hidden=True
messenger.send('client-quit')

def setTeam(self, team, event=None):
messenger.send('client-set-team',[team])
messenger.send('audio-sfx',['click', base.cam])
self.hideMenu()

def setDroidSlaves(self, droid_list):
for i, droid in enumerate(droid_list):
self.elements['droid_'+str(i)]=self.makeDropDownButton(path+'gui/orders_'+droid['orders']+'1.png',
Expand All @@ -113,6 +148,9 @@ def setDroidSlaves(self, droid_list):
def setGun(self, gun):
if gun==self.current_gun:
return
if globalClock.getRealTime()-self.last_gun_change_time < 0.2:
return
self.last_gun_change_time=globalClock.getRealTime()
current_gun_pos=self.elements['hud_weapon'+str(self.current_gun)].getPos()
gun_pos=self.elements['hud_weapon'+str(gun)].getPos()
LerpPosInterval(self.elements['hud_weapon'+str(self.current_gun)], 0.2, current_gun_pos-(16,0, 16)).start()
Expand Down Expand Up @@ -142,7 +180,7 @@ def showDroidsToOrder(self, order, event=None):
if order == 'support':
x=238
buttons=self.unhideElements('droid_')
self.hideElements('buy_gun_')
self.hideElements('buy_gun_', 'menu_quit', 'menu_team')
messenger.send('audio-sfx',['click', base.cam])
for button in buttons:
button.setX(x)
Expand Down Expand Up @@ -174,7 +212,7 @@ def showGunsToBuy(self, slot, event=None):
if slot == 3:
x=338
self.current_weapon_slot=slot
self.hideElements('menu_orders','droid_')
self.hideElements('menu_orders','droid_', 'menu_quit', 'menu_team')
buttons=self.unhideElements('buy_gun_')
messenger.send('audio-sfx',['click', base.cam])
for button in buttons:
Expand Down Expand Up @@ -207,20 +245,27 @@ def showElements(self, *args):
frame.hide()
return elements

def hideMenu(self, event=None):
self.is_menu_hidden=True
self.ui.hideSoftCursor()
self.showElements('hud_')

def showMenu(self, window_focus=None):
if window_focus is not None:
if window_focus == False and not self.ui.is_main_menu:
if self.is_menu_hidden:
self.is_menu_hidden=False
self.showElements('menu_', 'hud_score_')
self.current_weapon_slot==None
self.current_order=None
#self.hideCrosshair()
self.ui.showSoftCursor()
return
if self.is_menu_hidden:
self.is_menu_hidden=False
self.showElements('menu_', 'hud_score_')
self.current_weapon_slot=None
self.current_order=None
#self.hideCrosshair()
self.ui.showSoftCursor()
else:
Expand Down Expand Up @@ -251,6 +296,13 @@ def setShader(self, v_shader, f_shader):
for name, element in self.elements.items():
element.setAttrib(shader_attrib)
element.setShaderInput('gui_alpha_scale',cfg['hud_color'][3])
self.elements['menu_shadow'].setShaderInput('gui_alpha_scale',float(cfg['ui_menu_shadow']))

self.elements['menu_quit'].setShaderInput('gui_alpha_scale',0.7)
self.elements['menu_close'].setShaderInput('gui_alpha_scale',0.7)
self.elements['menu_team_red'].setShaderInput('gui_alpha_scale',0.7)
self.elements['menu_team_blue'].setShaderInput('gui_alpha_scale',0.7)


def makeFrame(self, txt, tex, parent, pos, size=(128, 128), text_pos=(0,0), font=None, align=None):
if align is None:
Expand All @@ -275,6 +327,64 @@ def makeFrame(self, txt, tex, parent, pos, size=(128, 128), text_pos=(0,0), font
frame.setTransparency(TransparencyAttrib.MAlpha)
return frame

def makeButton(self, txt, tex, parent, pos, size=(128, 128), text_pos=(0,0), cmd=None, arg=None, active_area=None, font=None, align=None):
if align is None:
align=TextNode.ACenter
if font is None:
font=self.ui.font_special
font_size=font.getPixelsPerUnit()
if active_area:
frame=DirectFrame(frameSize=_rec2d(size[0],size[1]),
frameColor=(1,1,1,1.0),
text=txt,
frameTexture=loadTex(tex),
text_scale=font_size,
text_font=font,
text_align=align,
text_pos=text_pos,
text_fg=cfg['hud_text_color'],
parent=parent)
_resetPivot(frame)
frame.setPos(_pos2d(pos[0],pos[1]))
frame.setColor(cfg['ui_color1'])
frame.setTransparency(TransparencyAttrib.MAlpha)
active_frame=DirectFrame(frameSize=_rec2d(active_area[0],active_area[1]),
frameColor=(0,1,0,0.0),
frameTexture=loadTex(path+'gui/empty_64.png'),
state=DGG.NORMAL,
parent=parent)
_resetPivot(active_frame)
if cmd:
if arg:
active_frame.bind(DGG.B1PRESS, cmd, [arg])
else:
active_frame.bind(DGG.B1PRESS, cmd)
active_frame.bind(DGG.WITHOUT, self.setGuiAlpha,[frame, 0.7])
active_frame.bind(DGG.WITHIN, self.setGuiAlpha, [frame, 1.0])
active_frame.setPos(_pos2d(pos[0]+active_area[2],pos[1]+active_area[3]))
active_frame.wrtReparentTo(frame)
else:
frame=DirectFrame(frameSize=_rec2d(size[0],size[1]),
frameColor=(1,1,1,1.0),
text=txt,
frameTexture=loadTex(tex),
text_scale=font_size,
text_font=font,
text_align=align,
text_pos=text_pos,
text_fg=cfg['hud_text_color'],
state=DGG.NORMAL,
parent=parent)
_resetPivot(frame)
frame.setPos(_pos2d(pos[0],pos[1]))
frame.setColor(cfg['hud_color'])
frame.setTransparency(TransparencyAttrib.MAlpha)
if cmd:
frame.bind(DGG.B1PRESS, cmd, [arg])
frame.bind(DGG.WITHOUT, self.setGuiAlpha,[frame, 0.7])
frame.bind(DGG.WITHIN, self.setGuiAlpha, [frame, 1.0])
return frame

def makeDropDownButton(self, tex, pos, parent, cmd, arg=None, txt='', active_area=(144,32)):
font=self.ui.font
font_size=font.getPixelsPerUnit()
Expand All @@ -284,8 +394,8 @@ def makeDropDownButton(self, tex, pos, parent, cmd, arg=None, txt='', active_are
frameTexture=loadTex(tex),
text_scale=font_size,
text_font=font,
text_align=TextNode.ACenter,
text_pos=(-150, 11),
text_align=TextNode.ALeft,
text_pos=(-190, 11),
text_fg=cfg['ui_color2'],
parent=parent)
_resetPivot(frame)
Expand Down
24 changes: 13 additions & 11 deletions source/lightmanager.py
Expand Up @@ -9,23 +9,25 @@ def __init__(self, max_lights=8, ambient=(0.2, 0.2, 0.25)):
max_lights=100
self.max_lights=max_lights
self.ambientLight(ambient)
self.shadow_node=None
self.update()

def directionalLight(self, hpr, color, shadow_map_size=1024):
shadow_map_size=int(shadow_map_size)
#a panada3d spot light has all that is needed to render shadows
#we use that as a shadow caster not as a light
self.shadow_node=render.attachNewNode('shadow_node')
self.shadow_caster = render.attachNewNode(Spotlight("Spot"))
if shadow_map_size>0:
self.shadow_caster.node().setShadowCaster(True, shadow_map_size, shadow_map_size)
#self.shadow_caster.node().showFrustum()
self.shadow_caster.node().getLens().setFov(60)
self.shadow_caster.node().getLens().setNearFar(50, 600)
#render.setLight(self.shadow_caster)
self.shadow_caster.setPos(render, 0, 0, 400)
self.shadow_caster.lookAt(0, 0, 0)
self.shadow_caster.wrtReparentTo(self.shadow_node)
if self.shadow_node is None:
self.shadow_node=render.attachNewNode('shadow_node')
self.shadow_caster = render.attachNewNode(Spotlight("Spot"))
if shadow_map_size>0:
self.shadow_caster.node().setShadowCaster(True, shadow_map_size, shadow_map_size)
#self.shadow_caster.node().showFrustum()
self.shadow_caster.node().getLens().setFov(60)
self.shadow_caster.node().getLens().setNearFar(50, 600)
#render.setLight(self.shadow_caster)
self.shadow_caster.setPos(render, 0, 0, 400)
self.shadow_caster.lookAt(0, 0, 0)
self.shadow_caster.wrtReparentTo(self.shadow_node)
self.shadow_node.setHpr(hpr)
light_vec=Vec3(self.shadow_caster.getPos(render)/400.0)
#light_vec.normalize() #???
Expand Down
3 changes: 2 additions & 1 deletion source/mainmenu.py
Expand Up @@ -412,12 +412,12 @@ def __init__(self, ui):
#mouse wheel handling
self.accept('wheel_up', self.scroll, [-1])
self.accept('wheel_down', self.scroll, [1])
self.accept('space', self._doDebugThing)

#set the shader for all elements except the scrolld frame/canvas
self.setShader(path+'shaders/gui_v.glsl', path+'shaders/gui_f.glsl')

def resetCamera(self):
base.cam.reparentTo(render)
base.cam.setPos(173.453, 8.02785, 143.622)
base.cam.setHpr(92.2724, -28.5096, -58.8269)

Expand Down Expand Up @@ -768,6 +768,7 @@ def show(self):
self.elements['fixed_frame_top_right'].show()
self.elements['fixed_frame_bottom_left'].show()
self.elements['fixed_frame_bottom_right'].show()
self.elements['fixed_scroll_canvas'].show()
for ring in self.rings:
ring[0].show()
ring[1].loop()
Expand Down
15 changes: 15 additions & 0 deletions source/pcdroid.py
Expand Up @@ -70,6 +70,18 @@ def update(self, task):
return task.cont

#functions
def disable(self):
self.camera_node.removeNode()
self.camera_gimbal.removeNode()
taskMgr.remove('pc_droid_update')
taskMgr.remove('pc_droid_net_update')

def setTeam(self, team):
if team=='red':
self.model.setShaderInput("glow_color", Vec3(0.94, 0.0, 0.1))
else:
self.model.setShaderInput("glow_color", Vec3(0.33,0.56, 1.0))

def _rotateCamH(self, t):
self.camera_node.setH(self.camera_node.getH()- t*cfg['mouse-speed'])

Expand All @@ -85,7 +97,10 @@ def rotate_control(self, h, p, dt):
LerpFunc(self._rotateCamP,fromData=0,toData=p, duration=cfg['mouse-lag']+(dt*10.0), blendType='easeInOut').start()

def lockCamera(self, offset=(0, -6, 1.2)):
self.camera_node = render.attachNewNode('camera_node')
self.camera_gimbal = self.camera_node.attachNewNode("cameraGimbal")
self.camera_node.setPos(render, self.node.getPos(render))
base.cam.reparentTo(render)
base.cam.setPos(render, self.node.getPos(render))
base.cam.setHpr(render, 0,0,0)
base.cam.setPos(base.cam, offset)
Expand Down
3 changes: 3 additions & 0 deletions source/skybox.py
Expand Up @@ -23,6 +23,9 @@ def __init__(self, light_manager):
self.skydome.reparentTo(render)
self.skydome.hide()

def hide(self):
self.skydome.hide()

def show(self):
self.skydome.show()

Expand Down
3 changes: 3 additions & 0 deletions source/ui.py
Expand Up @@ -134,6 +134,9 @@ def getMappedKey(self, key):
else:
return mapped_keyname

def unbindKeys(self):
self.ignoreAll()

def bindKeys(self):
self.ignoreAll()
self.accept(self.getMappedKey(cfg['key-back']), self.key_map.__setitem__, ["back", True])
Expand Down

0 comments on commit cc378ac

Please sign in to comment.