mirror of
https://github.com/Rundll86/Dog-Lynx-And-HCN.git
synced 2026-06-24 20:42:30 +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")
|
script = ExtResource("2_s2dg5")
|
||||||
displayName = "酷可mc"
|
displayName = "酷可mc"
|
||||||
|
|
||||||
|
[node name="collect" parent="sounds" index="4"]
|
||||||
|
stream = null
|
||||||
|
|
||||||
[node name="texture" parent="." index="2"]
|
[node name="texture" parent="." index="2"]
|
||||||
sprite_frames = SubResource("SpriteFrames_1c0ui")
|
sprite_frames = SubResource("SpriteFrames_1c0ui")
|
||||||
animation = &"walk"
|
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)
|
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")]
|
[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/Bear.tscn"), 0, 0, true, 0, INF, 1),
|
||||||
Wave.create(preload("res://components/Characters/KukeMC.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(
|
static func create(
|
||||||
entity_: PackedScene,
|
entity_: PackedScene,
|
||||||
minCount_: int = 1,
|
minCount_: int = 1,
|
||||||
@@ -52,5 +57,7 @@ static func spawn():
|
|||||||
for j in range(entityCountOf(wave)):
|
for j in range(entityCountOf(wave)):
|
||||||
EntityBase.generate(wave.entity, MathTool.randv2_range(500), true, wave.isBoss)
|
EntityBase.generate(wave.entity, MathTool.randv2_range(500), true, wave.isBoss)
|
||||||
static func next():
|
static func next():
|
||||||
|
if current == 0:
|
||||||
|
customStart()
|
||||||
spawn()
|
spawn()
|
||||||
current += 1
|
current += 1
|
||||||
|
|||||||
@@ -79,9 +79,10 @@ func _physics_process(_delta: float) -> void:
|
|||||||
func hit(target: Node):
|
func hit(target: Node):
|
||||||
var entity: EntityBase = EntityTool.fromHurtbox(target)
|
var entity: EntityBase = EntityTool.fromHurtbox(target)
|
||||||
if !entity || !launcher: return
|
if !entity || !launcher: return
|
||||||
|
if entity.currentInvinsible: return
|
||||||
if !canDamageSelf && entity == launcher: return
|
if !canDamageSelf && entity == launcher: return
|
||||||
if !indisDamage && !GameRule.allowFriendlyFire:
|
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]))
|
var damages = entity.takeDamage(self, MathTool.rate(launcher.fields.get(FieldStore.Entity.CRIT_RATE) + GameRule.critRateInfluenceByLuckValue * launcher.fields[FieldStore.Entity.LUCK_VALUE]))
|
||||||
succeedToHit(damages)
|
succeedToHit(damages)
|
||||||
if MathTool.rate(fullPenerate()):
|
if MathTool.rate(fullPenerate()):
|
||||||
|
|||||||
@@ -73,6 +73,7 @@ var inventoryMax = {
|
|||||||
@export var dropCounts: Array[Vector2] = []
|
@export var dropCounts: Array[Vector2] = []
|
||||||
@export var appleCount: Vector2i = Vector2(0, 2) # 死亡后掉落的苹果数量
|
@export var appleCount: Vector2i = Vector2(0, 2) # 死亡后掉落的苹果数量
|
||||||
@export var level: int = 1
|
@export var level: int = 1
|
||||||
|
@export var currentInvinsible: bool = false
|
||||||
|
|
||||||
@onready var animatree: AnimationTree = $"%animatree"
|
@onready var animatree: AnimationTree = $"%animatree"
|
||||||
@onready var texture: AnimatedSprite2D = $"%texture"
|
@onready var texture: AnimatedSprite2D = $"%texture"
|
||||||
@@ -127,7 +128,8 @@ func _ready():
|
|||||||
icon.weapon = i
|
icon.weapon = i
|
||||||
UIState.skillIconContainer.add_child(icon)
|
UIState.skillIconContainer.add_child(icon)
|
||||||
else:
|
else:
|
||||||
currentFocusedBoss = get_tree().get_nodes_in_group("players")[0]
|
if !currentFocusedBoss:
|
||||||
|
currentFocusedBoss = get_tree().get_nodes_in_group("players")[0]
|
||||||
applyLevel()
|
applyLevel()
|
||||||
health = fields.get(FieldStore.Entity.MAX_HEALTH)
|
health = fields.get(FieldStore.Entity.MAX_HEALTH)
|
||||||
energy = fields.get(FieldStore.Entity.MAX_ENERGY)
|
energy = fields.get(FieldStore.Entity.MAX_ENERGY)
|
||||||
|
|||||||
Reference in New Issue
Block a user