From e44355bf215283869384eb2eab55a6d49ab094e6 Mon Sep 17 00:00:00 2001 From: Sheldan <5037282+Sheldan@users.noreply.github.com> Date: Sat, 30 Aug 2025 19:30:49 +0200 Subject: [PATCH] survivors: fixing homing projectiles behaving correctly after losing the target --- absurd-survivors/src/base.ts | 6 +++++- absurd-survivors/src/main.ts | 2 +- absurd-survivors/src/projectile.ts | 6 +++--- absurd-survivors/src/weapons.ts | 2 +- 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/absurd-survivors/src/base.ts b/absurd-survivors/src/base.ts index 456df9e..496737a 100644 --- a/absurd-survivors/src/base.ts +++ b/absurd-survivors/src/base.ts @@ -54,8 +54,12 @@ export class Vector { return (this._x * vector._x + this._y * vector._y) / Math.pow(vector.vecLength(), 2); } + dotProduct2(vector: Vector): number { + return (this._x * vector._x + this._y * vector._y) + } + angleTo(vector: Vector): number { - return Math.acos(this.dotProduct(vector)) + return Math.acos(this.dotProduct2(vector) / (this.vecLength() * vector.vecLength())) } get x(): number { diff --git a/absurd-survivors/src/main.ts b/absurd-survivors/src/main.ts index cb4e2b0..10bebdf 100644 --- a/absurd-survivors/src/main.ts +++ b/absurd-survivors/src/main.ts @@ -122,7 +122,7 @@ docReady(function () { }, 10_000) player.addWeapon(Pistol.generatePistol(world)) - player.addWeapon(HomingPistol.generatePistol(world)) + player.addWeapon(HomingPistol.generateHomingPistol(world)) hud = new HUD(world); diff --git a/absurd-survivors/src/projectile.ts b/absurd-survivors/src/projectile.ts index ee1bb3f..df0eee3 100644 --- a/absurd-survivors/src/projectile.ts +++ b/absurd-survivors/src/projectile.ts @@ -144,7 +144,7 @@ export class HomingProjectile extends Projectile { if(target.dead()) { let closestTargetTo = this.world.getClosestTargetTo(this.position) - let newTargetDirection = Vector.createVector(this.target.getPosition(), this.position) + let oldTargetDirection = Vector.createVector(this.target.getPosition(), this.position) let justMovedDirection = Vector.createVector(this.position, this.lastPosition).normalize() let olderMovedDirection: Vector; if(this.secondToLastPosition !== undefined) { @@ -155,8 +155,8 @@ export class HomingProjectile extends Projectile { if (closestTargetTo !== undefined && closestTargetTo[1] !== undefined) { let newTargetPosition = closestTargetTo[1]!.getPosition(); let newDir = Vector.createVector(newTargetPosition, this.position) - let newDirAngle = newDir.angleTo(newTargetDirection); - if(Math.abs(newDirAngle) >= toRad(150)) { + let newDirAngle = newDir.angleTo(oldTargetDirection); + if(Math.abs(newDirAngle) <= toRad(30)) { this.target = closestTargetTo[1]!; } else { if(pointOnLineWithinLine(this.target.getPosition(), this.lastPosition, this.position)) { diff --git a/absurd-survivors/src/weapons.ts b/absurd-survivors/src/weapons.ts index 925c108..723da7c 100644 --- a/absurd-survivors/src/weapons.ts +++ b/absurd-survivors/src/weapons.ts @@ -100,7 +100,7 @@ export class HomingPistol extends RangeWeapon { } } - static generatePistol(world: World, offset?: Vector) { + static generateHomingPistol(world: World, offset?: Vector) { if(!offset) { offset = new Vector(5, 5) }