feat: insert logic into scoring to display on gui
This commit is contained in:
@@ -3,7 +3,7 @@ import sys
|
||||
from datetime import datetime
|
||||
from enum import Enum
|
||||
|
||||
from PySide6.QtCore import QObject, Signal, Slot, Property, QEnum, QAbstractItemModel
|
||||
from PySide6.QtCore import QObject, Signal, Slot, Property, QEnum
|
||||
from PySide6.QtGui import QGuiApplication
|
||||
from PySide6.QtQml import QQmlApplicationEngine, QmlElement
|
||||
from sqlalchemy import create_engine
|
||||
@@ -11,8 +11,8 @@ from sqlalchemy.orm import Session
|
||||
from star_resonance_tracer.proto.enum_chit_chat_channel_type_pb2 import ChitChatChannelType
|
||||
|
||||
from inventory_wars.game import Game
|
||||
from inventory_wars.models import Base
|
||||
from inventory_wars.scoring import Scoring, FirstGuess, FirstThenHighest
|
||||
from inventory_wars.models import Base, ItemShare
|
||||
from inventory_wars.scoring import FirstGuess, FirstThenHighest
|
||||
from inventory_wars.state import GameOngoing, GameIdle
|
||||
|
||||
QML_IMPORT_NAME = "InventoryWars"
|
||||
@@ -24,25 +24,57 @@ Base.metadata.create_all(engine)
|
||||
session = Session(engine)
|
||||
|
||||
|
||||
class FirstGuessGui(FirstGuess):
|
||||
def __init__(self, game: GameService):
|
||||
super().__init__()
|
||||
self.game = game
|
||||
|
||||
def calculate_score(self, item: ItemShare) -> int:
|
||||
result = super().calculate_score(item)
|
||||
elapsed = self.game.elapsedSeconds
|
||||
if result:
|
||||
self.game.guessed.emit(item.user.username, elapsed)
|
||||
self.game.end()
|
||||
return result
|
||||
|
||||
|
||||
class FirstThenHighestGui(FirstThenHighest):
|
||||
def __init__(self, game: GameService):
|
||||
super().__init__()
|
||||
self.game = game
|
||||
|
||||
def calculate_score(self, item: ItemShare) -> int:
|
||||
previous_max = self.highest.max
|
||||
result = super().calculate_score(item)
|
||||
elapsed = self.game.elapsedSeconds
|
||||
if result:
|
||||
self.game.guessed.emit(item.user.username, elapsed)
|
||||
if previous_max is not self.highest.max:
|
||||
self.game.highest.emit(item.user.username, elapsed)
|
||||
return result
|
||||
|
||||
|
||||
class GameScoring(Enum):
|
||||
FirstGuess = 0
|
||||
FirstGuessThenHighestAmount = 1
|
||||
|
||||
@property
|
||||
def as_scoring(self) -> type[Scoring]:
|
||||
def as_scoring(self) -> type[FirstGuessGui | FirstThenHighestGui]:
|
||||
match self:
|
||||
case self.FirstGuess:
|
||||
return FirstGuess
|
||||
return FirstGuessGui
|
||||
case self.FirstGuessThenHighestAmount:
|
||||
return FirstThenHighest
|
||||
return FirstThenHighestGui
|
||||
case _:
|
||||
raise NotImplementedError
|
||||
|
||||
|
||||
class GameState(Enum):
|
||||
Hidden = 0
|
||||
Revealed = 1
|
||||
Ended = 3
|
||||
|
||||
|
||||
@QmlElement
|
||||
class GameService(QObject):
|
||||
QEnum(GameScoring)
|
||||
@@ -62,7 +94,7 @@ class GameService(QObject):
|
||||
@Slot(int, int)
|
||||
def start(self, item_id: int, mode: int):
|
||||
mode = GameScoring(mode)
|
||||
self.m_game.start(item_id, mode.as_scoring())
|
||||
self.m_game.start(item_id, mode.as_scoring(self))
|
||||
self.m_started_at = datetime.now()
|
||||
self.m_revealed_at = None
|
||||
self.stateChanged.emit()
|
||||
|
||||
Reference in New Issue
Block a user