Refine large map viewport controls
This commit is contained in:
@@ -4399,11 +4399,13 @@ func _draw_target_preview_badge() -> void:
|
||||
func _target_preview_badge_rect(cell: Vector2i, size: Vector2 = TARGET_PREVIEW_BADGE_SIZE) -> Rect2:
|
||||
var cell_rect := _rect_for_cell(cell)
|
||||
var position := cell_rect.position + Vector2((TILE_SIZE - size.x) * 0.5, 5.0)
|
||||
var board := _board_rect()
|
||||
var min_x := board.position.x + 2.0
|
||||
var min_y := board.position.y + 2.0
|
||||
var max_x := maxf(min_x, board.end.x - size.x - 2.0)
|
||||
var max_y := maxf(min_y, board.end.y - size.y - 2.0)
|
||||
var visible_board := _board_rect().intersection(_map_view_rect())
|
||||
if visible_board.size.x <= 0.0 or visible_board.size.y <= 0.0:
|
||||
visible_board = _board_rect()
|
||||
var min_x := visible_board.position.x + 2.0
|
||||
var min_y := visible_board.position.y + 2.0
|
||||
var max_x := maxf(min_x, visible_board.end.x - size.x - 2.0)
|
||||
var max_y := maxf(min_y, visible_board.end.y - size.y - 2.0)
|
||||
position.x = clampf(position.x, min_x, max_x)
|
||||
position.y = clampf(position.y, min_y, max_y)
|
||||
return Rect2(position, size)
|
||||
@@ -4654,10 +4656,15 @@ func _target_preview_badge_color(kind: String) -> Color:
|
||||
|
||||
|
||||
func _cell_from_screen(screen_position: Vector2) -> Vector2i:
|
||||
if not _map_view_rect().has_point(screen_position):
|
||||
return Vector2i(-1, -1)
|
||||
var local := screen_position - _board_origin()
|
||||
if local.x < 0 or local.y < 0:
|
||||
return Vector2i(-1, -1)
|
||||
return Vector2i(int(floor(local.x / TILE_SIZE)), int(floor(local.y / TILE_SIZE)))
|
||||
var cell := Vector2i(int(floor(local.x / TILE_SIZE)), int(floor(local.y / TILE_SIZE)))
|
||||
if not state.is_inside(cell):
|
||||
return Vector2i(-1, -1)
|
||||
return cell
|
||||
|
||||
|
||||
func _rect_for_cell(cell: Vector2i) -> Rect2:
|
||||
|
||||
Reference in New Issue
Block a user