165 lines
5.2 KiB
Python
165 lines
5.2 KiB
Python
#!/usr/bin/env python3
|
|
"""Animation System Demo - Shows all animation capabilities"""
|
|
|
|
import mcrfpy
|
|
import math
|
|
|
|
# Create main scene
|
|
mcrfpy.createScene("animation_demo")
|
|
ui = mcrfpy.sceneUI("animation_demo")
|
|
mcrfpy.setScene("animation_demo")
|
|
|
|
# Title
|
|
title = mcrfpy.Caption((400, 30), "McRogueFace Animation System Demo", mcrfpy.default_font)
|
|
title.size = 24
|
|
title.fill_color = (255, 255, 255)
|
|
# Note: centered property doesn't exist for Caption
|
|
ui.append(title)
|
|
|
|
# 1. Position Animation Demo
|
|
pos_frame = mcrfpy.Frame(50, 100, 80, 80)
|
|
pos_frame.fill_color = (255, 100, 100)
|
|
pos_frame.outline = 2
|
|
ui.append(pos_frame)
|
|
|
|
pos_label = mcrfpy.Caption((50, 80), "Position Animation", mcrfpy.default_font)
|
|
pos_label.fill_color = (200, 200, 200)
|
|
ui.append(pos_label)
|
|
|
|
# 2. Size Animation Demo
|
|
size_frame = mcrfpy.Frame(200, 100, 50, 50)
|
|
size_frame.fill_color = (100, 255, 100)
|
|
size_frame.outline = 2
|
|
ui.append(size_frame)
|
|
|
|
size_label = mcrfpy.Caption((200, 80), "Size Animation", mcrfpy.default_font)
|
|
size_label.fill_color = (200, 200, 200)
|
|
ui.append(size_label)
|
|
|
|
# 3. Color Animation Demo
|
|
color_frame = mcrfpy.Frame(350, 100, 80, 80)
|
|
color_frame.fill_color = (255, 0, 0)
|
|
ui.append(color_frame)
|
|
|
|
color_label = mcrfpy.Caption((350, 80), "Color Animation", mcrfpy.default_font)
|
|
color_label.fill_color = (200, 200, 200)
|
|
ui.append(color_label)
|
|
|
|
# 4. Easing Functions Demo
|
|
easing_y = 250
|
|
easing_frames = []
|
|
easings = ["linear", "easeIn", "easeOut", "easeInOut", "easeInElastic", "easeOutBounce"]
|
|
|
|
for i, easing in enumerate(easings):
|
|
x = 50 + i * 120
|
|
|
|
frame = mcrfpy.Frame(x, easing_y, 20, 20)
|
|
frame.fill_color = (100, 150, 255)
|
|
ui.append(frame)
|
|
easing_frames.append((frame, easing))
|
|
|
|
label = mcrfpy.Caption((x, easing_y - 20), easing, mcrfpy.default_font)
|
|
label.size = 12
|
|
label.fill_color = (200, 200, 200)
|
|
ui.append(label)
|
|
|
|
# 5. Complex Animation Demo
|
|
complex_frame = mcrfpy.Frame(300, 350, 100, 100)
|
|
complex_frame.fill_color = (128, 128, 255)
|
|
complex_frame.outline = 3
|
|
ui.append(complex_frame)
|
|
|
|
complex_label = mcrfpy.Caption((300, 330), "Complex Multi-Property", mcrfpy.default_font)
|
|
complex_label.fill_color = (200, 200, 200)
|
|
ui.append(complex_label)
|
|
|
|
# Start animations
|
|
def start_animations(runtime):
|
|
# 1. Position animation - back and forth
|
|
x_anim = mcrfpy.Animation("x", 500.0, 3.0, "easeInOut")
|
|
x_anim.start(pos_frame)
|
|
|
|
# 2. Size animation - pulsing
|
|
w_anim = mcrfpy.Animation("w", 150.0, 2.0, "easeInOut")
|
|
h_anim = mcrfpy.Animation("h", 150.0, 2.0, "easeInOut")
|
|
w_anim.start(size_frame)
|
|
h_anim.start(size_frame)
|
|
|
|
# 3. Color animation - rainbow cycle
|
|
color_anim = mcrfpy.Animation("fill_color", (0, 255, 255, 255), 2.0, "linear")
|
|
color_anim.start(color_frame)
|
|
|
|
# 4. Easing demos - all move up with different easings
|
|
for frame, easing in easing_frames:
|
|
y_anim = mcrfpy.Animation("y", 150.0, 2.0, easing)
|
|
y_anim.start(frame)
|
|
|
|
# 5. Complex animation - multiple properties
|
|
cx_anim = mcrfpy.Animation("x", 500.0, 4.0, "easeInOut")
|
|
cy_anim = mcrfpy.Animation("y", 400.0, 4.0, "easeOut")
|
|
cw_anim = mcrfpy.Animation("w", 150.0, 4.0, "easeInElastic")
|
|
ch_anim = mcrfpy.Animation("h", 150.0, 4.0, "easeInElastic")
|
|
outline_anim = mcrfpy.Animation("outline", 10.0, 4.0, "linear")
|
|
|
|
cx_anim.start(complex_frame)
|
|
cy_anim.start(complex_frame)
|
|
cw_anim.start(complex_frame)
|
|
ch_anim.start(complex_frame)
|
|
outline_anim.start(complex_frame)
|
|
|
|
# Individual color component animations
|
|
r_anim = mcrfpy.Animation("fill_color.r", 255.0, 4.0, "easeInOut")
|
|
g_anim = mcrfpy.Animation("fill_color.g", 100.0, 4.0, "easeInOut")
|
|
b_anim = mcrfpy.Animation("fill_color.b", 50.0, 4.0, "easeInOut")
|
|
|
|
r_anim.start(complex_frame)
|
|
g_anim.start(complex_frame)
|
|
b_anim.start(complex_frame)
|
|
|
|
print("All animations started!")
|
|
|
|
# Reverse some animations
|
|
def reverse_animations(runtime):
|
|
# Position back
|
|
x_anim = mcrfpy.Animation("x", 50.0, 3.0, "easeInOut")
|
|
x_anim.start(pos_frame)
|
|
|
|
# Size back
|
|
w_anim = mcrfpy.Animation("w", 50.0, 2.0, "easeInOut")
|
|
h_anim = mcrfpy.Animation("h", 50.0, 2.0, "easeInOut")
|
|
w_anim.start(size_frame)
|
|
h_anim.start(size_frame)
|
|
|
|
# Color cycle continues
|
|
color_anim = mcrfpy.Animation("fill_color", (255, 0, 255, 255), 2.0, "linear")
|
|
color_anim.start(color_frame)
|
|
|
|
# Easing frames back down
|
|
for frame, easing in easing_frames:
|
|
y_anim = mcrfpy.Animation("y", 250.0, 2.0, easing)
|
|
y_anim.start(frame)
|
|
|
|
# Continue color cycle
|
|
def cycle_colors(runtime):
|
|
color_anim = mcrfpy.Animation("fill_color", (255, 255, 0, 255), 2.0, "linear")
|
|
color_anim.start(color_frame)
|
|
|
|
# Info text
|
|
info = mcrfpy.Caption((400, 550), "Watch as different properties animate with various easing functions!", mcrfpy.default_font)
|
|
info.fill_color = (255, 255, 200)
|
|
# Note: centered property doesn't exist for Caption
|
|
ui.append(info)
|
|
|
|
# Schedule animations
|
|
mcrfpy.setTimer("start", start_animations, 500)
|
|
mcrfpy.setTimer("reverse", reverse_animations, 4000)
|
|
mcrfpy.setTimer("cycle", cycle_colors, 2500)
|
|
|
|
# Exit handler
|
|
def on_key(key):
|
|
if key == "Escape":
|
|
mcrfpy.exit()
|
|
|
|
mcrfpy.keypressScene(on_key)
|
|
|
|
print("Animation demo started! Press Escape to exit.") |