From 009bbbe9cba259682c2cfdc58eb1ff0604add88b Mon Sep 17 00:00:00 2001 From: Bas Date: Sat, 18 Apr 2020 18:22:10 +0200 Subject: [PATCH] Cubes for scenery, tracks paths, and peeps --- src/openrct2-dll/openrct2-dll.cpp | 27 ++- src/openrct2-unity/Assembly-CSharp.csproj | 7 + .../Assets/Materials/TileElements.meta | 8 + .../Assets/Materials/TileElements/Path.mat | 90 ++++++++ .../Materials/TileElements/Path.mat.meta | 8 + .../Materials/TileElements/SmallScenery.mat | 90 ++++++++ .../TileElements/SmallScenery.mat.meta | 8 + .../Assets/Materials/TileElements/Track.mat | 90 ++++++++ .../Materials/TileElements/Track.mat.meta | 8 + src/openrct2-unity/Assets/Prefabs.meta | 8 + src/openrct2-unity/Assets/Prefabs/Path.prefab | 95 ++++++++ .../Assets/Prefabs/Path.prefab.meta | 7 + src/openrct2-unity/Assets/Prefabs/Peep.prefab | 206 ++++++++++++++++++ .../Assets/Prefabs/Peep.prefab.meta | 7 + .../Assets/Prefabs/SmallScenery.prefab | 126 +++++++++++ .../Assets/Prefabs/SmallScenery.prefab.meta | 7 + .../Assets/Prefabs/Track.prefab | 126 +++++++++++ .../Assets/Prefabs/Track.prefab.meta | 7 + .../Assets/Scenes/ParkScene.unity | 169 +++++++------- .../Scripts/OpenRCT2/Enums/PeepSpriteType.cs | 56 +++++ .../OpenRCT2/Enums/PeepSpriteType.cs.meta | 11 + .../Scripts/OpenRCT2/Enums/PeepState.cs | 29 +++ .../Scripts/OpenRCT2/Enums/PeepState.cs.meta | 11 + .../Assets/Scripts/OpenRCT2/Enums/PeepType.cs | 10 + .../Scripts/OpenRCT2/Enums/PeepType.cs.meta | 11 + .../Scripts/OpenRCT2/Enums/SpriteType.cs | 12 + .../Scripts/OpenRCT2/Enums/SpriteType.cs.meta | 11 + .../Scripts/OpenRCT2/Map/Map.Generation.cs | 35 ++- .../Scripts/OpenRCT2/Map/Map.Surface.cs | 4 +- .../Assets/Scripts/OpenRCT2/Map/Map.cs | 41 +++- .../Scripts/OpenRCT2/Map/PeepController.cs | 39 ++++ .../OpenRCT2/Map/PeepController.cs.meta | 11 + .../Assets/Scripts/OpenRCT2/OpenRCT2.Lib.cs | 34 ++- .../Assets/Scripts/OpenRCT2/OpenRCT2.cs | 39 +--- .../Assets/Scripts/Sprites.meta | 8 + .../Assets/Scripts/Sprites/Peep.cs | 54 +++++ .../Assets/Scripts/Sprites/Peep.cs.meta | 11 + .../Assets/Scripts/Sprites/SpriteBase.cs | 30 +++ .../Assets/Scripts/Sprites/SpriteBase.cs.meta | 11 + src/openrct2-unity/Parks/Dynamite Dunes.sv6 | Bin 0 -> 314248 bytes 40 files changed, 1427 insertions(+), 135 deletions(-) create mode 100644 src/openrct2-unity/Assets/Materials/TileElements.meta create mode 100644 src/openrct2-unity/Assets/Materials/TileElements/Path.mat create mode 100644 src/openrct2-unity/Assets/Materials/TileElements/Path.mat.meta create mode 100644 src/openrct2-unity/Assets/Materials/TileElements/SmallScenery.mat create mode 100644 src/openrct2-unity/Assets/Materials/TileElements/SmallScenery.mat.meta create mode 100644 src/openrct2-unity/Assets/Materials/TileElements/Track.mat create mode 100644 src/openrct2-unity/Assets/Materials/TileElements/Track.mat.meta create mode 100644 src/openrct2-unity/Assets/Prefabs.meta create mode 100644 src/openrct2-unity/Assets/Prefabs/Path.prefab create mode 100644 src/openrct2-unity/Assets/Prefabs/Path.prefab.meta create mode 100644 src/openrct2-unity/Assets/Prefabs/Peep.prefab create mode 100644 src/openrct2-unity/Assets/Prefabs/Peep.prefab.meta create mode 100644 src/openrct2-unity/Assets/Prefabs/SmallScenery.prefab create mode 100644 src/openrct2-unity/Assets/Prefabs/SmallScenery.prefab.meta create mode 100644 src/openrct2-unity/Assets/Prefabs/Track.prefab create mode 100644 src/openrct2-unity/Assets/Prefabs/Track.prefab.meta create mode 100644 src/openrct2-unity/Assets/Scripts/OpenRCT2/Enums/PeepSpriteType.cs create mode 100644 src/openrct2-unity/Assets/Scripts/OpenRCT2/Enums/PeepSpriteType.cs.meta create mode 100644 src/openrct2-unity/Assets/Scripts/OpenRCT2/Enums/PeepState.cs create mode 100644 src/openrct2-unity/Assets/Scripts/OpenRCT2/Enums/PeepState.cs.meta create mode 100644 src/openrct2-unity/Assets/Scripts/OpenRCT2/Enums/PeepType.cs create mode 100644 src/openrct2-unity/Assets/Scripts/OpenRCT2/Enums/PeepType.cs.meta create mode 100644 src/openrct2-unity/Assets/Scripts/OpenRCT2/Enums/SpriteType.cs create mode 100644 src/openrct2-unity/Assets/Scripts/OpenRCT2/Enums/SpriteType.cs.meta create mode 100644 src/openrct2-unity/Assets/Scripts/OpenRCT2/Map/PeepController.cs create mode 100644 src/openrct2-unity/Assets/Scripts/OpenRCT2/Map/PeepController.cs.meta create mode 100644 src/openrct2-unity/Assets/Scripts/Sprites.meta create mode 100644 src/openrct2-unity/Assets/Scripts/Sprites/Peep.cs create mode 100644 src/openrct2-unity/Assets/Scripts/Sprites/Peep.cs.meta create mode 100644 src/openrct2-unity/Assets/Scripts/Sprites/SpriteBase.cs create mode 100644 src/openrct2-unity/Assets/Scripts/Sprites/SpriteBase.cs.meta create mode 100644 src/openrct2-unity/Parks/Dynamite Dunes.sv6 diff --git a/src/openrct2-dll/openrct2-dll.cpp b/src/openrct2-dll/openrct2-dll.cpp index a73d2f3f51..88982af5da 100644 --- a/src/openrct2-dll/openrct2-dll.cpp +++ b/src/openrct2-dll/openrct2-dll.cpp @@ -9,6 +9,7 @@ #include #include #include +#include #define EXPORT __declspec(dllexport) @@ -91,7 +92,7 @@ extern "C" { CoordsXY coords = CoordsXY(x * COORDS_XY_STEP, y * COORDS_XY_STEP).ToTileStart(); *element = *map_get_first_element_at(coords); - + /* printf("(me) GetMapElementAt( %i, %i ) = ( %i, %i )\n", x, y, coords.x, coords.y); printf("(me) -> %i \t(type)\n", element->type); printf("(me) -> %i \t(flags)\n", element->Flags); @@ -109,6 +110,7 @@ extern "C" printf("(me) -> %i \t(pad 0xA)\n", element->pad_08[5]); printf("(me) -> %i \t(pad 0xB)\n", element->pad_08[6]); printf("(me) -> %i \t(pad 0xC)\n", element->pad_08[7]); + */ } @@ -130,7 +132,28 @@ extern "C" element++; } - printf("(me) GetMapElementsAt( %i, %i ) = %i\n", x, y, elementCount); + // printf("(me) GetMapElementsAt( %i, %i ) = %i\n", x, y, elementCount); return elementCount; } + + + EXPORT int GetSpriteCount(int spriteType) + { + return gSpriteListCount[spriteType]; + } + + + EXPORT int GetAllPeeps(Peep* peeps, int arraySize) + { + Peep* peep; + uint16_t spriteIndex; + int peepCount = 0; + + FOR_ALL_PEEPS (spriteIndex, peep) + { + peeps[peepCount] = *peep; + peepCount++; + } + return peepCount; + } } diff --git a/src/openrct2-unity/Assembly-CSharp.csproj b/src/openrct2-unity/Assembly-CSharp.csproj index f64947de8b..8ee1484d53 100644 --- a/src/openrct2-unity/Assembly-CSharp.csproj +++ b/src/openrct2-unity/Assembly-CSharp.csproj @@ -69,6 +69,10 @@ + + + + @@ -78,6 +82,7 @@ + @@ -85,6 +90,8 @@ + + D:/Projects/Visual Studio/OpenRCT2-Unity/src/openrct2-unity/Library/ScriptAssemblies/Unity.RenderPipeline.Universal.ShaderLibrary.dll diff --git a/src/openrct2-unity/Assets/Materials/TileElements.meta b/src/openrct2-unity/Assets/Materials/TileElements.meta new file mode 100644 index 0000000000..1be6d95d1d --- /dev/null +++ b/src/openrct2-unity/Assets/Materials/TileElements.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a22e6720f6e9a8a41bdc66ce86aa550c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/openrct2-unity/Assets/Materials/TileElements/Path.mat b/src/openrct2-unity/Assets/Materials/TileElements/Path.mat new file mode 100644 index 0000000000..66e310db15 --- /dev/null +++ b/src/openrct2-unity/Assets/Materials/TileElements/Path.mat @@ -0,0 +1,90 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-6087739915823202549 +MonoBehaviour: + m_ObjectHideFlags: 11 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: + version: 1 +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Path + m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 2050 + stringTagMap: + RenderType: Opaque + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _AlphaClip: 0 + - _Blend: 0 + - _BumpScale: 1 + - _Cull: 2 + - _Cutoff: 0.5 + - _DstBlend: 0 + - _EnvironmentReflections: 1 + - _GlossMapScale: 0 + - _Glossiness: 0 + - _GlossyReflections: 0 + - _Metallic: 0 + - _OcclusionStrength: 1 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _Smoothness: 0.5 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _Surface: 0 + - _WorkflowMode: 1 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 0.8396226, g: 0.8051061, b: 0.2653524, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} diff --git a/src/openrct2-unity/Assets/Materials/TileElements/Path.mat.meta b/src/openrct2-unity/Assets/Materials/TileElements/Path.mat.meta new file mode 100644 index 0000000000..e04399ce10 --- /dev/null +++ b/src/openrct2-unity/Assets/Materials/TileElements/Path.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cbcbb50871c3ee249a86ce301a435197 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/openrct2-unity/Assets/Materials/TileElements/SmallScenery.mat b/src/openrct2-unity/Assets/Materials/TileElements/SmallScenery.mat new file mode 100644 index 0000000000..e67810cb6e --- /dev/null +++ b/src/openrct2-unity/Assets/Materials/TileElements/SmallScenery.mat @@ -0,0 +1,90 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-1709346977567021853 +MonoBehaviour: + m_ObjectHideFlags: 11 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: + version: 1 +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: SmallScenery + m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 2050 + stringTagMap: + RenderType: Opaque + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _AlphaClip: 0 + - _Blend: 0 + - _BumpScale: 1 + - _Cull: 2 + - _Cutoff: 0.5 + - _DstBlend: 0 + - _EnvironmentReflections: 1 + - _GlossMapScale: 0 + - _Glossiness: 0 + - _GlossyReflections: 0 + - _Metallic: 0 + - _OcclusionStrength: 1 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _Smoothness: 0.5 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _Surface: 0 + - _WorkflowMode: 1 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 0.24213137, g: 0.9433962, b: 0.18244925, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} diff --git a/src/openrct2-unity/Assets/Materials/TileElements/SmallScenery.mat.meta b/src/openrct2-unity/Assets/Materials/TileElements/SmallScenery.mat.meta new file mode 100644 index 0000000000..654c2001f3 --- /dev/null +++ b/src/openrct2-unity/Assets/Materials/TileElements/SmallScenery.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9405b3275a6527e448a1122260745f9d +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/openrct2-unity/Assets/Materials/TileElements/Track.mat b/src/openrct2-unity/Assets/Materials/TileElements/Track.mat new file mode 100644 index 0000000000..4eff74736f --- /dev/null +++ b/src/openrct2-unity/Assets/Materials/TileElements/Track.mat @@ -0,0 +1,90 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Track + m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 2050 + stringTagMap: + RenderType: Opaque + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _AlphaClip: 0 + - _Blend: 0 + - _BumpScale: 1 + - _Cull: 2 + - _Cutoff: 0.5 + - _DstBlend: 0 + - _EnvironmentReflections: 1 + - _GlossMapScale: 0 + - _Glossiness: 0 + - _GlossyReflections: 0 + - _Metallic: 0 + - _OcclusionStrength: 1 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _Smoothness: 0.5 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _Surface: 0 + - _WorkflowMode: 1 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 0.14070843, g: 0.38398197, b: 0.9622642, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} +--- !u!114 &1195764472689965134 +MonoBehaviour: + m_ObjectHideFlags: 11 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: + version: 1 diff --git a/src/openrct2-unity/Assets/Materials/TileElements/Track.mat.meta b/src/openrct2-unity/Assets/Materials/TileElements/Track.mat.meta new file mode 100644 index 0000000000..96cf0b1beb --- /dev/null +++ b/src/openrct2-unity/Assets/Materials/TileElements/Track.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ce68aa93eb4498b4fa6a2a58f04c2bfb +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/openrct2-unity/Assets/Prefabs.meta b/src/openrct2-unity/Assets/Prefabs.meta new file mode 100644 index 0000000000..3f4c8a606b --- /dev/null +++ b/src/openrct2-unity/Assets/Prefabs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 417a1958fadae06479efa1e3216fefc4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/openrct2-unity/Assets/Prefabs/Path.prefab b/src/openrct2-unity/Assets/Prefabs/Path.prefab new file mode 100644 index 0000000000..44c1dd4d97 --- /dev/null +++ b/src/openrct2-unity/Assets/Prefabs/Path.prefab @@ -0,0 +1,95 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &6681454114598486694 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8590796294908207296} + - component: {fileID: 4704467836609243183} + - component: {fileID: 4633940964326981864} + - component: {fileID: 7788466826857178541} + m_Layer: 0 + m_Name: Path + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8590796294908207296 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6681454114598486694} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 2, y: 0.1, z: 2} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &4704467836609243183 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6681454114598486694} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &4633940964326981864 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6681454114598486694} + 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: cbcbb50871c3ee249a86ce301a435197, 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 +--- !u!65 &7788466826857178541 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6681454114598486694} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} diff --git a/src/openrct2-unity/Assets/Prefabs/Path.prefab.meta b/src/openrct2-unity/Assets/Prefabs/Path.prefab.meta new file mode 100644 index 0000000000..2d6b40e0cb --- /dev/null +++ b/src/openrct2-unity/Assets/Prefabs/Path.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d5e4b199bf0e87b47b14b43c86d8c12f +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/openrct2-unity/Assets/Prefabs/Peep.prefab b/src/openrct2-unity/Assets/Prefabs/Peep.prefab new file mode 100644 index 0000000000..17ac822893 --- /dev/null +++ b/src/openrct2-unity/Assets/Prefabs/Peep.prefab @@ -0,0 +1,206 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &2243138470265440622 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2645086933494403710} + - component: {fileID: 2924439791650863674} + - component: {fileID: 649080645740034516} + - component: {fileID: 209739661609702225} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2645086933494403710 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2243138470265440622} + m_LocalRotation: {x: 0, y: 0, z: 0.38268343, w: 0.92387956} + m_LocalPosition: {x: 0, y: 2.4, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4953467779861283896} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 45} +--- !u!33 &2924439791650863674 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2243138470265440622} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &649080645740034516 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2243138470265440622} + 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: 31321ba15b8f8eb4c954353edc038b1d, 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 +--- !u!65 &209739661609702225 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2243138470265440622} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &3679483723861955363 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7648761038087286746} + - component: {fileID: 1558212993950969197} + - component: {fileID: 1181170805432948223} + m_Layer: 0 + m_Name: Cylinder + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7648761038087286746 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3679483723861955363} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4953467779861283896} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &1558212993950969197 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3679483723861955363} + m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1181170805432948223 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3679483723861955363} + 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: 31321ba15b8f8eb4c954353edc038b1d, 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 +--- !u!1 &5040585313333409549 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4953467779861283896} + m_Layer: 0 + m_Name: Peep + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4953467779861283896 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5040585313333409549} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.5, y: 0.5, z: 0.5} + m_Children: + - {fileID: 7648761038087286746} + - {fileID: 2645086933494403710} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/src/openrct2-unity/Assets/Prefabs/Peep.prefab.meta b/src/openrct2-unity/Assets/Prefabs/Peep.prefab.meta new file mode 100644 index 0000000000..44723088aa --- /dev/null +++ b/src/openrct2-unity/Assets/Prefabs/Peep.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f7506ca24f3b99a49898e9ec122adf29 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/openrct2-unity/Assets/Prefabs/SmallScenery.prefab b/src/openrct2-unity/Assets/Prefabs/SmallScenery.prefab new file mode 100644 index 0000000000..0da56ed85a --- /dev/null +++ b/src/openrct2-unity/Assets/Prefabs/SmallScenery.prefab @@ -0,0 +1,126 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &2683137259978889568 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1228939534608163269} + - component: {fileID: 2045211547915089124} + - component: {fileID: 9070556944249528267} + - component: {fileID: 3239359449835856751} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1228939534608163269 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2683137259978889568} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0.5, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4881190563108725489} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &2045211547915089124 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2683137259978889568} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &9070556944249528267 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2683137259978889568} + 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 +--- !u!65 &3239359449835856751 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2683137259978889568} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &4881190563108725493 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4881190563108725489} + m_Layer: 0 + m_Name: SmallScenery + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4881190563108725489 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4881190563108725493} + 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: 1228939534608163269} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/src/openrct2-unity/Assets/Prefabs/SmallScenery.prefab.meta b/src/openrct2-unity/Assets/Prefabs/SmallScenery.prefab.meta new file mode 100644 index 0000000000..3e71d0470c --- /dev/null +++ b/src/openrct2-unity/Assets/Prefabs/SmallScenery.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: e5123beefdc062f42b5e3fb98e104cef +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/openrct2-unity/Assets/Prefabs/Track.prefab b/src/openrct2-unity/Assets/Prefabs/Track.prefab new file mode 100644 index 0000000000..ef7f468072 --- /dev/null +++ b/src/openrct2-unity/Assets/Prefabs/Track.prefab @@ -0,0 +1,126 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &3460111253241373034 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7165131111595459873} + m_Layer: 0 + m_Name: Track + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7165131111595459873 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3460111253241373034} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.5, y: 1.5, z: 1.5} + m_Children: + - {fileID: 3676241976214955814} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &6000070329163251540 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3676241976214955814} + - component: {fileID: 8925812817146430215} + - component: {fileID: 5738204678170786053} + - component: {fileID: 3446040187138021836} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3676241976214955814 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6000070329163251540} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0.5, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 7165131111595459873} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &8925812817146430215 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6000070329163251540} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &5738204678170786053 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6000070329163251540} + 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: ce68aa93eb4498b4fa6a2a58f04c2bfb, 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 +--- !u!65 &3446040187138021836 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6000070329163251540} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} diff --git a/src/openrct2-unity/Assets/Prefabs/Track.prefab.meta b/src/openrct2-unity/Assets/Prefabs/Track.prefab.meta new file mode 100644 index 0000000000..0aa753116c --- /dev/null +++ b/src/openrct2-unity/Assets/Prefabs/Track.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ac7c5b20c9776c2458a7c5f077e645f0 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/openrct2-unity/Assets/Scenes/ParkScene.unity b/src/openrct2-unity/Assets/Scenes/ParkScene.unity index b7938e3f19..5f65444e41 100644 --- a/src/openrct2-unity/Assets/Scenes/ParkScene.unity +++ b/src/openrct2-unity/Assets/Scenes/ParkScene.unity @@ -132,6 +132,8 @@ GameObject: - component: {fileID: 440946298} - component: {fileID: 440946297} - component: {fileID: 440946296} + - component: {fileID: 440946300} + - component: {fileID: 440946299} m_Layer: 0 m_Name: Main Camera m_TagString: MainCamera @@ -197,106 +199,63 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 440946295} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 1, z: -10} + m_LocalRotation: {x: 0.42261827, y: 0, z: 0, w: 0.9063079} + m_LocalPosition: {x: 0, y: 10, z: -10} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1208690280 -GameObject: + m_LocalEulerAnglesHint: {x: 50, y: 0, z: 0} +--- !u!114 &440946299 +MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1208690284} - - component: {fileID: 1208690283} - - component: {fileID: 1208690282} - - component: {fileID: 1208690281} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!65 &1208690281 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1208690280} - m_Material: {fileID: 0} - m_IsTrigger: 0 + m_GameObject: {fileID: 440946295} m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!23 &1208690282 -MeshRenderer: + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d5f84f21f7ee56a4cbfe7d98918d88ff, type: 3} + m_Name: + m_EditorClassIdentifier: + terrainMap: {fileID: 1491562768} + cameraRotateSpeed: 500 + cameraMoveSpeed: 1000 + cameraZoomSpeed: 5000 + minCameraHeight: 5 + maxCameraHeight: 150 + outsideMapDistance: 250 +--- !u!114 &440946300 +MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1208690280} + m_GameObject: {fileID: 440946295} 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: 31321ba15b8f8eb4c954353edc038b1d, 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 ---- !u!33 &1208690283 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1208690280} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!4 &1208690284 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1208690280} - 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: [] - m_Father: {fileID: 0} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_RenderShadows: 1 + m_RequiresDepthTextureOption: 2 + m_RequiresOpaqueTextureOption: 2 + m_CameraType: 0 + m_Cameras: [] + m_RendererIndex: -1 + m_VolumeLayerMask: + serializedVersion: 2 + m_Bits: 1 + m_VolumeTrigger: {fileID: 0} + m_RenderPostProcessing: 0 + m_Antialiasing: 0 + m_AntialiasingQuality: 2 + m_StopNaN: 0 + m_Dithering: 0 + m_ClearDepth: 1 + m_RequiresDepthTexture: 0 + m_RequiresColorTexture: 0 + m_Version: 2 --- !u!1 &1347800241 GameObject: m_ObjectHideFlags: 0 @@ -326,6 +285,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 79be679884da2154dacd80be9669d5dc, type: 3} m_Name: m_EditorClassIdentifier: + park: Forest-Frontiers.sv6 --- !u!4 &1347800243 Transform: m_ObjectHideFlags: 0 @@ -349,9 +309,11 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 1491562770} - - component: {fileID: 1491562769} - component: {fileID: 1491562772} - component: {fileID: 1491562771} + - component: {fileID: 1491562774} + - component: {fileID: 1491562769} + - component: {fileID: 1491562773} m_Layer: 0 m_Name: Map m_TagString: Untagged @@ -371,6 +333,12 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 8f4353bcde699fe4dbc7f9641bcd509e, type: 3} m_Name: m_EditorClassIdentifier: + pathPrefab: {fileID: 6681454114598486694, guid: d5e4b199bf0e87b47b14b43c86d8c12f, + type: 3} + trackPrefab: {fileID: 3460111253241373034, guid: ac7c5b20c9776c2458a7c5f077e645f0, + type: 3} + smallSceneryPrefab: {fileID: 4881190563108725493, guid: e5123beefdc062f42b5e3fb98e104cef, + type: 3} --- !u!4 &1491562770 Transform: m_ObjectHideFlags: 0 @@ -432,6 +400,33 @@ MeshFilter: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1491562768} m_Mesh: {fileID: 0} +--- !u!114 &1491562773 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1491562768} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 26c4168fd423cac45b389b005f0daf26, type: 3} + m_Name: + m_EditorClassIdentifier: + peepPrefab: {fileID: 5040585313333409549, guid: f7506ca24f3b99a49898e9ec122adf29, + type: 3} +--- !u!65 &1491562774 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1491562768} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 100000000, y: 1, z: 100000000} + m_Center: {x: 0, y: 0, z: 0} --- !u!1 &1675223600 GameObject: m_ObjectHideFlags: 0 diff --git a/src/openrct2-unity/Assets/Scripts/OpenRCT2/Enums/PeepSpriteType.cs b/src/openrct2-unity/Assets/Scripts/OpenRCT2/Enums/PeepSpriteType.cs new file mode 100644 index 0000000000..8f92f0c27e --- /dev/null +++ b/src/openrct2-unity/Assets/Scripts/OpenRCT2/Enums/PeepSpriteType.cs @@ -0,0 +1,56 @@ +namespace OpenRCT2.Unity +{ + public enum PeepSpriteType : byte + { + Normal = 0, + Handyman = 1, + Mechanic = 2, + Security = 3, + EntertainerPanda = 4, + EntertainerTiger = 5, + EntertainerElephant = 6, + EntertainerRoman = 7, + EntertainerGorilla = 8, + EntertainerSnowman = 9, + EntertainerKnight = 10, + EntertainerAstronaut = 11, + EntertainerBandit = 12, + EntertainerSheriff = 13, + EntertainerPirate = 14, + IceCream = 15, + Chips = 16, + Burger = 17, + Drink = 18, + Balloon = 19, + Candyfloss = 20, + Umbrella = 21, + Pizza = 22, + SecurityAlternate = 23, + Popcorn = 24, + ArmsCrossed = 25, + HeadDown = 26, + Nauseous = 27, + VeryNauseous = 28, + RequireBathroom = 29, + Hat = 30, + HotDog = 31, + Tentacle = 32, + ToffeeApple = 33, + Doughnut = 34, + Coffee = 35, + Chicken = 36, + Lemonade = 37, + Watching = 38, + Pretzel = 39, + Sunglasses = 40, + SuJongkwa = 41, + Juice = 42, + Funnel_cake = 43, + Noodles = 44, + Sausage = 45, + Soup = 46, + Sandwich = 47, + + Invalid = 255 + }; +} diff --git a/src/openrct2-unity/Assets/Scripts/OpenRCT2/Enums/PeepSpriteType.cs.meta b/src/openrct2-unity/Assets/Scripts/OpenRCT2/Enums/PeepSpriteType.cs.meta new file mode 100644 index 0000000000..8fb02cb9c7 --- /dev/null +++ b/src/openrct2-unity/Assets/Scripts/OpenRCT2/Enums/PeepSpriteType.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8f522ec32c642334f90864557a07f1b5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/openrct2-unity/Assets/Scripts/OpenRCT2/Enums/PeepState.cs b/src/openrct2-unity/Assets/Scripts/OpenRCT2/Enums/PeepState.cs new file mode 100644 index 0000000000..77481b8ea5 --- /dev/null +++ b/src/openrct2-unity/Assets/Scripts/OpenRCT2/Enums/PeepState.cs @@ -0,0 +1,29 @@ +namespace OpenRCT2.Unity +{ + public enum PeepState : byte + { + Falling = 0, // drowning is part of falling + QueuingFront = 2, + On_ride = 3, + LeavingRide = 4, + Walking = 5, + Queuing = 6, + EnteringRide = 7, + Sitting = 8, + Picked = 9, + Patrolling = 10, + Mowing = 11, + Sweeping = 12, + EnteringPark = 13, + LeavingPark = 14, + Answering = 15, + Fixing = 16, + Buying = 17, + Watching = 18, + EmptyingBin = 19, + UsingBin = 20, + Watering = 21, + HeadingToInspection = 22, + Inspecting = 23 + }; +} diff --git a/src/openrct2-unity/Assets/Scripts/OpenRCT2/Enums/PeepState.cs.meta b/src/openrct2-unity/Assets/Scripts/OpenRCT2/Enums/PeepState.cs.meta new file mode 100644 index 0000000000..e780abde99 --- /dev/null +++ b/src/openrct2-unity/Assets/Scripts/OpenRCT2/Enums/PeepState.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 22e0e46212424c141bca887acc3440c8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/openrct2-unity/Assets/Scripts/OpenRCT2/Enums/PeepType.cs b/src/openrct2-unity/Assets/Scripts/OpenRCT2/Enums/PeepType.cs new file mode 100644 index 0000000000..0180bca0a7 --- /dev/null +++ b/src/openrct2-unity/Assets/Scripts/OpenRCT2/Enums/PeepType.cs @@ -0,0 +1,10 @@ +namespace OpenRCT2.Unity +{ + public enum PeepType : byte + { + Guest, + Staff, + + Invalid = 255 + }; +} diff --git a/src/openrct2-unity/Assets/Scripts/OpenRCT2/Enums/PeepType.cs.meta b/src/openrct2-unity/Assets/Scripts/OpenRCT2/Enums/PeepType.cs.meta new file mode 100644 index 0000000000..37ede80556 --- /dev/null +++ b/src/openrct2-unity/Assets/Scripts/OpenRCT2/Enums/PeepType.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f18c1fe8b9eea2549baa21274f162c7e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/openrct2-unity/Assets/Scripts/OpenRCT2/Enums/SpriteType.cs b/src/openrct2-unity/Assets/Scripts/OpenRCT2/Enums/SpriteType.cs new file mode 100644 index 0000000000..11e09ec5a4 --- /dev/null +++ b/src/openrct2-unity/Assets/Scripts/OpenRCT2/Enums/SpriteType.cs @@ -0,0 +1,12 @@ +namespace OpenRCT2.Unity +{ + public enum SpriteType + { + Free, + TrainHead, + Peep, + Miscellaneous, + Litter, + Vehicle, + }; +} diff --git a/src/openrct2-unity/Assets/Scripts/OpenRCT2/Enums/SpriteType.cs.meta b/src/openrct2-unity/Assets/Scripts/OpenRCT2/Enums/SpriteType.cs.meta new file mode 100644 index 0000000000..c5398e4d8c --- /dev/null +++ b/src/openrct2-unity/Assets/Scripts/OpenRCT2/Enums/SpriteType.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: df9dec41793cfab41a5bbb748969cb30 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/openrct2-unity/Assets/Scripts/OpenRCT2/Map/Map.Generation.cs b/src/openrct2-unity/Assets/Scripts/OpenRCT2/Map/Map.Generation.cs index 3b14ff413d..e27a2a9f4e 100644 --- a/src/openrct2-unity/Assets/Scripts/OpenRCT2/Map/Map.Generation.cs +++ b/src/openrct2-unity/Assets/Scripts/OpenRCT2/Map/Map.Generation.cs @@ -5,10 +5,20 @@ namespace OpenRCT2.Unity { public partial class Map { - const float TileToCoordsMultiplier = 2; + [SerializeField] GameObject pathPrefab; + [SerializeField] GameObject trackPrefab; + [SerializeField] GameObject smallSceneryPrefab; + + + const int TileCoordsToCoords = 32; + const float TileCoordsToVector3Multiplier = 2; + const float CoordsToVector3Multiplier = 2 / TileCoordsToCoords; const float HeightMultiplier = 0.5f; + const int TileHeightStep = 2; + + MeshBuilder cachedBuilder; @@ -45,7 +55,30 @@ namespace OpenRCT2.Unity case TileElementType.Surface: GenerateSurface(builder, ref tile, x, y); break; + + case TileElementType.Path: + InstantiateElement(pathPrefab, x, tile.baseHeight, y); + break; + + case TileElementType.Track: + InstantiateElement(trackPrefab, x, tile.baseHeight, y); + break; + + case TileElementType.SmallScenery: + GameObject scenery = InstantiateElement(smallSceneryPrefab, x, tile.baseHeight, y); + + Vector3 scale = scenery.transform.localScale; + scale.y = Mathf.Max((tile.clearanceHeight - tile.baseHeight) * HeightMultiplier, 1); + scenery.transform.localScale = scale; + break; } } + + + GameObject InstantiateElement(GameObject obj, float x, float y, float z) + { + Vector3 position = TileCoordsToVector3(x, y, z); + return Instantiate(obj, position, Quaternion.identity, transform); + } } } diff --git a/src/openrct2-unity/Assets/Scripts/OpenRCT2/Map/Map.Surface.cs b/src/openrct2-unity/Assets/Scripts/OpenRCT2/Map/Map.Surface.cs index 06bcf976c9..761133ce86 100644 --- a/src/openrct2-unity/Assets/Scripts/OpenRCT2/Map/Map.Surface.cs +++ b/src/openrct2-unity/Assets/Scripts/OpenRCT2/Map/Map.Surface.cs @@ -76,9 +76,9 @@ namespace OpenRCT2.Unity int height = GetSurfaceCornerHeight(startHeight, surfaceSlope, surfaceCorner); Vector3 position = new Vector3( - x * TileToCoordsMultiplier, + x * TileCoordsToVector3Multiplier, height * HeightMultiplier, - y * TileToCoordsMultiplier + y * TileCoordsToVector3Multiplier ); return new Vertex(position); diff --git a/src/openrct2-unity/Assets/Scripts/OpenRCT2/Map/Map.cs b/src/openrct2-unity/Assets/Scripts/OpenRCT2/Map/Map.cs index 543b6fa024..02261bb1a3 100644 --- a/src/openrct2-unity/Assets/Scripts/OpenRCT2/Map/Map.cs +++ b/src/openrct2-unity/Assets/Scripts/OpenRCT2/Map/Map.cs @@ -1,12 +1,11 @@ using System; -using MeshBuilding; using UnityEngine; namespace OpenRCT2.Unity { - public partial class Map : MonoBehaviour - { - MeshFilter meshFilter; + public partial class Map : MonoBehaviour + { + MeshFilter meshFilter; int mapSize; @@ -30,7 +29,12 @@ namespace OpenRCT2.Unity void LoadMap() { - mapSize = OpenRCT2.GetMapSize(); + // Remove all children + foreach (Transform child in transform) + Destroy(child.gameObject); + + // Load the map + mapSize = OpenRCT2.GetMapSize(); tiles = new Tile[mapSize, mapSize]; Debug.Log($"Map size: {mapSize}"); @@ -41,12 +45,13 @@ namespace OpenRCT2.Unity { for (int y = 0; y < mapSize; y++) { - int amount = OpenRCT2.GetMapElementsAt(x, y, buffer, buffer.Length); + int amount = OpenRCT2.GetMapElementsAt(x, y, buffer); tiles[x, y] = new Tile(buffer, amount); } } + // Generate the surface mesh Mesh mesh = GenerateSurfaceMesh(); mesh.name = "Map"; meshFilter.sharedMesh = mesh; @@ -82,5 +87,27 @@ namespace OpenRCT2.Unity public SurfaceElement Surface => ((surfaceIndex != -1) ? Elements[surfaceIndex].AsSurface() : default); } - } + + + public static Vector3 TileCoordsToVector3(float x, float y, float z) + { + float halftile = TileCoordsToVector3Multiplier / 2f; + + return new Vector3( + (x * TileCoordsToVector3Multiplier) + halftile, + y * HeightMultiplier, + (z * TileCoordsToVector3Multiplier) + halftile + ); + } + + + public static Vector3 CoordsToVector3(float x, float y, float z) + { + return new Vector3( + (x * CoordsToVector3Multiplier), + y * HeightMultiplier, + (z * CoordsToVector3Multiplier) + ); + } + } } diff --git a/src/openrct2-unity/Assets/Scripts/OpenRCT2/Map/PeepController.cs b/src/openrct2-unity/Assets/Scripts/OpenRCT2/Map/PeepController.cs new file mode 100644 index 0000000000..431c0bc7d0 --- /dev/null +++ b/src/openrct2-unity/Assets/Scripts/OpenRCT2/Map/PeepController.cs @@ -0,0 +1,39 @@ +using System; +using UnityEngine; + +namespace OpenRCT2.Unity +{ + [RequireComponent(typeof(Map))] + public class PeepController : MonoBehaviour + { + [SerializeField] GameObject peepPrefab; + + + Map map; + + + void Start() + { + map = GetComponent(); + + Peep[] peeps = OpenRCT2.GetAllPeeps(); + + for (int i = 0; i < peeps.Length; i++) + { + //SpawnPeep(i, ref peeps[i]); + } + } + + + GameObject SpawnPeep(int number, ref Peep peep) + { + Vector3 position = Map.CoordsToVector3(peep.x, peep.z, peep.y); + + Debug.Log($"Spawn peep: {peep.x}, {peep.y}, {peep.z}"); + + GameObject peepObj = Instantiate(peepPrefab, position, Quaternion.identity, transform); + //peepObj.name = $"Peep {number}"; + return peepObj; + } + } +} diff --git a/src/openrct2-unity/Assets/Scripts/OpenRCT2/Map/PeepController.cs.meta b/src/openrct2-unity/Assets/Scripts/OpenRCT2/Map/PeepController.cs.meta new file mode 100644 index 0000000000..7a325970d3 --- /dev/null +++ b/src/openrct2-unity/Assets/Scripts/OpenRCT2/Map/PeepController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 26c4168fd423cac45b389b005f0daf26 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/openrct2-unity/Assets/Scripts/OpenRCT2/OpenRCT2.Lib.cs b/src/openrct2-unity/Assets/Scripts/OpenRCT2/OpenRCT2.Lib.cs index 12ec2491a6..40137084fd 100644 --- a/src/openrct2-unity/Assets/Scripts/OpenRCT2/OpenRCT2.Lib.cs +++ b/src/openrct2-unity/Assets/Scripts/OpenRCT2/OpenRCT2.Lib.cs @@ -56,7 +56,39 @@ namespace OpenRCT2.Unity [DllImport(PluginFile, CallingConvention = CallingConvention.Cdecl)] - internal static extern int GetMapElementsAt(int x, int y, [In, Out] TileElement[] elements, int arraySize); + static extern int GetMapElementsAt(int x, int y, [In, Out] TileElement[] elements, int arraySize); + + + /// + /// Writes all elements to the given buffer at the specified position. + /// + public static int GetMapElementsAt(int x, int y, TileElement[] elements) + => GetMapElementsAt(x, y, elements, elements.Length); + + #endregion + + + #region Sprites + + [DllImport(PluginFile, CallingConvention = CallingConvention.Cdecl)] + static extern int GetSpriteCount(SpriteType spriteType); + + + [DllImport(PluginFile, CallingConvention = CallingConvention.Cdecl)] + static extern int GetAllPeeps([In, Out] Peep[] elements, int arraySize); + + + public static Peep[] GetAllPeeps() + { + int spriteCount = GetSpriteCount(SpriteType.Peep); + Debug.Log($"Peeps found: {spriteCount}"); + + Peep[] peeps = new Peep[spriteCount]; + + GetAllPeeps(peeps, spriteCount); + return peeps; + } + #endregion diff --git a/src/openrct2-unity/Assets/Scripts/OpenRCT2/OpenRCT2.cs b/src/openrct2-unity/Assets/Scripts/OpenRCT2/OpenRCT2.cs index 3eaeecc05c..377e089fa8 100644 --- a/src/openrct2-unity/Assets/Scripts/OpenRCT2/OpenRCT2.cs +++ b/src/openrct2-unity/Assets/Scripts/OpenRCT2/OpenRCT2.cs @@ -1,11 +1,12 @@ -using System; -using System.Runtime.InteropServices; using UnityEngine; namespace OpenRCT2.Unity { public partial class OpenRCT2 : MonoBehaviour { + [SerializeField] string park = "My test park with burgers.sv6"; + + // OpenRCT2 takes the executing directory by default; which is where the Unity Editor is installed here... const string rootpath = @"D:\Projects\Visual Studio\OpenRCT2-Unity"; const string datapath = rootpath + @"\bin\data"; @@ -17,43 +18,11 @@ namespace OpenRCT2.Unity Print("Start OpenRCT2..."); StartGame(datapath); - LoadPark($@"{parkpath}\My test park with burgers.sv6"); + LoadPark($@"{parkpath}\{park}"); string parkname = GetParkName(); Print($"Name: {parkname} (pointer: {parkname})"); - - //TileElement tile = new TileElement(); - //GetMapElementAt(9, 3, ref tile); - //PrintTileElement(tile); - - - TileElement[] buffer = new TileElement[16]; - /* - int amount = GetMapElementsAt(9, 3, buffer, buffer.Length); - Console.WriteLine($"(me) [ 9, 3 ] items = {amount}"); - - for (int i = 0; i < amount; i++) - { - PrintTileElement(buffer[i]); - } - - for (int x = 8; x <= 10; x++) - { - for (int y = 2; y <= 4; y++) - { - int amount = GetMapElementsAt(x, y, buffer, buffer.Length); - - Print($"[ {x}, {y} ] items = {amount}"); - - for (int i = 0; i < amount; i++) - { - buffer[i].DumpToConsole(); - } - } - } - */ - Print("OpenRCT2 started."); } diff --git a/src/openrct2-unity/Assets/Scripts/Sprites.meta b/src/openrct2-unity/Assets/Scripts/Sprites.meta new file mode 100644 index 0000000000..9588c31d60 --- /dev/null +++ b/src/openrct2-unity/Assets/Scripts/Sprites.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e2a8e1cafcb8310498377e25cf70602b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/openrct2-unity/Assets/Scripts/Sprites/Peep.cs b/src/openrct2-unity/Assets/Scripts/Sprites/Peep.cs new file mode 100644 index 0000000000..ec6904acf6 --- /dev/null +++ b/src/openrct2-unity/Assets/Scripts/Sprites/Peep.cs @@ -0,0 +1,54 @@ +using System; +using System.Runtime.InteropServices; + +namespace OpenRCT2.Unity +{ + [StructLayout(LayoutKind.Sequential)] + public struct Peep + { + public SpriteBase sprite; + public IntPtr namePtr; + public int x; + public int y; + public int z; + public byte nextFlags; + public byte outsideOfPark; + public PeepState state; + public byte substate; + public PeepSpriteType spriteType; + public PeepType type; + public byte staffTypeOrNoOfRides; // union of staff type or no. of rides. + public byte tshirtColour; + public byte trousersColour; + public ushort destinationX; + public ushort destinationY; + public byte destinationTolerance; + public byte var37; + public byte energy; + public byte energyTarget; + public byte happiness; + public byte happinessTarget; + public byte hunger; + public byte thirst; + public byte toilet; + public byte mass; + public byte timeToCconsume; + public byte intensity; // The max intensity is stored in the first 4 bits, and the min intensity in the second 4 bits + public byte nauseaTolerance; + public byte windowInvalidateFlags; + public short paidOnDrink; + public long rideTypesBeenOn1; // This is 16x a byte for a ride; + public long rideTypesBeenOn2; + public uint itemExtraFlags; + public byte photo2RideRef; + public byte photo3RideRef; + public byte photo4RideRef; + public byte currentRide; + public byte stationIndex; + public byte currentTrain; + + + public string Name + => Marshal.PtrToStringAnsi(namePtr); + } +} diff --git a/src/openrct2-unity/Assets/Scripts/Sprites/Peep.cs.meta b/src/openrct2-unity/Assets/Scripts/Sprites/Peep.cs.meta new file mode 100644 index 0000000000..be7ddc6b94 --- /dev/null +++ b/src/openrct2-unity/Assets/Scripts/Sprites/Peep.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4121ea2264101a045bc839a1c61c8fad +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/openrct2-unity/Assets/Scripts/Sprites/SpriteBase.cs b/src/openrct2-unity/Assets/Scripts/Sprites/SpriteBase.cs new file mode 100644 index 0000000000..e2973c495f --- /dev/null +++ b/src/openrct2-unity/Assets/Scripts/Sprites/SpriteBase.cs @@ -0,0 +1,30 @@ +using System.Runtime.InteropServices; + +namespace OpenRCT2.Unity +{ + [StructLayout(LayoutKind.Sequential)] + public struct SpriteBase + { + public byte spriteIdentifier; + public byte type; + public ushort nextInQuadrant; + public ushort next; + public ushort previous; + public byte linkedListIndex; // Valid values are SPRITE_LINKEDLIST_OFFSET_... + public byte spriteHeightNegative; // Height from centre of sprite to bottom + public ushort spriteIndex; + public ushort flags; + public short x; + public short y; + public short z; + public byte spriteWidth; // Width from centre of sprite to edge + public byte spriteHeightPositive; // Height from centre of sprite to top + + // Screen Coordinates of sprite + public short sprite_left; + public short sprite_top; + public short sprite_right; + public short sprite_bottom; + public byte sprite_direction; + } +} diff --git a/src/openrct2-unity/Assets/Scripts/Sprites/SpriteBase.cs.meta b/src/openrct2-unity/Assets/Scripts/Sprites/SpriteBase.cs.meta new file mode 100644 index 0000000000..7c26d8b2d9 --- /dev/null +++ b/src/openrct2-unity/Assets/Scripts/Sprites/SpriteBase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a1c934bf1aaf15445b2f43583a0b36d0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/openrct2-unity/Parks/Dynamite Dunes.sv6 b/src/openrct2-unity/Parks/Dynamite Dunes.sv6 new file mode 100644 index 0000000000000000000000000000000000000000..905d566ad5f83006fd1b02bbc8e1f6f87953bdd5 GIT binary patch literal 314248 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