Skip to content

Commit

Permalink
NF: Double rainbow patch.
Browse files Browse the repository at this point in the history
  • Loading branch information
Debilski committed Aug 28, 2017
1 parent 0587f20 commit 4fd2341
Show file tree
Hide file tree
Showing 4 changed files with 53 additions and 9 deletions.
1 change: 1 addition & 0 deletions pelita/scripts/pelita_tkviewer.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ def geometry_string(s):
parser.add_argument('--delay', type=int,
help='delay')


def main():
args = parser.parse_args()
tkargs = {
Expand Down
26 changes: 20 additions & 6 deletions pelita/ui/tk_canvas.py
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ def screen(self, model_x, model_y):


class UiCanvas:
def __init__(self, master, geometry=None):
def __init__(self, master, geometry=None, rainbow=False):
self.game_finish_overlay = lambda: None
self.game_status_info = lambda: None

Expand All @@ -112,6 +112,7 @@ def __init__(self, master, geometry=None):

self.master = master
self.canvas = None
self._rainbow = rainbow

self.current_universe = None

Expand Down Expand Up @@ -265,6 +266,13 @@ def update(self, universe, game_state):
self.current_universe = universe

if round is not None and turn is not None:
if self._rainbow:
import random
r = random.randint(0, 15)
g = random.randint(0, 15)
b = random.randint(0, 15)
self.canvas.configure(background=col(r*16, g*16, b*16))

self.game_status_info = lambda: self.draw_status_info(turn, round, game_state.get("layout_name", ""))
self.game_status_info()

Expand Down Expand Up @@ -465,7 +473,7 @@ def resize(self, event):
self.size_changed = True

def draw_food(self, universe):
if not self.size_changed:
if not self.size_changed and not self._rainbow:
return
self.canvas.delete("food")
for position in universe.food_list:
Expand All @@ -474,9 +482,12 @@ def draw_food(self, universe):
food_item.draw(self.canvas)

def draw_maze(self, universe):
if not self.size_changed:
if not self.size_changed and not self._rainbow:
return
self.canvas.delete("wall")
self.t = getattr(self, "t", 0) + 1
if self._rainbow:
self.t = getattr(self, "t", 0) + 1
for position, wall in universe.maze.items():
model_x, model_y = position
if wall:
Expand All @@ -485,7 +496,10 @@ def draw_maze(self, universe):
for dy in [-1, 0, 1]
if universe.maze.get((model_x + dx, model_y + dy), None)]
wall_item = Wall(self.mesh_graph, wall_neighbors=wall_neighbors, position=(model_x, model_y))
wall_item.draw(self.canvas)
if self._rainbow:
wall_item.draw(self.canvas, self.t)
else:
wall_item.draw(self.canvas)

def init_bots(self, universe):
for bot in universe.bots:
Expand All @@ -505,7 +519,7 @@ def draw_bots(self, universe, game_state):

class TkApplication:
def __init__(self, master, address, controller_address=None,
geometry=None, delay=1):
geometry=None, delay=1, rainbow=False):
self.master = master
self.master.configure(background="white")

Expand All @@ -527,7 +541,7 @@ def __init__(self, master, address, controller_address=None,

self.frame.pack(fill=tkinter.BOTH, expand=tkinter.YES)

self.ui_canvas = UiCanvas(self, geometry=geometry)
self.ui_canvas = UiCanvas(self, geometry=geometry, rainbow=rainbow)

self._min_delay = 1
self._delay = delay
Expand Down
29 changes: 27 additions & 2 deletions pelita/ui/tk_sprites.py
Original file line number Diff line number Diff line change
Expand Up @@ -186,14 +186,39 @@ def __init__(self, mesh, wall_neighbors=None, **kwargs):

def draw(self, canvas, universe=None):
scale = (self.mesh.half_scale_x + self.mesh.half_scale_y) * 0.5
if universe:
wall_col = col(48, 26, 22)

import random
r = random.randint(0, 15)
g = random.randint(0, 15)
b = random.randint(0, 15)
wall_col = col(r*16, g*16, b*16)

def rb_col(idx, width, phase=0):
import math
freq = math.pi * 2 / width
r = math.sin(freq * idx + 2 + phase) * 127 + 128
g = math.sin(freq * idx + 0 + phase) * 127 + 128
b = math.sin(freq * idx + 4 + phase) * 127 + 128
return (int(r), int(g), int(b))

x, y = self.position
if x == 0 or y == 0:
wall_col = col(*rb_col(x + y, 16, universe))
elif x == self.mesh.mesh_width - 1 or y == self.mesh.mesh_height - 1:
wall_col = col(*rb_col(- x - y, 16, universe))
else:
wall_col = col(48, 26, 22)

if not ((0, 1) in self.wall_neighbors or
(1, 0) in self.wall_neighbors or
(0, -1) in self.wall_neighbors or
(-1, 0) in self.wall_neighbors):
# if there is no direct neighbour, we can’t connect.
# draw only a small dot.
# TODO add diagonal lines
canvas.create_line(self.screen((-0.3, 0)), self.screen((+0.3, 0)), fill=col(48, 26, 22),
canvas.create_line(self.screen((-0.3, 0)), self.screen((+0.3, 0)), fill=wall_col,
width=0.8 * scale, tag=(self.tag, "wall"), capstyle="round")
else:
neighbours = [(-1, -1), (0, -1), (1, -1), (1, 0), (1, 1), (0, 1), (-1, 1), (-1, 0)]
Expand All @@ -209,7 +234,7 @@ def draw(self, canvas, universe=None):
neighbours[(index - 1) % len(neighbours)] in self.wall_neighbors):
pass
else:
canvas.create_line(self.screen((0, 0)), self.screen((2*dx, 2*dy)), fill=col(48, 26, 22),
canvas.create_line(self.screen((0, 0)), self.screen((2*dx, 2*dy)), fill=wall_col,
width=0.8 * scale, tag=(self.tag, "wall"), capstyle="round")

class Food(TkSprite):
Expand Down
6 changes: 5 additions & 1 deletion pelita/ui/tk_viewer.py
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,9 @@ def __init__(self, address, controller_address=None, geometry=None, delay=1):
self.delay = delay
self.geometry = geometry

if os.getenv("PELITA_DOUBLE_RAINBOW", None):
self.rainbow = True

def run(self):
self.root = tkinter.Tk()
if self.geometry is None:
Expand All @@ -89,7 +92,8 @@ def run(self):
address=self.address,
controller_address=self.controller_address,
geometry=self.geometry,
delay=self.delay)
delay=self.delay,
rainbow=self.rainbow)
# schedule next read
self.root.after_idle(self.app.read_queue)
try:
Expand Down

0 comments on commit 4fd2341

Please sign in to comment.