WIP: merge recipies

This commit is contained in:
2026-04-22 19:10:44 +03:00
parent 66b8120eb7
commit 663d532c88
19 changed files with 546 additions and 11 deletions
+23 -2
View File
@@ -24,12 +24,21 @@ static func resolve(owner: Node3D, other: Node3D, owner_vel: Vector3) -> bool:
var speed_b := Vector2(other_vel.x, other_vel.z).length()
var collision_speed := speed_a + speed_b
# ── 1. Merge ──────────────────────────────────────────────────────────────
# ── 1. Recipe merge (MergeRecipes) ────────────────────────────────────────
var kt_a: String = owner.get("kickable_type") if owner.get("kickable_type") != null else ""
var kt_b: String = other.get("kickable_type") if other.get("kickable_type") != null else ""
if kt_a != "" and kt_b != "":
var recipe: Dictionary = MergeRecipes.find(kt_a, kt_b, collision_speed)
if not recipe.is_empty():
_execute_recipe(owner, other, recipe)
return true
# ── 2. Merge (enemy-to-enemy) ─────────────────────────────────────────────
if owner.has_method("can_merge_with") and owner.call("can_merge_with", other, collision_speed):
owner.call("do_merge_with", other)
return true
# ── 2. Damage ─────────────────────────────────────────────────────────────
# ── 3. Damage ─────────────────────────────────────────────────────────────
var mod_a: float = owner.get("damage_modifier") if owner.get("damage_modifier") != null else 0.0
var mod_b: float = other.get("damage_modifier") if other.get("damage_modifier") != null else 0.0
@@ -39,3 +48,15 @@ static func resolve(owner: Node3D, other: Node3D, owner_vel: Vector3) -> bool:
owner.call("apply_collision_damage", collision_speed * mod_b)
return false
static func _execute_recipe(a: Node3D, b: Node3D, recipe: Dictionary) -> void:
var pos := (a.global_position + b.global_position) * 0.5
var parent := a.get_parent()
a.queue_free()
b.queue_free()
var scene: PackedScene = load(recipe["result_scene"])
if scene == null or parent == null:
return
var result := scene.instantiate() as Node3D
parent.add_child(result)
result.global_position = pos