103 lines
3.3 KiB
Text
103 lines
3.3 KiB
Text
# Copyright 2004-2019 Tom Rothamel <pytom@bishoujo.us>
|
|
#
|
|
# Permission is hereby granted, free of charge, to any person
|
|
# obtaining a copy of this software and associated documentation files
|
|
# (the "Software"), to deal in the Software without restriction,
|
|
# including without limitation the rights to use, copy, modify, merge,
|
|
# publish, distribute, sublicense, and/or sell copies of the Software,
|
|
# and to permit persons to whom the Software is furnished to do so,
|
|
# subject to the following conditions:
|
|
#
|
|
# The above copyright notice and this permission notice shall be
|
|
# included in all copies or substantial portions of the Software.
|
|
#
|
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
|
|
init python:
|
|
|
|
layout.provides('navigation')
|
|
|
|
# The ground image.
|
|
config.navigation_ground = None
|
|
|
|
# The idle image.
|
|
config.navigation_idle = None
|
|
|
|
# The hover image.
|
|
config.navigation_hover = None
|
|
|
|
# The selected idle image.
|
|
config.navigation_selected_idle = None
|
|
|
|
# The selected hover image.
|
|
config.navigation_selected_hover = None
|
|
|
|
# The hotspots. Each hotspot is defined by a tuple giving:
|
|
# - The x-coordinate of the left side.
|
|
# - The y-coordinate of the top side.
|
|
# - The x-coordinate of the right side.
|
|
# - The y-coordinate of the bottoms side.
|
|
# - The name of the game menu button this is equivalent to.
|
|
config.navigation_hotspots = None
|
|
|
|
def _navigation(screen=None):
|
|
|
|
# Display the game menu background
|
|
ui.window(style=style.gm_root[screen])
|
|
ui.null()
|
|
|
|
if screen is None:
|
|
return
|
|
|
|
# A map from button name to game menu information.
|
|
gm = dict()
|
|
|
|
for e in config.game_menu:
|
|
screen_ = e[0]
|
|
name_ = e[1]
|
|
act = e[2]
|
|
enable = e[3]
|
|
|
|
gm[name_] = (screen_, act, enable)
|
|
|
|
ui.fixed(style='imagemap')
|
|
ui.image(config.navigation_ground)
|
|
|
|
for (x0, y0, x1, y1, name) in config.navigation_hotspots:
|
|
|
|
if name not in gm:
|
|
raise Exception("%r was used in a game menu hotspot, but isn't the name of a game menu button." % name)
|
|
|
|
screen_, act, enable = gm[name]
|
|
|
|
if not eval(enable):
|
|
continue
|
|
|
|
if screen_ == screen:
|
|
idle = config.navigation_selected_idle
|
|
hover = config.navigation_selected_hover
|
|
else:
|
|
idle = config.navigation_idle
|
|
hover = config.navigation_hover
|
|
|
|
ui.imagebutton(
|
|
LiveCrop((x0, y0, x1-x0, y1-y0), idle),
|
|
LiveCrop((x0, y0, x1-x0, y1-y0), hover),
|
|
clicked=act,
|
|
style='imagemap_button',
|
|
xpos=x0,
|
|
ypos=y0,
|
|
xanchor=0,
|
|
yanchor=0,
|
|
focus_mask=True,
|
|
)
|
|
|
|
ui.close()
|
|
|
|
layout.navigation = _navigation
|