146 lines
3.8 KiB
Python
146 lines
3.8 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
McRogueFace Animation Demo - Safe Version
|
|
=========================================
|
|
|
|
A safer, simpler version that demonstrates animations without crashes.
|
|
"""
|
|
|
|
import mcrfpy
|
|
import sys
|
|
|
|
# Configuration
|
|
DEMO_DURATION = 4.0
|
|
|
|
# Track state
|
|
current_demo = 0
|
|
subtitle = None
|
|
demo_items = []
|
|
|
|
def create_scene():
|
|
"""Create the demo scene"""
|
|
mcrfpy.createScene("demo")
|
|
mcrfpy.setScene("demo")
|
|
|
|
ui = mcrfpy.sceneUI("demo")
|
|
|
|
# Title
|
|
title = mcrfpy.Caption("Animation Demo", 500, 20)
|
|
title.fill_color = mcrfpy.Color(255, 255, 0)
|
|
title.outline = 2
|
|
ui.append(title)
|
|
|
|
# Subtitle
|
|
global subtitle
|
|
subtitle = mcrfpy.Caption("Starting...", 450, 60)
|
|
subtitle.fill_color = mcrfpy.Color(200, 200, 200)
|
|
ui.append(subtitle)
|
|
|
|
def clear_demo_items():
|
|
"""Clear demo items from scene"""
|
|
global demo_items
|
|
ui = mcrfpy.sceneUI("demo")
|
|
|
|
# Remove demo items by tracking what we added
|
|
for item in demo_items:
|
|
try:
|
|
# Find index of item
|
|
for i in range(len(ui)):
|
|
if i >= 2: # Skip title and subtitle
|
|
ui.remove(i)
|
|
break
|
|
except:
|
|
pass
|
|
|
|
demo_items = []
|
|
|
|
def demo1_basic():
|
|
"""Basic frame animations"""
|
|
global demo_items
|
|
clear_demo_items()
|
|
|
|
ui = mcrfpy.sceneUI("demo")
|
|
subtitle.text = "Demo 1: Basic Frame Animations"
|
|
|
|
# Create frame
|
|
f = mcrfpy.Frame(100, 150, 200, 100)
|
|
f.fill_color = mcrfpy.Color(50, 50, 150)
|
|
f.outline = 3
|
|
ui.append(f)
|
|
demo_items.append(f)
|
|
|
|
# Simple animations
|
|
mcrfpy.Animation("x", 600.0, 2.0, "easeInOut").start(f)
|
|
mcrfpy.Animation("w", 300.0, 2.0, "easeInOut").start(f)
|
|
mcrfpy.Animation("fill_color", (255, 100, 50, 200), 3.0, "linear").start(f)
|
|
|
|
def demo2_caption():
|
|
"""Caption animations"""
|
|
global demo_items
|
|
clear_demo_items()
|
|
|
|
ui = mcrfpy.sceneUI("demo")
|
|
subtitle.text = "Demo 2: Caption Animations"
|
|
|
|
# Moving caption
|
|
c1 = mcrfpy.Caption("Moving Text!", 100, 200)
|
|
c1.fill_color = mcrfpy.Color(255, 255, 255)
|
|
ui.append(c1)
|
|
demo_items.append(c1)
|
|
|
|
mcrfpy.Animation("x", 700.0, 3.0, "easeOutBounce").start(c1)
|
|
|
|
# Typewriter
|
|
c2 = mcrfpy.Caption("", 100, 300)
|
|
c2.fill_color = mcrfpy.Color(0, 255, 255)
|
|
ui.append(c2)
|
|
demo_items.append(c2)
|
|
|
|
mcrfpy.Animation("text", "Typewriter effect...", 3.0, "linear").start(c2)
|
|
|
|
def demo3_multiple():
|
|
"""Multiple animations"""
|
|
global demo_items
|
|
clear_demo_items()
|
|
|
|
ui = mcrfpy.sceneUI("demo")
|
|
subtitle.text = "Demo 3: Multiple Animations"
|
|
|
|
# Create several frames
|
|
for i in range(5):
|
|
f = mcrfpy.Frame(100 + i * 120, 200, 80, 80)
|
|
f.fill_color = mcrfpy.Color(50 + i * 40, 100, 200 - i * 30)
|
|
ui.append(f)
|
|
demo_items.append(f)
|
|
|
|
# Animate each differently
|
|
target_y = 350 + i * 20
|
|
mcrfpy.Animation("y", float(target_y), 2.0, "easeInOut").start(f)
|
|
mcrfpy.Animation("opacity", 0.5, 3.0, "easeInOut").start(f)
|
|
|
|
def run_next_demo(runtime):
|
|
"""Run the next demo"""
|
|
global current_demo
|
|
|
|
demos = [demo1_basic, demo2_caption, demo3_multiple]
|
|
|
|
if current_demo < len(demos):
|
|
demos[current_demo]()
|
|
current_demo += 1
|
|
|
|
if current_demo < len(demos):
|
|
mcrfpy.setTimer("next", run_next_demo, int(DEMO_DURATION * 1000))
|
|
else:
|
|
subtitle.text = "Demo Complete!"
|
|
# Exit after a delay
|
|
def exit_program(rt):
|
|
print("Demo finished successfully!")
|
|
sys.exit(0)
|
|
mcrfpy.setTimer("exit", exit_program, 2000)
|
|
|
|
# Initialize
|
|
print("Starting Safe Animation Demo...")
|
|
create_scene()
|
|
|
|
# Start demos
|
|
mcrfpy.setTimer("start", run_next_demo, 500) |