Code source de NaoQuest.scenario
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
GNU AFFERO GENERAL PUBLIC LICENSE
Version 3, 19 November 2007
"""
try:
from globals_nao_quest import config
from NaoCreator.setting import Setting
import json
import NaoCreator.Tool.speech_move as sm
import NaoQuest.quest as q
import NaoCreator.SpeechToText.nao_key_reco as nkr
import NaoCreator.SpeechToText.nao_listen as nl
import codecs
except Exception as e:
print e
[docs]class Scenario(object):
"""
Représente un Scénario gérant sa propre exécution.
"""
def __init__(self, inner_name):
"""
Charge un scénario selon son nom
:param name: Le nom du scénario
"""
self.inner_name = inner_name
self.filepath = config["scenarios"]["path"].format(inner_name)
# default values
self.name = ""
self.desc = ""
self.pres = True
self.next_scenario = list()
self.completed = False
self.xp = 0
self.caller = None
self.__dict__.update(json.load(open(self.filepath), "utf-8"))
self.starting_quest = q.Quest(inner_name, self.starting_quest)
self.next_scenario = [Scenario(name) for name in self.next_scenario]
def _pres(self):
"""
Présente le scénario si l'attribut "pres" = True
"""
if hasattr(self, "pres") and not self.pres:
return
if hasattr(self, "name") and self.name:
sm.speech_and_move(u"L'intitulé de cet objectif est. {}.".format(self.name))
if hasattr(self, "desc") and self.desc:
sm.speech_and_move(self.desc)
self.pres = False
[docs] def launch(self, player=None):
"""
Démarre le Scénario
:param player: Le joueur démarrant le Scénario
:return: True si l'exécution termine le scénario (completed=True), False sinon
"""
if player:
player.current_scenario = self
self._pres()
if self.starting_quest is None:
print("Error! Scenario {} has no starting quest!".format(self.inner_name))
return True
todo = self.starting_quest.choose_quest()
if todo:
if len(todo) == 1:
todo[0].caller = self
todo[0].launch(player)
else:
sm.speech_and_move(u"Il y a plusieurs quêtes disponibles. Laquelle veux-tu executer?")
kws = ["première", "2e" if not Setting.NAO_CONNECTED else "deuxième",
"troisième", "quatrième", "cinquième", "sixième"]
sm.speech_and_move(u"".join([u"La {} s'intitule {}.".format(kws[i], todo[i].name) for i in range(len(todo))]))
msg = codecs.encode(nl.nao_listen().lower(), "utf-8")
rep = nkr.sentence_keywords(msg, kws)
if not rep:
print("Non reconnu !")
return False
todo[kws.index(rep[0])].caller = self
todo[kws.index(rep[0])].launch(player)
todo = self.starting_quest.choose_quest()
if not todo:
self.completed = True
# give xp
if player:
player.give_xp(self.xp)
return True
else:
return False