#!/usr/bin/env python3 """ McRogueFace Animation Sizzle Reel - Final Version ================================================= Complete demonstration of all animation capabilities. This version works properly with the game loop and avoids API issues. """ import mcrfpy # Configuration DEMO_DURATION = 4.0 # Duration for each demo # All available easing functions EASING_FUNCTIONS = [ "linear", "easeIn", "easeOut", "easeInOut", "easeInQuad", "easeOutQuad", "easeInOutQuad", "easeInCubic", "easeOutCubic", "easeInOutCubic", "easeInQuart", "easeOutQuart", "easeInOutQuart", "easeInSine", "easeOutSine", "easeInOutSine", "easeInExpo", "easeOutExpo", "easeInOutExpo", "easeInCirc", "easeOutCirc", "easeInOutCirc", "easeInElastic", "easeOutElastic", "easeInOutElastic", "easeInBack", "easeOutBack", "easeInOutBack", "easeInBounce", "easeOutBounce", "easeInOutBounce" ] # Track demo state current_demo = 0 subtitle = None def create_scene(): """Create the demo scene""" mcrfpy.createScene("demo") mcrfpy.setScene("demo") ui = mcrfpy.sceneUI("demo") # Title title = mcrfpy.Caption("Animation Sizzle Reel", 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) return ui def demo1_frame_animations(): """Frame position, size, and color animations""" ui = mcrfpy.sceneUI("demo") subtitle.text = "Demo 1: Frame Animations" # Create frame f = mcrfpy.Frame(100, 150, 200, 100) f.fill_color = mcrfpy.Color(50, 50, 150) f.outline = 3 f.outline_color = mcrfpy.Color(255, 255, 255) ui.append(f) # Animate properties mcrfpy.Animation("x", 600.0, 2.0, "easeInOutBack").start(f) mcrfpy.Animation("y", 300.0, 2.0, "easeInOutElastic").start(f) mcrfpy.Animation("w", 300.0, 2.5, "easeInOutCubic").start(f) mcrfpy.Animation("h", 150.0, 2.5, "easeInOutCubic").start(f) mcrfpy.Animation("fill_color", (255, 100, 50, 200), 3.0, "easeInOutSine").start(f) mcrfpy.Animation("outline", 8.0, 3.0, "easeInOutQuad").start(f) def demo2_caption_animations(): """Caption movement and text effects""" ui = mcrfpy.sceneUI("demo") subtitle.text = "Demo 2: Caption Animations" # Moving caption c1 = mcrfpy.Caption("Bouncing Text!", 100, 200) c1.fill_color = mcrfpy.Color(255, 255, 255) ui.append(c1) mcrfpy.Animation("x", 800.0, 3.0, "easeOutBounce").start(c1) # Color cycling c2 = mcrfpy.Caption("Color Cycle", 400, 300) c2.outline = 2 ui.append(c2) mcrfpy.Animation("fill_color", (255, 0, 0, 255), 1.0, "linear").start(c2) # Typewriter effect c3 = mcrfpy.Caption("", 100, 400) c3.fill_color = mcrfpy.Color(0, 255, 255) ui.append(c3) mcrfpy.Animation("text", "Typewriter effect animation...", 3.0, "linear").start(c3) def demo3_easing_showcase(): """Show all 30 easing functions""" ui = mcrfpy.sceneUI("demo") subtitle.text = "Demo 3: All 30 Easing Functions" # Create a small frame for each easing for i, easing in enumerate(EASING_FUNCTIONS[:15]): # First 15 row = i // 5 col = i % 5 x = 100 + col * 200 y = 150 + row * 100 # Frame f = mcrfpy.Frame(x, y, 20, 20) f.fill_color = mcrfpy.Color(100, 150, 255) ui.append(f) # Label label = mcrfpy.Caption(easing[:10], x, y - 20) label.fill_color = mcrfpy.Color(200, 200, 200) ui.append(label) # Animate with this easing mcrfpy.Animation("x", float(x + 150), 3.0, easing).start(f) def demo4_performance(): """Many simultaneous animations""" ui = mcrfpy.sceneUI("demo") subtitle.text = "Demo 4: 50+ Simultaneous Animations" for i in range(50): x = 100 + (i % 10) * 100 y = 150 + (i // 10) * 100 f = mcrfpy.Frame(x, y, 30, 30) f.fill_color = mcrfpy.Color((i*37)%256, (i*73)%256, (i*113)%256) ui.append(f) # Animate to random position target_x = 150 + (i % 8) * 110 target_y = 200 + (i // 8) * 90 easing = EASING_FUNCTIONS[i % len(EASING_FUNCTIONS)] mcrfpy.Animation("x", float(target_x), 2.5, easing).start(f) mcrfpy.Animation("y", float(target_y), 2.5, easing).start(f) mcrfpy.Animation("opacity", 0.3 + (i%7)*0.1, 2.0, "easeInOutSine").start(f) def clear_demo_objects(): """Clear scene except title and subtitle""" ui = mcrfpy.sceneUI("demo") # Keep removing items after the first 2 (title and subtitle) while len(ui) > 2: # Remove the last item ui.remove(ui[len(ui)-1]) def next_demo(runtime): """Run the next demo""" global current_demo clear_demo_objects() demos = [ demo1_frame_animations, demo2_caption_animations, demo3_easing_showcase, demo4_performance ] if current_demo < len(demos): demos[current_demo]() current_demo += 1 if current_demo < len(demos): mcrfpy.setTimer("next", next_demo, int(DEMO_DURATION * 1000)) else: subtitle.text = "Demo Complete!" # Initialize print("Starting Animation Sizzle Reel...") create_scene() mcrfpy.setTimer("start", next_demo, 500)