1
1
mirror of https://github.com/Rundll86/Dog-Lynx-And-HCN.git synced 2026-05-28 06:51:54 +08:00

feat: 添加无敌状态和自定义波次逻辑

- 为EntityBase添加currentInvinsible属性控制无敌状态
- 修改BulletBase.gd在命中时检查目标无敌状态
- 在World.tscn中设置rooster初始为无敌状态
- 添加Wave.gd自定义波次启动逻辑
- 修复currentFocusedBoss未初始化时的空指针问题
This commit is contained in:
2025-09-14 16:20:34 +08:00
parent a704f4b712
commit 7dbeb7ec19
5 changed files with 17 additions and 3 deletions
+3
View File
@@ -30,6 +30,9 @@ size = Vector2(150, 150)
script = ExtResource("2_s2dg5")
displayName = "酷可mc"
[node name="collect" parent="sounds" index="4"]
stream = null
[node name="texture" parent="." index="2"]
sprite_frames = SubResource("SpriteFrames_1c0ui")
animation = &"walk"
+1
View File
@@ -103,3 +103,4 @@ shape = SubResource("CircleShape2D_4hkht")
polygon = PackedVector2Array(-2419, 1803, 2429, 1825, 2392, -366, 2867, -318, 2723, 2241, -2879, 2193, -2797, -2582, 2959, -2528, 2858, -347, 2420, -337, 2441, -1834, -2438, -1792)
[node name="rooster" parent="." groups=["players"] instance=ExtResource("3_5ui6q")]
currentInvinsible = true
+8 -1
View File
@@ -19,8 +19,13 @@ static var WAVE_TESTBOSS = [
Wave.create(preload("res://components/Characters/Bear.tscn"), 0, 0, true, 0, INF, 1),
Wave.create(preload("res://components/Characters/KukeMC.tscn"), 0, 0, true, 0, INF, 1),
]
static var data = WAVE_TESTBOSS
static var data = []
static func customStart():
var furryr = EntityBase.generate(preload("res://components/Characters/Bear.tscn"), MathTool.randv2_range(500), true, false)
var kukemc = EntityBase.generate(preload("res://components/Characters/KukeMC.tscn"), MathTool.randv2_range(500), true, false)
furryr.currentFocusedBoss = kukemc
kukemc.currentFocusedBoss = furryr
static func create(
entity_: PackedScene,
minCount_: int = 1,
@@ -52,5 +57,7 @@ static func spawn():
for j in range(entityCountOf(wave)):
EntityBase.generate(wave.entity, MathTool.randv2_range(500), true, wave.isBoss)
static func next():
if current == 0:
customStart()
spawn()
current += 1
+2 -1
View File
@@ -79,9 +79,10 @@ func _physics_process(_delta: float) -> void:
func hit(target: Node):
var entity: EntityBase = EntityTool.fromHurtbox(target)
if !entity || !launcher: return
if entity.currentInvinsible: return
if !canDamageSelf && entity == launcher: return
if !indisDamage && !GameRule.allowFriendlyFire:
if entity.isPlayer() == launcher.isPlayer(): return
if entity.isPlayer() == launcher.isPlayer() and launcher.currentFocusedBoss != entity: return
var damages = entity.takeDamage(self, MathTool.rate(launcher.fields.get(FieldStore.Entity.CRIT_RATE) + GameRule.critRateInfluenceByLuckValue * launcher.fields[FieldStore.Entity.LUCK_VALUE]))
succeedToHit(damages)
if MathTool.rate(fullPenerate()):
+3 -1
View File
@@ -73,6 +73,7 @@ var inventoryMax = {
@export var dropCounts: Array[Vector2] = []
@export var appleCount: Vector2i = Vector2(0, 2) # 死亡后掉落的苹果数量
@export var level: int = 1
@export var currentInvinsible: bool = false
@onready var animatree: AnimationTree = $"%animatree"
@onready var texture: AnimatedSprite2D = $"%texture"
@@ -127,7 +128,8 @@ func _ready():
icon.weapon = i
UIState.skillIconContainer.add_child(icon)
else:
currentFocusedBoss = get_tree().get_nodes_in_group("players")[0]
if !currentFocusedBoss:
currentFocusedBoss = get_tree().get_nodes_in_group("players")[0]
applyLevel()
health = fields.get(FieldStore.Entity.MAX_HEALTH)
energy = fields.get(FieldStore.Entity.MAX_ENERGY)