added get png from api
This commit is contained in:
		
							parent
							
								
									8720dc39f3
								
							
						
					
					
						commit
						51e5ac5c3b
					
				| @ -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 | ||||
|  | ||||
| @ -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 | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user