Esempio n. 1
0
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)
Esempio n. 2
0
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)
Esempio n. 3
0
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)