############################################## # Class: CostumeManagerAI # This class handles the loading of new # models that will replace models in one # or more hoods based on the holiday # requirements. ############################################## from toontown.ai import HolidayBaseAI from toontown.toonbase import ToontownGlobals from direct.directnotify import DirectNotifyGlobal from direct.showbase import DirectObject from toontown.toonbase import TTLocalizer from toontown.classicchars import DistributedVampireMickeyAI, DistributedSuperGoofyAI, DistributedWesternPlutoAI from toontown.classicchars import DistributedWitchMinnieAI, DistributedPoliceChipAI, DistributedJailbirdDaleAI from toontown.classicchars import DistributedFrankenDonaldAI, DistributedSockHopDaisyAI from toontown.classicchars import DistributedMickeyAI, DistributedGoofySpeedwayAI, DistributedPlutoAI from toontown.classicchars import DistributedMinnieAI, DistributedChipAI, DistributedDaleAI from toontown.classicchars import DistributedDonaldAI, DistributedDaisyAI from toontown.hood import MMHoodDataAI, BRHoodDataAI, TTHoodDataAI, DLHoodDataAI, GSHoodDataAI, DGHoodDataAI class CostumeManagerAI(HolidayBaseAI.HolidayBaseAI, DirectObject.DirectObject): notify = DirectNotifyGlobal.directNotify.newCategory('CostumeManagerAI') def __init__(self, air, holidayId): HolidayBaseAI.HolidayBaseAI.__init__(self, air, holidayId) self.__classicChars = {} self.hoods = [] self.runningState = 1 self.cCharsSwitched = 0 # For use with magic words self.stopForever = False # Overridden function ###################################################### # General format: if(self.holidayId == HOLIDAY_ID) # Get hood and call switchChars with new hood # and classicChar class. ###################################################### def start(self): if(self.holidayId == ToontownGlobals.HALLOWEEN_COSTUMES) or (self.holidayId == ToontownGlobals.SPOOKY_COSTUMES): self.accept("TTHoodSpawned", self.__welcomeValleySpawned) self.accept("TTHoodDestroyed", self.__welcomeValleyDestroyed) self.accept("GSHoodSpawned", self.__welcomeValleySpawned) self.accept("GSHoodDestroyed", self.__welcomeValleyDestroyed) if hasattr(simbase.air, "holidayManager") and simbase.air.holidayManager is not None: if self.holidayId in simbase.air.holidayManager.currentHolidays and simbase.air.holidayManager.currentHolidays[self.holidayId] != None: return for hood in simbase.air.hoods: if isinstance(hood, TTHoodDataAI.TTHoodDataAI): self.hoods.append(hood) self.__classicChars[str(hood)] = 1 hood.classicChar.transitionCostume() elif isinstance(hood, MMHoodDataAI.MMHoodDataAI): self.hoods.append(hood) self.__classicChars[str(hood)] = 1 hood.classicChar.transitionCostume() elif isinstance(hood, DGHoodDataAI.DGHoodDataAI): self.hoods.append(hood) self.__classicChars[str(hood)] = 1 hood.classicChar.transitionCostume() elif isinstance(hood, DLHoodDataAI.DLHoodDataAI): self.hoods.append(hood) self.__classicChars[str(hood)] = 1 hood.classicChar.transitionCostume() elif isinstance(hood, GSHoodDataAI.GSHoodDataAI): self.hoods.append(hood) self.__classicChars[str(hood)] = 1 hood.classicChar.transitionCostume() elif isinstance(hood, BRHoodDataAI.BRHoodDataAI): self.hoods.append(hood) self.__classicChars[str(hood)] = 1 hood.classicChar.transitionCostume() elif(self.holidayId == ToontownGlobals.APRIL_FOOLS_COSTUMES): self.accept("TTHoodSpawned", self.__welcomeValleySpawned) self.accept("TTHoodDestroyed", self.__welcomeValleyDestroyed) self.accept("GSHoodSpawned", self.__welcomeValleySpawned) self.accept("GSHoodDestroyed", self.__welcomeValleyDestroyed) if hasattr(simbase.air, "holidayManager"): if self.holidayId in simbase.air.holidayManager.currentHolidays and simbase.air.holidayManager.currentHolidays[self.holidayId] != None: return for hood in simbase.air.hoods: # The character is neither transitioning or has transitioned into a different costume if hasattr(hood, "classicChar") and hood.classicChar.transitionToCostume == 0 and hood.classicChar.diffPath == None: if isinstance(hood, TTHoodDataAI.TTHoodDataAI): # import pdb; pdb.set_trace() self.hoods.append(hood) self.__classicChars[str(hood)] = 1 hood.classicChar.transitionCostume() elif isinstance(hood, BRHoodDataAI.BRHoodDataAI ): self.hoods.append(hood) self.__classicChars[str(hood)] = 1 hood.classicChar.transitionCostume() elif isinstance(hood, MMHoodDataAI.MMHoodDataAI ): self.hoods.append(hood) self.__classicChars[str(hood)] = 1 hood.classicChar.transitionCostume() elif isinstance(hood, DGHoodDataAI.DGHoodDataAI ): self.hoods.append(hood) self.__classicChars[str(hood)] = 1 hood.classicChar.transitionCostume() elif isinstance(hood, DLHoodDataAI.DLHoodDataAI ): self.hoods.append(hood) self.__classicChars[str(hood)] = 1 hood.classicChar.transitionCostume() elif isinstance(hood, GSHoodDataAI.GSHoodDataAI ): self.hoods.append(hood) self.__classicChars[str(hood)] = 1 hood.classicChar.transitionCostume() # Overridden function def stop(self): self.ignoreAll() del self.__classicChars def goingToStop(self, stopForever=False): # import pdb; pdb.set_trace() self.notify.debug("GoingToStop") self.stopForever = stopForever self.runningState = 0 if(self.holidayId in [ToontownGlobals.HALLOWEEN_COSTUMES, ToontownGlobals.APRIL_FOOLS_COSTUMES, ToontownGlobals.SPOOKY_COSTUMES]): self.ignore("TTHoodSpawned") self.ignore("GSHoodSpawned") for hood in self.hoods: hood.classicChar.transitionCostume() self.__classicChars[str(hood)] = 0 def getRunningState(self): return self.runningState ######################################################## # Trigger the switching of the character ######################################################## def triggerSwitch(self, curWalkNode, curChar): if(self.holidayId == ToontownGlobals.HALLOWEEN_COSTUMES or self.holidayId == ToontownGlobals.SPOOKY_COSTUMES): for hood in self.hoods: if hood.classicChar == curChar: hood.classicChar.fadeAway() if(curChar.getName() == TTLocalizer.VampireMickey): taskMgr.doMethodLater(0.5, self.__switchChars, "SwitchChars"+str(hood), extraArgs = [DistributedMickeyAI.DistributedMickeyAI, curWalkNode, hood]) elif(curChar.getName() == TTLocalizer.Mickey): taskMgr.doMethodLater(0.5, self.__switchChars, "SwitchChars"+str(hood), extraArgs = [DistributedVampireMickeyAI.DistributedVampireMickeyAI, curWalkNode, hood]) elif(curChar.getName() == TTLocalizer.WitchMinnie): taskMgr.doMethodLater(0.5, self.__switchChars, "SwitchChars"+str(hood), extraArgs = [DistributedMinnieAI.DistributedMinnieAI, curWalkNode, hood]) elif(curChar.getName() == TTLocalizer.Minnie): taskMgr.doMethodLater(0.5, self.__switchChars, "SwitchChars"+str(hood), extraArgs = [DistributedWitchMinnieAI.DistributedWitchMinnieAI, curWalkNode, hood]) elif(curChar.getName() == TTLocalizer.Donald): taskMgr.doMethodLater(0.5, self.__switchChars, "SwitchChars"+str(hood), extraArgs = [DistributedFrankenDonaldAI.DistributedFrankenDonaldAI, curWalkNode, hood]) elif(curChar.getName() == TTLocalizer.FrankenDonald): taskMgr.doMethodLater(0.5, self.__switchChars, "SwitchChars"+str(hood), extraArgs = [DistributedDonaldAI.DistributedDonaldAI, curWalkNode, hood]) elif(curChar.getName() == TTLocalizer.Daisy): taskMgr.doMethodLater(0.5, self.__switchChars, "SwitchChars"+str(hood), extraArgs = [DistributedSockHopDaisyAI.DistributedSockHopDaisyAI, curWalkNode, hood]) elif(curChar.getName() == TTLocalizer.SockHopDaisy): taskMgr.doMethodLater(0.5, self.__switchChars, "SwitchChars"+str(hood), extraArgs = [DistributedDaisyAI.DistributedDaisyAI, curWalkNode, hood]) elif(curChar.getName() == TTLocalizer.Goofy): taskMgr.doMethodLater(0.5, self.__switchChars, "SwitchChars"+str(hood), extraArgs = [DistributedSuperGoofyAI.DistributedSuperGoofyAI, curWalkNode, hood]) elif(curChar.getName() == TTLocalizer.SuperGoofy): taskMgr.doMethodLater(0.5, self.__switchChars, "SwitchChars"+str(hood), extraArgs = [DistributedGoofySpeedwayAI.DistributedGoofySpeedwayAI, curWalkNode, hood]) elif(curChar.getName() == TTLocalizer.Pluto): taskMgr.doMethodLater(0.5, self.__switchChars, "SwitchChars"+str(hood), extraArgs = [DistributedWesternPlutoAI.DistributedWesternPlutoAI, curWalkNode, hood]) elif(curChar.getName() == TTLocalizer.WesternPluto): taskMgr.doMethodLater(0.5, self.__switchChars, "SwitchChars"+str(hood), extraArgs = [DistributedPlutoAI.DistributedPlutoAI, curWalkNode, hood]) elif(curChar.getName() == TTLocalizer.Chip): taskMgr.doMethodLater(0.5, self.__switchChars, "SwitchChars"+str(hood), extraArgs = [DistributedChipAI.DistributedPoliceChipAI, curWalkNode, hood]) elif(curChar.getName() == TTLocalizer.PoliceChip): taskMgr.doMethodLater(0.5, self.__switchChars, "SwitchChars"+str(hood), extraArgs = [DistributedPoliceChipAI.DistributedChipAI, curWalkNode, hood]) elif(curChar.getName() == TTLocalizer.Dale): taskMgr.doMethodLater(0.5, self.__switchChars, "SwitchChars"+str(hood), extraArgs = [DistributedDaleAI.DistributedJailbirdDaleAI, curWalkNode, hood]) elif(curChar.getName() == TTLocalizer.JailbirdDale): taskMgr.doMethodLater(0.5, self.__switchChars, "SwitchChars"+str(hood), extraArgs = [DistributedJailbirdDaleAI.DistributedDaleAI, curWalkNode, hood]) elif(self.holidayId == ToontownGlobals.APRIL_FOOLS_COSTUMES): for hood in self.hoods: if hood.classicChar == curChar: hood.classicChar.fadeAway() if(curChar.getName() == TTLocalizer.Daisy): taskMgr.doMethodLater(0.5, self.__switchChars, "SwitchChars"+str(hood), extraArgs = [DistributedMickeyAI.DistributedMickeyAI, curWalkNode, hood]) elif(curChar.getName() == TTLocalizer.Mickey): taskMgr.doMethodLater(0.5, self.__switchChars, "SwitchChars"+str(hood), extraArgs = [DistributedDaisyAI.DistributedDaisyAI, curWalkNode, hood]) elif(curChar.getName() == TTLocalizer.Goofy): taskMgr.doMethodLater(0.5, self.__switchChars, "SwitchChars"+str(hood), extraArgs = [DistributedDonaldAI.DistributedDonaldAI, curWalkNode, hood]) elif(curChar.getName() == TTLocalizer.Donald): taskMgr.doMethodLater(0.5, self.__switchChars, "SwitchChars"+str(hood), extraArgs = [DistributedGoofySpeedwayAI.DistributedGoofySpeedwayAI, curWalkNode, hood]) elif(curChar.getName() == TTLocalizer.Pluto): taskMgr.doMethodLater(0.5, self.__switchChars, "SwitchChars"+str(hood), extraArgs = [DistributedMinnieAI.DistributedMinnieAI, curWalkNode, hood]) elif(curChar.getName() == TTLocalizer.Minnie): taskMgr.doMethodLater(0.5, self.__switchChars, "SwitchChars"+str(hood), extraArgs = [DistributedPlutoAI.DistributedPlutoAI, curWalkNode, hood]) ######################################################## # Switched the classic character with a new one # represented by class 'newChar' in 'hood'. ######################################################## def __switchChars(self, newChar, walkNode, hood): self.notify.debug("SwitchingChars %s to %s" %(hood.classicChar, newChar)) self.notify.debugStateCall(self) hood.classicChar.requestDelete() if hasattr(hood, "air") and hood.air: hood.classicChar = newChar(hood.air) hood.classicChar.generateWithRequired(hood.zoneId) hood.addDistObj(hood.classicChar) hood.classicChar.walk.setCurNode(walkNode) hood.classicChar.fsm.request('Walk') else: self.notify.warning("Hood empty during character switch") holidayDone = 1 for classicChar in self.__classicChars.values(): if classicChar == 1: holidayDone = 0 if holidayDone: self.cCharsSwitched += 1 if self.cCharsSwitched == len(self.__classicChars): simbase.air.holidayManager.delayedEnd(self.holidayId, self.stopForever) ######################################################## # Function to handle the spawning of a new welcome # valley server ######################################################## def __welcomeValleySpawned(self, newHood): if(self.holidayId == ToontownGlobals.HALLOWEEN_COSTUMES): self.__addAVampire(newHood) elif(self.holidayId == ToontownGlobals.APRIL_FOOLS_COSTUMES): self.__aprilFoolsSwap(newHood) elif(self.holidayId == ToontownGlobals.SPOOKY_COSTUMES): self.__addAVampire(newHood) def __welcomeValleyDestroyed(self, newHood): if(self.holidayId == ToontownGlobals.HALLOWEEN_COSTUMES): self.__removeAVampire(newHood) elif(self.holidayId == ToontownGlobals.APRIL_FOOLS_COSTUMES): self.__aprilFoolsRevert(newHood) elif(self.holidayId == ToontownGlobals.SPOOKY_COSTUMES): self.__removeAVampire(newHood) def __aprilFoolsSwap(self, newHood): for hood in self.hoods: if hood == newHood: return self.hoods.append(newHood) self.__classicChars[str(newHood)] = 1 newHood.classicChar.transitionCostume() def __aprilFoolsRevert(self, deadHood): if str(deadHood) in self.__classicChars: del self.__classicChars[str(deadHood)] for hood in self.hoods: if hood == deadHood: self.hoods.remove(hood) return def __addAVampire(self, newHood): for hood in self.hoods: if hood == newHood: return self.hoods.append(newHood) self.__classicChars[str(newHood)] = 1 newHood.classicChar.transitionCostume() def __removeAVampire(self, deadHood): if str(deadHood) in self.__classicChars: del self.__classicChars[str(deadHood)] for hood in self.hoods: if hood == deadHood: self.hoods.remove(hood) return