def seek(agent, targetPosition): maxSpeed = agent.getMaxSpeed() agentPosition = agent.getPosition() agentVelocity = agent.getVelocity() agentToTarget = calculate.subtractPoints(targetPosition, agentPosition) desiredVelocity = vector.setMagnitude(agentToTarget, maxSpeed) return calculate.subtractVectors(desiredVelocity, agentVelocity)
def flee(agent, targetPosition, evadeDistanceSquared=None): steeringController = agent.getSteeringController() agentPosition = agent.getPosition() agentMaxSpeed = agent.getMaxSpeed() agentVelocity = agent.getVelocity() agentToTarget = calculate.subtractPoints(agentPosition, targetPosition) distanceSquaredToTarget = vector.getMagnitudeSquared(agentToTarget) if (evadeDistanceSquared is not None and distanceSquaredToTarget > evadeDistanceSquared): return (0, 0) desiredVelocity = vector.setMagnitude(agentToTarget, agentMaxSpeed) return calculate.subtractVectors(desiredVelocity, agentVelocity)
def arrive(agent, targetPosition, decelerationFactor=None): steeringController = agent.getSteeringController() if decelerationFactor is None: decelerationFactor = steeringController.decelerationFactor agentPosition = agent.getPosition() agentToTarget = calculate.subtractPoints(targetPosition, agentPosition) distanceToTarget = vector.getMagnitude(agentToTarget) if round(distanceToTarget) > 0: agentMaxSpeed = agent.getMaxSpeed() agentVelocity = agent.getVelocity() speed = distanceToTarget / decelerationFactor speed = min(speed, agentMaxSpeed) desiredVelocity = calculate.multiplyVectorAndScalar(agentToTarget, speed / distanceToTarget) return calculate.subtractVectors(desiredVelocity, agentVelocity) else: return (0, 0)