diff --git a/scripts/Contents/Characters/Kernyr.gd b/scripts/Contents/Characters/Kernyr.gd index 70c1e22..7472326 100644 --- a/scripts/Contents/Characters/Kernyr.gd +++ b/scripts/Contents/Characters/Kernyr.gd @@ -39,7 +39,8 @@ func attack(type: int): var anchor = currentFocusedBoss.position var radius = 600 await sprintTo(anchor + Vector2(0, -radius), 0.1) - await TickTool.millseconds(2000) + await TickTool.millseconds(500) + await chargeUp() var count = 10.0 for i in count: await sprintTo(anchor + Vector2.from_angle(deg_to_rad(i / count * 360.0 - 90)) * radius, 0.5) @@ -51,4 +52,5 @@ func attack(type: int): ): if bullet is YangyiBullet: bullet.look_at(anchor) - await TickTool.millseconds(3000) + await TickTool.millseconds(2000) + await chargeUp() diff --git a/scripts/Statemachine/EntityBase.gd b/scripts/Statemachine/EntityBase.gd index 82cb9b7..0e04c5a 100644 --- a/scripts/Statemachine/EntityBase.gd +++ b/scripts/Statemachine/EntityBase.gd @@ -203,6 +203,11 @@ func _physics_process(_delta: float) -> void: velocity += inertia inertia *= 0.9 move_and_slide() + var collision = get_last_slide_collision() + if is_instance_valid(collision): + inertia = inertia.bounce(collision.get_normal()) + targetableSprinting = false + sprinting = false storeEnergy(randf_range(0.01, 0.05 + fields.get(FieldStore.Entity.ENERGY_REGENERATION) - 1), true) trailParticle.emitting = trailing for cycler in cycleTimers.values(): @@ -339,9 +344,7 @@ func tryAttack(type: int, needChargeUp: bool = false): state = cooldownTimer.start() if state: if needChargeUp: - charginup = true - await EffectController.create(ComponentManager.getEffect("AttackStar"), damageAnchor.global_position).shot() - charginup = false + await chargeUp() for attackingState in attackingStates: if attackingState in attackMutexes: return false @@ -356,6 +359,10 @@ func tryAttack(type: int, needChargeUp: bool = false): playSound("attack" + str(type)) attackingStates.erase(type) return state +func chargeUp(): + charginup = true + await EffectController.create(ComponentManager.getEffect("AttackStar"), damageAnchor.global_position).shot() + charginup = false func trySprint(): trailing = true playSound("sprint") @@ -370,7 +377,7 @@ func sprintTo(target: Vector2, speed: float): await TickTool.until( func(): position += (target - position) * speed - return position.distance_to(target) < 10 + return position.distance_to(target) < 10 || !targetableSprinting ) position = target trailing = false