2019-11-02 17:27:54 -05:00
|
|
|
from direct.distributed.ClockDelta import globalClockDelta
|
2022-12-16 18:40:57 -06:00
|
|
|
from panda3d.core import Point3
|
2019-11-02 17:27:54 -05:00
|
|
|
from toontown.toonbase import TTLocalizer
|
2019-12-30 00:07:56 -06:00
|
|
|
from . import PartyGlobals
|
|
|
|
from .DistributedPartyTeamActivity import DistributedPartyTeamActivity
|
|
|
|
from .PartyCogActivity import PartyCogActivity
|
2019-11-02 17:27:54 -05:00
|
|
|
|
|
|
|
class DistributedPartyCogActivity(DistributedPartyTeamActivity):
|
|
|
|
notify = directNotify.newCategory('DistributedPartyCogActivity')
|
|
|
|
players = {}
|
|
|
|
localPlayer = None
|
|
|
|
view = None
|
|
|
|
|
|
|
|
def __init__(self, cr, arenaModel = 'phase_13/models/parties/cogPieArena_model', texture = None):
|
|
|
|
DistributedPartyTeamActivity.__init__(self, cr, PartyGlobals.ActivityIds.PartyCog, startDelay=PartyGlobals.CogActivityStartDelay, balanceTeams=PartyGlobals.CogActivityBalanceTeams)
|
|
|
|
self.arenaModel = arenaModel
|
|
|
|
self.texture = texture
|
|
|
|
|
|
|
|
def load(self):
|
|
|
|
DistributedPartyTeamActivity.load(self)
|
|
|
|
self.view = PartyCogActivity(self, self.arenaModel, self.texture)
|
|
|
|
self.view.load()
|
|
|
|
|
|
|
|
def announceGenerate(self):
|
|
|
|
DistributedPartyTeamActivity.announceGenerate(self)
|
|
|
|
for i in range(len(self.toonIds)):
|
|
|
|
for toonId in self.toonIds[i]:
|
|
|
|
toon = base.cr.doId2do.get(toonId, None)
|
|
|
|
if toon:
|
|
|
|
self.view.handleToonJoined(toon, i, lateEntry=True)
|
|
|
|
|
|
|
|
return
|
|
|
|
|
|
|
|
def unload(self):
|
|
|
|
if hasattr(self, 'view') and self.view is not None:
|
|
|
|
self.view.unload()
|
|
|
|
del self.view
|
|
|
|
DistributedPartyTeamActivity.unload(self)
|
|
|
|
return
|
|
|
|
|
|
|
|
def enable(self):
|
|
|
|
DistributedPartyTeamActivity.enable(self)
|
|
|
|
|
|
|
|
def disable(self):
|
|
|
|
DistributedPartyTeamActivity.disable(self)
|
|
|
|
|
|
|
|
def getTitle(self):
|
|
|
|
return TTLocalizer.PartyCogTitle
|
|
|
|
|
|
|
|
def getInstructions(self):
|
|
|
|
return TTLocalizer.PartyCogInstructions
|
|
|
|
|
|
|
|
def pieThrow(self, toonId, timestamp, h, x, y, z, power):
|
|
|
|
if toonId not in self.toonIds:
|
|
|
|
return
|
|
|
|
if toonId != base.localAvatar.doId:
|
|
|
|
self.view.pieThrow(toonId, timestamp, h, Point3(x, y, z), power)
|
|
|
|
|
|
|
|
def b_pieThrow(self, toon, power):
|
|
|
|
timestamp = globalClockDelta.localToNetworkTime(globalClock.getFrameTime(), bits=32)
|
|
|
|
pos = toon.getPos()
|
|
|
|
h = toon.getH()
|
|
|
|
toonId = toon.doId
|
|
|
|
self.view.pieThrow(toonId, timestamp, h, pos, power)
|
|
|
|
self.d_broadcastPieThrow(toonId, timestamp, h, pos[0], pos[1], pos[2], power)
|
|
|
|
|
|
|
|
def d_broadcastPieThrow(self, toonId, timestamp, h, x, y, z, power):
|
|
|
|
self.sendUpdate('pieThrow', [toonId,
|
|
|
|
timestamp,
|
|
|
|
h,
|
|
|
|
x,
|
|
|
|
y,
|
|
|
|
z,
|
|
|
|
power])
|
|
|
|
|
|
|
|
def pieHitsToon(self, toonId, timestamp, x, y, z):
|
|
|
|
if toonId not in self.toonIds:
|
|
|
|
return
|
|
|
|
self.view.pieHitsToon(toonId, timestamp, Point3(x, y, z))
|
|
|
|
|
|
|
|
def d_broadcastPieHitsToon(self, toonId, timestamp, pos):
|
|
|
|
self.sendUpdate('pieHitsToon', [toonId,
|
|
|
|
timestamp,
|
|
|
|
pos[0],
|
|
|
|
pos[1],
|
|
|
|
pos[2]])
|
|
|
|
|
|
|
|
def b_pieHitsToon(self, toonId, timestamp, pos):
|
|
|
|
self.view.pieHitsToon(toonId, timestamp, pos)
|
|
|
|
self.d_broadcastPieHitsToon(toonId, timestamp, pos)
|
|
|
|
|
|
|
|
def pieHitsCog(self, toonId, timestamp, hitCogNum, x, y, z, direction, part):
|
|
|
|
if toonId not in self.toonIds:
|
|
|
|
return
|
|
|
|
if toonId != base.localAvatar.doId:
|
|
|
|
self.view.pieHitsCog(timestamp, hitCogNum, Point3(x, y, z), direction, part)
|
|
|
|
|
|
|
|
def b_pieHitsCog(self, timestamp, hitCogNum, pos, direction, part):
|
|
|
|
self.view.pieHitsCog(timestamp, hitCogNum, pos, direction, part)
|
|
|
|
self.d_broadcastSendPieHitsCog(timestamp, hitCogNum, pos, direction, part)
|
|
|
|
|
|
|
|
def d_broadcastSendPieHitsCog(self, timestamp, hitCogNum, pos, direction, part):
|
|
|
|
self.sendUpdate('pieHitsCog', [base.localAvatar.doId,
|
|
|
|
timestamp,
|
|
|
|
hitCogNum,
|
|
|
|
pos[0],
|
|
|
|
pos[1],
|
|
|
|
pos[2],
|
|
|
|
direction,
|
|
|
|
part])
|
|
|
|
|
|
|
|
def setCogDistances(self, distances):
|
|
|
|
self.view.setCogDistances(distances)
|
|
|
|
|
|
|
|
def setHighScore(self, toonName, score):
|
|
|
|
self.setSignNote(TTLocalizer.PartyCogSignNote % (toonName, score))
|
|
|
|
|
|
|
|
def handleToonJoined(self, toonId):
|
|
|
|
DistributedPartyTeamActivity.handleToonJoined(self, toonId)
|
|
|
|
toon = base.cr.doId2do.get(toonId, None)
|
|
|
|
team = self.getTeam(toonId)
|
|
|
|
if toon is not None and self.view is not None:
|
|
|
|
self.view.handleToonJoined(toon, team)
|
|
|
|
return
|
|
|
|
|
|
|
|
def handleToonExited(self, toonId):
|
|
|
|
toon = base.cr.doId2do.get(toonId, None)
|
|
|
|
if toon is None:
|
|
|
|
return
|
|
|
|
if self.view is not None:
|
|
|
|
self.view.handleToonExited(toon)
|
|
|
|
DistributedPartyTeamActivity.handleToonExited(self, toonId)
|
|
|
|
return
|
|
|
|
|
|
|
|
def handleToonShifted(self, toonId):
|
|
|
|
toon = base.cr.doId2do.get(toonId, None)
|
|
|
|
if toon is None:
|
|
|
|
return
|
|
|
|
if self.view is not None:
|
|
|
|
self.view.handleToonShifted(toon)
|
|
|
|
return
|
|
|
|
|
|
|
|
def handleToonSwitchedTeams(self, toonId):
|
|
|
|
DistributedPartyTeamActivity.handleToonSwitchedTeams(self, toonId)
|
|
|
|
toon = base.cr.doId2do.get(toonId, None)
|
|
|
|
if toon is None:
|
|
|
|
return
|
|
|
|
if self.view is not None:
|
|
|
|
self.view.handleToonSwitchedTeams(toon)
|
|
|
|
return
|
|
|
|
|
|
|
|
def handleToonDisabled(self, toonId):
|
|
|
|
if self.view is not None:
|
|
|
|
self.view.handleToonDisabled(toonId)
|
|
|
|
return
|
|
|
|
|
|
|
|
def startWaitForEnough(self):
|
|
|
|
DistributedPartyTeamActivity.startWaitForEnough(self)
|
|
|
|
self.view.openArenaDoors()
|
|
|
|
self.view.hideCogs()
|
|
|
|
|
|
|
|
def startRules(self):
|
|
|
|
DistributedPartyTeamActivity.startRules(self)
|
|
|
|
self.view.closeArenaDoors()
|
|
|
|
self.view.showCogs()
|
|
|
|
|
|
|
|
def startActive(self):
|
|
|
|
DistributedPartyTeamActivity.startActive(self)
|
|
|
|
self.view.startActivity(self.getCurrentActivityTime())
|
|
|
|
self.view.closeArenaDoors()
|
|
|
|
if not self.isLocalToonPlaying:
|
|
|
|
self.view.showArenaDoorTimers(self._duration + PartyGlobals.CogActivityConclusionDuration + 1.0 - self.getCurrentActivityTime())
|
|
|
|
|
|
|
|
def finishActive(self):
|
|
|
|
DistributedPartyTeamActivity.finishActive(self)
|
|
|
|
self.view.stopActivity()
|
|
|
|
|
|
|
|
def startConclusion(self, data):
|
|
|
|
DistributedPartyTeamActivity.startConclusion(self, data)
|
|
|
|
if self.isLocalToonPlaying:
|
|
|
|
score = (int(data / 10000), data % 10000)
|
|
|
|
winner = 2
|
|
|
|
if score[PartyGlobals.TeamActivityTeams.LeftTeam] > score[PartyGlobals.TeamActivityTeams.RightTeam]:
|
|
|
|
winner = PartyGlobals.TeamActivityTeams.LeftTeam
|
|
|
|
elif score[PartyGlobals.TeamActivityTeams.LeftTeam] < score[PartyGlobals.TeamActivityTeams.RightTeam]:
|
|
|
|
winner = PartyGlobals.TeamActivityTeams.RightTeam
|
|
|
|
if winner < 2:
|
|
|
|
if self.getTeam(base.localAvatar.doId) == winner:
|
|
|
|
resultsText = TTLocalizer.PartyTeamActivityLocalAvatarTeamWins
|
|
|
|
else:
|
|
|
|
resultsText = TTLocalizer.PartyTeamActivityWins % TTLocalizer.PartyCogTeams[winner]
|
|
|
|
else:
|
|
|
|
resultsText = TTLocalizer.PartyTeamActivityGameTie
|
|
|
|
self.view.showResults(resultsText, winner, score)
|
|
|
|
|
|
|
|
def finishConclusion(self):
|
|
|
|
self.view.hideResults()
|
|
|
|
DistributedPartyTeamActivity.finishConclusion(self)
|
|
|
|
self.view.hideArenaDoorTimers()
|