diff --git a/src/openrct2-unity/Assets/Materials/TileElements/Wall.mat b/src/openrct2-unity/Assets/Materials/TileElements/Wall.mat
index bddfe3fa4d..4a278d28a5 100644
--- a/src/openrct2-unity/Assets/Materials/TileElements/Wall.mat
+++ b/src/openrct2-unity/Assets/Materials/TileElements/Wall.mat
@@ -25,7 +25,7 @@ Material:
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- Wall:
- m_Texture: {fileID: 2800000, guid: 82bfab83fdf1f9a45ad41b3a55036bdc, type: 3}
+ m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _BaseMap:
diff --git a/src/openrct2-unity/Assets/Models/CrossShape.fbx b/src/openrct2-unity/Assets/Models/CrossShape.fbx
index bd08c5b0b1..601ae36e28 100644
Binary files a/src/openrct2-unity/Assets/Models/CrossShape.fbx and b/src/openrct2-unity/Assets/Models/CrossShape.fbx differ
diff --git a/src/openrct2-unity/Assets/Prefabs/GameObjects/SmallScenery.prefab b/src/openrct2-unity/Assets/Prefabs/GameObjects/SmallScenery.prefab
index 112e4e3651..9d21de96c0 100644
--- a/src/openrct2-unity/Assets/Prefabs/GameObjects/SmallScenery.prefab
+++ b/src/openrct2-unity/Assets/Prefabs/GameObjects/SmallScenery.prefab
@@ -10,6 +10,8 @@ GameObject:
m_Component:
- component: {fileID: 4881190563108725489}
- component: {fileID: 4510758288248945009}
+ - component: {fileID: 8891683890991230830}
+ - component: {fileID: 2076936050456593542}
m_Layer: 0
m_Name: SmallScenery
m_TagString: Untagged
@@ -27,8 +29,7 @@ Transform:
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
- m_Children:
- - {fileID: 3436706900042224624}
+ m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@@ -45,88 +46,50 @@ BoxCollider:
serializedVersion: 2
m_Size: {x: 0.7, y: 1, z: 0.7}
m_Center: {x: 0, y: 0.5, z: 0}
---- !u!1001 &7695269097637886186
-PrefabInstance:
+--- !u!33 &8891683890991230830
+MeshFilter:
m_ObjectHideFlags: 0
- serializedVersion: 2
- m_Modification:
- m_TransformParent: {fileID: 4881190563108725489}
- m_Modifications:
- - target: {fileID: -4216859302048453862, guid: 334eee2ab21182249a574cd672a35807,
- type: 3}
- propertyPath: m_LocalPosition.x
- value: -0
- objectReference: {fileID: 0}
- - target: {fileID: -4216859302048453862, guid: 334eee2ab21182249a574cd672a35807,
- type: 3}
- propertyPath: m_LocalPosition.y
- value: 0.5
- objectReference: {fileID: 0}
- - target: {fileID: -4216859302048453862, guid: 334eee2ab21182249a574cd672a35807,
- type: 3}
- propertyPath: m_LocalPosition.z
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: -4216859302048453862, guid: 334eee2ab21182249a574cd672a35807,
- type: 3}
- propertyPath: m_LocalRotation.x
- value: 0.6532815
- objectReference: {fileID: 0}
- - target: {fileID: -4216859302048453862, guid: 334eee2ab21182249a574cd672a35807,
- type: 3}
- propertyPath: m_LocalRotation.y
- value: -0.27059802
- objectReference: {fileID: 0}
- - target: {fileID: -4216859302048453862, guid: 334eee2ab21182249a574cd672a35807,
- type: 3}
- propertyPath: m_LocalRotation.z
- value: 0.27059808
- objectReference: {fileID: 0}
- - target: {fileID: -4216859302048453862, guid: 334eee2ab21182249a574cd672a35807,
- type: 3}
- propertyPath: m_LocalRotation.w
- value: 0.65328145
- objectReference: {fileID: 0}
- - target: {fileID: -4216859302048453862, guid: 334eee2ab21182249a574cd672a35807,
- type: 3}
- propertyPath: m_RootOrder
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: -4216859302048453862, guid: 334eee2ab21182249a574cd672a35807,
- type: 3}
- propertyPath: m_LocalEulerAnglesHint.x
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: -4216859302048453862, guid: 334eee2ab21182249a574cd672a35807,
- type: 3}
- propertyPath: m_LocalEulerAnglesHint.y
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: -4216859302048453862, guid: 334eee2ab21182249a574cd672a35807,
- type: 3}
- propertyPath: m_LocalEulerAnglesHint.z
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: -1504981713932161579, guid: 334eee2ab21182249a574cd672a35807,
- type: 3}
- propertyPath: m_Materials.Array.data[0]
- value:
- objectReference: {fileID: 2100000, guid: 9405b3275a6527e448a1122260745f9d, type: 2}
- - target: {fileID: -927199367670048503, guid: 334eee2ab21182249a574cd672a35807,
- type: 3}
- propertyPath: m_Name
- value: CrossShape
- objectReference: {fileID: 0}
- - target: {fileID: -927199367670048503, guid: 334eee2ab21182249a574cd672a35807,
- type: 3}
- propertyPath: m_StaticEditorFlags
- value: 4294967295
- objectReference: {fileID: 0}
- m_RemovedComponents: []
- m_SourcePrefab: {fileID: 100100000, guid: 334eee2ab21182249a574cd672a35807, type: 3}
---- !u!4 &3436706900042224624 stripped
-Transform:
- m_CorrespondingSourceObject: {fileID: -4216859302048453862, guid: 334eee2ab21182249a574cd672a35807,
- type: 3}
- m_PrefabInstance: {fileID: 7695269097637886186}
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4881190563108725493}
+ m_Mesh: {fileID: 6677062280192487409, guid: 334eee2ab21182249a574cd672a35807, type: 3}
+--- !u!23 &2076936050456593542
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4881190563108725493}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 2100000, guid: 9405b3275a6527e448a1122260745f9d, type: 2}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
diff --git a/src/openrct2-unity/Assets/Prefabs/GameObjects/Wall.prefab b/src/openrct2-unity/Assets/Prefabs/GameObjects/Wall.prefab
index 2238b659ca..a76d5160df 100644
--- a/src/openrct2-unity/Assets/Prefabs/GameObjects/Wall.prefab
+++ b/src/openrct2-unity/Assets/Prefabs/GameObjects/Wall.prefab
@@ -9,6 +9,8 @@ GameObject:
serializedVersion: 6
m_Component:
- component: {fileID: 8066037642481970818}
+ - component: {fileID: 2658238295191841746}
+ - component: {fileID: 2520377533842412944}
m_Layer: 0
m_Name: Wall
m_TagString: Untagged
@@ -26,93 +28,54 @@ Transform:
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
- m_Children:
- - {fileID: 2546421845808257625}
+ m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!1001 &7362261569040527683
-PrefabInstance:
+--- !u!33 &2658238295191841746
+MeshFilter:
m_ObjectHideFlags: 0
- serializedVersion: 2
- m_Modification:
- m_TransformParent: {fileID: 8066037642481970818}
- m_Modifications:
- - target: {fileID: -4216859302048453862, guid: fecac2db4ca269d48ad3260b1f999c28,
- type: 3}
- propertyPath: m_LocalPosition.x
- value: -0
- objectReference: {fileID: 0}
- - target: {fileID: -4216859302048453862, guid: fecac2db4ca269d48ad3260b1f999c28,
- type: 3}
- propertyPath: m_LocalPosition.y
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: -4216859302048453862, guid: fecac2db4ca269d48ad3260b1f999c28,
- type: 3}
- propertyPath: m_LocalPosition.z
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: -4216859302048453862, guid: fecac2db4ca269d48ad3260b1f999c28,
- type: 3}
- propertyPath: m_LocalRotation.x
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: -4216859302048453862, guid: fecac2db4ca269d48ad3260b1f999c28,
- type: 3}
- propertyPath: m_LocalRotation.y
- value: -0
- objectReference: {fileID: 0}
- - target: {fileID: -4216859302048453862, guid: fecac2db4ca269d48ad3260b1f999c28,
- type: 3}
- propertyPath: m_LocalRotation.z
- value: -0
- objectReference: {fileID: 0}
- - target: {fileID: -4216859302048453862, guid: fecac2db4ca269d48ad3260b1f999c28,
- type: 3}
- propertyPath: m_LocalRotation.w
- value: 1
- objectReference: {fileID: 0}
- - target: {fileID: -4216859302048453862, guid: fecac2db4ca269d48ad3260b1f999c28,
- type: 3}
- propertyPath: m_RootOrder
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: -4216859302048453862, guid: fecac2db4ca269d48ad3260b1f999c28,
- type: 3}
- propertyPath: m_LocalEulerAnglesHint.x
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: -4216859302048453862, guid: fecac2db4ca269d48ad3260b1f999c28,
- type: 3}
- propertyPath: m_LocalEulerAnglesHint.y
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: -4216859302048453862, guid: fecac2db4ca269d48ad3260b1f999c28,
- type: 3}
- propertyPath: m_LocalEulerAnglesHint.z
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: -1504981713932161579, guid: fecac2db4ca269d48ad3260b1f999c28,
- type: 3}
- propertyPath: m_Materials.Array.data[0]
- value:
- objectReference: {fileID: 2100000, guid: dcd74c535e88cff4dae46d097efe2d58, type: 2}
- - target: {fileID: -927199367670048503, guid: fecac2db4ca269d48ad3260b1f999c28,
- type: 3}
- propertyPath: m_Name
- value: Wall
- objectReference: {fileID: 0}
- - target: {fileID: -927199367670048503, guid: fecac2db4ca269d48ad3260b1f999c28,
- type: 3}
- propertyPath: m_StaticEditorFlags
- value: 4294967295
- objectReference: {fileID: 0}
- m_RemovedComponents: []
- m_SourcePrefab: {fileID: 100100000, guid: fecac2db4ca269d48ad3260b1f999c28, type: 3}
---- !u!4 &2546421845808257625 stripped
-Transform:
- m_CorrespondingSourceObject: {fileID: -4216859302048453862, guid: fecac2db4ca269d48ad3260b1f999c28,
- type: 3}
- m_PrefabInstance: {fileID: 7362261569040527683}
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 6613264330481197744}
+ m_Mesh: {fileID: -462981019419857548, guid: fecac2db4ca269d48ad3260b1f999c28, type: 3}
+--- !u!23 &2520377533842412944
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 6613264330481197744}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 2100000, guid: dcd74c535e88cff4dae46d097efe2d58, type: 2}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
diff --git a/src/openrct2-unity/Assets/Scenes/ParkScene.unity b/src/openrct2-unity/Assets/Scenes/ParkScene.unity
index ed705bfd82..af29e6c8de 100644
--- a/src/openrct2-unity/Assets/Scenes/ParkScene.unity
+++ b/src/openrct2-unity/Assets/Scenes/ParkScene.unity
@@ -1496,7 +1496,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 79be679884da2154dacd80be9669d5dc, type: 3}
m_Name:
m_EditorClassIdentifier:
- selectedPark: Magic_Towers_94.sv6
+ selectedPark: My test park/Test park with house.sv6
--- !u!4 &1347800243
Transform:
m_ObjectHideFlags: 0
diff --git a/src/openrct2-unity/Assets/Scripts/Editor/SpriteViewerWindow.cs b/src/openrct2-unity/Assets/Scripts/Editor/SpriteViewerWindow.cs
index 9b43a9dfc0..9162e45e70 100644
--- a/src/openrct2-unity/Assets/Scripts/Editor/SpriteViewerWindow.cs
+++ b/src/openrct2-unity/Assets/Scripts/Editor/SpriteViewerWindow.cs
@@ -65,7 +65,7 @@ namespace EditorExtensions
}
else
{
- Texture2D texture = graphic.GetTexture();
+ Texture2D texture = graphic.GetTexture(makeTextureReadable: true);
GUIContent icon = EditorGUIUtility.IconContent("SavePassive", "Save sprite");
GUILayout.BeginHorizontal();
diff --git a/src/openrct2-unity/Assets/Scripts/Graphics/Graphic.cs b/src/openrct2-unity/Assets/Scripts/Graphics/Graphic.cs
index 8ea2c8d75b..59dd4a5c7d 100644
--- a/src/openrct2-unity/Assets/Scripts/Graphics/Graphic.cs
+++ b/src/openrct2-unity/Assets/Scripts/Graphics/Graphic.cs
@@ -89,10 +89,14 @@ namespace Graphics
///
/// Gets the texture for this graphic.
///
- public Texture2D GetTexture(TextureWrapMode wrapMode = TextureWrapMode.Clamp)
+ public Texture2D GetTexture(TextureWrapMode wrapMode = TextureWrapMode.Clamp, bool makeTextureReadable = false)
{
- if (_texture != null)
+ if (_texture != null
+ // if caller requires a readable texture, but cached is not; do not return the cached.
+ && (!makeTextureReadable || _texture.isReadable))
+ {
return _texture;
+ }
uint imageIndex = ImageIndex;
int pixelCount = PixelCount;
@@ -112,12 +116,12 @@ namespace Graphics
// Export as Texture2D image.
_texture = new Texture2D(width, height, TextureFormat.RGBA32, mipChain: false)
{
- name = $"i:{imageIndex}",
+ name = $"sprite{imageIndex & 0x7FFFF}(unmasked{imageIndex})",
filterMode = FilterMode.Point,
wrapMode = wrapMode
};
_texture.SetPixels32(colors);
- _texture.Apply(updateMipmaps: false, makeNoLongerReadable: true);
+ _texture.Apply(updateMipmaps: false, makeNoLongerReadable: !makeTextureReadable);
return _texture;
}
}
diff --git a/src/openrct2-unity/Assets/Scripts/OpenRCT2/Bindings/OpenRCT2.Game.cs b/src/openrct2-unity/Assets/Scripts/OpenRCT2/Bindings/OpenRCT2.Game.cs
index 064a24126e..78f832406b 100644
--- a/src/openrct2-unity/Assets/Scripts/OpenRCT2/Bindings/OpenRCT2.Game.cs
+++ b/src/openrct2-unity/Assets/Scripts/OpenRCT2/Bindings/OpenRCT2.Game.cs
@@ -35,7 +35,7 @@ namespace Lib
if (!ArePathSettingsValid())
return false;
- StartGame(openrctDataPath, rct2Path, rct1Path);
+ StartGame(_openrctDataPath, _rct2Path, _rct1Path);
return true;
}
@@ -77,10 +77,10 @@ namespace Lib
///
static void LoadPathSettings()
{
- openrctDataPath = Configuration.OpenRCT2DataPath;
- rct2Path = Configuration.RCT2Path;
- rct1Path = Configuration.RCT1Path;
- parkPath = Configuration.ParkPath;
+ _openrctDataPath = Configuration.OpenRCT2DataPath;
+ _rct2Path = Configuration.RCT2Path;
+ _rct1Path = Configuration.RCT1Path;
+ _parkPath = Configuration.ParkPath;
}
@@ -89,19 +89,19 @@ namespace Lib
///
static bool ArePathSettingsValid()
{
- if (!Directory.Exists(openrctDataPath))
+ if (!Directory.Exists(_openrctDataPath))
{
- Debug.LogError($"Could not load OpenRCT2: openrct path is invalid. ({openrctDataPath})");
+ Debug.LogError($"Could not load OpenRCT2: openrct path is invalid. ({_openrctDataPath})");
return false;
}
- if (!Directory.Exists(rct2Path))
+ if (!Directory.Exists(_rct2Path))
{
- Debug.LogError($"Could not load OpenRCT2: rct2 path is invalid. ({rct2Path})");
+ Debug.LogError($"Could not load OpenRCT2: rct2 path is invalid. ({_rct2Path})");
return false;
}
- if (!string.IsNullOrWhiteSpace(rct1Path) && !Directory.Exists(rct1Path))
+ if (!string.IsNullOrWhiteSpace(_rct1Path) && !Directory.Exists(_rct1Path))
{
- Debug.LogError($"Could not load OpenRCT2: rct1 path is invalid. ({rct1Path})");
+ Debug.LogError($"Could not load OpenRCT2: rct1 path is invalid. ({_rct1Path})");
return false;
}
return true;
diff --git a/src/openrct2-unity/Assets/Scripts/OpenRCT2/Bindings/OpenRCT2.cs b/src/openrct2-unity/Assets/Scripts/OpenRCT2/Bindings/OpenRCT2.cs
index a6c9d71cdc..f2fcb8461b 100644
--- a/src/openrct2-unity/Assets/Scripts/OpenRCT2/Bindings/OpenRCT2.cs
+++ b/src/openrct2-unity/Assets/Scripts/OpenRCT2/Bindings/OpenRCT2.cs
@@ -12,10 +12,10 @@ namespace Lib
public string selectedPark;
// Configuration for data paths
- static string openrctDataPath;
- static string rct2Path;
- static string rct1Path;
- static string parkPath;
+ static string _openrctDataPath;
+ static string _rct2Path;
+ static string _rct1Path;
+ static string _parkPath;
///
@@ -73,6 +73,6 @@ namespace Lib
/// Gets the file path to the park file.
///
string GetParkFilePath()
- => Path.Combine(parkPath, selectedPark);
+ => Path.Combine(_parkPath, selectedPark);
}
}
diff --git a/src/openrct2-unity/Assets/Scripts/OpenRCT2/Editor/OpenRCT2Editor.cs b/src/openrct2-unity/Assets/Scripts/OpenRCT2/Editor/OpenRCT2Editor.cs
index 1628082859..0653ef8ea8 100644
--- a/src/openrct2-unity/Assets/Scripts/OpenRCT2/Editor/OpenRCT2Editor.cs
+++ b/src/openrct2-unity/Assets/Scripts/OpenRCT2/Editor/OpenRCT2Editor.cs
@@ -16,48 +16,48 @@ namespace Lib
const string DefaultOpenRCT2Path = @"bin\data"; // from repo root
const string DefaultParkPath = @"Parks"; // from unity project/executable root
- static readonly string[] ValidParkExtensions = { ".sv6", ".sc6", ".sv4", ".sc4" };
+ static readonly string[] _validParkExtensions = { ".sv6", ".sc6", ".sv4", ".sc4" };
- bool groupToggleDataPaths = true;
- string openrct2DataPath;
- string rct2Path;
- string rct1Path;
- string parkPath;
+ bool _groupToggleDataPaths = true;
+ string _openrct2DataPath;
+ string _rct2Path;
+ string _rct1Path;
+ string _parkPath;
- bool groupToggleSelectedPark = true;
- string[] allDiscoveredParks;
- int selectedParkIndex = -1;
+ bool _groupToggleSelectedPark = true;
+ string[] _allDiscoveredParks;
+ int _selectedParkIndex = -1;
void OnEnable()
{
- openrct2DataPath = Configuration.OpenRCT2DataPath;
+ _openrct2DataPath = Configuration.OpenRCT2DataPath;
// If openrct2 path is null, take the default bin folder in the project.
- if (string.IsNullOrWhiteSpace(openrct2DataPath))
- openrct2DataPath = GetDefaultOpenRCT2DataPath();
+ if (string.IsNullOrWhiteSpace(_openrct2DataPath))
+ _openrct2DataPath = GetDefaultOpenRCT2DataPath();
- rct2Path = Configuration.RCT2Path;
- rct1Path = Configuration.RCT1Path;
+ _rct2Path = Configuration.RCT2Path;
+ _rct1Path = Configuration.RCT1Path;
- parkPath = Configuration.ParkPath;
+ _parkPath = Configuration.ParkPath;
// If park path is null, take the default park folder in the project.
- if (string.IsNullOrWhiteSpace(parkPath))
+ if (string.IsNullOrWhiteSpace(_parkPath))
{
DirectoryInfo unityRoot = FindUnityRootFolder();
- parkPath = Path.Combine(unityRoot.FullName, DefaultParkPath);
+ _parkPath = Path.Combine(unityRoot.FullName, DefaultParkPath);
}
}
void OnDisable()
{
- Configuration.OpenRCT2DataPath = openrct2DataPath;
- Configuration.RCT2Path = rct2Path;
- Configuration.RCT1Path = rct1Path;
- Configuration.ParkPath = parkPath;
+ Configuration.OpenRCT2DataPath = _openrct2DataPath;
+ Configuration.RCT2Path = _rct2Path;
+ Configuration.RCT1Path = _rct1Path;
+ Configuration.ParkPath = _parkPath;
}
@@ -66,64 +66,68 @@ namespace Lib
///
public override void OnInspectorGUI()
{
- groupToggleDataPaths = EditorGUILayout.BeginFoldoutHeaderGroup(groupToggleDataPaths, "Source paths");
+ _groupToggleDataPaths = EditorGUILayout.BeginFoldoutHeaderGroup(_groupToggleDataPaths, "Source paths");
- if (groupToggleDataPaths)
+ if (_groupToggleDataPaths)
{
// OpenRCT2
- openrct2DataPath = EditorGUILayout.TextField("OpenRCT2 data path", openrct2DataPath);
+ _openrct2DataPath = EditorGUILayout.TextField("OpenRCT2 data path", _openrct2DataPath);
- if (string.IsNullOrWhiteSpace(openrct2DataPath))
+ if (string.IsNullOrWhiteSpace(_openrct2DataPath))
EditorGUILayout.HelpBox("The OpenRCT2 data path is not specified! Point it to the 'data' folder for OpenRCT2.", MessageType.Error);
- else if (!Directory.Exists(openrct2DataPath))
+ else if (!Directory.Exists(_openrct2DataPath))
{
string defaultPath = GetDefaultOpenRCT2DataPath();
- if (openrct2DataPath == defaultPath)
- EditorGUILayout.HelpBox($"The default OpenRCT2 data path does not exist:\n'{openrct2DataPath}'\n\nYou need to succesfully build the C++ OpenRCT2 project at least one to use this data folder.", MessageType.Error);
+ if (_openrct2DataPath == defaultPath)
+ EditorGUILayout.HelpBox($"The default OpenRCT2 data path does not exist:\n'{_openrct2DataPath}'\n\nYou need to succesfully build the C++ OpenRCT2 project at least one to use this data folder.", MessageType.Error);
else
- EditorGUILayout.HelpBox($"The specified OpenRCT2 data path does not exist:\n'{openrct2DataPath}'\n\nPoint it to the 'data' folder for OpenRCT2.", MessageType.Error);
+ EditorGUILayout.HelpBox($"The specified OpenRCT2 data path does not exist:\n'{_openrct2DataPath}'\n\nPoint it to the 'data' folder for OpenRCT2.", MessageType.Error);
}
// RCT2 path
- rct2Path = EditorGUILayout.TextField("RCT2 path", rct2Path);
+ _rct2Path = EditorGUILayout.TextField("RCT2 path", _rct2Path);
- if (string.IsNullOrWhiteSpace(rct2Path))
+ if (string.IsNullOrWhiteSpace(_rct2Path))
EditorGUILayout.HelpBox("The RCT2 path is not specified! Point it to the folder where RCT2 is installed.", MessageType.Error);
- else if (!Directory.Exists(rct2Path))
- EditorGUILayout.HelpBox($"The specified RCT2 path does not exist:\n'{rct2Path}'\n\nPoint it to the folder where RCT2 is installed.", MessageType.Error);
+ else if (!Directory.Exists(_rct2Path))
+ EditorGUILayout.HelpBox($"The specified RCT2 path does not exist:\n'{_rct2Path}'\n\nPoint it to the folder where RCT2 is installed.", MessageType.Error);
// RCT1 path
- rct1Path = EditorGUILayout.TextField("RCT1 path (optional)", rct1Path);
+ _rct1Path = EditorGUILayout.TextField("RCT1 path (optional)", _rct1Path);
- if (!string.IsNullOrWhiteSpace(rct1Path) && !Directory.Exists(rct1Path))
- EditorGUILayout.HelpBox($"The specified RCT1 path does not exist:\n{rct1Path}\n\nPoint it to the folder where RCT1 is installed or leave it empty.", MessageType.Error);
+ if (!string.IsNullOrWhiteSpace(_rct1Path) && !Directory.Exists(_rct1Path))
+ EditorGUILayout.HelpBox($"The specified RCT1 path does not exist:\n{_rct1Path}\n\nPoint it to the folder where RCT1 is installed or leave it empty.", MessageType.Error);
// Parks path
- parkPath = EditorGUILayout.TextField("Parks path", parkPath);
+ _parkPath = EditorGUILayout.TextField("Parks path", _parkPath);
- if (string.IsNullOrWhiteSpace(parkPath))
+ if (string.IsNullOrWhiteSpace(_parkPath))
EditorGUILayout.HelpBox("The parks path is not specified! Point it to a folder where your parks are located.", MessageType.Error);
- else if (!Directory.Exists(parkPath))
- EditorGUILayout.HelpBox($"The specified parks path does not exist:\n'{parkPath}'\n\nPoint it to the folder where your parks are located.", MessageType.Error);
+ else if (!Directory.Exists(_parkPath))
+ EditorGUILayout.HelpBox($"The specified parks path does not exist:\n'{_parkPath}'\n\nPoint it to the folder where your parks are located.", MessageType.Error);
}
EditorGUILayout.EndFoldoutHeaderGroup();
// Select a park
- groupToggleSelectedPark = EditorGUILayout.BeginFoldoutHeaderGroup(groupToggleSelectedPark, "Selected park");
+ _groupToggleSelectedPark = EditorGUILayout.BeginFoldoutHeaderGroup(_groupToggleSelectedPark, "Selected park");
- if (groupToggleSelectedPark)
+ if (_groupToggleSelectedPark)
{
bool parkFoundError = false;
- if (allDiscoveredParks == null)
+ if (_allDiscoveredParks == null)
{
// Search for all park files in the specified park folder...
- DirectoryInfo parkDirectory = new DirectoryInfo(parkPath);
- if (parkDirectory.Exists)
+ DirectoryInfo parkDirectory = new DirectoryInfo(_parkPath);
+ if (!parkDirectory.Exists)
+ {
+ parkFoundError = true;
+ }
+ else
{
int cutoff = parkDirectory.FullName.Length + 1;
- allDiscoveredParks = parkDirectory
+ _allDiscoveredParks = parkDirectory
.EnumerateFiles("*.*", SearchOption.AllDirectories)
.Where(HasValidParkExtension)
.Select(e => e
@@ -135,27 +139,29 @@ namespace Lib
OpenRCT2 game = (OpenRCT2)target;
string selected = game.selectedPark;
- selectedParkIndex = Array.IndexOf(allDiscoveredParks, selected);
+ _selectedParkIndex = Array.IndexOf(_allDiscoveredParks, selected);
- if (selectedParkIndex != -1)
- game.selectedPark = allDiscoveredParks[selectedParkIndex];
+ if (_selectedParkIndex != -1)
+ {
+ game.selectedPark = _allDiscoveredParks[_selectedParkIndex];
+ }
}
- else
- parkFoundError = true;
}
// Set the current selected park + update if another is selected
if (!parkFoundError)
{
- int currentSelection = selectedParkIndex;
- currentSelection = EditorGUILayout.Popup(currentSelection, allDiscoveredParks);
+ int currentSelection = _selectedParkIndex;
+ currentSelection = EditorGUILayout.Popup(currentSelection, _allDiscoveredParks);
- if (currentSelection != selectedParkIndex)
+ if (currentSelection != _selectedParkIndex)
{
- selectedParkIndex = currentSelection;
+ _selectedParkIndex = currentSelection;
OpenRCT2 game = (OpenRCT2)target;
- game.selectedPark = allDiscoveredParks[currentSelection];
+ Undo.RecordObject(game, "Select park");
+
+ game.selectedPark = _allDiscoveredParks[currentSelection];
}
}
}
@@ -199,6 +205,6 @@ namespace Lib
/// Returns whether the file entry has a valid extension.
///
bool HasValidParkExtension(FileSystemInfo fileSystemInfo)
- => ValidParkExtensions.Any(e => string.Equals(e, fileSystemInfo.Extension, StringComparison.InvariantCultureIgnoreCase));
+ => _validParkExtensions.Any(e => string.Equals(e, fileSystemInfo.Extension, StringComparison.InvariantCultureIgnoreCase));
}
}
diff --git a/src/openrct2-unity/Model Sources/Block.blend b/src/openrct2-unity/Model Sources/Block.blend
new file mode 100644
index 0000000000..86a38bafc8
Binary files /dev/null and b/src/openrct2-unity/Model Sources/Block.blend differ
diff --git a/src/openrct2-unity/Model Sources/CrossShape.blend b/src/openrct2-unity/Model Sources/CrossShape.blend
index 7bb0f8e187..3d43d7cb03 100644
Binary files a/src/openrct2-unity/Model Sources/CrossShape.blend and b/src/openrct2-unity/Model Sources/CrossShape.blend differ
diff --git a/src/openrct2-unity/Parks/Fort Anachronism.sv6 b/src/openrct2-unity/Parks/Fort Anachronism.sv6
new file mode 100644
index 0000000000..952c7903b6
Binary files /dev/null and b/src/openrct2-unity/Parks/Fort Anachronism.sv6 differ
diff --git a/src/openrct2-unity/Parks/Good Knight Park.sv6 b/src/openrct2-unity/Parks/Good Knight Park.sv6
new file mode 100644
index 0000000000..99f89a27b1
Binary files /dev/null and b/src/openrct2-unity/Parks/Good Knight Park.sv6 differ
diff --git a/src/openrct2-unity/Parks/My test park/Test park with house.sv6 b/src/openrct2-unity/Parks/My test park/Test park with house.sv6
new file mode 100644
index 0000000000..a28b13fd22
Binary files /dev/null and b/src/openrct2-unity/Parks/My test park/Test park with house.sv6 differ
diff --git a/src/openrct2-unity/Parks/SC30.SC4 b/src/openrct2-unity/Parks/SC30.SC4
new file mode 100644
index 0000000000..a900fe5764
Binary files /dev/null and b/src/openrct2-unity/Parks/SC30.SC4 differ