#!/usr/bin/env python3 """ McRogueFace Animation Sizzle Reel v2 ==================================== Fixed version with proper API usage for animations and collections. """ import mcrfpy # Configuration SCENE_WIDTH = 1280 SCENE_HEIGHT = 720 DEMO_DURATION = 5.0 # Duration for each demo section # 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 current demo state current_demo = 0 subtitle = None demo_objects = [] # Track objects from current demo def create_demo_scene(): """Create the main demo scene with title""" mcrfpy.createScene("sizzle_reel") mcrfpy.setScene("sizzle_reel") ui = mcrfpy.sceneUI("sizzle_reel") # Title caption title = mcrfpy.Caption("McRogueFace Animation Sizzle Reel", SCENE_WIDTH/2 - 200, 20) title.fill_color = mcrfpy.Color(255, 255, 0) title.outline = 2 title.outline_color = mcrfpy.Color(0, 0, 0) ui.append(title) # Subtitle showing current demo global subtitle subtitle = mcrfpy.Caption("Initializing...", SCENE_WIDTH/2 - 150, 60) subtitle.fill_color = mcrfpy.Color(200, 200, 200) ui.append(subtitle) return ui def demo_frame_basic_animations(): """Demo 1: Basic frame animations - position, size, colors""" global demo_objects demo_objects = [] ui = mcrfpy.sceneUI("sizzle_reel") subtitle.text = "Demo 1: Frame Basic Animations (Position, Size, Colors)" # Create test frame frame = mcrfpy.Frame(100, 150, 200, 100) frame.fill_color = mcrfpy.Color(50, 50, 150) frame.outline = 3 frame.outline_color = mcrfpy.Color(255, 255, 255) ui.append(frame) demo_objects.append(frame) # Position animations with different easings x_anim = mcrfpy.Animation("x", 800.0, 2.0, "easeInOutBack") y_anim = mcrfpy.Animation("y", 400.0, 2.0, "easeInOutElastic") x_anim.start(frame) y_anim.start(frame) # Size animations w_anim = mcrfpy.Animation("w", 400.0, 3.0, "easeInOutCubic") h_anim = mcrfpy.Animation("h", 200.0, 3.0, "easeInOutCubic") w_anim.start(frame) h_anim.start(frame) # Color animations - use tuples instead of Color objects fill_anim = mcrfpy.Animation("fill_color", (255, 100, 50, 200), 4.0, "easeInOutSine") outline_anim = mcrfpy.Animation("outline_color", (0, 255, 255, 255), 4.0, "easeOutBounce") fill_anim.start(frame) outline_anim.start(frame) # Outline thickness animation thickness_anim = mcrfpy.Animation("outline", 10.0, 4.5, "easeInOutQuad") thickness_anim.start(frame) def demo_caption_animations(): """Demo 2: Caption text animations and effects""" global demo_objects demo_objects = [] ui = mcrfpy.sceneUI("sizzle_reel") subtitle.text = "Demo 2: Caption Animations (Text, Color, Position)" # Basic caption with position animation caption1 = mcrfpy.Caption("Moving Text!", 100, 200) caption1.fill_color = mcrfpy.Color(255, 255, 255) caption1.outline = 1 ui.append(caption1) demo_objects.append(caption1) # Animate across screen with bounce x_anim = mcrfpy.Animation("x", 900.0, 3.0, "easeOutBounce") x_anim.start(caption1) # Color cycling caption caption2 = mcrfpy.Caption("Rainbow Colors", 400, 300) caption2.outline = 2 ui.append(caption2) demo_objects.append(caption2) # Cycle through colors using tuples color_anim1 = mcrfpy.Animation("fill_color", (255, 0, 0, 255), 1.0, "linear") color_anim1.start(caption2) # Schedule color changes def change_to_green(rt): color_anim2 = mcrfpy.Animation("fill_color", (0, 255, 0, 255), 1.0, "linear") color_anim2.start(caption2) def change_to_blue(rt): color_anim3 = mcrfpy.Animation("fill_color", (0, 0, 255, 255), 1.0, "linear") color_anim3.start(caption2) def change_to_white(rt): color_anim4 = mcrfpy.Animation("fill_color", (255, 255, 255, 255), 1.0, "linear") color_anim4.start(caption2) mcrfpy.setTimer("color2", change_to_green, 1000) mcrfpy.setTimer("color3", change_to_blue, 2000) mcrfpy.setTimer("color4", change_to_white, 3000) # Typewriter effect caption caption3 = mcrfpy.Caption("", 100, 400) caption3.fill_color = mcrfpy.Color(0, 255, 255) ui.append(caption3) demo_objects.append(caption3) typewriter = mcrfpy.Animation("text", "This text appears one character at a time...", 3.0, "linear") typewriter.start(caption3) def demo_easing_showcase(): """Demo 3: Showcase different easing functions""" global demo_objects demo_objects = [] ui = mcrfpy.sceneUI("sizzle_reel") subtitle.text = "Demo 3: Easing Functions Showcase" # Create small frames for each easing function frames_per_row = 6 frame_width = 180 spacing = 10 # Show first 12 easings for i, easing in enumerate(EASING_FUNCTIONS[:12]): row = i // frames_per_row col = i % frames_per_row x = 50 + col * (frame_width + spacing) y = 150 + row * (80 + spacing) # Create indicator frame frame = mcrfpy.Frame(x, y, 20, 20) frame.fill_color = mcrfpy.Color(100, 200, 255) frame.outline = 1 ui.append(frame) demo_objects.append(frame) # Label label = mcrfpy.Caption(easing[:8], x, y - 20) # Truncate long names label.fill_color = mcrfpy.Color(200, 200, 200) ui.append(label) demo_objects.append(label) # Animate using this easing move_anim = mcrfpy.Animation("x", float(x + frame_width - 20), 3.0, easing) move_anim.start(frame) def demo_performance_stress_test(): """Demo 4: Performance test with many simultaneous animations""" global demo_objects demo_objects = [] ui = mcrfpy.sceneUI("sizzle_reel") subtitle.text = "Demo 4: Performance Test (50+ Simultaneous Animations)" # Create many small objects with different animations num_objects = 50 for i in range(num_objects): # Starting position x = 100 + (i % 10) * 100 y = 150 + (i // 10) * 80 # Create small frame size = 20 + (i % 3) * 10 frame = mcrfpy.Frame(x, y, size, size) # Random color r = (i * 37) % 256 g = (i * 73) % 256 b = (i * 113) % 256 frame.fill_color = mcrfpy.Color(r, g, b, 200) frame.outline = 1 ui.append(frame) demo_objects.append(frame) # Random animation properties target_x = 100 + (i % 8) * 120 target_y = 150 + (i // 8) * 100 duration = 2.0 + (i % 30) * 0.1 easing = EASING_FUNCTIONS[i % len(EASING_FUNCTIONS)] # Start multiple animations per object x_anim = mcrfpy.Animation("x", float(target_x), duration, easing) y_anim = mcrfpy.Animation("y", float(target_y), duration, easing) opacity_anim = mcrfpy.Animation("opacity", 0.3 + (i % 7) * 0.1, duration, "easeInOutSine") x_anim.start(frame) y_anim.start(frame) opacity_anim.start(frame) # Performance counter perf_caption = mcrfpy.Caption(f"Animating {num_objects * 3} properties simultaneously", 350, 600) perf_caption.fill_color = mcrfpy.Color(255, 255, 0) ui.append(perf_caption) demo_objects.append(perf_caption) def clear_scene(): """Clear the scene except title and subtitle""" global demo_objects ui = mcrfpy.sceneUI("sizzle_reel") # Remove all demo objects for obj in demo_objects: try: # Find index of object for i in range(len(ui)): if ui[i] is obj: ui.remove(ui[i]) break except: pass # Object might already be removed demo_objects = [] # Clean up any timers for timer_name in ["color2", "color3", "color4"]: try: mcrfpy.delTimer(timer_name) except: pass def run_demo_sequence(runtime): """Run through all demos""" global current_demo # Clear previous demo clear_scene() # Demo list demos = [ demo_frame_basic_animations, demo_caption_animations, demo_easing_showcase, demo_performance_stress_test ] if current_demo < len(demos): # Run current demo demos[current_demo]() current_demo += 1 # Schedule next demo if current_demo < len(demos): mcrfpy.setTimer("next_demo", run_demo_sequence, int(DEMO_DURATION * 1000)) else: # Final demo completed def show_complete(rt): subtitle.text = "Animation Showcase Complete!" complete = mcrfpy.Caption("All animation types demonstrated!", 400, 350) complete.fill_color = mcrfpy.Color(0, 255, 0) complete.outline = 2 ui = mcrfpy.sceneUI("sizzle_reel") ui.append(complete) mcrfpy.setTimer("complete", show_complete, 3000) # Initialize scene print("Starting McRogueFace Animation Sizzle Reel v2...") print("This will demonstrate animation types on various objects.") ui = create_demo_scene() # Start the demo sequence after a short delay mcrfpy.setTimer("start_demos", run_demo_sequence, 500)