sketch-a-day/2019/sketch_190514b/cell.py

72 wiersze
2.1 KiB
Python

# -*- coding: utf-8 -*-
from random import choice
from bar import bar
class Cell():
border = 0
# RES = 4.
grid = dict()
# ortho neighbours
ONL = ((+0, -1, +0),
(-1, +0, +0), # (+0, +0, +0),
(+1, +0, +0),
(+0, +1, +0),
(+0, +0, -1), (+0, +0, +1),
)
# diagonal neighbours
DNL = ((+1, +1, +0),
(-1, -1, +0), # (+0, +0, +0),
(+1, -1, +0),
(-1, +1, +0),
(+0, -1, +1),
(-1, +0, +1),
(+1, +0, +1),
(+0, +1, +1),
(+0, -1, -1),
(-1, +0, -1),
(+1, +0, -1),
(+0, +1, -1),
)
def __init__(self, index, cell_size, state=False):
self.index = index
self.state = state
self.size_ = cell_size
self.mouse_down = False
self.calculate_pos()
def calculate_pos(self):
i, j, k = self.index
self.pos = PVector(
Cell.border + self.size_ / 2 + i * self.size_, # - width / 2,
Cell.border + self.size_ / 2 + j * self.size_, # - height / 2,
k * self.size_ - height / 5)
def plot(self, mode):
""" draws node """
siz = self.size_
if self.state:
pushMatrix()
translate(self.pos.x,
self.pos.y,
self.pos.z)
noFill() # stroke(0)
i, j, k = self.index
# stroke(0)
if mode == 0:
for (ni, nj, nk) in Cell.ONL:
nb = Cell.grid.get((i + ni, j + nj, k + nk), None)
if nb and nb.state:
bar(0, 0, 0,
ni * siz / 2, nj * siz / 2, nk * siz / 2,
5)
if mode == 1:
for (ni, nj, nk) in Cell.DNL:
nb = Cell.grid.get((i + ni, j + nj, k + nk), None)
if nb and nb.state:
bar(0, 0, 0,
ni * siz / 2, nj * siz / 2, nk * siz / 2,
3)
popMatrix()