commit
f69c7be1b6
@ -37,3 +37,17 @@ def getNpcRandomAnswer(npc, QA_TYPE) -> tables.Answer :
|
|||||||
def getRandomQuestion(QA_TYPE) -> tables.Answer :
|
def getRandomQuestion(QA_TYPE) -> tables.Answer :
|
||||||
answers = session.query(tables.Question).filter_by(QUESTION_TYPE=QA_TYPE).all()
|
answers = session.query(tables.Question).filter_by(QUESTION_TYPE=QA_TYPE).all()
|
||||||
return random.choice(answers)
|
return random.choice(answers)
|
||||||
|
|
||||||
|
def getTraitFromText(text):
|
||||||
|
trait_lid = session.query(tables.Locale).filter_by(TEXT=text).one().TEXT_ID
|
||||||
|
return session.query(tables.Trait).filter_by(NAME_LID=trait_lid).one().TRAIT_ID
|
||||||
|
|
||||||
|
def getTraitFromTraitId(trait_id):
|
||||||
|
trait = session.query(tables.Trait).filter_by(TRAIT_ID=trait_id).one()
|
||||||
|
return trait
|
||||||
|
|
||||||
|
def getTraits(lang):
|
||||||
|
traits = []
|
||||||
|
for trait in session.query(tables.Trait).all():
|
||||||
|
traits.append(getTextFromLid(lang,trait.NAME_LID))
|
||||||
|
return traits
|
@ -31,6 +31,8 @@ class Member:
|
|||||||
def __init__(self, username):
|
def __init__(self, username):
|
||||||
self.username = username
|
self.username = username
|
||||||
self.socket = None
|
self.socket = None
|
||||||
|
self.progress = 0
|
||||||
|
self.results = None
|
||||||
|
|
||||||
def __str__(self) -> str:
|
def __str__(self) -> str:
|
||||||
return "Member[username={}]".format(self.username)
|
return "Member[username={}]".format(self.username)
|
||||||
@ -58,6 +60,20 @@ class Game:
|
|||||||
self.owner = Member(username)
|
self.owner = Member(username)
|
||||||
self.members.append(self.owner)
|
self.members.append(self.owner)
|
||||||
return self.owner
|
return self.owner
|
||||||
|
|
||||||
|
def generateGameResults(self):
|
||||||
|
data = {}
|
||||||
|
npcs = data["npcs"] = {}
|
||||||
|
for npc_id in self.gamedata["npcs"]:
|
||||||
|
npcs[npc_id] = {}
|
||||||
|
npcs[npc_id]["name"] = self.gamedata["npcs"][npc_id]["name"]
|
||||||
|
traitId = self.reaction_table[npc_id]
|
||||||
|
trait = getTraitFromTraitId(traitId)
|
||||||
|
npcs[npc_id]["reaction"] = getTextFromLid("FR",trait.NAME_LID)
|
||||||
|
player_results = data["player"] = {}
|
||||||
|
for member in self.members:
|
||||||
|
player_results[member.username] = member.results
|
||||||
|
return data
|
||||||
|
|
||||||
def generate_data(self):
|
def generate_data(self):
|
||||||
#TODO Get language from player
|
#TODO Get language from player
|
||||||
@ -80,6 +96,21 @@ class Game:
|
|||||||
return 0
|
return 0
|
||||||
reaction_id = self.reaction_table[npc_id][int(reaction)]
|
reaction_id = self.reaction_table[npc_id][int(reaction)]
|
||||||
return read_image(f"./truthseeker/static/images/npc/{npc_id}/{reaction_id}.png")
|
return read_image(f"./truthseeker/static/images/npc/{npc_id}/{reaction_id}.png")
|
||||||
|
|
||||||
|
def getPlayerResults(self,responses: dict):
|
||||||
|
results = {}
|
||||||
|
try:
|
||||||
|
for npc_id in responses:
|
||||||
|
results[npc_id] = responses[npc_id] == str(self.reaction_table[npc_id])
|
||||||
|
return results
|
||||||
|
except:
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def has_finished(self):
|
||||||
|
for member in self.members:
|
||||||
|
if member.results == None : return False
|
||||||
|
return True
|
||||||
|
|
||||||
def __str__(self) -> str:
|
def __str__(self) -> str:
|
||||||
return "Game[game_id={}, owner={}, members={}]".format(self.game_id, self.owner, self.members)
|
return "Game[game_id={}, owner={}, members={}]".format(self.game_id, self.owner, self.members)
|
||||||
@ -109,7 +140,11 @@ def get_game(game_id):
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
def get_game_info(game_id):
|
def get_game_info(game_id):
|
||||||
"""
|
""" if not flask.session:
|
||||||
|
return {"error": 1, "msg": "No session"}
|
||||||
|
game = game_logic.get_game(flask.session["game_id"])
|
||||||
|
if game == None:
|
||||||
|
return {"error": 1, "msg": "this game doesn't exist"}
|
||||||
This function retrieve a the Game object linked to the game_id
|
This function retrieve a the Game object linked to the game_id
|
||||||
passed as parametter
|
passed as parametter
|
||||||
|
|
||||||
@ -131,10 +166,7 @@ def generateNpcText(npc: tables.Npc, lang: str) -> dict:
|
|||||||
return data
|
return data
|
||||||
|
|
||||||
def generateNpcReactions(npc : tables.Npc) ->list:
|
def generateNpcReactions(npc : tables.Npc) ->list:
|
||||||
data = []
|
return getNpcRandomTraitId(npc)
|
||||||
data.append(getNpcRandomTraitId(npc))
|
|
||||||
data.append(getNpcRandomTraitId(npc))
|
|
||||||
return data
|
|
||||||
|
|
||||||
def generatePlaceData(npcs :list, places: list, lang : str) -> dict:
|
def generatePlaceData(npcs :list, places: list, lang : str) -> dict:
|
||||||
data = {}
|
data = {}
|
||||||
@ -172,11 +204,17 @@ def generateGameData(LANG):
|
|||||||
data["questions"] = {}
|
data["questions"] = {}
|
||||||
data["questions"]["QA_0"] = getTextFromLid("FR",getRandomQuestion(0).TEXT_LID)
|
data["questions"]["QA_0"] = getTextFromLid("FR",getRandomQuestion(0).TEXT_LID)
|
||||||
data["questions"]["QA_1"] = getTextFromLid("FR",getRandomQuestion(1).TEXT_LID)
|
data["questions"]["QA_1"] = getTextFromLid("FR",getRandomQuestion(1).TEXT_LID)
|
||||||
|
data["traits"] = getTraits(LANG)
|
||||||
return data, reactions_table
|
return data, reactions_table
|
||||||
|
|
||||||
|
|
||||||
def read_image(path:str):
|
def read_image(path:str):
|
||||||
try:
|
try:
|
||||||
return open(path, "rb").read()
|
return open(path, "rb").read()
|
||||||
except:
|
except:
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
|
def getTraitIdFromString(trait):
|
||||||
|
return getTraitFromText(trait)
|
||||||
|
|
||||||
|
def get_npc_image(npc_id):
|
||||||
|
return read_image(f"./truthseeker/static/images/npc/{npc_id}/0.png")
|
@ -1,5 +1,5 @@
|
|||||||
import flask
|
import flask
|
||||||
|
import json
|
||||||
from truthseeker import APP
|
from truthseeker import APP
|
||||||
from truthseeker.logic import game_logic
|
from truthseeker.logic import game_logic
|
||||||
from truthseeker.utils import check_username
|
from truthseeker.utils import check_username
|
||||||
@ -81,6 +81,17 @@ def get_data():
|
|||||||
|
|
||||||
@routes_api.route("/getNpcImage", methods=["GET", "POST"])
|
@routes_api.route("/getNpcImage", methods=["GET", "POST"])
|
||||||
def getNpcImage():
|
def getNpcImage():
|
||||||
|
npc_id = flask.request.values.get("npcid")
|
||||||
|
image = game_logic.get_npc_image(npc_id)
|
||||||
|
|
||||||
|
response = flask.make_response(image)
|
||||||
|
response.headers.set('Content-Type', 'image/png')
|
||||||
|
response.headers.set(
|
||||||
|
'Content-Disposition', 'attachment', filename=f'0.png')
|
||||||
|
return response
|
||||||
|
|
||||||
|
@routes_api.route("/getNpcReaction", methods=["GET", "POST"])
|
||||||
|
def getNpcReaction():
|
||||||
|
|
||||||
if not flask.session:
|
if not flask.session:
|
||||||
return {"error": 1, "msg": "No session"}
|
return {"error": 1, "msg": "No session"}
|
||||||
@ -99,4 +110,52 @@ def getNpcImage():
|
|||||||
response.headers.set('Content-Type', 'image/png')
|
response.headers.set('Content-Type', 'image/png')
|
||||||
response.headers.set(
|
response.headers.set(
|
||||||
'Content-Disposition', 'attachment', filename=f'{reactionid}.png')
|
'Content-Disposition', 'attachment', filename=f'{reactionid}.png')
|
||||||
return response
|
return response
|
||||||
|
|
||||||
|
@routes_api.route("/gameProgress", methods=["GET", "POST"])
|
||||||
|
def gameProgress():
|
||||||
|
if not flask.session:
|
||||||
|
return {"error": 1, "msg": "No session"}
|
||||||
|
game = game_logic.get_game(flask.session["game_id"])
|
||||||
|
|
||||||
|
if game == None:
|
||||||
|
return {"error": 1, "msg": "this game doesn't exist"}
|
||||||
|
|
||||||
|
username = flask.session["username"]
|
||||||
|
game.get_member(username).progress += 1
|
||||||
|
|
||||||
|
APP.socketio_app.emit("gameprogress", [flask.session["username"]], room="game."+game.game_id)
|
||||||
|
|
||||||
|
return {"error": 0}
|
||||||
|
|
||||||
|
@routes_api.route("/submitAnswers", methods=["GET", "POST"])
|
||||||
|
def checkAnwser():
|
||||||
|
if not flask.session:
|
||||||
|
return {"error": 1, "msg": "No session"}
|
||||||
|
game = game_logic.get_game(flask.session["game_id"])
|
||||||
|
|
||||||
|
if game == None:
|
||||||
|
return {"error": 1, "msg": "this game doesn't exist"}
|
||||||
|
|
||||||
|
member = game.get_member(flask.session["username"])
|
||||||
|
|
||||||
|
if member.results != None:
|
||||||
|
return {"error": 1, "msg": "answers already submitted for this member"}
|
||||||
|
|
||||||
|
playerResponses = flask.request.values.get("responses")
|
||||||
|
|
||||||
|
if playerResponses == None:
|
||||||
|
return {"error": 1, "msg": "no responses were sent"}
|
||||||
|
|
||||||
|
results = game.getPlayerResults(json.loads(playerResponses))
|
||||||
|
if results == False:
|
||||||
|
return {"error": 1, "msg": "invalid npc sent"}
|
||||||
|
|
||||||
|
member.has_submitted = True
|
||||||
|
member.results = results
|
||||||
|
if game.has_finished():
|
||||||
|
jsonGameResults = game.generateGameResults()
|
||||||
|
APP.socketio_app.emit("gamefinshed",jsonGameResults,room="game."+game.game_id)
|
||||||
|
response = {"error": 0}
|
||||||
|
return response
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user