X-Git-Url: https://git.ctpug.org.za/?a=blobdiff_plain;f=tabakrolletjie%2Flights.py;h=44c93871c805b34b5fc70761e4be500f3b461957;hb=e2d9bd69b3e6e21c432be2321e3ce81f11b0e987;hp=318aefca3ca2579a4c36cc0b373944c2a91b455a;hpb=50636741a3bce11440f998c35148920e296cd7da;p=tabakrolletjie.git diff --git a/tabakrolletjie/lights.py b/tabakrolletjie/lights.py index 318aefc..44c9387 100644 --- a/tabakrolletjie/lights.py +++ b/tabakrolletjie/lights.py @@ -137,6 +137,12 @@ def light_fitting_by_type(light_type): return BaseLight.find_cls(light_type).FITTING_IMG +def seed_cost(light_config, num_colours): + """Calculate a seed cost for a light from its configuration. """ + cls = BaseLight.find_cls(light_config["type"]) + return cls.BASE_COST + int(cls.find_cost(light_config) / 10) + num_colours + + class BaseLight(object): """ Common light functionality. """ @@ -144,6 +150,7 @@ class BaseLight(object): RAY_MANAGER = RayPolyManager FITTING_IMG = None FITTING_RADIUS = 24.0 + BASE_COST = 0 # cached surfaces _surface_cache = {} @@ -204,6 +211,11 @@ class BaseLight(object): if c.__name__.lower() == light_type] return light_class + @classmethod + def find_cost(cls, config): + cost = 5 * config["intensity"] + return cost + def add(self, space): if self.body.space is not None: space.remove(self.body, *self.body.shapes) @@ -313,6 +325,7 @@ class BaseLight(object): class Lamp(BaseLight): FITTING_IMG = "lamp.png" + BASE_COST = 1 class PulsatingLamp(BaseLight): @@ -322,6 +335,7 @@ class PulsatingLamp(BaseLight): DEFAULT_PULSE_VELOCITY = 2 DEFAULT_INTENSITY_RANGE = (0.0, 0.9) DEFAULT_INTENSITY_VELOCITY = 0.1 + BASE_COST = 3 def __init__(self, **kw): self.pulse_range = kw.pop("pulse_range", self.DEFAULT_PULSE_RANGE) @@ -357,10 +371,22 @@ class PulsatingLamp(BaseLight): self.intensity, self.intensity_velocity = self._update_range( self.intensity, self.intensity_velocity, self.intensity_range) + @classmethod + def find_cost(cls, config): + cost = super(PulsatingLamp, cls).find_cost(config) + cost += config.get("pulse_velocity", cls.DEFAULT_PULSE_VELOCITY) + pr = config.get("pulse_range", cls.DEFAULT_PULSE_RANGE) + cost += (pr[1] - pr[0]) / 10 + cost += 5 * config.get("intensity_velocity", cls.DEFAULT_INTENSITY_VELOCITY) + ir = config.get("intensity_range", cls.DEFAULT_INTENSITY_RANGE) + cost += 5 * (ir[1] - ir[0]) + return cost + class SpotLight(BaseLight): FITTING_IMG = "spotlight.png" + BASE_COST = 5 def __init__(self, **kw): self.angular_velocity = kw.pop("angular_velocity", None) @@ -386,3 +412,9 @@ class SpotLight(BaseLight): if self.angular_velocity: self.ray_manager.direction -= self.angular_velocity self.ray_manager.update_shapes() + + @classmethod + def find_cost(cls, config): + cost = super(SpotLight, cls).find_cost(config) + cost += config.get("angular_velocity", 0) + return cost