bug: Fix low-resolution text
This commit is contained in:
parent
64c055b23f
commit
e287853798
13 changed files with 1463 additions and 104 deletions
|
|
@ -12,5 +12,5 @@ func _ready() -> void:
|
|||
}
|
||||
|
||||
for btn_name in buttons.keys():
|
||||
var btn = $Container.get_node(btn_name)
|
||||
var btn = $Container/ButtonContainer.get_node(btn_name)
|
||||
btn.pressed.connect(func(): emit_signal(buttons[btn_name]))
|
||||
|
|
|
|||
|
|
@ -74,7 +74,7 @@ func _physics_process(delta: float) -> void:
|
|||
last_shot = 0.0
|
||||
|
||||
func die():
|
||||
position = get_viewport_rect().size
|
||||
position = get_viewport_rect().size / 2
|
||||
speed = Vector2(0, 0)
|
||||
inv_time = 3.0
|
||||
|
||||
|
|
|
|||
|
|
@ -20,9 +20,9 @@ func _ready():
|
|||
add_child(timer)
|
||||
|
||||
func spawn_time_from_score(score: int) -> float:
|
||||
var min_time = 0.3
|
||||
var max_time = 2.0
|
||||
var max_score = 50000.0
|
||||
var min_time = 0.2
|
||||
var max_time = 1.5
|
||||
var max_score = 100000.0
|
||||
|
||||
# Clamp score so it doesn’t overshoot
|
||||
var clamped_score = clamp(score, 0, max_score)
|
||||
|
|
@ -38,44 +38,46 @@ func spawn_time_from_score(score: int) -> float:
|
|||
return lerp(max_time, min_time, curved_t)
|
||||
|
||||
func spawn_enemy():
|
||||
var enemy = asteroids[randi_range(0, 3)].instantiate()
|
||||
var pos = get_random_edge_position()
|
||||
enemy.position = pos
|
||||
|
||||
var idx = randi_range(0, 3)
|
||||
var enemy = asteroids[idx].instantiate()
|
||||
# Direction vector toward center
|
||||
var center = screen_size * 0.5
|
||||
|
||||
enemy.rot_velocity = randf_range(-PI, PI)
|
||||
enemy.rotation = randf_range(0, PI)
|
||||
|
||||
var scl = randi_range(2 + idx, 5 + 3*idx)
|
||||
enemy.scale = Vector2(scl, scl)
|
||||
|
||||
var pos = get_random_edge_position(Utils.get_half_size(enemy))
|
||||
var dir = (center - pos).normalized()
|
||||
|
||||
# Add some randomness so it's not always perfect
|
||||
var angle_variation = randf_range(-0.5, 0.5) # radians (~±14 degrees)
|
||||
dir = dir.rotated(angle_variation)
|
||||
|
||||
# Apply starting velocity
|
||||
enemy.rot_velocity = randf_range(0, PI)
|
||||
enemy.velocity = dir * randf_range(50, 200)
|
||||
enemy.rotation = randf_range(0, PI)
|
||||
|
||||
var scl = randi_range(1, 5)
|
||||
enemy.scale = Vector2(scl, scl)
|
||||
enemy.velocity = dir * randf_range(75, 250)
|
||||
enemy.position = pos
|
||||
|
||||
enemy.add_to_group("enemies")
|
||||
add_child(enemy)
|
||||
|
||||
timer.wait_time = spawn_time_from_score(Game.score)
|
||||
|
||||
func get_random_edge_position() -> Vector2:
|
||||
func get_random_edge_position(half_size: Vector2) -> Vector2:
|
||||
# Pick which edge (0=top,1=bottom,2=left,3=right)
|
||||
var edge = randi() % 4
|
||||
match edge:
|
||||
0: # top
|
||||
return Vector2(randf() * screen_size.x, 0)
|
||||
return Vector2(randf() * screen_size.x, -half_size.y)
|
||||
1: # bottom
|
||||
return Vector2(randf() * screen_size.x, screen_size.y)
|
||||
return Vector2(randf() * screen_size.x, screen_size.y + half_size.y)
|
||||
2: # left
|
||||
return Vector2(0, randf() * screen_size.y)
|
||||
return Vector2(-half_size.x, randf() * screen_size.y)
|
||||
3: # right
|
||||
return Vector2(screen_size.x, randf() * screen_size.y)
|
||||
return Vector2(screen_size.x + half_size.x, randf() * screen_size.y)
|
||||
return Vector2.ZERO
|
||||
|
||||
|
||||
func stop():
|
||||
timer.stop()
|
||||
|
|
|
|||
|
|
@ -1,20 +1,34 @@
|
|||
extends Node2D
|
||||
|
||||
func get_half_size(sprt: Node2D):
|
||||
var half_size: Vector2
|
||||
|
||||
if sprt is Sprite2D:
|
||||
half_size = (sprt.texture.get_size() * sprt.scale) / 2.0
|
||||
elif sprt is AnimatedSprite2D:
|
||||
var tex: Texture2D = sprt.sprite_frames.get_frame_texture(sprt.animation, 0)
|
||||
if tex:
|
||||
half_size = (tex.get_size() * sprt.scale) / 2.0
|
||||
else:
|
||||
half_size = Vector2.ZERO
|
||||
func get_half_size(node: Node2D) -> Vector2:
|
||||
var tex_size := Vector2.ZERO
|
||||
var sprite: Node2D = null
|
||||
|
||||
# Try to find a Sprite2D or AnimatedSprite2D child
|
||||
if node is Sprite2D or node is AnimatedSprite2D:
|
||||
sprite = node
|
||||
else:
|
||||
half_size = Vector2.ZERO
|
||||
|
||||
return half_size
|
||||
for child in node.get_children():
|
||||
if child is Sprite2D or child is AnimatedSprite2D:
|
||||
sprite = child
|
||||
break
|
||||
|
||||
if sprite == null:
|
||||
return Vector2.ZERO
|
||||
|
||||
# Get texture size
|
||||
if sprite is Sprite2D:
|
||||
if sprite.texture:
|
||||
tex_size = sprite.texture.get_size()
|
||||
elif sprite is AnimatedSprite2D:
|
||||
var tex: Texture2D = sprite.sprite_frames.get_frame_texture(sprite.animation, 0)
|
||||
if tex:
|
||||
tex_size = tex.get_size()
|
||||
|
||||
# Combine parent scaling (global scale includes both)
|
||||
var global_scl = sprite.get_global_transform().get_scale()
|
||||
|
||||
return (tex_size * global_scl) * 0.5
|
||||
|
||||
func wrap_position(node: Node2D) -> void:
|
||||
var rect = node.get_viewport_rect()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue