예제 #1
0
파일: Firefly.py 프로젝트: dzz/kthuune
    def __init__(self,**kwargs):
        self.flash_color = [ 1.0,1.0,0.0,1.0 ]
        Object.__init__(self,**kwargs)
        self.light_type = Object.LightTypes.DYNAMIC_TEXTURE_OVERLAY
        self.light_texture = BGL.assets.get('NL-lights/texture/radial')
        self.texture = Firefly.texture
        self.buftarget = "additive"
        self.is_pixie = False
        self.light_color = [ 1.0,0.6,0.3,1.0 ]
        self.color = [ 1.0,0.8,0.2,1.0]
        self.light_radius = 15
        self.tick_type = Object.TickTypes.PURGING
        self.life = 0
        self.trigger_life = uniform( 30.0,60.0 )
        self.base_p = self.p

        
        self.size = [0.7+uniform(0.0,0.3),0.7+uniform(0.0,0.3)]
        self.visible = True
        self.offs = uniform(0.0,3.14)

        spd = uniform(0.5,0.9)
        d = uniform(-3.14,3.14)
        self.vx = cos(d)*spd
        self.vy = sin(d)*spd
예제 #2
0
파일: Bird.py 프로젝트: dzz/kthuune
    def __init__(self, **kwargs):
        Object.__init__(self, **kwargs)

        self.buftarget = "popup"
        self.tick_type = Object.TickTypes.PURGING

        #self.light_type = Object.LightTypes.DYNAMIC_TEXTURE_OVERLAY
        #self.light_texture = BGL.assets.get('NL-lights/texture/radial')
        #self.light_radius = 15
        self.lifespan = 150
        self.light_color = [1.0, 0.7, 0.0, 0.0]
        self.color = [1.0, 0.5, 0.5, 1.0]
        self.fr = 0

        sz = uniform(0.3, 0.5)
        self.size = [sz, sz]

        self.snapshot_fields = ['p']

        self.rad = uniform(-0.8, 0.8)
        self.vx = uniform(-1.0, 1.0)
        self.vy = uniform(-0.5, -1.5)

        if (self.vx > 0):
            self.size[0] *= -1

        self.delay = uniform(10.0, 90.0)
        self.visible = False
        self.z_index = 9000000
        self.rad = uniform(-0.2, 0.2)
예제 #3
0
    def __init__(self,**kwargs):
        Object.__init__(self,**kwargs)
        self.texture = BasicProjectile.textures["default"]
        if "texture" in kwargs:
            self.texture = BasicProjectile.textures[kwargs["texture"]]

        self.animation = None
        self.buftarget = "popup"
        self.tick_type = Object.TickTypes.PURGING
        self.light_type = Object.LightTypes.DYNAMIC_SHADOWCASTER
        self.light_radius = 5
        self.lifespan = 120
        self.light_color = [ 0.6,1.0,0.3,0.4 ]
        self.size = [ 0.5,0.5 ]
        self.snapshot_fields = [ 'p' ]
        if "override_spd" in kwargs:
            spd = self.override_spd    
        else:
            spd = 0.45 + uniform(0.001, 0.01)
        self.vx = cos( self.rad )*spd
        self.vy = sin( self.rad )*spd
        self.attack_str = 8
        self.player_touch_frames = 0
        self.vs_enemy = False
        self.fr = 0
        if "animation" in kwargs:
            self.animation = BasicProjectile.animations[kwargs["animation"]]
예제 #4
0
    def __init__(self, **kwargs):
        Object.__init__(self, **kwargs)

        self.texture = choice(SplatterParticle.texture)

        if "ptexture" in self.__dict__:
            self.texture = self.ptexture

        self.buftarget = "popup"
        self.tick_type = Object.TickTypes.PURGING

        #self.light_type = Object.LightTypes.DYNAMIC_TEXTURE_OVERLAY
        #self.light_texture = BGL.assets.get('NL-lights/texture/radial')
        #self.light_radius = 15
        self.lifespan = 90
        self.light_color = [1.0, 0.7, 0.0, 0.0]
        self.color = [1.0, 0.5, 0.5, 1.0]

        self.size = [3.8, 3.8]
        if "ptexture" in self.__dict__:
            self.size = [5.0, 5.0]

        self.snapshot_fields = ['p']

        spd = 0.3 + uniform(0.2, 0.8)
        self.vx = cos(self.rad) * spd
        self.vy = sin(self.rad) * spd
        self.rad = uniform(-3.14, 3.14)
예제 #5
0
파일: Terminals.py 프로젝트: dzz/kthuune
 def __init__(self, **kwargs):
     Object.__init__(self, **kwargs)
     self.p[1] += 1.5
     self.size = [3.0, 3.0]
     self.buftarget = "floor"
     self.texture = FTermStand.texture
     self.tick_type = Object.TickTypes.STATIC
     self.physics = {"radius": 1.2, "mass": 900, "friction": 0.3}
예제 #6
0
파일: Terminals.py 프로젝트: dzz/kthuune
 def __init__(self, **kwargs):
     Object.__init__(self, **kwargs)
     self.buftarget = "floor"
     self.z_index = 2
     self.light_type = Object.LightTypes.DYNAMIC_SHADOWCASTER
     self.light_color = [0.8, 0.0, 1.0, 1.0]
     self.light_radius = 25
     self.tick_type = Object.TickTypes.TICK_FOREVER
     self.size = [2.0, 2.0]
     self.fr = 0
예제 #7
0
파일: AimingBeam.py 프로젝트: dzz/kthuune
 def __init__(self, **kwargs):
     Object.__init__(self, **kwargs)
     self.texture = BGL.assets.get("KT-player/texture/beam")
     self.tick_type = Object.TickTypes.TICK_FOREVER
     self.size = [30.0, 0.1]
     self.light_color = [0.5, 0.5, 0.5, 0.5]
     self.light_type = Object.LightTypes.NONE
     self.visible = False
     self.buftarget = "popup"
     self.fired = False
     self.aiming = False
예제 #8
0
파일: AimingBeam.py 프로젝트: dzz/kthuune
 def __init__(self, **kwargs):
     Object.__init__(self, **kwargs)
     self.texture = BGL.assets.get("KT-player/texture/beam")
     self.tick_type = Object.TickTypes.TICK_FOREVER
     self.size = [30.0, 10.0]
     self.light_color = [0.2, 0.2, 0.2, 1.0]
     self.light_type = Object.LightTypes.DYNAMIC_TEXTURE_OVERLAY
     self.visible = False
     self.buftarget = "popup"
     self.fired = False
     self.aiming = False
예제 #9
0
파일: AimingBeam.py 프로젝트: dzz/kthuune
    def __init__(self, **kwargs):
        Object.__init__(self, **kwargs)
        self.texture = RangedMagic.arrow_texture
        self.buftarget = "popup"
        self.tick_type = Object.TickTypes.PURGING
        self.light_type = Object.LightTypes.DYNAMIC_SHADOWCASTER
        self.light_radius = 5
        self.lifespan = 120
        self.light_color = [0.0, 0.0, 1.0, 1.0]

        self.vx = cos(self.rad) * 2
        self.vy = sin(self.rad) * 2
예제 #10
0
파일: TreeRoots.py 프로젝트: dzz/kthuune
 def __init__(self, **kwargs):
     overrides = {
         "num": 0,
         "texture": BGL.assets.get("KT-forest/texture/treeroots"),
         'tick_type': Object.TickTypes.TICK_FOREVER,
         'size': [5.0, 5.0],
         'rad': uniform(-3.14, 3.14),
         'z_index': -121,
         'buftarget': 'popup'
     }
     overrides.update(kwargs)
     Object.__init__(self, **overrides)
     self.t = 0
     self.base_size = [self.size[0], self.size[1]]
     self.draw_color = [0.8, uniform(0.0, 1.0), 0.8, uniform(0.6, 0.7)]
예제 #11
0
    def get_shader_params(self):
        bp = Object.get_shader_params(self)

        if self.hitFr > 0:
            bp['translation_local'][0] += uniform(-0.2, 0.2)
            bp['filter_color'] = [10.0, 10.0, 10.0, 1.0]
        return bp
예제 #12
0
파일: ShipExterior.py 프로젝트: dzz/kthuune
 def get_shader_params(self):
     params = Object.get_shader_params(self)
     tw = params["translation_world"]
     tw[0] = tw[0] * self.parallax
     tw[1] = tw[1] * self.parallax
     params["translation_world"] = tw
     return params
예제 #13
0
 def get_guppy_batch(self):
     batch = [Object.get_shader_params(self), self.get_shader_params()]
     r = self.physics["radius"]
     batch[0]["scale_local"] = [r * 1.5, r * 1.5]
     batch[0]["texBuffer"] = BGL.assets.get(
         "KT-forest/texture/alpha_shadow")
     return batch
예제 #14
0
파일: Sword.py 프로젝트: dzz/kthuune
 def get_shader_params(self):
     bp = Object.get_shader_params(self)
     bp["translation_local"][1] = 0.0
     bp["translation_local"][0] += 0.1*sin(self.bob_index)
     bp["scale_local"][1] *= -1.0
     #bp["translation_local"][1] -= 0.0
     bp["filter_color"] = [ 0.0,0.0,0.0,0.0 ]
     return bp
예제 #15
0
    def __init__(self, **kwargs):
        Object.__init__(self, **kwargs)
        self.texture = HealthBubble.texture
        self.buftarget = "popup"
        self.tick_type = Object.TickTypes.PURGING
        self.light_type = Object.LightTypes.NONE

        if (uniform(0.0, 1.0) > 0.8):
            self.light_type = Object.LightTypes.DYNAMIC_SHADOWCASTER
        self.light_radius = 5
        self.lifespan = 1390
        self.light_color = [1.0, 0.0, 0.0, 0.0]
        self.color = [1.0, 0.0, 0.0, 1.0]

        self.size = [2.8, 2.8]
        self.snapshot_fields = ['p']

        self.vx = uniform(-0.05, 0.05)
        self.vy = uniform(-0.1, -0.2)
예제 #16
0
파일: TreeShadow.py 프로젝트: dzz/kthuune
 def __init__(self, **kwargs):
     self.scale = 2
     tt = kwargs['TreeTop']
     overrides = {
         "num": 0,
         "texture": choice(GeneratorOptions.TreeShadowTextures),
         'tick_type': Object.TickTypes.TICK_FOREVER,
         'size': [self.scale * tt.size[0], self.scale * tt.size[1]],
         'rad': tt.rad,
         'z_index': 0,
         'tt': tt,
         'buftarget': 'shadow'
     }
     overrides.update(kwargs)
     Object.__init__(self, **overrides)
     self.t = 0
     self.base_size = [self.size[0], self.size[1]]
     self.draw_color = [0.8, uniform(0.0, 1.0), 0.8, 0.3]
     self.wind_speed = tt.wind_speed
     self.wind_mod = tt.wind_mod
예제 #17
0
    def __init__(self, **kwargs):
        Object.__init__(self, **kwargs)
        self.rad = uniform(-3.14, 3.14)
        self.texture = choice(CrystalChunk.textures)
        self.buftarget = "popup"
        self.tick_type = Object.TickTypes.PURGING
        self.light_type = Object.LightTypes.DYNAMIC_SHADOWCASTER
        self.light_radius = 15
        self.lifespan = 90
        self.light_color = [1.0, 0.7, 0.0, 0.0]
        self.color = [1.0, 1.0, 1.0, 1.0]

        sz = uniform(2.0, 4.0)
        self.size = [sz, sz]
        self.snapshot_fields = ['p']

        spd = 0.3 + uniform(0.2, 0.8)
        self.vx = cos(self.rad) * spd
        self.vy = sin(self.rad) * spd
        self.rad = uniform(-3.14, 3.14)
예제 #18
0
파일: SpeechBubble.py 프로젝트: dzz/kthuune
    def get_shader_params(self):
        base_params = Object.get_shader_params(self)
        dx = self.owner.p[0] - self.floor.player.p[0]
        dy = self.owner.p[1] - self.floor.player.p[1]

        if self.owner.tooltip_layout==0:
            base_params['translation_world'][0] -= (self.owner.size[0]*1.2) * (1.0+(dx/30.))
            base_params['translation_world'][1] -= (self.owner.size[1]*1.2) * (1.0+(dy/30.))


        return base_params
예제 #19
0
파일: KPlayer.py 프로젝트: dzz/kthuune
 def get_guppy_batch(self):
     return [self.get_shader_params()]
     batch = [Object.get_shader_params(self), self.get_shader_params()]
     r = self.physics["radius"]
     #batch[0]["scale_local"] = [ r*2,r*2 ]
     #batch[0]["texBuffer"]=BGL.assets.get("KT-forest/texture/alpha_shadow")
     batch[0]["scale_local"] = [r, r]
     batch[0]["texBuffer"] = BGL.assets.get(
         "KT-forest/texture/registration2")
     batch[1]["translation_local"][1] -= 0.0
     return batch
예제 #20
0
    def __init__(self, **kwargs):

        tex_options = GeneratorOptions.TreeTopTextures

        overrides = {
            "num": 0,
            "texture": choice(tex_options),
            'tick_type': Object.TickTypes.TICK_FOREVER,
            'size': [5.0, 5.0],
            'rad': uniform(-3.14, 3.14),
            'parallax': 1.2,
            'z_index': 100,
            'wind_speed': uniform(0.1, 0.3),
            'wind_mod': uniform(1.1, 1.2),
            'buftarget': 'canopy'
        }

        overrides.update(kwargs)
        Object.__init__(self, **overrides)
        self.t = 0
        self.base_size = [self.size[0], self.size[1]]
        self.draw_color = [0.9, uniform(0.8, 1.0), 0.9, uniform(0.6, 0.9)]
        self.last_a = self.draw_color[3]
예제 #21
0
    def get_shader_params(self):
        params = Object.get_shader_params(self)
        tw = params["translation_world"]
        tw[0] = tw[0] * self.parallax
        tw[1] = tw[1] * self.parallax
        params["translation_world"] = tw
        params["filter_color"] = list(self.draw_color)

        dx = self.p[0] - (self.floor.camera.p[0] +
                          (self.floor.player.v[0] * 3))
        dy = self.p[1] - (self.floor.camera.p[1] +
                          (self.floor.player.v[1] * 3))
        md = (dx * dx) + (dy * dy)
        impulse_a = self.draw_color[3]
        if (md < 250):
            impulse_a = 0.1

        self.last_a = (self.last_a * 0.98) + (impulse_a * 0.02)
        params["filter_color"][3] = self.last_a

        return params
예제 #22
0
파일: DeadK.py 프로젝트: dzz/kthuune
 def get_shader_params(self):
     sp = Object.get_shader_params(self)
     return sp
예제 #23
0
 def get_shader_params(self):
     sp = Object.get_shader_params(self)
     sp["translation_local"][1] += ((sin(self.fridx * 0.01) * 0.05)) + -0.8
     return sp
예제 #24
0
파일: TreeRoots.py 프로젝트: dzz/kthuune
 def get_shader_params(self):
     params = Object.get_shader_params(self)
     tw = params["translation_world"]
     params["translation_world"] = tw
     params["filter_color"] = self.draw_color
     return params
예제 #25
0
파일: SpikeyWave.py 프로젝트: dzz/kthuune
 def get_shader_params(self):
     sp = Object.get_shader_params(self)
     sp["filter_color"] = [1.0, 1.0, 1.0, float(self.cooldown) / 80.]
     return sp
예제 #26
0
파일: KPlayer.py 프로젝트: dzz/kthuune
    def tick(self):
        Cooldown.tick(self)
        self.size = [6.7, 6.7]
        if (self.snap_animation_buffer > 0):
            self.size = [2.2, 2.2]

        self.run_animation_subtick = self.run_animation_subtick + 1

        if (self.run_animation_subtick == 16):
            self.run_animation_subtick = 0
            self.run_animation_alt = 0

        if (self.in_editor):
            self.title_card.abort()

        if not self.beat_level and self.floor.genocide_enabled:  #set in game
            if not self.suspend_time_penalty:
                if not self.title_card.displaying():
                    if not self.floor.camera.cinema_target:
                        self.life_timer -= 1
            else:
                self.suspend_time_penalty = False

            if (self.life_timer < 0):
                self.hp = -1

        self.disp_life_timer = floor(self.life_timer / 60)
        if (self.disp_life_timer < 0):
            self.disp_life_timer = "!TIMES UP!"
            if not self.violentally_executed_self:

                if choice([True, False, False]):
                    KSounds.play(KSounds.basic_hit)
                    KSounds.play(KSounds.player_hurt)
                    for x in range(0, 2):
                        self.floor.create_object(
                            SplatterParticle(p=[
                                self.floor.player.p[0], self.floor.player.p[1]
                            ],
                                             rad=uniform(-3.14, 3.14)))
                    if self.life_timer < -90:
                        self.violentally_executed_self = True

        self.title_card.tick()

        if (self.title_card.displaying()):
            self.texture = self.determine_texture()
            self.physics_suspended = True
            self.vx = 0
            self.vy = 0
            self.v = [0.0, 0.0]
            if not self.in_editor:
                return True

        self.telekineFlash *= 0.95
        self.potionFlash *= 0.95

        teleportRecharge = 0.09
        if (self.teleportAmt < 100.0):
            self.teleportAmt += teleportRecharge

        if self.floor.camera.cinema_target:
            self.physics_suspended = True
            self.vx = 0
            self.vy = 0
            self.v = [0.0, 0.0]
            return True
        self.physics_suspended = False

        if (self.flash_color[3] > 0.1):
            self.flash_color[3] *= 0.95
        else:
            self.flash_color[3] *= 0.0

        if (self.active_terminal):
            if (self.terminal_size < 1.0):
                self.terminal_size = (self.terminal_size * 0.9) + 0.1
                if self.terminal_size > 0.99:
                    self.terminal_size = 1.0
        else:
            if (self.terminal_size > 0):
                self.terminal_size = (self.terminal_size * 0.78)
                if (self.terminal_size < 0.01):
                    self.terminal_size = 0.0

        self.sword_swing -= 1
        if (self.run_stamina < 0):
            self.run_stamina = 0

        if self.get_camera().cinema_target is not None:
            return

        if (self.ability_timeout > 0):
            self.ability_timeout -= 1
            self.handle_ability()
            return True

        self.hittable_hint_real = (self.hittable_hint_real *
                                   0.99) + (self.hittable_hint_impulse * 0.01)
        self.hittable_hint_impulse *= 0.98
        if (self.LEFT_PRESSED):
            self.sel_invslot -= 1
            if (self.sel_invslot < 0):
                self.sel_invslot = self.max_invslots - 1
        if (self.RIGHT_PRESSED):
            self.sel_invslot += 1
            if (self.sel_invslot == self.max_invslots):
                self.sel_invslot = 0
        PlayerInvSlot.tick()

        self.dm_msg_cooldown += 1
        if self.dm_msg_cooldown > 300:
            self.deq_dm_message()
            self.dm_msg_cooldown = 0

        self.gun.tick()

        #player tick
        if self.got_time > 0:
            self.got_time -= 1
        self.subtick = (self.subtick + 1) % 60

        #if(self.run_stamina<=1.0):
        #    self.add_dm_message("You over exerted yourself")

        self.invuln_frames -= 1
        if (self.shield_frames > 0):
            self.shield_frames -= 1
        KPlayer.BirdmanTick = KPlayer.BirdmanTick + 1

        self.snap_animation_buffer -= 1
        if (self.snap_animation_buffer > 0):
            self.display_p[0] = (self.display_p[0] * 0.87) + (self.p[0] * 0.13)
            self.display_p[1] = (self.display_p[1] * 0.87) + (self.p[1] * 0.13)

        if (self.combo_reset_cooldown > 0):
            self.combo_reset_cooldown = self.combo_reset_cooldown - 1
        else:
            self.combo_count = 0
            self.link_count = 0
            self.last_link = None

        self.critical_hit_display_counter = self.critical_hit_display_counter - 1
        self.snap_cooldown = self.snap_cooldown - 1
        self.hud_message_timeout = self.hud_message_timeout - 1
        self.stimer = self.stimer + 1
        self.cardtick = self.cardtick + 0.01
        self.heartcard.tick()
        self.swordcard.tick()
        self.wandcard.tick()
        self.telekinecard.tick()
        self.potioncard.tick()
        self.guncard.tick()

        self.pumped_dashcombo = False
        if (self.hp < 0):
            #self.light_type = Object.LightTypes.DYNAMIC_SHADOWCASTER
            #self.light_color = [ 1.0,0.0,0.0,1.0]
            #self.light_radius = 100
            self.texture = BGL.assets.get('KT-player/texture/skeleton')
            self.size = [2.0, 2.0]
            self.rad = atan2(self.p[0] - self.snapshot['p'][0],
                             self.p[1] - self.snapshot['p'][1])
            return True
        else:
            pass
            #self.light_color = [ 1.0,0.8,0.8,1.0 ]
            #self.light_radius = 15
        pad = self.controllers.get_virtualized_pad(self.num)
        self.map_controller_state(pad)
        used_term = self.route_terminal_input()
        if used_term:
            print("USED TERMINAL")
            self.A_PRESSED = False
            self.B_PRESSED = False
            self.UP_PRESSED = False
            self.DOWN_PRESSED = False
            self.LEFT_PRESSED = False
            self.RIGHT_PRESSED = False
        if self.A_PRESSED:
            if Abilities.Sword:
                if self.slash.slash():
                    self.run_animation_subtick = 0
                    self.run_animation_alt = 1
            #self.add_dm_message("You swung your sword")
            #print("a pressed")
            #self.state = KPlayer.STATE_FIRING

        self.dch_cooldown -= 1
        if self.snap_cooldown < 0:
            #if (self.X_PRESSED and self.link_count>0) or ( (self.sword.state == Sword.STATE_CHARGING) and (self.sword.stimer == 10)):
            if (self.X_PRESSED) or (
                (self.sword.state == Sword.STATE_CHARGING) and
                (self.sword.stimer
                 == 10)) or (self.sword.state == Sword.STATE_DISCHARGING
                             and self.dch_cooldown == 0):
                self.dch_cooldown = 17
                self.attempt_snap_attack()
                self.snap_cooldown = 4

        if (abs(pad.left_stick[0]) > 0.003) or (abs(pad.left_stick[1]) >
                                                0.003):
            self.walk_tick = self.walk_tick + 1
            if (self.walk_tick % 100 == 1):
                KSounds.play(choice([KSounds.walk1, KSounds.walk2]))
            if (self.walk_tick > 400):
                self.walk_tick = 0
        else:
            self.walk_tick = 0

        if (self.state == KPlayer.STATE_STUNNED):
            self.v[0] = self.v[0] * 0.4
            self.v[1] = self.v[1] * 0.4

            #if(self.attack_object):
            #    self.v[0] = self.v[0] + (self.attack_object.v[0]*4)
            #    self.v[1] = self.v[1] + (self.attack_object.v[1]*4)

            if self.stimer > 15:
                self.attack_object = None
                self.set_state(KPlayer.STATE_DEFAULT)

        if (self.state == KPlayer.STATE_DODGING):
            self.invisible_frames = 19  #also makes invuln
            for x in range(0, 5):
                spltr = Bird(p=[
                    self.p[0] + uniform(0.0, self.size[0]), self.p[1] +
                    uniform(-4.0, 4.0)
                ])
                spltr.color = [0.0, 0.0, 0.0, 1.0]
                spltr.light_color = [0.0, 1.0, 0.0, 1.0]
                spltr.size[0] *= uniform(1.0, 1.5)
                self.floor.create_object(spltr)

            #self.visible = False
            #self.invuln_frames = 1
            self.v[0] += self.dv[0] * 1.8
            self.v[1] += self.dv[1] * 1.8

            self.dv[0] *= 0.6
            self.dv[1] *= 0.6

            if (self.sword.state is not Sword.STATE_IDLE):
                self.set_state(KPlayer.STATE_DEFAULT)
            if (self.stimer > 6):
                self.visible = True
                self.set_state(KPlayer.STATE_DEFAULT)

        if (self.state == KPlayer.STATE_FIRING):
            self.fire_timer = self.fire_timer + 1
            self.v[0] = self.v[0] * 0.4
            self.v[1] = self.v[1] * 0.4
            delta = [pad.left_stick[0], pad.left_stick[1]]
            self.v[0] = self.v[0] + (delta[0] * 0.2)
            self.v[1] = self.v[1] + (delta[1] * 0.2)
            self.rad = atan2(self.v[1], self.v[0])

            if (self.fire_timer > 8):
                self.lazer_beam.visible = True
                self.lazer_beam.size[1] *= 1.15

                #if(self.fire_timer==20):
                #    self.attempt_snap_attack(False)
            if (self.fire_timer > 40):
                self.lazer_beam.size[1] = 0.1
                self.lazer_beam.visible = False
                self.fire_timer = 0
                self.state = KPlayer.STATE_DEFAULT

        if (self.state == KPlayer.STATE_DEFAULT):
            if not pad.button_down(BGL.gamepads.buttons.B):
                self.can_backstep = True

            if (Abilities.Dash and pad.button_down(BGL.gamepads.buttons.B)
                    and self.can_backstep
                    and self.sword.state == Sword.STATE_IDLE):

                if (self.stimer > 30):
                    if (self.run_stamina > 5):
                        self.run_stamina -= 5
                        delta = [pad.left_stick[0], pad.left_stick[1]]
                        self.dv = [
                            delta[0] * self.speed, delta[1] * self.speed
                        ]
                        self.can_backstep = False
                        self.set_state(KPlayer.STATE_DODGING)
                        #self.attempt_snap_attack()
                        self.combo_reset_cooldown = 60 * KPlayer.ComboSecs
                        if (self.link_count == 0):
                            self.link_count = 1

                        self.flash_color = [1.0, 1.0, 1.0, 1.0]
                        KSounds.play(KSounds.dash)

            calc_speed = self.speed

            if (self.run_stamina < 1.0):
                self.flash_color = [1.0, 0.6, 0.6, 1.0]
                calc_speed *= 0.2
            if (self.RB_DOWN and Abilities.Dash):
                if (self.run_stamina > 0.0):
                    self.running = True
                    self.stamina_recharge_buffer = 10.0
                    self.run_stamina -= 0.45
                    rs1 = self.run_stamina / 75.0
                    rs2 = rs1 * rs1
                    mod1 = 0.8 * rs1
                    mod2 = 1.1 * rs2
                    calc_speed *= 1.0 + (mod1 + mod2)
                    if (self.slash.visible):
                        mod1 *= 1.5
            else:
                self.stamina_recharge_buffer -= 0.2
                if (self.stamina_recharge_buffer < 0.0):
                    if (self.run_stamina < 100.0):
                        self.run_stamina += 1.0

            self.dash_flash = False
            if (self.sword.state == Sword.STATE_CHARGING):
                calc_speed = self.speed * 0.5

            if (self.sword.state == Sword.STATE_DISCHARGING):
                self.dash_flash = True
                calc_speed = self.speed * 4.0

            if (self.sword.state == Sword.STATE_ATTACK_PENDING):
                self.dash_flash = True
                calc_speed = self.speed * 0.001

            #if(self.aiming_beam.aiming):
            #    calc_speed = calc_speed * 0.5

            self.filtered_speed = (self.filtered_speed * 0.8) + (calc_speed *
                                                                 0.2)

            #if(self.state == KPlayer.STATE_FIRING):
            #    self.v[0] = self.v[0] * 0.01
            #    self.v[1] = self.v[1] * 0.01

            calc_speed = self.filtered_speed
            Object.tick(self)
            pad = self.controllers.get_virtualized_pad(self.num)

            #delta = [0.0,0.0]
            #self.v[0] = self.v[0]*0.8+delta[0]*0.2
            #self.v[1] = self.v[1]*0.8+delta[1]*0.2
            delta = [
                pad.left_stick[0] * calc_speed, pad.left_stick[1] * calc_speed
            ]
            self.v[0] = self.v[0] * 0.8 + delta[0] * 0.2
            self.v[1] = self.v[1] * 0.8 + delta[1] * 0.2

            self.rad = atan2(self.v[1], self.v[0])
            self.texture = self.determine_texture()

            if (self.snap_cooldown > 0):
                self.v[0] = 0
                self.v[1] = 0

            if (self.snap_attack_frozen):
                self.v[0] = 0
                self.v[1] = 0

            if (self.attack_physics_timer > 0 and
                    self.attack_object):  #the and here is a hack around a bug

                print("TRYING TO APPLY ATTACK REBOUND")
                self.attack_physics_timer = self.attack_physics_timer - 1

                print(self.attack_object.v)
                self.v[0] = (self.v[0] * 0.2) + (self.attack_object.vx * 2)
                self.v[1] = (self.v[1] * 0.2) + (self.attack_object.vy * 2)
            else:
                self.attack_object = None

            if (self.hurt_flash_timer > 0):
                self.color = [1.0, 0.0, 0.0, 1.0]
                self.hurt_flash_timer -= 1
            elif (self.link_count > 0):
                self.color = [1.0, 1.0, 0.7, 1.0]
            else:
                self.color = [1.0, 1.0, 1.0, 1.0]

            if (self.slash.visible):
                self.v[0] *= 1.05
                self.v[1] *= 1.05

            if (abs(self.v[0]) + abs(self.v[1]) > 0.5):
                if uniform(0.0, 1.0) > 0.98:
                    self.floor.create_object(
                        Dust(p=[self.p[0], self.p[1] + 0.8]))

            Object.tick(self)
            if self.invisible_frames > 0:
                self.invisible_frames -= 1
                self.invuln_frames = 2
                self.visible = False
            else:
                self.visible = True
예제 #27
0
파일: Sword.py 프로젝트: dzz/kthuune
 def __init__(self,**kwargs):
     Object.__init__(self,**kwargs)