mirror of
https://github.com/Sneed-Group/Poodletooth-iLand
synced 2024-12-23 03:35:12 -06:00
105 lines
3.1 KiB
Python
105 lines
3.1 KiB
Python
from direct.directnotify import DirectNotifyGlobal
|
|
from direct.distributed.DistributedObjectAI import DistributedObjectAI
|
|
from direct.distributed.ClockDelta import *
|
|
import CogdoGameConsts
|
|
|
|
class DistCogdoGameAI(DistributedObjectAI):
|
|
notify = DirectNotifyGlobal.directNotify.newCategory("DistCogdoGameAI")
|
|
delayIntro = .1
|
|
|
|
def __init__(self, air):
|
|
DistributedObjectAI.__init__(self, air)
|
|
air.cogdoGame = self
|
|
self.interiorId = 0
|
|
self.exteriorZone = 0
|
|
self.difficultyOverrides = [2147483647, -1]
|
|
self.requests = {}
|
|
self.toons = []
|
|
|
|
def announceGenerate(self):
|
|
DistributedObjectAI.announceGenerate(self)
|
|
self.finishEvent = self.uniqueName('CogdoMazeGameDone')
|
|
self.gameOverEvent = self.uniqueName('CogdoMazeGameLose')
|
|
self.resetRequests()
|
|
|
|
def d_startIntro(self):
|
|
self.sendUpdate('setVisible', [])
|
|
taskMgr.doMethodLater(self.delayIntro, self.__startIntro, self.taskName('CogdoStartIntro'))
|
|
|
|
def getInterior(self):
|
|
return self.air.doId2do.get(self.interiorId)
|
|
|
|
def resetRequests(self):
|
|
interior = self.getInterior()
|
|
toons = interior.getToons()[0]
|
|
for toon in toons:
|
|
self.requests[toon] = 0
|
|
|
|
def __startIntro(self, task = None):
|
|
self.sendUpdate('setIntroStart', [])
|
|
if task:
|
|
return task.done
|
|
|
|
def setAvatarReady(self):
|
|
avId = self.air.getAvatarIdFromSender()
|
|
self.requests[avId] = 1
|
|
if not avId in self.toons: self.toons.append(avId)
|
|
if self.allToonsReady():
|
|
self.handleStart()
|
|
self.sendUpdate('setGameStart', [globalClockDelta.getRealNetworkTime()])
|
|
|
|
def allToonsReady(self):
|
|
interior = self.getInterior()
|
|
toons = interior.getToons()[0]
|
|
for toon in toons:
|
|
if self.requests.get(toon, 0) == 0:
|
|
return 0
|
|
return 1
|
|
|
|
def handleStart(self):
|
|
pass
|
|
|
|
def setInteriorId(self, id):
|
|
self.interiorId = id
|
|
|
|
def getInteriorId(self):
|
|
return self.interiorId
|
|
|
|
def setExteriorZone(self, zone):
|
|
self.exteriorZone = zone
|
|
|
|
def getExteriorZone(self):
|
|
return self.exteriorZone
|
|
|
|
def setDifficultyOverrides(self, difficulty, exteriorDifficulty):
|
|
self.difficultyOverrides = [difficulty, exteriorDifficulty]
|
|
|
|
def getDifficultyOverrides(self):
|
|
return self.difficultyOverrides
|
|
|
|
def toonWentSad(self, avId):
|
|
self.sendUpdate('setToonSad', [avId])
|
|
|
|
def setToons(self, toons):
|
|
self.toons = toons
|
|
|
|
def disable(self):
|
|
DistributedObjectAI.disable(self)
|
|
self.air.cogdoGame = None
|
|
del self.air.cogdoGame
|
|
|
|
def gameDone(self, failed=False):
|
|
if not failed:
|
|
if len(self.toons) == 0:
|
|
failed = True
|
|
|
|
if not failed:
|
|
messenger.send(self.finishEvent, [self.toons])
|
|
else:
|
|
messenger.send(self.gameOverEvent)
|
|
|
|
def getDifficulty(self):
|
|
return CogdoGameConsts.getDifficulty(self.getSafezoneId())
|
|
|
|
def getSafezoneId(self):
|
|
return CogdoGameConsts.getSafezoneId(self.exteriorZone)
|