Source code for jupedsim.agent

# Copyright © 2012-2023 Forschungszentrum Jülich GmbH
# SPDX-License-Identifier: LGPL-3.0-or-later

import jupedsim.native as py_jps
from jupedsim.models import (
    CollisionFreeSpeedModelState,
    GeneralizedCentrifugalForceModelState,
)


[docs]class Agent: """Represents an Agent in the simulation. Agent objects are always retrieved from the simulation and never created directly. Agents can be accessed with: .. code:: python # a specific agent sim.agent(id) # all agents as iterator sim.agents() # agents in a specific distance to a point as iterator sim.agents_in_range(position, distance) # agents in a polygon as iterator sim.agents_in_polygon(polygon) .. note :: You need to be aware that currently there are no checks done when setting properties on an Agent instance. For example it is possible to set an Agent position outside the walkable area of the Simulation resulting in a crash. """ def __init__(self, backing) -> None: """Do not use. Retrieve agents from the simulation. """ self._obj = backing @property
[docs] def id(self) -> int: """Numeric id of the agent in this simulation.""" return self._obj.id
@property
[docs] def journey_id(self) -> int: """Id of the :class:`~jupedsim.journey.JourneyDescription` the agent is currently following.""" return self._obj.journey_id
@property
[docs] def stage_id(self) -> int: """Id of the :class:`Stage` the Agent is currently targeting.""" return self._obj.stage_id
@property
[docs] def position(self) -> tuple[float, float]: """Position of the agent.""" return self._obj.position
@property
[docs] def orientation(self) -> tuple[float, float]: """Orientation of the agent.""" return self._obj.orientation
@property
[docs] def model( self, ) -> GeneralizedCentrifugalForceModelState | CollisionFreeSpeedModelState: """Access model specific state of this agent.""" model = self._obj.model if isinstance(model, py_jps.GeneralizedCentrifugalForceModelState): return GeneralizedCentrifugalForceModelState(model) elif isinstance(model, py_jps.CollisionFreeSpeedModelState): return CollisionFreeSpeedModelState(model) else: raise Exception("Internal error")