Malen mit Symmetrie: Überlappung beider Seiten nimmt den stärkeren Anteil (stetig statt Mittelsenkrechten-Kante)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
7f06e28472
commit
5a70824dd5
1 changed files with 14 additions and 3 deletions
|
|
@ -158,6 +158,14 @@ func _punkt(idx: int) -> int:
|
||||||
return int(_mats[idx]) | (int(_mix_b[idx]) << 8) | (int(_mix_w[idx]) << 16)
|
return int(_mats[idx]) | (int(_mix_b[idx]) << 8) | (int(_mix_w[idx]) << 16)
|
||||||
|
|
||||||
|
|
||||||
|
## Anteil (0–255) des Materials m an einem gepackten Punkt.
|
||||||
|
static func _anteil(v: int, m: int) -> int:
|
||||||
|
var a := v & 0xFF
|
||||||
|
var b := (v >> 8) & 0xFF
|
||||||
|
var w := (v >> 16) & 0xFF
|
||||||
|
return (255 - w if a == m else 0) + (w if b == m else 0)
|
||||||
|
|
||||||
|
|
||||||
func _setze_punkt(idx: int, v: int) -> void:
|
func _setze_punkt(idx: int, v: int) -> void:
|
||||||
_mats[idx] = v & 0xFF
|
_mats[idx] = v & 0xFF
|
||||||
_mix_b[idx] = (v >> 8) & 0xFF
|
_mix_b[idx] = (v >> 8) & 0xFF
|
||||||
|
|
@ -566,9 +574,12 @@ func _mirror_mats(snap: Dictionary, g: Vector2) -> void:
|
||||||
var midx: int = mirror.y * _mres + mirror.x
|
var midx: int = mirror.y * _mres + mirror.x
|
||||||
var value: int = _punkt(idx)
|
var value: int = _punkt(idx)
|
||||||
if snap.has(mirror) and _punkt(midx) != int(snap[mirror]):
|
if snap.has(mirror) and _punkt(midx) != int(snap[mirror]):
|
||||||
# Beide Seiten bemalt (Pinsel überlappt die Achse): der näher am
|
# Beide Seiten bemalt (Pinsel überlappt sein Spiegelbild, z. B. nahe
|
||||||
# Strichpunkt liegende Wert gewinnt, beide bekommen ihn.
|
# der Kartenmitte): der Wert mit dem GRÖSSEREN Anteil des Mal-
|
||||||
if _cell_dist(mirror, g, cell_x, cell_z) < _cell_dist(pos, g, cell_x, cell_z):
|
# Materials gewinnt. Vorher „näher am Strichpunkt“ — das zog entlang
|
||||||
|
# der Mittelsenkrechte eine harte gerade Kante durch weiche Verläufe
|
||||||
|
# (Sly 25.10.). Max ist stetig und symmetrisch.
|
||||||
|
if _anteil(_punkt(midx), _stroke_material) > _anteil(value, _stroke_material):
|
||||||
value = _punkt(midx)
|
value = _punkt(midx)
|
||||||
_setze_punkt(idx, value)
|
_setze_punkt(idx, value)
|
||||||
done[mirror] = true
|
done[mirror] = true
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue