Пример #1
0
    def morph_towards(self, other, progress, forwards=True):

        if forwards:
            # Move in the positive direction
            if self.h < other.h:
                # Lovely, just move along
                new_h = tween.linear(self.h, other.h, progress)
            else:
                new_h = tween.linear(self.h - 1.0, other.h, progress)
                if new_h < 0.0:
                    new_h += 1.0

        # else:
            #

        return Color( (new_h, tween.linear(self.s, other.s, progress), tween.linear(self.v, other.v, progress) ) )
Пример #2
0
    def morph_towards(self, other, progress, forwards=True):

        if forwards:
            # Move in the positive direction
            if self.h < other.h:
                # Lovely, just move along
                new_h = tween.linear(self.h, other.h, progress)
            else:
                new_h = tween.linear(self.h - 1.0, other.h, progress)
                if new_h < 0.0:
                    new_h += 1.0

        # else:
            #

        return Color( (new_h, tween.linear(self.s, other.s, progress), tween.linear(self.v, other.v, progress) ) )
Пример #3
0
    def tween_rgb_at(self, progress, output):
        """
        Go through all cells that we have in next and morph them
        towards their next color at the given progress value
        """
        for cell_id in self.next.keys():
            next_color = self.next[cell_id]

            if cell_id in self.last:
                last_color = self.last[cell_id]
            else:
                last_color = color.BLACK

            r = tween.linear(last_color.r, next_color.r, progress)
            g = tween.linear(last_color.g, next_color.g, progress)
            b = tween.linear(last_color.b, next_color.b, progress)
            cell_color = color.RGB(r, g, b)
            output(cell_id, cell_color)
Пример #4
0
    def update_at_progress(self, progress, new_loop, loop_instance):

        if new_loop:
            # The start of a loop has red at the left shoulder and
            # blue at the right flank
            if self.cm.modifiers[0]:
                self.redColor = random_color()
                self.redPos = self.redColor.pos

                self.blueColor = self.redColor.copy()
                self.blueColor.h = self.blueColor.h + 0.3
                self.bluePos = self.blueColor.pos
            else:
                if self.cm.modifiers[1]:
                    # Use the chosen colors
                    self.redColor = self.cm.chosen_colors[0]
                    self.blueColor = self.cm.chosen_colors[1]
                    self.redPos = self.cm.chosen_colors_pos[0]
                    self.bluePos = self.cm.chosen_colors_pos[1]
                else:
                    # Just be red and blue cops
                    self.redColor = color.RGB(255,30,30)
                    self.blueColor = color.RGB(30,30,255);

                    self.redPos = eyes.EYE_COLOR_RED
                    self.bluePos = eyes.EYE_COLOR_BLUE

        # Panels
        # clear tham all
        if not self.cm.modifiers[2]:
            self.ss.both.clear()


        # mod 3 = reverse
        if not self.cm.modifiers[3]:
            if progress < 0.25: 
                # Red moving down right flank
                redPan = tween.linear(FLANK_FORWARD_R, FLANK_REAR_R, (progress / 0.25))
            elif progress < 0.5:
                redPan = tween.linear(FLANK_REAR_R, FLANK_REAR_L, (progress - 0.25) / 0.25)
            elif progress < 0.75:
                redPan = tween.linear(FLANK_REAR_L, FLANK_FORWARD_L, (progress - 0.50) / 0.25)
            else:
                redPan = tween.linear(FLANK_FORWARD_L, FLANK_FORWARD_R_WRAP, (progress - 0.75) / 0.25)
        else:
            if progress < 0.25: 
                # Red moving from rear R flank to front
                p = progress / 0.25
                redPan = tween.linear(FLANK_REAR_R, FLANK_FORWARD_R, p)
            elif progress < 0.5:
                p = (progress - 0.25) / 0.25
                redPan = tween.linear(FLANK_FORWARD_R_WRAP, FLANK_FORWARD_L, p)
            elif progress < 0.75:
                p = (progress - 0.50) / 0.25
                redPan = tween.linear(FLANK_FORWARD_L, FLANK_REAR_L, p)
            else:
                p = (progress - 0.75) / 0.25
                redPan = tween.linear(FLANK_REAR_L, FLANK_REAR_R, p)


        if redPan < 0:
            redPan += (2*math.pi)
        elif redPan > (2*math.pi):
            redPan -= (2*math.pi)

        bluePan = redPan + math.pi

        if bluePan < 0:
            bluePan += (2*math.pi)
        elif bluePan > (2*math.pi):
            bluePan -= (2*math.pi)


        FOV_10.map_value(self.ss, redPan, 0, self.redColor)
        FOV_10.map_value(self.ss, bluePan, 0, self.blueColor)


        # Eyes
        self.pe.pan = -90
        self.be.pan = -90;

        # mod 3 = reverse
        if not self.cm.modifiers[3]:
            if progress < 0.25: 
                # Red moving down right flank
                # Eyes off, getting ready for blue to hit the left shoulder
                self.pe.effect = self.closed
                self.be.effect = self.closed
                self.pe.tilt = self.pe_tilt_start
                self.be.tilt = self.be_tilt_start
                self.pe.color_pos = self.bluePos
                self.be.color_pos = self.bluePos

                self.pe.dimmer = 0.0
            elif progress < 0.5:
                # Tween from left to right
                self.pe.effect = None
                self.be.effect = None

                self.pe.tilt = tween.linear(self.pe_tilt_start, self.pe_tilt_end, (progress-0.25)/0.25)
                self.be.tilt = tween.linear(self.be_tilt_start, self.be_tilt_end, (progress-0.25)/0.25)

                self.pe.dimmer = 1.0
            elif progress < 0.75:
                # Reset eyes getting ready for red to hit
                self.pe.effect = self.closed
                self.be.effect = self.closed
                self.pe.tilt = self.pe_tilt_start
                self.be.tilt = self.be_tilt_start
                self.pe.color_pos = self.redPos
                self.be.color_pos = self.redPos

                self.pe.dimmer = 0.0
            else:
                # Tween from left to right
                self.pe.effect = None
                self.be.effect = None

                self.pe.tilt = tween.linear(self.pe_tilt_start, self.pe_tilt_end, (progress-0.75)/0.25)
                self.be.tilt = tween.linear(self.be_tilt_start, self.be_tilt_end, (progress-0.75)/0.25)

                self.pe.dimmer = 1.0

        else:
            # Reverse direction
            if progress < 0.25: 
                # Red moving from back of R flank to front
                # Reset eyes getting ready for red to hit
                self.pe.effect = self.closed
                self.be.effect = self.closed
                self.pe.tilt = self.pe_tilt_end
                self.be.tilt = self.be_tilt_end
                self.pe.color_pos = self.redPos
                self.be.color_pos = self.redPos

                self.pe.dimmer = 0.0


            elif progress < 0.5:
                # Red moving across breast from R to L 
                self.pe.effect = None
                self.be.effect = None

                p = (progress-0.25)/0.25
                self.pe.tilt = tween.linear(self.pe_tilt_end, self.pe_tilt_start, p)
                self.be.tilt = tween.linear(self.be_tilt_end, self.be_tilt_start, p)

                self.pe.dimmer = 1.0

            elif progress < 0.75:
                # Eyes off, getting ready for blue to hit the right shoulder
                self.pe.effect = self.closed
                self.be.effect = self.closed
                self.pe.tilt = self.pe_tilt_end
                self.be.tilt = self.be_tilt_end
                self.pe.color_pos = self.bluePos
                self.be.color_pos = self.bluePos

                self.pe.dimmer = 0.0

            else:
                # Tween from right to left using blue
                self.pe.effect = None
                self.be.effect = None

                p = (progress-0.75)/0.25
                self.pe.tilt = tween.linear(self.pe_tilt_end, self.pe_tilt_start, p)
                self.be.tilt = tween.linear(self.be_tilt_end, self.be_tilt_start, p)

                self.pe.dimmer = 1.0