81 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			81 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Python
		
	
	
	
#!/usr/bin/env python3
 | 
						|
"""Example of CORRECT test pattern using timer callbacks for automation"""
 | 
						|
import mcrfpy
 | 
						|
from mcrfpy import automation
 | 
						|
from datetime import datetime
 | 
						|
 | 
						|
def run_automation_tests():
 | 
						|
    """This runs AFTER the game loop has started and rendered frames"""
 | 
						|
    print("\n=== Automation Test Running (1 second after start) ===")
 | 
						|
    
 | 
						|
    # NOW we can take screenshots that will show content!
 | 
						|
    timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
 | 
						|
    filename = f"WORKING_screenshot_{timestamp}.png"
 | 
						|
    
 | 
						|
    # Take screenshot - this should now show our red frame
 | 
						|
    result = automation.screenshot(filename)
 | 
						|
    print(f"Screenshot taken: {filename} - Result: {result}")
 | 
						|
    
 | 
						|
    # Test clicking on the frame
 | 
						|
    automation.click(200, 200)  # Click in center of red frame
 | 
						|
    
 | 
						|
    # Test keyboard input
 | 
						|
    automation.typewrite("Hello from timer callback!")
 | 
						|
    
 | 
						|
    # Take another screenshot to show any changes
 | 
						|
    filename2 = f"WORKING_screenshot_after_click_{timestamp}.png"
 | 
						|
    automation.screenshot(filename2)
 | 
						|
    print(f"Second screenshot: {filename2}")
 | 
						|
    
 | 
						|
    print("Test completed successfully!")
 | 
						|
    print("\nThis works because:")
 | 
						|
    print("1. The game loop has been running for 1 second")
 | 
						|
    print("2. The scene has been rendered multiple times")
 | 
						|
    print("3. The RenderTexture now contains actual rendered content")
 | 
						|
    
 | 
						|
    # Cancel this timer so it doesn't repeat
 | 
						|
    mcrfpy.delTimer("automation_test")
 | 
						|
    
 | 
						|
    # Optional: exit after a moment
 | 
						|
    def exit_game():
 | 
						|
        print("Exiting...")
 | 
						|
        mcrfpy.exit()
 | 
						|
    mcrfpy.setTimer("exit", exit_game, 500)  # Exit 500ms later
 | 
						|
 | 
						|
# This code runs during --exec script execution
 | 
						|
print("=== Setting Up Test Scene ===")
 | 
						|
 | 
						|
# Create scene with visible content
 | 
						|
mcrfpy.createScene("timer_test_scene")
 | 
						|
mcrfpy.setScene("timer_test_scene")
 | 
						|
ui = mcrfpy.sceneUI("timer_test_scene")
 | 
						|
 | 
						|
# Add a bright red frame that should be visible
 | 
						|
frame = mcrfpy.Frame(100, 100, 400, 300,
 | 
						|
                    fill_color=mcrfpy.Color(255, 0, 0),      # Bright red
 | 
						|
                    outline_color=mcrfpy.Color(255, 255, 255), # White outline
 | 
						|
                    outline=5.0)
 | 
						|
ui.append(frame)
 | 
						|
 | 
						|
# Add text
 | 
						|
caption = mcrfpy.Caption(mcrfpy.Vector(150, 150),
 | 
						|
                        text="TIMER TEST - SHOULD BE VISIBLE",
 | 
						|
                        fill_color=mcrfpy.Color(255, 255, 255))
 | 
						|
caption.size = 24
 | 
						|
frame.children.append(caption)
 | 
						|
 | 
						|
# Add click handler to demonstrate interaction
 | 
						|
def frame_clicked(x, y, button):
 | 
						|
    print(f"Frame clicked at ({x}, {y}) with button {button}")
 | 
						|
 | 
						|
frame.click = frame_clicked
 | 
						|
 | 
						|
print("Scene setup complete. Setting timer for automation tests...")
 | 
						|
 | 
						|
# THIS IS THE KEY: Set timer to run AFTER the game loop starts
 | 
						|
mcrfpy.setTimer("automation_test", run_automation_tests, 1000)
 | 
						|
 | 
						|
print("Timer set. Game loop will start after this script completes.")
 | 
						|
print("Automation tests will run 1 second later when content is visible.")
 | 
						|
 | 
						|
# Script ends here - game loop starts next |