oldschool-toontown/toontown/tutorial/SuitPlannerTutorialAI.py

74 lines
2.5 KiB
Python

""" SuitPlannerTutorial module: contains the SuitPlannerTutorial class
which handles management of the suit you will fight during the
tutorial."""
from otp.ai.AIBaseGlobal import *
from direct.directnotify import DirectNotifyGlobal
from toontown.suit import DistributedTutorialSuitAI
from . import TutorialBattleManagerAI
class SuitPlannerTutorialAI:
"""
SuitPlannerTutorialAI: manages the single suit that you fight during
the tutorial.
"""
notify = DirectNotifyGlobal.directNotify.newCategory(
'SuitPlannerTutorialAI')
def __init__(self, air, zoneId, battleOverCallback):
# Store these things
self.zoneId = zoneId
self.air = air
self.battle = None
# This callback will be used to open the HQ doors when the
# battle is over.
self.battleOverCallback = battleOverCallback
# Create a battle manager
self.battleMgr = TutorialBattleManagerAI.TutorialBattleManagerAI(
self.air)
# Create a flunky
newSuit = DistributedTutorialSuitAI.DistributedTutorialSuitAI(self.air, self)
newSuit.setupSuitDNA(1, 1, "c")
# This is a special tutorial path state
newSuit.generateWithRequired(self.zoneId)
self.suit = newSuit
def cleanup(self):
self.zoneId = None
self.air = None
if self.suit:
self.suit.requestDelete()
self.suit = None
if self.battle:
#self.battle.requestDelete()
#RAU made to kill the mem leak when you close the window in the middle of the battle tutorial
cellId = self.battle.battleCellId
battleMgr = self.battle.battleMgr
if cellId in battleMgr.cellId2battle:
battleMgr.destroy(self.battle)
self.battle = None
def getDoId(self):
# This is here because the suit expects the suit planner to be
# a distributed object, if it has a suit planner. We want it to
# have a suit planner, but not a distributed one, so we return
# 0 when asked what our DoId is. Kind of hackful, I guess.
return 0
def requestBattle(self, zoneId, suit, toonId):
# 70, 20, 0 is a battle cell position that I just made up.
self.battle = self.battleMgr.newBattle(
zoneId, zoneId, Vec3(35, 20, 0),
suit, toonId,
finishCallback=self.battleOverCallback)
return 1
def removeSuit(self, suit):
# Get rid of the suit.
suit.requestDelete()
self.suit = None