118 lines
5.3 KiB
Python
118 lines
5.3 KiB
Python
import socket
|
|
|
|
import pygame
|
|
from Classes.Engine.Logger import Logger
|
|
|
|
from Classes.Game.NetworkEvents.PlaceCard import CardPlaced
|
|
from Classes.Game.NetworkEvents.GameStart import GameStart
|
|
from Classes.Game.NetworkEvents.PlaceCard import PlaceCard
|
|
from Classes.Engine.InputHandler import InputHandler
|
|
from Classes.Game.World import World
|
|
from Classes.Game.Player import Player
|
|
from Classes.Game.NetworkEvents.Login import LoginResponse
|
|
|
|
# network event handler this only handles events coming from the server
|
|
class TCPEventHandler:
|
|
def __init__(self, socket:socket, inputHandler:InputHandler, world:World):
|
|
self.tcp_socket = socket
|
|
self.__world = world
|
|
self.__inputHandler = inputHandler
|
|
|
|
def handleEvents(self, message:dict):
|
|
if message["event"] == "loginresponse":
|
|
LoginResponse(message)
|
|
pass
|
|
elif message["event"] == "startgame":
|
|
print("gamestart")
|
|
GameStart(self.__world, message["hand"], self.__inputHandler, self.__world.getPlayer())
|
|
pass
|
|
elif message["event"] == "PlaceCard":
|
|
CardPlaced(self.__world, message["card"], message["type"], message["owner"], pygame.Vector2(int(message["x"]), int(message["y"]), self.__inputHandler))
|
|
pass
|
|
elif message["event"] == "MoveCard":
|
|
CardMoved(
|
|
self.__world,
|
|
message["card"],
|
|
message["type"],
|
|
message["owner"],
|
|
pygame.Vector2(int(message["old_x"]), int(message["old_y"])),
|
|
pygame.Vector2(int(message["new_x"]), int(message["new_y"])),
|
|
self.__inputHandler)
|
|
pass
|
|
elif message["event"] == "RemoveCard":
|
|
pass
|
|
elif message["event"] == "AttackCard":
|
|
pass
|
|
elif message["event"] == "AttackPlayer":
|
|
pass
|
|
elif message["event"] == "ActivateEffectCard":
|
|
pass
|
|
elif message["event"] == "ActivateMonsterCard":
|
|
pass
|
|
|
|
# handles engine events this is separate from the network event handler
|
|
class EngineEventHandler:
|
|
|
|
__inputHandler:InputHandler
|
|
__world:World
|
|
__logger:Logger
|
|
|
|
def __init__(self, inputHandler:InputHandler, world:World, logger:Logger, tcpClient):
|
|
self.__logger = logger
|
|
self.__logger.info("initializing engine Event Handler")
|
|
if inputHandler == None:
|
|
raise ValueError("InputHandler was found to be None")
|
|
|
|
if world == None:
|
|
raise ValueError("world was found to be None")
|
|
|
|
if world == tcpClient:
|
|
raise ValueError("tcpCLient was found to be None")
|
|
|
|
self.__inputHandler = inputHandler
|
|
self.__world = world
|
|
self.__tcpClient = tcpClient
|
|
|
|
# handles the incoming event queue
|
|
def handleEvent(self, events):
|
|
# TODO: fix bug that stacks cards when dragging them around
|
|
self.selectedCard = None
|
|
self.mousePos = self.__inputHandler.getMousePos()
|
|
|
|
for event in events:
|
|
if event.type == pygame.QUIT:
|
|
self.onCleanup()
|
|
elif self.__inputHandler.getMousePos()[0]:
|
|
for card in self.__world.getCards():
|
|
if card.rect.collidepoint(self.mousePos):
|
|
self.__logger.info(f"dragging card {card}")
|
|
self.selectedCard = card
|
|
|
|
# failsafe to prevent NoneType errors
|
|
if self.selectedCard != None:
|
|
self.__logger.info(f"working with card: {self.selectedCard}")
|
|
self.selectedCard.setDragging(True)
|
|
elif event.type == pygame.MOUSEBUTTONUP:
|
|
if event.button == 1:
|
|
if self.selectedCard != None:
|
|
for field in self.__world.getBoardFields():
|
|
if field.getRect().collidepoint(self.mousePos):
|
|
if field.getSide() == "Player" and field.getType() == self.selectedCard.getType():
|
|
try:
|
|
# snap card into the correct field
|
|
self.selectedCard.rect.center = field.rect.center
|
|
self.selectedCard.setDragging(False)
|
|
print(self.selectedCard)
|
|
if self.selectedCard == card:
|
|
# TODO: adapt this into the new game engine version
|
|
PlaceCard(self.__tcpClient, self.selectedCard) # tells te server that the player placed this card
|
|
self.selectedCard = None
|
|
except Exception as e:
|
|
print(f"failed to place card on server due to error: {e}")
|
|
|
|
if self.selectedCard != None:
|
|
self.selectedCard = None
|
|
else:
|
|
raise ValueError("selected card in event handler was found empty this should never happen!")
|
|
pass
|