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

@ -2,16 +2,30 @@ class_name DragonInstantiator
var _dragon_template: PackedScene
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
for pos in positions:
_positions.push_back((Vector2i)(pos.position))
func instantiate() -> Node:
var position: Vector2i = _positions[0]
return _instantiate_dragon(position)
var position: Vector2 = _positions[0]
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: