Overview
This document explains how to use the Camera system in your engine. Cameras control viewport rendering, can follow targets, and support zoom functionality.
The Camera class manages viewport rendering and automatically handles camera-to-world transformation. Cameras render before world objects and support smooth target following and zooming.
Camera Properties
• Name - Vector2
• Position - Vector2
• Size - Vector2
• ViewportSize - Vector2
• Zoom - float
• IsFollowingTarget - bool
• FollowSpeed - float
• TargetObject - GameObject?
• Viewport - ViewportComponent
• Layer - int
Creating a Camera
Basic camera
var camera = new Camera("MainCamera",
new Vector2(0, 0), // Position
new Vector2(800, 600) // Size
);
Camera with Auto-Follow
var camera = new Camera("PlayerCamera", new Vector2(0, 0), new Vector2(800, 600))
.Follow(playerGameObject);
Camera with Custom Zoom
var camera = new Camera("MainCamera", new Vector2(0, 0), new Vector2(800, 600))
.SetZoom(2.0f); // 200% zoom
Usage Examples
Main Camera Following Player
var player = new GameObject("Player", new Vector2(400, 300), new Vector2(50, 50));
var camera = new Camera("MainCamera", new Vector2(0, 0), new Vector2(800, 600))
.Follow(player)
.SetZoom(1.0f);
workspace.Add(camera);
workspace.Add(player);
Multiple Cameras
// Main camera (follows player)
var mainCamera = new Camera("MainCamera", new Vector2(0, 0), new Vector2(800, 600))
.Follow(player);
// Minimap camera (static, no following)
var minimapCamera = new Camera("Minimap", new Vector2(850, 20), new Vector2(200, 100))
.SetZoom(0.3f);
// Camera follows player but at reduced zoom
var followCamera = new Camera("Follow", new Vector2(0, 0), new Vector2(800, 600))
.Follow(player)
.SetZoom(0.7f)
.SetFollowSpeed(12.0f);
workspace.Add(mainCamera);
workspace.Add(minimapCamera);
workspace.Add(followCamera);
Camera with Custom Viewport Component
// If you have custom viewport components
var customViewport = new MyCustomViewport();
camera.Viewport = customViewport;
// Note: This requires implementing ViewportComponent interface
Rendering Order
• World Objects (Layer = 0-100+)
• UI Elements (Layer = 2+)
• Main Camera Render (Layer = 0) - Renders viewport
The camera renders last after UI and world objects, but its viewport component appears in front.
Camera Lifecycle
• Created - Camera instantiated with properties
• Added to Workspace - Automatically becomes MainCamera if first camera
• Updated - Update(deltaTime) called, applies follow target smoothing
• Rendered - Render() called, renders viewport component
• Removed - Camera removed from workspace, MainCamera cleared if applicable