Skip to content

Commit ccd2f2c

Browse files
authored
Move away from dat as source of truth (#199)
* start moving away from dat as source of truth, and using generic object models as the source * progress * progress * airportobject loads * read steam object * read streetlight, levelcrossing * compiling unit tests * airport unit tests work * progress * progress * progress * progress * progress * progress * fix sounds, most viewmodels * start working on vehicle * vehicle loading * vehicles complete * fix building elevator sequences * cleanup * remove some old readonlyspan methods
1 parent d5de930 commit ccd2f2c

File tree

361 files changed

+9969
-5644
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

361 files changed

+9969
-5644
lines changed
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
using Dat.Types;
2+
using Definitions.ObjectModels.Types;
3+
4+
namespace Dat.Converters;
5+
6+
public static class GraphicsElementConverter
7+
{
8+
public static DatG1Element32 Convert(this GraphicsElement graphicsElement)
9+
=> new(
10+
0U, // Offset is not used in the DatG1Element32, it is set later when writing to the file
11+
graphicsElement.Width,
12+
graphicsElement.Height,
13+
graphicsElement.XOffset,
14+
graphicsElement.YOffset,
15+
(DatG1ElementFlags)graphicsElement.Flags,
16+
graphicsElement.ZoomOffset
17+
)
18+
{
19+
ImageData = graphicsElement.ImageData,
20+
};
21+
22+
public static GraphicsElement Convert(this DatG1Element32 graphicsElement)
23+
=> new()
24+
{
25+
Width = graphicsElement.Width,
26+
Height = graphicsElement.Height,
27+
XOffset = graphicsElement.XOffset,
28+
YOffset = graphicsElement.YOffset,
29+
Flags = (GraphicsElementFlags)graphicsElement.Flags,
30+
ZoomOffset = graphicsElement.ZoomOffset,
31+
ImageData = graphicsElement.ImageData,
32+
};
33+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
using Dat.Data;
2+
using Definitions.ObjectModels.Types;
3+
4+
namespace Dat.Converters;
5+
6+
public static class LanguageIdConverter
7+
{
8+
public static DatLanguageId Convert(this LanguageId languageId)
9+
=> languageId switch
10+
{
11+
LanguageId.English_UK => DatLanguageId.English_UK,
12+
LanguageId.English_US => DatLanguageId.English_US,
13+
LanguageId.French => DatLanguageId.French,
14+
LanguageId.German => DatLanguageId.German,
15+
LanguageId.Spanish => DatLanguageId.Spanish,
16+
LanguageId.Italian => DatLanguageId.Italian,
17+
LanguageId.Dutch => DatLanguageId.Dutch,
18+
LanguageId.Swedish => DatLanguageId.Swedish,
19+
LanguageId.Japanese => DatLanguageId.Japanese,
20+
LanguageId.Korean => DatLanguageId.Korean,
21+
LanguageId.Chinese_Simplified => DatLanguageId.Chinese_Simplified,
22+
LanguageId.Chinese_Traditional => DatLanguageId.Chinese_Traditional,
23+
LanguageId.id_12 => DatLanguageId.id_12,
24+
LanguageId.Portuguese => DatLanguageId.Portuguese,
25+
_ => throw new NotImplementedException(),
26+
};
27+
28+
public static LanguageId Convert(this DatLanguageId languageId)
29+
=> languageId switch
30+
{
31+
DatLanguageId.English_UK => LanguageId.English_UK,
32+
DatLanguageId.English_US => LanguageId.English_US,
33+
DatLanguageId.French => LanguageId.French,
34+
DatLanguageId.German => LanguageId.German,
35+
DatLanguageId.Spanish => LanguageId.Spanish,
36+
DatLanguageId.Italian => LanguageId.Italian,
37+
DatLanguageId.Dutch => LanguageId.Dutch,
38+
DatLanguageId.Swedish => LanguageId.Swedish,
39+
DatLanguageId.Japanese => LanguageId.Japanese,
40+
DatLanguageId.Korean => LanguageId.Korean,
41+
DatLanguageId.Chinese_Simplified => LanguageId.Chinese_Simplified,
42+
DatLanguageId.Chinese_Traditional => LanguageId.Chinese_Traditional,
43+
DatLanguageId.id_12 => LanguageId.id_12,
44+
DatLanguageId.Portuguese => LanguageId.Portuguese,
45+
_ => throw new NotImplementedException(),
46+
};
47+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
using Dat.Data;
2+
using Definitions.ObjectModels.Types;
3+
4+
namespace Dat.Converters;
5+
6+
public static class ObjectSourceConverter
7+
{
8+
public static DatObjectSource Convert(this ObjectSource objectSource)
9+
=> objectSource switch
10+
{
11+
ObjectSource.Custom => DatObjectSource.Custom,
12+
ObjectSource.LocomotionSteam => DatObjectSource.Vanilla,
13+
ObjectSource.LocomotionGoG => DatObjectSource.Vanilla,
14+
ObjectSource.OpenLoco => DatObjectSource.OpenLoco,
15+
_ => throw new NotImplementedException(),
16+
};
17+
18+
public static ObjectSource Convert(this DatObjectSource objectSource)
19+
=> objectSource switch
20+
{
21+
DatObjectSource.Custom => ObjectSource.Custom,
22+
DatObjectSource.Vanilla => ObjectSource.LocomotionSteam, // todo - can check the file checksum to determine if it's GoG or Steam
23+
DatObjectSource.OpenLoco => ObjectSource.OpenLoco,
24+
_ => throw new NotImplementedException(),
25+
};
26+
}
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
using Dat.Data;
2+
using Dat.Types;
3+
using Definitions.ObjectModels.Types;
4+
5+
namespace Dat.Converters;
6+
7+
public static class S5HeaderConverter
8+
{
9+
public static S5Header Convert(this ObjectModelHeader objectModelHeader)
10+
=> new(objectModelHeader.Name, objectModelHeader.Checksum)
11+
{
12+
ObjectType = objectModelHeader.ObjectType.Convert(),
13+
ObjectSource = objectModelHeader.ObjectSource.Convert(),
14+
};
15+
16+
public static ObjectModelHeader Convert(this S5Header s5Header)
17+
=> new(
18+
s5Header.Name,
19+
s5Header.Checksum,
20+
s5Header.ObjectType.Convert(),
21+
s5Header.ObjectSource.Convert());
22+
}
23+
24+
public static class ObjectTypeConverter
25+
{
26+
public static ObjectType Convert(this DatObjectType datObjectType)
27+
=> datObjectType switch
28+
{
29+
DatObjectType.InterfaceSkin => ObjectType.InterfaceSkin,
30+
DatObjectType.Sound => ObjectType.Sound,
31+
DatObjectType.Currency => ObjectType.Currency,
32+
DatObjectType.Steam => ObjectType.Steam,
33+
DatObjectType.CliffEdge => ObjectType.CliffEdge,
34+
DatObjectType.Water => ObjectType.Water,
35+
DatObjectType.Land => ObjectType.Land,
36+
DatObjectType.TownNames => ObjectType.TownNames,
37+
DatObjectType.Cargo => ObjectType.Cargo,
38+
DatObjectType.Wall => ObjectType.Wall,
39+
DatObjectType.TrackSignal => ObjectType.TrackSignal,
40+
DatObjectType.LevelCrossing => ObjectType.LevelCrossing,
41+
DatObjectType.StreetLight => ObjectType.StreetLight,
42+
DatObjectType.Tunnel => ObjectType.Tunnel,
43+
DatObjectType.Bridge => ObjectType.Bridge,
44+
DatObjectType.TrackStation => ObjectType.TrackStation,
45+
DatObjectType.TrackExtra => ObjectType.TrackExtra,
46+
DatObjectType.Track => ObjectType.Track,
47+
DatObjectType.RoadStation => ObjectType.RoadStation,
48+
DatObjectType.RoadExtra => ObjectType.RoadExtra,
49+
DatObjectType.Road => ObjectType.Road,
50+
DatObjectType.Airport => ObjectType.Airport,
51+
DatObjectType.Dock => ObjectType.Dock,
52+
DatObjectType.Vehicle => ObjectType.Vehicle,
53+
DatObjectType.Tree => ObjectType.Tree,
54+
DatObjectType.Snow => ObjectType.Snow,
55+
DatObjectType.Climate => ObjectType.Climate,
56+
DatObjectType.HillShapes => ObjectType.HillShapes,
57+
DatObjectType.Building => ObjectType.Building,
58+
DatObjectType.Scaffolding => ObjectType.Scaffolding,
59+
DatObjectType.Industry => ObjectType.Industry,
60+
DatObjectType.Region => ObjectType.Region,
61+
DatObjectType.Competitor => ObjectType.Competitor,
62+
DatObjectType.ScenarioText => ObjectType.ScenarioText,
63+
_ => throw new ArgumentOutOfRangeException(nameof(datObjectType), datObjectType, "Unknown Dat object type")
64+
};
65+
66+
public static DatObjectType Convert(this ObjectType objectType)
67+
=> objectType switch
68+
{
69+
ObjectType.InterfaceSkin => DatObjectType.InterfaceSkin,
70+
ObjectType.Sound => DatObjectType.Sound,
71+
ObjectType.Currency => DatObjectType.Currency,
72+
ObjectType.Steam => DatObjectType.Steam,
73+
ObjectType.CliffEdge => DatObjectType.CliffEdge,
74+
ObjectType.Water => DatObjectType.Water,
75+
ObjectType.Land => DatObjectType.Land,
76+
ObjectType.TownNames => DatObjectType.TownNames,
77+
ObjectType.Cargo => DatObjectType.Cargo,
78+
ObjectType.Wall => DatObjectType.Wall,
79+
ObjectType.TrackSignal => DatObjectType.TrackSignal,
80+
ObjectType.LevelCrossing => DatObjectType.LevelCrossing,
81+
ObjectType.StreetLight => DatObjectType.StreetLight,
82+
ObjectType.Tunnel => DatObjectType.Tunnel,
83+
ObjectType.Bridge => DatObjectType.Bridge,
84+
ObjectType.TrackStation => DatObjectType.TrackStation,
85+
ObjectType.TrackExtra => DatObjectType.TrackExtra,
86+
ObjectType.Track => DatObjectType.Track,
87+
ObjectType.RoadStation => DatObjectType.RoadStation,
88+
ObjectType.RoadExtra => DatObjectType.RoadExtra,
89+
ObjectType.Road => DatObjectType.Road,
90+
ObjectType.Airport => DatObjectType.Airport,
91+
ObjectType.Dock => DatObjectType.Dock,
92+
ObjectType.Vehicle => DatObjectType.Vehicle,
93+
ObjectType.Tree => DatObjectType.Tree,
94+
ObjectType.Snow => DatObjectType.Snow,
95+
ObjectType.Climate => DatObjectType.Climate,
96+
ObjectType.HillShapes => DatObjectType.HillShapes,
97+
ObjectType.Building => DatObjectType.Building,
98+
ObjectType.Scaffolding => DatObjectType.Scaffolding,
99+
ObjectType.Industry => DatObjectType.Industry,
100+
ObjectType.Region => DatObjectType.Region,
101+
ObjectType.Competitor => DatObjectType.Competitor,
102+
ObjectType.ScenarioText => DatObjectType.ScenarioText,
103+
_ => throw new ArgumentOutOfRangeException(nameof(objectType), objectType, "Unknown Object type")
104+
};
105+
}

Dat/Dat.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
<ItemGroup>
1818
<ProjectReference Include="..\Common\Common.csproj" />
19+
<ProjectReference Include="..\Definitions\Definitions.csproj" />
1920
</ItemGroup>
2021

2122
</Project>

0 commit comments

Comments
 (0)