slight outline for stones

This commit is contained in:
Sander Land committed 2020-03-15 13:59:51 +01:00
1 parent 11c2942eb8
commit 20bb2a5d70
3 files changed
+15 -9

No files matched your search

+1
View File
@@ -15,6 +15,7 @@
"size_min": 1, "size_min": 1,
"size_max": 15, "size_max": 15,
"stones": [ [0.05, 0.05, 0.05], [0.95, 0.95, 0.95] ], "stones": [ [0.05, 0.05, 0.05], [0.95, 0.95, 0.95] ],
"outline": [ [0.3,0.3,0.3,0.5], [0.7, 0.7, 0.7,0.5] ],
"ghost_alpha": 0.5, "ghost_alpha": 0.5,
"eval_colors": [[0.537, 0.129, 0.42], [1, 0, 0], [1, 0.95, 0], [0.117, 0.588, 0]], "eval_colors": [[0.537, 0.129, 0.42], [1, 0, 0], [1, 0.95, 0], [0.117, 0.588, 0]],
"undo_alpha": 0.5, "undo_alpha": 0.5,
+1 -1
View File
@@ -303,7 +303,7 @@
rgba: 0.95, 0.95, 0.95, 1 rgba: 0.95, 0.95, 0.95, 1
Rectangle: Rectangle:
pos: self.pos pos: self.pos
size: self.size size: root.size
BadukPanWidget: BadukPanWidget:
id: board id: board
size_hint: 1 - controls.size_hint[0], 1 size_hint: 1 - controls.size_hint[0], 1
+13 -8
View File
@@ -10,7 +10,8 @@ from board import Move
from controller import Config from controller import Config
from kivyutils import * from kivyutils import *
COLORS = Config.get("ui")["stones"] STONE_COLORS = Config.get("ui")["stones"]
OUTLINE_COLORS = Config.get("ui").get("outline", [None, None])
GHOST_ALPHA = Config.get("ui")["ghost_alpha"] GHOST_ALPHA = Config.get("ui")["ghost_alpha"]
@@ -69,9 +70,13 @@ class BadukPanWidget(Widget):
self.draw_board() self.draw_board()
self.redraw() self.redraw()
def draw_stone(self, x, y, col, innercol=None, evalcol=None, evalsize=10.0, scale=1.0): def draw_stone(self, x, y, col, outline_col=None, innercol=None, evalcol=None, evalsize=10.0, scale=1.0):
stone_size = self.stone_size * scale stone_size = self.stone_size * scale
draw_circle((self.gridpos[x], self.gridpos[y]), stone_size, col) draw_circle((self.gridpos[x], self.gridpos[y]), stone_size, col)
if outline_col:
Color(*outline_col)
Line(circle=(self.gridpos[x], self.gridpos[y], stone_size), width=0.05 * stone_size)
if evalcol: if evalcol:
evalsize = min(self.EVAL_BOUNDS[1], max(evalsize, self.EVAL_BOUNDS[0])) / self.EVAL_BOUNDS[1] evalsize = min(self.EVAL_BOUNDS[1], max(evalsize, self.EVAL_BOUNDS[0])) / self.EVAL_BOUNDS[1]
draw_circle((self.gridpos[x], self.gridpos[y]), math.sqrt(evalsize) * stone_size * 0.5, evalcol) draw_circle((self.gridpos[x], self.gridpos[y]), math.sqrt(evalsize) * stone_size * 0.5, evalcol)
@@ -94,7 +99,6 @@ class BadukPanWidget(Widget):
sz = min(self.width, self.height) sz = min(self.width, self.height)
Color(*Config.get("ui")["board_color"]) Color(*Config.get("ui")["board_color"])
board = Rectangle(pos=(0, 0), size=(sz, sz)) board = Rectangle(pos=(0, 0), size=(sz, sz))
# grid lines # grid lines
margin = Config.get("ui")["board_margin"] margin = Config.get("ui")["board_margin"]
self.grid_size = board.size[0] / (self.engine.board_size - 1 + 1.5 * margin) self.grid_size = board.size[0] / (self.engine.board_size - 1 + 1.5 * margin)
@@ -136,8 +140,8 @@ class BadukPanWidget(Widget):
eval, evalsize = m.evaluation_info eval, evalsize = m.evaluation_info
move_eval_on = full_eval_on[m.player] or m in last_few_moves move_eval_on = full_eval_on[m.player] or m in last_few_moves
evalcol = self._eval_spectrum(eval) if move_eval_on and eval and evalsize > Config.get("ui").get("min_eval_temperature", 0.5) else None evalcol = self._eval_spectrum(eval) if move_eval_on and eval and evalsize > Config.get("ui").get("min_eval_temperature", 0.5) else None
inner = COLORS[1 - m.player] if (m == last_move) else None inner = STONE_COLORS[1 - m.player] if (m == last_move) else None
self.draw_stone(m.coords[0], m.coords[1], COLORS[m.player], inner, evalcol, evalsize) self.draw_stone(m.coords[0], m.coords[1], STONE_COLORS[m.player], OUTLINE_COLORS[m.player], inner, evalcol, evalsize)
# ownership - allow one move out of date for smooth animation # ownership - allow one move out of date for smooth animation
ownership = last_move.ownership or (last_move.parent and last_move.parent.ownership) ownership = last_move.ownership or (last_move.parent and last_move.parent.ownership)
@@ -148,7 +152,7 @@ class BadukPanWidget(Widget):
for x in range(self.engine.board_size): for x in range(self.engine.board_size):
ix_owner = 0 if ownership[ix] > 0 else 1 ix_owner = 0 if ownership[ix] > 0 else 1
if ix_owner != (has_stone.get((x, y), -1)): if ix_owner != (has_stone.get((x, y), -1)):
Color(*COLORS[ix_owner], abs(ownership[ix])) Color(*STONE_COLORS[ix_owner], abs(ownership[ix]))
Rectangle(pos=(self.gridpos[x] - rsz / 2, self.gridpos[y] - rsz / 2), size=(rsz, rsz)) Rectangle(pos=(self.gridpos[x] - rsz / 2, self.gridpos[y] - rsz / 2), size=(rsz, rsz))
ix = ix + 1 ix = ix + 1
@@ -160,7 +164,8 @@ class BadukPanWidget(Widget):
if m.coords[0] is not None: if m.coords[0] is not None:
undo_coords.add(m.coords) undo_coords.add(m.coords)
evalcol = (*self._eval_spectrum(eval_info[0]), alpha) if eval_info[0] else None evalcol = (*self._eval_spectrum(eval_info[0]), alpha) if eval_info[0] else None
self.draw_stone(m.coords[0], m.coords[1], (*COLORS[m.player][:3], alpha), None, evalcol, self.EVAL_BOUNDS[1], scale=Config.get("ui").get("undo_scale", 0.95)) scale = Config.get("ui").get("undo_scale", 0.95)
self.draw_stone(m.coords[0], m.coords[1], (*STONE_COLORS[m.player][:3], alpha), None, None, evalcol, self.EVAL_BOUNDS[1], scale=scale)
# hints # hints
if self.engine.hints.active(current_player): if self.engine.hints.active(current_player):
@@ -172,7 +177,7 @@ class BadukPanWidget(Widget):
# hover next move ghost stone # hover next move ghost stone
if self.ghost_stone: if self.ghost_stone:
self.draw_stone(*self.ghost_stone, (*COLORS[current_player], GHOST_ALPHA)) self.draw_stone(*self.ghost_stone, (*STONE_COLORS[current_player], GHOST_ALPHA))
# pass circle # pass circle
passed = len(moves) > 1 and last_move.is_pass passed = len(moves) > 1 and last_move.is_pass