Exemple #1
0
 def handleMessage(self,m):
     if isinstance(m,bsBomb.ArmMessage): 
         self.arm()#This is all the  main bs.Bomb does.  All below is extra
         self.activateArea()
     elif isinstance(m, bs.HitMessage):
         #print m.hitType, m.hitSubType
         if self.isHome: return True
         if m.sourcePlayer == self.sourcePlayer:
             return True #I think this should stop mines from exploding due to self activity or chain reactions?.
         if not self.activated: return True
         else:
             super(self.__class__, self).handleMessage(m)
     elif isinstance(m,bsBomb.ImpactMessage):
         if self.isHome: return True #Never explode the home bomb.
         super(self.__class__, self).handleMessage(m)
     elif isinstance(m,bs.DieMessage):
         if self.isHome: return True #Home never dies (even if player leaves, I guess...)
         if self.exists() and not self.died:
             self.died = True
             self.rad = 0.0
             if self.zone.exists():
                 bs.animateArray(self.zone,'size',1,{0:[2*self.rad],1:[0]})
             self.zone = None
         super(self.__class__, self).handleMessage(m)
     else:
         super(self.__class__, self).handleMessage(m)
Exemple #2
0
 def mineUpdate(self):
     #print self.mineCount
     #purge dead mines, update their animantion, check if players died
     for m in self.mines:
         if not m.exists():
             self.mines.remove(m)
         else:
             #First, check if any player is within the current death zone
             for player in self.players:
                 if not player.actor is None:
                     if player.actor.isAlive():
                         p1 = player.actor.node.position
                         p2 = m.node.position
                         diff = (bs.Vector(p1[0] - p2[0], 0.0,
                                           p1[2] - p2[2]))
                         dist = (diff.length())
                         if dist < m.rad:
                             player.actor.handleMessage(bs.DieMessage())
             #Now tell the circle to grow to the new size
             if m.rad < self.maxSize:
                 bs.animateArray(
                     m.zone, 'size', 1, {
                         0: [m.rad * 2],
                         self.updateRate: [(m.rad + self.growthRate) * 2]
                     })
                 #Tell the circle to be the new size. This will be the new check radius next time.
                 m.rad += self.growthRate
     #make a new mine if needed.
     if self.mineCount < self.maxMines:
         pos = self.getRandomPowerupPoint()
         self.mineCount += 1
         self._flashMine(pos)
         bs.gameTimer(950, bs.Call(self._makeMine, pos))
	def updateFloatyness(self):
		oldY = self.node.extraAcceleration[1]
		newY = {0: 0, 1: 39, 2: 19+20*2, 3: 19+20*3}.get(self.heldBy, 0)# needs more science
		time = 300 if (oldY >= newY) else 1000
		keys = {0:   (0, oldY, 0),
				time: (0, newY, 0)}
		bs.animateArray(self.node, 'extraAcceleration', 3, keys)
Exemple #4
0
 def __init__(self,pos):
     bs.Bomb.__init__(self,position=pos,bombType='landMine')
     showInSpace = False
     self.died = False
     self.rad = 0.3
     self.zone = bs.newNode('locator',attrs={'shape':'circle','position':self.node.position,'color':(1,0,0),'opacity':0.5,'drawBeauty':showInSpace,'additive':True})
     bs.animateArray(self.zone,'size',1,{0:[0.0],50:[2*self.rad]})
Exemple #5
0
 def handleMessage(self,m):
     if isinstance(m,bs.DieMessage):
         if not self.died:
             self.getActivity().mineCount -= 1
             self.died = True
             bs.animateArray(self.zone,'size',1,{0:[2*self.rad],50:[0]})
             self.zone = None
         super(self.__class__, self).handleMessage(m)
     else:
         super(self.__class__, self).handleMessage(m)
Exemple #6
0
 def updateFloatyness(self):
     oldY = self.node.extraAcceleration[1]
     newY = {
         0: 0,
         1: 39,
         2: 19 + 20 * 2,
         3: 19 + 20 * 3
     }.get(self.heldBy, 0)  # needs more science
     time = 300 if (oldY >= newY) else 1000
     keys = {0: (0, oldY, 0), time: (0, newY, 0)}
     bs.animateArray(self.node, 'extraAcceleration', 3, keys)
 def __init__(self):
     bs.Actor.__init__(self)
     r1 = 6
     n1 = bs.newNode('locator',
                     attrs={
                         'shape': 'circleOutline',
                         'position': (0, 4, -8),
                         'color': (1, 1, 1),
                         'opacity': .3,
                         'drawBeauty': False,
                         'additive': True
                     })
     self._nodes = [n1]
     bs.animateArray(n1, 'size', 1, {50: [0.0], 250: [r1 * 2.0]})
Exemple #8
0
 def __init__(self, position=(0, 0, 0), color=(0, 0, 0), radius=(.5)):
     bs.Actor.__init__(self)
     self._r1 = radius
     if radius < 0: self._r1 = 0
     self.position = position
     self.color = color
     n1 = bs.newNode('locator',
                     attrs={
                         'shape': 'circle',
                         'position': position,
                         'color': self.color,
                         'opacity': 1,
                         'drawBeauty': True,
                         'additive': True
                     })
     bs.animateArray(n1, 'size', 1, {0: [0.0], 200: [self._r1 * 2.0]})
     self._node = [n1]
Exemple #9
0
    def activateArea(self):
        mineOK = False
        if self.exists():
            r = self.defRad
            fudge = self.getActivity().minOverlap #This is the minimum overlap to join owner's territory (not used to check enemy overlap)
            p1 = self.node.position
            self.node.maxSpeed = 0.0 #We don't want mines moving around. They could leave their zone.
            self.damping = 100
        #First, confirm that this mine "touches" owner's mines
        if self.sourcePlayer.exists():
            for m in self.sourcePlayer.gameData['mines']:
                if m.exists() and not m.died:
                    if m.rad != 0: #Don't check un-activated mines
                        p2 = m.node.position
                        diff = (bs.Vector(p1[0]-p2[0],0.0,p1[2]-p2[2]))
                        dist = (diff.length())
                        if dist < (m.rad + r)-fudge: #We check m.rad just in case it's somehow different. However, this probably shouldn't happen. Unless I change gameplay later.
                            mineOK = True #mine adjoins owner's territory. Will set to false if it also adjoin's enemy though.
                            break #Get out of the loop
        takeovers = []
        if mineOK:
            for p in self.getActivity().players:
                if not p is self.sourcePlayer:
                    if p.exists():
                        for m in p.gameData['mines']:
                            if m.rad != 0.0: #Don't check un-activated mines
                                p2 = m.node.position
                                diff = (bs.Vector(p1[0]-p2[0],0.0,p1[2]-p2[2]))
                                dist = (diff.length())
                                if dist < m.rad + r: #We check m.rad just in case it's somehowdifferent. However, this probably shouldn't happen. Unless I change gameplay later.
                                    mineOK = False
                                    takeovers = []
                                    break

        #If we made it to here and mineOK is true, we can activate.  Otherwise, we'll flash red and die.
        self.zone = bs.newNode('locator',attrs={'shape':'circle','position':self.node.position,'color':self.sourcePlayer.color,'opacity':0.5,'drawBeauty':False,'additive':True})
        bs.animateArray(self.zone,'size',1,{0:[0.0],150:[2*r]}) #Make circle at the default radius to show players where it would go if OK
        if mineOK or self.isHome:
            self.activated = True
            self.rad = r #Immediately set this mine's radius
        else: #mine was not OK
            keys = {0:(1,0,0),49:(1,0,0),50:(1,1,1),100:(0,1,0)}
            bs.animateArray(self.zone,'color',3,keys,loop=True)
            bs.gameTimer(800, bs.WeakCall(self.handleMessage, bs.DieMessage()), repeat=False)
Exemple #10
0
    def __init__(self, spaz, normalColor=(0.1, 0.5, 0.7),
                 maxColor=(1.0, 0.6, 0.4), maxThreshold=0.9,
                 minRadius=0.2,
                 maxRadius=1.0, timeTakes=400, willDecrease=True,
                 decreaseFinishCallback=None):
        bs.Actor.__init__(self)

        try:
            if spaz is None or spaz.node is None:
                return
        except:
            return

        self.node = bs.newNode('locator', attrs={'shape': 'circle',
                                                 'color': normalColor,
                                                 'opacity': 0.5,
                                                 'drawBeauty': False,
                                                 'additive': True})

        self.maxRadius = maxRadius
        self.minRadius = minRadius
        self.timeTakes = timeTakes
        self.willDecrease = willDecrease
        self.decreaseFinishCallback = decreaseFinishCallback
        self._died = False
        spaz.node.connectAttr('position', self.node, 'position')
        bs.animateArray(self.node, 'size', 1, {0: [2 * minRadius], timeTakes: [2 * maxRadius]})

        arriveMaxTime = int(maxThreshold * timeTakes)
        maxRemainTime = 2 * (timeTakes - arriveMaxTime)

        self.changeColorMaxTimer = bs.Timer(
            arriveMaxTime, bs.WeakCall(self.changeNodeColor, maxColor))

        self.startDecreaseTimer = None
        self.changeColorNormalTimer = None
        self.decreaseFinishTimer = None
        if willDecrease:
            self.changeColorNormalTimer = bs.Timer(
                arriveMaxTime + maxRemainTime, bs.WeakCall(self.changeNodeColor, normalColor))
            self.startDecreaseTimer = bs.Timer(timeTakes + 1, self.doDecrease)
            self.decreaseFinishTimer = bs.Timer(
                2 * (timeTakes + 1), bs.WeakCall(self.handleMessage, BarTooSmallToFinishMessage()))
    def __init__(self, position=(0, 5, -8), color=(1, 1, 1)):
        self._r1 = 0.7
        self._rFudge = 0.15
        bs.Actor.__init__(self)
        self._position = bs.Vector(*position)
        self.color = color
        p1 = position
        p2 = (position[0] + 1, position[1], position[2])
        p3 = (position[0] - 1, position[1], position[2])
        showInSpace = False
        self._hit = False
        n1 = bs.newNode('locator',
                        attrs={
                            'shape': 'circle',
                            'position': p1,
                            'color': self.color,
                            'opacity': 0.5,
                            'drawBeauty': showInSpace,
                            'additive': True
                        })
        n2 = bs.newNode('locator',
                        attrs={
                            'shape': 'circle',
                            'position': p2,
                            'color': self.color,
                            'opacity': 0.5,
                            'drawBeauty': showInSpace,
                            'additive': True
                        })
        n3 = bs.newNode('locator',
                        attrs={
                            'shape': 'circle',
                            'position': p3,
                            'color': self.color,
                            'opacity': 0.5,
                            'drawBeauty': showInSpace,
                            'additive': True
                        })
        n4 = bs.newNode('light',
                        attrs={
                            'color': self.color,
                            'position': p1,
                            'intensity': .5
                        })

        bs.animateArray(n1, 'size', 1, {0: [0.0], 200: [self._r1 * 2.0]})
        bs.animateArray(n2, 'size', 1, {0: [0.0], 200: [self._r1 * 2.0]})
        bs.animateArray(n3, 'size', 1, {0: [0.0], 200: [self._r1 * 2.0]})
        self._nodes = [n1, n2, n3, n4]
Exemple #12
0
 def __init__(self,position):
     self._r1 = 0.45
     self._r2 = 1.1
     self._r3 = 2.0
     self._rFudge = 0.15
     bs.Actor.__init__(self)
     self._position = bs.Vector(*position)
     self._hit = False
     showInSpace = False # it can be handy to test with this on to make sure the projection isn't too far off from the actual object..
     n1 = bs.newNode('locator',attrs={'shape':'circle','position':position,'color':(0,1,0),'opacity':0.5,'drawBeauty':showInSpace,'additive':True})
     n2 = bs.newNode('locator',attrs={'shape':'circleOutline','position':position,'color':(0,1,0),'opacity':0.3,'drawBeauty':False,'additive':True})
     n3 = bs.newNode('locator',attrs={'shape':'circleOutline','position':position,'color':(0,1,0),'opacity':0.1,'drawBeauty':False,'additive':True})
     self._nodes = [n1,n2,n3]
     bs.animateArray(n1,'size',1,{0:[0.0],200:[self._r1*2.0]})
     bs.animateArray(n2,'size',1,{50:[0.0],250:[self._r2*2.0]})
     bs.animateArray(n3,'size',1,{100:[0.0],300:[self._r3*2.0]})
     bs.playSound(bs.getSound('laserReverse'))
Exemple #13
0
    def __init__(self, position=(0,1,0), velocity=(5,0,5), sourcePlayer=None, owner=None, explode=False):
        bs.Actor.__init__(self)

        activity = bs.getActivity()
        factory = self.getFactory()
        # spawn at the provided point
        #random = randint(0,2)
        self._spawnPos = (position[0], position[1]+0.1, position[2])
        self.node = bs.newNode("prop",
                               attrs={'model': factory.snoModel,
                                      'body':'sphere',
                                      'colorTexture': factory.texSno,
                                      'reflection':'soft',
                                      'modelScale':0.0,
                                      'bodyScale':0.8,
                                      'density':1,
                                      'reflectionScale':(0,0,1),
                                      'shadowSize': 0.6,
                                      'position':self._spawnPos,
                                      'velocity':velocity,
                                      'materials': [bs.getSharedObject('objectMaterial'), factory.ballMaterial]
                                      },
                               delegate=self)
        self.sourcePlayer = sourcePlayer
        self.owner = owner
        if factory._ballsMelt: #defaults to True.
            #Snowballs should melt after some time
            bs.gameTimer(1500, bs.WeakCall(self._disappear))
        self._hitNodes = set()
        self._exploded = False
        if factory._ballsBust:
            self.shouldBust = True
        else:
            self.shouldBust = False
        if explode:
            self.shouldExplode = True
        else:
            self.shouldExplode = False
        prefixAnim = {0: (1, 0, 0), 250: (1, 1, 0), 250 * 2: (0, 1, 0), 250 * 3: (0, 1, 1), 250 * 4: (1, 0, 1),
                      250 * 5: (0, 0, 1), 250 * 6: (1, 0, 0)}
            
        self.nodeShield = bs.newNode('shield', owner=self.node, attrs={'color': ((0+random.random()*4.5),(0+random.random()*4.5),(0+random.random()*4.5)),
                                                                       'position': (
                                                                           self.node.position[0],
                                                                           self.node.position[1],
                                                                           self.node.position[2] + 0.5),
                                                                       'radius': 0.65})
        self.node.connectAttr('position', self.nodeShield, 'position')
        bs.animate(self.nodeShield,'radius',{0:0.9,200:1,400:0.9},True)
        
        self.nodeShield2 = bs.newNode('shield', owner=self.node, attrs={'color': ((0+random.random()*4.5),(0+random.random()*4.5),(0+random.random()*4.5)),
                                                                       'position': (
                                                                           self.node.position[0],
                                                                           self.node.position[1],
                                                                           self.node.position[2] + 0.5),
                                                                       'radius': 0.65})
        self.node.connectAttr('position', self.nodeShield2, 'position')
        
        m = bs.newNode('math', owner=self.node, attrs={'input1': (0, 0.7, 0), 'operation': 'add'})
        self.node.connectAttr('position', m, 'input2')
        self.nodeText = bs.newNode('text',
                                   owner=self.node,
                                   attrs={'text': 'ShieldBall',
                                          'inWorld': True,
                                          'shadow': 1.0,
                                          'flatness': 1.0,
                                          'color': (0,0,1),
                                          'scale': 0.0,
                                          'hAlign': 'center'})
        m.connectAttr('output', self.nodeText, 'position')
        bs.animate(self.nodeText, 'scale', {0: 0, 140: 0.016, 200: 0.01})
        bs.animateArray(self.nodeText,'color',3,{0:(0,0,2),500:(0,2,0),1000:(2,0,0),1500:(2,2,0),2000:(2,0,2),2500:(0,1,6),3000:(1,2,0)},True)
        bs.emitBGDynamics(position=self.nodeText.position, velocity=self.node.position, count=200, scale=1.4, spread=2.01, chunkType='sweat')
        
        self.nodeLight = bs.newNode('light',
                                    attrs={'position': self.node.position,
                                           'color': (0,0,1),
                                           'radius': 0.4,
                                           'volumeIntensityScale': 0.5})
        self.node.connectAttr('position', self.nodeLight, 'position')
        bs.gameTimer(7000,self.nodeLight.delete)   
        bsUtils.animateArray(self.nodeLight, 'color', 3, prefixAnim, True)
        bs.animate(self.nodeLight, "intensity", {0:1.0, 1000:1.8, 2000:1.0}, loop = True)
    def doHitAtPosition(self, pos, player):
        activity = self.getActivity()

        # ignore hits if the game is over or if we've already been hit
        if activity.hasEnded() or self._hit or not self._nodes: return 0

        diff = (bs.Vector(*pos) - self._position)
        diff[
            1] = 0.0  # disregard y difference (our target point probably isnt exactly on the ground anyway)
        dist = diff.length()

        bullsEye = False
        points = 0
        if dist <= self._r3 + self._rFudge:
            # inform our activity that we were hit
            self._hit = True
            self.getActivity().handleMessage(self.TargetHitMessage())
            keys = {0: (1, 0, 0), 49: (1, 0, 0), 50: (1, 1, 1), 100: (0, 1, 0)}
            cDull = (0.3, 0.3, 0.3)
            if dist <= self._r1 + self._rFudge:
                bullsEye = True
                self._nodes[1].color = cDull
                self._nodes[2].color = cDull
                bs.animateArray(self._nodes[0], 'color', 3, keys, loop=True)
                popupScale = 1.8
                popupColor = (1, 1, 0, 1)
                streak = player.gameData['streak']
                points = 10 + min(20, streak * 2)
                bs.playSound(bs.getSound('bellHigh'))
                if streak > 0:
                    bs.playSound(
                        bs.getSound(
                            'orchestraHit4' if streak > 3 else
                            'orchestraHit3' if streak > 2 else
                            'orchestraHit2' if streak > 1 else 'orchestraHit'))
            elif dist <= self._r2 + self._rFudge:
                self._nodes[0].color = cDull
                self._nodes[2].color = cDull
                bs.animateArray(self._nodes[1], 'color', 3, keys, loop=True)
                popupScale = 1.25
                popupColor = (1, 0.5, 0.2, 1)
                points = 4
                bs.playSound(bs.getSound('bellMed'))
            else:
                self._nodes[0].color = cDull
                self._nodes[1].color = cDull
                bs.animateArray(self._nodes[2], 'color', 3, keys, loop=True)
                popupScale = 1.0
                popupColor = (0.8, 0.3, 0.3, 1)
                points = 2
                bs.playSound(bs.getSound('bellLow'))

            # award points/etc.. (technically should probably leave this up to the activity)
            popupStr = "+" + str(points)

            # if there's more than 1 player in the game, include their names and colors
            # so they know who got the hit
            if len(activity.players) > 1:
                popupColor = bs.getSafeColor(player.color,
                                             targetIntensity=0.75)
                popupStr += ' ' + player.getName()
            bs.PopupText(popupStr,
                         position=self._position,
                         color=popupColor,
                         scale=popupScale).autoRetain()

            # give this player's team points and update the score-board
            player.getTeam().gameData['score'].add(points)
            activity._updateScoreBoard()

            # also give this individual player points (only applies in teams mode)
            activity.scoreSet.playerScored(player,
                                           points,
                                           showPoints=False,
                                           screenMessage=False)

            bs.animateArray(self._nodes[0], 'size', 1, {
                800: self._nodes[0].size,
                1000: [0.0]
            })
            bs.animateArray(self._nodes[1], 'size', 1, {
                850: self._nodes[1].size,
                1050: [0.0]
            })
            bs.animateArray(self._nodes[2], 'size', 1, {
                900: self._nodes[2].size,
                1100: [0.0]
            })
            bs.gameTimer(1100, bs.Call(self.handleMessage, bs.DieMessage()))

        return bullsEye
Exemple #15
0
    def __init__(self,
                 position=(0, 1, 0),
                 powerupType='tripleBombs',
                 expire=True):
        """
        Create a powerup-box of the requested type at the requested position.

        see bs.Powerup.powerupType for valid type strings.
        """

        bs.Actor.__init__(self)

        factory = self.getFactory()
        self.powerupType = powerupType
        self._powersGiven = False

        if powerupType == 'tripleBombs': tex = factory.texBomb
        elif powerupType == 'punch': tex = factory.texPunch
        elif powerupType == 'iceBombs': tex = factory.texIceBombs
        elif powerupType == 'impactBombs': tex = factory.texImpactBombs
        elif powerupType == 'landMines': tex = factory.texLandMines
        elif powerupType == 'stickyBombs': tex = factory.texStickyBombs
        elif powerupType == 'shield': tex = factory.texShield
        elif powerupType == 'health': tex = factory.texHealth
        elif powerupType == 'curse': tex = factory.texCurse
        elif powerupType == 'sloMo': tex = factory.texSloMo
        elif powerupType == 'TNT': tex = factory.texTNT
        elif powerupType == 'strongICE': tex = factory.texStrongICE
        elif powerupType == 'speedBoots': tex = factory.texSpeedBoots
        elif powerupType == 'champ': tex = factory.texChamp
        elif powerupType == 'troll': tex = factory.texTroll
        elif powerupType == 'spazColor': tex = factory.texSpazColor
        elif powerupType == 'character': tex = factory.texCharacter
        elif powerupType == 'invisible': tex = factory.texInvisible
        else: raise Exception("invalid powerupType: " + str(powerupType))

        if len(position) != 3:
            raise Exception("expected 3 floats for position")

        self.node = bs.newNode('prop',
                               delegate=self,
                               attrs={
                                   'body':
                                   'box',
                                   'position':
                                   position,
                                   'model':
                                   factory.model,
                                   'lightModel':
                                   factory.modelSimple,
                                   'shadowSize':
                                   0.5,
                                   'colorTexture':
                                   tex,
                                   'reflection':
                                   'powerup',
                                   'reflectionScale': [1.0],
                                   'materials':
                                   (factory.powerupMaterial,
                                    bs.getSharedObject('objectMaterial'))
                               })
        prefixAnim = {
            0: (1, 0, 0),
            250: (1, 1, 0),
            250 * 2: (0, 1, 0),
            250 * 3: (0, 1, 1),
            250 * 4: (1, 0, 1),
            250 * 5: (0, 0, 1),
            250 * 6: (1, 0, 0)
        }
        color = (0, 0, 1)

        if fire.powerupName:
            m = bs.newNode('math',
                           owner=self.node,
                           attrs={
                               'input1': (0, 0.7, 0),
                               'operation': 'add'
                           })
            self.node.connectAttr('position', m, 'input2')
            self.nodeText = bs.newNode('text',
                                       owner=self.node,
                                       attrs={
                                           'text': powerupType,
                                           'inWorld': True,
                                           'shadow': 1.0,
                                           'flatness': 1.0,
                                           'color': color,
                                           'scale': 0.0,
                                           'hAlign': 'center'
                                       })
            m.connectAttr('output', self.nodeText, 'position')
            bs.animate(self.nodeText, 'scale', {0: 0, 140: 0.016, 200: 0.01})
            bs.animateArray(
                self.nodeText, 'color', 3, {
                    0: (0, 0, 2),
                    500: (0, 2, 0),
                    1000: (2, 0, 0),
                    1500: (2, 2, 0),
                    2000: (2, 0, 2),
                    2500: (0, 1, 6),
                    3000: (1, 2, 0)
                }, True)
            bs.emitBGDynamics(position=self.nodeText.position,
                              velocity=self.node.position,
                              count=75,
                              scale=1.0,
                              spread=1.3,
                              chunkType='spark')

        if fire.powerupShield:
            self.nodeShield = bs.newNode('shield',
                                         owner=self.node,
                                         attrs={
                                             'color':
                                             color,
                                             'position':
                                             (self.node.position[0],
                                              self.node.position[1],
                                              self.node.position[2] + 0.5),
                                             'radius':
                                             1.2
                                         })
            self.node.connectAttr('position', self.nodeShield, 'position')
            bsUtils.animateArray(self.nodeShield, 'color', 3, prefixAnim, True)

        if fire.discoLights:
            self.nodeLight = bs.newNode(
                'light',
                attrs={
                    'position': self.node.position,
                    'color': color,
                    'radius': 0.25,  #0.4 will make it nice and bright
                    'volumeIntensityScale': 0.5
                })
            self.node.connectAttr('position', self.nodeLight, 'position')
            bsUtils.animateArray(self.nodeLight, 'color', 3, prefixAnim, True)
            bs.animate(self.nodeLight,
                       "intensity", {
                           0: 1.0,
                           1000: 1.8,
                           2000: 1.0
                       },
                       loop=True)
            bs.gameTimer(8000, self.nodeLight.delete)

        # animate in..
        curve = bs.animate(self.node, "modelScale", {0: 0, 140: 1.6, 200: 1})
        bs.gameTimer(200, curve.delete)

        if expire:
            bs.gameTimer(defaultPowerupInterval - 2500,
                         bs.WeakCall(self._startFlashing))
            bs.gameTimer(defaultPowerupInterval - 1000,
                         bs.WeakCall(self.handleMessage, bs.DieMessage()))
Exemple #16
0
 def __init__(self,settings):
     bs.TeamGameActivity.__init__(self,settings)
     if self.settings['Epic Mode']: self._isSlowMotion = True
     self.info = bs.NodeActor(bs.newNode('text',
                                                attrs={'vAttach': 'bottom',
                                                       'hAlign': 'center',
                                                       'vrDepth': 0,
                                                       'color': (0,.2,0),
                                                       'shadow': 1.0,
                                                       'flatness': 1.0,
                                                       'position': (0,0),
                                                       'scale': 0.8,
                                                       'text': "Created by MattZ45986 on Github",
                                                       }))
     self.roundNum = 0
     self.simon = False
     self.time = 5000
     self._r1 = 2
     n1 = bs.newNode('locator',attrs={'shape':'circle','position':(-4,0,-6),
                                      'color':(1,0,0),'opacity':0.5,
                                      'drawBeauty':True,'additive':True})
     n2 = bs.newNode('locator',attrs={'shape':'circle','position':(0,0,-6),
                                      'color':(0,1,0),'opacity':0.5,
                                      'drawBeauty':True,'additive':True})
     n3 = bs.newNode('locator',attrs={'shape':'circle','position':(4,0,-6),
                                      'color':(0,0,1),'opacity':0.5,
                                      'drawBeauty':True,'additive':True})
     n4 = bs.newNode('locator',attrs={'shape':'circle','position':(-4,0,-2),
                                      'color':(1,1,0),'opacity':0.5,
                                      'drawBeauty':True,'additive':True})
     n5 = bs.newNode('locator',attrs={'shape':'circle','position':(0,0,-2),
                                      'color':(0,1,1),'opacity':0.5,
                                      'drawBeauty':True,'additive':True})
     n6 = bs.newNode('locator',attrs={'shape':'circle','position':(4,0,-2),
                                      'color':(1,0,1),'opacity':0.5,
                                      'drawBeauty':True,'additive':True})
     n7 = bs.newNode('locator',attrs={'shape':'circle','position':(-4,0,2),
                                      'color':(.5,.5,.5),'opacity':0.5,
                                      'drawBeauty':True,'additive':True})
     n8 = bs.newNode('locator',attrs={'shape':'circle','position':(0,0,2),
                                      'color':(.5,.325,0),'opacity':0.5,
                                      'drawBeauty':True,'additive':True})
     n9 = bs.newNode('locator',attrs={'shape':'circle','position':(4,0,2),
                                      'color':(1,1,1),'opacity':0.5,
                                      'drawBeauty':True,'additive':True})
     bs.animateArray(n1,'size',1,{0:[0.0],200:[self._r1*2.0]})
     bs.animateArray(n2,'size',1,{0:[0.0],200:[self._r1*2.0]})
     bs.animateArray(n3,'size',1,{0:[0.0],200:[self._r1*2.0]})
     bs.animateArray(n4,'size',1,{0:[0.0],200:[self._r1*2.0]})
     bs.animateArray(n5,'size',1,{0:[0.0],200:[self._r1*2.0]})
     bs.animateArray(n6,'size',1,{0:[0.0],200:[self._r1*2.0]})
     bs.animateArray(n7,'size',1,{0:[0.0],200:[self._r1*2.0]})
     bs.animateArray(n8,'size',1,{0:[0.0],200:[self._r1*2.0]})
     bs.animateArray(n9,'size',1,{0:[0.0],200:[self._r1*2.0]})
     self.options = ["red", "green", "blue", "yellow", "teal", "purple", "gray", "orange", "white", "top", "bottom", "middle row", "left", "right", "center column", "outside"]
Exemple #17
0
 def doDecrease(self):
     bs.animateArray(self.node, 'size', 1, {0: [2 * self.maxRadius], self.timeTakes: [2 * self.minRadius]})
Exemple #18
0
 def __init__(self, settings):
     bs.TeamGameActivity.__init__(self, settings)
     self.info = bs.NodeActor(
         bs.newNode('text',
                    attrs={
                        'vAttach': 'bottom',
                        'hAlign': 'center',
                        'vrDepth': 0,
                        'color': (0, .2, 0),
                        'shadow': 1.0,
                        'flatness': 1.0,
                        'position': (0, 0),
                        'scale': 0.8,
                        'text': "Created by MattZ45986 on Github",
                    }))
     self._safeZoneMaterial = bs.Material()
     self._scoredis = bs.ScoreBoard()
     self._safeZoneMaterial.addActions(
         conditions=("theyHaveMaterial",
                     bs.getSharedObject('playerMaterial')),
         actions=(("modifyPartCollision", "collide",
                   True), ("modifyPartCollision", "physical", False),
                  ("call", "atConnect", bs.Call(self.handleSafeZoneEnter))))
     self.safeZone1 = bs.newNode(
         'region',
         attrs={
             'position': (-11, 0, 0),
             'scale': (1.8, 1.8, 1.8),
             'type':
             'sphere',
             'materials':
             [self._safeZoneMaterial,
              bs.getSharedObject('regionMaterial')]
         })
     self.safeZone2 = bs.newNode(
         'region',
         attrs={
             'position': (11, 0, 0),
             'scale': (1.8, 1.8, 1.8),
             'type':
             'sphere',
             'materials':
             [self._safeZoneMaterial,
              bs.getSharedObject('regionMaterial')]
         })
     self.zoneLocator1 = bs.newNode('locator',
                                    attrs={
                                        'shape': 'circle',
                                        'position': (-11, 0, 0),
                                        'color': (1, 1, 1),
                                        'opacity': 1,
                                        'drawBeauty': True,
                                        'additive': True
                                    })
     bs.animateArray(self.zoneLocator1, 'size', 1, {
         0: [0.0],
         200: [1.8 * 2.0]
     })
     self.zoneLocator2 = bs.newNode('locator',
                                    attrs={
                                        'shape': 'circle',
                                        'position': (11, 0, 0),
                                        'color': (1, 1, 1),
                                        'opacity': 1,
                                        'drawBeauty': True,
                                        'additive': True
                                    })
     bs.animateArray(self.zoneLocator2, 'size', 1, {
         0: [0.0],
         200: [1.8 * 2.0]
     })
    def __init__(self,
                 position=(0, 1, 0),
                 powerupType='tripleBombs',
                 expire=True):

        bs.Actor.__init__(self)
        factory = self.getFactory()

        if gSettingsEnabled: settings = bs.get_settings()
        else: settings = {}

        self.powerupType = powerupType
        self._powersGiven = False
        if powerupType == 'tripleBombs':
            tex = factory.texBomb
            name = 'TripleBombs'
        elif powerupType == 'multiBombs':
            tex = factory.texMultiBombs
            name = 'MultiBombs'
        elif powerupType == 'punch':
            tex = factory.texPunch
            name = 'Gloves'
        elif powerupType == 'speedPunch':
            tex = factory.texSpeedPunch
            name = 'Gloves 2.0'
        elif powerupType == 'fireworkBombs':
            tex = factory.texFireworkBomb
            name = 'FireWorks'
        elif powerupType == 'killLaKillBombs':
            tex = factory.texKillLaKillBomb
            name = 'KillAll'
        elif powerupType == 'poisonBombs':
            tex = factory.texPoisonBomb
            name = 'PoisonBomb'
        elif powerupType == 'pandoraBox':
            tex = factory.texPandoraBox
            name = 'PandoraBox'
        elif powerupType == 'yellowShield':
            tex = factory.texYellowShield
            name = 'YellowShield'
        elif powerupType == 'jumpingBombs':
            tex = factory.texJumpingBomb
            name = 'JumpingBomb'
        elif powerupType == 'tpBombs':
            tex = factory.texTpBombs
            name = 'TPBomb'
        elif powerupType == 'iceBombs':
            tex = factory.texIceBombs
            name = 'IcyBombs'
        elif powerupType == 'impactBombs':
            tex = factory.texImpactBombs
            name = 'ImpactBombs'
        elif powerupType == 'landMines':
            tex = factory.texLandMines
            name = 'LandMines'
        elif powerupType == 'stickyBombs':
            tex = factory.texStickyBombs
            name = 'StickyBombs'
        elif powerupType == 'shield':
            tex = factory.texShield
            name = 'Bubble'
        elif powerupType == 'health':
            tex = factory.texHealth
            name = 'Health'
        elif powerupType == 'curse':
            tex = factory.texCurse
            name = 'Pls Touch Me'
        elif powerupType == 'unbreakable':
            tex = factory.texUnb
            name = 'Unbreakable'
        elif powerupType == 'dirtBombs':
            tex = factory.texDirt
            name = 'DirtBomb'
        elif powerupType == 'speed':
            tex = factory.texSpeed  # new powerups begin
        elif powerupType == 'alan':
            tex = factory.texAlan
            name = 'Boss'
        elif powerupType == 'rdm':
            tex = factory.texRDM
            name = 'RandomBomb'
        elif powerupType == 'randomCharacter':
            tex = factory.RandomCharacter
            name = 'Random Char'
        elif powerupType == 'troll':
            tex = factory.Troll
            name = 'FunPack'
        elif powerupType == 'mj':
            tex = factory.texmj
            name = 'MJ'
        elif powerupType == 'impactMess':
            tex = factory.teximpactMess
            name = 'ImpactMess'
        elif powerupType == 'Motion':
            tex = factory.texMotion
            name = 'Motion'
        elif powerupType == 'invisibility':
            tex = factory.texInvisibility
            name = 'Invisibile'
        elif powerupType == 'hijump':
            tex = factory.texHiJump
            name = 'Hi-Jump'
        elif powerupType == 'ballon':
            tex = factory.texBallon
            name = 'Ballon'
        elif powerupType == 'BlockPowerup':
            tex = factory.texBlock
            name = 'Block'
        elif powerupType == 'iceImpact':
            tex = factory.texiceImpact
            name = 'IceImpact'
        elif powerupType == 'goldenBomb':
            tex = factory.texGoldenBomb
            name = 'BlastyBomb'
        elif powerupType == 'tbomb':
            tex = factory.textbomb
            name = 'TBomb'
        elif powerupType == 'gluebomb':
            tex = factory.texgluebomb
            name = 'Broken Glue'
        elif powerupType == 'weedbomb':
            tex = factory.texweedbomb
            name = 'WeedBomb'
        elif powerupType == 'bot':
            tex = factory.texBot
            name = 'Buddy Bot'
        elif powerupType == 'celebrate':
            tex = factory.texcelebrate
            name = 'Celebrate'
        elif powerupType == 'FloatingMine':
            tex = factory.texFloatingMine
            name = 'LandMines'
        elif powerupType == 'TouchMe':
            tex = factory.texTouchMe
            name = 'TouchMe'
        elif powerupType == 'radius':
            tex = factory.texRadius
            name = 'Radius'
        elif powerupType == 'sleep':
            tex = factory.texSleep
            name = 'Sleepy'
        elif powerupType == 'night':
            tex = factory.texNight
            name = 'NiteNite'
        elif powerupType == 'spazBomb':
            tex = factory.texSpazBomb
            name = 'SpazBomb'
        elif powerupType == 'curseBomb':
            tex = factory.texcurseBomb
            name = 'CurseBomb'
        elif powerupType == 'characterBomb':
            tex = factory.texcharacterBomb
            name = 'CharBomb'
        elif powerupType == 'mjBomb':
            tex = factory.texmjBomb
            name = 'MJBomb'
        elif powerupType == 'trioBomb':
            tex = factory.textrioBomb
            name = 'ImpactTrio'
        elif powerupType == 'speedBomb':
            tex = factory.texspeedBomb
            name = 'ShockWave'
        elif powerupType == 'healBomb':
            tex = factory.texhealBomb
            name = 'HealthBomb'
        elif powerupType == 'nightBomb':
            tex = factory.texNightBomb
            name = 'AtomBomb'
        elif powerupType == 'revengeBomb':
            tex = factory.texrevengeBomb
            name = 'RevengeBomb'
        elif powerupType == 'blastBomb':
            tex = factory.texblastBomb
            name = 'blastBomb'
        elif powerupType == 'knockBomb':
            tex = factory.texknockBomb
            name = 'KnockBomb'
        elif powerupType == 'stickyIce':
            tex = factory.texstickyIce
            name = 'StickyIce'
        elif powerupType == 'stickyIceTrio':
            tex = factory.texstickyIceTrio
            name = 'StickyIceTrio'
        elif powerupType == 'stickyIceMess':
            tex = factory.texstickyIceMess
            name = 'StickyIceMess'
        elif powerupType == 'stickyMess':
            tex = factory.texStickyMess
            name = 'StickyMess'
        elif powerupType == 'icyMess':
            tex = factory.texIcyMess
            name = 'IcyMess'
        elif powerupType == 'icyTrio':
            tex = factory.texicyTrio
            name = 'IcyTrio'
        elif powerupType == 'weee':
            tex = factory.texWeee
            name = 'Health'
        elif powerupType == 'tnt':
            tex = factory.texTnt
            name = 'TNT'
        elif powerupType == 'boomBomb':
            tex = factory.texboomBomb
            name = 'KaboomBomb'
        elif powerupType == 'name':
            tex = factory.texName
            name = 'NewName'
        elif powerupType == 'highlight':
            tex = factory.texHighlight
            name = 'HighLight'
        elif powerupType == 'spotlight':
            tex = factory.texSpotlight
            name = 'Spotlight'
        elif powerupType == 'jumpFly':
            tex = factory.texjumpFly
            name = 'FlyJump'
        elif powerupType == 'use':
            tex = factory.texuse
            name = 'FlyBomb'
        elif powerupType == "antiGrav":
            tex = factory.texAntiGrav
            name = 'AntiGrav'
        elif powerupType == "BlackHole":
            tex = factory.texBlackHole
            name = 'BlackHole'
        elif powerupType == "Slippery":
            tex = factory.texSlippery
            name = 'LuckyBlock'
        elif powerupType == "Box":
            tex = factory.texBox
            name = 'Box'
        elif powerupType == 'snoball':
            tex = factory.texSno
            mod = factory.snoModel
            name = "shieldBall"
        elif powerupType == 'pass':
            return
        else:
            raise Exception("invalid powerupType: " + str(powerupType))

        if len(position) != 3:
            raise Exception("expected 3 floats for position")

        if powerupType == 'poisonBombs':
            refScale = (0, 3, 0)
            ref = 'soft'
        elif powerupType == 'pandoraBox':
            ref = 'soft'
            refScale = (1, 1, 1)
        elif powerupType == 'dirtBombs':
            ref = 'soft'
            refScale = (1, 0.4, 0.16)
        else:
            refScale = [0.95]
            ref = 'powerup'
        self.node = bs.newNode('prop',
                               delegate=self,
                               attrs={
                                   'body':
                                   'box',
                                   'position':
                                   position,
                                   'model':
                                   factory.model,
                                   'lightModel':
                                   factory.modelSimple,
                                   'shadowSize':
                                   0.48,
                                   'colorTexture':
                                   tex,
                                   'reflection':
                                   ref,
                                   'reflectionScale':
                                   refScale,
                                   'materials':
                                   (factory.powerupMaterial,
                                    bs.getSharedObject('objectMaterial'))
                               })
        prefixAnim = {
            0: (1, 0, 0),
            250: (1, 1, 0),
            250 * 2: (0, 1, 0),
            250 * 3: (0, 1, 1),
            250 * 4: (1, 0, 1),
            250 * 5: (0, 0, 1),
            250 * 6: (1, 0, 0)
        }
        color = (0, 0, 1)

        if don.powerupName:
            m = bs.newNode('math',
                           owner=self.node,
                           attrs={
                               'input1': (0, 0.7, 0),
                               'operation': 'add'
                           })
            self.node.connectAttr('position', m, 'input2')
            self.nodeText = bs.newNode('text',
                                       owner=self.node,
                                       attrs={
                                           'text': str(name),
                                           'inWorld': True,
                                           'shadow': 1.0,
                                           'flatness': 1.0,
                                           'color': color,
                                           'scale': 0.0,
                                           'hAlign': 'center'
                                       })
            m.connectAttr('output', self.nodeText, 'position')
            bs.animate(self.nodeText, 'scale', {0: 0, 140: 0.016, 200: 0.01})
            bs.animateArray(
                self.nodeText, 'color', 3, {
                    0: (0, 0, 2),
                    500: (0, 2, 0),
                    1000: (2, 0, 0),
                    1500: (2, 2, 0),
                    2000: (2, 0, 2),
                    2500: (0, 1, 6),
                    3000: (1, 2, 0)
                }, True)
            bs.emitBGDynamics(position=self.nodeText.position,
                              velocity=self.node.position,
                              count=200,
                              scale=1.4,
                              spread=2.01,
                              chunkType='sweat')

        if don.shieldOnPowerUps:
            self.nodeShield = bs.newNode('shield',
                                         owner=self.node,
                                         attrs={
                                             'color':
                                             color,
                                             'position':
                                             (self.node.position[0],
                                              self.node.position[1],
                                              self.node.position[2] + 0.5),
                                             'radius':
                                             1.2
                                         })
            self.node.connectAttr('position', self.nodeShield, 'position')
            bsUtils.animateArray(self.nodeShield, 'color', 3, prefixAnim, True)

        if don.discoLights:
            self.nodeLight = bs.newNode('light',
                                        attrs={
                                            'position': self.node.position,
                                            'color': color,
                                            'radius': 0.2,
                                            'volumeIntensityScale': 0.5
                                        })
            self.node.connectAttr('position', self.nodeLight, 'position')
            bsUtils.animateArray(self.nodeLight, 'color', 3, prefixAnim, True)
            bs.animate(self.nodeLight,
                       "intensity", {
                           0: 1.0,
                           1000: 1.8,
                           2000: 1.0
                       },
                       loop=True)
            bs.gameTimer(8000, self.nodeLight.delete)

        if don.powerupTimer:
            self.powerupHurt = bs.newNode('shield',
                                          owner=self.node,
                                          attrs={
                                              'color': (1, 1, 1),
                                              'radius': 0.1,
                                              'hurt': 1,
                                              'alwaysShowHealthBar': True
                                          })
            self.node.connectAttr('position', self.powerupHurt, 'position')
            bs.animate(self.powerupHurt, 'hurt', {
                0: 0,
                defaultPowerupInterval - 1000: 1
            })
        bs.gameTimer(defaultPowerupInterval - 1000, bs.Call(self.do_delete))

        curve = bs.animate(self.node, "modelScale", {0: 0, 140: 1.6, 200: 1})
        bs.gameTimer(200, curve.delete)

        if expire:
            bs.gameTimer(defaultPowerupInterval - 2500,
                         bs.WeakCall(self._startFlashing))
            bs.gameTimer(defaultPowerupInterval - 1000,
                         bs.WeakCall(self.handleMessage, bs.DieMessage()))
 def fadeToRed(self):
     g = bs.getSharedObject('globals')
     currentTint = g.tint
     bs.animateArray(g, 'tint', 3, {1: currentTint, 6000: (1, 0, 0)})