mirror of
https://github.com/Rundll86/Dog-Lynx-And-HCN.git
synced 2026-07-09 03:22:53 +08:00
feat: 增加Chick角色的远程攻击逻辑,优化攻击方式选择
This commit is contained in:
@@ -8,3 +8,14 @@ static func follow(entity: EntityBase, target: EntityBase, minDistance: float =
|
|||||||
entity.move(-delta)
|
entity.move(-delta)
|
||||||
else:
|
else:
|
||||||
entity.move(delta)
|
entity.move(delta)
|
||||||
|
static func distanceAttack(entity: EntityBase, target: EntityBase, minDistance: float, maxDistance: float, index: int = 0):
|
||||||
|
var distance = (entity.position - target.position).length()
|
||||||
|
if minDistance <= distance and distance <= maxDistance:
|
||||||
|
entity.tryAttack(index)
|
||||||
|
static func distanceAction(entity: EntityBase, target: EntityBase, minDistance: float, maxDistance: float, action: Callable):
|
||||||
|
var distance = (entity.position - target.position).length()
|
||||||
|
if minDistance <= distance and distance <= maxDistance:
|
||||||
|
action.call()
|
||||||
|
static func weightAttack(entity: EntityBase, indexes: Array[int], weight: Array[int], chargeUp: Callable):
|
||||||
|
var method = MathTool.randc_from_weights(indexes, weight)
|
||||||
|
entity.tryAttack(method, chargeUp.call(method))
|
||||||
|
|||||||
@@ -18,13 +18,12 @@ func spawn():
|
|||||||
|
|
||||||
func ai():
|
func ai():
|
||||||
PresetEntityAI.follow(self, currentFocusedBoss, 0)
|
PresetEntityAI.follow(self, currentFocusedBoss, 0)
|
||||||
if currentFocusedBoss.position.distance_to(position) < 200:
|
PresetEntityAI.distanceAttack(self, currentFocusedBoss, 0, 200, 2)
|
||||||
tryAttack(2)
|
PresetEntityAI.distanceAttack(self, currentFocusedBoss, 200, 700, 1)
|
||||||
elif currentFocusedBoss.position.distance_to(position) < 700:
|
PresetEntityAI.distanceAction(self, currentFocusedBoss, 700, INF,
|
||||||
tryAttack(1)
|
func():
|
||||||
else:
|
PresetEntityAI.weightAttack(self, [0, 3], [5, 1], func(index): return index == 3)
|
||||||
var method = MathTool.randc_from([0, 0, 0, 0, 3])
|
)
|
||||||
tryAttack(method, method == 3)
|
|
||||||
func attack(type):
|
func attack(type):
|
||||||
if type == 0:
|
if type == 0:
|
||||||
var weaponPos = findWeaponAnchor("normal")
|
var weaponPos = findWeaponAnchor("normal")
|
||||||
|
|||||||
@@ -9,6 +9,12 @@ static func randv2_range(offset: float):
|
|||||||
)
|
)
|
||||||
static func randc_from(array: Array):
|
static func randc_from(array: Array):
|
||||||
return array[randi() % array.size()]
|
return array[randi() % array.size()]
|
||||||
|
static func randc_from_weights(indexes: Array, weights: Array[int]):
|
||||||
|
var totals: Array = []
|
||||||
|
for i in indexes:
|
||||||
|
for j in range(weights[i]):
|
||||||
|
totals.append(i)
|
||||||
|
return randc_from(totals)
|
||||||
static func signBeforeStr(value: float):
|
static func signBeforeStr(value: float):
|
||||||
return ("+" if value > 0 else "-" if value < 0 else "") + str(abs(value))
|
return ("+" if value > 0 else "-" if value < 0 else "") + str(abs(value))
|
||||||
static func percent(value: float):
|
static func percent(value: float):
|
||||||
|
|||||||
Reference in New Issue
Block a user