66 lines
1.5 KiB
Python
66 lines
1.5 KiB
Python
from random import randint
|
|
|
|
import pyglet
|
|
from pyglet.shapes import Circle, Line
|
|
from components import PlanetMarker, SpaceShipMarker
|
|
from helpers import generate_random_planet, generate_random_spaceship
|
|
from libs.ecs.world import World
|
|
from libs.ecs.event import EventBus
|
|
from systems import (
|
|
PlanetRenderSyncSystem,
|
|
SpaceShipKillSystem,
|
|
SpaceShipRenderSyncSystem,
|
|
SpaceShipTravelSystem,
|
|
)
|
|
from settings import FPS, FULLSCREEN, SCREEN_WIDTH, SCREEN_HEIGHT
|
|
|
|
world = World()
|
|
world.systems.extend(
|
|
(
|
|
SpaceShipKillSystem,
|
|
PlanetRenderSyncSystem,
|
|
SpaceShipRenderSyncSystem,
|
|
SpaceShipTravelSystem,
|
|
)
|
|
)
|
|
|
|
|
|
window = pyglet.window.Window(
|
|
caption="SpaceTrader",
|
|
width=SCREEN_WIDTH,
|
|
height=SCREEN_HEIGHT,
|
|
fullscreen=FULLSCREEN,
|
|
)
|
|
|
|
for _ in range(12):
|
|
generate_random_planet(world)
|
|
|
|
|
|
@window.event
|
|
def on_draw():
|
|
window.clear()
|
|
for _, component_storage in world.query(SpaceShipMarker):
|
|
component_storage[Line].draw()
|
|
|
|
for _, component_storage in world.query(PlanetMarker):
|
|
component_storage[Circle].draw()
|
|
|
|
for _, component_storage in world.query(SpaceShipMarker):
|
|
component_storage[Circle].draw()
|
|
|
|
|
|
def on_update(dt):
|
|
world.tick(dt=dt)
|
|
|
|
|
|
def periodic_random_spaceship_generation(*args, **kwargs):
|
|
for i in range(randint(0, 5)):
|
|
generate_random_spaceship(world=world)
|
|
|
|
|
|
pyglet.clock.schedule_interval(on_update, 1 / FPS)
|
|
|
|
pyglet.clock.schedule_interval(periodic_random_spaceship_generation, 0.5)
|
|
|
|
pyglet.app.run()
|