Files
planetarium/ui.py
T

81 lines
2.0 KiB
Python

from random import randint
import pyglet
from pyglet.window.mouse import LEFT
from pyglet.shapes import Circle, Line
from components import PlanetMarker, Position, Radius, SpaceShipMarker, Vector2D
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(SpaceShipMarker):
component_storage[Circle].draw()
for _, component_storage in world.query(PlanetMarker):
component_storage[Circle].draw()
@window.event
def on_mouse_release(x, y, button, modifiers):
if button == LEFT:
closest_entity, component_storage = min(
world.query(PlanetMarker),
key=lambda p: abs(p[1][Position] - Vector2D(x, y)),
)
pos = component_storage[Position]
if component_storage[Radius].value < abs(pos - Vector2D(x, y)):
print("NO PLANET")
else:
print("PLANET")
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()