Move pixel perfect and mirror code to drawers class (#255)

This commit is contained in:
Kinwailo 2020-06-04 19:11:24 +08:00 committed by GitHub
parent 7371cd79e4
commit 30f8891f21
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 61 additions and 64 deletions

View file

@ -1,21 +1,11 @@
class Drawer:
func reset() -> void:
pass
func set_pixel(_sprite: Image, _pos: Vector2, _new_color: Color) -> void:
pass
class SimpleDrawer extends Drawer:
func reset() -> void:
pass
class_name Drawer
class SimpleDrawer:
func set_pixel(_sprite: Image, _pos: Vector2, _new_color: Color) -> void:
_sprite.set_pixel(_pos.x, _pos.y, _new_color)
class PixelPerfectDrawer extends Drawer:
class PixelPerfectDrawer:
const neighbours = [Vector2(0, 1), Vector2(1, 0), Vector2(-1, 0), Vector2(0, -1)]
const corners = [Vector2(1, 1), Vector2(-1, -1), Vector2(-1, 1), Vector2(1, -1)]
var last_pixels = [null, null]
@ -38,3 +28,38 @@ class PixelPerfectDrawer extends Drawer:
if _pos - corner[0] in corners and _pos - neighbour[0] in neighbours:
_sprite.set_pixel(neighbour[0].x, neighbour[0].y, neighbour[1])
last_pixels[0] = corner
var pixel_perfect := false setget set_pixel_perfect
var h_mirror := false
var v_mirror := false
var simple_drawer := SimpleDrawer.new()
var pixel_perfect_drawers = [PixelPerfectDrawer.new(), PixelPerfectDrawer.new(), PixelPerfectDrawer.new(), PixelPerfectDrawer.new()]
var drawers = [simple_drawer, simple_drawer, simple_drawer, simple_drawer]
func reset() -> void:
for drawer in pixel_perfect_drawers:
drawer.reset()
func set_pixel_perfect(value: bool) -> void:
pixel_perfect = value
if pixel_perfect:
drawers = pixel_perfect_drawers.duplicate()
else:
drawers = [simple_drawer, simple_drawer, simple_drawer, simple_drawer]
func set_pixel(_sprite: Image, _pos: Vector2, _new_color: Color) -> void:
var mirror_x = Global.canvas.east_limit + Global.canvas.west_limit - _pos.x - 1
var mirror_y = Global.canvas.south_limit + Global.canvas.north_limit - _pos.y - 1
drawers[0].set_pixel(_sprite, _pos, _new_color)
if h_mirror:
drawers[1].set_pixel(_sprite, Vector2(mirror_x, _pos.y), _new_color)
if v_mirror:
drawers[2].set_pixel(_sprite, Vector2(mirror_x, mirror_y), _new_color)
if v_mirror:
drawers[3].set_pixel(_sprite, Vector2(_pos.x, mirror_y), _new_color)