class Sandbag(LightDropGag): name = GagGlobals.Sandbag model = GagGlobals.getProp('5', 'sandbag-mod') anim = GagGlobals.getProp('5', 'sandbag-chan') hitSfxPath = GagGlobals.BAG_DROP_SFX missSfxPath = GagGlobals.BAG_MISS_SFX def __init__(self): LightDropGag.__init__(self) self.setImage('phase_3.5/maps/sandbag.png') self.colliderRadius = 0.75
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)
class FlowerPot(LightDropGag): name = GagGlobals.FlowerPot model = GagGlobals.getProp('5', 'flowerpot-mod') anim = GagGlobals.getProp('5', 'flowerpot-chan') hitSfxPath = GagGlobals.POT_DROP_SFX missSfxPath = GagGlobals.POT_MISS_SFX def __init__(self): LightDropGag.__init__(self) self.setImage('phase_3.5/maps/flowerpot.png') self.colliderRadius = 0.75 self.colliderOfs = Point3(0, 0, -3.5) def startDrop(self, entity): if self.dropLoc: self.dropLoc.setZ(self.dropLoc.getZ() + 3.5) LightDropGag.startDrop(self, entity)
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 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()