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 datetime import datetime
|
||||||
from enum import Enum
|
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.QtGui import QGuiApplication
|
||||||
from PySide6.QtQml import QQmlApplicationEngine, QmlElement
|
from PySide6.QtQml import QQmlApplicationEngine, QmlElement
|
||||||
from sqlalchemy import create_engine
|
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 star_resonance_tracer.proto.enum_chit_chat_channel_type_pb2 import ChitChatChannelType
|
||||||
|
|
||||||
from inventory_wars.game import Game
|
from inventory_wars.game import Game
|
||||||
from inventory_wars.models import Base
|
from inventory_wars.models import Base, ItemShare
|
||||||
from inventory_wars.scoring import Scoring, FirstGuess, FirstThenHighest
|
from inventory_wars.scoring import FirstGuess, FirstThenHighest
|
||||||
from inventory_wars.state import GameOngoing, GameIdle
|
from inventory_wars.state import GameOngoing, GameIdle
|
||||||
|
|
||||||
QML_IMPORT_NAME = "InventoryWars"
|
QML_IMPORT_NAME = "InventoryWars"
|
||||||
@@ -24,25 +24,57 @@ Base.metadata.create_all(engine)
|
|||||||
session = Session(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):
|
class GameScoring(Enum):
|
||||||
FirstGuess = 0
|
FirstGuess = 0
|
||||||
FirstGuessThenHighestAmount = 1
|
FirstGuessThenHighestAmount = 1
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def as_scoring(self) -> type[Scoring]:
|
def as_scoring(self) -> type[FirstGuessGui | FirstThenHighestGui]:
|
||||||
match self:
|
match self:
|
||||||
case self.FirstGuess:
|
case self.FirstGuess:
|
||||||
return FirstGuess
|
return FirstGuessGui
|
||||||
case self.FirstGuessThenHighestAmount:
|
case self.FirstGuessThenHighestAmount:
|
||||||
return FirstThenHighest
|
return FirstThenHighestGui
|
||||||
case _:
|
case _:
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
|
|
||||||
class GameState(Enum):
|
class GameState(Enum):
|
||||||
Hidden = 0
|
Hidden = 0
|
||||||
Revealed = 1
|
Revealed = 1
|
||||||
Ended = 3
|
Ended = 3
|
||||||
|
|
||||||
|
|
||||||
@QmlElement
|
@QmlElement
|
||||||
class GameService(QObject):
|
class GameService(QObject):
|
||||||
QEnum(GameScoring)
|
QEnum(GameScoring)
|
||||||
@@ -62,7 +94,7 @@ class GameService(QObject):
|
|||||||
@Slot(int, int)
|
@Slot(int, int)
|
||||||
def start(self, item_id: int, mode: int):
|
def start(self, item_id: int, mode: int):
|
||||||
mode = GameScoring(mode)
|
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_started_at = datetime.now()
|
||||||
self.m_revealed_at = None
|
self.m_revealed_at = None
|
||||||
self.stateChanged.emit()
|
self.stateChanged.emit()
|
||||||
|
|||||||
Reference in New Issue
Block a user