Modifies path creation and deletion
This commit is contained in:
1 parent
00fb80382b
commit
8c414fe294
4 files changed
+81
-36
No files matched your search
@@ -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()
|
||||
Reference in new issue
Block a user