Modifies path creation and deletion

This commit is contained in:
nejdetckenobi committed 2026-10-17 17:01:58 +03:00
1 parent 00fb80382b
commit 8c414fe294
4 files changed
+81 -36

No files matched your search

+46 -20
View File
@@ -1,12 +1,22 @@
from dataclasses import dataclass, field
from random import randint
from typing import cast
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 components import (
PlanetMarker,
Position,
Radius,
SpaceShipMarker,
Vector2D,
)
from helpers import (
GameState,
generate_random_planet,
)
from libs.ecs.world import World
from libs.ecs.event import EventBus
from systems import (
PlanetRenderSyncSystem,
SpaceShipKillSystem,
@@ -15,6 +25,7 @@ from systems import (
)
from settings import FPS, FULLSCREEN, SCREEN_WIDTH, SCREEN_HEIGHT
game_state = GameState()
world = World()
world.systems.extend(
(
@@ -40,8 +51,8 @@ for _ in range(12):
@window.event
def on_draw():
window.clear()
for _, component_storage in world.query(SpaceShipMarker):
component_storage[Line].draw()
for _, line in game_state.routes.items():
line.draw()
for _, component_storage in world.query(SpaceShipMarker):
component_storage[Circle].draw()
@@ -52,29 +63,44 @@ def on_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)),
if button != LEFT:
return
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("DESELECT")
game_state.selected_planet = None
elif game_state.selected_planet is None:
print("SELECT")
game_state.selected_planet = closest_entity
elif game_state.selected_planet != closest_entity:
first_planet, second_planet = sorted(
(game_state.selected_planet, closest_entity)
)
pos = component_storage[Position]
if component_storage[Radius].value < abs(pos - Vector2D(x, y)):
print("NO PLANET")
fpos: Position = cast(dict, world.get_components(first_planet))[Position]
spos: Position = cast(dict, world.get_components(second_planet))[Position]
route_key = (first_planet, second_planet)
if route_key in game_state.routes:
print("ROUTE DELETE")
game_state.routes.pop(route_key)
else:
print("PLANET")
print("ROUTE CREATE")
game_state.routes[route_key] = Line(
x=fpos.x,
y=fpos.y,
x2=spos.x,
y2=spos.y,
)
game_state.selected_planet = None
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()