<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://developer.vellocetsoftware.com/index.php?action=history&amp;feed=atom&amp;title=Grimwar%2FEntities%2Ffunc_tracktrain</id>
	<title>Grimwar/Entities/func tracktrain - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://developer.vellocetsoftware.com/index.php?action=history&amp;feed=atom&amp;title=Grimwar%2FEntities%2Ffunc_tracktrain"/>
	<link rel="alternate" type="text/html" href="https://developer.vellocetsoftware.com/w/index.php?title=Grimwar/Entities/func_tracktrain&amp;action=history"/>
	<updated>2026-10-21T20:39:12Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://developer.vellocetsoftware.com/w/index.php?title=Grimwar/Entities/func_tracktrain&amp;diff=229&amp;oldid=prev</id>
		<title>DocumentationBot: Version 1</title>
		<link rel="alternate" type="text/html" href="https://developer.vellocetsoftware.com/w/index.php?title=Grimwar/Entities/func_tracktrain&amp;diff=229&amp;oldid=prev"/>
		<updated>2026-10-01T04:13:05Z</updated>

		<summary type="html">&lt;p&gt;Version 1&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{GameNav}}&lt;br /&gt;
&lt;br /&gt;
[[Grimwar/Entities|All entities]]&lt;br /&gt;
&lt;br /&gt;
{{Entity icon|func_tracktrain|section}}&lt;br /&gt;
&lt;br /&gt;
Move owned geometry along an authored path.&lt;br /&gt;
&lt;br /&gt;
Placement: Geometry owned by the entity.&lt;br /&gt;
&lt;br /&gt;
== Set it up ==&lt;br /&gt;
&lt;br /&gt;
Parent moving geometry beneath the entity. Edit Path Points in the inspector or viewport; they are local metre coordinates relative to the authored pivot. Use at least two distinct consecutive points. The compiler creates the external spline, so you do not need to create a Unity SplineContainer in Vertex. Choose Stop, Loop, or Ping Pong for end behavior. set_progress takes 0..1 and fails while locked. Signed set_speed selects direction. Locking blocks control inputs but does not stop motion already in progress.&lt;br /&gt;
&lt;br /&gt;
== Settings ==&lt;br /&gt;
&lt;br /&gt;
These are the initial authoring values. Script inputs and runtime state are listed separately below.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Setting !! Default !! Meaning and choices&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;path_smooth&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;Smooth curves || &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; || Smooth the path through its points. Turn off for straight segments and sharp corners.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;path_closed&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;Closed path || &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; || Join the last point to the first. Movement and end behaviour are configured separately.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;spline_container&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;Path points || &amp;lt;code&amp;gt;[[0, 0, 0], [0, 0, -4]]&amp;lt;/code&amp;gt; || Ordered points relative to the authored pivot. The generated path stays outside the moving entity. Drag points in a viewport or enter their coordinates below. Ordered list. At least 2 entries. Units: metres.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;start_progress01&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;Start Progress 01 || &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; || Initial position along the spline, using its normalized 0-1 parameter. Minimum: &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;. Maximum: &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;follow_spline_rotation&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;Follow Spline Rotation || &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; || Rotate the train to follow the spline tangent and up direction.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;rotation_offset&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;Rotation Offset || &amp;lt;code&amp;gt;[0, 0, 0]&amp;lt;/code&amp;gt; || Euler offset applied after the spline rotation. Use this when the authored model faces a different local axis.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;speed&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;Speed || &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; || World units per second along the spline. Runtime set_speed accepts a signed value. Minimum: &amp;lt;code&amp;gt;0.01&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;end_behavior&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;End Behavior || Stop (&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;) || What happens when the train reaches either end of the spline. Choices: Stop (&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;), Loop (&amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;), Ping Pong (&amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;damage&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;Damage || &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; || Damage dealt when the moving train drives into a damageable target. Separating and tangential contacts do not deal damage. 0 disables it. Minimum: &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;damage_cooldown_seconds&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;Damage Cooldown Seconds || &amp;lt;code&amp;gt;0.25&amp;lt;/code&amp;gt; || Minimum seconds between collision-damage events against the same target. Minimum: &amp;lt;code&amp;gt;0.01&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;start_active&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;Start Active || &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; || Start moving as soon as the entity initializes.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;reverse_direction&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;Reverse Direction || &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; || Start by moving toward spline progress 0 instead of 1.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;start_locked&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;Start Locked || &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; || Ignore movement-control inputs until unlocked. Existing motion is not paused by locking.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ignore_nav_mesh&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;Ignore Nav Mesh || &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; || Exclude this entity from navigation-mesh building. This does not disable its gameplay collision.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== VSig contract ==&lt;br /&gt;
&lt;br /&gt;
Use the names below with a ref bound to this entity. The value column describes the catalog value type, not a C# method signature. See [[Grimwar/Entities#Read the reference|Read the reference]] for arguments, authority, and common controls.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Kind !! Member !! Value !! Authority / access&lt;br /&gt;
|-&lt;br /&gt;
| Input || &amp;lt;code&amp;gt;kill&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;none&amp;lt;/code&amp;gt; || Server&lt;br /&gt;
|-&lt;br /&gt;
| Input || &amp;lt;code&amp;gt;lock&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt; || Server&lt;br /&gt;
|-&lt;br /&gt;
| Input || &amp;lt;code&amp;gt;reset&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt; || Server&lt;br /&gt;
|-&lt;br /&gt;
| Input || &amp;lt;code&amp;gt;reverse&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt; || Server&lt;br /&gt;
|-&lt;br /&gt;
| Input || &amp;lt;code&amp;gt;set_progress&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;float&amp;lt;/code&amp;gt; || Server&lt;br /&gt;
|-&lt;br /&gt;
| Input || &amp;lt;code&amp;gt;set_speed&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;float&amp;lt;/code&amp;gt; || Server&lt;br /&gt;
|-&lt;br /&gt;
| Input || &amp;lt;code&amp;gt;start&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt; || Server&lt;br /&gt;
|-&lt;br /&gt;
| Input || &amp;lt;code&amp;gt;stop&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt; || Server&lt;br /&gt;
|-&lt;br /&gt;
| Input || &amp;lt;code&amp;gt;toggle&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt; || Server&lt;br /&gt;
|-&lt;br /&gt;
| Input || &amp;lt;code&amp;gt;unlock&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt; || Server&lt;br /&gt;
|-&lt;br /&gt;
| Output || &amp;lt;code&amp;gt;killed&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;none&amp;lt;/code&amp;gt; || Server&lt;br /&gt;
|-&lt;br /&gt;
| Output || &amp;lt;code&amp;gt;loop&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt; || Server&lt;br /&gt;
|-&lt;br /&gt;
| Output || &amp;lt;code&amp;gt;progress&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;float&amp;lt;/code&amp;gt; || Server&lt;br /&gt;
|-&lt;br /&gt;
| Output || &amp;lt;code&amp;gt;reached_end&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt; || Server&lt;br /&gt;
|-&lt;br /&gt;
| Output || &amp;lt;code&amp;gt;reached_start&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt; || Server&lt;br /&gt;
|-&lt;br /&gt;
| Output || &amp;lt;code&amp;gt;reversed&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt; || Server&lt;br /&gt;
|-&lt;br /&gt;
| Output || &amp;lt;code&amp;gt;started&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt; || Server&lt;br /&gt;
|-&lt;br /&gt;
| Output || &amp;lt;code&amp;gt;stopped&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt; || Server&lt;br /&gt;
|-&lt;br /&gt;
| Property || &amp;lt;code&amp;gt;is_active&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; || Server; read/write&lt;br /&gt;
|-&lt;br /&gt;
| Property || &amp;lt;code&amp;gt;is_locked&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; || Server; read/write&lt;br /&gt;
|-&lt;br /&gt;
| Property || &amp;lt;code&amp;gt;is_reversed&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; || Server; read/write&lt;br /&gt;
|-&lt;br /&gt;
| Property || &amp;lt;code&amp;gt;progress&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;float&amp;lt;/code&amp;gt; || Server; read/write&lt;br /&gt;
|-&lt;br /&gt;
| Property || &amp;lt;code&amp;gt;speed&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;float&amp;lt;/code&amp;gt; || Server; read/write&lt;br /&gt;
|-&lt;br /&gt;
| State || &amp;lt;code&amp;gt;state&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;TrackTrainEntityState&amp;lt;/code&amp;gt; || Server; read/write&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Capture &amp;lt;code&amp;gt;ref.state&amp;lt;/code&amp;gt; from one matching entity and use &amp;lt;code&amp;gt;ref.restore(saved_state)&amp;lt;/code&amp;gt; to restore a compatible snapshot.&lt;br /&gt;
&lt;br /&gt;
[[Category:Grimwar entities]]&lt;/div&gt;</summary>
		<author><name>DocumentationBot</name></author>
	</entry>
</feed>