If ATL wouldn't give the desired effect, then it's possible to do with Creator-Defined Displayables:
https://www.renpy.org/doc/html/cdd.html
But I'm not sure that it's an easy way. It would be something like:
Code: Select all
init python:
class SmoothHover(renpy.Displayable):
""" Gives animated hovering / unhovering.
Usage: add SmoothHover(idle_image, hover_image)
"""
def __init__(self, i_idle, i_hover, **kwargs):
super(SmoothHover, self).__init__(**kwargs)
self.i_idle = renpy.displayable(i_idle)
self.i_hover = renpy.displayable(i_hover)
self.width = 0
self.height = 0
self.hover = False
#self.time = 0.0 - can be used to customize alpha changing function
self.alpha = 0.0
def render(self, width, height, st, at):
# Create idle picture and store its size:
idle_render = renpy.render(self.i_idle, width, height, st, at)
self.width, self.height = idle_render.get_size()
# Put that picture into RenPy canvas:
render = renpy.Render(self.width, self.height)
render.blit(idle_render, (0, 0))
# Check if hover overlay is necessary:
if self.hover:
# Make a (less & less transparent) hover overlay:
self.alpha += 0.1
if self.alpha > 1.0:
self.alpha = 1.0
t = Transform(child=self.i_hover, alpha=self.alpha)
# Put it into RenPy canvas too:
hover_render = renpy.render(t, width, height, st, at)
render.blit(hover_render, (0, 0))
else:
# If not hovered (maybe not quite transparent hover overlay yet?)
if self.alpha > 0:
t = Transform(child=self.i_hover, alpha=self.alpha)
hover_render = renpy.render(t, width, height, st, at)
render.blit(hover_render, (0, 0))
self.alpha -= 0.1
if self.alpha < 0.0:
self.alpha = 0.0
return render
def event(self, ev, x, y, st):
# Detect mouse hovering and request redraws:
if 0 <= x <= self.width and 0 <= y <= self.height:
self.hover = True
if self.alpha < 1.0:
renpy.timeout(0.05)
renpy.redraw(self, 0.05)
else:
self.hover = False
if self.alpha > 0.0:
renpy.timeout(0.05)
renpy.redraw(self, 0.05)
screen main_menu():
tag menu
add gui.main_menu_background
use navigation
button:
add SmoothHover("gui/discord_idle.png", "gui/discord_hover.png")
xpos 960 ypos 540 xanchor 0.5 yanchor 0.5