diff --git a/source/LibRender2/BaseRenderer.cs b/source/LibRender2/BaseRenderer.cs
index 39e18844d6..7e69437e49 100644
--- a/source/LibRender2/BaseRenderer.cs
+++ b/source/LibRender2/BaseRenderer.cs
@@ -524,14 +524,14 @@ public void Reset()
Initialize();
}
- public int CreateStaticObject(StaticObject Prototype, Vector3 Position, Transformation WorldTransformation, Transformation LocalTransformation, ObjectDisposalMode AccurateObjectDisposal, double AccurateObjectDisposalZOffset, double StartingDistance, double EndingDistance, double BlockLength, double TrackPosition, double Brightness)
+ public int CreateStaticObject(StaticObject Prototype, Vector3 Position, Transformation WorldTransformation, Transformation LocalTransformation, ObjectDisposalMode AccurateObjectDisposal, WorldProperties Properties, double BlockLength)
{
Matrix4D Translate = Matrix4D.CreateTranslation(Position.X, Position.Y, -Position.Z);
Matrix4D Rotate = (Matrix4D)new Transformation(LocalTransformation, WorldTransformation);
- return CreateStaticObject(Position, Prototype, LocalTransformation, Rotate, Translate, AccurateObjectDisposal, AccurateObjectDisposalZOffset, StartingDistance, EndingDistance, BlockLength, TrackPosition, Brightness);
+ return CreateStaticObject(Position, Prototype, LocalTransformation, Rotate, Translate, AccurateObjectDisposal, Properties, BlockLength);
}
- public int CreateStaticObject(Vector3 Position, StaticObject Prototype, Transformation LocalTransformation, Matrix4D Rotate, Matrix4D Translate, ObjectDisposalMode AccurateObjectDisposal, double AccurateObjectDisposalZOffset, double StartingDistance, double EndingDistance, double BlockLength, double TrackPosition, double Brightness)
+ public int CreateStaticObject(Vector3 Position, StaticObject Prototype, Transformation LocalTransformation, Matrix4D Rotate, Matrix4D Translate, ObjectDisposalMode AccurateObjectDisposal, WorldProperties Properties, double BlockLength)
{
if (Prototype == null)
{
@@ -565,8 +565,8 @@ public int CreateStaticObject(Vector3 Position, StaticObject Prototype, Transfor
}
}
- startingDistance += (float)AccurateObjectDisposalZOffset;
- endingDistance += (float)AccurateObjectDisposalZOffset;
+ startingDistance += (float)Properties.AccurateObjectDisposalZOffset;
+ endingDistance += (float)Properties.AccurateObjectDisposalZOffset;
}
const double minBlockLength = 20.0;
@@ -579,21 +579,21 @@ public int CreateStaticObject(Vector3 Position, StaticObject Prototype, Transfor
switch (AccurateObjectDisposal)
{
case ObjectDisposalMode.Accurate:
- startingDistance += (float)TrackPosition;
- endingDistance += (float)TrackPosition;
- double z = BlockLength * Math.Floor(TrackPosition / BlockLength);
- StartingDistance = Math.Min(z - BlockLength, startingDistance);
- EndingDistance = Math.Max(z + 2.0 * BlockLength, endingDistance);
- startingDistance = (float)(BlockLength * Math.Floor(StartingDistance / BlockLength));
- endingDistance = (float)(BlockLength * Math.Ceiling(EndingDistance / BlockLength));
+ startingDistance += (float)Properties.TrackPosition;
+ endingDistance += (float)Properties.TrackPosition;
+ double z = BlockLength * Math.Floor(Properties.TrackPosition / BlockLength);
+ Properties.StartingDistance = Math.Min(z - BlockLength, startingDistance);
+ Properties.EndingDistance = Math.Max(z + 2.0 * BlockLength, endingDistance);
+ startingDistance = (float)(BlockLength * Math.Floor(Properties.StartingDistance / BlockLength));
+ endingDistance = (float)(BlockLength * Math.Ceiling(Properties.EndingDistance / BlockLength));
break;
case ObjectDisposalMode.Legacy:
- startingDistance = (float)StartingDistance;
- endingDistance = (float)EndingDistance;
+ startingDistance = (float)Properties.StartingDistance;
+ endingDistance = (float)Properties.EndingDistance;
break;
case ObjectDisposalMode.Mechanik:
- startingDistance = (float) StartingDistance;
- endingDistance = (float) EndingDistance + 1500;
+ startingDistance = (float)Properties.StartingDistance;
+ endingDistance = (float)Properties.EndingDistance + 1500;
if (startingDistance < 0)
{
startingDistance = 0;
@@ -605,7 +605,7 @@ public int CreateStaticObject(Vector3 Position, StaticObject Prototype, Transfor
Prototype = Prototype,
Translation = Translate,
Rotate = Rotate,
- Brightness = Brightness,
+ Brightness = Properties.Brightness,
StartingDistance = startingDistance,
EndingDistance = endingDistance,
WorldPosition = Position
diff --git a/source/ObjectViewer/Hosts.cs b/source/ObjectViewer/Hosts.cs
index bdd7ff58bb..9e86461dca 100644
--- a/source/ObjectViewer/Hosts.cs
+++ b/source/ObjectViewer/Hosts.cs
@@ -348,14 +348,14 @@ public override void ExecuteFunctionScript(OpenBveApi.FunctionScripting.Function
FunctionScripts.ExecuteFunctionScript(functionScript, (TrainBase)train, CarIndex, Position, TrackPosition, SectionIndex, IsPartOfTrain, TimeElapsed, CurrentState);
}
- public override int CreateStaticObject(StaticObject Prototype, Vector3 Position, Transformation WorldTransformation, Transformation LocalTransformation, double AccurateObjectDisposalZOffset, double StartingDistance, double EndingDistance, double TrackPosition, double Brightness)
+ public override int CreateStaticObject(StaticObject Prototype, Vector3 Position, Transformation WorldTransformation, Transformation LocalTransformation, WorldProperties Properties)
{
- return Program.Renderer.CreateStaticObject(Prototype, Position, WorldTransformation, LocalTransformation, ObjectDisposalMode.Accurate, AccurateObjectDisposalZOffset, StartingDistance, EndingDistance, 25.0, TrackPosition, Brightness);
+ return Program.Renderer.CreateStaticObject(Prototype, Position, WorldTransformation, LocalTransformation, ObjectDisposalMode.Accurate, Properties, 25.0);
}
- public override int CreateStaticObject(StaticObject Prototype, Vector3 Position, Transformation LocalTransformation, Matrix4D Rotate, Matrix4D Translate, double AccurateObjectDisposalZOffset, double StartingDistance, double EndingDistance, double TrackPosition, double Brightness)
+ public override int CreateStaticObject(StaticObject Prototype, Vector3 Position, Transformation LocalTransformation, Matrix4D Rotate, Matrix4D Translate, WorldProperties Properties)
{
- return Program.Renderer.CreateStaticObject(Position, Prototype, LocalTransformation, Rotate, Translate, ObjectDisposalMode.Accurate, AccurateObjectDisposalZOffset, StartingDistance, EndingDistance, 25.0, TrackPosition, Brightness);
+ return Program.Renderer.CreateStaticObject(Position, Prototype, LocalTransformation, Rotate, Translate, ObjectDisposalMode.Accurate, Properties, 25.0);
}
public override void CreateDynamicObject(ref ObjectState internalObject)
diff --git a/source/ObjectViewer/ProgramS.cs b/source/ObjectViewer/ProgramS.cs
index 000bd946a5..930af76846 100644
--- a/source/ObjectViewer/ProgramS.cs
+++ b/source/ObjectViewer/ProgramS.cs
@@ -316,7 +316,7 @@ internal static void RefreshObjects()
{
if (CurrentHost.LoadObject(Files[i], Encoding.UTF8, out UnifiedObject o))
{
- o.CreateObject(Vector3.Zero, 0.0, 0.0, 0.0);
+ o.CreateObject(Vector3.Zero, new WorldProperties());
}
}
diff --git a/source/OpenBVE/Graphics/NewRenderer.cs b/source/OpenBVE/Graphics/NewRenderer.cs
index f08a2c7ae6..29d9ab52bf 100644
--- a/source/OpenBVE/Graphics/NewRenderer.cs
+++ b/source/OpenBVE/Graphics/NewRenderer.cs
@@ -87,7 +87,7 @@ public override void Initialize()
Program.FileSystem.AppendToLogFile("Renderer initialised successfully.");
}
- internal int CreateStaticObject(UnifiedObject Prototype, Vector3 Position, Transformation WorldTransformation, Transformation LocalTransformation, ObjectDisposalMode AccurateObjectDisposal, double AccurateObjectDisposalZOffset, double StartingDistance, double EndingDistance, double BlockLength, double TrackPosition, double Brightness)
+ internal int CreateStaticObject(UnifiedObject Prototype, Vector3 Position, Transformation WorldTransformation, Transformation LocalTransformation, ObjectDisposalMode AccurateObjectDisposal, double AccurateObjectDisposalZOffset, WorldProperties Properties, double BlockLength)
{
StaticObject obj = Prototype as StaticObject;
if (obj == null)
@@ -95,7 +95,7 @@ internal int CreateStaticObject(UnifiedObject Prototype, Vector3 Position, Trans
Interface.AddMessage(MessageType.Error, false, "Attempted to use an animated object where only static objects are allowed.");
return -1;
}
- return base.CreateStaticObject(obj, Position, WorldTransformation, LocalTransformation, AccurateObjectDisposal, AccurateObjectDisposalZOffset, StartingDistance, EndingDistance, BlockLength, TrackPosition, Brightness);
+ return base.CreateStaticObject(obj, Position, WorldTransformation, LocalTransformation, AccurateObjectDisposal, Properties, BlockLength);
}
public override void UpdateViewport(int Width, int Height)
diff --git a/source/OpenBVE/System/Host.cs b/source/OpenBVE/System/Host.cs
index 238d92aa62..4832f69505 100644
--- a/source/OpenBVE/System/Host.cs
+++ b/source/OpenBVE/System/Host.cs
@@ -473,14 +473,14 @@ public override void ExecuteFunctionScript(OpenBveApi.FunctionScripting.Function
FunctionScripts.ExecuteFunctionScript(functionScript, (TrainBase)train, CarIndex, Position, TrackPosition, SectionIndex, IsPartOfTrain, TimeElapsed, CurrentState);
}
- public override int CreateStaticObject(StaticObject Prototype, Vector3 Position, Transformation WorldTransformation, Transformation LocalTransformation, double AccurateObjectDisposalZOffset, double StartingDistance, double EndingDistance, double TrackPosition, double Brightness)
+ public override int CreateStaticObject(StaticObject Prototype, Vector3 Position, Transformation WorldTransformation, Transformation LocalTransformation, WorldProperties Properties)
{
- return Program.Renderer.CreateStaticObject(Prototype, Position, WorldTransformation, LocalTransformation, Program.CurrentRoute.AccurateObjectDisposal, AccurateObjectDisposalZOffset, StartingDistance, EndingDistance, Program.CurrentRoute.BlockLength, TrackPosition, Brightness);
+ return Program.Renderer.CreateStaticObject(Prototype, Position, WorldTransformation, LocalTransformation, Program.CurrentRoute.AccurateObjectDisposal, Properties, Program.CurrentRoute.BlockLength);
}
- public override int CreateStaticObject(StaticObject Prototype, Vector3 Position, Transformation LocalTransformation, Matrix4D Rotate, Matrix4D Translate, double AccurateObjectDisposalZOffset, double StartingDistance, double EndingDistance, double TrackPosition, double Brightness)
+ public override int CreateStaticObject(StaticObject Prototype, Vector3 Position, Transformation LocalTransformation, Matrix4D Rotate, Matrix4D Translate, WorldProperties Properties)
{
- return Program.Renderer.CreateStaticObject(Position, Prototype, LocalTransformation, Rotate, Translate, Program.CurrentRoute.AccurateObjectDisposal, AccurateObjectDisposalZOffset, StartingDistance, EndingDistance, Program.CurrentRoute.BlockLength, TrackPosition, Brightness);
+ return Program.Renderer.CreateStaticObject(Position, Prototype, LocalTransformation, Rotate, Translate, Program.CurrentRoute.AccurateObjectDisposal, Properties, Program.CurrentRoute.BlockLength);
}
public override void CreateDynamicObject(ref ObjectState internalObject)
diff --git a/source/OpenBveApi/Objects/Helpers/WorldProperties.cs b/source/OpenBveApi/Objects/Helpers/WorldProperties.cs
new file mode 100644
index 0000000000..12675e90f4
--- /dev/null
+++ b/source/OpenBveApi/Objects/Helpers/WorldProperties.cs
@@ -0,0 +1,47 @@
+namespace OpenBveApi.Objects
+{
+ /// A helper struct describing the world properties of an object
+ public struct WorldProperties
+ {
+ /// The key of the rail on which the object is placed
+ public int RailKey;
+ /// The absolute track position at which the object is placed
+ public double TrackPosition;
+ /// The track distance at which this is displayed by the renderer
+ public double StartingDistance;
+ /// The ending distance at which this is hidden by the renderer
+ public double EndingDistance;
+ /// The brightness value of this object
+ public double Brightness;
+ /// The index of the signalling section this object is attached to
+ public int SectionIndex;
+ /// The Z-Offset used for accurate object disposal
+ /// This is only valid for child objects contained within an animated container
+ public double AccurateObjectDisposalZOffset;
+
+ /// Creates a new instance of this struct
+ public WorldProperties(int railKey, double trackPosition, double startingDistance, double endingDistance, int sectionIndex = -1, double brightness = 1.0)
+ {
+ RailKey = railKey;
+ TrackPosition = trackPosition;
+ StartingDistance = startingDistance;
+ EndingDistance = endingDistance;
+ Brightness = brightness;
+ SectionIndex = sectionIndex;
+ AccurateObjectDisposalZOffset = 0;
+ }
+
+ /// Creates a new instance of this struct
+ public WorldProperties(double trackPosition, int sectionIndex, double brightness)
+ {
+ RailKey = 0;
+ TrackPosition = trackPosition;
+ SectionIndex = sectionIndex;
+ Brightness = brightness;
+ // Mechanik visibility- not used
+ StartingDistance = 0;
+ EndingDistance = 0;
+ AccurateObjectDisposalZOffset = 0;
+ }
+ }
+}
diff --git a/source/OpenBveApi/Objects/ObjectTypes/AnimatedObject.cs b/source/OpenBveApi/Objects/ObjectTypes/AnimatedObject.cs
index a1d1ffcfe7..bbb1f21826 100644
--- a/source/OpenBveApi/Objects/ObjectTypes/AnimatedObject.cs
+++ b/source/OpenBveApi/Objects/ObjectTypes/AnimatedObject.cs
@@ -737,14 +737,15 @@ public void Update(AbstractTrain Train, int CarIndex, double TrackPosition, Vect
}
}
- /// Creates the animated object within the game world
- /// The absolute position
- /// The world transformation to apply (e.g. ground, rail)
- /// The local transformation to apply in order to rotate the model
- /// The index of the section if placed using a SigF command
- /// The absolute track position
- /// The brightness value at the track position
- public void CreateObject(Vector3 Position, Transformation WorldTransformation, Transformation LocalTransformation, int sectionIndex, double TrackPosition, double Brightness)
+ /// Creates the animated object within the game world
+ /// The absolute position
+ /// The world transformation to apply (e.g. ground, rail)
+ /// The local transformation to apply in order to rotate the model
+ /// The index of the section if placed using a SigF command
+ /// The rail index the object is placed on
+ /// The absolute track position
+ /// The brightness value at the track position
+ public void CreateObject(Vector3 Position, Transformation WorldTransformation, Transformation LocalTransformation, WorldProperties Properties)
{
int a = currentHost.AnimatedWorldObjectsUsed;
@@ -762,11 +763,11 @@ public void CreateObject(Vector3 Position, Transformation WorldTransformation, T
Up = FinalTransformation.Y,
Side = FinalTransformation.X,
Object = o,
- TrackPosition = TrackPosition,
+ TrackPosition = Properties.TrackPosition,
};
- currentObject.FrontAxleFollower.TrackPosition = TrackPosition + FrontAxlePosition;
- currentObject.RearAxleFollower.TrackPosition = TrackPosition + RearAxlePosition;
+ currentObject.FrontAxleFollower.TrackPosition = Properties.TrackPosition + FrontAxlePosition;
+ currentObject.RearAxleFollower.TrackPosition = Properties.TrackPosition + RearAxlePosition;
currentObject.FrontAxlePosition = FrontAxlePosition;
currentObject.RearAxlePosition = RearAxlePosition;
currentObject.FrontAxleFollower.UpdateWorldCoordinates(false);
@@ -779,7 +780,7 @@ public void CreateObject(Vector3 Position, Transformation WorldTransformation, T
}
}
- currentObject.Object.internalObject.Brightness = Brightness;
+ currentObject.Object.internalObject.Brightness = Properties.Brightness;
double r = 0.0;
for (int i = 0; i < currentObject.Object.States.Length; i++)
@@ -800,7 +801,7 @@ public void CreateObject(Vector3 Position, Transformation WorldTransformation, T
{
var o = this.Clone();
currentHost.CreateDynamicObject(ref o.internalObject);
- o.SectionIndex = sectionIndex;
+ o.SectionIndex = Properties.SectionIndex;
AnimatedWorldObject currentObject = new AnimatedWorldObject(currentHost)
{
Position = Position,
@@ -808,8 +809,8 @@ public void CreateObject(Vector3 Position, Transformation WorldTransformation, T
Up = FinalTransformation.Y,
Side = FinalTransformation.X,
Object = o,
- SectionIndex = sectionIndex,
- TrackPosition = TrackPosition,
+ SectionIndex = Properties.SectionIndex,
+ TrackPosition = Properties.TrackPosition,
};
for (int i = 0; i < currentObject.Object.States.Length; i++)
{
@@ -819,7 +820,7 @@ public void CreateObject(Vector3 Position, Transformation WorldTransformation, T
}
}
- currentObject.Object.internalObject.Brightness = Brightness;
+ currentObject.Object.internalObject.Brightness = Properties.Brightness;
double r = 0.0;
for (int i = 0; i < currentObject.Object.States.Length; i++)
diff --git a/source/OpenBveApi/Objects/ObjectTypes/AnimatedObjectCollection.cs b/source/OpenBveApi/Objects/ObjectTypes/AnimatedObjectCollection.cs
index c85225efd0..fbe4a462a2 100644
--- a/source/OpenBveApi/Objects/ObjectTypes/AnimatedObjectCollection.cs
+++ b/source/OpenBveApi/Objects/ObjectTypes/AnimatedObjectCollection.cs
@@ -24,8 +24,7 @@ public AnimatedObjectCollection(HostInterface Host)
///
public override void CreateObject(Vector3 Position, Transformation WorldTransformation, Transformation LocalTransformation,
- int SectionIndex, double StartingDistance, double EndingDistance,
- double TrackPosition, double Brightness, bool DuplicateMaterials = false)
+ WorldProperties Properties, bool DuplicateMaterials = false)
{
bool[] free = new bool[Objects.Length];
bool anyfree = false;
@@ -65,13 +64,12 @@ public override void CreateObject(Vector3 Position, Transformation WorldTransfor
Matrix4D mat = Matrix4D.Identity;
mat *= Objects[i].States[0].Translation;
mat *= transformationMatrix;
- double zOffset = Objects[i].States[0].Translation.ExtractTranslation().Z * -1.0; //To calculate the Z-offset within the object, we want the untransformed co-ordinates, not the world co-ordinates
-
- currentHost.CreateStaticObject(Objects[i].States[0].Prototype, Position, LocalTransformation, mat, Matrix4D.CreateTranslation(Position.X, Position.Y, -Position.Z), zOffset, StartingDistance, EndingDistance, TrackPosition, Brightness);
+ Properties.AccurateObjectDisposalZOffset = Objects[i].States[0].Translation.ExtractTranslation().Z * -1.0; //To calculate the Z-offset within the object, we want the untransformed co-ordinates, not the world co-ordinates
+ currentHost.CreateStaticObject(Objects[i].States[0].Prototype, Position, LocalTransformation, mat, Matrix4D.CreateTranslation(Position.X, Position.Y, -Position.Z), Properties);
}
else
{
- Objects[i].CreateObject(Position, WorldTransformation, LocalTransformation, SectionIndex, TrackPosition, Brightness);
+ Objects[i].CreateObject(Position, WorldTransformation, LocalTransformation, Properties);
}
}
}
@@ -82,7 +80,7 @@ public override void CreateObject(Vector3 Position, Transformation WorldTransfor
{
if (Objects[i].States.Length != 0)
{
- Objects[i].CreateObject(Position, WorldTransformation, LocalTransformation, SectionIndex, TrackPosition, Brightness);
+ Objects[i].CreateObject(Position, WorldTransformation, LocalTransformation, Properties);
}
}
}
@@ -100,8 +98,8 @@ public override void CreateObject(Vector3 Position, Transformation WorldTransfor
Vector3 v = Sounds[i].Position;
v.Rotate(LocalTransformation);
v.Rotate(WorldTransformation);
- (Sounds[i] as WorldSound)?.CreateSound(Position + v, WorldTransformation, LocalTransformation, SectionIndex, TrackPosition);
- (Sounds[i] as AnimatedWorldObjectStateSound)?.Create(Position + v, WorldTransformation, LocalTransformation, SectionIndex, TrackPosition, Brightness);
+ (Sounds[i] as WorldSound)?.CreateSound(Position + v, WorldTransformation, LocalTransformation, Properties);
+ (Sounds[i] as AnimatedWorldObjectStateSound)?.Create(Position + v, WorldTransformation, LocalTransformation, Properties);
}
}
diff --git a/source/OpenBveApi/Objects/ObjectTypes/AnimatedWorldObject.StateSound.cs b/source/OpenBveApi/Objects/ObjectTypes/AnimatedWorldObject.StateSound.cs
index aafeefba3f..e2eddfd365 100644
--- a/source/OpenBveApi/Objects/ObjectTypes/AnimatedWorldObject.StateSound.cs
+++ b/source/OpenBveApi/Objects/ObjectTypes/AnimatedWorldObject.StateSound.cs
@@ -141,7 +141,7 @@ public override bool IsVisible(Vector3 CameraPosition, double BackgroundImageDis
/// The index of the section if placed using a SigF command
/// The absolute track position
/// The brightness value at the track position
- public void Create(Vector3 WorldPosition, Transformation WorldTransformation, Transformation LocalTransformation, int FinalSectionIndex, double FinalTrackPosition, double Brightness)
+ public void Create(Vector3 WorldPosition, Transformation WorldTransformation, Transformation LocalTransformation, WorldProperties Properties)
{
int a = currentHost.AnimatedWorldObjectsUsed;
Transformation FinalTransformation = new Transformation(LocalTransformation, WorldTransformation);
@@ -151,8 +151,8 @@ public void Create(Vector3 WorldPosition, Transformation WorldTransformation, Tr
currentObject.Direction = FinalTransformation.Z;
currentObject.Up = FinalTransformation.Y;
currentObject.Side = FinalTransformation.X;
- currentObject.Object.SectionIndex = FinalSectionIndex;
- currentObject.TrackPosition = FinalTrackPosition;
+ currentObject.Object.SectionIndex = Properties.SectionIndex;
+ currentObject.TrackPosition = Properties.TrackPosition;
for (int i = 0; i < currentObject.Object.States.Length; i++)
{
if (currentObject.Object.States[i].Prototype == null)
@@ -161,7 +161,7 @@ public void Create(Vector3 WorldPosition, Transformation WorldTransformation, Tr
}
}
- currentObject.Object.internalObject.Brightness = Brightness;
+ currentObject.Object.internalObject.Brightness = Properties.Brightness;
double r = 0.0;
for (int i = 0; i < currentObject.Object.States.Length; i++)
diff --git a/source/OpenBveApi/Objects/ObjectTypes/StaticObject.cs b/source/OpenBveApi/Objects/ObjectTypes/StaticObject.cs
index 66e9012a45..57d36e3c3f 100644
--- a/source/OpenBveApi/Objects/ObjectTypes/StaticObject.cs
+++ b/source/OpenBveApi/Objects/ObjectTypes/StaticObject.cs
@@ -470,10 +470,9 @@ public void ApplyShear(Vector3 Direction, Vector3 Shear, double Ratio)
/// Callback function to create the object within the world
public override void CreateObject(Vector3 Position, Transformation WorldTransformation, Transformation LocalTransformation,
- int SectionIndex, double StartingDistance, double EndingDistance,
- double TrackPosition, double Brightness, bool DuplicateMaterials = false)
+ WorldProperties Properties, bool DuplicateMaterials = false)
{
- currentHost.CreateStaticObject(this, Position, WorldTransformation, LocalTransformation, 0.0, StartingDistance, EndingDistance, TrackPosition, Brightness);
+ currentHost.CreateStaticObject(this, Position, WorldTransformation, LocalTransformation, Properties);
}
///
diff --git a/source/OpenBveApi/Objects/ObjectTypes/UnifiedObject.cs b/source/OpenBveApi/Objects/ObjectTypes/UnifiedObject.cs
index 00982c35ff..0244b79656 100644
--- a/source/OpenBveApi/Objects/ObjectTypes/UnifiedObject.cs
+++ b/source/OpenBveApi/Objects/ObjectTypes/UnifiedObject.cs
@@ -8,48 +8,28 @@ public abstract class UnifiedObject
{
/// Creates the object within the worldspace without using track based transforms
/// The world position
- /// The track distance at which this is displayed by the renderer
- /// The track distance at which this hidden by the renderer
- /// The absolute track position at which this object is placed
- public void CreateObject(Vector3 Position, double StartingDistance, double EndingDistance, double TrackPosition)
+ /// The world properties of the object
+ public void CreateObject(Vector3 Position, WorldProperties Properties)
{
- CreateObject(Position, Transformation.NullTransformation, Transformation.NullTransformation, -1, StartingDistance, EndingDistance, TrackPosition, 1.0);
+ CreateObject(Position, Transformation.NullTransformation, Transformation.NullTransformation, Properties);
}
/// Creates the object within the worldspace using a single track based transforms
/// The world position
/// The world transformation to apply (e.g. ground, rail)
- /// The track distance at which this is displayed by the renderer
- /// The track distance at which this hidden by the renderer
- /// The absolute track position at which this object is placed
- public void CreateObject(Vector3 Position, Transformation WorldTransformation, double StartingDistance, double EndingDistance, double TrackPosition)
+ /// The world properties of the object
+ public void CreateObject(Vector3 Position, Transformation WorldTransformation, WorldProperties Properties)
{
- CreateObject(Position, WorldTransformation, Transformation.NullTransformation, -1, StartingDistance, EndingDistance, TrackPosition, 1.0);
+ CreateObject(Position, WorldTransformation, Transformation.NullTransformation, Properties);
}
/// Creates the object within the world
/// The world position
/// The world transformation to apply (e.g. ground, rail)
/// The local transformation to apply in order to rotate the model
- /// The track distance at which this is displayed by the renderer
- /// The track distance at which this hidden by the renderer
- /// The absolute track position at which this object is placed
- public void CreateObject(Vector3 Position, Transformation WorldTransformation, Transformation LocalTransformation, double StartingDistance, double EndingDistance, double TrackPosition)
- {
- CreateObject(Position, WorldTransformation, LocalTransformation, -1, StartingDistance, EndingDistance, TrackPosition, 1.0);
- }
-
- /// Creates the object within the world
- /// The world position
- /// The world transformation to apply (e.g. ground, rail)
- /// The local transformation to apply in order to rotate the model
- /// The section index (If placed via Track.SigF)
- /// The track distance at which this is displayed by the renderer
- /// The track distance at which this hidden by the renderer
- /// The absolute track position at which this object is placed
- /// The brightness value of this object
+ /// The world properties of the object
/// Whether the materials are to be duplicated (Not set when creating BVE4 signals)
- public abstract void CreateObject(Vector3 Position, Transformation WorldTransformation, Transformation LocalTransformation, int SectionIndex, double StartingDistance, double EndingDistance, double TrackPosition, double Brightness, bool DuplicateMaterials = false);
+ public abstract void CreateObject(Vector3 Position, Transformation WorldTransformation, Transformation LocalTransformation, WorldProperties Properties, bool DuplicateMaterials = false);
/// Call this method to optimize the object
/// Whether duplicate verticies are to be preserved (Takes less time)
diff --git a/source/OpenBveApi/Objects/ObjectTypes/WorldSound.cs b/source/OpenBveApi/Objects/ObjectTypes/WorldSound.cs
index ca37114a5d..fbd17df86d 100644
--- a/source/OpenBveApi/Objects/ObjectTypes/WorldSound.cs
+++ b/source/OpenBveApi/Objects/ObjectTypes/WorldSound.cs
@@ -58,15 +58,15 @@ public override WorldObject Clone()
/// The local transformation to apply in order to rotate the model
/// The index of the section if placed using a SigF command
/// The absolute track position
- public void CreateSound(Vector3 position, Transformation WorldTransformation, Transformation LocalTransformation, int SectionIndex, double trackPosition)
+ public void CreateSound(Vector3 position, Transformation WorldTransformation, Transformation LocalTransformation, WorldProperties Properties)
{
int a = currentHost.AnimatedWorldObjectsUsed;
WorldSound snd = (WorldSound)Clone();
snd.Position = position;
- snd.TrackPosition = trackPosition;
- snd.currentTrackPosition = trackPosition;
+ snd.TrackPosition = Properties.TrackPosition;
+ snd.currentTrackPosition = Properties.TrackPosition;
snd.Follower = new TrackFollower(currentHost);
- snd.Follower.UpdateAbsolute(trackPosition, true, true);
+ snd.Follower.UpdateAbsolute(Properties.TrackPosition, true, true);
currentHost.AnimatedWorldObjects[a] = snd;
currentHost.AnimatedWorldObjectsUsed++;
diff --git a/source/OpenBveApi/OpenBveApi.csproj b/source/OpenBveApi/OpenBveApi.csproj
index 8b82b7ca72..c3cda570da 100644
--- a/source/OpenBveApi/OpenBveApi.csproj
+++ b/source/OpenBveApi/OpenBveApi.csproj
@@ -126,6 +126,7 @@
+
diff --git a/source/OpenBveApi/System/Hosts/HostInterface.cs b/source/OpenBveApi/System/Hosts/HostInterface.cs
index c98cc3d223..37139dddc1 100644
--- a/source/OpenBveApi/System/Hosts/HostInterface.cs
+++ b/source/OpenBveApi/System/Hosts/HostInterface.cs
@@ -382,13 +382,9 @@ public virtual void ExecuteFunctionScript(FunctionScripting.FunctionScript funct
/// The world position
/// The world transformation to apply (e.g. ground, rail)
/// The local transformation to apply in order to rotate the model
- /// The offset for accurate Z-disposal
- /// The absolute route based starting distance for the object
- /// The absolute route based ending distance for the object
- /// The absolute route based track position
- /// The brightness value at this track position
+ /// The world properties of the object
/// The index to the created object, or -1 if this call fails
- public virtual int CreateStaticObject(StaticObject Prototype, Vector3 Position, Transformation WorldTransformation, Transformation LocalTransformation, double AccurateObjectDisposalZOffset, double StartingDistance, double EndingDistance, double TrackPosition, double Brightness)
+ public virtual int CreateStaticObject(StaticObject Prototype, Vector3 Position, Transformation WorldTransformation, Transformation LocalTransformation, WorldProperties Properties)
{
return -1;
}
@@ -402,13 +398,9 @@ public virtual int CreateStaticObject(StaticObject Prototype, Vector3 Position,
///
/// The rotation matrix to apply
/// The translation matrix to apply
- /// The offset for accurate Z-disposal
- /// The absolute route based starting distance for the object
- /// The absolute route based ending distance for the object
- /// The absolute route based track position
- /// The brightness value at this track position
+ /// The world properties of the object
/// The index to the created object, or -1 if this call fails
- public virtual int CreateStaticObject(StaticObject Prototype, Vector3 Position, Transformation LocalTransformation, Matrix4D Rotate, Matrix4D Translate, double AccurateObjectDisposalZOffset, double StartingDistance, double EndingDistance, double TrackPosition, double Brightness)
+ public virtual int CreateStaticObject(StaticObject Prototype, Vector3 Position, Transformation LocalTransformation, Matrix4D Rotate, Matrix4D Translate, WorldProperties Properties)
{
return -1;
}
diff --git a/source/Plugins/Route.CsvRw/CsvRwRouteParser.ApplyRouteData.cs b/source/Plugins/Route.CsvRw/CsvRwRouteParser.ApplyRouteData.cs
index a6485e77d9..1b26303492 100644
--- a/source/Plugins/Route.CsvRw/CsvRwRouteParser.ApplyRouteData.cs
+++ b/source/Plugins/Route.CsvRw/CsvRwRouteParser.ApplyRouteData.cs
@@ -628,7 +628,7 @@ private void ApplyRouteData(string FileName, ref RouteData Data, bool PreviewOnl
int gi = Data.Blocks[i].Cycle[ci];
if (Data.Structure.Ground.ContainsKey(gi))
{
- Data.Structure.Ground[Data.Blocks[i].Cycle[ci]].CreateObject(Position + new Vector3(0.0, -Data.Blocks[i].Height, 0.0), GroundTransformation, StartingDistance, EndingDistance, StartingDistance);
+ Data.Structure.Ground[Data.Blocks[i].Cycle[ci]].CreateObject(Position + new Vector3(0.0, -Data.Blocks[i].Height, 0.0), GroundTransformation, new WorldProperties(0, StartingDistance, StartingDistance, EndingDistance));
}
}
// ground-aligned free objects
@@ -636,13 +636,13 @@ private void ApplyRouteData(string FileName, ref RouteData Data, bool PreviewOnl
{
for (int j = 0; j < Data.Blocks[i].GroundFreeObj.Count; j++)
{
- Data.Blocks[i].GroundFreeObj[j].CreateGroundAligned(Data.Structure.FreeObjects, Position, GroundTransformation, Direction, Data.Blocks[i].Height, StartingDistance, EndingDistance);
+ Data.Blocks[i].GroundFreeObj[j].CreateGroundAligned(Data.Structure.FreeObjects, Position, GroundTransformation, Direction, Data.Blocks[i].Height, new WorldProperties(0, StartingDistance, StartingDistance, EndingDistance));
}
}
if (!PreviewOnly && Data.Structure.WeatherObjects.ContainsKey(Data.Blocks[i].WeatherObject))
{
UnifiedObject obj = Data.Structure.WeatherObjects[Data.Blocks[i].WeatherObject];
- obj.CreateObject(Position, GroundTransformation, Data.Blocks[i].Height, StartingDistance, EndingDistance);
+ obj.CreateObject(Position, GroundTransformation, new WorldProperties(0, StartingDistance, StartingDistance, EndingDistance));
}
// rail-aligned objects
{
@@ -781,7 +781,7 @@ private void ApplyRouteData(string FileName, ref RouteData Data, bool PreviewOnl
{
if (Data.Structure.RailObjects[Data.Blocks[i].RailType[railKey]] != null)
{
- Data.Structure.RailObjects[Data.Blocks[i].RailType[railKey]].CreateObject(pos, RailTransformation, StartingDistance, EndingDistance, StartingDistance);
+ Data.Structure.RailObjects[Data.Blocks[i].RailType[railKey]].CreateObject(pos, RailTransformation, new WorldProperties(railKey, StartingDistance, StartingDistance, EndingDistance));
}
}
@@ -826,13 +826,13 @@ private void ApplyRouteData(string FileName, ref RouteData Data, bool PreviewOnl
// walls
if (Data.Blocks[i].RailWall.ContainsKey(railKey))
{
- Data.Blocks[i].RailWall[railKey].Create(pos, RailTransformation, StartingDistance, EndingDistance);
+ Data.Blocks[i].RailWall[railKey].Create(pos, RailTransformation, new WorldProperties(railKey, StartingDistance, StartingDistance, EndingDistance));
}
// dikes
if (Data.Blocks[i].RailDike.ContainsKey(railKey))
{
- Data.Blocks[i].RailDike[railKey].Create(pos, RailTransformation, StartingDistance, EndingDistance);
+ Data.Blocks[i].RailDike[railKey].Create(pos, RailTransformation, new WorldProperties(railKey, StartingDistance, StartingDistance, EndingDistance));
}
// sounds
@@ -850,13 +850,13 @@ private void ApplyRouteData(string FileName, ref RouteData Data, bool PreviewOnl
// primary rail
if (Data.Blocks[i].Forms[k].PrimaryRail == railKey)
{
- Data.Blocks[i].Forms[k].CreatePrimaryRail(Data.Blocks[i], Data.Blocks[i + 1], pos, RailTransformation, StartingDistance, EndingDistance, FileName);
+ Data.Blocks[i].Forms[k].CreatePrimaryRail(Data.Blocks[i], Data.Blocks[i + 1], pos, RailTransformation, new WorldProperties(railKey, StartingDistance, StartingDistance, EndingDistance), FileName);
}
// secondary rail
if (Data.Blocks[i].Forms[k].SecondaryRail == railKey)
{
- Data.Blocks[i].Forms[k].CreateSecondaryRail(Data.Blocks[i], pos, RailTransformation, StartingDistance, EndingDistance, FileName);
+ Data.Blocks[i].Forms[k].CreateSecondaryRail(Data.Blocks[i], pos, RailTransformation, new WorldProperties(railKey, StartingDistance, StartingDistance, EndingDistance), FileName);
}
}
@@ -871,7 +871,7 @@ private void ApplyRouteData(string FileName, ref RouteData Data, bool PreviewOnl
{
for (int k = 0; k < Data.Blocks[i].RailFreeObj[railKey].Count; k++)
{
- Data.Blocks[i].RailFreeObj[railKey][k].CreateRailAligned(Data.Structure.FreeObjects, new Vector3(pos), RailTransformation, StartingDistance, EndingDistance);
+ Data.Blocks[i].RailFreeObj[railKey][k].CreateRailAligned(Data.Structure.FreeObjects, new Vector3(pos), RailTransformation, new WorldProperties(railKey, StartingDistance, StartingDistance, EndingDistance));
}
}
@@ -889,7 +889,7 @@ private void ApplyRouteData(string FileName, ref RouteData Data, bool PreviewOnl
// patterns key off rail 0
while (Data.Blocks[i].PatternObjs[key].LastPlacement + Data.Blocks[i].PatternObjs[key].Interval < (i + 1) * Data.BlockInterval)
{
- if (!Data.Blocks[i].PatternObjs[key].CreateRailAligned(Data.Structure.FreeObjects, new Vector3(pos), RailTransformation, StartingDistance, EndingDistance))
+ if (!Data.Blocks[i].PatternObjs[key].CreateRailAligned(Data.Structure.FreeObjects, new Vector3(pos), RailTransformation, new WorldProperties(railKey, StartingDistance, StartingDistance, EndingDistance)))
{
break;
}
diff --git a/source/Plugins/Route.CsvRw/Structures/Route/Crack.cs b/source/Plugins/Route.CsvRw/Structures/Route/Crack.cs
index 1c6d517cb7..7d4e4ec89f 100644
--- a/source/Plugins/Route.CsvRw/Structures/Route/Crack.cs
+++ b/source/Plugins/Route.CsvRw/Structures/Route/Crack.cs
@@ -49,7 +49,7 @@ internal void Create(int CurrentRail, Transformation RailTransformation, Vector3
else
{
StaticObject Crack = (StaticObject) Structure.CrackL[Type].Transform(d0, d1);
- Plugin.CurrentHost.CreateStaticObject(Crack, pos, RailTransformation, Transformation.NullTransformation, 0.0, StartingDistance, EndingDistance, StartingDistance, 1.0);
+ Plugin.CurrentHost.CreateStaticObject(Crack, pos, RailTransformation, Transformation.NullTransformation, new WorldProperties(0, StartingDistance, StartingDistance, EndingDistance));
}
}
else if (d0 > 0.0)
@@ -61,7 +61,7 @@ internal void Create(int CurrentRail, Transformation RailTransformation, Vector3
else
{
StaticObject Crack = (StaticObject) Structure.CrackR[Type].Transform(d0, d1);
- Plugin.CurrentHost.CreateStaticObject(Crack, pos, RailTransformation, Transformation.NullTransformation, 0.0, StartingDistance, EndingDistance, StartingDistance, 1.0);
+ Plugin.CurrentHost.CreateStaticObject(Crack, pos, RailTransformation, Transformation.NullTransformation, new WorldProperties(0, StartingDistance, StartingDistance, EndingDistance));
}
}
}
diff --git a/source/Plugins/Route.CsvRw/Structures/Route/Form.cs b/source/Plugins/Route.CsvRw/Structures/Route/Form.cs
index 78ff9c05ce..55d7c8d549 100644
--- a/source/Plugins/Route.CsvRw/Structures/Route/Form.cs
+++ b/source/Plugins/Route.CsvRw/Structures/Route/Form.cs
@@ -33,27 +33,27 @@ internal Form(int primaryRail, int secondaryRail, int formType, int roofType, St
internal readonly StructureData Structure;
private readonly CultureInfo Culture = CultureInfo.InvariantCulture;
- internal void CreatePrimaryRail(Block currentBlock, Block nextBlock, Vector3 pos, Transformation RailTransformation, double StartingDistance, double EndingDistance, string FileName)
+ internal void CreatePrimaryRail(Block currentBlock, Block nextBlock, Vector3 pos, Transformation RailTransformation, WorldProperties Properties, string FileName)
{
if (SecondaryRail == Form.SecondaryRailStub)
{
if (!Structure.FormL.ContainsKey(FormType))
{
- Plugin.CurrentHost.AddMessage(MessageType.Error, false, "FormStructureIndex references a FormL not loaded in Track.Form at track position " + StartingDistance.ToString(Culture) + " in file " + FileName + ".");
+ Plugin.CurrentHost.AddMessage(MessageType.Error, false, "FormStructureIndex references a FormL not loaded in Track.Form at track position " + Properties.StartingDistance.ToString(Culture) + " in file " + FileName + ".");
}
else
{
- Structure.FormL[FormType].CreateObject(pos, RailTransformation, StartingDistance, EndingDistance, StartingDistance);
+ Structure.FormL[FormType].CreateObject(pos, RailTransformation, Properties);
if (RoofType > 0)
{
if (!Structure.RoofL.ContainsKey(RoofType))
{
- Plugin.CurrentHost.AddMessage(MessageType.Error, false, "RoofStructureIndex references a RoofL not loaded in Track.Form at track position " + StartingDistance.ToString(Culture) + " in file " + FileName + ".");
+ Plugin.CurrentHost.AddMessage(MessageType.Error, false, "RoofStructureIndex references a RoofL not loaded in Track.Form at track position " + Properties.StartingDistance.ToString(Culture) + " in file " + FileName + ".");
}
else
{
- Structure.RoofL[RoofType].CreateObject(pos, RailTransformation, StartingDistance, EndingDistance, StartingDistance);
+ Structure.RoofL[RoofType].CreateObject(pos, RailTransformation, Properties);
}
}
}
@@ -62,40 +62,40 @@ internal void CreatePrimaryRail(Block currentBlock, Block nextBlock, Vector3 pos
{
if (!Structure.FormL.ContainsKey(FormType))
{
- Plugin.CurrentHost.AddMessage(MessageType.Error, false, "FormStructureIndex references a FormL not loaded in Track.Form at track position " + StartingDistance.ToString(Culture) + " in file " + FileName + ".");
+ Plugin.CurrentHost.AddMessage(MessageType.Error, false, "FormStructureIndex references a FormL not loaded in Track.Form at track position " + Properties.StartingDistance.ToString(Culture) + " in file " + FileName + ".");
}
else
{
- Structure.FormL[FormType].CreateObject(pos, RailTransformation, StartingDistance, EndingDistance, StartingDistance);
+ Structure.FormL[FormType].CreateObject(pos, RailTransformation, Properties);
}
if (!Structure.FormCL.ContainsKey(FormType))
{
- Plugin.CurrentHost.AddMessage(MessageType.Error, false, "FormStructureIndex references a FormCL not loaded in Track.Form at track position " + StartingDistance.ToString(Culture) + " in file " + FileName + ".");
+ Plugin.CurrentHost.AddMessage(MessageType.Error, false, "FormStructureIndex references a FormCL not loaded in Track.Form at track position " + Properties.StartingDistance.ToString(Culture) + " in file " + FileName + ".");
}
else
{
- Plugin.CurrentHost.CreateStaticObject((StaticObject) Structure.FormCL[FormType], pos, RailTransformation, Transformation.NullTransformation, 0.0, StartingDistance, EndingDistance, StartingDistance, 1.0);
+ Plugin.CurrentHost.CreateStaticObject((StaticObject) Structure.FormCL[FormType], pos, RailTransformation, Transformation.NullTransformation, Properties);
}
if (RoofType > 0)
{
if (!Structure.RoofL.ContainsKey(RoofType))
{
- Plugin.CurrentHost.AddMessage(MessageType.Error, false, "RoofStructureIndex references a RoofL not loaded in Track.Form at track position " + StartingDistance.ToString(Culture) + " in file " + FileName + ".");
+ Plugin.CurrentHost.AddMessage(MessageType.Error, false, "RoofStructureIndex references a RoofL not loaded in Track.Form at track position " + Properties.StartingDistance.ToString(Culture) + " in file " + FileName + ".");
}
else
{
- Structure.RoofL[RoofType].CreateObject(pos, RailTransformation, StartingDistance, EndingDistance, StartingDistance);
+ Structure.RoofL[RoofType].CreateObject(pos, RailTransformation, Properties);
}
if (!Structure.RoofCL.ContainsKey(RoofType))
{
- Plugin.CurrentHost.AddMessage(MessageType.Error, false, "RoofStructureIndex references a RoofCL not loaded in Track.Form at track position " + StartingDistance.ToString(Culture) + " in file " + FileName + ".");
+ Plugin.CurrentHost.AddMessage(MessageType.Error, false, "RoofStructureIndex references a RoofCL not loaded in Track.Form at track position " + Properties.StartingDistance.ToString(Culture) + " in file " + FileName + ".");
}
else
{
- Plugin.CurrentHost.CreateStaticObject((StaticObject) Structure.RoofCL[RoofType], pos, RailTransformation, Transformation.NullTransformation, 0.0, StartingDistance, EndingDistance, StartingDistance, 1.0);
+ Plugin.CurrentHost.CreateStaticObject((StaticObject) Structure.RoofCL[RoofType], pos, RailTransformation, Transformation.NullTransformation, Properties);
}
}
}
@@ -103,40 +103,40 @@ internal void CreatePrimaryRail(Block currentBlock, Block nextBlock, Vector3 pos
{
if (!Structure.FormR.ContainsKey(FormType))
{
- Plugin.CurrentHost.AddMessage(MessageType.Error, false, "FormStructureIndex references a FormR not loaded in Track.Form at track position " + StartingDistance.ToString(Culture) + " in file " + FileName + ".");
+ Plugin.CurrentHost.AddMessage(MessageType.Error, false, "FormStructureIndex references a FormR not loaded in Track.Form at track position " + Properties.StartingDistance.ToString(Culture) + " in file " + FileName + ".");
}
else
{
- Structure.FormR[FormType].CreateObject(pos, RailTransformation, StartingDistance, EndingDistance, StartingDistance);
+ Structure.FormR[FormType].CreateObject(pos, RailTransformation, Properties);
}
if (!Structure.FormCR.ContainsKey(FormType))
{
- Plugin.CurrentHost.AddMessage(MessageType.Error, false, "FormStructureIndex references a FormCR not loaded in Track.Form at track position " + StartingDistance.ToString(Culture) + " in file " + FileName + ".");
+ Plugin.CurrentHost.AddMessage(MessageType.Error, false, "FormStructureIndex references a FormCR not loaded in Track.Form at track position " + Properties.StartingDistance.ToString(Culture) + " in file " + FileName + ".");
}
else
{
- Plugin.CurrentHost.CreateStaticObject((StaticObject) Structure.FormCR[FormType], pos, RailTransformation, Transformation.NullTransformation, 0.0, StartingDistance, EndingDistance, StartingDistance, 1.0);
+ Plugin.CurrentHost.CreateStaticObject((StaticObject) Structure.FormCR[FormType], pos, RailTransformation, Transformation.NullTransformation, Properties);
}
if (RoofType > 0)
{
if (!Structure.RoofR.ContainsKey(RoofType))
{
- Plugin.CurrentHost.AddMessage(MessageType.Error, false, "RoofStructureIndex references a RoofR not loaded in Track.Form at track position " + StartingDistance.ToString(Culture) + " in file " + FileName + ".");
+ Plugin.CurrentHost.AddMessage(MessageType.Error, false, "RoofStructureIndex references a RoofR not loaded in Track.Form at track position " + Properties.StartingDistance.ToString(Culture) + " in file " + FileName + ".");
}
else
{
- Structure.RoofR[RoofType].CreateObject(pos, RailTransformation, StartingDistance, EndingDistance, StartingDistance);
+ Structure.RoofR[RoofType].CreateObject(pos, RailTransformation, Properties);
}
if (!Structure.RoofCR.ContainsKey(RoofType))
{
- Plugin.CurrentHost.AddMessage(MessageType.Error, false, "RoofStructureIndex references a RoofCR not loaded in Track.Form at track position " + StartingDistance.ToString(Culture) + " in file " + FileName + ".");
+ Plugin.CurrentHost.AddMessage(MessageType.Error, false, "RoofStructureIndex references a RoofCR not loaded in Track.Form at track position " + Properties.StartingDistance.ToString(Culture) + " in file " + FileName + ".");
}
else
{
- Plugin.CurrentHost.CreateStaticObject((StaticObject) Structure.RoofCR[RoofType], pos, RailTransformation, Transformation.NullTransformation, 0.0, StartingDistance, EndingDistance, StartingDistance, 1.0);
+ Plugin.CurrentHost.CreateStaticObject((StaticObject) Structure.RoofCR[RoofType], pos, RailTransformation, Transformation.NullTransformation, Properties);
}
}
}
@@ -148,7 +148,7 @@ internal void CreatePrimaryRail(Block currentBlock, Block nextBlock, Vector3 pos
int s = SecondaryRail;
if (s < 0 || !currentBlock.Rails.ContainsKey(s) || !currentBlock.Rails[s].RailStarted)
{
- Plugin.CurrentHost.AddMessage(MessageType.Error, false, "RailIndex2 is out of range in Track.Form at track position " + StartingDistance.ToString(Culture) + " in file " + FileName);
+ Plugin.CurrentHost.AddMessage(MessageType.Error, false, "RailIndex2 is out of range in Track.Form at track position " + Properties.StartingDistance.ToString(Culture) + " in file " + FileName);
}
else
{
@@ -158,42 +158,42 @@ internal void CreatePrimaryRail(Block currentBlock, Block nextBlock, Vector3 pos
{
if (!Structure.FormL.ContainsKey(FormType))
{
- Plugin.CurrentHost.AddMessage(MessageType.Error, false, "FormStructureIndex references a FormL not loaded in Track.Form at track position " + StartingDistance.ToString(Culture) + " in file " + FileName + ".");
+ Plugin.CurrentHost.AddMessage(MessageType.Error, false, "FormStructureIndex references a FormL not loaded in Track.Form at track position " + Properties.StartingDistance.ToString(Culture) + " in file " + FileName + ".");
}
else
{
- Structure.FormL[FormType].CreateObject(pos, RailTransformation, StartingDistance, EndingDistance, StartingDistance);
+ Structure.FormL[FormType].CreateObject(pos, RailTransformation, Properties);
}
if (!Structure.FormCL.ContainsKey(FormType))
{
- Plugin.CurrentHost.AddMessage(MessageType.Error, false, "FormStructureIndex references a FormCL not loaded in Track.Form at track position " + StartingDistance.ToString(Culture) + " in file " + FileName + ".");
+ Plugin.CurrentHost.AddMessage(MessageType.Error, false, "FormStructureIndex references a FormCL not loaded in Track.Form at track position " + Properties.StartingDistance.ToString(Culture) + " in file " + FileName + ".");
}
else
{
StaticObject FormC = (StaticObject) Structure.FormCL[FormType].Transform(d0, d1);
- Plugin.CurrentHost.CreateStaticObject(FormC, pos, RailTransformation, Transformation.NullTransformation, 0.0, StartingDistance, EndingDistance, StartingDistance, 1.0);
+ Plugin.CurrentHost.CreateStaticObject(FormC, pos, RailTransformation, Transformation.NullTransformation, Properties);
}
if (RoofType > 0)
{
if (!Structure.RoofL.ContainsKey(RoofType))
{
- Plugin.CurrentHost.AddMessage(MessageType.Error, false, "RoofStructureIndex references a RoofL not loaded in Track.Form at track position " + StartingDistance.ToString(Culture) + " in file " + FileName + ".");
+ Plugin.CurrentHost.AddMessage(MessageType.Error, false, "RoofStructureIndex references a RoofL not loaded in Track.Form at track position " + Properties.StartingDistance.ToString(Culture) + " in file " + FileName + ".");
}
else
{
- Structure.RoofL[RoofType].CreateObject(pos, RailTransformation, StartingDistance, EndingDistance, StartingDistance);
+ Structure.RoofL[RoofType].CreateObject(pos, RailTransformation, Properties);
}
if (!Structure.RoofCL.ContainsKey(RoofType))
{
- Plugin.CurrentHost.AddMessage(MessageType.Error, false, "RoofStructureIndex references a RoofCL not loaded in Track.Form at track position " + StartingDistance.ToString(Culture) + " in file " + FileName + ".");
+ Plugin.CurrentHost.AddMessage(MessageType.Error, false, "RoofStructureIndex references a RoofCL not loaded in Track.Form at track position " + Properties.StartingDistance.ToString(Culture) + " in file " + FileName + ".");
}
else
{
StaticObject RoofC = (StaticObject) Structure.RoofCL[RoofType].Transform(d0, d1);
- Plugin.CurrentHost.CreateStaticObject(RoofC, pos, RailTransformation, Transformation.NullTransformation, 0.0, StartingDistance, EndingDistance, StartingDistance, 1.0);
+ Plugin.CurrentHost.CreateStaticObject(RoofC, pos, RailTransformation, Transformation.NullTransformation, Properties);
}
}
}
@@ -201,42 +201,42 @@ internal void CreatePrimaryRail(Block currentBlock, Block nextBlock, Vector3 pos
{
if (!Structure.FormR.ContainsKey(FormType))
{
- Plugin.CurrentHost.AddMessage(MessageType.Error, false, "FormStructureIndex references a FormR not loaded in Track.Form at track position " + StartingDistance.ToString(Culture) + " in file " + FileName + ".");
+ Plugin.CurrentHost.AddMessage(MessageType.Error, false, "FormStructureIndex references a FormR not loaded in Track.Form at track position " + Properties.StartingDistance.ToString(Culture) + " in file " + FileName + ".");
}
else
{
- Structure.FormR[FormType].CreateObject(pos, RailTransformation, StartingDistance, EndingDistance, StartingDistance);
+ Structure.FormR[FormType].CreateObject(pos, RailTransformation, Properties);
}
if (!Structure.FormCR.ContainsKey(FormType))
{
- Plugin.CurrentHost.AddMessage(MessageType.Error, false, "FormStructureIndex references a FormCR not loaded in Track.Form at track position " + StartingDistance.ToString(Culture) + " in file " + FileName + ".");
+ Plugin.CurrentHost.AddMessage(MessageType.Error, false, "FormStructureIndex references a FormCR not loaded in Track.Form at track position " + Properties.StartingDistance.ToString(Culture) + " in file " + FileName + ".");
}
else
{
StaticObject FormC = (StaticObject) Structure.FormCR[FormType].Transform(d0, d1);
- Plugin.CurrentHost.CreateStaticObject(FormC, pos, RailTransformation, Transformation.NullTransformation, 0.0, StartingDistance, EndingDistance, StartingDistance, 1.0);
+ Plugin.CurrentHost.CreateStaticObject(FormC, pos, RailTransformation, Transformation.NullTransformation, Properties);
}
if (RoofType > 0)
{
if (!Structure.RoofR.ContainsKey(RoofType))
{
- Plugin.CurrentHost.AddMessage(MessageType.Error, false, "RoofStructureIndex references a RoofR not loaded in Track.Form at track position " + StartingDistance.ToString(Culture) + " in file " + FileName + ".");
+ Plugin.CurrentHost.AddMessage(MessageType.Error, false, "RoofStructureIndex references a RoofR not loaded in Track.Form at track position " + Properties.StartingDistance.ToString(Culture) + " in file " + FileName + ".");
}
else
{
- Structure.RoofR[RoofType].CreateObject(pos, RailTransformation, StartingDistance, EndingDistance, StartingDistance);
+ Structure.RoofR[RoofType].CreateObject(pos, RailTransformation, Properties);
}
if (!Structure.RoofCR.ContainsKey(RoofType))
{
- Plugin.CurrentHost.AddMessage(MessageType.Error, false, "RoofStructureIndex references a RoofCR not loaded in Track.Form at track position " + StartingDistance.ToString(Culture) + " in file " + FileName + ".");
+ Plugin.CurrentHost.AddMessage(MessageType.Error, false, "RoofStructureIndex references a RoofCR not loaded in Track.Form at track position " + Properties.StartingDistance.ToString(Culture) + " in file " + FileName + ".");
}
else
{
StaticObject RoofC = (StaticObject) Structure.RoofCR[RoofType].Transform(d0, d1);
- Plugin.CurrentHost.CreateStaticObject(RoofC, pos, RailTransformation, Transformation.NullTransformation, 0.0, StartingDistance, EndingDistance, StartingDistance, 1.0);
+ Plugin.CurrentHost.CreateStaticObject(RoofC, pos, RailTransformation, Transformation.NullTransformation, Properties);
}
}
}
@@ -245,7 +245,7 @@ internal void CreatePrimaryRail(Block currentBlock, Block nextBlock, Vector3 pos
}
- internal void CreateSecondaryRail(Block currentBlock, Vector3 pos, Transformation RailTransformation, double StartingDistance, double EndingDistance, string FileName)
+ internal void CreateSecondaryRail(Block currentBlock, Vector3 pos, Transformation RailTransformation, WorldProperties Properties, string FileName)
{
double px = 0.0;
if (currentBlock.Rails.ContainsKey(PrimaryRail))
@@ -257,22 +257,22 @@ internal void CreateSecondaryRail(Block currentBlock, Vector3 pos, Transformatio
{
if (!Structure.FormL.ContainsKey(FormType))
{
- Plugin.CurrentHost.AddMessage(MessageType.Error, false, "FormStructureIndex references a FormL not loaded in Track.Form at track position " + StartingDistance.ToString(Culture) + " in file " + FileName + ".");
+ Plugin.CurrentHost.AddMessage(MessageType.Error, false, "FormStructureIndex references a FormL not loaded in Track.Form at track position " + Properties.StartingDistance.ToString(Culture) + " in file " + FileName + ".");
}
else
{
- Structure.FormL[FormType].CreateObject(pos, RailTransformation, StartingDistance, EndingDistance, StartingDistance);
+ Structure.FormL[FormType].CreateObject(pos, RailTransformation, Properties);
}
if (RoofType > 0)
{
if (!Structure.RoofL.ContainsKey(RoofType))
{
- Plugin.CurrentHost.AddMessage(MessageType.Error, false, "RoofStructureIndex references a RoofL not loaded in Track.Form at track position " + StartingDistance.ToString(Culture) + " in file " + FileName + ".");
+ Plugin.CurrentHost.AddMessage(MessageType.Error, false, "RoofStructureIndex references a RoofL not loaded in Track.Form at track position " + Properties.StartingDistance.ToString(Culture) + " in file " + FileName + ".");
}
else
{
- Structure.RoofL[RoofType].CreateObject(pos, RailTransformation, StartingDistance, EndingDistance, StartingDistance);
+ Structure.RoofL[RoofType].CreateObject(pos, RailTransformation, Properties);
}
}
}
@@ -280,22 +280,22 @@ internal void CreateSecondaryRail(Block currentBlock, Vector3 pos, Transformatio
{
if (!Structure.FormR.ContainsKey(FormType))
{
- Plugin.CurrentHost.AddMessage(MessageType.Error, false, "FormStructureIndex references a FormR not loaded in Track.Form at track position " + StartingDistance.ToString(Culture) + " in file " + FileName + ".");
+ Plugin.CurrentHost.AddMessage(MessageType.Error, false, "FormStructureIndex references a FormR not loaded in Track.Form at track position " + Properties.StartingDistance.ToString(Culture) + " in file " + FileName + ".");
}
else
{
- Structure.FormR[FormType].CreateObject(pos, RailTransformation, StartingDistance, EndingDistance, StartingDistance);
+ Structure.FormR[FormType].CreateObject(pos, RailTransformation, Properties);
}
if (RoofType > 0)
{
if (!Structure.RoofR.ContainsKey(RoofType))
{
- Plugin.CurrentHost.AddMessage(MessageType.Error, false, "RoofStructureIndex references a RoofR not loaded in Track.Form at track position " + StartingDistance.ToString(Culture) + " in file " + FileName + ".");
+ Plugin.CurrentHost.AddMessage(MessageType.Error, false, "RoofStructureIndex references a RoofR not loaded in Track.Form at track position " + Properties.StartingDistance.ToString(Culture) + " in file " + FileName + ".");
}
else
{
- Structure.RoofR[RoofType].CreateObject(pos, RailTransformation, Transformation.NullTransformation, StartingDistance, EndingDistance, StartingDistance);
+ Structure.RoofR[RoofType].CreateObject(pos, RailTransformation, Transformation.NullTransformation, Properties);
}
}
}
diff --git a/source/Plugins/Route.CsvRw/Structures/Route/FreeObject.cs b/source/Plugins/Route.CsvRw/Structures/Route/FreeObject.cs
index 7a38e009c5..d07bb47a89 100644
--- a/source/Plugins/Route.CsvRw/Structures/Route/FreeObject.cs
+++ b/source/Plugins/Route.CsvRw/Structures/Route/FreeObject.cs
@@ -26,20 +26,20 @@ internal FreeObj(double trackPosition, int type, Vector2 position, double yaw, d
Roll = roll;
}
- internal void CreateRailAligned(ObjectDictionary FreeObjects, Vector3 WorldPosition, Transformation RailTransformation, double StartingDistance, double EndingDistance)
+ internal void CreateRailAligned(ObjectDictionary FreeObjects, Vector3 WorldPosition, Transformation RailTransformation, WorldProperties Properties)
{
- double dz = TrackPosition - StartingDistance;
+ double dz = TrackPosition - Properties.StartingDistance;
WorldPosition += Position.X * RailTransformation.X + Position.Y * RailTransformation.Y + dz * RailTransformation.Z;
FreeObjects.TryGetValue(Type, out UnifiedObject obj);
- obj?.CreateObject(WorldPosition, RailTransformation, new Transformation(Yaw, Pitch, Roll), StartingDistance, EndingDistance, TrackPosition);
+ obj?.CreateObject(WorldPosition, RailTransformation, new Transformation(Yaw, Pitch, Roll), Properties);
}
- internal void CreateGroundAligned(ObjectDictionary FreeObjects, Vector3 WorldPosition, Transformation GroundTransformation, Vector2 Direction, double Height, double StartingDistance, double EndingDistance)
+ internal void CreateGroundAligned(ObjectDictionary FreeObjects, Vector3 WorldPosition, Transformation GroundTransformation, Vector2 Direction, double Height, WorldProperties Properties)
{
- double d = TrackPosition - StartingDistance;
+ double d = TrackPosition - Properties.StartingDistance;
Vector3 wpos = WorldPosition + new Vector3(Direction.X * d + Direction.Y * Position.X, Position.Y - Height, Direction.Y * d - Direction.X * Position.X);
FreeObjects.TryGetValue(Type, out UnifiedObject obj);
- obj?.CreateObject(wpos, GroundTransformation, new Transformation(Yaw, Pitch, Roll), StartingDistance, EndingDistance, TrackPosition);
+ obj?.CreateObject(wpos, GroundTransformation, new Transformation(Yaw, Pitch, Roll), Properties);
}
}
}
diff --git a/source/Plugins/Route.CsvRw/Structures/Route/PatternObj.cs b/source/Plugins/Route.CsvRw/Structures/Route/PatternObj.cs
index de6c91fd44..ce8ab466f0 100644
--- a/source/Plugins/Route.CsvRw/Structures/Route/PatternObj.cs
+++ b/source/Plugins/Route.CsvRw/Structures/Route/PatternObj.cs
@@ -37,7 +37,7 @@ internal PatternObj Clone()
return p;
}
- internal bool CreateRailAligned(ObjectDictionary FreeObjects, Vector3 WorldPosition, Transformation RailTransformation, double StartingDistance, double EndingDistance)
+ internal bool CreateRailAligned(ObjectDictionary FreeObjects, Vector3 WorldPosition, Transformation RailTransformation, WorldProperties Properties)
{
if (Types.Length == 0)
{
@@ -48,12 +48,12 @@ internal bool CreateRailAligned(ObjectDictionary FreeObjects, Vector3 WorldPosit
LastType = 0;
}
LastPlacement += Interval;
- double dz = LastPlacement - StartingDistance;
+ double dz = LastPlacement - Properties.StartingDistance;
WorldPosition += Position.X * RailTransformation.X + Position.Y * RailTransformation.Y + dz * RailTransformation.Z;
FreeObjects.TryGetValue(Types[LastType], out UnifiedObject obj);
if (obj != null)
{
- obj.CreateObject(WorldPosition, RailTransformation, new Transformation(), StartingDistance, EndingDistance, LastPlacement);
+ obj.CreateObject(WorldPosition, RailTransformation, new Transformation(), Properties);
}
if (Types.Length > 1)
diff --git a/source/Plugins/Route.CsvRw/Structures/Route/Pole.cs b/source/Plugins/Route.CsvRw/Structures/Route/Pole.cs
index 94159c2479..9b9e829b43 100644
--- a/source/Plugins/Route.CsvRw/Structures/Route/Pole.cs
+++ b/source/Plugins/Route.CsvRw/Structures/Route/Pole.cs
@@ -32,12 +32,12 @@ internal void Create(PoleDictionary Poles, Vector3 WorldPosition, Transformation
{
if (Location <= 0.0)
{
- Poles[0][Type].CreateObject(WorldPosition, RailTransformation, StartingDistance, EndingDistance, StartingDistance);
+ Poles[0][Type].CreateObject(WorldPosition, RailTransformation, new WorldProperties(0, StartingDistance, StartingDistance, EndingDistance));
}
else
{
UnifiedObject Pole = Poles[0][Type].Mirror();
- Pole.CreateObject(WorldPosition, RailTransformation, StartingDistance, EndingDistance, StartingDistance);
+ Pole.CreateObject(WorldPosition, RailTransformation, new WorldProperties(0, StartingDistance, StartingDistance, EndingDistance));
}
}
else
@@ -52,7 +52,7 @@ internal void Create(PoleDictionary Poles, Vector3 WorldPosition, Transformation
double sz = -Direction.X;
Vector3 wpos = WorldPosition + new Vector3(sx * dx + w.X * dz, sy * dx + w.Y * dz, sz * dx + w.Z * dz);
int type = Type;
- Poles[m][type].CreateObject(wpos, RailTransformation, StartingDistance, EndingDistance, StartingDistance);
+ Poles[m][type].CreateObject(wpos, RailTransformation, new WorldProperties(0, StartingDistance, StartingDistance, EndingDistance));
}
}
}
diff --git a/source/Plugins/Route.CsvRw/Structures/Route/Station.Stop.cs b/source/Plugins/Route.CsvRw/Structures/Route/Station.Stop.cs
index 8d56d40be6..44d5afc6cb 100644
--- a/source/Plugins/Route.CsvRw/Structures/Route/Station.Stop.cs
+++ b/source/Plugins/Route.CsvRw/Structures/Route/Station.Stop.cs
@@ -1,5 +1,6 @@
using System;
using OpenBveApi.Math;
+using OpenBveApi.Objects;
using OpenBveApi.World;
using RouteManager2.Stations;
@@ -34,7 +35,7 @@ internal void Create(Vector3 wpos, Transformation RailTransformation, double Sta
{
return;
}
- CompatibilityObjects.StopPost.CreateObject(wpos, RailTransformation, Transformation.NullTransformation, -1, StartingDistance, EndingDistance, tpos, b);
+ CompatibilityObjects.StopPost.CreateObject(wpos, RailTransformation, Transformation.NullTransformation, new WorldProperties(0, tpos, StartingDistance, EndingDistance, -1, b));
}
}
diff --git a/source/Plugins/Route.CsvRw/Structures/Route/WallDike.cs b/source/Plugins/Route.CsvRw/Structures/Route/WallDike.cs
index 4af4526caa..f794537962 100644
--- a/source/Plugins/Route.CsvRw/Structures/Route/WallDike.cs
+++ b/source/Plugins/Route.CsvRw/Structures/Route/WallDike.cs
@@ -1,4 +1,5 @@
using OpenBveApi.Math;
+using OpenBveApi.Objects;
using OpenBveApi.World;
namespace CsvRwRouteParser
@@ -31,7 +32,7 @@ internal WallDike Clone()
return w;
}
- internal void Create(Vector3 pos, Transformation RailTransformation, double StartingDistance, double EndingDistance)
+ internal void Create(Vector3 pos, Transformation RailTransformation, WorldProperties Properties)
{
if (!Exists)
{
@@ -41,7 +42,7 @@ internal void Create(Vector3 pos, Transformation RailTransformation, double Star
{
if (leftObjects.ContainsKey(Type))
{
- leftObjects[Type].CreateObject(pos, RailTransformation, StartingDistance, EndingDistance, StartingDistance);
+ leftObjects[Type].CreateObject(pos, RailTransformation, Properties);
}
}
@@ -49,7 +50,7 @@ internal void Create(Vector3 pos, Transformation RailTransformation, double Star
{
if (rightObjects.ContainsKey(Type))
{
- rightObjects[Type].CreateObject(pos, RailTransformation, StartingDistance, EndingDistance, StartingDistance);
+ rightObjects[Type].CreateObject(pos, RailTransformation, Properties);
}
}
diff --git a/source/Plugins/Route.CsvRw/Structures/Signals/Signal.cs b/source/Plugins/Route.CsvRw/Structures/Signals/Signal.cs
index 08038cca56..99da2ab618 100644
--- a/source/Plugins/Route.CsvRw/Structures/Signals/Signal.cs
+++ b/source/Plugins/Route.CsvRw/Structures/Signals/Signal.cs
@@ -1,4 +1,5 @@
using OpenBveApi.Math;
+using OpenBveApi.Objects;
using OpenBveApi.World;
using RouteManager2.SignalManager;
@@ -30,13 +31,13 @@ internal void Create(Vector3 wpos, Transformation RailTransformation, double Sta
*/
Vector3 wpos2 = new Vector3(wpos);
wpos2 += Position.X * RailTransformation.X + dz * RailTransformation.Z;
- CompatibilityObjects.SignalPost.CreateObject(wpos2, RailTransformation, Transformation.NullTransformation, -1, StartingDistance, EndingDistance, TrackPosition, Brightness);
+ CompatibilityObjects.SignalPost.CreateObject(wpos2, RailTransformation, Transformation.NullTransformation, new WorldProperties(0, TrackPosition, StartingDistance, EndingDistance, -1, Brightness));
}
if (ShowObject)
{
// signal object
wpos += Position.X * RailTransformation.X + Position.Y * RailTransformation.Y + dz * RailTransformation.Z;
- SignalObject.Create(wpos, RailTransformation, new Transformation(Yaw, Pitch, Roll), SectionIndex, StartingDistance, EndingDistance, TrackPosition, Brightness);
+ SignalObject.Create(wpos, RailTransformation, new Transformation(Yaw, Pitch, Roll), new WorldProperties(0, TrackPosition, StartingDistance, EndingDistance, SectionIndex, Brightness));
}
}
diff --git a/source/Plugins/Route.CsvRw/Structures/Signals/SignalData.BVE4.cs b/source/Plugins/Route.CsvRw/Structures/Signals/SignalData.BVE4.cs
index 41cf03f0f3..33579e15de 100644
--- a/source/Plugins/Route.CsvRw/Structures/Signals/SignalData.BVE4.cs
+++ b/source/Plugins/Route.CsvRw/Structures/Signals/SignalData.BVE4.cs
@@ -20,7 +20,7 @@ internal class Bve4SignalData : SignalObject
internal Texture[] SignalTextures;
internal Texture[] GlowTextures;
- public override void Create(Vector3 wpos, Transformation RailTransformation, Transformation LocalTransformation, int SectionIndex, double StartingDistance, double EndingDistance, double TrackPosition, double Brightness)
+ public override void Create(Vector3 wpos, Transformation RailTransformation, Transformation LocalTransformation, WorldProperties Properties)
{
if (SignalTextures.Length != 0)
{
@@ -112,7 +112,7 @@ public override void Create(Vector3 wpos, Transformation RailTransformation, Tra
aoc.Objects[0].StateFunction = new FunctionScript(Plugin.CurrentHost, expr, false);
aoc.Objects[0].RefreshRate = 1.0 + 0.01 * Plugin.RandomNumberGenerator.NextDouble();
- aoc.CreateObject(wpos, RailTransformation, LocalTransformation, SectionIndex, StartingDistance, EndingDistance, TrackPosition, 1.0);
+ aoc.CreateObject(wpos, RailTransformation, LocalTransformation, Properties);
}
}
}
diff --git a/source/Plugins/Route.CsvRw/Structures/Signals/Transponder.cs b/source/Plugins/Route.CsvRw/Structures/Signals/Transponder.cs
index 2729c44a9a..d9c8b73770 100644
--- a/source/Plugins/Route.CsvRw/Structures/Signals/Transponder.cs
+++ b/source/Plugins/Route.CsvRw/Structures/Signals/Transponder.cs
@@ -89,11 +89,11 @@ internal void Create(Vector3 wpos, Transformation RailTransformation, double Sta
double tpos = TrackPosition;
if (BeaconStructureIndex == -2)
{
- obj.CreateObject(wpos, RailTransformation, new Transformation(Yaw, Pitch, Roll), -1, StartingDistance, EndingDistance, tpos, Brightness);
+ obj.CreateObject(wpos, RailTransformation, new Transformation(Yaw, Pitch, Roll), new WorldProperties(0, tpos, StartingDistance, EndingDistance, -1, Brightness));
}
else
{
- obj.CreateObject(wpos, RailTransformation, new Transformation(Yaw, Pitch, Roll), StartingDistance, EndingDistance, tpos);
+ obj.CreateObject(wpos, RailTransformation, new Transformation(Yaw, Pitch, Roll), new WorldProperties(0, tpos, StartingDistance, EndingDistance));
}
}
}
diff --git a/source/Plugins/Route.CsvRw/Structures/Trains/DestinationEvent.cs b/source/Plugins/Route.CsvRw/Structures/Trains/DestinationEvent.cs
index 03491adec3..fdcd3d83d2 100644
--- a/source/Plugins/Route.CsvRw/Structures/Trains/DestinationEvent.cs
+++ b/source/Plugins/Route.CsvRw/Structures/Trains/DestinationEvent.cs
@@ -43,7 +43,7 @@ internal void Create(Vector3 wpos, Transformation RailTransformation, double Sta
double dz = TrackPosition - StartingDistance;
wpos += dx * RailTransformation.X + dy * RailTransformation.Y + dz * RailTransformation.Z;
double tpos = TrackPosition;
- obj.CreateObject(wpos, RailTransformation, new Transformation(Yaw, Pitch, Roll), StartingDistance, EndingDistance, tpos);
+ obj.CreateObject(wpos, RailTransformation, new Transformation(Yaw, Pitch, Roll), new WorldProperties(0, tpos, StartingDistance, EndingDistance));
}
}
}
diff --git a/source/Plugins/Route.CsvRw/Structures/Trains/HornBlow.cs b/source/Plugins/Route.CsvRw/Structures/Trains/HornBlow.cs
index 8b649ade8a..08a030ba53 100644
--- a/source/Plugins/Route.CsvRw/Structures/Trains/HornBlow.cs
+++ b/source/Plugins/Route.CsvRw/Structures/Trains/HornBlow.cs
@@ -40,7 +40,7 @@ internal void Create(Vector3 wpos, Transformation RailTransformation, double Sta
double dz = TrackPosition - StartingDistance;
wpos += dx * RailTransformation.X + dy * RailTransformation.Y + dz * RailTransformation.Z;
double tpos = TrackPosition;
- obj.CreateObject(wpos, RailTransformation, new Transformation(Yaw, Pitch, Roll), StartingDistance, EndingDistance, tpos);
+ obj.CreateObject(wpos, RailTransformation, new Transformation(Yaw, Pitch, Roll), new WorldProperties(0, tpos, StartingDistance, EndingDistance));
}
}
}
diff --git a/source/Plugins/Route.CsvRw/Structures/Trains/Limit.cs b/source/Plugins/Route.CsvRw/Structures/Trains/Limit.cs
index 79ea5442fd..9b175de406 100644
--- a/source/Plugins/Route.CsvRw/Structures/Trains/Limit.cs
+++ b/source/Plugins/Route.CsvRw/Structures/Trains/Limit.cs
@@ -42,7 +42,7 @@ internal void Create(Vector3 wpos, Transformation RailTransformation, double Sta
{
return;
}
- CompatibilityObjects.LimitPostInfinite.CreateObject(wpos, RailTransformation, Transformation.NullTransformation, -1, StartingDistance, EndingDistance, tpos, b);
+ CompatibilityObjects.LimitPostInfinite.CreateObject(wpos, RailTransformation, Transformation.NullTransformation, new WorldProperties(0, tpos,StartingDistance, EndingDistance, -1, b));
}
else
{
@@ -52,7 +52,7 @@ internal void Create(Vector3 wpos, Transformation RailTransformation, double Sta
{
return;
}
- CompatibilityObjects.LimitPostLeft.CreateObject(wpos, RailTransformation, Transformation.NullTransformation, -1, StartingDistance, EndingDistance, tpos, b);
+ CompatibilityObjects.LimitPostLeft.CreateObject(wpos, RailTransformation, Transformation.NullTransformation, new WorldProperties(0, tpos, StartingDistance, EndingDistance, -1, b));
}
else if (Cource > 0)
{
@@ -60,7 +60,7 @@ internal void Create(Vector3 wpos, Transformation RailTransformation, double Sta
{
return;
}
- CompatibilityObjects.LimitPostRight.CreateObject(wpos, RailTransformation, Transformation.NullTransformation, -1, StartingDistance, EndingDistance, tpos, b);
+ CompatibilityObjects.LimitPostRight.CreateObject(wpos, RailTransformation, Transformation.NullTransformation, new WorldProperties(0, tpos, StartingDistance, EndingDistance, -1, b));
}
else
{
@@ -68,7 +68,7 @@ internal void Create(Vector3 wpos, Transformation RailTransformation, double Sta
{
return;
}
- CompatibilityObjects.LimitPostStraight.CreateObject(wpos, RailTransformation, Transformation.NullTransformation, -1, StartingDistance, EndingDistance, tpos, b);
+ CompatibilityObjects.LimitPostStraight.CreateObject(wpos, RailTransformation, Transformation.NullTransformation, new WorldProperties(0, tpos, StartingDistance, EndingDistance, -1, b));
}
double lim = Speed / UnitOfSpeed;
@@ -87,7 +87,7 @@ internal void Create(Vector3 wpos, Transformation RailTransformation, double Sta
Plugin.CurrentHost.RegisterTexture(OpenBveApi.Path.CombineFile(CompatibilityObjects.LimitGraphicsPath, "limit_" + d0 + ".png"), new TextureParameters(null, null), out o.Mesh.Materials[0].DaytimeTexture);
}
- o.CreateObject(wpos, RailTransformation, Transformation.NullTransformation, -1, StartingDistance, EndingDistance, tpos, b);
+ o.CreateObject(wpos, RailTransformation, Transformation.NullTransformation, new WorldProperties(0, tpos, StartingDistance, EndingDistance, -1, b));
}
else
{
@@ -117,7 +117,7 @@ internal void Create(Vector3 wpos, Transformation RailTransformation, double Sta
Plugin.CurrentHost.RegisterTexture(OpenBveApi.Path.CombineFile(CompatibilityObjects.LimitGraphicsPath, "limit_" + d0 + ".png"), new TextureParameters(null, null), out o.Mesh.Materials[1].DaytimeTexture);
}
- o.CreateObject(wpos, RailTransformation, Transformation.NullTransformation, -1, StartingDistance, EndingDistance, tpos, b);
+ o.CreateObject(wpos, RailTransformation, Transformation.NullTransformation, new WorldProperties(0, tpos, StartingDistance, EndingDistance, -1, b));
}
else
{
@@ -152,7 +152,7 @@ internal void Create(Vector3 wpos, Transformation RailTransformation, double Sta
Plugin.CurrentHost.RegisterTexture(OpenBveApi.Path.CombineFile(CompatibilityObjects.LimitGraphicsPath, "limit_" + d0 + ".png"), new TextureParameters(null, null), out o.Mesh.Materials[2].DaytimeTexture);
}
- o.CreateObject(wpos, RailTransformation, Transformation.NullTransformation, -1, StartingDistance, EndingDistance, tpos, b);
+ o.CreateObject(wpos, RailTransformation, Transformation.NullTransformation, new WorldProperties(0, tpos, StartingDistance, EndingDistance, -1, b));
}
else
{
diff --git a/source/Plugins/Route.Mechanik/MechanikRouteParser.cs b/source/Plugins/Route.Mechanik/MechanikRouteParser.cs
index 6a2779b491..9c069a1d56 100644
--- a/source/Plugins/Route.Mechanik/MechanikRouteParser.cs
+++ b/source/Plugins/Route.Mechanik/MechanikRouteParser.cs
@@ -770,7 +770,7 @@ private static void ProcessRoute(bool PreviewOnly)
Transformation t = new Transformation(Math.Atan2(worldDirection.X, worldDirection.Y), 0, 0);
for (int j = 0; j < currentRouteData.Blocks[i].Objects.Count; j++)
{
- AvailableObjects[currentRouteData.Blocks[i].Objects[j].objectIndex].Object.CreateObject(worldPosition + eyePosition, t, StartingDistance, StartingDistance + 25, 100);
+ AvailableObjects[currentRouteData.Blocks[i].Objects[j].objectIndex].Object.CreateObject(worldPosition + eyePosition, t, new WorldProperties(0, 100, StartingDistance, StartingDistance + 25));
}
foreach (Semaphore signal in currentRouteData.Blocks[i].Signals)
{
@@ -811,8 +811,8 @@ private static void ProcessRoute(bool PreviewOnly)
{
nextHeldAtRed = true;
}
-
- signal.Object().CreateObject(worldPosition + eyePosition, t, Transformation.NullTransformation, s + 1, StartingDistance, 1.0);
+
+ signal.Object().CreateObject(worldPosition + eyePosition, t, Transformation.NullTransformation, new WorldProperties(StartingDistance, s+ 1, 1.0));
}
if (currentRouteData.Blocks[i].HornBlow)
diff --git a/source/RouteManager2/SignalManager/SignalObject.Animated.cs b/source/RouteManager2/SignalManager/SignalObject.Animated.cs
index 658da6996c..31a5cbfe4a 100644
--- a/source/RouteManager2/SignalManager/SignalObject.Animated.cs
+++ b/source/RouteManager2/SignalManager/SignalObject.Animated.cs
@@ -20,9 +20,9 @@ public AnimatedObjectSignalData(UnifiedObject signalObject)
private readonly UnifiedObject Object;
/// Creates the object within the game world
- public override void Create(Vector3 wpos, Transformation railTransformation, Transformation localTransformation, int sectionIndex, double startingDistance, double endingDistance, double trackPosition, double brightness)
+ public override void Create(Vector3 wpos, Transformation railTransformation, Transformation localTransformation, WorldProperties properties)
{
- Object.CreateObject(wpos, railTransformation, localTransformation, sectionIndex, startingDistance, endingDistance, trackPosition, 1.0);
+ Object.CreateObject(wpos, railTransformation, localTransformation, properties);
}
}
}
diff --git a/source/RouteManager2/SignalManager/SignalObject.Compatability.cs b/source/RouteManager2/SignalManager/SignalObject.Compatability.cs
index b21f2cfb03..e7fd85da0c 100644
--- a/source/RouteManager2/SignalManager/SignalObject.Compatability.cs
+++ b/source/RouteManager2/SignalManager/SignalObject.Compatability.cs
@@ -30,7 +30,7 @@ public CompatibilitySignalObject(int[] aspectNumbers, StaticObject[] Objects, Ho
this.currentHost = Host;
}
- public override void Create(Vector3 wpos, Transformation railTransformation, Transformation localTransformation, int sectionIndex, double startingDistance, double endingDistance, double trackPosition, double brightness)
+ public override void Create(Vector3 wpos, Transformation railTransformation, Transformation localTransformation, WorldProperties properties)
{
if (AspectNumbers.Length != 0)
{
@@ -59,7 +59,7 @@ public override void Create(Vector3 wpos, Transformation railTransformation, Tra
}
aoc.Objects[0].StateFunction = new FunctionScript(currentHost, expr, false);
aoc.Objects[0].RefreshRate = 1.0 + 0.01 * new Random().NextDouble();
- aoc.CreateObject(wpos, railTransformation, localTransformation, sectionIndex, startingDistance, endingDistance, trackPosition, brightness);
+ aoc.CreateObject(wpos, railTransformation, localTransformation, properties);
}
}
diff --git a/source/RouteManager2/SignalManager/SignalObject.cs b/source/RouteManager2/SignalManager/SignalObject.cs
index 3e57f42739..970adb2657 100644
--- a/source/RouteManager2/SignalManager/SignalObject.cs
+++ b/source/RouteManager2/SignalManager/SignalObject.cs
@@ -1,4 +1,5 @@
using OpenBveApi.Math;
+using OpenBveApi.Objects;
using OpenBveApi.World;
namespace RouteManager2.SignalManager
@@ -6,7 +7,7 @@ namespace RouteManager2.SignalManager
/// An abstract signal object - All signals must inherit from this class
public abstract class SignalObject
{
- public virtual void Create(Vector3 wpos, Transformation RailTransformation, Transformation LocalTransformation, int SectionIndex, double StartingDistance, double EndingDistance, double TrackPosition, double Brightness)
+ public virtual void Create(Vector3 wpos, Transformation RailTransformation, Transformation LocalTransformation, WorldProperties Properties)
{}
}
}
diff --git a/source/RouteViewer/System/Host.cs b/source/RouteViewer/System/Host.cs
index 05b4c0eb94..27d5eb2516 100644
--- a/source/RouteViewer/System/Host.cs
+++ b/source/RouteViewer/System/Host.cs
@@ -482,14 +482,14 @@ public override void ExecuteFunctionScript(OpenBveApi.FunctionScripting.Function
FunctionScripts.ExecuteFunctionScript(functionScript, (TrainManager.Train)train, CarIndex, Position, TrackPosition, SectionIndex, IsPartOfTrain, TimeElapsed, CurrentState);
}
- public override int CreateStaticObject(StaticObject Prototype, Vector3 Position, Transformation WorldTransformation, Transformation LocalTransformation, double AccurateObjectDisposalZOffset, double StartingDistance, double EndingDistance, double TrackPosition, double Brightness)
+ public override int CreateStaticObject(StaticObject Prototype, Vector3 Position, Transformation WorldTransformation, Transformation LocalTransformation, WorldProperties Properties)
{
- return Program.Renderer.CreateStaticObject(Prototype, Position, WorldTransformation, LocalTransformation, Program.CurrentRoute.AccurateObjectDisposal, AccurateObjectDisposalZOffset, StartingDistance, EndingDistance, Program.CurrentRoute.BlockLength, TrackPosition, Brightness);
+ return Program.Renderer.CreateStaticObject(Prototype, Position, WorldTransformation, LocalTransformation, Program.CurrentRoute.AccurateObjectDisposal, Properties, Program.CurrentRoute.BlockLength);
}
- public override int CreateStaticObject(StaticObject Prototype, Vector3 Position, Transformation LocalTransformation, Matrix4D Rotate, Matrix4D Translate, double AccurateObjectDisposalZOffset, double StartingDistance, double EndingDistance, double TrackPosition, double Brightness)
+ public override int CreateStaticObject(StaticObject Prototype, Vector3 Position, Transformation LocalTransformation, Matrix4D Rotate, Matrix4D Translate, WorldProperties Properties)
{
- return Program.Renderer.CreateStaticObject(Position, Prototype, LocalTransformation, Rotate, Translate, Program.CurrentRoute.AccurateObjectDisposal, AccurateObjectDisposalZOffset, StartingDistance, EndingDistance, Program.CurrentRoute.BlockLength, TrackPosition, Brightness);
+ return Program.Renderer.CreateStaticObject(Position, Prototype, LocalTransformation, Rotate, Translate, Program.CurrentRoute.AccurateObjectDisposal, Properties, Program.CurrentRoute.BlockLength);
}
public override void CreateDynamicObject(ref ObjectState internalObject)