Skip to content

Commit e1d65e1

Browse files
committed
Move Z-offset to helper struct
1 parent bc921f7 commit e1d65e1

File tree

11 files changed

+40
-44
lines changed

11 files changed

+40
-44
lines changed

source/LibRender2/BaseRenderer.cs

+5-5
Original file line numberDiff line numberDiff line change
@@ -524,14 +524,14 @@ public void Reset()
524524
Initialize();
525525
}
526526

527-
public int CreateStaticObject(StaticObject Prototype, Vector3 Position, Transformation WorldTransformation, Transformation LocalTransformation, ObjectDisposalMode AccurateObjectDisposal, double AccurateObjectDisposalZOffset, WorldProperties Properties, double BlockLength)
527+
public int CreateStaticObject(StaticObject Prototype, Vector3 Position, Transformation WorldTransformation, Transformation LocalTransformation, ObjectDisposalMode AccurateObjectDisposal, WorldProperties Properties, double BlockLength)
528528
{
529529
Matrix4D Translate = Matrix4D.CreateTranslation(Position.X, Position.Y, -Position.Z);
530530
Matrix4D Rotate = (Matrix4D)new Transformation(LocalTransformation, WorldTransformation);
531-
return CreateStaticObject(Position, Prototype, LocalTransformation, Rotate, Translate, AccurateObjectDisposal, AccurateObjectDisposalZOffset, Properties, BlockLength);
531+
return CreateStaticObject(Position, Prototype, LocalTransformation, Rotate, Translate, AccurateObjectDisposal, Properties, BlockLength);
532532
}
533533

534-
public int CreateStaticObject(Vector3 Position, StaticObject Prototype, Transformation LocalTransformation, Matrix4D Rotate, Matrix4D Translate, ObjectDisposalMode AccurateObjectDisposal, double AccurateObjectDisposalZOffset, WorldProperties Properties, double BlockLength)
534+
public int CreateStaticObject(Vector3 Position, StaticObject Prototype, Transformation LocalTransformation, Matrix4D Rotate, Matrix4D Translate, ObjectDisposalMode AccurateObjectDisposal, WorldProperties Properties, double BlockLength)
535535
{
536536
if (Prototype == null)
537537
{
@@ -565,8 +565,8 @@ public int CreateStaticObject(Vector3 Position, StaticObject Prototype, Transfor
565565
}
566566
}
567567

568-
startingDistance += (float)AccurateObjectDisposalZOffset;
569-
endingDistance += (float)AccurateObjectDisposalZOffset;
568+
startingDistance += (float)Properties.AccurateObjectDisposalZOffset;
569+
endingDistance += (float)Properties.AccurateObjectDisposalZOffset;
570570
}
571571

572572
const double minBlockLength = 20.0;

source/ObjectViewer/Hosts.cs

+4-4
Original file line numberDiff line numberDiff line change
@@ -348,14 +348,14 @@ public override void ExecuteFunctionScript(OpenBveApi.FunctionScripting.Function
348348
FunctionScripts.ExecuteFunctionScript(functionScript, (TrainBase)train, CarIndex, Position, TrackPosition, SectionIndex, IsPartOfTrain, TimeElapsed, CurrentState);
349349
}
350350

351-
public override int CreateStaticObject(StaticObject Prototype, Vector3 Position, Transformation WorldTransformation, Transformation LocalTransformation, double AccurateObjectDisposalZOffset, WorldProperties Properties)
351+
public override int CreateStaticObject(StaticObject Prototype, Vector3 Position, Transformation WorldTransformation, Transformation LocalTransformation, WorldProperties Properties)
352352
{
353-
return Program.Renderer.CreateStaticObject(Prototype, Position, WorldTransformation, LocalTransformation, ObjectDisposalMode.Accurate, AccurateObjectDisposalZOffset, Properties, 25.0);
353+
return Program.Renderer.CreateStaticObject(Prototype, Position, WorldTransformation, LocalTransformation, ObjectDisposalMode.Accurate, Properties, 25.0);
354354
}
355355

356-
public override int CreateStaticObject(StaticObject Prototype, Vector3 Position, Transformation LocalTransformation, Matrix4D Rotate, Matrix4D Translate, double AccurateObjectDisposalZOffset, WorldProperties Properties)
356+
public override int CreateStaticObject(StaticObject Prototype, Vector3 Position, Transformation LocalTransformation, Matrix4D Rotate, Matrix4D Translate, WorldProperties Properties)
357357
{
358-
return Program.Renderer.CreateStaticObject(Position, Prototype, LocalTransformation, Rotate, Translate, ObjectDisposalMode.Accurate, AccurateObjectDisposalZOffset, Properties, 25.0);
358+
return Program.Renderer.CreateStaticObject(Position, Prototype, LocalTransformation, Rotate, Translate, ObjectDisposalMode.Accurate, Properties, 25.0);
359359
}
360360

361361
public override void CreateDynamicObject(ref ObjectState internalObject)

source/OpenBVE/Graphics/NewRenderer.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ internal int CreateStaticObject(UnifiedObject Prototype, Vector3 Position, Trans
9595
Interface.AddMessage(MessageType.Error, false, "Attempted to use an animated object where only static objects are allowed.");
9696
return -1;
9797
}
98-
return base.CreateStaticObject(obj, Position, WorldTransformation, LocalTransformation, AccurateObjectDisposal, AccurateObjectDisposalZOffset, Properties, BlockLength);
98+
return base.CreateStaticObject(obj, Position, WorldTransformation, LocalTransformation, AccurateObjectDisposal, Properties, BlockLength);
9999
}
100100

101101
public override void UpdateViewport(int Width, int Height)

source/OpenBVE/System/Host.cs

+4-4
Original file line numberDiff line numberDiff line change
@@ -473,14 +473,14 @@ public override void ExecuteFunctionScript(OpenBveApi.FunctionScripting.Function
473473
FunctionScripts.ExecuteFunctionScript(functionScript, (TrainBase)train, CarIndex, Position, TrackPosition, SectionIndex, IsPartOfTrain, TimeElapsed, CurrentState);
474474
}
475475

476-
public override int CreateStaticObject(StaticObject Prototype, Vector3 Position, Transformation WorldTransformation, Transformation LocalTransformation, double AccurateObjectDisposalZOffset, WorldProperties Properties)
476+
public override int CreateStaticObject(StaticObject Prototype, Vector3 Position, Transformation WorldTransformation, Transformation LocalTransformation, WorldProperties Properties)
477477
{
478-
return Program.Renderer.CreateStaticObject(Prototype, Position, WorldTransformation, LocalTransformation, Program.CurrentRoute.AccurateObjectDisposal, AccurateObjectDisposalZOffset, Properties, Program.CurrentRoute.BlockLength);
478+
return Program.Renderer.CreateStaticObject(Prototype, Position, WorldTransformation, LocalTransformation, Program.CurrentRoute.AccurateObjectDisposal, Properties, Program.CurrentRoute.BlockLength);
479479
}
480480

481-
public override int CreateStaticObject(StaticObject Prototype, Vector3 Position, Transformation LocalTransformation, Matrix4D Rotate, Matrix4D Translate, double AccurateObjectDisposalZOffset, WorldProperties Properties)
481+
public override int CreateStaticObject(StaticObject Prototype, Vector3 Position, Transformation LocalTransformation, Matrix4D Rotate, Matrix4D Translate, WorldProperties Properties)
482482
{
483-
return Program.Renderer.CreateStaticObject(Position, Prototype, LocalTransformation, Rotate, Translate, Program.CurrentRoute.AccurateObjectDisposal, AccurateObjectDisposalZOffset, Properties, Program.CurrentRoute.BlockLength);
483+
return Program.Renderer.CreateStaticObject(Position, Prototype, LocalTransformation, Rotate, Translate, Program.CurrentRoute.AccurateObjectDisposal, Properties, Program.CurrentRoute.BlockLength);
484484
}
485485

486486
public override void CreateDynamicObject(ref ObjectState internalObject)

source/OpenBveApi/Objects/Helpers/WorldProperties.cs

+5
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@ public struct WorldProperties
1515
public double Brightness;
1616
/// <summary>The index of the signalling section this object is attached to</summary>
1717
public int SectionIndex;
18+
/// <summary>The Z-Offset used for accurate object disposal</summary>
19+
/// <remarks>This is only valid for child objects contained within an animated container</remarks>
20+
public double AccurateObjectDisposalZOffset;
1821

1922
/// <summary>Creates a new instance of this struct</summary>
2023
public WorldProperties(int railKey, double trackPosition, double startingDistance, double endingDistance, int sectionIndex = -1, double brightness = 1.0)
@@ -25,6 +28,7 @@ public WorldProperties(int railKey, double trackPosition, double startingDistanc
2528
EndingDistance = endingDistance;
2629
Brightness = brightness;
2730
SectionIndex = sectionIndex;
31+
AccurateObjectDisposalZOffset = 0;
2832
}
2933

3034
/// <summary>Creates a new instance of this struct</summary>
@@ -37,6 +41,7 @@ public WorldProperties(double trackPosition, int sectionIndex, double brightness
3741
// Mechanik visibility- not used
3842
StartingDistance = 0;
3943
EndingDistance = 0;
44+
AccurateObjectDisposalZOffset = 0;
4045
}
4146
}
4247
}

source/OpenBveApi/Objects/ObjectTypes/AnimatedObjectCollection.cs

+2-3
Original file line numberDiff line numberDiff line change
@@ -64,9 +64,8 @@ public override void CreateObject(Vector3 Position, Transformation WorldTransfor
6464
Matrix4D mat = Matrix4D.Identity;
6565
mat *= Objects[i].States[0].Translation;
6666
mat *= transformationMatrix;
67-
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
68-
69-
currentHost.CreateStaticObject(Objects[i].States[0].Prototype, Position, LocalTransformation, mat, Matrix4D.CreateTranslation(Position.X, Position.Y, -Position.Z), zOffset, Properties);
67+
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
68+
currentHost.CreateStaticObject(Objects[i].States[0].Prototype, Position, LocalTransformation, mat, Matrix4D.CreateTranslation(Position.X, Position.Y, -Position.Z), Properties);
7069
}
7170
else
7271
{

source/OpenBveApi/Objects/ObjectTypes/StaticObject.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -472,7 +472,7 @@ public void ApplyShear(Vector3 Direction, Vector3 Shear, double Ratio)
472472
public override void CreateObject(Vector3 Position, Transformation WorldTransformation, Transformation LocalTransformation,
473473
WorldProperties Properties, bool DuplicateMaterials = false)
474474
{
475-
currentHost.CreateStaticObject(this, Position, WorldTransformation, LocalTransformation, 0.0, Properties);
475+
currentHost.CreateStaticObject(this, Position, WorldTransformation, LocalTransformation, Properties);
476476
}
477477

478478
/// <inheritdoc />

source/OpenBveApi/System/Hosts/HostInterface.cs

+4-12
Original file line numberDiff line numberDiff line change
@@ -382,13 +382,9 @@ public virtual void ExecuteFunctionScript(FunctionScripting.FunctionScript funct
382382
/// <param name="Position">The world position</param>
383383
/// <param name="WorldTransformation">The world transformation to apply (e.g. ground, rail)</param>
384384
/// <param name="LocalTransformation">The local transformation to apply in order to rotate the model</param>
385-
/// <param name="AccurateObjectDisposalZOffset">The offset for accurate Z-disposal</param>
386-
/// <param name="StartingDistance">The absolute route based starting distance for the object</param>
387-
/// <param name="EndingDistance">The absolute route based ending distance for the object</param>
388-
/// <param name="TrackPosition">The absolute route based track position</param>
389-
/// <param name="Brightness">The brightness value at this track position</param>
385+
/// <param name="Properties">The world properties of the object</param>
390386
/// <returns>The index to the created object, or -1 if this call fails</returns>
391-
public virtual int CreateStaticObject(StaticObject Prototype, Vector3 Position, Transformation WorldTransformation, Transformation LocalTransformation, double AccurateObjectDisposalZOffset, WorldProperties Properties)
387+
public virtual int CreateStaticObject(StaticObject Prototype, Vector3 Position, Transformation WorldTransformation, Transformation LocalTransformation, WorldProperties Properties)
392388
{
393389
return -1;
394390
}
@@ -402,13 +398,9 @@ public virtual int CreateStaticObject(StaticObject Prototype, Vector3 Position,
402398
/// </param>
403399
/// <param name="Rotate">The rotation matrix to apply</param>
404400
/// <param name="Translate">The translation matrix to apply</param>
405-
/// <param name="AccurateObjectDisposalZOffset">The offset for accurate Z-disposal</param>
406-
/// <param name="StartingDistance">The absolute route based starting distance for the object</param>
407-
/// <param name="EndingDistance">The absolute route based ending distance for the object</param>
408-
/// <param name="TrackPosition">The absolute route based track position</param>
409-
/// <param name="Brightness">The brightness value at this track position</param>
401+
/// <param name="Properties">The world properties of the object</param>
410402
/// <returns>The index to the created object, or -1 if this call fails</returns>
411-
public virtual int CreateStaticObject(StaticObject Prototype, Vector3 Position, Transformation LocalTransformation, Matrix4D Rotate, Matrix4D Translate, double AccurateObjectDisposalZOffset, WorldProperties Properties)
403+
public virtual int CreateStaticObject(StaticObject Prototype, Vector3 Position, Transformation LocalTransformation, Matrix4D Rotate, Matrix4D Translate, WorldProperties Properties)
412404
{
413405
return -1;
414406
}

source/Plugins/Route.CsvRw/Structures/Route/Crack.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ internal void Create(int CurrentRail, Transformation RailTransformation, Vector3
4949
else
5050
{
5151
StaticObject Crack = (StaticObject) Structure.CrackL[Type].Transform(d0, d1);
52-
Plugin.CurrentHost.CreateStaticObject(Crack, pos, RailTransformation, Transformation.NullTransformation, 0, new WorldProperties(0, StartingDistance, StartingDistance, EndingDistance));
52+
Plugin.CurrentHost.CreateStaticObject(Crack, pos, RailTransformation, Transformation.NullTransformation, new WorldProperties(0, StartingDistance, StartingDistance, EndingDistance));
5353
}
5454
}
5555
else if (d0 > 0.0)
@@ -61,7 +61,7 @@ internal void Create(int CurrentRail, Transformation RailTransformation, Vector3
6161
else
6262
{
6363
StaticObject Crack = (StaticObject) Structure.CrackR[Type].Transform(d0, d1);
64-
Plugin.CurrentHost.CreateStaticObject(Crack, pos, RailTransformation, Transformation.NullTransformation, 0, new WorldProperties(0, StartingDistance, StartingDistance, EndingDistance));
64+
Plugin.CurrentHost.CreateStaticObject(Crack, pos, RailTransformation, Transformation.NullTransformation, new WorldProperties(0, StartingDistance, StartingDistance, EndingDistance));
6565
}
6666
}
6767
}

source/Plugins/Route.CsvRw/Structures/Route/Form.cs

+8-8
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ internal void CreatePrimaryRail(Block currentBlock, Block nextBlock, Vector3 pos
7575
}
7676
else
7777
{
78-
Plugin.CurrentHost.CreateStaticObject((StaticObject) Structure.FormCL[FormType], pos, RailTransformation, Transformation.NullTransformation, 0.0, Properties);
78+
Plugin.CurrentHost.CreateStaticObject((StaticObject) Structure.FormCL[FormType], pos, RailTransformation, Transformation.NullTransformation, Properties);
7979
}
8080

8181
if (RoofType > 0)
@@ -95,7 +95,7 @@ internal void CreatePrimaryRail(Block currentBlock, Block nextBlock, Vector3 pos
9595
}
9696
else
9797
{
98-
Plugin.CurrentHost.CreateStaticObject((StaticObject) Structure.RoofCL[RoofType], pos, RailTransformation, Transformation.NullTransformation, 0.0, Properties);
98+
Plugin.CurrentHost.CreateStaticObject((StaticObject) Structure.RoofCL[RoofType], pos, RailTransformation, Transformation.NullTransformation, Properties);
9999
}
100100
}
101101
}
@@ -116,7 +116,7 @@ internal void CreatePrimaryRail(Block currentBlock, Block nextBlock, Vector3 pos
116116
}
117117
else
118118
{
119-
Plugin.CurrentHost.CreateStaticObject((StaticObject) Structure.FormCR[FormType], pos, RailTransformation, Transformation.NullTransformation, 0.0, Properties);
119+
Plugin.CurrentHost.CreateStaticObject((StaticObject) Structure.FormCR[FormType], pos, RailTransformation, Transformation.NullTransformation, Properties);
120120
}
121121

122122
if (RoofType > 0)
@@ -136,7 +136,7 @@ internal void CreatePrimaryRail(Block currentBlock, Block nextBlock, Vector3 pos
136136
}
137137
else
138138
{
139-
Plugin.CurrentHost.CreateStaticObject((StaticObject) Structure.RoofCR[RoofType], pos, RailTransformation, Transformation.NullTransformation, 0.0, Properties);
139+
Plugin.CurrentHost.CreateStaticObject((StaticObject) Structure.RoofCR[RoofType], pos, RailTransformation, Transformation.NullTransformation, Properties);
140140
}
141141
}
142142
}
@@ -172,7 +172,7 @@ internal void CreatePrimaryRail(Block currentBlock, Block nextBlock, Vector3 pos
172172
else
173173
{
174174
StaticObject FormC = (StaticObject) Structure.FormCL[FormType].Transform(d0, d1);
175-
Plugin.CurrentHost.CreateStaticObject(FormC, pos, RailTransformation, Transformation.NullTransformation, 0.0, Properties);
175+
Plugin.CurrentHost.CreateStaticObject(FormC, pos, RailTransformation, Transformation.NullTransformation, Properties);
176176
}
177177

178178
if (RoofType > 0)
@@ -193,7 +193,7 @@ internal void CreatePrimaryRail(Block currentBlock, Block nextBlock, Vector3 pos
193193
else
194194
{
195195
StaticObject RoofC = (StaticObject) Structure.RoofCL[RoofType].Transform(d0, d1);
196-
Plugin.CurrentHost.CreateStaticObject(RoofC, pos, RailTransformation, Transformation.NullTransformation, 0.0, Properties);
196+
Plugin.CurrentHost.CreateStaticObject(RoofC, pos, RailTransformation, Transformation.NullTransformation, Properties);
197197
}
198198
}
199199
}
@@ -215,7 +215,7 @@ internal void CreatePrimaryRail(Block currentBlock, Block nextBlock, Vector3 pos
215215
else
216216
{
217217
StaticObject FormC = (StaticObject) Structure.FormCR[FormType].Transform(d0, d1);
218-
Plugin.CurrentHost.CreateStaticObject(FormC, pos, RailTransformation, Transformation.NullTransformation, 0.0, Properties);
218+
Plugin.CurrentHost.CreateStaticObject(FormC, pos, RailTransformation, Transformation.NullTransformation, Properties);
219219
}
220220

221221
if (RoofType > 0)
@@ -236,7 +236,7 @@ internal void CreatePrimaryRail(Block currentBlock, Block nextBlock, Vector3 pos
236236
else
237237
{
238238
StaticObject RoofC = (StaticObject) Structure.RoofCR[RoofType].Transform(d0, d1);
239-
Plugin.CurrentHost.CreateStaticObject(RoofC, pos, RailTransformation, Transformation.NullTransformation, 0.0, Properties);
239+
Plugin.CurrentHost.CreateStaticObject(RoofC, pos, RailTransformation, Transformation.NullTransformation, Properties);
240240
}
241241
}
242242
}

source/RouteViewer/System/Host.cs

+4-4
Original file line numberDiff line numberDiff line change
@@ -482,14 +482,14 @@ public override void ExecuteFunctionScript(OpenBveApi.FunctionScripting.Function
482482
FunctionScripts.ExecuteFunctionScript(functionScript, (TrainManager.Train)train, CarIndex, Position, TrackPosition, SectionIndex, IsPartOfTrain, TimeElapsed, CurrentState);
483483
}
484484

485-
public override int CreateStaticObject(StaticObject Prototype, Vector3 Position, Transformation WorldTransformation, Transformation LocalTransformation, double AccurateObjectDisposalZOffset, WorldProperties Properties)
485+
public override int CreateStaticObject(StaticObject Prototype, Vector3 Position, Transformation WorldTransformation, Transformation LocalTransformation, WorldProperties Properties)
486486
{
487-
return Program.Renderer.CreateStaticObject(Prototype, Position, WorldTransformation, LocalTransformation, Program.CurrentRoute.AccurateObjectDisposal, AccurateObjectDisposalZOffset, Properties, Program.CurrentRoute.BlockLength);
487+
return Program.Renderer.CreateStaticObject(Prototype, Position, WorldTransformation, LocalTransformation, Program.CurrentRoute.AccurateObjectDisposal, Properties, Program.CurrentRoute.BlockLength);
488488
}
489489

490-
public override int CreateStaticObject(StaticObject Prototype, Vector3 Position, Transformation LocalTransformation, Matrix4D Rotate, Matrix4D Translate, double AccurateObjectDisposalZOffset, WorldProperties Properties)
490+
public override int CreateStaticObject(StaticObject Prototype, Vector3 Position, Transformation LocalTransformation, Matrix4D Rotate, Matrix4D Translate, WorldProperties Properties)
491491
{
492-
return Program.Renderer.CreateStaticObject(Position, Prototype, LocalTransformation, Rotate, Translate, Program.CurrentRoute.AccurateObjectDisposal, AccurateObjectDisposalZOffset, Properties, Program.CurrentRoute.BlockLength);
492+
return Program.Renderer.CreateStaticObject(Position, Prototype, LocalTransformation, Rotate, Translate, Program.CurrentRoute.AccurateObjectDisposal, Properties, Program.CurrentRoute.BlockLength);
493493
}
494494

495495
public override void CreateDynamicObject(ref ObjectState internalObject)

0 commit comments

Comments
 (0)