2020-04-02 15:50:47 +02:00
|
|
|
import pygame
|
|
|
|
import json
|
|
|
|
from pathlib import Path
|
2020-04-03 19:36:13 +02:00
|
|
|
from os import path
|
2020-04-02 15:50:47 +02:00
|
|
|
|
2020-04-25 23:19:41 +02:00
|
|
|
from src.AI.AutomaticMovement import AutomaticMovement
|
2020-04-06 09:54:51 +02:00
|
|
|
from src.game.EventManager import EventManager
|
|
|
|
from src.game.Screen import Screen
|
|
|
|
from src.game.Map import Map
|
2020-04-05 23:43:23 +02:00
|
|
|
|
2020-04-05 14:53:54 +02:00
|
|
|
from src.entities.Player import Player
|
2020-04-05 23:51:22 +02:00
|
|
|
from src.game.Timer import Timer
|
2020-04-02 16:49:03 +02:00
|
|
|
|
2020-04-02 15:50:47 +02:00
|
|
|
|
2020-03-31 21:47:09 +02:00
|
|
|
class Game:
|
2020-04-06 12:30:03 +02:00
|
|
|
def __init__(self, filesPath):
|
2020-04-02 16:49:03 +02:00
|
|
|
self.running = True
|
2020-04-02 15:50:47 +02:00
|
|
|
print("Loading configuration...", end=" ")
|
|
|
|
|
|
|
|
try:
|
2020-04-06 12:30:03 +02:00
|
|
|
configFolder = Path(str(filesPath) + "/data/config/")
|
2020-04-02 15:50:47 +02:00
|
|
|
configFile = configFolder / "mainConfig.json"
|
|
|
|
|
|
|
|
self.config = json.loads(configFile.read_text())
|
|
|
|
|
|
|
|
print("OK")
|
|
|
|
except IOError:
|
|
|
|
print("Error reading configuration file. Exiting...")
|
|
|
|
exit(1)
|
|
|
|
|
|
|
|
print("Initializing pygame...", end=" ")
|
|
|
|
pygame.init()
|
2020-04-03 19:36:13 +02:00
|
|
|
self.spritesList = pygame.sprite.Group()
|
2020-04-05 19:08:08 +02:00
|
|
|
|
2020-04-02 15:50:47 +02:00
|
|
|
print("OK")
|
|
|
|
print("Initializing screen, params: " + str(self.config["window"]) + "...", end=" ")
|
|
|
|
|
2020-04-02 16:49:03 +02:00
|
|
|
# Vertical rotation is unsupported due to UI layout
|
|
|
|
if self.config["window"]["height"] > self.config["window"]["width"]:
|
|
|
|
print("The screen cannot be in a vertical orientation. Exiting...")
|
|
|
|
exit(1)
|
|
|
|
|
2020-04-05 23:51:22 +02:00
|
|
|
# Initialize timers
|
|
|
|
self.pgTimer = pygame.time.Clock()
|
|
|
|
self.ingameTimer = Timer()
|
|
|
|
self.ingameTimer.startClock()
|
|
|
|
|
2020-04-02 16:49:03 +02:00
|
|
|
self.screen = Screen(self, self.config["window"])
|
|
|
|
print("OK")
|
|
|
|
|
2020-04-06 12:30:03 +02:00
|
|
|
mapFile = Path(str(filesPath) + "/data/mapdata/")
|
|
|
|
self.map = Map(path.join(mapFile, 'map.txt'), self.screen)
|
2020-04-05 21:53:10 +02:00
|
|
|
self.player = Player((6, 2), self.map.tileSize)
|
2020-04-05 14:53:54 +02:00
|
|
|
self.map.addEntity(self.player)
|
2020-04-05 15:41:42 +02:00
|
|
|
self.eventManager = EventManager(self, self.player)
|
|
|
|
|
2020-04-25 23:19:41 +02:00
|
|
|
self.movement = AutomaticMovement(self.player, self.map)
|
|
|
|
|
2020-04-02 16:49:03 +02:00
|
|
|
self.mainLoop()
|
|
|
|
|
|
|
|
def mainLoop(self):
|
2020-04-02 17:30:25 +02:00
|
|
|
while self.running:
|
2020-04-05 23:51:22 +02:00
|
|
|
# Update ingame clock
|
|
|
|
self.ingameTimer.updateTime(self.pgTimer.tick())
|
2020-04-06 10:25:28 +02:00
|
|
|
self.spritesList.update()
|
2020-04-02 17:30:25 +02:00
|
|
|
self.eventManager.handleEvents()
|
|
|
|
self.spritesList.draw(self.screen.pygameScreen)
|
|
|
|
pygame.display.flip()
|