Skip to content

Facades

PHPolygon provides Laravel-style facades for convenient static access to engine services. All facades are in the PHPolygon\Support\Facades namespace.

Available Facades

FacadeServiceEngine property
WorldECS World$engine->world
WindowRuntime Window$engine->window
InputKeyboard & Mouse$engine->input
Camera2D2D View Transform$engine->camera2D
TexturesTexture Manager$engine->textures
EventsEvent Dispatcher$engine->events
GameLoopFixed Timestep$engine->gameLoop
ClockTiming Metrics$engine->clock
ScenesScene Manager$engine->scenes
ShaderShader Manager$engine->shaders
AudioAudio Manager$engine->audio
CommandList3D3D Render Commands$engine->commandList3D
LocaleLocalization$engine->locale
Renderer2D2D Renderer$engine->renderer2D
Renderer3D3D Renderer$engine->renderer3D
SavesSave Manager$engine->saves
SchedulerThread Scheduler$engine->scheduler

Usage

php
use PHPolygon\Support\Facades\World;
use PHPolygon\Support\Facades\Events;
use PHPolygon\Support\Facades\Shader;
use PHPolygon\Support\Facades\Audio;
use PHPolygon\Support\Facades\Saves;
use PHPolygon\Support\Facades\Scenes;

// Create an entity
$player = World::createEntity();

// Listen for events
Events::listen(EntitySpawned::class, function ($e) { /* ... */ });

// Switch shaders
Shader::use('unlit');
Shader::available();  // ['default', 'unlit', 'normals', 'depth', 'shadow', 'skybox']
Shader::reset();

// Audio playback
Audio::playSfx('explosion');
Audio::playMusic('theme');
Audio::setChannelVolume(AudioChannel::SFX, 0.8);

// Save/load
Saves::save(slotIndex: 0, name: 'Quicksave', data: ['level' => 3]);
Saves::load(slotIndex: 0);

// Scene management
Scenes::loadScene(MyScene::class);

How Facades Work

Each facade is a thin static proxy that resolves to a service on the Engine instance:

php
abstract class Facade
{
    abstract protected static function getFacadeAccessor(): string;
}

// Example: Shader facade resolves to $engine->shaders
class Shader extends Facade
{
    protected static function getFacadeAccessor(): string
    {
        return 'shaders';
    }
}

The engine is set automatically during construction via Facade::setEngine($engine).

Released under the MIT License.