small boss progess

This commit is contained in:
Daniel Kauss Serna 2026-04-24 15:23:44 +02:00
parent 986c83ec8f
commit 3f9103b1c8
42 changed files with 769 additions and 54 deletions

18
scripts/boss_spawner.gd Normal file
View file

@ -0,0 +1,18 @@
extends RigidBody2D
@export var enemies : Array[Array]
@onready var sprite : Sprite2D = $Sprite2D
func _ready() -> void:
var this_enemy = enemies.pick_random()
sprite.texture = this_enemy[0]
angular_velocity = (randf() - 0.5) * 46;
linear_velocity.y = -300;
linear_velocity.x = (randf() - 0.5) * 300
await get_tree().create_timer(randf() * 0.2 + 0.6).timeout
queue_free()
var enemy : Enemy = this_enemy[1].instantiate()
enemy.global_position = global_position
get_tree().root.add_child(enemy)

View file

@ -0,0 +1 @@
uid://cojrjktxjgd6c

64
scripts/cable.gd Normal file
View file

@ -0,0 +1,64 @@
@tool
extends Line2D
@export_group("Targets")
@export var target_a: Node2D
@export var target_b: Node2D
@export_group("Cable Settings")
@export var segment_count: int = 20
@export var rope_length: float = 300.0
@export var gravity: Vector2 = Vector2(0, 9.8)
@export var iterations: int = 5
var points_pos: Array[Vector2] = []
var points_prev: Array[Vector2] = []
var segment_dist: float
func _ready():
segment_dist = rope_length / segment_count
var start_pos = target_a.global_position if target_a else global_position
for i in range(segment_count):
points_pos.append(start_pos)
points_prev.append(start_pos)
points = PackedVector2Array(points_pos)
func _physics_process(delta: float):
if not target_a or not target_b:
return
_update_points(delta)
for i in range(iterations):
_apply_constraints()
var local_points = PackedVector2Array()
for p in points_pos:
local_points.append(to_local(p))
points = local_points
func _update_points(delta: float):
for i in range(segment_count):
var velocity = points_pos[i] - points_prev[i]
points_prev[i] = points_pos[i]
points_pos[i] += velocity + gravity * delta * 50.0
func _apply_constraints():
points_pos[0] = target_a.global_position
points_pos[segment_count - 1] = target_b.global_position
for i in range(segment_count - 1):
var p1 = points_pos[i]
var p2 = points_pos[i+1]
var diff = p1 - p2
var distance = diff.length()
var error = distance - segment_dist
var percent = error / distance
var offset = diff * percent * 0.5
if i != 0:
points_pos[i] -= offset
if i + 1 != segment_count - 1:
points_pos[i+1] += offset

1
scripts/cable.gd.uid Normal file
View file

@ -0,0 +1 @@
uid://dr78dot5agp2p

View file

@ -14,6 +14,7 @@ func _ready() -> void:
target_node = get_tree().get_first_node_in_group("player")
nav_agent = NavigationAgent2D.new()
add_child(nav_agent)
move_speed = move_speed + (randf() - 0.5) * 10.0
func _physics_process(delta: float) -> void:
if not target_node: return
@ -32,6 +33,9 @@ func _physics_process(delta: float) -> void:
else:
_handle_attack_charge(delta)
if not nav_agent.is_target_reachable():
velocity = Vector2.ZERO;
_sprite_anim()
super._physics_process(delta)

View file

@ -3,7 +3,7 @@ signal hit_entity(entity : Entity);
signal hit_obstacle;
var from_player = true
@export var from_player = true
var enabled = true
@export var deal_damage = true
@export var dmg = 1

9
scripts/line_connect.gd Normal file
View file

@ -0,0 +1,9 @@
@tool
extends Line2D
@export var p1 : Node2D
@export var p2 : Node2D
func _physics_process(delta: float) -> void:
points[0] = to_local(p1.global_position)
points[1] = to_local(p2.global_position)

View file

@ -0,0 +1 @@
uid://mc1fw6f5texh

View file

@ -18,7 +18,7 @@ func _physics_process(delta: float) -> void:
position += dir * speed * delta
func _on_hitbox_hit_obstacle() -> void:
queue_free()
pass
func _on_hitbox_hit_entity(entity: Entity) -> void:
queue_free()