diff --git a/core/src/main/scala/org/sgine/component/Targeting.scala b/core/src/main/scala/org/sgine/component/Targeting.scala index 90a3901..97b8dc1 100644 --- a/core/src/main/scala/org/sgine/component/Targeting.scala +++ b/core/src/main/scala/org/sgine/component/Targeting.scala @@ -7,21 +7,15 @@ import reactify.Val * Targeting mix-in provides convenience functionality to target nearby */ trait Targeting[Target <: Component] extends Component { - lazy val nearestTargets: Val[List[Target]] = Val { - targets.sortBy(calculateDistance) - } lazy val currentTarget: Val[Option[Target]] = Val { - nearestTargets() - .iterator - .takeWhile(c => calculateDistance(c) <= maxDistance && shouldTarget(c)) - .nextOption() + targets.find(c => shouldTarget(c, calculateDistance(c))) } protected def maxDistance: Double - protected def shouldTarget(c: Target): Boolean = true + protected def shouldTarget(c: Target, distance: Double): Boolean = distance <= maxDistance protected def calculateDistance(c: Target): Double = MathUtils.distanceFromCenter(this, c) - protected def targets: List[Target] + protected def targets: Seq[Target] } diff --git a/core/src/main/scala/org/sgine/util/MathUtils.scala b/core/src/main/scala/org/sgine/util/MathUtils.scala index 769684c..a8bb24b 100644 --- a/core/src/main/scala/org/sgine/util/MathUtils.scala +++ b/core/src/main/scala/org/sgine/util/MathUtils.scala @@ -1,7 +1,7 @@ package org.sgine.util import com.badlogic.gdx.math.{Intersector, Vector2} -import org.sgine.component.{Component, DimensionedSupport} +import org.sgine.component.Component object MathUtils { private lazy val t1: Vector2 = new Vector2() diff --git a/core/src/test/scala/examples/TargetingExample.scala b/core/src/test/scala/examples/TargetingExample.scala index 8fae173..66e1a1b 100644 --- a/core/src/test/scala/examples/TargetingExample.scala +++ b/core/src/test/scala/examples/TargetingExample.scala @@ -29,7 +29,7 @@ object TargetingExample extends Example { override protected def maxDistance: Double = 500.0 - override protected def targets: List[Enemy] = enemies + override protected def targets: List[Enemy] = nearest() private lazy val image = new Image("basketball.png") private lazy val drawing = new Image {