WIP: merge recipies
This commit is contained in:
+23
-2
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user