summaryrefslogtreecommitdiffstats
path: root/fish_render.py
diff options
context:
space:
mode:
authorgroup1 <f16_group1@pbridge.adm.cs.cmu.edu>2016-10-09 14:45:03 -0400
committergroup1 <f16_group1@pbridge.adm.cs.cmu.edu>2016-10-09 14:45:03 -0400
commitdfe1127addf7e31acd63e87db0a5d5e35628ea67 (patch)
tree101526e338590ba0980ff1809a8338cd12b50b4e /fish_render.py
parentdd7dd93d9e1ee2e0095f0fa403a499b69aa289a8 (diff)
downloadbridge-dfe1127addf7e31acd63e87db0a5d5e35628ea67.tar.zst
Add twinkle
Diffstat (limited to 'fish_render.py')
-rw-r--r--fish_render.py44
1 files changed, 32 insertions, 12 deletions
diff --git a/fish_render.py b/fish_render.py
index 4924016..18aecac 100644
--- a/fish_render.py
+++ b/fish_render.py
@@ -2,6 +2,9 @@
from __future__ import division, unicode_literals
import color
import random
+import constants
+from constants import *
+import math
class Fish(object):
"""Object displayed on the bridge, probably a fish."""
@@ -18,6 +21,12 @@ class Fish(object):
def update(self):
"""Swim gently to the other side of the bridge."""
self.x += self.step
+ if self.x > 200:
+ self.x = 0
+ self.y = 0.25 + 0.25 * math.sin(math.pi * self.x / 10)
+ #theta = random.random() * math.pi / 2 - math.pi / 4
+ #self.y += 0.01 * math.sin(theta)
+ #print(self.y)
class Light(object):
@@ -33,7 +42,7 @@ class Light(object):
def update(self, fish):
"""Change color depending on where the fish is."""
- if abs(self.transitioning_to - self.color) < self.step:
+ if abs(self.transitioning_to - self.color) <= self.step:
self.transitioning_to = pick_HSV().to_RGB()
self.step = (random_change()
* abs(self.color - self.transitioning_to))
@@ -41,7 +50,13 @@ class Light(object):
self.color, self.transitioning_to, self.step
)
coverage = compute_coverage(fish, self.x, self.y)
+ #coverage *= coverage
new_color = coverage * fish.color + (1 - coverage) * new_background
+ #new_color = new_background
+ self.color = new_background
+ if self.x == 30 and self.y == 0:
+ pass
+ #print(self.color.r(), self.color.g(), self.color.b())
self.light.setRGBRaw(
*map(lambda x: clamp(0, x, 1), new_color.components)
)
@@ -61,24 +76,28 @@ class Bridge(object):
for y, light in enumerate(light_col):
self.fish.update()
light.update(self.fish)
- self.rig.updateOnce()
+ self.rig.updateOnce()
def compute_coverage(fish, x, y):
"""Calculate the coverage of a fish over a box."""
- min_x = max(x, fish.x)
- max_x = min(x+1, fish.x + fish.width)
- min_y = max(y, fish.y)
- max_y = min(y+1, fish.y + fish.height)
+ middle_of_fish = fish.x + fish.width / 2
+ middle_of_panel = x + 0.5
+ diff = abs(middle_of_fish - middle_of_panel) / (fish.width / 2)
+ scale = 1 - diff
+ min_x = min(max(x, fish.x), x + 1)
+ max_x = max(min(x+1, fish.x + fish.width), x)
+ min_y = min(max(y, fish.y), y + 1)
+ max_y = max(min(y+1, fish.y + fish.height), y)
coverage = (max_x - min_x) * (max_y - min_y)
- return coverage
+ return coverage * scale
def pick_HSV():
"""Return a random color in an appropriate interval."""
- hue = random.random() * (MAX_HUE - MIN_HUE) + MIN_HUE
- saturation = random.random()
- value = random.random()
+ hue = random.random() * (constants.MAX_HUE - constants.MIN_HUE) + constants.MIN_HUE
+ saturation = random.random() * (MAX_SATURATION - MIN_SATURATION) + MIN_SATURATION
+ value = random.random() * (MAX_VALUE - MIN_VALUE) + MIN_VALUE
return color.HSV(hue, saturation, value)
@@ -88,12 +107,13 @@ def transition(start, end, step):
return start
diff_vector = end - start
step_vector = diff_vector / abs(diff_vector) * step
- return step_vector + start
+ result = step_vector + start
+ return result
def random_change():
"""Return a random amount that a light should change each frame."""
- min_time = int(MIN_TIME * FRAME_RATE)
+ min_time = int(constants.MIN_TIME * FRAME_RATE)
max_time = int(MAX_TIME * FRAME_RATE)
return 1 / random.randint(min_time, max_time)