@@ -22,40 +22,45 @@ enum BrushTypes {
2222func _ready () -> void :
2323 tiles_list .on_selected .connect (set_selected_tile )
2424
25+ func brush_pen (tile_position : Vector2i ) -> void :
26+ if erase :
27+ level .ground .set_cell (tile_position , 1 )
28+ else :
29+ selected_tile .place (level , tile_position )
30+
31+ func brush_rectangle (start_tile_position : Vector2i , end_tile_position : Vector2i ) -> void :
32+ var first_tile_position : Vector2i = start_tile_position
33+ var last_tile_position : Vector2i = end_tile_position
34+ if start_tile_position < end_tile_position :
35+ first_tile_position = end_tile_position
36+ last_tile_position = start_tile_position
37+ for x in range (last_tile_position .x , first_tile_position .x + 1 ):
38+ for y in range (last_tile_position .y , first_tile_position .y + 1 ):
39+ brush_pen (Vector2i (x , y ))
40+
41+ func brush_circle (start_tile_position : Vector2i , end_tile_position : Vector2i ) -> void :
42+ var radius : int = start_tile_position .distance_squared_to (end_tile_position )
43+ var first_tile_position : Vector2i = start_tile_position + Vector2i (radius , radius )
44+ var last_tile_position : Vector2i = start_tile_position - Vector2i (radius , radius )
45+ for x in range (last_tile_position .x , first_tile_position .x ):
46+ for y in range (last_tile_position .y , first_tile_position .y ):
47+ var tile_position : Vector2i = Vector2i (x , y )
48+ if start_tile_position .distance_squared_to (tile_position ) <= radius :
49+ brush_pen (tile_position )
50+
2551func brush (start_position : Vector2 , end_position : Vector2 = Vector2 .ZERO ) -> void :
2652 if ! enable :
2753 return
28-
2954 var start_tile_position : Vector2i = (start_position / 16.0 ).floor ()
30- var end_tile_position : Vector2i = (end_position / 16.0 ).round ()
55+ var end_tile_position : Vector2i = (end_position / 16.0 ).floor ()
3156
32- if erase :
33- match brush_type :
34- BrushTypes .PEN :
35- level .ground .set_cell (start_tile_position , 1 )
36- BrushTypes .RECTANGLE :
37- var first_tile_position : Vector2i = start_tile_position
38- var last_tile_position : Vector2i = end_tile_position
39- if start_tile_position < end_tile_position :
40- first_tile_position = end_tile_position
41- last_tile_position = start_tile_position
42- for x in range (last_tile_position .x , first_tile_position .x ):
43- for y in range (last_tile_position .y , first_tile_position .y ):
44- level .ground .set_cell (Vector2i (x , y ), 1 )
45-
46- return
4757 match brush_type :
4858 BrushTypes .PEN :
49- selected_tile . place ( level , start_tile_position )
59+ brush_pen ( start_tile_position )
5060 BrushTypes .RECTANGLE :
51- var first_tile_position : Vector2i = start_tile_position
52- var last_tile_position : Vector2i = end_tile_position
53- if start_tile_position < end_tile_position :
54- first_tile_position = end_tile_position
55- last_tile_position = start_tile_position
56- for x in range (last_tile_position .x , first_tile_position .x ):
57- for y in range (last_tile_position .y , first_tile_position .y ):
58- selected_tile .place (level , Vector2i (x , y ))
61+ brush_rectangle (start_tile_position , end_tile_position )
62+ BrushTypes .CIRCLE :
63+ brush_circle (start_tile_position , end_tile_position )
5964
6065func _process (delta : float ) -> void :
6166 tile_sprite .visible = enable && ! erase && level .mode == LevelPlayer .Mode .EDIT
0 commit comments