User Tools

Site Tools


dev:core:path

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

dev:core:path [2020/04/14 12:48]
orwell created
dev:core:path [2020/04/28 20:27] (current)
orwell
Line 26: Line 26:
  
 A train is moved by advancing its index. It is important to note that the train'​s '​index'​ is always incremented,​ never decremented. See also "​reversion"​ in [[dev:​core:​train]]. A train is moved by advancing its index. It is important to note that the train'​s '​index'​ is always incremented,​ never decremented. See also "​reversion"​ in [[dev:​core:​train]].
 +
 +===== Distances =====
 +
 +It is important to keep in mind that the index has little to no relation to actual distances in the cartesian space. Depending on the track orientation,​ the distance between path items can vary from 1 to >2 nodes. The real distance of every item from path item 0 is encoded in ''​train.path_dist''​
 +
 +To calculate an index for a given starting index and a given distance, you can use ''​advtrains.path_get_index_by_offset()''​
 +
 +===== In train table =====
 +The following tables in the train table are handled by the path system:
 +<​code>​
 +-- path      - path positions. '​indices'​ are relative to this. At the moment, at.round_vector_floor_y(path[i])
 +--              is the node this item corresponds to, however, this will change in the future.
 +-- path_node - (reserved)
 +-- path_cn ​  - Connid of the current node that points towards path[i+1]
 +-- path_cp ​  - Connid of the current node that points towards path[i-1]
 +--     When the day comes on that path!=node, these will only be set if this index represents a transition between rail nodes
 +-- path_dist - The total distance of this path element from path element 0
 +-- path_dir ​ - The direction of this path item's transition to the next path item, which is the angle of conns[path_cn[i]].c
 +--Variables:​
 +-- path_speed ​  - Filled by the LZB subsystem. For every path item, if set, defines the maximum velocity the train is allowed to have in the moment it passes this path item.
 +--              - If 0, the train will stop 0.1 indices before this path item (definable by LZB_ZERO_APPROACH_DIST in trainlogic.lua)
 +-- path_ext_f/​b - how far path[i] is set
 +-- path_trk_f/​b - how far the path extends along a track. beyond those values, paths are generated in a straight line.
 +-- path_req_f/​b - how far path items were requested in the last step
 +</​code>​
 +
  
 ===== Path generation ===== ===== Path generation =====
  
 +The path is generated on the fly, as path items are requested.
  
 +Every call to ''​advtrains.path_get()''​ (or one of the related functions) automatically generates the path as far as needed.
  
dev/core/path.txt · Last modified: 2020/04/28 20:27 by orwell