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:
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()):
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user