Scene

Container for all GameObjects. Manages object lifecycle and provides search methods.

using Xengine.Scene;

Creating a Scene

// Load via engine
var scene = engine.LoadScene("GameScene");

// Direct creation
var scene = new Scene("MyScene");

Properties

PropertyTypeDescription
NamestringScene name
GameObjectsIReadOnlyListAll root objects
AllGameObjectsIEnumerableAll objects including children
IsLoadedboolTrue if scene is active

Creating GameObjects

CreateGameObject

GameObject CreateGameObject(string name)
var player = scene.CreateGameObject("Player");
var enemy = scene.CreateGameObject("Enemy", new Vector3(5, 0, 0));
var obj = scene.CreateGameObject("Object", position, rotation);

AddGameObject

void AddGameObject(GameObject obj)
var obj = new GameObject("MyObject");
scene.AddGameObject(obj);

Finding Objects

FindByName

GameObject? FindByName(string name)
var player = scene.FindByName("Player");
if (player != null)
    player.Transform.Position = spawnPoint;

FindAllByName

IEnumerable<GameObject> FindAllByName(string name)
foreach (var enemy in scene.FindAllByName("Enemy"))
    enemy.GetComponent<EnemyAI>()?.Alert();

FindByGuid

GameObject? FindByGuid(Guid guid)

FindWithComponent<T>

GameObject? FindWithComponent<T>()
var playerObj = scene.FindWithComponent<PlayerController>();

FindAllWithComponent<T>

IEnumerable<GameObject> FindAllWithComponent<T>()
foreach (var obj in scene.FindAllWithComponent<Health>())
{
    var health = obj.GetComponent<Health>();
    health.Heal(10);
}

GetComponent<T>

T? GetComponent<T>()

Find first component of type in scene.

var camera = scene.GetComponent<CameraController>();

GetComponents<T>

IEnumerable<T> GetComponents<T>()
foreach (var enemy in scene.GetComponents<EnemyAI>())
    enemy.SetTarget(player);

Lifecycle

// Clear all objects
scene.Clear();

// Destroy specific object
scene.DestroyGameObject(obj);

// Process pending destroys
scene.ProcessDestroys();

Example

var scene = engine.LoadScene("GameScene");

// Create player
var player = scene.CreateGameObject("Player", Vector3.Zero);
player.AddComponent<PlayerController>();
player.AddComponent<Health>().MaxHealth = 100;

// Spawn enemies
var random = new XRandom();
for (int i = 0; i < 10; i++)
{
    var pos = new Vector3(random.Float(-20, 20), 0, random.Float(-20, 20));
    var enemy = scene.CreateGameObject("Enemy", pos);
    enemy.AddComponent<EnemyAI>();
}

// Later: find and damage all enemies
foreach (var enemy in scene.FindAllByName("Enemy"))
{
    enemy.GetComponent<Health>()?.TakeDamage(25);
}