Example #1
0
    def draw(self):
        cam = self.world.camera
        if not Actor.draw(self):
            return False
        # draw magic "ball"
        radius = 25
        x = cam.pl2sc_x(self.pos)
        y = cam.sc_h() - self.hover_height
        s = effects.get_circle((255, 255, 255, 64), radius, cam.graphics, blur=15)
        cam.graphics.blit(s, (x - radius, y - radius))

        # draw field effects
        for fx in self.particle_effects:
            fx.draw(cam.graphics)

        # if it's selected
        if self.selected:
            radius = 50
            s = effects.get_circle((255, 255, 255, 16), radius, cam.graphics)
            cam.graphics.blit(s, (x - radius, y - radius))
            # affects
            s = effects.get_circle((255, 255, 255, 64), 5, cam.graphics, 2)
            for caster in self.affects:
                acc, mult = caster.affect_particle(self).get()
                for i in xrange(5):
                    xdiff = acc * 55.0 / 10 / 5 * i
                    ydiff = mult * 55.0 / 10 / 5 * i
                    cam.graphics.blit(s, (x - 5 + xdiff, y - 5 - ydiff))
        return True
Example #2
0
 def debug_info(self):
     desc = Actor.debug_info(self)
     desc += "\nState: acc=%.1f mult=%.1f\n" % (self.accel, self.mult)
     desc += "Affecting:\n"
     for aff in self.affects:
         acc, mult = aff.affect_particle(self).get()
         desc += "%s: acc=%.2f, mult=%.2f\n" % (aff.actor, acc, mult)
     return desc
Example #3
0
    def update(self):
        Actor.update(self)

        # update fancy graphics
        # value = self.field.value(self.pos)
        value = self.mult / 10.0
        if len(self.particle_effects) == 1:
            self.particle_effects[0].update(value)
        else:
            if value > 0:
                self.particle_effects[0].update(value)
                self.particle_effects[1].update(0)
            else:
                self.particle_effects[0].update(0)
                self.particle_effects[1].update(abs(value))

        # each caster can effect the particle
        acc = 0.0
        mult = 0.0
        for caster in self.affects:
            affects = caster.affect_particle(self)
            acc += affects.acc
            mult += affects.mult
        # smooth changing of multiplier
        multdiff = mult - self.mult
        self.mult += self.timediff * multdiff * self.mult_speed
        # acceleration is immediate
        self.accel = acc * 3.0

        # if the power drops too low, terminate itself
        if abs(self.mult) < 0.1:
            if self.deadtimer:
                if self.deadtimer + 1.0 < self.world.get_time():
                    self.dead = True
                    self.destroy()
            else:
                self.deadtimer = self.world.get_time()
        else:
            self.deadtimer = False
Example #4
0
    def __init__(self, world, pos):
        Actor.__init__(self, world, pos)
        self.field = world.get_field(self.fieldtype)
        self.dev = self.base_dev
        self.mult = 0.0
        self.accel = 0.0
        self.deadtimer = False
        self.dead = False
        self.field.add_particle(self)

        # animation
        if len(self.effectors) == 1:
            fx = self.effectors[0](self)
            self.particle_effects = [fx]
        else:
            fxpos = self.effectors[0](self)
            fxneg = self.effectors[1](self)
            self.particle_effects = [fxpos, fxneg]

        # MagicCaster objects of actors who are influencing this particle
        self.affects = []
        # selected in game UI
        self.selected = False