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():
|
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()
|
||||||
|
|
|
@ -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:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue