oldschool-toontown/toontown/cogdominium/DistCogdoCraneGameAI.py

108 lines
4 KiB
Python

from panda3d.core import *
from panda3d.physics import *
from direct.directnotify.DirectNotifyGlobal import directNotify
from toontown.cogdominium.DistCogdoLevelGameAI import DistCogdoLevelGameAI
from toontown.cogdominium.DistCogdoCraneAI import DistCogdoCraneAI
from toontown.cogdominium import CogdoCraneGameConsts as GameConsts
from toontown.cogdominium.CogdoCraneGameBase import CogdoCraneGameBase
from toontown.cogdominium import CogdoGameConsts
from toontown.cogdominium.DistCogdoCraneMoneyBagAI import DistCogdoCraneMoneyBagAI
from toontown.cogdominium.DistCogdoCraneCogAI import DistCogdoCraneCogAI
from toontown.suit.SuitDNA import SuitDNA
import random
class DistCogdoCraneGameAI(CogdoCraneGameBase, DistCogdoLevelGameAI, NodePath):
notify = directNotify.newCategory('DistCogdoCraneGameAI')
def __init__(self, air, interior):
NodePath.__init__(self, uniqueName('CraneGameAI'))
DistCogdoLevelGameAI.__init__(self, air, interior)
self._cranes = [
None] * CogdoGameConsts.MaxPlayers
self._moneyBags = [
None] * 8
def delete(self):
DistCogdoLevelGameAI.delete(self)
self.removeNode()
def enterLoaded(self):
DistCogdoLevelGameAI.enterLoaded(self)
self.scene = NodePath('scene')
cn = CollisionNode('walls')
cs = CollisionSphere(0, 0, 0, 13)
cn.addSolid(cs)
cs = CollisionInvSphere(0, 0, 0, 42)
cn.addSolid(cs)
self.attachNewNode(cn)
for i in range(CogdoGameConsts.MaxPlayers):
crane = DistCogdoCraneAI(self.air, self, i)
crane.generateWithRequired(self.zoneId)
self._cranes[i] = crane
for i in range(len(self._moneyBags)):
mBag = DistCogdoCraneMoneyBagAI(self.air, self, i)
mBag.generateWithRequired(self.zoneId)
self._moneyBags[i] = mBag
def exitLoaded(self):
for i in range(len(self._moneyBags)):
if self._moneyBags[i]:
self._moneyBags[i].requestDelete()
self._moneyBags[i] = None
for i in range(CogdoGameConsts.MaxPlayers):
if self._cranes[i]:
self._cranes[i].requestDelete()
self._cranes[i] = None
DistCogdoLevelGameAI.exitLoaded(self)
def enterGame(self):
DistCogdoLevelGameAI.enterGame(self)
for i in range(self.getNumPlayers()):
self._cranes[i].request('Controlled', self.getToonIds()[i])
for i in range(len(self._moneyBags)):
if self._moneyBags[i]:
self._moneyBags[i].request('Initial')
self._cog = DistCogdoCraneCogAI(self.air, self, self.getDroneCogDNA(), random.randrange(4), globalClock.getFrameTime())
self._cog.generateWithRequired(self.zoneId)
self._scheduleGameDone()
def _scheduleGameDone(self):
timeLeft = GameConsts.Settings.GameDuration.get() - (globalClock.getRealTime() - self.getStartTime())
if timeLeft > 0:
self._gameDoneEvent = taskMgr.doMethodLater(timeLeft, self._gameDoneDL, self.uniqueName('boardroomGameDone'))
else:
self._gameDoneDL()
def exitGame(self):
self._cog.requestDelete()
self._cog = None
taskMgr.remove(self._gameDoneEvent)
self._gameDoneEvent = None
def _gameDoneDL(self, task = None):
self._handleGameFinished()
return task.done
def enterFinish(self):
DistCogdoLevelGameAI.enterFinish(self)
self._finishDoneEvent = taskMgr.doMethodLater(10.0, self._finishDoneDL, self.uniqueName('boardroomFinishDone'))
def exitFinish(self):
taskMgr.remove(self._finishDoneEvent)
self._finishDoneEvent = None
def _finishDoneDL(self, task):
self.announceGameDone()
return task.done
if __dev__:
def _handleGameDurationChanged(self, gameDuration):
if hasattr(self, '_gameDoneEvent') and self._gameDoneEvent != None:
taskMgr.remove(self._gameDoneEvent)
self._scheduleGameDone()