mirror of
https://github.com/Rundll86/Dog-Lynx-And-HCN.git
synced 2026-06-10 13:47:12 +08:00
feat(障碍物系统): 添加草墙障碍物及相关功能
实现草墙障碍物系统,包括以下主要变更: - 新增草墙障碍物资源、脚本和场景 - 添加障碍物状态显示UI - 扩展组件管理器支持障碍物类型 - 修改子弹系统以支持对障碍物的碰撞检测 - 调整实体碰撞层设置 - 为公鸡角色添加草墙武器 新增功能允许玩家放置可阻挡敌人的草墙障碍物,并显示其生命值状态
This commit is contained in:
@@ -44,7 +44,8 @@ func _ready():
|
||||
launcherSummoned = launcher
|
||||
launcher = launcher.myMaster
|
||||
register()
|
||||
area_entered.connect(hit)
|
||||
area_entered.connect(hitEntity)
|
||||
body_entered.connect(hitObstacle)
|
||||
spawnInWhen = WorldManager.getTime()
|
||||
spawnInWhere = position
|
||||
spawn()
|
||||
@@ -107,16 +108,31 @@ func setupCuttable(cutSpeed: float):
|
||||
)
|
||||
func getDamage():
|
||||
return baseDamage * damageMultipliers[usingDamageMultiplier]
|
||||
func hit(target: Node):
|
||||
func calculateDamage(crit: bool):
|
||||
var baseDmg = getDamage() * launcher.fields.get(FieldStore.Entity.DAMAGE_MULTIPILER) * randf_range(1 - GameRule.damageOffset, 1 + GameRule.damageOffset)
|
||||
var damage = baseDmg + baseDmg * int(crit) * launcher.fields.get(FieldStore.Entity.CRIT_DAMAGE)
|
||||
return damage
|
||||
func determineCrit():
|
||||
return MathTool.rate(launcher.fields.get(FieldStore.Entity.CRIT_RATE) + GameRule.critRateInfluenceByLuckValue * launcher.fields[FieldStore.Entity.LUCK_VALUE])
|
||||
func hitEntity(target: Node):
|
||||
var entity: EntityBase = EntityTool.fromHurtbox(target)
|
||||
if !BulletTool.canDamage(self, entity): return
|
||||
var resultDamage = entity.bulletHit(self, MathTool.rate(launcher.fields.get(FieldStore.Entity.CRIT_RATE) + GameRule.critRateInfluenceByLuckValue * launcher.fields[FieldStore.Entity.LUCK_VALUE]))
|
||||
var resultDamage = entity.bulletHit(self, determineCrit())
|
||||
succeedToHit(resultDamage, entity)
|
||||
if MathTool.rate(fullPenerate()):
|
||||
penerate -= entity.fields[FieldStore.Entity.PENARATION_RESISTANCE]
|
||||
if MathTool.rate(fullPenerate() - entity.fields[FieldStore.Entity.PENARATION_RESISTANCE]):
|
||||
baseDamage *= 1.0 - penerateDamageReduction
|
||||
else:
|
||||
tryDestroy()
|
||||
func hitObstacle(target: Node):
|
||||
if target is ObstacleBase:
|
||||
var obstacle = target as ObstacleBase
|
||||
if is_instance_valid(obstacle.launcher):
|
||||
if not BulletTool.canDamage(self, obstacle.launcher): return
|
||||
obstacle.takeDamage(calculateDamage(determineCrit()))
|
||||
if MathTool.rate(fullPenerate() - obstacle.penerateResistance):
|
||||
baseDamage *= 1.0 - penerateDamageReduction
|
||||
else:
|
||||
tryDestroy()
|
||||
func forward(direction: Vector2):
|
||||
position += direction.normalized() * speed * GameRule.bulletSpeedMultiplier
|
||||
func fullPenerate():
|
||||
|
||||
Reference in New Issue
Block a user