mirror of
https://github.com/csd4ni3l/fleet-commander.git
synced 2026-01-01 12:33:48 +01:00
Add basic mechanics, like shooting and some basic textures
This commit is contained in:
87
game/play.py
87
game/play.py
@@ -1,13 +1,92 @@
|
||||
import arcade, arcade.gui, pyglet, json
|
||||
import arcade, arcade.gui, random, time
|
||||
|
||||
from PIL import Image
|
||||
|
||||
from utils.constants import menu_background_color, button_style
|
||||
from utils.constants import button_style, ENEMY_ROWS, ENEMY_COLS, PLAYER_ATTACK_SPEED
|
||||
from utils.preload import button_texture, button_hovered_texture
|
||||
|
||||
from game.sprites import Enemy, Player, Bullet
|
||||
|
||||
class Game(arcade.gui.UIView):
|
||||
def __init__(self, pypresence_client):
|
||||
super().__init__()
|
||||
|
||||
self.pypresence_client = pypresence_client
|
||||
self.pypresence_client.update(state="Invading Space")
|
||||
|
||||
self.anchor = self.add_widget(arcade.gui.UIAnchorLayout(size_hint=(1, 1)))
|
||||
|
||||
self.spritelist = arcade.SpriteList()
|
||||
|
||||
self.player = Player(100, 100) # not actually player
|
||||
self.spritelist.append(self.player)
|
||||
|
||||
self.last_player_shoot = time.perf_counter() # not actually player
|
||||
|
||||
self.enemies: list[Enemy] = []
|
||||
self.bullets: list[Bullet] = []
|
||||
|
||||
self.summon_enemies()
|
||||
|
||||
def on_show_view(self):
|
||||
super().on_show_view()
|
||||
|
||||
def summon_enemies(self):
|
||||
enemy_start_x = self.window.width * 0.15
|
||||
enemy_start_y = self.window.height * 0.9
|
||||
|
||||
for row in range(ENEMY_ROWS):
|
||||
for col in range(ENEMY_COLS):
|
||||
enemy_sprite = Enemy(enemy_start_x + col * 100, enemy_start_y - row * 100)
|
||||
self.spritelist.append(enemy_sprite)
|
||||
self.enemies.append(enemy_sprite)
|
||||
|
||||
def on_update(self, delta_time):
|
||||
for enemy in self.enemies:
|
||||
enemy.update()
|
||||
|
||||
bullets_to_remove = []
|
||||
|
||||
for bullet in self.bullets:
|
||||
bullet.update()
|
||||
|
||||
bullet_hit = False
|
||||
if bullet.direction_y == 1:
|
||||
for enemy in self.enemies:
|
||||
if bullet.rect.intersection(enemy.rect):
|
||||
self.spritelist.remove(enemy)
|
||||
self.enemies.remove(enemy)
|
||||
self.player.target = None
|
||||
bullets_to_remove.append(bullet)
|
||||
bullet_hit = True
|
||||
break
|
||||
else:
|
||||
if bullet.rect.intersection(self.player.rect):
|
||||
bullets_to_remove.append(bullet)
|
||||
bullet_hit = True
|
||||
|
||||
if not bullet_hit and bullet.center_y > self.window.height or bullet.center_y < 0:
|
||||
bullets_to_remove.append(bullet)
|
||||
|
||||
for bullet_to_remove in bullets_to_remove:
|
||||
self.spritelist.remove(bullet_to_remove)
|
||||
self.bullets.remove(bullet_to_remove)
|
||||
|
||||
self.player.update(self.enemies) # not actually player
|
||||
|
||||
if time.perf_counter() - self.last_player_shoot >= PLAYER_ATTACK_SPEED:
|
||||
self.last_player_shoot = time.perf_counter()
|
||||
self.shoot(self.player.center_x, self.player.center_y, 1)
|
||||
|
||||
def shoot(self, x, y, direction_y):
|
||||
bullet = Bullet(x, y, direction_y)
|
||||
self.spritelist.append(bullet)
|
||||
self.bullets.append(bullet)
|
||||
|
||||
def on_key_press(self, symbol, modifiers):
|
||||
if symbol == arcade.key.SPACE:
|
||||
enemy = random.choice(self.enemies)
|
||||
self.shoot(enemy.center_x, enemy.center_y, -1)
|
||||
|
||||
def on_draw(self):
|
||||
super().on_draw()
|
||||
|
||||
self.spritelist.draw()
|
||||
Reference in New Issue
Block a user