fix: proper window instantiation position calculation
This commit is contained in:
parent
debccd0922
commit
f32dd932f6
2 changed files with 18 additions and 4 deletions
|
@ -8,7 +8,7 @@ var _instantiator: DragonInstantiator
|
|||
|
||||
|
||||
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
|
||||
move_window_to_bottom_right()
|
||||
|
|
|
@ -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:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue