home *** CD-ROM | disk | FTP | other *** search
/ GameStar 2006 January / Gamestar_80_2006-01_dvd.iso / Dema / Civilization4 / data1.cab / Civ4DemoComponent / Assets / Python / CvQuestManager.py < prev    next >
Encoding:
Python Source  |  2005-11-09  |  5.5 KB  |  147 lines

  1. ## Sid Meier's Civilization 4
  2. ## Copyright Firaxis Games 2005
  3. ##
  4. ## Jesse Smith - 06-2005
  5. ## - Class to handle Quest Messaging
  6.  
  7. import CvUtil
  8. import CvTutorialQuestScreen
  9. import CvScreenEnums
  10. from CvPythonExtensions import *
  11.  
  12. gc = CyGlobalContext()
  13.  
  14. class CvQuestManager:
  15.     ' Class for Managing Quests '
  16.     def __init__(self):
  17.         #CvUtil.pyPrint("CvQuestManager.__init__ %s" %self)
  18.         self.__l_Quests = list()
  19.         self.__l_CompletedQuests = list()
  20.         self.__screenName = ""
  21.         self.__iScreenID = -1
  22.     
  23.     def initQuestManager( self, strQuestType, argsList ):
  24.         #CvUtil.pyPrint( "CvQuestManager.initQuestManager" )
  25.         objective, update = argsList
  26.         self.strQuestType = strQuestType
  27.         self.strCurrentObjective = objective
  28.         self.strQuestUpdate = update
  29.     
  30.     def setScreenValues( self, strScreenName, iScreenID ):
  31.         self.__screenName = strScreenName
  32.         self.__iScreenID = iScreenID
  33.  
  34.     def getQuestScreen( self ):
  35.         if self.__iScreenID == CvScreenEnums.TUTORIAL_SCREEN:
  36.             return CvAdvisorScreen.CvAdvisorScreen()
  37.     
  38.     def showQuestScreen(self):
  39.         self.getQuestScreen().interfaceScreen()            
  40.         
  41.     def getCompletedQuestMessages( self ):
  42.         ' list - returns shown message list - called by CvAppInterface.onSave '
  43.         CvUtil.pyPrint( "CvQuestManager.getCompletedQuestMessages" )
  44.         return self.__l_CompletedQuests
  45.     
  46.     def setCompletedQuestMessages( self, data ):
  47.         ' called by CvAppInterface.OnLoad '
  48.         CvUtil.pyPrint( "CvQuestManager.setCompletedQuestMessages" )
  49.         self.__l_ShownMessages = data
  50.     
  51.     def loadQuestInfos( self ):
  52.         ' initializes data from dictionary_TutorialQuestInfo and adds them to l_Quests '
  53.         CvUtil.pyPrint( "CvQuestManager.initQuestInfos (%s)" % self.strQuestType )
  54.         [ self.__l_Quests.append(gc.getQuestInfo(i)) for i in range(gc.getNumQuestInfos()) if self.strQuestType in gc.getQuestInfo(i).getType() ]
  55.     
  56.     def processQuest( self, strQuestInfoKey ):
  57.         ' handles the processing of the quest, main loop '
  58.         CvUtil.pyPrint( "CvQuestManager.processQuest (%s)" % strQuestInfoKey )
  59.         
  60.         CyInterface().stop2DSound()
  61.  
  62.         Quest = self.getQuest( strQuestInfoKey )
  63.         
  64.         # if strQuestInfoKey has not been completed
  65.         if ( Quest and strQuestInfoKey not in self.__l_CompletedQuests):
  66.             # if the linked quest is not yet complete then process this quest
  67.             if ( not self.isQuestLinkComplete( Quest ) ):
  68.                 # update CvTutorialQuestScreen
  69.                 self.updateQuestObjective( Quest )
  70.                 self.updateQuestBodyText( Quest )
  71.                 self.displayImmediateMessage( Quest )
  72.                 self.doQuestComplete( Quest )
  73.                 return True
  74.             
  75.             # otherwise process quest link
  76.             else:
  77.                 CvUtil.pyPrint( "CvQuestManager.processQuest: Processing Quest (%s) Link" % Quest.getType() )
  78.                 self.doQuestLink( Quest )
  79.                 return True
  80.         return False
  81.  
  82.     def getQuest( self, strQuestInfoKey ):
  83.         ' returns a Quest object from the g_QuestInfos '
  84.         if self.__l_Quests:
  85.             for Quest in self.__l_Quests:
  86.                 if ( Quest.getType() == strQuestInfoKey ):
  87.                     return Quest
  88.         return None
  89.     
  90.     def updateQuestObjective( self, Quest ):
  91.         ' updates the header text '
  92.         CvUtil.pyPrint( "CvQuestManager.updateQuestObjective (%s)" % Quest.getType() )
  93.         if ( Quest.getQuestObjective() != "NONE" ):
  94.             self.playQuestSound(Quest)
  95.             objectiveText = u"%s %s" %( self.strCurrentObjective, self.getQuestText(Quest.getQuestObjective()) )
  96.             self.getQuestScreen().updateHeader( objectiveText )
  97.     
  98.     def updateQuestBodyText( self, Quest ):
  99.         ' updates the body text '
  100.         CvUtil.pyPrint( "CvQuestManager.updateQuestBodyText (%s)" % Quest.getType() )
  101.         if ( Quest.getQuestBodyText() != "NONE" ):
  102.             bodyText = "%s" %(  self.getQuestText(Quest.getQuestBodyText()), )
  103.             self.getQuestScreen().updateBodyText( bodyText )
  104.     
  105.     def displayImmediateMessage( self, Quest ):
  106.         ' displays an immediate message '
  107.         CvUtil.pyPrint( "CvQuestManager.displayImmediateMessage (%s)" % Quest.getType() )
  108.         if ( Quest.getNumQuestMessages() > 0 ):
  109.             for i in range( Quest.getNumQuestMessages() ):
  110.                 messageText = "%s" %( self.getQuestText(Quest.getQuestMessages(i)),)
  111.                 CyInterface().addImmediateMessage( messageText, "" )
  112.             
  113.     def isQuestLinkComplete( self, Quest ):
  114.         ' test to see if the quests link has been completed or not '
  115.         CvUtil.pyPrint( "CvQuestManager.isQuestLinkComplete (%s)" % Quest.getType() )
  116.         if ( Quest.getNumQuestLinks() > 0 ):    
  117.             return ( Quest.getType() in self.__l_CompletedQuests )
  118.         return False
  119.     
  120.     def doQuestComplete( self, Quest ):
  121.         ' marks a quest Complete '
  122.         CvUtil.pyPrint( "CvQuestManager.doQuestComplete (%s)" % Quest.getType() )
  123.         self.__l_CompletedQuests.append( Quest.getType() )
  124.     
  125.     def getQuestText( self, strQuestInfoType ):
  126.         ' gets the Quest Text from the Translator '
  127.         CvUtil.pyPrint( "CvQuestManager.getQuestText (%s)" % strQuestInfoType )
  128.         return CyTranslator().getText(strQuestInfoType, tuple())
  129.     
  130.     def getLastQuestType( self ):
  131.         ' returns the questinfo type for the last quest that was processed '
  132.         CvUtil.pyPrint( "CvQuestManager.getLastQuestType (%s)" % self.__l_CompletedQuests[len(self.__l_CompletedQuests)-1] )
  133.         return self.__l_CompletedQuests[ len(self.__l_CompletedQuests) - 1 ]
  134.     
  135.     def isQuestCompleted( self, strQuestInfoType ):
  136.         ' returns whether a questinfo type has been completed '
  137.         if ( strQuestInfoType in self.__l_CompletedQuests ):
  138.             return True
  139.         return False
  140.     
  141.     def playQuestSound( self, Quest ):
  142.         ' plays a 2D sound for the quest '
  143.         CvUtil.pyPrint( "CvQuestManager.playQuestSound (%s)" % Quest.getType() )
  144.         questSound = Quest.getQuestSounds(0)
  145.         if questSound:
  146.             CyInterface().playGeneralSound(questSound)
  147.