fix: proper window instantiation position calculation

This commit is contained in:
Gerard Gascón 2025-04-04 16:06:01 +02:00
parent debccd0922
commit f32dd932f6
2 changed files with 18 additions and 4 deletions

View file

@ -8,7 +8,7 @@ var _instantiator: DragonInstantiator
func _ready(): func _ready():
_instantiator = DragonInstantiator.new(dragon_template, dragon_spots) _instantiator = DragonInstantiator.new(dragon_template, dragon_spots, get_viewport(), get_window())
await get_tree().process_frame await get_tree().process_frame
move_window_to_bottom_right() move_window_to_bottom_right()

View file

@ -2,16 +2,30 @@ class_name DragonInstantiator
var _dragon_template: PackedScene var _dragon_template: PackedScene
var _positions: Array[Vector2i] = [] var _positions: Array[Vector2i] = []
var _viewport: Viewport
var _window: Window
func _init(dragon: PackedScene, positions: Array[Node2D]) -> void: func _init(dragon: PackedScene, positions: Array[Node2D], viewport: Viewport, window: Window) -> void:
_window = window
_viewport = viewport
_dragon_template = dragon _dragon_template = dragon
for pos in positions: for pos in positions:
_positions.push_back((Vector2i)(pos.position)) _positions.push_back((Vector2i)(pos.position))
func instantiate() -> Node: func instantiate() -> Node:
var position: Vector2i = _positions[0] var position: Vector2 = _positions[0]
return _instantiate_dragon(position) var relative_position: Vector2i = _calculate_relative_position(position)
return _instantiate_dragon(relative_position)
func _calculate_relative_position(position: Vector2) -> Vector2i:
var viewport_size: Vector2 = _viewport.get_texture().get_size()
var window_size: Vector2 = _window.get_size_with_decorations()
var scale: Vector2 = window_size / viewport_size
return Vector2i(Vector2(position) * scale)
func _instantiate_dragon(relative_position: Vector2i) -> Node: func _instantiate_dragon(relative_position: Vector2i) -> Node: