示例#1
0
    def transport(self):
        if self.receive_structure is None or self.send_structure is None or self.transporting_resource is None:
            return
        if self.receive_structure.isDead or self.send_structure.isDead:
            return
        if self.transporting_resource not in self.send_structure.storage.keys(
        ):
            return
        if self.transporting_resource not in self.receive_structure.storage.keys(
        ):
            return

        if self.tempStorage == 0:
            if self.send_structure.send(self.transporting_resource):
                self.tempStorage = 1
                self.parent.add(
                    SimpleActionActor(
                        'assets/%s.png' % self.transporting_resource,
                        self.send_structure.position,
                        ac.FadeIn(0.5) | ac.MoveTo(self.position, 1),
                        opacity=0))
        if self.tempStorage == 1:
            if self.receive_structure.receive(self.transporting_resource):
                self.tempStorage = 0
                self.parent.add(
                    SimpleActionActor(
                        'assets/%s.png' % self.transporting_resource,
                        self.position,
                        ac.FadeIn(0.5)
                        | ac.MoveTo(self.receive_structure.position, 1),
                        opacity=0))
示例#2
0
    def distribute(self):
        for obj in self.parent.get_children():
            if hasattr(obj, 'receive'):
                if isinstance(obj, Warehouse):
                    continue
                if mt.distance(self.position, obj.position) > self.range:
                    continue

                if self.storage['copper'] >= 1:
                    if obj.receive('copper'):
                        self.storage['copper'] -= 1
                        self.parent.add(
                            SimpleActionActor('assets/copper.png',
                                              self.position,
                                              ac.FadeIn(0.5)
                                              | ac.MoveTo(obj.position, 1),
                                              opacity=0))
                if self.storage['iron'] >= 1:
                    if obj.receive('iron'):
                        self.storage['iron'] -= 1
                        self.parent.add(
                            SimpleActionActor('assets/iron.png',
                                              self.position,
                                              ac.FadeIn(0.5)
                                              | ac.MoveTo(obj.position, 1),
                                              opacity=0))
                if self.storage['titanium'] >= 1:
                    if obj.receive('titanium'):
                        self.storage['titanium'] -= 1
                        self.parent.add(
                            SimpleActionActor('assets/titanium.png',
                                              self.position,
                                              ac.FadeIn(0.5)
                                              | ac.MoveTo(obj.position, 1),
                                              opacity=0))
                if self.storage['BasicBullet'] >= 1:
                    if obj.receive('BasicBullet'):
                        self.storage['BasicBullet'] -= 1
                        self.parent.add(
                            SimpleActionActor('assets/BasicBullet.png',
                                              self.position,
                                              ac.FadeIn(0.5)
                                              | ac.MoveTo(obj.position, 1),
                                              opacity=0))
                if self.storage['CannonBullet'] >= 1:
                    if obj.receive('CannonBullet'):
                        self.storage['CannonBullet'] -= 1
                        self.parent.add(
                            SimpleActionActor('assets/CannonBullet.png',
                                              self.position,
                                              ac.FadeIn(0.5)
                                              | ac.MoveTo(obj.position, 1),
                                              opacity=0))
示例#3
0
 def updateSpeed(self, dt):
     if (self.s.currentLevel > g.script_startflying):
         self.currentSprite.do(
             ac.MoveTo((g.screenWidth / 2,
                        self.currentSprite.y - self.s.currentSpeed),
                       duration=updateInterval))
         self.prevSpr.do(
             ac.MoveTo(
                 (g.screenWidth / 2, self.prevSpr.y - self.s.currentSpeed),
                 duration=updateInterval))
         self.nextSpr.do(
             ac.MoveTo(
                 (g.screenWidth / 2, self.nextSpr.y - self.s.currentSpeed),
                 duration=updateInterval))
示例#4
0
 def __set_bullet_time(self):
     bullet_time = self.target.bullets.next()
     bullet_time.stop()
     try:
         if bullet_time.sprite_move_action.done():
             bullet_time.sprite_move_action = actions.MoveTo(
                 (self.target.position[0], HEIGHT * 1.1), 5)
     except Exception:
         bullet_time.sprite_move_action = actions.MoveTo(
             (self.target.position[0], HEIGHT * 1.1), 5)
     bullet_time.position = self.target.position
     try:
         self.target.parent.remove(bullet_time)
     except Exception:
         pass
     self.target.parent.add(bullet_time)
     bullet_time.do(bullet_time.sprite_move_action)
示例#5
0
 def __init__(self, x, y, state):
     super(FallingBoxSprite, self).__init__('assets/circle.png', scale = spriteScale)
     self.position = x,y
     action = ac.MoveTo((self.position[0], -g.consts["window"]["height"]*1.25), 8)
     self.do(action)
     self.schedule_interval(self.checkForDeath, 0.25)
     self.haveAppliedPenalty = False
     self.s = state
示例#6
0
 def showMessage(
     self,
     message="Your game must be restarted in order to apply these settings."
 ):
     if not self.active:
         self.lbl.element.text = message
         self.do(
             actions.AccelDeccel(
                 actions.MoveTo((int(self.x), 0), duration=0.5)))
         self.active = True
示例#7
0
    def __init__(self, width=None, height=None):
        super().__init__(100, 100, 100, 100, width=width, height=height)
        self.width = reswidth
        self.height = int(resheight * 0.07)
        self.x = 0
        self.y = resheight
        self.showAction = actions.AccelDeccel(
            actions.MoveTo((self.x, resheight - self.height), 0.5))
        self.hideAction = actions.AccelDeccel(
            actions.MoveTo((self.x, resheight), 0.5))

        self.lbl = text.Label("",
                              anchor_x="center",
                              anchor_y="center",
                              font_size=18)
        self.lbl.x = self.width / 2
        self.lbl.y = self.height / 2

        self.active = False

        self.add(self.lbl)
示例#8
0
    def __init__(self, line: Line):
        class Qwq(cac.IntervalAction):
            def init(self, width, duration):
                self._width = width
                self.duration = duration

            def start(self):
                self._cur = self.target.scale_y

            def update(self, t):
                self.target.scale_y = (self._cur - self._width) * (1 - t) + self._width

        def p(state: Line.LineState):
            res = copy.copy(state)
            res.x *= settings.size
            res.x += (settings.width - settings.size) / 2
            res.y *= settings.size
            res.y += (settings.height - settings.size) / 2
            return res

        states = list(map(p, sorted(line.states, key=lambda e: e.sec)))
        super().__init__('line_empty.png', (states[0].x, states[0].y), states[0].angle)
        for note in line.notes:
            self.add(NoteSprite(note))
        line_sprite = cocos.sprite.Sprite('line.png')

        self.add(line_sprite)
        action = None
        pre = states[0]
        for i in states[1:]:
            act = cac.MoveTo((i.x, i.y), i.sec - pre.sec) | cac.RotateBy(i.angle - pre.angle, i.sec - pre.sec)
            if i.rev != pre.rev:
                act |= cac.Delay(i.sec - pre.sec) + cac.FlipY(duration=0.01)
            if not action:
                action = act
            else:
                action += act
            pre = i
        if action:
            self.do(action)
        action = None
        sec = 0
        for i in states:
            act = Qwq(i.width, i.sec - sec)
            if not action:
                action = act
            else:
                action += act
            sec = i.sec
        if action:
            line_sprite.do(action)
示例#9
0
    def move(self, check=True):

        cell = self.owner.map.get_at_pixel(self.x, self.y)
        self.checkOrientation()
        x, y = self.orientation
        cell = self.owner.map.get_neighbor(cell, self.orientation)

        try:
            if not "wall" in cell.tile.id or not check:
                self.walkAnim.start()
                newX = self.x + self.movAmount*x
                newY = self.y + self.movAmount*y
                self.do(actions.MoveTo((newX, newY), self.animTime))
        except AttributeError:
            print "You are trying to exceed map limits"
示例#10
0
    def distribute(self):
        if self.storage[self.miningResource] <= 0:
            return False

        for obj in self.parent.get_children():
            if hasattr(obj, 'receive'):
                if mt.distance(self.position, obj.position) > self.range:
                    continue
                if obj.receive(self.miningResource):
                    self.storage[self.miningResource] -= 1
                    self.parent.add(
                        SimpleActionActor(
                            'assets/%s.png' % self.miningResource,
                            self.position,
                            ac.FadeIn(0.5) | ac.MoveTo(obj.position, 1),
                            opacity=0))
示例#11
0
def run_draw_card_animations(layer, event):
    card, player_id = event.card, event.player_id
    i = layer.player_id_to_i(player_id)
    hand_sprites = layer.hand_sprites[i]

    spr_kw = {
        'position': pos(layer.RightCX, layer.DeckY[i]),
        'is_front': (i == 0), 'scale': 0.35,
        'sel_mgr_kwargs': {'set_default': i == 0}, 'selected_effect': None, 'unselected_effect': None}
    new_sprite = HandSprite(card, **spr_kw)
    assert new_sprite not in hand_sprites

    hand_sprites.append(new_sprite)
    new_sprite.add_to_layer(layer)

    layer.do_animation(
        actions.MoveTo(pos(layer.HeroL, layer.HandY[i]), duration=C.UI.Cocos.Animation.DrawCardTime),
        target=new_sprite)
示例#12
0
    def __init__(self, towerParent, target, image, towerNumber, rotation,
                 speed, damage, effect, effectDuration, effectFactor):
        """
        Create a projectile.

        :Parameters:
            `towerParent`: tower object
                Tower that launched the projectile.
            `target` : enemy object
                Enemy that is targeted.
            `image` : image
                Image of the projectile.
            `towerNumber` : int
                Number of the parent tower.
            `rotation` : int
                Rotation of the parent tower.
            `speed` : int
                Speed of the projectile.
            `damage` : int
                Damage the projectile causes.
            `effect` : string
                Effect that is caused by projectile (like poison or normal)
            `effectDuration` : int
                Duration that the effect is active.
            `effectFactor` : int
                How strong the effect is.
        """

        super().__init__(image, position=towerParent.position, scale=1)
        self.rotation = rotation
        self.damage = damage
        self.speed = speed
        self.distance = self._distance(target.position, self.position)
        self.duration = self._duration()
        self.do(actions.MoveTo(target.position, self.duration))
        self.schedule_interval(self._dispatch_hit_event, self.duration, target,
                               towerNumber, effect, effectDuration,
                               effectFactor)
示例#13
0
 def on_key_press (self, k, modifiers):
     if (k in g.keyBindings):
         self.s.timeLastKeyPress = time.time()
         children = self.boxes[g.keyBindings.index(k)]
         if(children):
             bestOne = min([abs(child.y - g.hitBoxHeight) for child in children])
             bestChild = [child for child in children if abs(child.y - g.hitBoxHeight) == bestOne][0] #yuck
             if(bestChild):
                 if(bestOne < 8.5):
                     children.remove(bestChild)
                     action = (ac.MoveTo((bestChild.x, g.hitBoxHeight)) | ac.FadeOut(0.25) | ac.ScaleBy(1.75, 0.25) ) + ac.CallFuncS(self.remove_child)
                     bestChild.do(action)
                     self.s.currentSpeed += 2.5
                     self.sounds[g.keyBindings.index(k)].play() # Play right now
                 elif (bestOne < 20):
                     children.remove(bestChild)
                     action = (ac.FadeOut(0.25)) + ac.CallFuncS(self.remove_child)
                     bestChild.do(action)
                     self.s.currentSpeed += 1
                     self.missSounds[g.keyBindings.index(k)].play() # Play right now
                 else:
                     #apply penalty! (to stop spamming)
                     self.s.currentSpeed -= 5
示例#14
0
def run_play_minion_animations(layer, event):
    minion, player_id, loc = event.minion, event.player_id, event.summon_event.loc
    i = layer.player_id_to_i(player_id)
    play_sprites = layer.play_sprites[i]

    sprite_in_hand = _find_sprite(minion, where=layer.hand_sprites[i])
    if sprite_in_hand is None:
        # If not found original hand, do not run animations.
        return

    spr_kw = {
        'position': sprite_in_hand.position,
        'scale': 1.0}
    new_sprite = MinionSprite(minion, **spr_kw)
    assert new_sprite not in play_sprites

    play_sprites.insert(loc, new_sprite)
    new_sprite.add_to_layer(layer)

    layer.do_animation(
        actions.MoveTo(pos(
            layer.BoardL + (2 * loc + 1) / (2 * len(play_sprites)) * (layer.HeroL - layer.BoardL),
            layer.PlayY[i]), duration=C.UI.Cocos.Animation.PlayMinionTime),
        target=new_sprite)
示例#15
0
    def __init__(self, note: BaseNote):
        def p(state: BaseNote.NoteState):
            res = copy.copy(state)
            res.pos *= settings.size
            res.speed *= settings.size
            return res

        states = list(map(p, sorted(note.states, key=lambda e: e.sec)))
        dis = 0
        img = 'click.png'
        if isinstance(note, Drag):
            img = 'drag.png'
        elif isinstance(note, Flick):
            img = 'flick.png'
        elif isinstance(note, Hold):
            img = 'hold.png'
            sec = note.tap_sec
            length = 0
            for i in states:
                if i.sec <= note.tap_sec:
                    continue
                length += i.speed * (i.sec - sec)
                sec = i.sec
            length += states[-1].speed * (note.end_sec - sec)
            dis += length // 2
        sec = note.tap_sec
        for i in states[::-1]:
            if i.sec > note.tap_sec:
                break
            note.show_sec = min(
                note.show_sec,
                sec - (settings.size * 2 - abs(dis) + (length if isinstance(note, Hold) else 0)) / abs(i.speed)
            )
            dis += (sec - i.sec) * i.speed
            sec = i.sec
        note.show_sec = min(
            note.show_sec,
            sec - (settings.size * 2 - abs(dis) + (length if isinstance(note, Hold) else 0)) / abs(states[0].speed)
        )
        dis += sec * states[0].speed
        super().__init__(img, (states[0].pos, dis))
        if isinstance(note, Hold):
            self.scale_y = length / self.image.height
        action = cac.Hide()
        sec = 0
        speed = states[0].speed
        for i in states:
            if i.sec > note.tap_sec:
                break
            dis -= (i.sec - sec) * speed
            act = cac.MoveTo((i.pos, dis), i.sec - sec)
            if sec <= note.show_sec < i.sec:
                act |= cac.Delay(note.show_sec - sec) + cac.Show()
            action += act
            sec = i.sec
            speed = i.speed
        act = cac.MoveTo((states[-1].pos, length // 2 if isinstance(note, Hold) else 0), note.tap_sec - sec)
        if sec <= note.show_sec < note.tap_sec:
            act |= cac.Delay(note.show_sec - sec) + cac.Show()
        action += act
        action += cac.CallFunc(play_sound)

        if isinstance(note, Hold):
            class Qwq(cac.IntervalAction):
                def init(self, length, duration):
                    self._length = length
                    self.duration = duration

                def start(self):
                    self._cur = self.target.scale_y

                def update(self, t):
                    from random import randint
                    if randint(0, 6) < 3:
                        self.target.parent.add(NoteExplode((self.target.x, 0)))
                    self.target.scale_y = (self._cur - self._length) * (1 - t) + self._length

            nowlen = length // 2
            sec = note.tap_sec
            for i in states:
                if i.sec <= note.tap_sec:
                    continue
                nowlen -= (i.sec - sec) * i.speed
                action += cac.MoveTo((states[-1].pos, nowlen // 2), i.sec - sec) | \
                          Qwq(nowlen / self.image.height, i.sec - sec)
                sec = i.sec
            action += cac.MoveTo((states[-1].pos, 0), note.end_sec - sec) | \
                      Qwq(0, note.end_sec - sec)

        def explode(e: NoteSprite):
            e.kill()
            e.parent.add(NoteExplode((e.x, e.y)))
            score()

        action += cac.CallFuncS(explode)
        self.do(action)
import cocos
import cocos.actions as ac

if __name__ == '__main__':
    cocos.director.director.init(caption='Actions')

    layer = cocos.layer.Layer()
    sprite = cocos.sprite.Sprite('tank.png', position=(200, 200))
    sprite.do(ac.MoveTo((250, 300), 3))
    layer.add(sprite)

    scene = cocos.scene.Scene(layer)
    cocos.director.director.run(scene)
示例#17
0
 def move_to(self, x, y):
     self.do(ac.MoveTo((x, y), duration=self._movement_speed))
     print("Moving from: {0}".format(self.position))
     return self._movement_speed
示例#18
0
 def swim(self):
   self.do(actions.MoveTo((-100,self.position[1]),3) + actions.CallFunc(self.explode))
示例#19
0
 def fire(self,x,y):
   self.do(actions.MoveTo((x,y),0.5) | actions.ScaleTo(0.5,0.5) + actions.Delay(0.5) + actions.CallFunc(self.explode))
示例#20
0
 def paint(self, dt):
     act = actions.MoveTo((self.cord.real + left_offset, self.cord.imag + down_offset), dt)
     self.sprite.do(act)