From 8f543c64e0d1730a3972982b01bf64eb301647db Mon Sep 17 00:00:00 2001 From: Christopher Lees Date: Wed, 10 Apr 2024 17:01:56 +0100 Subject: [PATCH] Refactor: Use helper struct to avoid passing so many parameters on object create --- source/LibRender2/BaseRenderer.cs | 30 +++--- source/ObjectViewer/Hosts.cs | 8 +- source/ObjectViewer/ProgramS.cs | 2 +- source/OpenBVE/Graphics/NewRenderer.cs | 4 +- source/OpenBVE/System/Host.cs | 8 +- .../Objects/Helpers/WorldProperties.cs | 42 +++++++++ .../Objects/ObjectTypes/AnimatedObject.cs | 33 +++---- .../ObjectTypes/AnimatedObjectCollection.cs | 13 ++- .../AnimatedWorldObject.StateSound.cs | 8 +- .../Objects/ObjectTypes/StaticObject.cs | 5 +- .../Objects/ObjectTypes/UnifiedObject.cs | 36 ++----- .../Objects/ObjectTypes/WorldSound.cs | 8 +- source/OpenBveApi/OpenBveApi.csproj | 1 + .../OpenBveApi/System/Hosts/HostInterface.cs | 4 +- .../CsvRwRouteParser.ApplyRouteData.cs | 20 ++-- .../Route.CsvRw/Structures/Route/Crack.cs | 4 +- .../Route.CsvRw/Structures/Route/Form.cs | 94 +++++++++---------- .../Structures/Route/FreeObject.cs | 12 +-- .../Structures/Route/PatternObj.cs | 6 +- .../Route.CsvRw/Structures/Route/Pole.cs | 6 +- .../Structures/Route/Station.Stop.cs | 3 +- .../Route.CsvRw/Structures/Route/WallDike.cs | 7 +- .../Route.CsvRw/Structures/Signals/Signal.cs | 5 +- .../Structures/Signals/SignalData.BVE4.cs | 4 +- .../Structures/Signals/Transponder.cs | 4 +- .../Structures/Trains/DestinationEvent.cs | 2 +- .../Route.CsvRw/Structures/Trains/HornBlow.cs | 2 +- .../Route.CsvRw/Structures/Trains/Limit.cs | 14 +-- .../Route.Mechanik/MechanikRouteParser.cs | 6 +- .../SignalManager/SignalObject.Animated.cs | 4 +- .../SignalObject.Compatability.cs | 4 +- .../SignalManager/SignalObject.cs | 3 +- source/RouteViewer/System/Host.cs | 8 +- 33 files changed, 218 insertions(+), 192 deletions(-) create mode 100644 source/OpenBveApi/Objects/Helpers/WorldProperties.cs diff --git a/source/LibRender2/BaseRenderer.cs b/source/LibRender2/BaseRenderer.cs index 7ba8a72bb..4e115c89f 100644 --- a/source/LibRender2/BaseRenderer.cs +++ b/source/LibRender2/BaseRenderer.cs @@ -523,14 +523,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, double AccurateObjectDisposalZOffset, 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, AccurateObjectDisposalZOffset, 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, double AccurateObjectDisposalZOffset, WorldProperties Properties, double BlockLength) { if (Prototype == null) { @@ -578,21 +578,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; @@ -604,7 +604,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 6b0db77f4..db08757fb 100644 --- a/source/ObjectViewer/Hosts.cs +++ b/source/ObjectViewer/Hosts.cs @@ -303,14 +303,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, double AccurateObjectDisposalZOffset, 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, AccurateObjectDisposalZOffset, 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, double AccurateObjectDisposalZOffset, 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, AccurateObjectDisposalZOffset, Properties, 25.0); } public override void CreateDynamicObject(ref ObjectState internalObject) diff --git a/source/ObjectViewer/ProgramS.cs b/source/ObjectViewer/ProgramS.cs index 000bd946a..930af7684 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 f08a2c7ae..f356de213 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, AccurateObjectDisposalZOffset, 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 050239676..25b42b6fa 100644 --- a/source/OpenBVE/System/Host.cs +++ b/source/OpenBVE/System/Host.cs @@ -405,14 +405,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, double AccurateObjectDisposalZOffset, 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, AccurateObjectDisposalZOffset, 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, double AccurateObjectDisposalZOffset, 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, AccurateObjectDisposalZOffset, 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 000000000..b495fe633 --- /dev/null +++ b/source/OpenBveApi/Objects/Helpers/WorldProperties.cs @@ -0,0 +1,42 @@ +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; + + /// 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; + } + + /// 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; + } + } +} diff --git a/source/OpenBveApi/Objects/ObjectTypes/AnimatedObject.cs b/source/OpenBveApi/Objects/ObjectTypes/AnimatedObject.cs index 996b35cbd..b58215686 100644 --- a/source/OpenBveApi/Objects/ObjectTypes/AnimatedObject.cs +++ b/source/OpenBveApi/Objects/ObjectTypes/AnimatedObject.cs @@ -732,14 +732,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; @@ -757,11 +758,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); @@ -774,7 +775,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++) @@ -795,7 +796,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, @@ -803,8 +804,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++) { @@ -814,7 +815,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 c85225efd..fd420ca83 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; @@ -67,11 +66,11 @@ public override void CreateObject(Vector3 Position, Transformation WorldTransfor 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); + currentHost.CreateStaticObject(Objects[i].States[0].Prototype, Position, LocalTransformation, mat, Matrix4D.CreateTranslation(Position.X, Position.Y, -Position.Z), zOffset, Properties); } else { - Objects[i].CreateObject(Position, WorldTransformation, LocalTransformation, SectionIndex, TrackPosition, Brightness); + Objects[i].CreateObject(Position, WorldTransformation, LocalTransformation, Properties); } } } @@ -82,7 +81,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 +99,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 042589b8c..90dbcdf91 100644 --- a/source/OpenBveApi/Objects/ObjectTypes/AnimatedWorldObject.StateSound.cs +++ b/source/OpenBveApi/Objects/ObjectTypes/AnimatedWorldObject.StateSound.cs @@ -134,7 +134,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); @@ -144,8 +144,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) @@ -154,7 +154,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 66e9012a4..7a0296f79 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, 0.0, Properties); } /// diff --git a/source/OpenBveApi/Objects/ObjectTypes/UnifiedObject.cs b/source/OpenBveApi/Objects/ObjectTypes/UnifiedObject.cs index 00982c35f..0244b7965 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 ca37114a5..fbd17df86 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 8b82b7ca7..c3cda570d 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 72265cba5..f5efef525 100644 --- a/source/OpenBveApi/System/Hosts/HostInterface.cs +++ b/source/OpenBveApi/System/Hosts/HostInterface.cs @@ -376,7 +376,7 @@ public virtual void ExecuteFunctionScript(FunctionScripting.FunctionScript funct /// The absolute route based track position /// The brightness value at this track position /// 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, double AccurateObjectDisposalZOffset, WorldProperties Properties) { return -1; } @@ -396,7 +396,7 @@ public virtual int CreateStaticObject(StaticObject Prototype, Vector3 Position, /// The absolute route based track position /// The brightness value at this track position /// 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, double AccurateObjectDisposalZOffset, WorldProperties Properties) { return -1; } diff --git a/source/Plugins/Route.CsvRw/CsvRwRouteParser.ApplyRouteData.cs b/source/Plugins/Route.CsvRw/CsvRwRouteParser.ApplyRouteData.cs index 81b07f84d..62e848d7d 100644 --- a/source/Plugins/Route.CsvRw/CsvRwRouteParser.ApplyRouteData.cs +++ b/source/Plugins/Route.CsvRw/CsvRwRouteParser.ApplyRouteData.cs @@ -635,7 +635,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 @@ -643,13 +643,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 { @@ -785,7 +785,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)); } } @@ -830,13 +830,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 @@ -854,13 +854,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); } } @@ -875,7 +875,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)); } } @@ -893,7 +893,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 1c6d517cb..e69cff22c 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, 0, 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, 0, 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 78ff9c05c..70dc374b9 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, 0.0, 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, 0.0, 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, 0.0, 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, 0.0, 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, 0.0, 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, 0.0, 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, 0.0, 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, 0.0, 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 7a38e009c..d07bb47a8 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 de6c91fd4..ce8ab466f 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 94159c247..9b9e829b4 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 8d56d40be..44d5afc6c 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 4af4526ca..f79453796 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 08038cca5..99da2ab61 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 41cf03f0f..33579e15d 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 2729c44a9..d9c8b7377 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 03491adec..fdcd3d83d 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 8b649ade8..08a030ba5 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 79ea5442f..9b175de40 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 41659fa38..f4ad46e36 100644 --- a/source/Plugins/Route.Mechanik/MechanikRouteParser.cs +++ b/source/Plugins/Route.Mechanik/MechanikRouteParser.cs @@ -771,7 +771,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) { @@ -812,8 +812,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 658da6996..31a5cbfe4 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 b21f2cfb0..e7fd85da0 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 3e57f4273..970adb265 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 4c76c48b3..99aeb2805 100644 --- a/source/RouteViewer/System/Host.cs +++ b/source/RouteViewer/System/Host.cs @@ -405,14 +405,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, double AccurateObjectDisposalZOffset, 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, AccurateObjectDisposalZOffset, 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, double AccurateObjectDisposalZOffset, 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, AccurateObjectDisposalZOffset, Properties, Program.CurrentRoute.BlockLength); } public override void CreateDynamicObject(ref ObjectState internalObject)