core.systems package

Submodules

core.systems.animation_system module

class core.systems.animation_system.AnimationSystem[source]

Bases: System

required_components: tuple[type, ...] = (<class 'core.components.animator.AnimatorComponent'>,)
update(dt: float, entities: list[Entity])[source]

core.systems.audio_system module

class core.systems.audio_system.AudioSystem[source]

Bases: System

required_components: tuple[type, ...] = (<class 'core.components.sound.SoundComponent'>,)
update(dt: float, entities: list[Entity])[source]

core.systems.event_dispatch_system module

class core.systems.event_dispatch_system.EventDispatchSystem[source]

Bases: System

required_components: tuple[type, ...] = ()
update(dt: float, entities: list[Entity])[source]

core.systems.lighting_system module

2D Lighting system — renders an ambient + light overlay.

The system draws onto a separate light map surface using additive blending, then composites it on top of the game surface with BLEND_MULT (multiply mode). This produces a simple but effective 2D lighting effect.

Supports LightOccluder2D components for shadow casting: for each light, shadow volumes are projected from the light centre through occluder edges, creating proper directional shadows that extend beyond the occluder.

Add the system to the world after the RenderSystem so it composites after all sprites are drawn:

world.add_system(LightingSystem(render_system.surface))
class core.systems.lighting_system.LightingSystem(surface: Surface, project_config: dict | None = None)[source]

Bases: System

Renders 2D point and spot lights via a multiply-blended light map.

update(dt: float, entities: list[Entity])[source]

core.systems.network_system module

class core.systems.network_system.NetworkSystem[source]

Bases: System

Handles autostart for network components and multiplayer sync.

required_components: tuple[type, ...] = (<class 'core.components.websocket.WebSocketComponent'>, <class 'core.components.http_request.HTTPRequestComponent'>, <class 'core.components.webview.WebviewComponent'>, <class 'core.components.webrtc.WebRTCComponent'>, <class 'core.components.multiplayer.MultiplayerComponent'>, <class 'core.components.network_identity.NetworkIdentityComponent'>)
update(dt: float, entities: list[Entity])[source]

core.systems.particle_system module

class core.systems.particle_system.ParticleSystem[source]

Bases: System

required_components: tuple[type, ...] = (<class 'core.components.particle_emitter.ParticleEmitterComponent'>,)
update(dt: float, entities: list[Entity])[source]

core.systems.physics_system module

class core.systems.physics_system.CollisionInfo(normal, penetration)[source]

Bases: object

class core.systems.physics_system.PhysicsSystem(gravity_x: float = 0.0, gravity_y: float = 980.0, cell_size: float = 128.0)[source]

Bases: System

overlap_box(center: Vector2, half_extents: Vector2, category_mask: int = 4294967295) list[Entity][source]

Return all entities whose colliders overlap an axis-aligned box.

Parameters:
  • center – World-space centre of the query box.

  • half_extents – Half-width and half-height as a Vector2.

  • category_mask – Bitmask filter — only bodies whose category_mask overlaps this value are returned.

Returns:

List of overlapping entities (unordered).

overlap_circle(center: Vector2, radius: float, category_mask: int = 4294967295) list[Entity][source]

Return all entities whose colliders overlap a circle.

Parameters:
  • center – World-space centre of the query circle.

  • radius – Radius of the query circle.

  • category_mask – Bitmask filter.

Returns:

List of overlapping entities (unordered).

raycast(origin: Vector2, direction: Vector2, max_distance: float = inf, category_mask: int = 4294967295) list[dict][source]

Cast a ray and return all intersecting collider bodies sorted by distance.

Parameters:
  • origin – World-space start point of the ray.

  • direction – Direction vector (does not need to be normalized).

  • max_distance – Maximum ray length in world units.

  • category_mask – Bitmask — only bodies whose category_mask overlaps this value are tested.

Returns:

  • entity: the hit Entity

  • point: Vector2 world-space hit point

  • normal: Vector2 surface normal at hit

  • distance: float distance from origin

Return type:

A list of hit dicts sorted by ascending distance, each containing

raycast_first(origin: Vector2, direction: Vector2, max_distance: float = inf, category_mask: int = 4294967295)[source]

Convenience: return only the closest hit, or None.

required_components: tuple[type, ...] = (<class 'core.components.rigidbody.Rigidbody2D'>, <class 'core.components.colliders.BoxCollider2D'>, <class 'core.components.colliders.CircleCollider2D'>, <class 'core.components.colliders.PolygonCollider2D'>)
update(dt: float, entities: list[Entity])[source]
class core.systems.physics_system.SpatialHashGrid(cell_size: float = 128.0)[source]

Bases: object

cells: dict[tuple, set]
clear()[source]
insert(entity: Entity, min_x: float, min_y: float, max_x: float, max_y: float)[source]
move(entity: Entity, min_x: float, min_y: float, max_x: float, max_y: float)[source]

Re-insert entity only if its cell footprint changed.

query(min_x: float, min_y: float, max_x: float, max_y: float)[source]
remove(entity: Entity)[source]

Remove entity from all cells it currently occupies.

core.systems.render_system module

class core.systems.render_system.RenderSystem(surface: Surface)[source]

Bases: System

get_camera_views(entities: list[Entity], dt: float = 0.0)[source]
get_primary_camera_view(entities: list[Entity])[source]
render_ui(entities: list[Entity], viewport_rect=None)[source]
screen_to_world(screen_x: float, screen_y: float, entities: list[Entity] = None, camera_view: dict = None)[source]
update(dt: float, entities: list[Entity])[source]
world_to_screen(world_x: float, world_y: float, entities: list[Entity] = None, camera_view: dict = None)[source]

core.systems.script_system module

class core.systems.script_system.ScriptSystem[source]

Bases: System

instantiate_script(component: ScriptComponent, entity: Entity, resolved_path: str = None, module_key: str = None, file_mtime: float = None)[source]
required_components: tuple[type, ...] = (<class 'core.components.script.ScriptComponent'>,)
resolve_script_path(script_path: str) str[source]
unload_script(component: ScriptComponent)[source]
update(dt: float, entities: list[Entity])[source]

core.systems.steering_system module

Steering Behaviors System — composable autonomous movement.

class core.systems.steering_system.SteeringSystem[source]

Bases: System

Evaluates all steering behaviour components on each entity that has a SteeringAgentComponent, sums the weighted forces, and applies the resulting velocity to the entity’s Transform.

required_components: tuple[type, ...] = (<class 'core.components.steering.SteeringAgentComponent'>,)
update(dt: float, entities: List[Entity])[source]

core.systems.timer_system module

class core.systems.timer_system.TimerSystem[source]

Bases: System

Ticks all TimerComponent instances each frame.

required_components: tuple[type, ...] = (<class 'core.components.timer.TimerComponent'>,)
update(dt: float, entities: list[Entity])[source]

core.systems.ui_system module

class core.systems.ui_system.UISystem[source]

Bases: System

required_components: tuple[type, ...] = (<class 'core.components.ui.ButtonComponent'>, <class 'core.components.ui.TextInputComponent'>, <class 'core.components.ui.SliderComponent'>, <class 'core.components.ui.CheckBoxComponent'>, <class 'core.components.ui.UIComponent'>, <class 'core.components.ui.HBoxContainerComponent'>, <class 'core.components.ui.VBoxContainerComponent'>, <class 'core.components.ui.GridBoxContainerComponent'>, <class 'core.components.ui.ImageRenderer'>, <class 'core.components.ui.ProgressBarComponent'>, <class 'core.components.ui.TextRenderer'>)
update(dt: float, entities: list[Entity])[source]

Module contents

class core.systems.AnimationSystem[source]

Bases: System

required_components: tuple[type, ...] = (<class 'core.components.animator.AnimatorComponent'>,)
update(dt: float, entities: list[Entity])[source]
class core.systems.EventDispatchSystem[source]

Bases: System

required_components: tuple[type, ...] = ()
update(dt: float, entities: list[Entity])[source]
class core.systems.LightingSystem(surface: Surface, project_config: dict | None = None)[source]

Bases: System

Renders 2D point and spot lights via a multiply-blended light map.

update(dt: float, entities: list[Entity])[source]
class core.systems.ParticleSystem[source]

Bases: System

required_components: tuple[type, ...] = (<class 'core.components.particle_emitter.ParticleEmitterComponent'>,)
update(dt: float, entities: list[Entity])[source]
class core.systems.RenderSystem(surface: Surface)[source]

Bases: System

get_camera_views(entities: list[Entity], dt: float = 0.0)[source]
get_primary_camera_view(entities: list[Entity])[source]
render_ui(entities: list[Entity], viewport_rect=None)[source]
screen_to_world(screen_x: float, screen_y: float, entities: list[Entity] = None, camera_view: dict = None)[source]
update(dt: float, entities: list[Entity])[source]
world_to_screen(world_x: float, world_y: float, entities: list[Entity] = None, camera_view: dict = None)[source]
class core.systems.SteeringSystem[source]

Bases: System

Evaluates all steering behaviour components on each entity that has a SteeringAgentComponent, sums the weighted forces, and applies the resulting velocity to the entity’s Transform.

required_components: tuple[type, ...] = (<class 'core.components.steering.SteeringAgentComponent'>,)
update(dt: float, entities: List[Entity])[source]
class core.systems.TimerSystem[source]

Bases: System

Ticks all TimerComponent instances each frame.

required_components: tuple[type, ...] = (<class 'core.components.timer.TimerComponent'>,)
update(dt: float, entities: list[Entity])[source]