From: Simon Cross Date: Sat, 10 Sep 2016 10:54:59 +0000 (+0200) Subject: Merge branch 'master' of ctpug.org.za:tabakrolletjie X-Git-Tag: tabakrolletjie-v1.0.0~127 X-Git-Url: https://git.ctpug.org.za/?p=tabakrolletjie.git;a=commitdiff_plain;h=cd254036f630c40baab130f5fab14e9d11bc286e;hp=-c Merge branch 'master' of ctpug.org.za:tabakrolletjie --- cd254036f630c40baab130f5fab14e9d11bc286e diff --combined tabakrolletjie/lights.py index 8b688f7,b2e0812..1eaba7c --- a/tabakrolletjie/lights.py +++ b/tabakrolletjie/lights.py @@@ -1,8 -1,6 +1,8 @@@ """ May it be a light for you in dark places, when all other lights go out. """ +import math + import pymunk import pymunk.pygame_util import pygame.display @@@ -14,7 -12,7 +14,7 @@@ from .constants import LIGHT_CATEGORY, from .rays import RayPolyManager from .utils import DetailedTimer from .loader import loader - from .transforms import Multiply + from .transforms import Multiply, MultiplyImage LIGHT_FILTER = pymunk.ShapeFilter( mask=pymunk.ShapeFilter.ALL_MASKS ^ ( @@@ -85,9 -83,6 +85,9 @@@ class LightManager(object) if light.on and light.ray_manager.reaches(shape.body.position) ] + def total_power_usage(self): + return sum(light.power_usage() for light in self._lights) + def render_light(self, surface): for light in self._lights: light.render_light(surface) @@@ -129,6 -124,7 +129,7 @@@ class BaseLight(object) self.body, self.FITTING_RADIUS, self.ray_manager.position) self.fitting.filter = FITTINGS_FILTER self._fitting_image = None + self._colour_mult_image = None @property def position(self): @@@ -205,10 -201,30 +206,30 @@@ def fitting_image(self): if self._fitting_image is None: - fitting_colour = COLOURS[self.colour] - self._fitting_image = loader.load_image( + fitting_colours = [COLOURS[c] for c in self.colour_cycle] + ncolour = len(fitting_colours) + if ncolour > 3: + print "Multicoloured light should not have more than 3 colours" + ncolour = 3 + + if ncolour == 1: + self._fitting_image = loader.load_image( "48", self.FITTING_IMG, - transform=Multiply(colour=fitting_colour)) + transform=Multiply(colour=fitting_colours[0])) + else: + if self._colour_mult_image is None: + self._colour_mult_image = pygame.surface.Surface((48, 48)) + + for i in range(ncolour): + sector = loader.load_image( + "48", "light_mask_%d_%d.png" % (ncolour, i + 1), + transform=Multiply(colour=fitting_colours[i])) + self._colour_mult_image.blit(sector, (0,0), None, 0) + + self._fitting_image = loader.load_image( + "48", self.FITTING_IMG, + transform=MultiplyImage(image=self._colour_mult_image)) + return self._fitting_image def invalidate_fitting_image(self): @@@ -218,16 -234,6 +239,16 @@@ rx, ry = self.ray_manager.pygame_position(surface) surface.blit(self.fitting_image(), (rx - 24, ry - 24), None, 0) + def power_usage(self): + if not self.on: + return 0.0 + area = math.pi * (self.ray_manager.max_radius ** 2) # radius + area = area * (self.ray_manager.spread / (2 * math.pi)) # spread + return 5 * area * self.intensity + + def base_damage(self): + return 5 * self.intensity + def toggle(self): self.colour_pos += 1 if self.colour_pos >= len(self.colour_cycle): @@@ -248,14 -254,6 +269,6 @@@ class Lamp(BaseLight) FITTING_IMG = "lamp.png" - class MultiColourLamp(BaseLight): - - FITTING_IMG = "lamp.png" - - def __init__(self, **kw): - super(MultiColourLamp, self).__init__(**kw) - - class PulsatingLamp(BaseLight): FITTING_IMG = "lamp.png"