def updateArrows(self):
        if not self.gag:
            self.toggleArrows(False, False)
        else:
            track = GagGlobals.TrackGagNamesByTrackName.get(
                GagGlobals.getTrackOfGag(self.gag.getID()))
            index = None
            useTrack = []
            for name in track:
                gag = self.gui.backpack.getGagByID(
                    GagGlobals.getIDByName(name))
                if gag == self.gag or gag not in self.gui.backpack.getLoadout(
                ):
                    useTrack.append(name)

            index = useTrack.index(self.gag.getName())
            if index == 0:
                self.toggleArrows(False, True)
            else:
                if index > 0 and index < len(useTrack) - 1:
                    gagId = GagGlobals.getIDByName(useTrack[index + 1])
                    if not self.gui.backpack.hasGag(gagId):
                        self.toggleArrows(True, False)
                else:
                    if index == len(useTrack) - 1:
                        self.toggleArrows(True, False)
                    else:
                        self.toggleArrows(True, True)
        return
예제 #2
0
 def __init__(self):
     LightDropGag.__init__(self, 
             CIGlobals.Sandbag, GagGlobals.getProp('5', 'sandbag-mod'), 
             GagGlobals.getProp('5', 'sandbag-chan'), 18, GagGlobals.BAG_DROP_SFX, 
             GagGlobals.BAG_MISS_SFX, rotate90 = False, 
     sphereSize = 2)
     self.setImage('phase_3.5/maps/sandbag.png')
    def updateLoadout(self, forward):
        if self.gag and self.gag.getState() in [
                GagState.RECHARGING, GagState.LOADED
        ]:
            track = GagGlobals.TrackGagNamesByTrackName.get(
                GagGlobals.getTrackOfGag(self.gag.getID()))
            index = None
            useTrack = []
            for name in track:
                gag = self.gui.backpack.getGagByID(
                    GagGlobals.getIDByName(name))
                if gag == self.gag or gag not in self.gui.backpack.getLoadout(
                ):
                    useTrack.append(name)

            index = useTrack.index(self.gag.getName())
            if forward == 1:
                nextGagIndex = index + 1
            else:
                nextGagIndex = index - 1
            if nextGagIndex < 0 or nextGagIndex >= len(useTrack):
                return
            gagId = GagGlobals.getIDByName(useTrack[nextGagIndex])
            loadout = self.gui.backpack.getLoadout()
            if self.gui.backpack.hasGag(gagId) and self.gag in loadout:
                self.hideInfoText()
                if self.gag not in loadout:
                    return
                loadout[loadout.index(
                    self.gag)] = self.gui.backpack.getGagByID(gagId)
                self.gui.backpack.setLoadout(loadout)
        return
 def __init__(self):
     LightDropGag.__init__(self, 
             CIGlobals.FlowerPot, GagGlobals.getProp('5', 'flowerpot-mod'), 
             GagGlobals.getProp('5', 'flowerpot-chan'), 10, GagGlobals.POT_DROP_SFX, 
             GagGlobals.POT_MISS_SFX, rotate90 = False, 
     sphereSize = 2, sphereZ = -3.5)
     self.setImage('phase_3.5/maps/flowerpot.png')
예제 #5
0
    def setBackpackAmmo(self, gagIds, ammoList):
        if self.ammo == ammoList:
            return
        if len(self.backpack.gags.keys()) > 0:
            for index in range(len(gagIds)):
                gagId = gagIds[index]
                numOfThisGag = 0
                for gag in self.backpack.gags.keys():
                    if type(self.backpack.gagMgr.getGagByName(GagGlobals.getGagByID(gagId))) == type(gag):
                        numOfThisGag += 1

                if numOfThisGag < 1:
                    self.backpack.resetGags()
                    break

        for index in range(len(ammoList)):
            amt = ammoList[index]
            gagId = gagIds[index]
            if amt < 0:
                amt = 0
            self.backpack.setSupply(amt, GagGlobals.getGagByID(gagId))

        self.ammo = ammoList
        self.gagIds = gagIds
        if self.setupGags == False:
            self.d_setBackpackAmmo(gagIds, ammoList)
예제 #6
0
    def hitByGag(self, gagId):
        avatar = self.air.doId2do.get(self.air.getAvatarIdFromSender(), None)
        gagName = GagGlobals.getGagByID(gagId)
        data = GagGlobals.getGagData(gagId)
        dmg = data.get('damage')
        track = GagGlobals.getTrackOfGag(gagId, getId=True)

        if self.canGetHit():
            self.b_setHealth(self.getHealth() - dmg)
            Sequence(Func(self.d_announceHealth, 0, dmg),
                     Wait(self.showComboDamageTime),
                     Func(self.__showComboLabel)).start()
            self.__handleCombos(avatar.doId, gagName)

            if self.isDead():
                if track == GagType.THROW or gagName == CIGlobals.TNT:
                    self.b_setAnimState('pie', 0)
                elif track == GagType.DROP:
                    majorDrops = [
                        CIGlobals.GrandPiano, CIGlobals.Safe,
                        CIGlobals.BigWeight
                    ]
                    if gagName in majorDrops:
                        self.b_setAnimState('drop', 0)
                    else:
                        self.b_setAnimState('drop-react', 0)
                elif track == GagType.SQUIRT or track == GagType.SOUND:
                    if gagName == CIGlobals.StormCloud:
                        self.b_setAnimState('soak', 0)
                    else:
                        self.b_setAnimState('squirt-small', 0)
                avatar.questManager.cogDefeated(self)
            else:
                # I've been hit! Take appropriate actions.
                self.handleToonThreat(avatar, True)
 def __init__(self):
     LightDropGag.__init__(self,
                           CIGlobals.Anvil,
                           GagGlobals.getProp('4', 'anvil-mod'),
                           GagGlobals.getProp('4', 'anvil-chan'),
                           30,
                           GagGlobals.ANVIL_DROP_SFX,
                           GagGlobals.ANVIL_MISS_SFX,
                           rotate90=True,
                           sphereSize=2)
     self.setImage('phase_3.5/maps/anvil.png')
예제 #8
0
파일: Anvil.py 프로젝트: coginvasion/src
 def __init__(self):
     LightDropGag.__init__(
         self,
         CIGlobals.Anvil,
         GagGlobals.getProp("4", "anvil-mod"),
         GagGlobals.getProp("4", "anvil-chan"),
         30,
         GagGlobals.ANVIL_DROP_SFX,
         GagGlobals.ANVIL_MISS_SFX,
         rotate90=True,
         sphereSize=2,
     )
     self.setImage("phase_3.5/maps/anvil.png")
 def buildFlower(self):
     if self.flower:
         self.flower.removeNode()
         self.flower = None
     self.flower = loader.loadModel(GagGlobals.getProp(3.5, 'squirting-flower'))
     self.flower.setScale(GagGlobals.PNT3NEAR0)
     return
 def addGag(self, gagId, curSupply=0, maxSupply=0):
     if not gagId in self.gags.keys():
         gagName = GagGlobals.getGagByID(gagId)
         if not gagName is None:
             gag = self.gagManager.getGagByName(gagName)
             gag.setAvatar(self.avatar)
             self.gags.update({gagId: [gag, curSupply, maxSupply]})
예제 #11
0
    def startEntity(self, cog):
        if not cog:
            self.completeSquirt()
            return
        scaleUpPoint = Point3(1.5, 1.5, 1.5)
        rainDelay = 1
        effectDelay = 0.3
        cloudHold = 4.7
        tContact = 2.4
        if cog.isDead():
            cloudHold = 1.7
        cloud01, trickleFx, rainEffects, entity = self.buildEntity()
        cloud01.setZ(cog.suitPlan.getNametagZ() + 2)
        cloud01.reparentTo(cog)
        cloud02 = Actor(self.model, {'chan': GagGlobals.getProp(4, 'stormcloud-chan')})
        cloud02.reparentTo(cloud01)

        def damageCog():
            if self.isLocal():
                self.avatar.sendUpdate('suitHitByPie', [cog.doId, self.getID()])

        def __getCloudTrack(cloud, useEffect = 1):
            track = Sequence(Func(cloud.pose, 'chan', 0), LerpScaleInterval(cloud, 1.5, scaleUpPoint, startScale=GagGlobals.PNT3NEAR0), Wait(rainDelay))
            if useEffect == 1:
                pTrack = Parallel()
                delay = trickleDuration = cloudHold * 0.25
                trickleTrack = ParticleInterval(trickleFx, cloud, worldRelative=0, duration=trickleDuration, cleanup=True)
                track.append(trickleTrack)
                for i in range(0, 3):
                    dur = cloudHold - 2 * trickleDuration
                    pTrack.append(Sequence(Wait(delay), ParticleInterval(rainEffects[i], cloud, worldRelative=0, duration=dur, cleanup=True)))
                    delay += effectDelay

                pTrack.append(Sequence(Wait(3 * effectDelay), ActorInterval(cloud, 'chan', startTime=1, duration=cloudHold)))
                damageTrack = Sequence()
                if cog.getHealth() - self.getDamage() <= 0:
                    damageTrack.append(Func(cog.d_disableMovement, wantRay=True))
                    damageTrack.append(Func(damageCog))
                else:
                    damageTrack.append(Wait(tContact))
                    damageTrack.append(Func(damageCog))
                pTrack.append(damageTrack)
                track.append(pTrack)
            else:
                track.append(ActorInterval(cloud, 'chan', startTime=1, duration=cloudHold))
            track.append(LerpScaleInterval(cloud, 0.5, GagGlobals.PNT3NEAR0))
            track.append(Func(GagUtils.destroyProp, cloud))
            return track

        tracks = Parallel()
        soundTrack01 = self.getSoundTrack(1.3, self.avatar)
        soundTrack02 = self.getSoundTrack(3.4, self.avatar)
        tracks.append(soundTrack01)
        tracks.append(soundTrack02)
        cloud01Track = __getCloudTrack(cloud01)
        cloud02Track = __getCloudTrack(cloud02, useEffect=0)
        tracks.append(cloud01Track)
        tracks.append(cloud02Track)
        tracks.append(Func(self.destroyEntity, entity))
        tracks.start()
예제 #12
0
파일: Gag.py 프로젝트: coginvasion/src
 def __init__(self, name, model, damage, gagType, hitSfx, playRate = 1.0, anim = None, scale = 1, autoRelease = False):
     __metaclass__ = ABCMeta
     self.name = name
     self.model = model
     self.anim = anim
     self.scale = scale
     self.damage = damage
     self.gagType = gagType
     self.playRate = playRate
     self.avatar = None
     self.gag = None
     self.splat = None
     self.splatPos = None
     self.state = GagState.LOADED
     self.woosh = None
     self.handJoint = None
     self.equipped = False
     self.autoRelease = autoRelease
     self.index = None
     self.target = None
     self.health = 0
     self.id = GagGlobals.getIDByName(name)
     self.image = None
     if game.process == 'client':
         if gagType == GagType.THROW:
             self.woosh = base.audio3d.loadSfx(GagGlobals.PIE_WOOSH_SFX)
         self.hitSfx = base.audio3d.loadSfx(hitSfx)
     return
예제 #13
0
 def __init__(self):
     SquirtGag.__init__(self, CIGlobals.Geyser, GagGlobals.getProp(5, 'geyser'), 105, GagGlobals.GEYSER_HIT_SFX, None, None, None, None, None, None, 1, 1)
     ChargeUpGag.__init__(self, 24, 10, 50, 0.5, maxCogs=4)
     self.setImage('phase_3.5/maps/geyser.png')
     self.entities = []
     self.timeout = 3.0
     return
예제 #14
0
 def gagRelease(self, gag_id):
     supply = self.backpack.getSupply(GagGlobals.getGagByID(gag_id))
     amt = supply - 1
     if amt < 0:
         self.ejectSelf()
         return
     self.b_setGagAmmo(gag_id, amt)
예제 #15
0
 def setLabel(self, labelId):
     if labelId == 0:
         self.gagModel = loader.loadModel(
             'phase_4/models/props/icecream.bam')
         self.gagModel.reparentTo(self.gagNode)
         self.gagModel.find('**/p1_2').clearBillboard()
         self.gagModel.setScale(0.6)
         self.gagModel.setPos(0, -0.1, -0.1 - 0.6)
     elif labelId == 1:
         purchaseModels = loader.loadModel(
             'phase_4/models/gui/purchase_gui.bam')
         self.gagModel = purchaseModels.find('**/Jar')
         self.gagModel.reparentTo(self.gagNode)
         self.gagModel.setScale(3.0)
         self.gagModel.setPos(0, -0.1, 0)
         purchaseModels.removeNode()
     else:
         gagId = labelId - 2
         iconName = GagGlobals.InventoryIconByName.get(
             GagGlobals.getGagByID(gagId))
         invModel = loader.loadModel(
             'phase_3.5/models/gui/inventory_icons.bam').find('**/%s' %
                                                              iconName)
         if invModel:
             self.gagModel = invModel
             self.gagModel.reparentTo(self.gagNode)
             self.gagModel.setScale(13.0)
             self.gagModel.setPos(0, -0.1, 0)
         else:
             self.notify.warning('Failed to find gag label %s.' %
                                 (str(labelId)))
예제 #16
0
 def toonHitByPie(self, avId, gag_id):
     obj = self.air.doId2do.get(avId, None)
     hp = self.gagMgr.getGagByName(GagGlobals.getGagByID(gag_id)).getHealth()
     if obj:
         if obj.getHealth() < obj.getMaxHealth() and not obj.isDead():
             obj.toonUp(hp)
     return
예제 #17
0
    def buildAmmoList(self, gagIds):
        ammoList = []
        for index in range(len(gagIds)):
            gagId = gagIds[index]
            amt = self.backpack.getSupply(GagGlobals.getGagByID(gagId))
            ammoList.append(amt)

        return ammoList
예제 #18
0
 def __init__(self):
     SquirtGag.__init__(self, CIGlobals.StormCloud, GagGlobals.getProp(4, 'stormcloud-mod'), 60, GagGlobals.CLOUD_HIT_SFX, None, GagGlobals.CLOUD_MISS_SFX, None, None, None, None, 1, 1)
     LocationGag.__init__(self, 10, 50)
     LocationGag.setShadowData(self, isCircle=True, shadowScale=0.75)
     self.setImage('phase_3.5/maps/storm-cloud.png')
     self.entities = []
     self.searchRadius = 6
     return
예제 #19
0
    def updateBackpackAmmo(self):
        gagIds = []
        ammoList = []
        for gag in self.backpack.getGags():
            gagIds.append(GagGlobals.getIDByName(gag.getName()))
            ammoList.append(self.backpack.getSupply(gag.getName()))

        self.setBackpackAmmo(gagIds, ammoList)
 def confirmPurchase(self):
     ammoList = []
     gagIds = []
     for gag in self.backpack.getGags():
         gagId = GagGlobals.getIDByName(gag.getName())
         gagIds.append(gagId)
         ammoList.append(self.backpack.getSupply(gag.getName()))
     self.distShop.sendUpdate('confirmPurchase', [gagIds, ammoList, base.localAvatar.getMoney()])
     Shop.confirmPurchase(self)
 def __init__(self):
     SquirtGag.__init__(self, CIGlobals.SquirtFlower, GagGlobals.getProp(3.5, 'button'), 3, GagGlobals.FLOWER_HIT_SFX, GagGlobals.FLOWER_HIT_SFX, GagGlobals.NULL_SFX, None, 0, 0, 0)
     self.setImage('phase_3.5/maps/squirting-flower.png')
     self.flower = None
     self.flowerScale = 1.5
     self.track = Parallel()
     self.timeout = 4.0
     self.sprayRotation = Vec3(0, 20, 0)
     return
예제 #22
0
파일: Lipstick.py 프로젝트: coginvasion/src
 def __init__(self):
     ToonUpGag.__init__(self, CIGlobals.Lipstick, GagGlobals.getProp(5, 'lipstick'), 25, 30, 75, GagGlobals.SMOOCH_SFX, 1)
     self.setImage('phase_3.5/maps/lipstick.png')
     self.avAnim = 'smooch'
     self.track = None
     self.soundInterval = None
     self.lips = None
     self.radius = 25
     return
예제 #23
0
 def __init__(self):
     SquirtGag.__init__(self, CIGlobals.StormCloud, GagGlobals.getProp(4, 'stormcloud-mod'), 60,
                        GagGlobals.CLOUD_HIT_SFX, None, GagGlobals.CLOUD_MISS_SFX, None, None, None, None, 1, 1)
     LocationGag.__init__(self, 10, 50)
     LocationGag.setShadowData(self, isCircle = True, shadowScale = 0.75)
     self.setImage('phase_3.5/maps/storm-cloud.png')
     self.entities = []
     self.searchRadius = 6
     self.timeout = 3.0
    def setBackpackAmmo(self, gagIds, ammoList):
        if not self.backpack:
            self.backpack = BackpackAI(self)
            for i in xrange(len(gagIds)):
                gagId = gagIds[i]
                ammo = ammoList[i]

                if not self.backpack.hasGag(gagId):
                    self.backpack.addGag(gagId, ammo, GagGlobals.getGagData(gagId).get('maxSupply'))
    def update(self):
        for item, values in self.items.iteritems():
            entry = self.itemEntries.get(item)
            itemType = values.get('type')
            price = values.get('price')
            money = base.localAvatar.getMoney()
            button = entry[0]
            label = entry[1]
            button.setColorScale(NORMAL_COLOR)
            if price > money:
                button.setColorScale(GRAYED_OUT_COLOR)
            if itemType == ItemType.GAG:
                name = item().getName()
                backpack = base.localAvatar.getBackpack()
                supply = backpack.getSupply(name)
                maxSupply = backpack.getMaxSupply(name)
                inBackpack = backpack.hasGag(GagGlobals.getIDByName(name))
                if not inBackpack or inBackpack and supply >= maxSupply:
                    button.setColorScale(GRAYED_OUT_COLOR)
                supply = base.localAvatar.getBackpack().getSupply(name)
                maxSupply = base.localAvatar.getBackpack().getMaxSupply(name)
                label['text'] = '%s/%s\n%s JBS' % (str(supply), str(maxSupply),
                                                   str(price))
            elif itemType == ItemType.UPGRADE:
                maxSupply = values.get('maxUpgrades')
                upgradeID = values.get('upgradeID')
                avID = base.localAvatar.getPUInventory()[1]
                supply = 0
                turretCount = 0
                hasTurret = False

                battle = base.localAvatar.getMyBattle()
                if battle and battle.getTurretManager():
                    turretCount = battle.getTurretCount()
                    turret = battle.getTurretManager().getTurret()
                    if turret:
                        hasTurret = True
                        if turret.getGagID() == upgradeID:
                            supply = 1

                if avID == upgradeID:
                    dataSupply = base.localAvatar.getPUInventory()[0]
                    if dataSupply > 0:
                        supply = dataSupply

                if supply > 0 or base.localAvatar.getPUInventory(
                )[0] > 0 or hasTurret or turretCount == CogBattleGlobals.MAX_TURRETS:
                    button.setColorScale(GRAYED_OUT_COLOR)

                label['text'] = '%s\n%s/%s\n%s JBS' % (
                    item, str(supply), str(maxSupply), str(price))
            elif itemType == ItemType.HEAL:
                if base.localAvatar.getHealth(
                ) == base.localAvatar.getMaxHealth() or self.shop.hasCooldown(
                        item):
                    button.setColorScale(GRAYED_OUT_COLOR)
 def confirmPurchase(self):
     ammoList = []
     if not hasattr(self.originalSupply, 'keys'):
         gagIds = []
     else:
         gagIds = self.originalSupply.keys()
         for gagId in gagIds:
             ammoList.append(base.localAvatar.getBackpack().getSupply(GagGlobals.getGagByID(gagId)))
     self.distShop.sendUpdate('confirmPurchase', [gagIds, ammoList, base.localAvatar.getMoney()])
     Shop.confirmPurchase(self)
예제 #27
0
 def releaseGag(self):
     if not self.backpack or not self.backpack.getActiveGag():
         return
     if self.backpack.getSupply() > 0:
         gag = self.backpack.getActiveGag()
         if not gag:
             gag = self.backpack.getCurrentGag()
         if gag.getState() != GagState.RELEASED:
             gagName = gag.getName()
             self.b_gagRelease(GagGlobals.getIDByName(gagName))
 def d_setGrab(self, avId):
     self.sendUpdate('setGrab', [avId])
     avatar = self.air.doId2do.get(avId)
     backpack = avatar.backpack
     track = GagGlobals.getTrackOfGag(self.gagId)
     availableGags = []
     restockGags = {}
     
     if not self.loadoutOnly:
         trackGags = GagGlobals.TrackGagNamesByTrackName.get(GagGlobals.TrackNameById.get(GagGlobals.Type2TrackName.get(track)))
         
         # Get the gagids of gags in this gag track.
         for trackGag in trackGags:
             gagId = GagGlobals.getIDByName(trackGag)
             if backpack.hasGag(gagId):
                 availableGags.append(gagId)
         # The strongest gags should be first.
         availableGags.reverse()
     else:
         loadout = backpack.getLoadout()
         for gagId in loadout:
             if GagGlobals.getTrackOfGag(gagId) == track:
                 availableGags.append(gagId)
     
     restockLeft = int(self.maxRestock)
     
     for gagId in availableGags:
         if restockLeft <= 0:
             break
         supply = backpack.getSupply(gagId)
         maxAmount = backpack.getMaxSupply(gagId)
         
         if supply < maxAmount:
             giveAmount = maxAmount - backpack.getSupply(gagId)
             if restockLeft < giveAmount:
                 giveAmount = restockLeft
             restockGags[gagId] = supply + giveAmount
             restockLeft -= giveAmount
             print 'Requesting to give %s %ss.' % (str(restockGags[gagId]), GagGlobals.getGagByID(gagId))
             
     for gagId in restockGags.keys():
         avatar.b_setGagAmmo(gagId, restockGags.get(gagId))
         
예제 #29
0
 def releaseGag(self):
     if not self.canUseGag(False) or self.backpack.getCurrentGag(
     ).__class__.__name__ == 'BananaPeel':
         return
     gag = self.backpack.getActiveGag()
     if not gag:
         gag = self.backpack.getCurrentGag()
     if gag.getState() != GagState.RELEASED:
         gagName = gag.getName()
         self.b_gagRelease(GagGlobals.getIDByName(gagName))
예제 #30
0
 def buildEntity(self):
     cloud = Actor(self.model, {'chan' : GagGlobals.getProp(4, 'stormcloud-chan')})
     trickleFx = GagUtils.loadParticle(5, 'trickleLiquidate')
     rainFx01 = GagUtils.loadParticle(5, 'liquidate')
     rainFx02 = GagUtils.loadParticle(5, 'liquidate')
     rainFx03 = GagUtils.loadParticle(5, 'liquidate')
     rainEffects = [rainFx01, rainFx02, rainFx03]
     entity = [cloud, [trickleFx, rainEffects]]
     self.entities.append(entity)
     return cloud, trickleFx, rainEffects, entity
 def __init__(self):
     ToonUpGag.__init__(self, CIGlobals.Lipstick,
                        GagGlobals.getProp(5, 'lipstick'), 25, 30, 75,
                        GagGlobals.SMOOCH_SFX, 1)
     self.setImage('phase_3.5/maps/lipstick.png')
     self.avAnim = 'smooch'
     self.track = None
     self.soundInterval = None
     self.lips = None
     self.radius = 25
     self.timeout = 6.0
예제 #32
0
파일: GagShop.py 프로젝트: coginvasion/src
    def confirmPurchase(self):
        ammoList = []
        if not hasattr(self.originalSupply, 'keys'):
            gagIds = []
        else:
            gagIds = self.originalSupply.keys()
            for gagId in gagIds:
                ammoList.append(base.localAvatar.getBackpack().getSupply(GagGlobals.getGagByID(gagId)))

        self.distShop.sendUpdate('confirmPurchase', [gagIds, ammoList, base.localAvatar.getMoney()])
        Shop.confirmPurchase(self)
 def setWeapon(self, weapon, playSound = True):
     if weapon == CIGlobals.TNT and self.backpack.getSupply(weapon) <= 0: return
     if self.backpack.getSupply(weapon) <= 0: return
     self.prevGag = self.weapon
     base.localAvatar.b_equip(GagGlobals.getIDByName(weapon))
     self.weapon = self.backpack.getGagByIndex(self.backpack.getIndex())
     if playSound:
         sfx = base.loadSfx("phase_3/audio/sfx/GUI_balloon_popup.mp3")
         SoundInterval(sfx).start()
     self.resetScroll()
     self.update()
예제 #34
0
    def __handleCombos(self, avId, gagName):
        track = GagGlobals.getTrackOfGag(gagName)
        damage = GagGlobals.getGagData(
            GagGlobals.getIDByName(gagName)).get('damage')
        self.comboData.update({avId: {track: damage}})

        data = self.comboData.values()
        tracks = []
        damages = []

        for hitData in data:
            for track, damage in hitData.iteritems():
                tracks.append(track)
                damages.append(damage)

        isCombo = False
        comboPerct = 0.35
        totalDamage = 0
        totalGags = 0

        for track in tracks:
            if tracks.count(track) > 1 and track == track:
                # Get the indices of each occurrence of this track in the tracks list.
                # For example, tracks could equal [GagType.THROW, GagType.SQUIRT, GagType.THROW]
                # If, the variable 'track' equaled GagType.THROW, then the next line would
                # return: [0, 2]
                damageIndices = [i for i, x in enumerate(tracks) if x == track]
                totalGags = len(damageIndices)
                for i in damageIndices:
                    if i < len(damageIndices) and i >= 0:
                        totalDamage += damages[damageIndices[i]]
                isCombo = True
                break
            continue

        if isCombo:
            self.comboDamage = int(
                (float(totalDamage) / float(totalGags)) * comboPerct)
            self.b_setHealth(self.getHealth() - self.comboDamage)
            self.comboData.clear()
            taskMgr.remove(self.comboDataTaskName)
 def toonHitByPie(self, avId, gagId):
     obj = self.air.doId2do.get(avId, None)
     hp = GagGlobals.getGagData(gagId).get('health', 0)
     if obj:
         if obj.getHealth() < obj.getMaxHealth() and not obj.isDead():
             if obj.__class__.__name__ == 'DistributedToonAI':
                 obj.toonUp(hp)
             else:
                 if obj.getHealth() + hp > obj.getMaxHealth():
                     hp = obj.getMaxHealth() - obj.getHealth()
                 obj.b_setHealth(obj.getHealth() + hp)
                 obj.d_announceHealth(1, hp)
예제 #36
0
 def buildEntity(self):
     cloud = Actor(self.model, {'chan': GagGlobals.getProp(4, 'stormcloud-chan')})
     trickleFx = GagUtils.loadParticle(5, 'trickleLiquidate')
     rainFx01 = GagUtils.loadParticle(5, 'liquidate')
     rainFx02 = GagUtils.loadParticle(5, 'liquidate')
     rainFx03 = GagUtils.loadParticle(5, 'liquidate')
     rainEffects = [rainFx01, rainFx02, rainFx03]
     entity = [cloud, [trickleFx, rainEffects]]
     self.entities.append(entity)
     return (cloud,
      trickleFx,
      rainEffects,
      entity)
	def handlePieCollision(self, entry, proj):
		x, y, z = proj.pie.getPos(render)
		self.b_makeSplat([x, y, z])
		proj.cleanup()
		if base.localAvatar.doId == self.getAvatar():
			intoNP = entry.getIntoNodePath()
			avNP = intoNP.getParent()
			for key in self.cr.doId2do.keys():
				obj = self.cr.doId2do[key]
				if obj.__class__.__name__ == "DistributedSuit":
					if obj.getKey() == avNP.getKey():
						if obj.getHealth() > 0:
							base.localAvatar.sendUpdate('suitHitByPie', [obj.doId, GagGlobals.getIDByName(CIGlobals.WholeCreamPie)])
예제 #38
0
    def setBackpackAmmo(self, gagIds, ammoList):
        if not self.backpack:
            self.backpack = Backpack(self)
        # We just want to update the network ammo sometimes,
        # let's ignore updates if we're not constructing a backpack.
        for i in xrange(len(gagIds)):
            gagId = gagIds[i]
            ammo = ammoList[i]

            if not self.backpack.hasGag(gagId):
                self.backpack.addGag(
                    gagId, ammo,
                    GagGlobals.getGagData(gagId).get('maxSupply'))
            else:
                self.backpack.setSupply(gagId, ammo)
예제 #39
0
    def setBackpackAmmo(self, gagIds, ammoList):
        if -1 in ammoList:
            return
        else:
            self.gagBPData = [gagIds, ammoList]
            if not self.initAmmo:
                self.initAmmo = ammoList
                self.initGagIds = gagIds
            else:
                self.initAmmo = None
                self.initGagIds = None
            bpReset = False
            if len(self.backpack.gags.keys()) > 0:
                for index in range(len(gagIds)):
                    gagId = gagIds[index]
                    numOfThisGag = 0
                    for gag in self.backpack.gags.keys():
                        if type(self.backpack.gagMgr.getGagByName(GagGlobals.getGagByID(gagId))) == type(gag):
                            numOfThisGag += 1

                    if numOfThisGag < 1:
                        self.backpack.resetGags()
                        bpReset = True
                        break

            for index in range(len(ammoList)):
                amt = ammoList[index]
                gagId = gagIds[index]
                self.backpack.setSupply(amt, GagGlobals.getGagByID(gagId))

            if self.backpack.gagGUI:
                if bpReset:
                    self.disablePies()
                    self.enablePies(1)
                self.backpack.gagGUI.update()
            return
예제 #40
0
    def __init__(self,
                 name,
                 model,
                 damage,
                 gagType,
                 hitSfx,
                 playRate=1.0,
                 anim=None,
                 scale=1,
                 autoRelease=False):
        __metaclass__ = ABCMeta
        self.name = name
        self.model = model
        self.anim = anim
        self.scale = scale
        self.damage = damage
        self.gagType = gagType
        self.playRate = playRate
        self.avatar = None
        self.gag = None
        self.splat = None
        self.splatPos = None
        self.state = GagState.LOADED
        self.woosh = None
        self.handJoint = None
        self.equipped = False
        self.autoRelease = autoRelease
        self.index = None
        self.target = None
        self.health = 0
        self.id = GagGlobals.getIDByName(name)
        self.image = None
        self.timeout = 5

        # Handles the new recharging for certain gags.

        # The time it takes (in seconds) to recharge this gag.
        self.rechargeTime = 0

        # The elapsed time of the current recharge. Should be a float
        self.rechargeElapsedTime = 0

        if game.process == 'client':
            if gagType == GagType.THROW:
                self.woosh = base.audio3d.loadSfx(GagGlobals.PIE_WOOSH_SFX)
            self.hitSfx = base.audio3d.loadSfx(hitSfx)
    def announceGenerate(self):
        DistributedAvatarAI.announceGenerate(self)
        DistributedSmoothNodeAI.announceGenerate(self)
        if self.parentId != self.getDefaultShard():
            self.b_setDefaultShard(self.parentId)

        if self.__class__.__name__ == "DistributedToonAI":
            # TEMPORARY: Any new gags that we make have to be given to toons automatically.
            newGags = GagGlobals.gagIds.keys()
            currentGags = self.backpack.gags
            needsToUpdate = False
            for newGag in newGags:
                if not newGag in currentGags.keys():
                    print 'This player is missing {0}'.format(GagGlobals.getGagByID(newGag))
                    self.backpack.addGag(newGag)
                    if not needsToUpdate:
                        needsToUpdate = True
            if needsToUpdate:
                self.backpack.updateNetAmmo()
예제 #42
0
 def __init__(self,
              name,
              model,
              damage,
              gagType,
              hitSfx,
              playRate=1.0,
              anim=None,
              scale=1,
              autoRelease=False):
     __metaclass__ = ABCMeta
     self.name = name
     self.model = model
     self.anim = anim
     self.scale = scale
     self.damage = damage
     self.gagType = gagType
     self.playRate = playRate
     self.avatar = None
     self.gag = None
     self.splat = None
     self.splatPos = None
     self.state = GagState.LOADED
     self.woosh = None
     self.handJoint = None
     self.equipped = False
     self.autoRelease = autoRelease
     self.index = None
     self.target = None
     self.health = 0
     self.id = GagGlobals.getIDByName(name)
     self.image = None
     self.timeout = 5
     self.rechargeTime = 0
     self.rechargeElapsedTime = 0
     if game.process == 'client':
         if gagType == GagType.THROW:
             self.woosh = base.audio3d.loadSfx(GagGlobals.PIE_WOOSH_SFX)
         self.hitSfx = base.audio3d.loadSfx(hitSfx)
     return
예제 #43
0
 def suitHitByPie(self, avId, gag_id):
     obj = self.air.doId2do.get(avId, None)
     gag = self.gagMgr.getGagByName(GagGlobals.getGagByID(gag_id))
     dmg = gag.getDamage()
     if obj:
         obj.b_setHealth(obj.getHealth() - dmg)
         if obj.getHealth() <= 0:
             if gag.getType() == GagType.THROW or gag.getName() == CIGlobals.TNT:
                 obj.b_setAnimState('pie')
             elif gag.getType() == GagType.DROP:
                 majorDrops = [CIGlobals.GrandPiano, CIGlobals.Safe, CIGlobals.BigWeight]
                 if gag.getName() in majorDrops:
                     obj.b_setAnimState('drop')
                 else:
                     obj.b_setAnimState('drop-react')
             elif gag.getType() == GagType.SQUIRT or gag.getType() == GagType.SOUND:
                 if gag.getName() == CIGlobals.StormCloud:
                     obj.b_setAnimState('soak')
                 else:
                     obj.b_setAnimState('squirt-small')
             if obj.__class__.__name__ == 'DistributedSuit':
                 self.questManager.cogDefeated(obj)
     return
예제 #44
0
    def setWeapon(self, slot, playSound = True):
        if isinstance(slot, str):
            for iSlot in self.slots:
                if iSlot.getGag():
                    if iSlot.getGag().getName() == slot:
                        slot = iSlot

        if self.activeSlot:
            self.activeSlot.setOutlineImage('idle')
            self.prevSlot = self.activeSlot
        if self.backpack.getSupply(slot.getGag().getName()) > 0:
            if self.activeSlot != slot:
                base.localAvatar.b_equip(GagGlobals.getIDByName(slot.getGag().getName()))
                slot.setOutlineImage('selected')
                self.activeSlot = slot
            elif self.activeSlot == slot and slot.getGag().getState() == GagState.LOADED:
                base.localAvatar.b_unEquip()
                self.activeSlot = None
            self.update()
            if self.switchSound and playSound:
                SoundInterval(self.switchSoundSfx).start()
        else:
            return
        return
예제 #45
0
 def setGagAmmo(self, gagId, ammo):
     if self.backpack.getGagByID(gagId):
         self.backpack.setSupply(ammo, GagGlobals.getGagByID(gagId))
예제 #46
0
파일: Geyser.py 프로젝트: coginvasion/src
 def __init__(self):
     SquirtGag.__init__(self, CIGlobals.Geyser, GagGlobals.getProp(5, 'geyser'), 105, GagGlobals.GEYSER_HIT_SFX, None, None, None, None, None, None, 1, 1)
     ChargeUpGag.__init__(self, 24, 10, 50, 0.5, maxCogs=4)
     self.setImage('phase_3.5/maps/geyser.png')
     self.entities = []
     return
예제 #47
0
    def startEntity(self, cog):
        if not cog:
            self.completeSquirt()
            return
        scaleUpPoint = Point3(1.5, 1.5, 1.5)
        rainDelay = 1
        effectDelay = 0.3
        cloudHold = 4.7
        tContact = 2.4
        if cog.isDead():
            cloudHold = 1.7
        cloud01, trickleFx, rainEffects, entity = self.buildEntity()
        cloud01.setZ(cog.suitPlan.getNametagZ() + 2)
        cloud01.reparentTo(cog)
        cloud02 = Actor(self.model, {'chan' : GagGlobals.getProp(4, 'stormcloud-chan')})
        cloud02.reparentTo(cloud01)
        def damageCog():
            if self.isLocal():
                cog.sendUpdate('hitByGag', [self.getID()])

        def __getCloudTrack(cloud, useEffect = 1):
            track = Sequence(
                Func(cloud.pose, 'chan', 0),
                LerpScaleInterval(cloud, 1.5, scaleUpPoint, startScale = GagGlobals.PNT3NEAR0),
                Wait(rainDelay)
            )
            if useEffect == 1:
                pTrack = Parallel()
                delay = trickleDuration = cloudHold * 0.25
                trickleTrack = ParticleInterval(trickleFx, cloud, worldRelative=0, duration=trickleDuration, cleanup=True)
                track.append(trickleTrack)
                for i in range(0, 3):
                    dur = cloudHold - 2 * trickleDuration
                    pTrack.append(Sequence(Wait(delay), ParticleInterval(rainEffects[i], cloud, worldRelative=0, duration=dur, cleanup=True)))
                    delay += effectDelay

                pTrack.append(Sequence(
                    Wait(3 * effectDelay),
                    ActorInterval(cloud, 'chan', startTime = 1, duration = cloudHold))
                )
                damageTrack = Sequence()
                if cog.getHealth() - self.getDamage() <= 0:
                    damageTrack.append(Func(cog.d_disableMovement, wantRay = True))
                    damageTrack.append(Func(damageCog))
                else:
                    damageTrack.append(Wait(tContact))
                    damageTrack.append(Func(damageCog))
                pTrack.append(damageTrack)
                track.append(pTrack)
            else:
                track.append(ActorInterval(cloud, 'chan', startTime = 1, duration = cloudHold))
            track.append(LerpScaleInterval(cloud, 0.5, GagGlobals.PNT3NEAR0))
            track.append(Func(GagUtils.destroyProp, cloud))
            return track
        tracks = Parallel()
        soundTrack01 = self.getSoundTrack(1.3, self.avatar)
        soundTrack02 = self.getSoundTrack(3.4, self.avatar)
        tracks.append(soundTrack01)
        tracks.append(soundTrack02)
        cloud01Track = __getCloudTrack(cloud01)
        cloud02Track = __getCloudTrack(cloud02, useEffect = 0)
        tracks.append(cloud01Track)
        tracks.append(cloud02Track)
        tracks.append(Func(self.destroyEntity, entity))
        tracks.start()
예제 #48
0
 def setGagAmmo(self, gagId, ammo):
     self.backpack.setSupply(ammo, GagGlobals.getGagByID(gagId))
     if self.backpack.gagGUI:
         self.backpack.gagGUI.update()
예제 #49
0
 def __init__(self):
     LightDropGag.__init__(self, CIGlobals.FlowerPot, GagGlobals.getProp('5', 'flowerpot-mod'), GagGlobals.getProp('5', 'flowerpot-chan'), 10, GagGlobals.POT_DROP_SFX, GagGlobals.POT_MISS_SFX, rotate90=False, sphereSize=2, sphereZ=-3.5)
     self.setImage('phase_3.5/maps/flowerpot.png')
 def buildLips(self):
     self.cleanupLips()
     self.lips = GagGlobals.loadProp(5, 'lips')
예제 #51
0
파일: Sandbag.py 프로젝트: coginvasion/src
 def __init__(self):
     LightDropGag.__init__(self, CIGlobals.Sandbag, GagGlobals.getProp('5', 'sandbag-mod'), GagGlobals.getProp('5', 'sandbag-chan'), 18, GagGlobals.BAG_DROP_SFX, GagGlobals.BAG_MISS_SFX, rotate90=False, sphereSize=2)
     self.setImage('phase_3.5/maps/sandbag.png')
예제 #52
0
파일: Lipstick.py 프로젝트: coginvasion/src
 def buildLips(self):
     self.cleanupLips()
     self.lips = GagGlobals.loadProp(5, 'lips')