Merge pull request #20 from ThomasRubini/get_images

added get png from api
This commit is contained in:
Djalim Simaila 2023-01-09 09:58:53 +01:00 committed by GitHub
commit 3ce9fea232
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 49 additions and 6 deletions

View File

@ -52,6 +52,7 @@ class Game:
self.members = []
self.has_started = False
self.gamedata = {}
self.reaction_table = {}
def set_owner(self, username):
self.owner = Member(username)
@ -59,7 +60,8 @@ class Game:
return self.owner
def generate_data(self):
self.gamedata = generateGameData("FR")
#TODO Get language from player
self.gamedata, self.reaction_table = generateGameData("FR")
def get_member(self, username):
for member in self.members:
@ -73,6 +75,12 @@ class Game:
self.members.append(member)
return member
def get_npc_reaction(self,npc_id,reaction):
if npc_id not in self.reaction_table.keys():
return 0
reaction_id = self.reaction_table[npc_id][int(reaction)]
return read_image(f"./truthseeker/static/images/npc/{npc_id}/{reaction_id}.png")
def __str__(self) -> str:
return "Game[game_id={}, owner={}, members={}]".format(self.game_id, self.owner, self.members)
@ -115,13 +123,17 @@ def get_game_info(game_id):
else:
return None
def generateNpcData(npc: tables.Npc, lang: str) -> dict:
def generateNpcText(npc: tables.Npc, lang: str) -> dict:
data = {}
data["name"] = getTextFromLid(lang, npc.NAME_LID)
data["QA_0"] = getTextFromLid(lang, getNpcRandomAnswer(npc,0).TEXT_LID)
data["QA_1"] = getTextFromLid(lang, getNpcRandomAnswer(npc,1).TEXT_LID)
data["R_0"] = getNpcRandomTraitId(npc)
data["R_1"] = getNpcRandomTraitId(npc)
return data
def generateNpcReactions(npc : tables.Npc) ->list:
data = []
data.append(getNpcRandomTraitId(npc))
data.append(getNpcRandomTraitId(npc))
return data
def generatePlaceData(npcs :list, places: list, lang : str) -> dict:
@ -140,13 +152,15 @@ def generatePlaceData(npcs :list, places: list, lang : str) -> dict:
def generateGameData(LANG):
data = {}
data["npcs"] = {}
reactions_table = {}
npcs = []
while len(npcs) != 5:
npc = getRandomNpc()
if npc not in npcs :
npcs.append(npc)
for npc in npcs:
data["npcs"][str(npc.NPC_ID)] = generateNpcData(npc,LANG)
data["npcs"][str(npc.NPC_ID)] = generateNpcText(npc,LANG)
reactions_table[str(npc.NPC_ID)] = generateNpcReactions(npc)
places = []
while len(places) != 3:
@ -158,4 +172,11 @@ def generateGameData(LANG):
data["questions"] = {}
data["questions"]["QA_0"] = getTextFromLid("FR",getRandomQuestion(0).TEXT_LID)
data["questions"]["QA_1"] = getTextFromLid("FR",getRandomQuestion(1).TEXT_LID)
return data
return data, reactions_table
def read_image(path:str):
try:
return open(path, "rb").read()
except:
return 1

View File

@ -77,4 +77,26 @@ def get_data():
response = {}
response["error"] = 0
response["gamedata"] = game.gamedata
return response
@routes_api.route("/getNpcImage", methods=["GET", "POST"])
def getNpcImage():
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"}
npc_id = flask.request.values.get("npcid")
reactionid = flask.request.values.get("reactionid")
image = game.get_npc_reaction(npc_id,reactionid)
errors = ["npc not in game","error reading file"]
if image in [0,1]:
return {"error" :1, "msg": errors[image]} , 500
response = flask.make_response(image)
response.headers.set('Content-Type', 'image/png')
response.headers.set(
'Content-Disposition', 'attachment', filename=f'{reactionid}.png')
return response