|
Tramway SDK v0.1.1
|
Serialization, i.e. More...
Namespaces | |
| namespace | Async |
| Multi-threading and Resource streaming. | |
| namespace | Audio |
| System for doing audio related stuff. | |
| namespace | Core |
| namespace | Ext |
| namespace | GUI |
| Immediate mode GUI system. | |
| namespace | implementation |
| namespace | Language |
| Localization services. | |
| namespace | Loader |
| WorldCell streaming. | |
| namespace | Physics |
| namespace | Platform |
| namespace | Render |
| High-level Render system API. | |
| namespace | Script |
| Scripting API. | |
| namespace | ScriptableType |
| namespace | Settings |
| Application setting management and CLI command parser. | |
| namespace | Stats |
| Resource usage statistics. | |
| namespace | System |
| System tracking. | |
| namespace | UI |
| User interface system. | |
Classes | |
| class | AABBTree |
| class | AnimationComponent |
| Plays back Animations. More... | |
| class | AudioComponent |
| Plays back Sounds. More... | |
| class | Component |
| Wrapper for an EntityComponent pointer. More... | |
| class | ControllerComponent |
| Provides an API for character controllers. More... | |
| class | Crate |
| 3D Model with a rigidbody attached to it. More... | |
| class | DecalComponent |
| Projects decals onto the scene. More... | |
| class | Decoration |
| 3D Model with an AnimationComponent attached to it. More... | |
| class | DiskReader |
| class | DiskWriter |
| struct | Edge |
| class | Entity |
| Entity base class. More... | |
| class | EntityComponent |
| Component base class. More... | |
| struct | EntityTypeInfo |
| struct | Event |
| Event data. More... | |
| class | EventListener |
| Smart wrapper class for Event listeners. More... | |
| struct | File |
| Very fast file reader/writer. More... | |
| class | FileReader |
| class | FileReaderParser |
| struct | FileSource |
| class | FileWriter |
| class | FileWriterParser |
| class | FPSControllerComponent |
| Implementation of an FPS-style character controller. More... | |
| class | Graph |
| class | Hashmap |
| class | Light |
| LightComponent wrapper. More... | |
| class | LightComponent |
| Provides a real-time illumination for the scene. More... | |
| struct | ListenerInfo |
| class | Marker |
| Functionally inert. More... | |
| struct | Message |
| Message data. More... | |
| class | Navmesh |
| Not fully implemented yet. More... | |
| struct | NavmeshNode |
| struct | Node |
| class | Octree |
| class | ParticleComponent |
| Provides amusing graphical effects. More... | |
| class | Path |
| Base class for graphs. More... | |
| struct | PathEdgeInfo |
| class | PathFollower |
| Point constrained to a Path. More... | |
| class | PhysicsComponent |
| Rigidbody wrapper. More... | |
| class | Player |
| ControllerComponent with a PlayerComponent attached to it. More... | |
| class | PlayerComponent |
| Translates keyboard/mouse inputs into inputs for ControllerComponent. More... | |
| class | Pool |
| class | PoolProxy |
| class | PoolPtr |
| class | Queue |
| Simple queue implementation. More... | |
| class | RaycastControllerComponent |
| Implementation of a simple character controller. More... | |
| class | RenderComponent |
| Renders a Model. More... | |
| class | Resource |
| class | ResourceProxy |
| class | Scriptable |
| Provides script language subclassing. More... | |
| struct | SharedEntityData |
| Basic Entity parameters. More... | |
| struct | Signal |
| Message template. More... | |
| class | SignalTable |
| List of Message templates. More... | |
| class | Sound |
| AudioComponent wrapper. More... | |
| class | Spinlock |
| class | SpriteComponent |
| Provides amusing graphical effects. More... | |
| class | Stack |
| class | StackPool |
| Allocator. More... | |
| class | StaticWorldObject |
| Worldspawn. More... | |
| class | TemplateComponent |
| class | TextReaderParser |
| class | TextWriterParser |
| class | Transition |
| Connects WorldCells together. More... | |
| class | Trigger |
| TriggerComponent wrapper. More... | |
| class | TriggerComponent |
| Trigger wrapper. More... | |
| struct | UID |
| Interned string type. More... | |
| class | Value |
| Generic, type-safe union. More... | |
| class | ValueArray |
| class | ValuePtr |
| struct | WorldCell |
| World streaming unit. More... | |
Typedefs | |
| typedef void(* | collision_callback) (TriggerComponent *, Physics::Collision) |
| typedef bool(* | filter_callback) (TriggerComponent *, PhysicsComponent *) |
| typedef uint32_t | id_t |
| typedef Entity *(* | entity_make) (const SharedEntityData &, const ValueArray &) |
| typedef void(* | entity_clear) (Entity *) |
| typedef uint16_t | event_t |
| typedef uint32_t | listener_t |
| typedef Value | value_t |
| typedef glm::vec3 | vec3 |
| typedef glm::quat | quat |
| typedef glm::mat2 | mat2 |
| typedef glm::mat4 | mat4 |
| typedef glm::vec4 | vec4 |
| typedef glm::vec2 | vec2 |
| typedef glm::ivec3 | ivec3 |
| typedef glm::ivec4 | ivec4 |
| typedef glm::uvec3 | uvec3 |
| typedef glm::uvec4 | uvec4 |
| typedef uint32_t | message_t |
| typedef uint32_t | node_id_t |
| typedef uint32_t | signal_t |
| typedef UID | name_t |
| typedef ValueArray | valuearray_t |
| template<typename T > | |
| using | PoopProxy = PoolProxy< T > |
Enumerations | |
| enum | { FIELD_MODEL , FIELD_COLLMODEL } |
| enum | : uint32_t { FLAG_LOCKED = 1 } |
| enum | { FIELD_FLAGS , FIELD_MODEL , FIELD_ANIMATION } |
| enum | { FIELD_COLOR , FIELD_DISTANCE , FIELD_DIRECTION , FIELD_EXPONENT } |
| enum | { SOUND_LOOPING = 1 , SOUND_START_ON_LOAD = 2 } |
| enum | { FIELD_FLAGS , FIELD_SOUND , FIELD_VOLUME } |
| enum | { FIELD_MODEL , FIELD_LIGHTMAP } |
| enum | : uint32_t { TRIGGER_DISABLED = 1 } |
| enum | { FIELD_FLAGS , FIELD_COLLISION_MASK , FIELD_MODEL } |
| enum class | Severity { INFO , WARNING , ERROR , CRITICAL_ERROR , DEFAULT } |
| enum | PathType { PATH_STRAIGHT , PATH_LEFT , PATH_RIGHT , PATH_LINEAR , PATH_CURVE } |
| enum | Type : uint32_t { TYPE_UNDEFINED , TYPE_BOOL , TYPE_NAME , TYPE_STRING , TYPE_INT8 , TYPE_INT16 , TYPE_INT32 , TYPE_UINT8 , TYPE_UINT16 , TYPE_UINT32 , TYPE_FLOAT32 , TYPE_VEC2 , TYPE_VEC3 , TYPE_VEC4 , TYPE_QUAT } |
| Type enumeration for serialization, etc. More... | |
| enum class | FileStatus { IO_ERROR , READY } |
| enum class | FileMedium { DISK , USER , ARCHIVE , HTTP } |
Functions | |
| id_t | GenerateID () |
| Generates a unique ID number. More... | |
| uint32_t | GetTick () |
| Returns the current tick. More... | |
| uint32_t | GetFrame () |
| Returns the current frame. More... | |
| uint32_t | GetDeltaTick () |
| Returns the tick delta. More... | |
| double | GetTickTime () |
| Same as GetFrameTime() More... | |
| double | GetFrameTime () |
| Returns the time at the start of the current frame. More... | |
| float | GetDeltaTime () |
| Returns the time passed between frames. More... | |
| const char * | GetVersion () |
| Returns the version identifier of the runtime. More... | |
| void | SetSystemLoggingSeverity (System::system_t system, Severity min_severity) |
| Sets the logging severity filter. More... | |
| void | SetDisplayLogCallback (void(*callback)(int, const char *)) |
| Sets the display log callback. More... | |
| void | SetConsoleLogCallback (void(*callback)(int, const char *)) |
| Sets the console log callback. More... | |
| void | SetDisplayLogCallback (void(int, const char *)) |
| void | SetConsoleLogCallback (void(int, const char *)) |
| template<typename... Args> | |
| void | Log (Severity severity, System::system_t system, const std::string_view &format, Args &&... args) |
| template<typename... Args> | |
| void | Log (System::system_t system, const std::string_view &format, Args &&... args) |
| template<typename... Args> | |
| void | Log (const std::string_view &format, Args &&... args) |
| template<typename... Args> | |
| void | DisplayLog (int time, const std::string_view &format, Args &&... args) |
| void | QuatLookAt (quat &quaternion, const vec3 &from, const vec3 &to) |
| Rotates a quaternion to face a point. More... | |
| void | ProjectLine (vec3 &point, const vec3 &from, const vec3 &to) |
| Projects a point on a line. More... | |
| vec3 | RayTriangleIntersection (vec3 ray_pos, vec3 ray_dir, vec3 point1, vec3 point2, vec3 point3) |
| Finds the intersection between a ray and a triangle. More... | |
| vec3 | MergeAABBMin (vec3 a, vec3 b) |
| Merges the min component of an AABB. More... | |
| vec3 | MergeAABBMax (vec3 a, vec3 b) |
| Merges the max component of an AABB. More... | |
| void | RotateAABB (vec3 &min, vec3 &max, quat rotation) |
| Rotates an AABB box by the given rotation. More... | |
| void | RotateAABB (vec3 &min, vec3 &max, mat4 rotation) |
| mat4 | PositionRotationToMatrix (const vec3 &position, const quat &rotation) |
| Generates a transform matrix. More... | |
| mat4 | PositionRotationScaleToMatrix (const vec3 &position, const quat &rotation, const vec3 &scale) |
| Generates a transform matrix. More... | |
| const vec3 | DIRECTION_FORWARD (0.0f, 0.0f, -1.0f) |
| const vec3 | DIRECTION_SIDE (1.0f, 0.0f, 0.0f) |
| const vec3 | DIRECTION_UP (0.0f, 1.0f, 0.0f) |
| const vec3 | IDENTITY_POSITION (0.0f, 0.0f, 0.0f) |
| const quat | IDENTITY_ROTATION (1.0f, 0.0f, 0.0f, 0.0f) |
| const vec3 | IDENTITY_SCALE (1.0f, 1.0f, 1.0f) |
| const char * | TypeToString (Type type) |
| Converts type enum to string. More... | |
Variables | |
| const uint32_t | MAX_MATERIAL_TYPES = 20 |
| const uint32_t | MAX_VERTEX_FORMATS = 20 |
| const uint32_t | MAX_VERTEX_SHADERS = 20 |
| const uint32_t | MAX_FRAGMENT_SHADERS = 20 |
| const uint32_t | MAX_LINKED_SHADERS = 40 |
| const float | TICK_RATE = 1.0f / 60.0f |
| const float | CAMERA_MULTIPLIER = 1.0f / 8.0f |
| const float | PHYSICS_GROUND_PLANE = -9.0f |
| const float | PHYSICS_GRAVITY = -9.8f |
| const uint32_t | RESOURCE_LIMIT_SOUND = 100 |
| const uint32_t | RESOURCE_LIMIT_MODEL = 100 |
| const uint32_t | RESOURCE_LIMIT_PATH = 100 |
| const uint32_t | RESOURCE_LIMIT_COLLISION_MODEL = 500 |
| const uint32_t | RESOURCE_LIMIT_MATERIAL = 500 |
| const uint32_t | RESOURCE_LIMIT_SPRITE = 500 |
| const uint32_t | RESOURCE_LIMIT_LIGHT_GRAPH = 250 |
| const uint32_t | RESOURCE_LIMIT_SOUND_GRAPH = 250 |
| const uint32_t | COMPONENT_LIMIT_ANIMATION = 50 |
| const uint32_t | COMPONENT_LIMIT_AUDIO = 150 |
| const uint32_t | COMPONENT_LIMIT_CONTROLLER = 25 |
| const uint32_t | COMPONENT_LIMIT_LIGHT = 250 |
| const uint32_t | COMPONENT_LIMIT_PARTICLE = 100 |
| const uint32_t | COMPONENT_LIMIT_PHYSICS = 500 |
| const uint32_t | COMPONENT_LIMIT_PLAYER = 5 |
| const uint32_t | COMPONENT_LIMIT_RENDER = 1000 |
| const uint32_t | COMPONENT_LIMIT_SPRITE = 100 |
| const uint32_t | COMPONENT_LIMIT_DECAL = 100 |
| const uint32_t | COMPONENT_LIMIT_TRIGGER = 50 |
| const size_t | PATH_LIMIT = 200 |
| const size_t | SYSTEM_LIMIT = 128 |
| const uint32_t | SCRIPTABLE_ENTITY_TYPE_LIMIT = 50 |
| const uint32_t | ENTITY_TYPE_LIMIT = 50 |
| const uint32_t | RESOURCE_LOADER_QUEUE_LIMIT = 1000 |
| const uint32_t | RESOURCE_LOADER_REQUEST_LIMIT = 1750 |
| const uint32_t | ENTITY_LIMIT = 5000 |
| const uint32_t | NAMED_ENTITY_LIMIT = 500 |
| const uint32_t | LANUGAGE_STRING_CHARACTER_LIMIT = 10000 |
| const uint32_t | LANGUAGE_STRING_LIMIT = 500 |
| const uint32_t | MESSAGE_QUEUE_LIMIT = 500 |
| const uint32_t | MESSAGE_PRIORITY_QUEUE_LIMIT = 250 |
| const uint32_t | MESSAGE_DATA_LIMIT = 2000 |
| const uint32_t | MESSAGE_TYPE_LIMIT = 100 |
| const uint32_t | SIGNAL_TYPE_LIMIT = 100 |
| const uint32_t | WORLDCELL_TRANSITION_LIMIT = 250 |
| const uint32_t | KEYBOARDACTION_LIMIT = 100 |
| const uint32_t | UID_CHARACTER_LIMIT = 20000 |
| const uint32_t | UID_LIMIT = 2000 |
| const uint32_t | WORLDCELL_LIMIT = 250 |
| const uint32_t | RIGIDBODY_LIMIT = 500 |
| const uint32_t | EXT_KITCHENSINK_ANIMATIONTABLE_LIMIT = 100 |
| const uint32_t | EXT_KITCHENSINK_SOUNDTABLE_LIMIT = 100 |
| const float | collision_width = 0.35f |
| const float | collision_height = 1.85f |
| const float | collision_height_crouch = 0.5f |
| const uint32_t | collision_group = Physics::COLL_PLAYER |
| const size_t | MAX_EVENT_TYPES = 100 |
Serialization, i.e.
saving application state is not implemented yet.
I will probably get around to it sometime.
| typedef void(* tram::collision_callback) (TriggerComponent *, Physics::Collision) |
| typedef void(* tram::entity_clear) (Entity *) |
| typedef Entity *(* tram::entity_make) (const SharedEntityData &, const ValueArray &) |
| typedef uint16_t tram::event_t |
| typedef bool(* tram::filter_callback) (TriggerComponent *, PhysicsComponent *) |
| typedef uint32_t tram::id_t |
| typedef glm::ivec3 tram::ivec3 |
| typedef glm::ivec4 tram::ivec4 |
| typedef uint32_t tram::listener_t |
| typedef glm::mat2 tram::mat2 |
| typedef glm::mat4 tram::mat4 |
| typedef uint32_t tram::message_t |
| typedef UID tram::name_t |
| typedef uint32_t tram::node_id_t |
| using tram::PoopProxy = typedef PoolProxy<T> |
| typedef glm::quat tram::quat |
| typedef uint32_t tram::signal_t |
| typedef glm::uvec3 tram::uvec3 |
| typedef glm::uvec4 tram::uvec4 |
| typedef Value tram::value_t |
| typedef ValueArray tram::valuearray_t |
| typedef glm::vec2 tram::vec2 |
| typedef glm::vec3 tram::vec3 |
| typedef glm::vec4 tram::vec4 |
|
strong |
|
strong |
| enum tram::PathType |
|
strong |
| enum tram::Type : uint32_t |
| const vec3 tram::DIRECTION_FORWARD | ( | 0. | 0f, |
| 0. | 0f, | ||
| -1. | 0f | ||
| ) |
| const vec3 tram::DIRECTION_SIDE | ( | 1. | 0f, |
| 0. | 0f, | ||
| 0. | 0f | ||
| ) |
| const vec3 tram::DIRECTION_UP | ( | 0. | 0f, |
| 1. | 0f, | ||
| 0. | 0f | ||
| ) |
| void tram::DisplayLog | ( | int | time, |
| const std::string_view & | format, | ||
| Args &&... | args | ||
| ) |
| id_t tram::GenerateID | ( | ) |
Generates a unique ID number.
| uint32_t tram::GetDeltaTick | ( | ) |
Returns the tick delta.
If multiple ticks have occured between calls to Core::Update(), this value will reflect that.
| float tram::GetDeltaTime | ( | ) |
Returns the time passed between frames.
This value changes only when Core::Update() is called.
| uint32_t tram::GetFrame | ( | ) |
Returns the current frame.
| double tram::GetFrameTime | ( | ) |
Returns the time at the start of the current frame.
This value changes only when Core::Update() is called.
| uint32_t tram::GetTick | ( | ) |
Returns the current tick.
This value gets incremented at a rate of 60 ticks per second.
| double tram::GetTickTime | ( | ) |
Same as GetFrameTime()
| const char * tram::GetVersion | ( | ) |
Returns the version identifier of the runtime.
| const vec3 tram::IDENTITY_POSITION | ( | 0. | 0f, |
| 0. | 0f, | ||
| 0. | 0f | ||
| ) |
| const quat tram::IDENTITY_ROTATION | ( | 1. | 0f, |
| 0. | 0f, | ||
| 0. | 0f, | ||
| 0. | 0f | ||
| ) |
| const vec3 tram::IDENTITY_SCALE | ( | 1. | 0f, |
| 1. | 0f, | ||
| 1. | 0f | ||
| ) |
| void tram::Log | ( | const std::string_view & | format, |
| Args &&... | args | ||
| ) |
| void tram::Log | ( | Severity | severity, |
| System::system_t | system, | ||
| const std::string_view & | format, | ||
| Args &&... | args | ||
| ) |
| void tram::Log | ( | System::system_t | system, |
| const std::string_view & | format, | ||
| Args &&... | args | ||
| ) |
| mat4 tram::PositionRotationScaleToMatrix | ( | const vec3 & | position, |
| const quat & | rotation, | ||
| const vec3 & | scale | ||
| ) |
Generates a transform matrix.
Generates a transform matrix.
Projects a point on a line.
| [in,out] | point | Point that will be projected. |
| [in] | from | First endpoint of the line. |
| [in] | to | Second endpoint of the line. |
Rotates a quaternion to face a point.
Useful for pointing objects at things.
| vec3 tram::RayTriangleIntersection | ( | vec3 | ray_pos, |
| vec3 | ray_dir, | ||
| vec3 | point1, | ||
| vec3 | point2, | ||
| vec3 | point3 | ||
| ) |
Finds the intersection between a ray and a triangle.
If the ray intersects the triangle, the returned vector will be the 3D coordinates of the intersection. If the ray does not intersect the triangle, the function will return a vector with all of its components set to the floating-point INFINITY.
| ray_pos | Ray origin, 3D coordinate. |
| ray_dir | Ray direction, normal vector. Needs to be normalized. |
| point1,point2,point3 | Triangle vertex coordinates. |
Rotates an AABB box by the given rotation.
| void tram::SetConsoleLogCallback | ( | void(*)(int, const char *) | callback | ) |
Sets the console log callback.
Whenever a message is written to console, it will alos be passed to the console log callback.
| void tram::SetConsoleLogCallback | ( | void(int, const char *) | ) |
| void tram::SetDisplayLogCallback | ( | void(*)(int, const char *) | callback | ) |
Sets the display log callback.
When a message is logged by calling DisplayLog(), it will be formatted and then the result will be passed in to the display log callback.
| void tram::SetDisplayLogCallback | ( | void(int, const char *) | ) |
| void tram::SetSystemLoggingSeverity | ( | System::system_t | system, |
| Severity | min_severity | ||
| ) |
Sets the logging severity filter.
| system | System for which the filter will apply. |
| min_severity | The lowest severity which the filter will let through All lower severities will be filtered out. |
| const char * tram::TypeToString | ( | Type | type | ) |
Converts type enum to string.
| const float tram::CAMERA_MULTIPLIER = 1.0f / 8.0f |
| const uint32_t tram::collision_group = Physics::COLL_PLAYER |
| const float tram::collision_height = 1.85f |
| const float tram::collision_height_crouch = 0.5f |
| const float tram::collision_width = 0.35f |
| const uint32_t tram::COMPONENT_LIMIT_ANIMATION = 50 |
| const uint32_t tram::COMPONENT_LIMIT_AUDIO = 150 |
| const uint32_t tram::COMPONENT_LIMIT_CONTROLLER = 25 |
| const uint32_t tram::COMPONENT_LIMIT_DECAL = 100 |
| const uint32_t tram::COMPONENT_LIMIT_LIGHT = 250 |
| const uint32_t tram::COMPONENT_LIMIT_PARTICLE = 100 |
| const uint32_t tram::COMPONENT_LIMIT_PHYSICS = 500 |
| const uint32_t tram::COMPONENT_LIMIT_PLAYER = 5 |
| const uint32_t tram::COMPONENT_LIMIT_RENDER = 1000 |
| const uint32_t tram::COMPONENT_LIMIT_SPRITE = 100 |
| const uint32_t tram::COMPONENT_LIMIT_TRIGGER = 50 |
| const uint32_t tram::ENTITY_LIMIT = 5000 |
| const uint32_t tram::ENTITY_TYPE_LIMIT = 50 |
| const uint32_t tram::EXT_KITCHENSINK_ANIMATIONTABLE_LIMIT = 100 |
| const uint32_t tram::EXT_KITCHENSINK_SOUNDTABLE_LIMIT = 100 |
| const uint32_t tram::KEYBOARDACTION_LIMIT = 100 |
| const uint32_t tram::LANGUAGE_STRING_LIMIT = 500 |
| const uint32_t tram::LANUGAGE_STRING_CHARACTER_LIMIT = 10000 |
| const size_t tram::MAX_EVENT_TYPES = 100 |
| const uint32_t tram::MAX_FRAGMENT_SHADERS = 20 |
| const uint32_t tram::MAX_LINKED_SHADERS = 40 |
| const uint32_t tram::MAX_MATERIAL_TYPES = 20 |
| const uint32_t tram::MAX_VERTEX_FORMATS = 20 |
| const uint32_t tram::MAX_VERTEX_SHADERS = 20 |
| const uint32_t tram::MESSAGE_DATA_LIMIT = 2000 |
| const uint32_t tram::MESSAGE_PRIORITY_QUEUE_LIMIT = 250 |
| const uint32_t tram::MESSAGE_QUEUE_LIMIT = 500 |
| const uint32_t tram::MESSAGE_TYPE_LIMIT = 100 |
| const uint32_t tram::NAMED_ENTITY_LIMIT = 500 |
| const size_t tram::PATH_LIMIT = 200 |
| const float tram::PHYSICS_GRAVITY = -9.8f |
| const float tram::PHYSICS_GROUND_PLANE = -9.0f |
| const uint32_t tram::RESOURCE_LIMIT_COLLISION_MODEL = 500 |
| const uint32_t tram::RESOURCE_LIMIT_LIGHT_GRAPH = 250 |
| const uint32_t tram::RESOURCE_LIMIT_MATERIAL = 500 |
| const uint32_t tram::RESOURCE_LIMIT_MODEL = 100 |
| const uint32_t tram::RESOURCE_LIMIT_PATH = 100 |
| const uint32_t tram::RESOURCE_LIMIT_SOUND = 100 |
| const uint32_t tram::RESOURCE_LIMIT_SOUND_GRAPH = 250 |
| const uint32_t tram::RESOURCE_LIMIT_SPRITE = 500 |
| const uint32_t tram::RESOURCE_LOADER_QUEUE_LIMIT = 1000 |
| const uint32_t tram::RESOURCE_LOADER_REQUEST_LIMIT = 1750 |
| const uint32_t tram::RIGIDBODY_LIMIT = 500 |
| const uint32_t tram::SCRIPTABLE_ENTITY_TYPE_LIMIT = 50 |
| const uint32_t tram::SIGNAL_TYPE_LIMIT = 100 |
| const size_t tram::SYSTEM_LIMIT = 128 |
| const float tram::TICK_RATE = 1.0f / 60.0f |
| const uint32_t tram::UID_CHARACTER_LIMIT = 20000 |
| const uint32_t tram::UID_LIMIT = 2000 |
| const uint32_t tram::WORLDCELL_LIMIT = 250 |
| const uint32_t tram::WORLDCELL_TRANSITION_LIMIT = 250 |