81 lines
2.0 KiB
Python
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()
|