mirror of
https://github.com/Rundll86/Dog-Lynx-And-HCN.git
synced 2026-05-28 06:51:54 +08:00
6e0d0ad89b
为EntityBase添加getCycleTimer方法以直接获取计时器 修改CycleTimer的forceFilter方法以检查子弹是否正在销毁 更新InfinitySword的hitBullet逻辑以处理内部伤害子弹
37 lines
991 B
GDScript
37 lines
991 B
GDScript
class_name CycleTimer
|
|
|
|
@export var period: float = 1
|
|
|
|
var startTime: float = 0
|
|
var running: bool = false
|
|
var distance: float = 200
|
|
var bullets: Array[BulletBase] = []
|
|
|
|
func start():
|
|
startTime = WorldManager.getTime()
|
|
running = true
|
|
func lifetime():
|
|
return WorldManager.getTime() - startTime
|
|
func getStateAngle(index: int):
|
|
return lifetime() / period * deg_to_rad(360) - deg_to_rad(360.0 * index / len(bullets))
|
|
func forceFilter():
|
|
bullets = bullets.filter(
|
|
func(b):
|
|
if b is BulletBase:
|
|
return !b.destroying
|
|
else:
|
|
return false
|
|
)
|
|
func apply(where: Vector2):
|
|
forceFilter()
|
|
for index in len(bullets):
|
|
var bullet = bullets[index]
|
|
var newStateAngle = lerp_angle(bullet.cycleStateAngle, getStateAngle(index), 0.1)
|
|
var offset = Vector2.from_angle(newStateAngle)
|
|
bullet.cycleStateAngle = newStateAngle
|
|
offset.y *= 0.25
|
|
bullet.position = where + offset * distance
|
|
bullet.scale = Vector2.ONE * (1 + offset.y)
|
|
func host(bullet: BulletBase):
|
|
bullets.append(bullet)
|