1
0
Fork 0
mirror of https://github.com/Orama-Interactive/Pixelorama.git synced 2025-03-15 15:55:18 +00:00
Pixelorama/src/UI/Canvas/TileMode.gd
2024-11-15 17:59:25 +02:00

50 lines
1.4 KiB
GDScript

extends Node2D
var tiles: Tiles
var draw_center := false
@onready var canvas := Global.canvas
func _draw() -> void:
var positions := get_tile_positions()
var tilemode_opacity := Global.tilemode_opacity
if Global.mirror_view:
var position_tmp := Vector2(Global.current_project.size.x, 0)
var scale_tmp := Vector2(-1, 1)
draw_set_transform(position_tmp, 0, scale_tmp)
var modulate_color := Color(
tilemode_opacity, tilemode_opacity, tilemode_opacity, tilemode_opacity
) # premultiply alpha blending is applied
var current_frame_texture := canvas.currently_visible_frame.get_texture()
for pos in positions:
draw_texture(current_frame_texture, pos, modulate_color)
draw_set_transform(Vector2.ZERO, 0, Vector2.ONE)
func get_tile_positions() -> Array[Vector2i]:
var defaulted_tiles := tiles
if defaulted_tiles == null:
defaulted_tiles = Global.current_project.tiles
var x_basis := defaulted_tiles.x_basis
var y_basis := defaulted_tiles.y_basis
var tile_mode := defaulted_tiles.mode
var x_range := (
range(-1, 2) if tile_mode in [Tiles.MODE.X_AXIS, Tiles.MODE.BOTH] else range(0, 1)
)
var y_range := (
range(-1, 2) if tile_mode in [Tiles.MODE.Y_AXIS, Tiles.MODE.BOTH] else range(0, 1)
)
var positions: Array[Vector2i] = []
for r in y_range:
for c in x_range:
if not draw_center and r == 0 and c == 0:
continue
var pos: Vector2i = r * y_basis + c * x_basis
positions.append(pos)
return positions