Wardrobe 2.0 - Wheelmenu
* Implemented wheelmenu for the wardrobe * Implemented hide/show functions for singular items * Implemented quick jumps * Fixed wheelmenu overflowing screen positions (needed a clamp)
This commit is contained in:
parent
06797f9b3c
commit
93c899cd44
@ -234,8 +234,9 @@ init python:
|
|||||||
hbox = []
|
hbox = []
|
||||||
overlay = []
|
overlay = []
|
||||||
|
|
||||||
action = [Function(wardrobe.equip, self), self.build_button]
|
action = [Function(wardrobe.wheelmenu, self), self.build_button]
|
||||||
unhovered = None
|
unhovered = None
|
||||||
|
alternate = None
|
||||||
|
|
||||||
if is_inadequate:
|
if is_inadequate:
|
||||||
warnings.append("Character level too low")
|
warnings.append("Character level too low")
|
||||||
@ -270,7 +271,13 @@ init python:
|
|||||||
if is_inadequate:
|
if is_inadequate:
|
||||||
style = "wardrobe_item_button_inadequate"
|
style = "wardrobe_item_button_inadequate"
|
||||||
|
|
||||||
return Button(child=child, focus_mask=None, xysize=(96, 96), action=action, tooltip=("\n".join(warnings)), unhovered=unhovered, style=style, selected=is_equipped)
|
if is_equipped:
|
||||||
|
alternate = Function(wardrobe.jump_to_item, self, "color_picker")
|
||||||
|
else:
|
||||||
|
alternate = [Function(wardrobe.equip, self), Function(wardrobe.jump_to_item, self, "color_picker")]
|
||||||
|
|
||||||
|
|
||||||
|
return Button(child=child, focus_mask=None, xysize=(96, 96), action=action, tooltip=("\n".join(warnings)), unhovered=unhovered, style=style, selected=is_equipped, alternate=alternate)
|
||||||
|
|
||||||
@functools.cache
|
@functools.cache
|
||||||
def build_button(self, _=None):
|
def build_button(self, _=None):
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
init python in wheelmenu:
|
init python in wheelmenu:
|
||||||
import math
|
import math
|
||||||
|
|
||||||
def pos(num_buttons):
|
|
||||||
num_buttons = max(num_buttons, 2)
|
|
||||||
reference_num_buttons = 32
|
reference_num_buttons = 32
|
||||||
reference_radius = 0.5
|
reference_radius = 0.5
|
||||||
|
|
||||||
|
def pos(num_buttons):
|
||||||
|
num_buttons = max(num_buttons, 2)
|
||||||
radius = reference_radius * (num_buttons / reference_num_buttons) ** 0.5
|
radius = reference_radius * (num_buttons / reference_num_buttons) ** 0.5
|
||||||
angle_step = 2 * math.pi / num_buttons
|
angle_step = 2 * math.pi / num_buttons
|
||||||
start_angle = angle_step / 2 if num_buttons % 2 else 0
|
start_angle = angle_step / 2 if num_buttons % 2 else 0
|
||||||
@ -28,6 +29,14 @@ init python in wheelmenu:
|
|||||||
else:
|
else:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
def clamp_to_screen(num_buttons, pos):
|
||||||
|
num_buttons = max(num_buttons, 2)
|
||||||
|
radius = reference_radius * (num_buttons / reference_num_buttons) ** 0.5
|
||||||
|
diameter = int(radius * min(renpy.store.config.screen_width, renpy.store.config.screen_height))
|
||||||
|
x = max(diameter, min(renpy.store.config.screen_width - diameter, pos[0]))
|
||||||
|
y = max(diameter, min(renpy.store.config.screen_height - diameter, pos[1]))
|
||||||
|
return (x, y)
|
||||||
|
|
||||||
init python:
|
init python:
|
||||||
def create_wheelmenu(elements):
|
def create_wheelmenu(elements):
|
||||||
# Proxy function; We cannot evaluate in a named store without side effects.
|
# Proxy function; We cannot evaluate in a named store without side effects.
|
||||||
@ -59,16 +68,16 @@ label wheelmenu(btns, ret, pos=None):
|
|||||||
|
|
||||||
jump expression ret
|
jump expression ret
|
||||||
|
|
||||||
screen wheelmenu(btns, pos):
|
screen wheelmenu(btns, pos=None, close_action=Return("Close")):
|
||||||
layer "interface"
|
layer "interface"
|
||||||
tag wheelmenu
|
tag wheelmenu
|
||||||
zorder 1
|
zorder 1
|
||||||
style_prefix "wheelmenu"
|
style_prefix "wheelmenu"
|
||||||
|
|
||||||
$ mpos = renpy.get_mouse_pos()
|
$ mpos = renpy.get_mouse_pos()
|
||||||
default start_pos = pos or mpos
|
default start_pos = wheelmenu.clamp_to_screen(len(btns), pos or mpos)
|
||||||
|
|
||||||
use close_button_background(keysym="game_menu")
|
use close_button_background(action=close_action, keysym="game_menu")
|
||||||
|
|
||||||
window at wheelmenu_anim:
|
window at wheelmenu_anim:
|
||||||
id "wheelmenu"
|
id "wheelmenu"
|
||||||
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user