33 lines
1.1 KiB
GDScript
33 lines
1.1 KiB
GDScript
extends Area2D
|
|
|
|
@export var speed = 1500.0
|
|
var direction = Vector2.RIGHT
|
|
|
|
func _physics_process(delta):
|
|
# Gerak peluru
|
|
position += direction * speed * delta
|
|
|
|
# --- LOGIKA PENGHANCURAN PELURU ---
|
|
|
|
# Fungsi ini harus disambungkan (connect) ke sinyal body_entered
|
|
func _on_body_entered(body):
|
|
# 🟦 KUNCI UTAMA: Jika yang tertabrak adalah Player (diri sendiri), abaikan total!
|
|
if body is Player:
|
|
return
|
|
|
|
# 1. Cek apakah benda yang ditabrak punya fungsi terima_damage (untuk CharacterBody/StaticBody langsung)
|
|
if body.has_method("terima_damage"):
|
|
body.terima_damage(5)
|
|
|
|
# 2. ATAU cek apakah bapaknya punya fungsi kurangi_nyawa (untuk struktur Node2D > StaticBody2D)
|
|
elif body.get_parent().has_method("kurangi_nyawa"):
|
|
body.get_parent().kurangi_nyawa(2)
|
|
|
|
# 3. Peluru hancur jika menabrak apapun (karena pengecekan Player sudah di-return di atas)
|
|
# Kamu bisa tambah efek suara atau partikel ledakan kecil di sini nanti
|
|
queue_free()
|
|
|
|
# Gunakan ini supaya peluru tidak terbang selamanya di memori
|
|
func _on_visible_on_screen_notifier_2d_screen_exited():
|
|
queue_free()
|