diff --git a/.gitattributes b/.gitattributes index d530ed421..e5c5394e6 100644 --- a/.gitattributes +++ b/.gitattributes @@ -54,9 +54,6 @@ *.sbsar filter=lfs diff=lfs merge=lfs -text *.msgpack filter=lfs diff=lfs merge=lfs -text GameData/*.cc filter=lfs diff=lfs merge=lfs -text -GameData/Mods/**/*.cc filter=lfs diff=lfs merge=lfs -text -GameData/Mods/**/*.glb filter=lfs diff=lfs merge=lfs -text -tools/blender/tests/fixtures/*.glb filter=lfs diff=lfs merge=lfs -text *.a filter=lfs diff=lfs merge=lfs -text *AkSoundEngine filter=lfs diff=lfs merge=lfs -text *AkWaapiClient filter=lfs diff=lfs merge=lfs -text diff --git a/.gitignore b/.gitignore index ac9c49142..75b9cad4f 100644 --- a/.gitignore +++ b/.gitignore @@ -66,7 +66,6 @@ GameData/*.lock /Aetheria.Shared/obj/ /tools/**/bin/ /tools/**/obj/ -/ModTools/ /tests/**/bin/ /tests/**/obj/ @@ -94,7 +93,7 @@ crashlytics-build.properties Packages/packages-lock.json GameData/run.cc GameData/player.cc -GameData/RemovedMods/ +Vault/Aetheria/.obsidian/plugins/copilot/data.json # Agent scratch, sandboxed toolchain caches, and throwaway checkouts. These had # grown to 47 untracked entries; the worktree must stay legible, so they never @@ -110,6 +109,3 @@ tests/_scratch_* .nuget-sandbox/ .dotnet-sandbox/ .appdata-sandbox/ - -# Stryker.NET mutation reports (regenerated per run) -StrykerOutput/ diff --git a/.lfsconfig b/.lfsconfig deleted file mode 100644 index d9ce439fc..000000000 --- a/.lfsconfig +++ /dev/null @@ -1,2 +0,0 @@ -[lfs] - url = https://eureka.gamecult.org/forge/GameCult/Aetheria.git/info/lfs diff --git a/.voidbot/state/aetheria.cc b/.voidbot/state/aetheria.cc index 91f465eca..168f00ca4 100644 Binary files a/.voidbot/state/aetheria.cc and b/.voidbot/state/aetheria.cc differ diff --git a/Aetheria.Shared/Aetheria.Shared.csproj b/Aetheria.Shared/Aetheria.Shared.csproj index a8a4c97bc..5274558da 100644 --- a/Aetheria.Shared/Aetheria.Shared.csproj +++ b/Aetheria.Shared/Aetheria.Shared.csproj @@ -24,11 +24,7 @@ - - - - - + diff --git a/Asset Sources/PBR Materials.blend b/Asset Sources/PBR Materials.blend deleted file mode 100644 index cbe7a475b..000000000 --- a/Asset Sources/PBR Materials.blend +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7c88c4c5380c3553182a545e04ffcc0776a54f7cbde4fa80de95f5e569b931de -size 359499 diff --git a/Asset Sources/blender_assets.cats.txt b/Asset Sources/blender_assets.cats.txt deleted file mode 100644 index 7fc29fe08..000000000 --- a/Asset Sources/blender_assets.cats.txt +++ /dev/null @@ -1,10 +0,0 @@ -# This is an Asset Catalog Definition file for Blender. -# -# Empty lines and lines starting with `#` will be ignored. -# The first non-ignored line should be the version indicator. -# Other lines are of the format "UUID:catalog/path/for/assets:simple catalog name" - -VERSION 1 - -2c70f9d2-3a69-4004-8f42-4712b3e6c439:Aetheria:Aetheria -a71be0dc-105e-4c66-8ff3-acb25522e9cd:Aetheria/PBR:Aetheria-PBR diff --git a/Assets/Content/Prefabs/Mine.prefab b/Assets/Content/Prefabs/Mine.prefab deleted file mode 100644 index 912986ee7..000000000 --- a/Assets/Content/Prefabs/Mine.prefab +++ /dev/null @@ -1,150 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1 &3437702659452284539 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3879893384158149147} - - component: {fileID: 8643339631069775210} - - component: {fileID: 7703217095432408775} - - component: {fileID: 7283754118921506074} - m_Layer: 0 - m_Name: Mine - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3879893384158149147 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3437702659452284539} - serializedVersion: 2 - 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_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &8643339631069775210 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3437702659452284539} - m_Mesh: {fileID: -5495902117074765545, guid: dab8e1a18a1b825458e8e6356cf00cd2, type: 3} ---- !u!23 &7703217095432408775 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3437702659452284539} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 - m_ForceMeshLod: -1 - m_MeshLodSelectionBias: 0 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: 38f8ba6b169127249b6532be2b3926ee, type: 2} - - {fileID: 2100000, guid: 71e1f3613633dfa488fff097aaf97660, type: 2} - - {fileID: 2100000, guid: e879c37f3520bf14a8a6075581faf7b2, type: 2} - - {fileID: 2100000, guid: 33a2546b27ff92d4fb43d5a76a9693c0, 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_GlobalIlluminationMeshLod: 0 - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_MaskInteraction: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!114 &7283754118921506074 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3437702659452284539} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 35c62f5e26769f645b1a1614a70422e1, type: 3} - m_Name: - m_EditorClassIdentifier: Assembly-CSharp::MineInstance - MeshRenderer: {fileID: 7703217095432408775} - EmissionSubmesh: 2 - EmissionCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 3 - time: 0 - value: 1 - inSlope: 0.051179443 - outSlope: 0.051179443 - tangentMode: 0 - weightedMode: 3 - inWeight: 0 - outWeight: 0.24423963 - - serializedVersion: 3 - time: 0.5 - value: 0.1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - weightedMode: 3 - inWeight: 0.33333334 - outWeight: 0.33333334 - - serializedVersion: 3 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - weightedMode: 3 - inWeight: 0.22580647 - outWeight: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - ActiveCycleDuration: 1 - ArmedCycleDuration: 0.25 - ActiveEmission: 100 - ArmedEmission: 1000 - RotationSpeed: 1 - HitEffect: {fileID: 1121192042590650, guid: e1b08032bec16ba4eb1ae23cbd572664, type: 3} - HitEffectScale: 10 diff --git a/Assets/Content/Prefabs/ShipModTemplate.prefab b/Assets/Content/Prefabs/ShipModTemplate.prefab deleted file mode 100644 index 7ed600cb6..000000000 --- a/Assets/Content/Prefabs/ShipModTemplate.prefab +++ /dev/null @@ -1,51 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1 &4001 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4002} - - component: {fileID: 4003} - m_Layer: 0 - m_Name: ShipModTemplate - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4002 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4001} - 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: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &4003 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4001} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 7c3e9a52d8b14f0e8a6d2b1f4c95e703, type: 3} - m_Name: - m_EditorClassIdentifier: - Shield: {fileID: 8402070500206635106, guid: 897fa55d98f1f7f40b889f93ce9146f4, type: 3} - TractorBeam: {fileID: 2009124798951080406, guid: 1df59848be1db8547bc662080d0d6000, type: 3} - Ping: {fileID: 3496685214803260731, guid: bfcaa66e173f6a44cb640aabbcb5e429, type: 3} - DestroyEffect: {fileID: 1121192042590650, guid: e1b08032bec16ba4eb1ae23cbd572664, type: 3} - Invisible: {fileID: 2100000, guid: c94a225de88e5ce42af01c34df3521e6, type: 2} - MapIcon: {fileID: 2100000, guid: 64d1c3f8a4422884b88363be07521fb0, type: 2} diff --git a/Assets/Content/Prefabs/Stations/PlanetOutpost.prefab b/Assets/Content/Prefabs/Stations/PlanetOutpost.prefab index e3d20ceb7..6ce31f34f 100644 --- a/Assets/Content/Prefabs/Stations/PlanetOutpost.prefab +++ b/Assets/Content/Prefabs/Stations/PlanetOutpost.prefab @@ -81,6 +81,87 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &7783244517717541194 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7783244517717541195} + - component: {fileID: 7783244517717541175} + - component: {fileID: 7783244517717541174} + m_Layer: 9 + m_Name: Gravity Well + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7783244517717541195 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7783244517717541194} + m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 7783244518521719148} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} +--- !u!33 &7783244517717541175 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7783244517717541194} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &7783244517717541174 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7783244517717541194} + 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_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 44a8bbb89acb4e34c9f41a9da5842bb4, 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 + m_AdditionalVertexStreams: {fileID: 0} --- !u!1 &7783244518317531027 GameObject: m_ObjectHideFlags: 0 @@ -208,6 +289,7 @@ Transform: m_Children: - {fileID: 589192530128514016} - {fileID: 7783244518317531036} + - {fileID: 7783244517717541195} - {fileID: 7783244516809707565} m_Father: {fileID: 0} m_RootOrder: 0 @@ -225,6 +307,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: Body: {fileID: 7783244518317531038} + GravityWell: {fileID: 7783244517717541174} Icon: {fileID: 7783244516809707566} Generator: {fileID: 741236912059895623} --- !u!114 &741236912059895623 diff --git a/Assets/Content/Prefabs/Thrusters/Aether Drive.prefab b/Assets/Content/Prefabs/Thrusters/Aether Drive.prefab new file mode 100644 index 000000000..4a566b534 --- /dev/null +++ b/Assets/Content/Prefabs/Thrusters/Aether Drive.prefab @@ -0,0 +1,4819 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &3270076511764283730 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5152310125488819541} + - component: {fileID: 8928170315538518364} + - component: {fileID: 8974554360790158463} + m_Layer: 0 + m_Name: Aether Drive + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5152310125488819541 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3270076511764283730} + 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: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!198 &8928170315538518364 +ParticleSystem: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3270076511764283730} + serializedVersion: 7 + lengthInSec: 5 + simulationSpeed: 2 + stopAction: 0 + cullingMode: 0 + ringBufferMode: 0 + ringBufferLoopRange: {x: 0, y: 1} + looping: 1 + prewarm: 0 + playOnAwake: 1 + useUnscaledTime: 0 + autoRandomSeed: 1 + useRigidbodyForVelocity: 0 + startDelay: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + moveWithTransform: 2 + moveWithCustomTransform: {fileID: 0} + scalingMode: 2 + randomSeed: 0 + InitialModule: + serializedVersion: 3 + enabled: 1 + startLifetime: + serializedVersion: 2 + minMaxState: 0 + scalar: 0.5 + minScalar: 5 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startSpeed: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 5 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startColor: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + startSize: + serializedVersion: 2 + minMaxState: 0 + scalar: 0.25 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startSizeY: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startSizeZ: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startRotationX: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startRotationY: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startRotation: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + randomizeRotationDirection: 0 + maxNumParticles: 1000 + size3D: 0 + rotation3D: 0 + gravityModifier: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + ShapeModule: + serializedVersion: 6 + enabled: 1 + type: 0 + angle: 25 + length: 5 + boxThickness: {x: 0, y: 0, z: 0} + radiusThickness: 1 + donutRadius: 0.2 + m_Position: {x: 0, y: 0, z: 0} + m_Rotation: {x: 0, y: 0, z: 0} + m_Scale: {x: 1, y: 1, z: 1} + placementMode: 2 + m_MeshMaterialIndex: 0 + m_MeshNormalOffset: 0 + m_MeshSpawn: + mode: 0 + spread: 0 + speed: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_Mesh: {fileID: 0} + m_MeshRenderer: {fileID: 0} + m_SkinnedMeshRenderer: {fileID: 0} + m_Sprite: {fileID: 0} + m_SpriteRenderer: {fileID: 0} + m_UseMeshMaterialIndex: 0 + m_UseMeshColors: 0 + alignToDirection: 0 + m_Texture: {fileID: 0} + m_TextureClipChannel: 3 + m_TextureClipThreshold: 0 + m_TextureUVChannel: 0 + m_TextureColorAffectsParticles: 1 + m_TextureAlphaAffectsParticles: 1 + m_TextureBilinearFiltering: 0 + randomDirectionAmount: 0 + sphericalDirectionAmount: 0 + randomPositionAmount: 0 + radius: + value: 10 + mode: 0 + spread: 0 + speed: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + arc: + value: 360 + mode: 0 + spread: 0 + speed: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + EmissionModule: + enabled: 1 + serializedVersion: 4 + rateOverTime: + serializedVersion: 2 + minMaxState: 0 + scalar: 75 + minScalar: 10 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + rateOverDistance: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_BurstCount: 0 + m_Bursts: [] + SizeModule: + enabled: 1 + curve: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxes: 0 + RotationModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + curve: + serializedVersion: 2 + minMaxState: 0 + scalar: 0.7853982 + minScalar: 0.7853982 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxes: 0 + ColorModule: + enabled: 1 + gradient: + serializedVersion: 2 + minMaxState: 1 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 0, g: 0.54509807, b: 1, a: 1} + key1: {r: 0.122641504, g: 0, b: 0.121027805, a: 0.45490196} + key2: {r: 0.122641504, g: 0, b: 0.121027805, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 65535 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + UVModule: + serializedVersion: 2 + enabled: 0 + mode: 0 + timeMode: 0 + fps: 30 + frameOverTime: + serializedVersion: 2 + minMaxState: 1 + scalar: 0.9999 + minScalar: 0.9999 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startFrame: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + speedRange: {x: 0, y: 1} + tilesX: 1 + tilesY: 1 + animationType: 0 + rowIndex: 0 + cycles: 1 + uvChannelMask: -1 + rowMode: 1 + sprites: + - sprite: {fileID: 0} + flipU: 0 + flipV: 0 + VelocityModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 1 + scalar: 99.9 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 1 + scalar: 50 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -1 + inSlope: 2 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: -0.013513565 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalX: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalY: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalZ: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalOffsetX: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalOffsetY: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalOffsetZ: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + radial: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + speedModifier: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + inWorldSpace: 0 + InheritVelocityModule: + enabled: 0 + m_Mode: 0 + m_Curve: + serializedVersion: 2 + minMaxState: 0 + scalar: 2 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + LifetimeByEmitterSpeedModule: + enabled: 0 + m_Curve: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: -0.8 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0.2 + inSlope: -0.8 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_Range: {x: 0, y: 1} + ForceModule: + enabled: 1 + x: + serializedVersion: 2 + minMaxState: 1 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -1 + inSlope: 3.072868 + outSlope: 3.072868 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.11519607 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 1 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -1 + inSlope: 3.0251138 + outSlope: 3.0251138 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.09068627 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.12531352 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 1 + scalar: 50 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -1 + inSlope: 3.0335512 + outSlope: 3.0335512 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.09354838 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + inWorldSpace: 1 + randomizePerFrame: 0 + ExternalForcesModule: + serializedVersion: 2 + enabled: 0 + multiplierCurve: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + influenceFilter: 0 + influenceMask: + serializedVersion: 2 + m_Bits: 4294967295 + influenceList: [] + ClampVelocityModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + magnitude: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxis: 0 + inWorldSpace: 0 + multiplyDragByParticleSize: 1 + multiplyDragByParticleVelocity: 1 + dampen: 0 + drag: + serializedVersion: 2 + minMaxState: 0 + scalar: 33.08 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + NoiseModule: + enabled: 1 + strength: + serializedVersion: 2 + minMaxState: 0 + scalar: 25 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: -2 + outSlope: -2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + strengthY: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + strengthZ: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxes: 0 + frequency: 0.1 + damping: 0 + octaves: 3 + octaveMultiplier: 0.5 + octaveScale: 2 + quality: 2 + scrollSpeed: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + remap: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -1 + inSlope: 0 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 2 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + remapY: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -1 + inSlope: 0 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 2 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + remapZ: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -1 + inSlope: 0 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 2 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + remapEnabled: 0 + positionAmount: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + rotationAmount: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + sizeAmount: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + SizeBySpeedModule: + enabled: 0 + curve: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + range: {x: 0, y: 1} + separateAxes: 0 + RotationBySpeedModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + curve: + serializedVersion: 2 + minMaxState: 0 + scalar: 0.7853982 + minScalar: 0.7853982 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxes: 0 + range: {x: 0, y: 1} + ColorBySpeedModule: + enabled: 0 + gradient: + serializedVersion: 2 + minMaxState: 1 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + range: {x: 0, y: 1} + CollisionModule: + enabled: 0 + serializedVersion: 4 + type: 0 + collisionMode: 0 + colliderForce: 0 + multiplyColliderForceByParticleSize: 0 + multiplyColliderForceByParticleSpeed: 0 + multiplyColliderForceByCollisionAngle: 1 + m_Planes: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + m_Dampen: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_Bounce: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_EnergyLossOnCollision: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minKillSpeed: 0 + maxKillSpeed: 10000 + radiusScale: 1 + collidesWith: + serializedVersion: 2 + m_Bits: 4294967295 + maxCollisionShapes: 256 + quality: 0 + voxelSize: 0.5 + collisionMessages: 0 + collidesWithDynamic: 1 + interiorCollisions: 0 + TriggerModule: + enabled: 0 + serializedVersion: 2 + inside: 1 + outside: 0 + enter: 0 + exit: 0 + colliderQueryMode: 0 + radiusScale: 1 + primitives: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + SubModule: + serializedVersion: 2 + enabled: 0 + subEmitters: + - serializedVersion: 3 + emitter: {fileID: 0} + type: 0 + properties: 0 + emitProbability: 1 + LightsModule: + enabled: 0 + ratio: 0 + light: {fileID: 0} + randomDistribution: 1 + color: 1 + range: 1 + intensity: 1 + rangeCurve: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + intensityCurve: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + maxLights: 20 + TrailModule: + enabled: 1 + mode: 0 + ratio: 1 + lifetime: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minVertexDistance: 0.5 + textureMode: 0 + ribbonCount: 1 + shadowBias: 0.5 + worldSpace: 0 + dieWithParticles: 0 + sizeAffectsWidth: 0 + sizeAffectsLifetime: 0 + inheritParticleColor: 0 + generateLightingData: 0 + splitSubEmitterRibbons: 0 + attachRibbonsToTransform: 0 + colorOverLifetime: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + widthOverTrail: + serializedVersion: 2 + minMaxState: 1 + scalar: 0.25 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 6.705435 + outSlope: 6.705435 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.034313723 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + colorOverTrail: + serializedVersion: 2 + minMaxState: 1 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 0.2830189, g: 0, b: 0, a: 0} + key1: {r: 0.12415449, g: 0.26510748, b: 0.8490566, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 129 + atime1: 31802 + atime2: 65535 + atime3: 65535 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 3 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + CustomDataModule: + enabled: 1 + mode0: 1 + vectorComponentCount0: 2 + color0: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + colorLabel0: Color + vector0_0: + serializedVersion: 2 + minMaxState: 3 + scalar: 1 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel0_0: X + vector0_1: + serializedVersion: 2 + minMaxState: 3 + scalar: 1 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel0_1: Y + vector0_2: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel0_2: Z + vector0_3: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel0_3: W + mode1: 0 + vectorComponentCount1: 4 + color1: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + colorLabel1: Color + vector1_0: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel1_0: X + vector1_1: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel1_1: Y + vector1_2: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel1_2: Z + vector1_3: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel1_3: W +--- !u!199 &8974554360790158463 +ParticleSystemRenderer: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3270076511764283730} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 0 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 6af0f423a2567be43b16d152d2b60e0c, type: 2} + - {fileID: 2100000, guid: 555ada90c0f01654a9387483bd95a688, 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 + m_RenderMode: 5 + m_SortMode: 0 + m_MinParticleSize: 0 + m_MaxParticleSize: 0.5 + m_CameraVelocityScale: 0 + m_VelocityScale: 0 + m_LengthScale: 2 + m_SortingFudge: 0 + m_NormalDirection: 1 + m_ShadowBias: 0 + m_RenderAlignment: 0 + m_Pivot: {x: 0, y: 0, z: 0} + m_Flip: {x: 0, y: 0, z: 0} + m_UseCustomVertexStreams: 1 + m_EnableGPUInstancing: 1 + m_ApplyActiveColorSpace: 1 + m_AllowRoll: 1 + m_FreeformStretching: 0 + m_RotateWithStretchDirection: 1 + m_VertexStreams: 0001030420 + m_Mesh: {fileID: 0} + m_Mesh1: {fileID: 0} + m_Mesh2: {fileID: 0} + m_Mesh3: {fileID: 0} + m_MaskInteraction: 0 diff --git a/Assets/Content/Prefabs/Mine.prefab.meta b/Assets/Content/Prefabs/Thrusters/Aether Drive.prefab.meta similarity index 74% rename from Assets/Content/Prefabs/Mine.prefab.meta rename to Assets/Content/Prefabs/Thrusters/Aether Drive.prefab.meta index 01e11b0eb..e33810938 100644 --- a/Assets/Content/Prefabs/Mine.prefab.meta +++ b/Assets/Content/Prefabs/Thrusters/Aether Drive.prefab.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: b04728b2b65e057429eb6e8529299c8a +guid: 151cf0ff54a22274caf671ece149fa6e PrefabImporter: externalObjects: {} userData: diff --git a/Assets/Content/Prefabs/Tractor Beam.prefab b/Assets/Content/Prefabs/Tractor Beam.prefab index c98d252a3..9ce0d7760 100644 --- a/Assets/Content/Prefabs/Tractor Beam.prefab +++ b/Assets/Content/Prefabs/Tractor Beam.prefab @@ -4818,3 +4818,6 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: ParticleSystem: {fileID: 5087162364086924483} + Radius: 25 + Traction: 25 + Distance: 75 diff --git a/Assets/Content/Prefabs/Weapons/Mine Launcher.prefab b/Assets/Content/Prefabs/Weapons/Mine Launcher.prefab new file mode 100644 index 000000000..05171242b --- /dev/null +++ b/Assets/Content/Prefabs/Weapons/Mine Launcher.prefab @@ -0,0 +1,336 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &756302067359749329 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3605572244125604411} + - component: {fileID: 5473211974529592485} + - component: {fileID: 4535912766998605946} + - component: {fileID: 2069293240452108309} + - component: {fileID: 951258163572815990} + - component: {fileID: 6357237398779034136} + m_Layer: 21 + m_Name: Mine + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3605572244125604411 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 756302067359749329} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 466182245789483358} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &5473211974529592485 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 756302067359749329} + m_Mesh: {fileID: -5495902117074765545, guid: dab8e1a18a1b825458e8e6356cf00cd2, type: 3} +--- !u!23 &4535912766998605946 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 756302067359749329} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 3720744386649352057, guid: 504c7bfe0d50ff64a88b8eac2ceb46f8, type: 3} + - {fileID: 3720744386649352057, guid: a1d39ea984432bf44b4a0686afe2bf1a, type: 3} + - {fileID: 2100000, guid: e879c37f3520bf14a8a6075581faf7b2, type: 2} + - {fileID: 9178725544925813344, guid: 58e16b7dbc1c31f4585e11544cdce127, type: 3} + 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 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!114 &2069293240452108309 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 756302067359749329} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1281fe44325f9b548aa42dc331b17266, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &951258163572815990 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 756302067359749329} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f190191fe8c8419f85767868c50cde5f, type: 3} + m_Name: + m_EditorClassIdentifier: + GridObject: {fileID: 6357237398779034136} + MeshRenderer: {fileID: 4535912766998605946} + EmissionSubmesh: 2 + EmissionCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0.051179443 + outSlope: 0.051179443 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.24423963 + - serializedVersion: 3 + time: 0.5 + value: 0.1 + inSlope: 0 + outSlope: 0 + tangentMode: 34 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: -0 + outSlope: -0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.22580647 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + ActiveCycleDuration: 1 + ArmedCycleDuration: 0.25 + ActiveEmission: 100 + ArmedEmission: 1000 + HitEffect: {fileID: 3349939966709198091} + Lifetime: 30 + ActivationDelay: 2 + BlastRange: 25 + BlastDelay: 2 +--- !u!114 &6357237398779034136 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 756302067359749329} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 737f47c158214f0995ba2835f040ed96, type: 3} + m_Name: + m_EditorClassIdentifier: + RotationSpeed: 1 + GridOffset: 0 + GridAttraction: 10 + Gravity: 1 + Drag: 0.05 + LaunchDrag: 0.2 +--- !u!1 &951357816492268516 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 466182245789483358} + - component: {fileID: 2749986269966238105} + m_Layer: 0 + m_Name: Mine Launcher + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &466182245789483358 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 951357816492268516} + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 3865250807623958572} + - {fileID: 3605572244125604411} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &2749986269966238105 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 951357816492268516} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6e048d9c74a84343befd496907ee2126, type: 3} + m_Name: + m_EditorClassIdentifier: + ProjectilePrototype: {fileID: 2069293240452108309} + InheritVelocity: 1 +--- !u!1001 &3867385469207619610 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 466182245789483358} + m_Modifications: + - target: {fileID: 1121192042590650, guid: e1b08032bec16ba4eb1ae23cbd572664, type: 3} + propertyPath: m_Name + value: BigExplosion + objectReference: {fileID: 0} + - target: {fileID: 4388947112716342, guid: e1b08032bec16ba4eb1ae23cbd572664, type: 3} + propertyPath: m_RootOrder + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4388947112716342, guid: e1b08032bec16ba4eb1ae23cbd572664, type: 3} + propertyPath: m_LocalScale.x + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 4388947112716342, guid: e1b08032bec16ba4eb1ae23cbd572664, type: 3} + propertyPath: m_LocalScale.y + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 4388947112716342, guid: e1b08032bec16ba4eb1ae23cbd572664, type: 3} + propertyPath: m_LocalScale.z + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 4388947112716342, guid: e1b08032bec16ba4eb1ae23cbd572664, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4388947112716342, guid: e1b08032bec16ba4eb1ae23cbd572664, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4388947112716342, guid: e1b08032bec16ba4eb1ae23cbd572664, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4388947112716342, guid: e1b08032bec16ba4eb1ae23cbd572664, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4388947112716342, guid: e1b08032bec16ba4eb1ae23cbd572664, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4388947112716342, guid: e1b08032bec16ba4eb1ae23cbd572664, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4388947112716342, guid: e1b08032bec16ba4eb1ae23cbd572664, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4388947112716342, guid: e1b08032bec16ba4eb1ae23cbd572664, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4388947112716342, guid: e1b08032bec16ba4eb1ae23cbd572664, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4388947112716342, guid: e1b08032bec16ba4eb1ae23cbd572664, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 198917022394846920, guid: e1b08032bec16ba4eb1ae23cbd572664, + type: 3} + propertyPath: stopAction + value: 3 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: e1b08032bec16ba4eb1ae23cbd572664, type: 3} +--- !u!4 &3865250807623958572 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 4388947112716342, guid: e1b08032bec16ba4eb1ae23cbd572664, + type: 3} + m_PrefabInstance: {fileID: 3867385469207619610} + m_PrefabAsset: {fileID: 0} +--- !u!1 &3866425147859458464 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 1121192042590650, guid: e1b08032bec16ba4eb1ae23cbd572664, + type: 3} + m_PrefabInstance: {fileID: 3867385469207619610} + m_PrefabAsset: {fileID: 0} +--- !u!114 &3349939966709198091 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3866425147859458464} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1281fe44325f9b548aa42dc331b17266, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &5700147869379115258 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3866425147859458464} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: db021a309de3d324588c5603de40c29f, type: 3} + m_Name: + m_EditorClassIdentifier: diff --git a/Assets/Content/Prefabs/ShipModTemplate.prefab.meta b/Assets/Content/Prefabs/Weapons/Mine Launcher.prefab.meta similarity index 74% rename from Assets/Content/Prefabs/ShipModTemplate.prefab.meta rename to Assets/Content/Prefabs/Weapons/Mine Launcher.prefab.meta index d2ea9f827..2489e77fa 100644 --- a/Assets/Content/Prefabs/ShipModTemplate.prefab.meta +++ b/Assets/Content/Prefabs/Weapons/Mine Launcher.prefab.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 5d1f3a8c7e2b4f60a9c4b7e1d3f2a860 +guid: 24eddacc819f20542962f2395930f261 PrefabImporter: externalObjects: {} userData: diff --git a/Assets/Editor/AetheriaBuild.cs b/Assets/Editor/AetheriaBuild.cs deleted file mode 100644 index 3cf434ee4..000000000 --- a/Assets/Editor/AetheriaBuild.cs +++ /dev/null @@ -1,116 +0,0 @@ -using System; -using System.Diagnostics; -using System.IO; -using System.Linq; -using System.Text.RegularExpressions; -using UnityEditor; -using UnityEditor.AddressableAssets.Settings; -using UnityEditor.Build.Reporting; -using Debug = UnityEngine.Debug; - -// The one way to make a player directory, for Windows or Linux. Owns what the directory contains: the player and its data, -// GameData/Aetheria.cc, GameData/Narrative/**, GameData/Mods/** and ModTools/AetherDb. Manual builds, smokes and -// release cuts all call this and stage nothing themselves. -// -// Unity -batchmode -quit -projectPath -executeMethod AetheriaBuild.Build -// -aetheriaVersion -aetheriaOut [-aetheriaTarget win64|linux64] -logFile -// -// AetherDb is published from tools/AetherDb, so the headless build's CULTLIB_ROOT / CULTMATH_ROOT (Directory.Build.props) -// must be set for dotnet when the defaults do not hold the pinned revisions. -// Any failure logs "AetheriaBuild FAILED at " and exits 1. -public static class AetheriaBuild -{ - private static readonly Regex SemVer = new Regex(@"^\d+\.\d+\.\d+([-+][0-9A-Za-z.-]+)?$"); - - // A target: the player Unity builds, its executable, and the runtime AetherDb is published for. - private static (BuildTarget target, string player, string runtime, string aetherDb) Target(string name) => name switch - { - "win64" => (BuildTarget.StandaloneWindows64, "Aetheria.exe", "win-x64", "AetherDb.exe"), - "linux64" => (BuildTarget.StandaloneLinux64, "Aetheria.x86_64", "linux-x64", "AetherDb"), - _ => throw new InvalidOperationException($"-aetheriaTarget {name}: expected win64 or linux64"), - }; - - public static void Build() - { - var step = "arguments"; - try - { - var version = Argument("-aetheriaVersion"); - if (!SemVer.IsMatch(version)) throw new InvalidOperationException("-aetheriaVersion is not a semver"); - var output = Path.GetFullPath(Argument("-aetheriaOut")); - var target = Target(Argument("-aetheriaTarget", "win64")); - var repoRoot = Directory.GetParent(UnityEngine.Application.dataPath).FullName; - - step = "version"; - UnityEditor.PlayerSettings.bundleVersion = version; // the game has its own global PlayerSettings - - step = "addressables"; - AddressableAssetSettings.BuildPlayerContent(out var content); - if (!string.IsNullOrEmpty(content.Error)) throw new InvalidOperationException("Addressables build reported an error: " + content.Error); - - step = "player"; - Directory.CreateDirectory(output); - var scenes = EditorBuildSettings.scenes.Where(scene => scene.enabled).Select(scene => scene.path).ToArray(); - if (scenes.Length == 0) throw new InvalidOperationException("EditorBuildSettings has no enabled scene"); - var report = BuildPipeline.BuildPlayer(new BuildPlayerOptions - { - scenes = scenes, - locationPathName = Path.Combine(output, target.player), - target = target.target, - options = BuildOptions.None, - }); - if (report.summary.result != BuildResult.Succeeded || report.summary.totalErrors != 0) - throw new InvalidOperationException($"BuildPlayer ended {report.summary.result} with {report.summary.totalErrors} errors"); - - step = "gamedata"; - PlayerStaging.Stage(repoRoot, output); - - step = "aetherdb"; - Publish(repoRoot, Path.Combine(output, "ModTools"), target.runtime, target.aetherDb); - - step = "burst"; - var burst = Path.Combine(output, "Aetheria_BurstDebugInformation_DoNotShip"); - if (Directory.Exists(burst)) Directory.Delete(burst, true); - - Debug.Log($"AetheriaBuild OK {version} {output}"); - } - catch (Exception error) - { - Debug.LogError($"AetheriaBuild FAILED at {step}: {error.GetType().Name}: {error.Message}"); - EditorApplication.Exit(1); - return; - } - EditorApplication.Exit(0); - } - - private static void Publish(string repoRoot, string modTools, string runtime, string aetherDb) - { - var info = new ProcessStartInfo("dotnet") - { - Arguments = $"publish tools/AetherDb -c Release -r {runtime} --self-contained -p:PublishSingleFile=true -o \"{modTools}\"", - WorkingDirectory = repoRoot, - UseShellExecute = false, - RedirectStandardOutput = true, - RedirectStandardError = true, - }; - using (var process = Process.Start(info)) - { - var errors = process.StandardError.ReadToEndAsync(); - var text = process.StandardOutput.ReadToEnd(); - process.WaitForExit(); - if (process.ExitCode != 0) - throw new InvalidOperationException($"dotnet publish exited {process.ExitCode}:\n{text}\n{errors.Result}"); - } - if (!File.Exists(Path.Combine(modTools, aetherDb))) - throw new InvalidOperationException($"dotnet publish produced no ModTools/{aetherDb}"); - } - - private static string Argument(string name, string fallback = null) - { - var args = Environment.GetCommandLineArgs(); - var at = Array.IndexOf(args, name); - if (at < 0 || at + 1 >= args.Length) - return fallback ?? throw new InvalidOperationException(name + " is required"); - return args[at + 1]; - } -} diff --git a/Assets/Editor/AetheriaBuild.cs.meta b/Assets/Editor/AetheriaBuild.cs.meta deleted file mode 100644 index 833ad46ac..000000000 --- a/Assets/Editor/AetheriaBuild.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: d38caad223051494ba36c734ce79950d \ No newline at end of file diff --git a/Assets/Editor/PlayerStaging.cs b/Assets/Editor/PlayerStaging.cs deleted file mode 100644 index 6f48daaa0..000000000 --- a/Assets/Editor/PlayerStaging.cs +++ /dev/null @@ -1,41 +0,0 @@ -using System; -using System.IO; - -// What a player directory holds beside the executable's data: GameData/Aetheria.cc, GameData/Narrative/** and, when -// the repo has one, GameData/Mods/**. Nothing else under GameData ships (run.cc and player.cc are the player's own). -// Unity-free so the headless suite can prove the rules; AetheriaBuild is the only caller. -internal static class PlayerStaging -{ - public const string Catalog = "Aetheria.cc"; - public const string Narrative = "Narrative"; - public const string Mods = "Mods"; - - // Replaces /GameData with a copy of the three shipped entries of /GameData. - // Throws InvalidOperationException naming the entry when the catalog or Narrative is absent. - public static void Stage(string repoRoot, string playerDir) - { - var source = Path.Combine(repoRoot, "GameData"); - var destination = Path.Combine(playerDir, "GameData"); - var catalog = Path.Combine(source, Catalog); - var narrative = Path.Combine(source, Narrative); - var mods = Path.Combine(source, Mods); - - if (!File.Exists(catalog)) throw new InvalidOperationException($"GameData/{Catalog} is missing; a player never ships without its catalog."); - if (!Directory.Exists(narrative)) throw new InvalidOperationException($"GameData/{Narrative} is missing."); - - if (Directory.Exists(destination)) Directory.Delete(destination, true); - Directory.CreateDirectory(destination); - File.Copy(catalog, Path.Combine(destination, Catalog)); - CopyTree(narrative, Path.Combine(destination, Narrative)); - if (Directory.Exists(mods)) CopyTree(mods, Path.Combine(destination, Mods)); - } - - private static void CopyTree(string from, string to) - { - Directory.CreateDirectory(to); - foreach (var directory in Directory.GetDirectories(from, "*", SearchOption.AllDirectories)) - Directory.CreateDirectory(Path.Combine(to, directory.Substring(from.Length + 1))); - foreach (var file in Directory.GetFiles(from, "*", SearchOption.AllDirectories)) - File.Copy(file, Path.Combine(to, file.Substring(from.Length + 1))); - } -} diff --git a/Assets/Editor/PlayerStaging.cs.meta b/Assets/Editor/PlayerStaging.cs.meta deleted file mode 100644 index 71743d471..000000000 --- a/Assets/Editor/PlayerStaging.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 16dce8087f9149b44b6e294cb0851dd8 \ No newline at end of file diff --git a/Assets/Fonts/Emoji/Emoji.asset b/Assets/Fonts/Emoji/Emoji.asset deleted file mode 100644 index b37478ebd..000000000 --- a/Assets/Fonts/Emoji/Emoji.asset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0da0ff045c78def703de64f1c79a0f6c0842985e21c261b165ada948dc726b1e -size 5791 diff --git a/Assets/Fonts/Emoji/Emoji.asset.meta b/Assets/Fonts/Emoji/Emoji.asset.meta deleted file mode 100644 index f89bc04be..000000000 --- a/Assets/Fonts/Emoji/Emoji.asset.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 4cbb1005dc560d54ba85c3d091dbe30b -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 11400000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Fonts/Emoji/LICENSE.txt b/Assets/Fonts/Emoji/LICENSE.txt deleted file mode 100644 index db961e007..000000000 --- a/Assets/Fonts/Emoji/LICENSE.txt +++ /dev/null @@ -1,410 +0,0 @@ -Twemoji v17.0.3: https://github.com/jdecked/twemoji/archive/refs/tags/v17.0.3.tar.gz -Copyright (c) 2022–present Jason Sofonia & Justine De Caires -Copyright (c) 2014–2021 Twitter -Graphics licensed under CC-BY 4.0: - -Change notice (CC BY 4.0 section 3(a)(1)(B)): the SVG graphics are converted to a COLRv0 colour -font (Twemoji.ttf) by tools/emoji/fetch_emoji_font.py using nanoemoji. No artwork is edited. - -Attribution Requirements (upstream README) - -As an open source project, attribution is critical from a legal, practical and motivational perspective in our opinion. The graphics are licensed under the CC-BY 4.0 which has a pretty good guide on [best practices for attribution](https://wiki.creativecommons.org/Best_practices_for_attribution). - -However, we consider the guide a bit onerous and as a project, will accept a mention in a project README or an 'About' section or footer on a website. In mobile applications, a common place would be in the Settings/About section (for example, see the mobile Twitter application Settings->About->Legal section). We would consider a mention in the HTML/JS source sufficient also. - -LICENSE-GRAPHICS (upstream, verbatim) -======================================================================= - -Attribution 4.0 International - -======================================================================= - -Creative Commons Corporation ("Creative Commons") is not a law firm and -does not provide legal services or legal advice. Distribution of -Creative Commons public licenses does not create a lawyer-client or -other relationship. Creative Commons makes its licenses and related -information available on an "as-is" basis. Creative Commons gives no -warranties regarding its licenses, any material licensed under their -terms and conditions, or any related information. Creative Commons -disclaims all liability for damages resulting from their use to the -fullest extent possible. - -Using Creative Commons Public Licenses - -Creative Commons public licenses provide a standard set of terms and -conditions that creators and other rights holders may use to share -original works of authorship and other material subject to copyright -and certain other rights specified in the public license below. The -following considerations are for informational purposes only, are not -exhaustive, and do not form part of our licenses. - - Considerations for licensors: Our public licenses are - intended for use by those authorized to give the public - permission to use material in ways otherwise restricted by - copyright and certain other rights. Our licenses are - irrevocable. Licensors should read and understand the terms - and conditions of the license they choose before applying it. - Licensors should also secure all rights necessary before - applying our licenses so that the public can reuse the - material as expected. Licensors should clearly mark any - material not subject to the license. This includes other CC- - licensed material, or material used under an exception or - limitation to copyright. More considerations for licensors: - wiki.creativecommons.org/Considerations_for_licensors - - Considerations for the public: By using one of our public - licenses, a licensor grants the public permission to use the - licensed material under specified terms and conditions. If - the licensor's permission is not necessary for any reason--for - example, because of any applicable exception or limitation to - copyright--then that use is not regulated by the license. Our - licenses grant only permissions under copyright and certain - other rights that a licensor has authority to grant. Use of - the licensed material may still be restricted for other - reasons, including because others have copyright or other - rights in the material. A licensor may make special requests, - such as asking that all changes be marked or described. - Although not required by our licenses, you are encouraged to - respect those requests where reasonable. More_considerations - for the public: - wiki.creativecommons.org/Considerations_for_licensees - -======================================================================= - -Creative Commons Attribution 4.0 International Public License - -By exercising the Licensed Rights (defined below), You accept and agree -to be bound by the terms and conditions of this Creative Commons -Attribution 4.0 International Public License ("Public License"). To the -extent this Public License may be interpreted as a contract, You are -granted the Licensed Rights in consideration of Your acceptance of -these terms and conditions, and the Licensor grants You such rights in -consideration of benefits the Licensor receives from making the -Licensed Material available under these terms and conditions. - - -Section 1 -- Definitions. - - a. Adapted Material means material subject to Copyright and Similar - Rights that is derived from or based upon the Licensed Material - and in which the Licensed Material is translated, altered, - arranged, transformed, or otherwise modified in a manner requiring - permission under the Copyright and Similar Rights held by the - Licensor. For purposes of this Public License, where the Licensed - Material is a musical work, performance, or sound recording, - Adapted Material is always produced where the Licensed Material is - synched in timed relation with a moving image. - - b. Adapter's License means the license You apply to Your Copyright - and Similar Rights in Your contributions to Adapted Material in - accordance with the terms and conditions of this Public License. - - c. Copyright and Similar Rights means copyright and/or similar rights - closely related to copyright including, without limitation, - performance, broadcast, sound recording, and Sui Generis Database - Rights, without regard to how the rights are labeled or - categorized. For purposes of this Public License, the rights - specified in Section 2(b)(1)-(2) are not Copyright and Similar - Rights. - - d. Effective Technological Measures means those measures that, in the - absence of proper authority, may not be circumvented under laws - fulfilling obligations under Article 11 of the WIPO Copyright - Treaty adopted on December 20, 1996, and/or similar international - agreements. - - e. Exceptions and Limitations means fair use, fair dealing, and/or - any other exception or limitation to Copyright and Similar Rights - that applies to Your use of the Licensed Material. - - f. Licensed Material means the artistic or literary work, database, - or other material to which the Licensor applied this Public - License. - - g. Licensed Rights means the rights granted to You subject to the - terms and conditions of this Public License, which are limited to - all Copyright and Similar Rights that apply to Your use of the - Licensed Material and that the Licensor has authority to license. - - h. Licensor means the individual(s) or entity(ies) granting rights - under this Public License. - - i. Share means to provide material to the public by any means or - process that requires permission under the Licensed Rights, such - as reproduction, public display, public performance, distribution, - dissemination, communication, or importation, and to make material - available to the public including in ways that members of the - public may access the material from a place and at a time - individually chosen by them. - - j. Sui Generis Database Rights means rights other than copyright - resulting from Directive 96/9/EC of the European Parliament and of - the Council of 11 March 1996 on the legal protection of databases, - as amended and/or succeeded, as well as other essentially - equivalent rights anywhere in the world. - - k. You means the individual or entity exercising the Licensed Rights - under this Public License. Your has a corresponding meaning. - - -Section 2 -- Scope. - - a. License grant. - - 1. Subject to the terms and conditions of this Public License, - the Licensor hereby grants You a worldwide, royalty-free, - non-sublicensable, non-exclusive, irrevocable license to - exercise the Licensed Rights in the Licensed Material to: - - a. reproduce and Share the Licensed Material, in whole or - in part; and - - b. produce, reproduce, and Share Adapted Material. - - 2. Exceptions and Limitations. For the avoidance of doubt, where - Exceptions and Limitations apply to Your use, this Public - License does not apply, and You do not need to comply with - its terms and conditions. - - 3. Term. The term of this Public License is specified in Section - 6(a). - - 4. Media and formats; technical modifications allowed. The - Licensor authorizes You to exercise the Licensed Rights in - all media and formats whether now known or hereafter created, - and to make technical modifications necessary to do so. The - Licensor waives and/or agrees not to assert any right or - authority to forbid You from making technical modifications - necessary to exercise the Licensed Rights, including - technical modifications necessary to circumvent Effective - Technological Measures. For purposes of this Public License, - simply making modifications authorized by this Section 2(a) - (4) never produces Adapted Material. - - 5. Downstream recipients. - - a. Offer from the Licensor -- Licensed Material. Every - recipient of the Licensed Material automatically - receives an offer from the Licensor to exercise the - Licensed Rights under the terms and conditions of this - Public License. - - b. No downstream restrictions. You may not offer or impose - any additional or different terms or conditions on, or - apply any Effective Technological Measures to, the - Licensed Material if doing so restricts exercise of the - Licensed Rights by any recipient of the Licensed - Material. - - 6. No endorsement. Nothing in this Public License constitutes or - may be construed as permission to assert or imply that You - are, or that Your use of the Licensed Material is, connected - with, or sponsored, endorsed, or granted official status by, - the Licensor or others designated to receive attribution as - provided in Section 3(a)(1)(A)(i). - - b. Other rights. - - 1. Moral rights, such as the right of integrity, are not - licensed under this Public License, nor are publicity, - privacy, and/or other similar personality rights; however, to - the extent possible, the Licensor waives and/or agrees not to - assert any such rights held by the Licensor to the limited - extent necessary to allow You to exercise the Licensed - Rights, but not otherwise. - - 2. Patent and trademark rights are not licensed under this - Public License. - - 3. To the extent possible, the Licensor waives any right to - collect royalties from You for the exercise of the Licensed - Rights, whether directly or through a collecting society - under any voluntary or waivable statutory or compulsory - licensing scheme. In all other cases the Licensor expressly - reserves any right to collect such royalties. - - -Section 3 -- License Conditions. - -Your exercise of the Licensed Rights is expressly made subject to the -following conditions. - - a. Attribution. - - 1. If You Share the Licensed Material (including in modified - form), You must: - - a. retain the following if it is supplied by the Licensor - with the Licensed Material: - - i. identification of the creator(s) of the Licensed - Material and any others designated to receive - attribution, in any reasonable manner requested by - the Licensor (including by pseudonym if - designated); - - ii. a copyright notice; - - iii. a notice that refers to this Public License; - - iv. a notice that refers to the disclaimer of - warranties; - - v. a URI or hyperlink to the Licensed Material to the - extent reasonably practicable; - - b. indicate if You modified the Licensed Material and - retain an indication of any previous modifications; and - - c. indicate the Licensed Material is licensed under this - Public License, and include the text of, or the URI or - hyperlink to, this Public License. - - 2. You may satisfy the conditions in Section 3(a)(1) in any - reasonable manner based on the medium, means, and context in - which You Share the Licensed Material. For example, it may be - reasonable to satisfy the conditions by providing a URI or - hyperlink to a resource that includes the required - information. - - 3. If requested by the Licensor, You must remove any of the - information required by Section 3(a)(1)(A) to the extent - reasonably practicable. - - 4. If You Share Adapted Material You produce, the Adapter's - License You apply must not prevent recipients of the Adapted - Material from complying with this Public License. - - -Section 4 -- Sui Generis Database Rights. - -Where the Licensed Rights include Sui Generis Database Rights that -apply to Your use of the Licensed Material: - - a. for the avoidance of doubt, Section 2(a)(1) grants You the right - to extract, reuse, reproduce, and Share all or a substantial - portion of the contents of the database; - - b. if You include all or a substantial portion of the database - contents in a database in which You have Sui Generis Database - Rights, then the database in which You have Sui Generis Database - Rights (but not its individual contents) is Adapted Material; and - - c. You must comply with the conditions in Section 3(a) if You Share - all or a substantial portion of the contents of the database. - -For the avoidance of doubt, this Section 4 supplements and does not -replace Your obligations under this Public License where the Licensed -Rights include other Copyright and Similar Rights. - - -Section 5 -- Disclaimer of Warranties and Limitation of Liability. - - a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE - EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS - AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF - ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, - IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, - WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR - PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, - ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT - KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT - ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. - - b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE - TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, - NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, - INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, - COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR - USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN - ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR - DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR - IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. - - c. The disclaimer of warranties and limitation of liability provided - above shall be interpreted in a manner that, to the extent - possible, most closely approximates an absolute disclaimer and - waiver of all liability. - - -Section 6 -- Term and Termination. - - a. This Public License applies for the term of the Copyright and - Similar Rights licensed here. However, if You fail to comply with - this Public License, then Your rights under this Public License - terminate automatically. - - b. Where Your right to use the Licensed Material has terminated under - Section 6(a), it reinstates: - - 1. automatically as of the date the violation is cured, provided - it is cured within 30 days of Your discovery of the - violation; or - - 2. upon express reinstatement by the Licensor. - - For the avoidance of doubt, this Section 6(b) does not affect any - right the Licensor may have to seek remedies for Your violations - of this Public License. - - c. For the avoidance of doubt, the Licensor may also offer the - Licensed Material under separate terms or conditions or stop - distributing the Licensed Material at any time; however, doing so - will not terminate this Public License. - - d. Sections 1, 5, 6, 7, and 8 survive termination of this Public - License. - - -Section 7 -- Other Terms and Conditions. - - a. The Licensor shall not be bound by any additional or different - terms or conditions communicated by You unless expressly agreed. - - b. Any arrangements, understandings, or agreements regarding the - Licensed Material not stated herein are separate from and - independent of the terms and conditions of this Public License. - - -Section 8 -- Interpretation. - - a. For the avoidance of doubt, this Public License does not, and - shall not be interpreted to, reduce, limit, restrict, or impose - conditions on any use of the Licensed Material that could lawfully - be made without permission under this Public License. - - b. To the extent possible, if any provision of this Public License is - deemed unenforceable, it shall be automatically reformed to the - minimum extent necessary to make it enforceable. If the provision - cannot be reformed, it shall be severed from this Public License - without affecting the enforceability of the remaining terms and - conditions. - - c. No term or condition of this Public License will be waived and no - failure to comply consented to unless expressly agreed to by the - Licensor. - - d. Nothing in this Public License constitutes or may be interpreted - as a limitation upon, or waiver of, any privileges and immunities - that apply to the Licensor or You, including from the legal - processes of any jurisdiction or authority. - - -======================================================================= - -Creative Commons is not a party to its public licenses. -Notwithstanding, Creative Commons may elect to apply one of its public -licenses to material it publishes and in those instances will be -considered the "Licensor." Except for the limited purpose of indicating -that material is shared under a Creative Commons public license or as -otherwise permitted by the Creative Commons policies published at -creativecommons.org/policies, Creative Commons does not authorize the -use of the trademark "Creative Commons" or any other trademark or logo -of Creative Commons without its prior written consent including, -without limitation, in connection with any unauthorized modifications -to any of its public licenses or any other arrangements, -understandings, or agreements concerning use of licensed material. For -the avoidance of doubt, this paragraph does not form part of the public -licenses. - -Creative Commons may be contacted at creativecommons.org. diff --git a/Assets/Fonts/Emoji/Twemoji.ttf b/Assets/Fonts/Emoji/Twemoji.ttf deleted file mode 100644 index 60d816cf2..000000000 --- a/Assets/Fonts/Emoji/Twemoji.ttf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:283b775ce3715a84065212985ebbdecb8fa0c457b7ccf2c9c15c99b5a83ef702 -size 1805956 diff --git a/Assets/Fonts/Emoji/Twemoji.ttf.meta b/Assets/Fonts/Emoji/Twemoji.ttf.meta deleted file mode 100644 index 5cc7ab440..000000000 --- a/Assets/Fonts/Emoji/Twemoji.ttf.meta +++ /dev/null @@ -1,21 +0,0 @@ -fileFormatVersion: 2 -guid: bde541f3fd3b82b4aa6aa068e4a205a7 -TrueTypeFontImporter: - externalObjects: {} - serializedVersion: 4 - fontSize: 16 - forceTextureCase: -2 - characterSpacing: 0 - characterPadding: 1 - includeFontData: 1 - fontNames: - - Aetheria Emoji - fallbackFontReferences: [] - customCharacters: - fontRenderingMode: 0 - ascentCalculationMode: 1 - useLegacyBoundsCalculation: 0 - shouldRoundAdvanceValue: 1 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Fonts/Emoji/emoji-font.lock b/Assets/Fonts/Emoji/emoji-font.lock deleted file mode 100644 index cc54beafa..000000000 --- a/Assets/Fonts/Emoji/emoji-font.lock +++ /dev/null @@ -1,25 +0,0 @@ -source_url=https://github.com/jdecked/twemoji/archive/refs/tags/v17.0.3.tar.gz -source_version=v17.0.3 -source_sha256=a0855654b633045ae2337537e77f1bb4361162f7fcd910e613eaab1d6d9c5fca -emoji_test_version=17.0 -emoji_test_url=https://unicode.org/Public/17.0.0/emoji/emoji-test.txt -emoji_test_sha256=1d8a944f88d7952f7ef7c5167fef3c67995bcae24543949710231b03a201acda -svg_count=4009 -single_codepoint_count=1400 -unsupported_count=0 -sequence_count=2760 -tool_nanoemoji=0.16.0 -tool_fonttools=4.66.1 -tool_picosvg=0.23.0 -tool_ninja=1.13.2 -source_date_epoch=1780352497 -color_format=glyf_colr_0 -python_version=3.13.15 -platform=linux -container_image=python:3.13-slim -fe0f_less_twins=15 -font_file=Twemoji.ttf -font_sha256=283b775ce3715a84065212985ebbdecb8fa0c457b7ccf2c9c15c99b5a83ef702 -singles_sha256=7ad887a16ef5386df040e1e8988e9bdc55ae5cab461ffc9df4613d0cb5770b4e -unsupported_sha256=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -sequences_sha256=18529154b14f75f54db5dedd72910de35af9ca05aef284b7d121be249b3c3bb2 diff --git a/Assets/Materials/PBR/Rubber/Rubber.mat b/Assets/Materials/Brushes/Gravity Waves.mat similarity index 70% rename from Assets/Materials/PBR/Rubber/Rubber.mat rename to Assets/Materials/Brushes/Gravity Waves.mat index 2c10c3488..a45dfed21 100644 --- a/Assets/Materials/PBR/Rubber/Rubber.mat +++ b/Assets/Materials/Brushes/Gravity Waves.mat @@ -7,9 +7,9 @@ Material: m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_Name: Rubber - m_Shader: {fileID: 4800000, guid: ddff0b48b92c991499817d2a0f5d5059, type: 3} - m_ShaderKeywords: _MAINTEX _METALLICGLOSSMAP _NORMALMAP + m_Name: Gravity Waves + m_Shader: {fileID: 4800000, guid: 8a8e593b17063b54ea02f7ea5363b59d, type: 3} + m_ShaderKeywords: m_LightmapFlags: 4 m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 @@ -20,7 +20,7 @@ Material: serializedVersion: 3 m_TexEnvs: - _BumpMap: - m_Texture: {fileID: 2800000, guid: 42826f488ae243178be306ada5ee9f41, type: 3} + m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _DetailAlbedoMap: @@ -39,16 +39,12 @@ Material: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - - _FadeTex: - m_Texture: {fileID: 2800000, guid: df0632a08c5f1a1498fa325c755dc459, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - _MainTex: - m_Texture: {fileID: 2800000, guid: 83e6c1768e014acfb494fbf007c40c80, type: 3} + m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _MetallicGlossMap: - m_Texture: {fileID: 2800000, guid: f1d4409638e4452cb1412503ed8526de, type: 3} + m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _OcclusionMap: @@ -62,18 +58,20 @@ Material: m_Floats: - _BumpScale: 1 - _Cutoff: 0.5 + - _Depth: 3.5 - _DetailNormalMapScale: 1 - _DstBlend: 0 - - _Fade: 0 - - _FadeEdge: 0.05 - - _FadeSharpness: 16 + - _Frequency: 27.43 - _GlossMapScale: 1 - - _Glossiness: 1 + - _Glossiness: 0.5 - _GlossyReflections: 1 - - _Metallic: 1 + - _Metallic: 0 - _Mode: 0 - _OcclusionStrength: 1 - _Parallax: 0.02 + - _Phase: 0 + - _Power: 8 + - _SinePower: 1.25 - _SmoothnessTextureChannel: 0 - _SpecularHighlights: 1 - _SrcBlend: 1 @@ -81,6 +79,5 @@ Material: - _ZWrite: 1 m_Colors: - _Color: {r: 1, g: 1, b: 1, a: 1} - - _EdgeColor: {r: 3.0117648, g: 3.0117648, b: 11.984314, a: 1} - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} m_BuildTextureStacks: [] diff --git a/Assets/Materials/PBR/Carbon_Fibre/Carbon_Fibre.mat.meta b/Assets/Materials/Brushes/Gravity Waves.mat.meta similarity index 79% rename from Assets/Materials/PBR/Carbon_Fibre/Carbon_Fibre.mat.meta rename to Assets/Materials/Brushes/Gravity Waves.mat.meta index b0f1c3097..f4e2f41d4 100644 --- a/Assets/Materials/PBR/Carbon_Fibre/Carbon_Fibre.mat.meta +++ b/Assets/Materials/Brushes/Gravity Waves.mat.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 8e5a779dec614c80a12925ba063bb99f +guid: 11fbaa87dcc7a3743a6bd3aa5c86e5ae NativeFormatImporter: externalObjects: {} mainObjectFileID: 2100000 diff --git a/Assets/Materials/Brushes/Gravity Field.mat b/Assets/Materials/Brushes/Gravity Well.mat similarity index 92% rename from Assets/Materials/Brushes/Gravity Field.mat rename to Assets/Materials/Brushes/Gravity Well.mat index d912917c9..e0bd9f79d 100644 --- a/Assets/Materials/Brushes/Gravity Field.mat +++ b/Assets/Materials/Brushes/Gravity Well.mat @@ -7,8 +7,8 @@ Material: m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_Name: Gravity Field - m_Shader: {fileID: 4800000, guid: 08d8efa80af84065b54c9bfed784e435, type: 3} + m_Name: Gravity Well + m_Shader: {fileID: 4800000, guid: 268da230635cfb34ab4ed6ad39503fa0, type: 3} m_ShaderKeywords: m_LightmapFlags: 4 m_EnableInstancingVariants: 0 @@ -57,6 +57,8 @@ Material: m_Offset: {x: 0, y: 0} m_Floats: - _BumpScale: 1 + - _Cutoff: 1 + - _Depth: 80 - _DetailNormalMapScale: 1 - _DstBlend: 0 - _GlossMapScale: 1 @@ -66,6 +68,7 @@ Material: - _Mode: 0 - _OcclusionStrength: 1 - _Parallax: 0.02 + - _Power: 16 - _SmoothnessTextureChannel: 0 - _SpecularHighlights: 1 - _SrcBlend: 1 diff --git a/Assets/Materials/Brushes/Gravity Field.mat.meta b/Assets/Materials/Brushes/Gravity Well.mat.meta similarity index 100% rename from Assets/Materials/Brushes/Gravity Field.mat.meta rename to Assets/Materials/Brushes/Gravity Well.mat.meta diff --git a/Assets/Materials/Brushes/Sector Tint.mat b/Assets/Materials/Brushes/Sector Tint.mat index 84e252ad3..3e5e00f24 100644 --- a/Assets/Materials/Brushes/Sector Tint.mat +++ b/Assets/Materials/Brushes/Sector Tint.mat @@ -8,7 +8,7 @@ Material: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: Sector Tint - m_Shader: {fileID: 4800000, guid: 782740c1a3d7455ea75dc87fafdc8432, type: 3} + m_Shader: {fileID: 4800000, guid: 268da230635cfb34ab4ed6ad39503fa0, type: 3} m_ValidKeywords: [] m_InvalidKeywords: [] m_LightmapFlags: 4 @@ -59,8 +59,8 @@ Material: m_Ints: [] m_Floats: - _BumpScale: 1 + - _Cutoff: 1 - _Depth: 0.025 - - _EdgeBrightness: 0.12 - _DetailNormalMapScale: 1 - _DstBlend: 0 - _Frequency: 6.2832 @@ -72,6 +72,7 @@ Material: - _OcclusionStrength: 1 - _Parallax: 0.02 - _Phase: 0 + - _Power: 2 - _SinePower: 1.25 - _SmoothnessTextureChannel: 0 - _SpecularHighlights: 1 diff --git a/Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark.mat b/Assets/Materials/Brushes/Wormhole Gravity 1.mat similarity index 69% rename from Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark.mat rename to Assets/Materials/Brushes/Wormhole Gravity 1.mat index 150f0f72c..3ae24d6ee 100644 --- a/Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark.mat +++ b/Assets/Materials/Brushes/Wormhole Gravity 1.mat @@ -7,9 +7,9 @@ Material: m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_Name: Gunmetal_Dark - m_Shader: {fileID: 4800000, guid: ddff0b48b92c991499817d2a0f5d5059, type: 3} - m_ShaderKeywords: _MAINTEX _METALLICGLOSSMAP _NORMALMAP + m_Name: Wormhole Gravity 1 + m_Shader: {fileID: 4800000, guid: 268da230635cfb34ab4ed6ad39503fa0, type: 3} + m_ShaderKeywords: m_LightmapFlags: 4 m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 @@ -20,7 +20,7 @@ Material: serializedVersion: 3 m_TexEnvs: - _BumpMap: - m_Texture: {fileID: 2800000, guid: dc71e34b4a1f4de7aa826d18b67b5852, type: 3} + m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _DetailAlbedoMap: @@ -39,16 +39,12 @@ Material: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - - _FadeTex: - m_Texture: {fileID: 2800000, guid: df0632a08c5f1a1498fa325c755dc459, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - _MainTex: - m_Texture: {fileID: 2800000, guid: 1ed06708491744fe944217d19e450157, type: 3} + m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _MetallicGlossMap: - m_Texture: {fileID: 2800000, guid: 31e7d642ff8a49a28390c82626c4b6b9, type: 3} + m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _OcclusionMap: @@ -61,19 +57,18 @@ Material: m_Offset: {x: 0, y: 0} m_Floats: - _BumpScale: 1 - - _Cutoff: 0.5 + - _Cutoff: 1 + - _Depth: 54 - _DetailNormalMapScale: 1 - _DstBlend: 0 - - _Fade: 0 - - _FadeEdge: 0.05 - - _FadeSharpness: 16 - _GlossMapScale: 1 - - _Glossiness: 1 + - _Glossiness: 0.5 - _GlossyReflections: 1 - - _Metallic: 1 + - _Metallic: 0 - _Mode: 0 - _OcclusionStrength: 1 - _Parallax: 0.02 + - _Power: 4 - _SmoothnessTextureChannel: 0 - _SpecularHighlights: 1 - _SrcBlend: 1 @@ -81,6 +76,5 @@ Material: - _ZWrite: 1 m_Colors: - _Color: {r: 1, g: 1, b: 1, a: 1} - - _EdgeColor: {r: 3.0117648, g: 3.0117648, b: 11.984314, a: 1} - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} m_BuildTextureStacks: [] diff --git a/Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark.mat.meta b/Assets/Materials/Brushes/Wormhole Gravity 1.mat.meta similarity index 79% rename from Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark.mat.meta rename to Assets/Materials/Brushes/Wormhole Gravity 1.mat.meta index 24a52eab3..7d40d0332 100644 --- a/Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark.mat.meta +++ b/Assets/Materials/Brushes/Wormhole Gravity 1.mat.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 32199fedf9ce473191d8a734a74f3d5f +guid: 244f3e4c0c030a24b8d7aa944895bdcf NativeFormatImporter: externalObjects: {} mainObjectFileID: 2100000 diff --git a/Assets/Materials/Brushes/Wormhole Gravity 2.mat b/Assets/Materials/Brushes/Wormhole Gravity 2.mat new file mode 100644 index 000000000..3ae24d6ee --- /dev/null +++ b/Assets/Materials/Brushes/Wormhole Gravity 2.mat @@ -0,0 +1,80 @@ +%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: Wormhole Gravity 1 + m_Shader: {fileID: 4800000, guid: 268da230635cfb34ab4ed6ad39503fa0, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + 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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 1 + - _Depth: 54 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _Power: 4 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/Materials/PBR/Metal_Scratched/Metal_Scratched.mat.meta b/Assets/Materials/Brushes/Wormhole Gravity 2.mat.meta similarity index 79% rename from Assets/Materials/PBR/Metal_Scratched/Metal_Scratched.mat.meta rename to Assets/Materials/Brushes/Wormhole Gravity 2.mat.meta index 1d5895d52..fb6f1270d 100644 --- a/Assets/Materials/PBR/Metal_Scratched/Metal_Scratched.mat.meta +++ b/Assets/Materials/Brushes/Wormhole Gravity 2.mat.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: a5874fba9e2242c79aea6b21ddb63af0 +guid: 0ec0689c58b99c64297b3e429e1d9112 NativeFormatImporter: externalObjects: {} mainObjectFileID: 2100000 diff --git a/Assets/Materials/Brushes/Wormhole Gravity.mat b/Assets/Materials/Brushes/Wormhole Gravity.mat new file mode 100644 index 000000000..fb6f52b20 --- /dev/null +++ b/Assets/Materials/Brushes/Wormhole Gravity.mat @@ -0,0 +1,82 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Wormhole Gravity + m_Shader: {fileID: 4800000, guid: 268da230635cfb34ab4ed6ad39503fa0, type: 3} + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + 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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.15 + - _Depth: 2000 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _Power: 64 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/Materials/PBR/Paint_Clean_Light/Paint_Clean_Light.mat.meta b/Assets/Materials/Brushes/Wormhole Gravity.mat.meta similarity index 79% rename from Assets/Materials/PBR/Paint_Clean_Light/Paint_Clean_Light.mat.meta rename to Assets/Materials/Brushes/Wormhole Gravity.mat.meta index 519f702b0..30ec9b01d 100644 --- a/Assets/Materials/PBR/Paint_Clean_Light/Paint_Clean_Light.mat.meta +++ b/Assets/Materials/Brushes/Wormhole Gravity.mat.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 132cb2f99d9f42fe9b05db1c0d653897 +guid: a9ef17c902709ce41a837c54b809184b NativeFormatImporter: externalObjects: {} mainObjectFileID: 2100000 diff --git a/Assets/Materials/PBR/Carbon_Fibre/Carbon_Fibre.mat b/Assets/Materials/Brushes/Wormhole Waves.mat similarity index 70% rename from Assets/Materials/PBR/Carbon_Fibre/Carbon_Fibre.mat rename to Assets/Materials/Brushes/Wormhole Waves.mat index b7f244b60..7902c5c36 100644 --- a/Assets/Materials/PBR/Carbon_Fibre/Carbon_Fibre.mat +++ b/Assets/Materials/Brushes/Wormhole Waves.mat @@ -7,9 +7,9 @@ Material: m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_Name: Carbon_Fibre - m_Shader: {fileID: 4800000, guid: ddff0b48b92c991499817d2a0f5d5059, type: 3} - m_ShaderKeywords: _MAINTEX _METALLICGLOSSMAP _NORMALMAP + m_Name: Wormhole Waves + m_Shader: {fileID: 4800000, guid: 8681ac064d59d15458d16cc9b884262c, type: 3} + m_ShaderKeywords: m_LightmapFlags: 4 m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 @@ -20,7 +20,7 @@ Material: serializedVersion: 3 m_TexEnvs: - _BumpMap: - m_Texture: {fileID: 2800000, guid: 5723eb533deb4d73a2b015bb75b523b4, type: 3} + m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _DetailAlbedoMap: @@ -39,16 +39,12 @@ Material: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - - _FadeTex: - m_Texture: {fileID: 2800000, guid: df0632a08c5f1a1498fa325c755dc459, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - _MainTex: - m_Texture: {fileID: 2800000, guid: 32fc9d1c4304495da5350f8a8b52e14b, type: 3} + m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _MetallicGlossMap: - m_Texture: {fileID: 2800000, guid: 15a9bba7a82740718ad2d3913f7297af, type: 3} + m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _OcclusionMap: @@ -62,25 +58,27 @@ Material: m_Floats: - _BumpScale: 1 - _Cutoff: 0.5 + - _Depth: 33.9 - _DetailNormalMapScale: 1 - _DstBlend: 0 - - _Fade: 0 - - _FadeEdge: 0.05 - - _FadeSharpness: 16 + - _Frequency: 2 + - _FrequencyDist: 60 - _GlossMapScale: 1 - - _Glossiness: 1 + - _Glossiness: 0.5 - _GlossyReflections: 1 - - _Metallic: 1 + - _Metallic: 0 - _Mode: 0 - _OcclusionStrength: 1 - _Parallax: 0.02 + - _Power: 2 + - _SinePower: 1.25 - _SmoothnessTextureChannel: 0 - _SpecularHighlights: 1 + - _Speed: 15 - _SrcBlend: 1 - _UVSec: 0 - _ZWrite: 1 m_Colors: - _Color: {r: 1, g: 1, b: 1, a: 1} - - _EdgeColor: {r: 3.0117648, g: 3.0117648, b: 11.984314, a: 1} - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} m_BuildTextureStacks: [] diff --git a/Assets/Materials/Brushes/Wormhole Waves.mat.meta b/Assets/Materials/Brushes/Wormhole Waves.mat.meta new file mode 100644 index 000000000..1e5f35dd3 --- /dev/null +++ b/Assets/Materials/Brushes/Wormhole Waves.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ef2f6090d5cc14a4e9ce38def3bed9ac +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/Fog Marching 1.mat b/Assets/Materials/Fog Marching 1.mat new file mode 100644 index 000000000..20290c785 --- /dev/null +++ b/Assets/Materials/Fog Marching 1.mat @@ -0,0 +1,73 @@ +%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: Fog Marching 1 + m_Shader: {fileID: 4800000, guid: 7a890b6ceccf53c44bfc54b18b5daa58, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _Displacement: + m_Texture: {fileID: 8400000, guid: 06ec5ef8a5830fc44b1ac1a6e123add5, type: 2} + 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} + - _Patch: + m_Texture: {fileID: 8400000, guid: c618a6b20b3c7394590c59a9fa467e86, type: 2} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Surface: + m_Texture: {fileID: 8400000, guid: 2fc21a9d3e9647948b56e384cd9378b3, type: 2} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _TintTexture: + m_Texture: {fileID: 8400000, guid: d196505464047f04a97f28689041209b, type: 2} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _AlphaFloor: 0.01 + - _DepthBlend: 512 + - _DepthCeiling: 4096 + - _FlowSpeed: 2 + - _Gamma: 0.5 + - _GridCeilingBlend: -300 + - _GridCeilingDensity: 0.01 + - _GridCeilingFollow: 0 + - _GridCeilingOffset: 0 + - _GridFillDensity: 0.001 + - _GridFloorBlend: 100 + - _GridFloorDensity: 2 + - _GridFloorOffset: 20 + - _GridPatchBlend: 50 + - _GridPatchDensity: 2 + - _NoiseExponent: 2.25 + - _NoiseFrequency: 0.015 + - _NoiseSpeed: 0 + - _NoiseStrength: 500 + - _SafetyDistance: 20 + - _Scattering: 0 + - _ScatteringDensityExponent: 0.5 + - _ScatteringDistExponent: 0.5 + - _ScatteringMinDist: 500 + - _StepExponent: 2 + - _TintExponent: 0.1 + - _TurbulenceAmplitude: 100 + - _TurbulenceScale: 100 + m_Colors: + - _Tint: {r: 0.0627451, g: 0.0627451, b: 0.0627451, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/Materials/Fog Marching 1.mat.meta b/Assets/Materials/Fog Marching 1.mat.meta new file mode 100644 index 000000000..00e039020 --- /dev/null +++ b/Assets/Materials/Fog Marching 1.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a72896cb7097bfa46a1a8f4092e47c72 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/Fog Marching Main Menu.mat b/Assets/Materials/Fog Marching Main Menu.mat new file mode 100644 index 000000000..b22522a2d --- /dev/null +++ b/Assets/Materials/Fog Marching Main Menu.mat @@ -0,0 +1,99 @@ +%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: Fog Marching Main Menu + m_Shader: {fileID: 4800000, guid: 7a890b6ceccf53c44bfc54b18b5daa58, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _Displacement: + m_Texture: {fileID: 8400000, guid: 06ec5ef8a5830fc44b1ac1a6e123add5, type: 2} + 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} + - _NebulaPatch: + m_Texture: {fileID: 8400000, guid: c618a6b20b3c7394590c59a9fa467e86, type: 2} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NebulaPatchHeight: + m_Texture: {fileID: 8400000, guid: 06ec5ef8a5830fc44b1ac1a6e123add5, type: 2} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NebulaSurfaceHeight: + m_Texture: {fileID: 8400000, guid: 2fc21a9d3e9647948b56e384cd9378b3, type: 2} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NebulaTint: + m_Texture: {fileID: 8400000, guid: d196505464047f04a97f28689041209b, type: 2} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Patch: + m_Texture: {fileID: 8400000, guid: c618a6b20b3c7394590c59a9fa467e86, type: 2} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Surface: + m_Texture: {fileID: 8400000, guid: 2fc21a9d3e9647948b56e384cd9378b3, type: 2} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _TintTexture: + m_Texture: {fileID: 8400000, guid: d196505464047f04a97f28689041209b, type: 2} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _AlphaFloor: 0 + - _DepthBlend: 512 + - _DepthCeiling: 1024 + - _Exposure: 100 + - _FlowAmplitude: 1 + - _FlowScale: 1 + - _FlowScroll: 1 + - _FlowSpeed: 5 + - _Gamma: 0.3 + - _GridCeilingBlend: -300 + - _GridCeilingDensity: 0.01 + - _GridCeilingFollow: 0 + - _GridCeilingOffset: 0 + - _GridFillDensity: 0.001 + - _GridFloorBlend: 50 + - _GridFloorDensity: 1 + - _GridFloorOffset: 100 + - _GridPatchBlend: 50 + - _GridPatchDensity: 1 + - _NebulaFillDensity: 0.00075 + - _NebulaFloorBlend: 50 + - _NebulaFloorDensity: 1 + - _NebulaFloorOffset: 80 + - _NebulaPatchBlend: 25 + - _NebulaPatchDensity: 0.1 + - _NoiseExponent: 2 + - _NoiseFrequency: 0.02 + - _NoiseSpeed: 0.00001 + - _NoiseStrength: 200 + - _SafetyDistance: 50 + - _Scattering: 0 + - _ScatteringDensityExponent: 8 + - _ScatteringDistExponent: 0.5 + - _ScatteringMinDist: 1 + - _StepExponent: 2 + - _TintExponent: 1.2 + - _TurbulenceAmplitude: 20 + - _TurbulenceScale: 30 + m_Colors: + - _Tint: {r: 0.09411765, g: 0.09411765, b: 0.09411765, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/Materials/Fog Marching Main Menu.mat.meta b/Assets/Materials/Fog Marching Main Menu.mat.meta new file mode 100644 index 000000000..6a5cdb35e --- /dev/null +++ b/Assets/Materials/Fog Marching Main Menu.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e21702a5e6e98b7409d6913663ceab7e +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/Fog Marching Test.mat b/Assets/Materials/Fog Marching Test.mat new file mode 100644 index 000000000..91b56761e --- /dev/null +++ b/Assets/Materials/Fog Marching Test.mat @@ -0,0 +1,65 @@ +%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: Fog Marching Test + m_Shader: {fileID: 4800000, guid: 7a890b6ceccf53c44bfc54b18b5daa58, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _Displacement: + m_Texture: {fileID: 8400000, guid: 06ec5ef8a5830fc44b1ac1a6e123add5, type: 2} + 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} + - _Patch: + m_Texture: {fileID: 8400000, guid: c618a6b20b3c7394590c59a9fa467e86, type: 2} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Surface: + m_Texture: {fileID: 8400000, guid: 2fc21a9d3e9647948b56e384cd9378b3, type: 2} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _TintTexture: + m_Texture: {fileID: 8400000, guid: d196505464047f04a97f28689041209b, type: 2} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _AlphaFloor: 0 + - _DepthBlend: 512 + - _DepthCeiling: 4096 + - _Gamma: 0.66 + - _GridCeilingBlend: -300 + - _GridCeilingDensity: 0.01 + - _GridCeilingFollow: 0 + - _GridCeilingOffset: 0 + - _GridFillDensity: 0.000025 + - _GridFloorBlend: 100 + - _GridFloorDensity: 4 + - _GridFloorOffset: 0 + - _GridPatchBlend: 5 + - _GridPatchDensity: 0.1 + - _NoiseFrequency: 0.01 + - _NoiseSpeed: 0.02 + - _NoiseStrength: 50 + - _SafetyDistance: 0 + - _StepExponent: 2 + - _TintExponent: 8 + m_Colors: + - _Tint: {r: 2.0078435, g: 2.0078435, b: 2.0078435, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/Materials/Fog Marching Test.mat.meta b/Assets/Materials/Fog Marching Test.mat.meta new file mode 100644 index 000000000..9f0e3d586 --- /dev/null +++ b/Assets/Materials/Fog Marching Test.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ad63650ae6d6cc542a5aad16694b3c46 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/Fog Marching.mat b/Assets/Materials/Fog Marching.mat new file mode 100644 index 000000000..52dc13c19 --- /dev/null +++ b/Assets/Materials/Fog Marching.mat @@ -0,0 +1,99 @@ +%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: Fog Marching + m_Shader: {fileID: 4800000, guid: 7a890b6ceccf53c44bfc54b18b5daa58, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _Displacement: + m_Texture: {fileID: 8400000, guid: 06ec5ef8a5830fc44b1ac1a6e123add5, type: 2} + 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} + - _NebulaPatch: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NebulaPatchHeight: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NebulaSurfaceHeight: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NebulaTint: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Patch: + m_Texture: {fileID: 8400000, guid: c618a6b20b3c7394590c59a9fa467e86, type: 2} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Surface: + m_Texture: {fileID: 8400000, guid: 2fc21a9d3e9647948b56e384cd9378b3, type: 2} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _TintTexture: + m_Texture: {fileID: 8400000, guid: d196505464047f04a97f28689041209b, type: 2} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _AlphaFloor: 0.01 + - _DepthBlend: 512 + - _DepthCeiling: 4096 + - _Exposure: 10 + - _FlowAmplitude: 512 + - _FlowScale: 1024 + - _FlowScroll: 0 + - _FlowSpeed: 1 + - _Gamma: 0.3 + - _GridCeilingBlend: -300 + - _GridCeilingDensity: 0.01 + - _GridCeilingFollow: 0 + - _GridCeilingOffset: 0 + - _GridFillDensity: 0.0005 + - _GridFloorBlend: 50 + - _GridFloorDensity: 1 + - _GridFloorOffset: 10 + - _GridPatchBlend: 150 + - _GridPatchDensity: 1 + - _NebulaFillDensity: 0.00075 + - _NebulaFloorBlend: 150 + - _NebulaFloorDensity: 1 + - _NebulaFloorOffset: 0 + - _NebulaPatchBlend: 51.47 + - _NebulaPatchDensity: 0.25 + - _NoiseExponent: 3 + - _NoiseFrequency: 0.005 + - _NoiseSpeed: 0 + - _NoiseStrength: -400 + - _SafetyDistance: 200 + - _Scattering: 50 + - _ScatteringDensityExponent: 1 + - _ScatteringDistExponent: 1.5 + - _ScatteringMinDist: 10 + - _StepExponent: 2 + - _TintExponent: 2 + - _TurbulenceAmplitude: 20 + - _TurbulenceScale: 60 + m_Colors: + - _Tint: {r: 0.01, g: 0.01, b: 0.01, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/Materials/Fog Marching.mat.meta b/Assets/Materials/Fog Marching.mat.meta new file mode 100644 index 000000000..04c6076f8 --- /dev/null +++ b/Assets/Materials/Fog Marching.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2ff39f5d101241043ba1dcde19d92f77 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Carbon_Fibre/Carbon_Fibre_Color.jpg b/Assets/Materials/PBR/Carbon_Fibre/Carbon_Fibre_Color.jpg deleted file mode 100644 index 4e3c4a374..000000000 --- a/Assets/Materials/PBR/Carbon_Fibre/Carbon_Fibre_Color.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:327e42b2dfc859efd9b4f122cf1adbdb611c75e80dd3cb8a18bc69e83eef9585 -size 566952 diff --git a/Assets/Materials/PBR/Carbon_Fibre/Carbon_Fibre_Color.jpg.meta b/Assets/Materials/PBR/Carbon_Fibre/Carbon_Fibre_Color.jpg.meta deleted file mode 100644 index 614f43088..000000000 --- a/Assets/Materials/PBR/Carbon_Fibre/Carbon_Fibre_Color.jpg.meta +++ /dev/null @@ -1,104 +0,0 @@ -fileFormatVersion: 2 -guid: 32fc9d1c4304495da5350f8a8b52e14b -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 13 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - flipGreenChannel: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMipmapLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 4 - mipBias: 0 - wrapU: 0 - wrapV: 0 - wrapW: 0 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 1 - platformSettings: - - serializedVersion: 4 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - customData: - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spriteCustomMetadata: - entries: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Carbon_Fibre/Carbon_Fibre_MetallicSmoothness.png b/Assets/Materials/PBR/Carbon_Fibre/Carbon_Fibre_MetallicSmoothness.png deleted file mode 100644 index 31131f1a7..000000000 --- a/Assets/Materials/PBR/Carbon_Fibre/Carbon_Fibre_MetallicSmoothness.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:fd50d0187fdf8c05eba5ef982da5217c6adf9f03720a2c8041ef4bebd5a2658d -size 1944562 diff --git a/Assets/Materials/PBR/Carbon_Fibre/Carbon_Fibre_MetallicSmoothness.png.meta b/Assets/Materials/PBR/Carbon_Fibre/Carbon_Fibre_MetallicSmoothness.png.meta deleted file mode 100644 index 19a8fae68..000000000 --- a/Assets/Materials/PBR/Carbon_Fibre/Carbon_Fibre_MetallicSmoothness.png.meta +++ /dev/null @@ -1,104 +0,0 @@ -fileFormatVersion: 2 -guid: 15a9bba7a82740718ad2d3913f7297af -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 13 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - flipGreenChannel: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMipmapLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 4 - mipBias: 0 - wrapU: 0 - wrapV: 0 - wrapW: 0 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 1 - platformSettings: - - serializedVersion: 4 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - customData: - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spriteCustomMetadata: - entries: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Carbon_Fibre/Carbon_Fibre_NormalGL.jpg b/Assets/Materials/PBR/Carbon_Fibre/Carbon_Fibre_NormalGL.jpg deleted file mode 100644 index c0e1c9aa8..000000000 --- a/Assets/Materials/PBR/Carbon_Fibre/Carbon_Fibre_NormalGL.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e76a53fce87086a2346756ef1ef25f6db6153bda3433611a192ac71b32b2ebdc -size 1356999 diff --git a/Assets/Materials/PBR/Carbon_Fibre/Carbon_Fibre_NormalGL.jpg.meta b/Assets/Materials/PBR/Carbon_Fibre/Carbon_Fibre_NormalGL.jpg.meta deleted file mode 100644 index 072cf13c3..000000000 --- a/Assets/Materials/PBR/Carbon_Fibre/Carbon_Fibre_NormalGL.jpg.meta +++ /dev/null @@ -1,104 +0,0 @@ -fileFormatVersion: 2 -guid: 5723eb533deb4d73a2b015bb75b523b4 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 13 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - flipGreenChannel: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMipmapLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 4 - mipBias: 0 - wrapU: 0 - wrapV: 0 - wrapW: 0 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 1 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 1 - platformSettings: - - serializedVersion: 4 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - customData: - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spriteCustomMetadata: - entries: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Carbon_Fibre/Carbon_Fibre_Roughness.jpg b/Assets/Materials/PBR/Carbon_Fibre/Carbon_Fibre_Roughness.jpg deleted file mode 100644 index fd7a1f7f1..000000000 --- a/Assets/Materials/PBR/Carbon_Fibre/Carbon_Fibre_Roughness.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8005027078e974df48351781ce90885bd6325ac63d0a16b41938fca8fd35a634 -size 1189710 diff --git a/Assets/Materials/PBR/Carbon_Fibre/Carbon_Fibre_Roughness.jpg.meta b/Assets/Materials/PBR/Carbon_Fibre/Carbon_Fibre_Roughness.jpg.meta deleted file mode 100644 index 503d1d154..000000000 --- a/Assets/Materials/PBR/Carbon_Fibre/Carbon_Fibre_Roughness.jpg.meta +++ /dev/null @@ -1,104 +0,0 @@ -fileFormatVersion: 2 -guid: b8e5cd91353441ebb42296a830fef845 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 13 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - flipGreenChannel: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMipmapLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 4 - mipBias: 0 - wrapU: 0 - wrapV: 0 - wrapW: 0 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 1 - platformSettings: - - serializedVersion: 4 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - customData: - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spriteCustomMetadata: - entries: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark_Color.jpg b/Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark_Color.jpg deleted file mode 100644 index 4a0118922..000000000 --- a/Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark_Color.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:28845bf0cc6a1edeed7e9f10f5db4034cae4ba7377bc53633f413de0dbcae5b7 -size 1451112 diff --git a/Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark_Color.jpg.meta b/Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark_Color.jpg.meta deleted file mode 100644 index 848791f40..000000000 --- a/Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark_Color.jpg.meta +++ /dev/null @@ -1,104 +0,0 @@ -fileFormatVersion: 2 -guid: 1ed06708491744fe944217d19e450157 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 13 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - flipGreenChannel: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMipmapLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 4 - mipBias: 0 - wrapU: 0 - wrapV: 0 - wrapW: 0 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 1 - platformSettings: - - serializedVersion: 4 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - customData: - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spriteCustomMetadata: - entries: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark_MetallicSmoothness.png b/Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark_MetallicSmoothness.png deleted file mode 100644 index f3cca5c7f..000000000 --- a/Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark_MetallicSmoothness.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1c101b3b9d7b3ff0636b6539cc65908dc5cac76e31e951a6a375918bb681076c -size 2899231 diff --git a/Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark_MetallicSmoothness.png.meta b/Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark_MetallicSmoothness.png.meta deleted file mode 100644 index 598a3c189..000000000 --- a/Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark_MetallicSmoothness.png.meta +++ /dev/null @@ -1,104 +0,0 @@ -fileFormatVersion: 2 -guid: 31e7d642ff8a49a28390c82626c4b6b9 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 13 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - flipGreenChannel: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMipmapLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 4 - mipBias: 0 - wrapU: 0 - wrapV: 0 - wrapW: 0 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 1 - platformSettings: - - serializedVersion: 4 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - customData: - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spriteCustomMetadata: - entries: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark_Metalness.jpg b/Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark_Metalness.jpg deleted file mode 100644 index afd0fe3a6..000000000 --- a/Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark_Metalness.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b65d6b9091747bd81ee58adedcb6209d8ee21b2bde9298d7216989ada85ef622 -size 16545 diff --git a/Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark_Metalness.jpg.meta b/Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark_Metalness.jpg.meta deleted file mode 100644 index 2eb33ad5e..000000000 --- a/Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark_Metalness.jpg.meta +++ /dev/null @@ -1,104 +0,0 @@ -fileFormatVersion: 2 -guid: 51e45f19716b43128ce5d2aac5b5aed4 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 13 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - flipGreenChannel: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMipmapLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 4 - mipBias: 0 - wrapU: 0 - wrapV: 0 - wrapW: 0 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 1 - platformSettings: - - serializedVersion: 4 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - customData: - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spriteCustomMetadata: - entries: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark_NormalGL.jpg b/Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark_NormalGL.jpg deleted file mode 100644 index 37f403c32..000000000 --- a/Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark_NormalGL.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e7b4437dca1fe52addbb21e145d3ccc43e8c1780b7930cc9dad1e2b73cb7455b -size 2260227 diff --git a/Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark_NormalGL.jpg.meta b/Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark_NormalGL.jpg.meta deleted file mode 100644 index e3fed3ebc..000000000 --- a/Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark_NormalGL.jpg.meta +++ /dev/null @@ -1,104 +0,0 @@ -fileFormatVersion: 2 -guid: dc71e34b4a1f4de7aa826d18b67b5852 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 13 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - flipGreenChannel: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMipmapLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 4 - mipBias: 0 - wrapU: 0 - wrapV: 0 - wrapW: 0 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 1 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 1 - platformSettings: - - serializedVersion: 4 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - customData: - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spriteCustomMetadata: - entries: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark_Roughness.jpg b/Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark_Roughness.jpg deleted file mode 100644 index 1e6edb81f..000000000 --- a/Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark_Roughness.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0f466bcf997694d56cb7bc93526a881a195e2ee63b1e0c8a19da88289596b9f4 -size 1228992 diff --git a/Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark_Roughness.jpg.meta b/Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark_Roughness.jpg.meta deleted file mode 100644 index d09d43872..000000000 --- a/Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark_Roughness.jpg.meta +++ /dev/null @@ -1,104 +0,0 @@ -fileFormatVersion: 2 -guid: 5677a8acff8f49358627841b9be8e2dd -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 13 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - flipGreenChannel: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMipmapLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 4 - mipBias: 0 - wrapU: 0 - wrapV: 0 - wrapW: 0 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 1 - platformSettings: - - serializedVersion: 4 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - customData: - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spriteCustomMetadata: - entries: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Metal_Scratched.meta b/Assets/Materials/PBR/Metal_Scratched.meta deleted file mode 100644 index a53ff5c65..000000000 --- a/Assets/Materials/PBR/Metal_Scratched.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 3e9d00e0b2454cc08632c972d2ee499b -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Metal_Scratched/Metal_Scratched.mat b/Assets/Materials/PBR/Metal_Scratched/Metal_Scratched.mat deleted file mode 100644 index fe6463397..000000000 --- a/Assets/Materials/PBR/Metal_Scratched/Metal_Scratched.mat +++ /dev/null @@ -1,86 +0,0 @@ -%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: Metal_Scratched - m_Shader: {fileID: 4800000, guid: ddff0b48b92c991499817d2a0f5d5059, type: 3} - m_ShaderKeywords: _MAINTEX _METALLICGLOSSMAP _NORMALMAP - m_LightmapFlags: 4 - m_EnableInstancingVariants: 0 - m_DoubleSidedGI: 0 - m_CustomRenderQueue: -1 - stringTagMap: {} - disabledShaderPasses: [] - m_SavedProperties: - serializedVersion: 3 - m_TexEnvs: - - _BumpMap: - m_Texture: {fileID: 2800000, guid: 3a10044baac4438f9fc0930783eccdf7, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailAlbedoMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailMask: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailNormalMap: - 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} - - _FadeTex: - m_Texture: {fileID: 2800000, guid: df0632a08c5f1a1498fa325c755dc459, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MainTex: - m_Texture: {fileID: 2800000, guid: 5a9cee903a2d48718aaf6b224126f279, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MetallicGlossMap: - m_Texture: {fileID: 2800000, guid: 8b24d7ea11c341408a146fa39f59b7b0, type: 3} - 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} - - _ParallaxMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Floats: - - _BumpScale: 1 - - _Cutoff: 0.5 - - _DetailNormalMapScale: 1 - - _DstBlend: 0 - - _Fade: 0 - - _FadeEdge: 0.05 - - _FadeSharpness: 16 - - _GlossMapScale: 1 - - _Glossiness: 1 - - _GlossyReflections: 1 - - _Metallic: 1 - - _Mode: 0 - - _OcclusionStrength: 1 - - _Parallax: 0.02 - - _SmoothnessTextureChannel: 0 - - _SpecularHighlights: 1 - - _SrcBlend: 1 - - _UVSec: 0 - - _ZWrite: 1 - m_Colors: - - _Color: {r: 1, g: 1, b: 1, a: 1} - - _EdgeColor: {r: 3.0117648, g: 3.0117648, b: 11.984314, a: 1} - - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - m_BuildTextureStacks: [] diff --git a/Assets/Materials/PBR/Metal_Scratched/Metal_Scratched_Color.jpg b/Assets/Materials/PBR/Metal_Scratched/Metal_Scratched_Color.jpg deleted file mode 100644 index cb09761f3..000000000 --- a/Assets/Materials/PBR/Metal_Scratched/Metal_Scratched_Color.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:934e3f0e21b71cb534442f398b287f70158ba7cc3e11ab829f873ddce9cea7fb -size 4314757 diff --git a/Assets/Materials/PBR/Metal_Scratched/Metal_Scratched_Color.jpg.meta b/Assets/Materials/PBR/Metal_Scratched/Metal_Scratched_Color.jpg.meta deleted file mode 100644 index 7b34b1c8f..000000000 --- a/Assets/Materials/PBR/Metal_Scratched/Metal_Scratched_Color.jpg.meta +++ /dev/null @@ -1,104 +0,0 @@ -fileFormatVersion: 2 -guid: 5a9cee903a2d48718aaf6b224126f279 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 13 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - flipGreenChannel: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMipmapLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 4 - mipBias: 0 - wrapU: 0 - wrapV: 0 - wrapW: 0 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 1 - platformSettings: - - serializedVersion: 4 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - customData: - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spriteCustomMetadata: - entries: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Metal_Scratched/Metal_Scratched_MetallicSmoothness.png b/Assets/Materials/PBR/Metal_Scratched/Metal_Scratched_MetallicSmoothness.png deleted file mode 100644 index 7b1578437..000000000 --- a/Assets/Materials/PBR/Metal_Scratched/Metal_Scratched_MetallicSmoothness.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7ce0400bc23c44f54aa018b195472b99b7c7007bf93166017bfaf05d68bca38d -size 4647897 diff --git a/Assets/Materials/PBR/Metal_Scratched/Metal_Scratched_MetallicSmoothness.png.meta b/Assets/Materials/PBR/Metal_Scratched/Metal_Scratched_MetallicSmoothness.png.meta deleted file mode 100644 index b6b4c4b0e..000000000 --- a/Assets/Materials/PBR/Metal_Scratched/Metal_Scratched_MetallicSmoothness.png.meta +++ /dev/null @@ -1,104 +0,0 @@ -fileFormatVersion: 2 -guid: 8b24d7ea11c341408a146fa39f59b7b0 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 13 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - flipGreenChannel: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMipmapLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 4 - mipBias: 0 - wrapU: 0 - wrapV: 0 - wrapW: 0 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 1 - platformSettings: - - serializedVersion: 4 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - customData: - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spriteCustomMetadata: - entries: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Metal_Scratched/Metal_Scratched_Metalness.jpg b/Assets/Materials/PBR/Metal_Scratched/Metal_Scratched_Metalness.jpg deleted file mode 100644 index 687e06af5..000000000 --- a/Assets/Materials/PBR/Metal_Scratched/Metal_Scratched_Metalness.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7a4f1124670270e69c5fae2537f2493ab55d6f6264310fa344414eb75026cfde -size 564910 diff --git a/Assets/Materials/PBR/Metal_Scratched/Metal_Scratched_Metalness.jpg.meta b/Assets/Materials/PBR/Metal_Scratched/Metal_Scratched_Metalness.jpg.meta deleted file mode 100644 index 697296e8c..000000000 --- a/Assets/Materials/PBR/Metal_Scratched/Metal_Scratched_Metalness.jpg.meta +++ /dev/null @@ -1,104 +0,0 @@ -fileFormatVersion: 2 -guid: 2eace05436f24d15944266ed3b841f21 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 13 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - flipGreenChannel: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMipmapLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 4 - mipBias: 0 - wrapU: 0 - wrapV: 0 - wrapW: 0 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 1 - platformSettings: - - serializedVersion: 4 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - customData: - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spriteCustomMetadata: - entries: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Metal_Scratched/Metal_Scratched_NormalGL.jpg b/Assets/Materials/PBR/Metal_Scratched/Metal_Scratched_NormalGL.jpg deleted file mode 100644 index e772289b2..000000000 --- a/Assets/Materials/PBR/Metal_Scratched/Metal_Scratched_NormalGL.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:eb3d7953fb7867f7948b5d7a0dff6044f92a6bba56e6f4a48ad30a94c6096d98 -size 5038957 diff --git a/Assets/Materials/PBR/Metal_Scratched/Metal_Scratched_NormalGL.jpg.meta b/Assets/Materials/PBR/Metal_Scratched/Metal_Scratched_NormalGL.jpg.meta deleted file mode 100644 index 932d93b51..000000000 --- a/Assets/Materials/PBR/Metal_Scratched/Metal_Scratched_NormalGL.jpg.meta +++ /dev/null @@ -1,104 +0,0 @@ -fileFormatVersion: 2 -guid: 3a10044baac4438f9fc0930783eccdf7 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 13 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - flipGreenChannel: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMipmapLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 4 - mipBias: 0 - wrapU: 0 - wrapV: 0 - wrapW: 0 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 1 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 1 - platformSettings: - - serializedVersion: 4 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - customData: - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spriteCustomMetadata: - entries: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Metal_Scratched/Metal_Scratched_Roughness.jpg b/Assets/Materials/PBR/Metal_Scratched/Metal_Scratched_Roughness.jpg deleted file mode 100644 index 9dab37dc6..000000000 --- a/Assets/Materials/PBR/Metal_Scratched/Metal_Scratched_Roughness.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8fbd2281a995ab1185715dae4d7a657c10b338dfcb57a2f2245eac530d5bd7ed -size 2140434 diff --git a/Assets/Materials/PBR/Metal_Scratched/Metal_Scratched_Roughness.jpg.meta b/Assets/Materials/PBR/Metal_Scratched/Metal_Scratched_Roughness.jpg.meta deleted file mode 100644 index 393e3bd91..000000000 --- a/Assets/Materials/PBR/Metal_Scratched/Metal_Scratched_Roughness.jpg.meta +++ /dev/null @@ -1,104 +0,0 @@ -fileFormatVersion: 2 -guid: 986a2475c1e248d7be5208d88ee17a15 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 13 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - flipGreenChannel: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMipmapLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 4 - mipBias: 0 - wrapU: 0 - wrapV: 0 - wrapW: 0 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 1 - platformSettings: - - serializedVersion: 4 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - customData: - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spriteCustomMetadata: - entries: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Paint_Clean_Light.meta b/Assets/Materials/PBR/Paint_Clean_Light.meta deleted file mode 100644 index c72ff31ca..000000000 --- a/Assets/Materials/PBR/Paint_Clean_Light.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: c2497e59922c471b935a06c396acb73e -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Paint_Clean_Light/Paint_Clean_Light.mat b/Assets/Materials/PBR/Paint_Clean_Light/Paint_Clean_Light.mat deleted file mode 100644 index f76052e2d..000000000 --- a/Assets/Materials/PBR/Paint_Clean_Light/Paint_Clean_Light.mat +++ /dev/null @@ -1,86 +0,0 @@ -%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: Paint_Clean_Light - m_Shader: {fileID: 4800000, guid: ddff0b48b92c991499817d2a0f5d5059, type: 3} - m_ShaderKeywords: _MAINTEX _METALLICGLOSSMAP _NORMALMAP - m_LightmapFlags: 4 - m_EnableInstancingVariants: 0 - m_DoubleSidedGI: 0 - m_CustomRenderQueue: -1 - stringTagMap: {} - disabledShaderPasses: [] - m_SavedProperties: - serializedVersion: 3 - m_TexEnvs: - - _BumpMap: - m_Texture: {fileID: 2800000, guid: f548cd63b5734e04a284018fefc81b30, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailAlbedoMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailMask: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailNormalMap: - 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} - - _FadeTex: - m_Texture: {fileID: 2800000, guid: df0632a08c5f1a1498fa325c755dc459, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MainTex: - m_Texture: {fileID: 2800000, guid: 2c82a94e33b64fd481cbfeb7df9516bd, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MetallicGlossMap: - m_Texture: {fileID: 2800000, guid: ad8a50784ce04f5d9b3bab2115eeea34, type: 3} - 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} - - _ParallaxMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Floats: - - _BumpScale: 1 - - _Cutoff: 0.5 - - _DetailNormalMapScale: 1 - - _DstBlend: 0 - - _Fade: 0 - - _FadeEdge: 0.05 - - _FadeSharpness: 16 - - _GlossMapScale: 1 - - _Glossiness: 1 - - _GlossyReflections: 1 - - _Metallic: 1 - - _Mode: 0 - - _OcclusionStrength: 1 - - _Parallax: 0.02 - - _SmoothnessTextureChannel: 0 - - _SpecularHighlights: 1 - - _SrcBlend: 1 - - _UVSec: 0 - - _ZWrite: 1 - m_Colors: - - _Color: {r: 1, g: 1, b: 1, a: 1} - - _EdgeColor: {r: 3.0117648, g: 3.0117648, b: 11.984314, a: 1} - - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - m_BuildTextureStacks: [] diff --git a/Assets/Materials/PBR/Paint_Clean_Light/Paint_Clean_Light_Color.jpg b/Assets/Materials/PBR/Paint_Clean_Light/Paint_Clean_Light_Color.jpg deleted file mode 100644 index 222b441ba..000000000 --- a/Assets/Materials/PBR/Paint_Clean_Light/Paint_Clean_Light_Color.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9e966978debc85c05e1e4834e1ac8406d863f9267c396d1580ec2d94fdce9738 -size 638778 diff --git a/Assets/Materials/PBR/Paint_Clean_Light/Paint_Clean_Light_Color.jpg.meta b/Assets/Materials/PBR/Paint_Clean_Light/Paint_Clean_Light_Color.jpg.meta deleted file mode 100644 index 029f71505..000000000 --- a/Assets/Materials/PBR/Paint_Clean_Light/Paint_Clean_Light_Color.jpg.meta +++ /dev/null @@ -1,104 +0,0 @@ -fileFormatVersion: 2 -guid: 2c82a94e33b64fd481cbfeb7df9516bd -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 13 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - flipGreenChannel: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMipmapLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 4 - mipBias: 0 - wrapU: 0 - wrapV: 0 - wrapW: 0 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 1 - platformSettings: - - serializedVersion: 4 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - customData: - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spriteCustomMetadata: - entries: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Paint_Clean_Light/Paint_Clean_Light_MetallicSmoothness.png b/Assets/Materials/PBR/Paint_Clean_Light/Paint_Clean_Light_MetallicSmoothness.png deleted file mode 100644 index a61363526..000000000 --- a/Assets/Materials/PBR/Paint_Clean_Light/Paint_Clean_Light_MetallicSmoothness.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:412547b698a0968ba6f7c4f31e888bd88afb9f24e049f5811ca51c7490510998 -size 3692433 diff --git a/Assets/Materials/PBR/Paint_Clean_Light/Paint_Clean_Light_MetallicSmoothness.png.meta b/Assets/Materials/PBR/Paint_Clean_Light/Paint_Clean_Light_MetallicSmoothness.png.meta deleted file mode 100644 index 41ba9a3be..000000000 --- a/Assets/Materials/PBR/Paint_Clean_Light/Paint_Clean_Light_MetallicSmoothness.png.meta +++ /dev/null @@ -1,104 +0,0 @@ -fileFormatVersion: 2 -guid: ad8a50784ce04f5d9b3bab2115eeea34 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 13 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - flipGreenChannel: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMipmapLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 4 - mipBias: 0 - wrapU: 0 - wrapV: 0 - wrapW: 0 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 1 - platformSettings: - - serializedVersion: 4 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - customData: - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spriteCustomMetadata: - entries: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Paint_Clean_Light/Paint_Clean_Light_NormalGL.jpg b/Assets/Materials/PBR/Paint_Clean_Light/Paint_Clean_Light_NormalGL.jpg deleted file mode 100644 index 0c74319d3..000000000 --- a/Assets/Materials/PBR/Paint_Clean_Light/Paint_Clean_Light_NormalGL.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:70e36c645d2d6bc9ddc79b86d1275147c52947613fed8ed75dc6aec5d9282187 -size 3220864 diff --git a/Assets/Materials/PBR/Paint_Clean_Light/Paint_Clean_Light_NormalGL.jpg.meta b/Assets/Materials/PBR/Paint_Clean_Light/Paint_Clean_Light_NormalGL.jpg.meta deleted file mode 100644 index d0c0e745e..000000000 --- a/Assets/Materials/PBR/Paint_Clean_Light/Paint_Clean_Light_NormalGL.jpg.meta +++ /dev/null @@ -1,104 +0,0 @@ -fileFormatVersion: 2 -guid: f548cd63b5734e04a284018fefc81b30 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 13 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - flipGreenChannel: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMipmapLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 4 - mipBias: 0 - wrapU: 0 - wrapV: 0 - wrapW: 0 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 1 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 1 - platformSettings: - - serializedVersion: 4 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - customData: - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spriteCustomMetadata: - entries: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Paint_Clean_Light/Paint_Clean_Light_Roughness.jpg b/Assets/Materials/PBR/Paint_Clean_Light/Paint_Clean_Light_Roughness.jpg deleted file mode 100644 index 499f33718..000000000 --- a/Assets/Materials/PBR/Paint_Clean_Light/Paint_Clean_Light_Roughness.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:44a1a3eb43252db6c242cd3e777a2e41819e872058e032e3cf8285cc578f35bb -size 2011305 diff --git a/Assets/Materials/PBR/Paint_Clean_Light/Paint_Clean_Light_Roughness.jpg.meta b/Assets/Materials/PBR/Paint_Clean_Light/Paint_Clean_Light_Roughness.jpg.meta deleted file mode 100644 index 117171aad..000000000 --- a/Assets/Materials/PBR/Paint_Clean_Light/Paint_Clean_Light_Roughness.jpg.meta +++ /dev/null @@ -1,104 +0,0 @@ -fileFormatVersion: 2 -guid: 21721bf50f1f407d8e0f2b5e06bf4ef5 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 13 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - flipGreenChannel: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMipmapLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 4 - mipBias: 0 - wrapU: 0 - wrapV: 0 - wrapW: 0 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 1 - platformSettings: - - serializedVersion: 4 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - customData: - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spriteCustomMetadata: - entries: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Paint_Worn_Dark.meta b/Assets/Materials/PBR/Paint_Worn_Dark.meta deleted file mode 100644 index f6af35502..000000000 --- a/Assets/Materials/PBR/Paint_Worn_Dark.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 22c55f60ad784e7495f2ddbae1e2799e -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark.mat b/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark.mat deleted file mode 100644 index 11deee75d..000000000 --- a/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark.mat +++ /dev/null @@ -1,86 +0,0 @@ -%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: Paint_Worn_Dark - m_Shader: {fileID: 4800000, guid: ddff0b48b92c991499817d2a0f5d5059, type: 3} - m_ShaderKeywords: _MAINTEX _METALLICGLOSSMAP _NORMALMAP _OCCLUSIONMAP - m_LightmapFlags: 4 - m_EnableInstancingVariants: 0 - m_DoubleSidedGI: 0 - m_CustomRenderQueue: -1 - stringTagMap: {} - disabledShaderPasses: [] - m_SavedProperties: - serializedVersion: 3 - m_TexEnvs: - - _BumpMap: - m_Texture: {fileID: 2800000, guid: b37cce6dfe8a45d0a7ba4e9a844c68b9, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailAlbedoMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailMask: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailNormalMap: - 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} - - _FadeTex: - m_Texture: {fileID: 2800000, guid: df0632a08c5f1a1498fa325c755dc459, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MainTex: - m_Texture: {fileID: 2800000, guid: 8f9bc4377cc4451aae71a877219e700f, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MetallicGlossMap: - m_Texture: {fileID: 2800000, guid: b5158bc316ef42bead7fa70b7bc08a7a, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _OcclusionMap: - m_Texture: {fileID: 2800000, guid: e8713adbe3e74ac4a4f431581bb31a4b, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _ParallaxMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Floats: - - _BumpScale: 1 - - _Cutoff: 0.5 - - _DetailNormalMapScale: 1 - - _DstBlend: 0 - - _Fade: 0 - - _FadeEdge: 0.05 - - _FadeSharpness: 16 - - _GlossMapScale: 1 - - _Glossiness: 1 - - _GlossyReflections: 1 - - _Metallic: 1 - - _Mode: 0 - - _OcclusionStrength: 1 - - _Parallax: 0.02 - - _SmoothnessTextureChannel: 0 - - _SpecularHighlights: 1 - - _SrcBlend: 1 - - _UVSec: 0 - - _ZWrite: 1 - m_Colors: - - _Color: {r: 1, g: 1, b: 1, a: 1} - - _EdgeColor: {r: 3.0117648, g: 3.0117648, b: 11.984314, a: 1} - - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - m_BuildTextureStacks: [] diff --git a/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark.mat.meta b/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark.mat.meta deleted file mode 100644 index c70f30afd..000000000 --- a/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark.mat.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: e081b7d98e6d424fa42a6876a8e0bab3 -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 2100000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_AO.jpg b/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_AO.jpg deleted file mode 100644 index 7c4f50094..000000000 --- a/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_AO.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d2e4af5867078208c00332af23bded29a4ac325b040f5980c2730ff8e551bc9d -size 2924087 diff --git a/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_AO.jpg.meta b/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_AO.jpg.meta deleted file mode 100644 index e3c6ca27e..000000000 --- a/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_AO.jpg.meta +++ /dev/null @@ -1,104 +0,0 @@ -fileFormatVersion: 2 -guid: e8713adbe3e74ac4a4f431581bb31a4b -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 13 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - flipGreenChannel: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMipmapLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 4 - mipBias: 0 - wrapU: 0 - wrapV: 0 - wrapW: 0 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 1 - platformSettings: - - serializedVersion: 4 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - customData: - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spriteCustomMetadata: - entries: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_Color.jpg b/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_Color.jpg deleted file mode 100644 index de88b6108..000000000 --- a/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_Color.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c57d484d39db6704fbcf32184f73472e6a78cfc63027422426fa170d87bdfc4a -size 5177435 diff --git a/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_Color.jpg.meta b/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_Color.jpg.meta deleted file mode 100644 index 5cdcca076..000000000 --- a/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_Color.jpg.meta +++ /dev/null @@ -1,104 +0,0 @@ -fileFormatVersion: 2 -guid: 8f9bc4377cc4451aae71a877219e700f -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 13 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - flipGreenChannel: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMipmapLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 4 - mipBias: 0 - wrapU: 0 - wrapV: 0 - wrapW: 0 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 1 - platformSettings: - - serializedVersion: 4 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - customData: - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spriteCustomMetadata: - entries: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_MetallicSmoothness.png b/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_MetallicSmoothness.png deleted file mode 100644 index ca9d86708..000000000 --- a/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_MetallicSmoothness.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:98cc6442c3952acba81f86ae0210e9e0b171522dec1a80d9177eb942dd295d73 -size 5117887 diff --git a/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_MetallicSmoothness.png.meta b/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_MetallicSmoothness.png.meta deleted file mode 100644 index 28b873752..000000000 --- a/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_MetallicSmoothness.png.meta +++ /dev/null @@ -1,104 +0,0 @@ -fileFormatVersion: 2 -guid: b5158bc316ef42bead7fa70b7bc08a7a -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 13 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - flipGreenChannel: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMipmapLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 4 - mipBias: 0 - wrapU: 0 - wrapV: 0 - wrapW: 0 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 1 - platformSettings: - - serializedVersion: 4 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - customData: - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spriteCustomMetadata: - entries: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_Metalness.jpg b/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_Metalness.jpg deleted file mode 100644 index 90096ce14..000000000 --- a/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_Metalness.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f3cdb47576c1085bea1bd3e90d055c7f45b66bda53d3ad03f825e5dc9665b93f -size 1073864 diff --git a/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_Metalness.jpg.meta b/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_Metalness.jpg.meta deleted file mode 100644 index fb46b8a1a..000000000 --- a/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_Metalness.jpg.meta +++ /dev/null @@ -1,104 +0,0 @@ -fileFormatVersion: 2 -guid: c6d0917aab0d4442ad102a6088628f53 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 13 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - flipGreenChannel: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMipmapLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 4 - mipBias: 0 - wrapU: 0 - wrapV: 0 - wrapW: 0 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 1 - platformSettings: - - serializedVersion: 4 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - customData: - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spriteCustomMetadata: - entries: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_NormalGL.jpg b/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_NormalGL.jpg deleted file mode 100644 index 9c151b688..000000000 --- a/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_NormalGL.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:60e7d12d4eefed9f9c763b3095b6db35542ee00c7f076b72bb2718a3ccd649c9 -size 7526970 diff --git a/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_NormalGL.jpg.meta b/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_NormalGL.jpg.meta deleted file mode 100644 index bcfcf9af3..000000000 --- a/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_NormalGL.jpg.meta +++ /dev/null @@ -1,104 +0,0 @@ -fileFormatVersion: 2 -guid: b37cce6dfe8a45d0a7ba4e9a844c68b9 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 13 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - flipGreenChannel: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMipmapLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 4 - mipBias: 0 - wrapU: 0 - wrapV: 0 - wrapW: 0 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 1 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 1 - platformSettings: - - serializedVersion: 4 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - customData: - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spriteCustomMetadata: - entries: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_Roughness.jpg b/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_Roughness.jpg deleted file mode 100644 index 918bb48c5..000000000 --- a/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_Roughness.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:648bf332066975dad0fc618eda260571e8077a7d418587b8b55a68c7da797541 -size 2083327 diff --git a/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_Roughness.jpg.meta b/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_Roughness.jpg.meta deleted file mode 100644 index 3607f105d..000000000 --- a/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_Roughness.jpg.meta +++ /dev/null @@ -1,104 +0,0 @@ -fileFormatVersion: 2 -guid: 46fe06d220b044d1a6bb1a716c6e8705 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 13 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - flipGreenChannel: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMipmapLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 4 - mipBias: 0 - wrapU: 0 - wrapV: 0 - wrapW: 0 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 1 - platformSettings: - - serializedVersion: 4 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - customData: - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spriteCustomMetadata: - entries: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Paint_Worn_Light.meta b/Assets/Materials/PBR/Paint_Worn_Light.meta deleted file mode 100644 index 34d26b097..000000000 --- a/Assets/Materials/PBR/Paint_Worn_Light.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: b660a03d95714359ac68aa01a52064b9 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light.mat b/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light.mat deleted file mode 100644 index 9f6a4ff51..000000000 --- a/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light.mat +++ /dev/null @@ -1,86 +0,0 @@ -%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: Paint_Worn_Light - m_Shader: {fileID: 4800000, guid: ddff0b48b92c991499817d2a0f5d5059, type: 3} - m_ShaderKeywords: _MAINTEX _METALLICGLOSSMAP _NORMALMAP _OCCLUSIONMAP - m_LightmapFlags: 4 - m_EnableInstancingVariants: 0 - m_DoubleSidedGI: 0 - m_CustomRenderQueue: -1 - stringTagMap: {} - disabledShaderPasses: [] - m_SavedProperties: - serializedVersion: 3 - m_TexEnvs: - - _BumpMap: - m_Texture: {fileID: 2800000, guid: 4ce3c2cc69304068b4a2ddc833b748b9, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailAlbedoMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailMask: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailNormalMap: - 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} - - _FadeTex: - m_Texture: {fileID: 2800000, guid: df0632a08c5f1a1498fa325c755dc459, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MainTex: - m_Texture: {fileID: 2800000, guid: 73568a0c02bd4184bcb398c9e3dd7ab6, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MetallicGlossMap: - m_Texture: {fileID: 2800000, guid: d9cd336372c244e398532512e3f8f3be, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _OcclusionMap: - m_Texture: {fileID: 2800000, guid: 73e117729c3447e5aa0eb1a30fad7c75, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _ParallaxMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Floats: - - _BumpScale: 1 - - _Cutoff: 0.5 - - _DetailNormalMapScale: 1 - - _DstBlend: 0 - - _Fade: 0 - - _FadeEdge: 0.05 - - _FadeSharpness: 16 - - _GlossMapScale: 1 - - _Glossiness: 1 - - _GlossyReflections: 1 - - _Metallic: 1 - - _Mode: 0 - - _OcclusionStrength: 1 - - _Parallax: 0.02 - - _SmoothnessTextureChannel: 0 - - _SpecularHighlights: 1 - - _SrcBlend: 1 - - _UVSec: 0 - - _ZWrite: 1 - m_Colors: - - _Color: {r: 1, g: 1, b: 1, a: 1} - - _EdgeColor: {r: 3.0117648, g: 3.0117648, b: 11.984314, a: 1} - - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - m_BuildTextureStacks: [] diff --git a/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light.mat.meta b/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light.mat.meta deleted file mode 100644 index 1441ced17..000000000 --- a/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light.mat.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 5eb890ad19d44af98f2710f3af280e3c -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 2100000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_AO.jpg b/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_AO.jpg deleted file mode 100644 index a9989d282..000000000 --- a/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_AO.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e2560f1aa453ffd2f4374c9ba4d184e1c43456726d8971460062515acef83b76 -size 2764255 diff --git a/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_AO.jpg.meta b/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_AO.jpg.meta deleted file mode 100644 index be48781f6..000000000 --- a/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_AO.jpg.meta +++ /dev/null @@ -1,104 +0,0 @@ -fileFormatVersion: 2 -guid: 73e117729c3447e5aa0eb1a30fad7c75 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 13 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - flipGreenChannel: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMipmapLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 4 - mipBias: 0 - wrapU: 0 - wrapV: 0 - wrapW: 0 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 1 - platformSettings: - - serializedVersion: 4 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - customData: - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spriteCustomMetadata: - entries: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_Color.jpg b/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_Color.jpg deleted file mode 100644 index d05a21ab2..000000000 --- a/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_Color.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:401b7ee4394595110564bcb12a40c0b87ea50acfc3632b7e7237e2d0165d1ded -size 4364255 diff --git a/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_Color.jpg.meta b/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_Color.jpg.meta deleted file mode 100644 index cc5b0e17b..000000000 --- a/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_Color.jpg.meta +++ /dev/null @@ -1,104 +0,0 @@ -fileFormatVersion: 2 -guid: 73568a0c02bd4184bcb398c9e3dd7ab6 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 13 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - flipGreenChannel: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMipmapLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 4 - mipBias: 0 - wrapU: 0 - wrapV: 0 - wrapW: 0 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 1 - platformSettings: - - serializedVersion: 4 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - customData: - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spriteCustomMetadata: - entries: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_MetallicSmoothness.png b/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_MetallicSmoothness.png deleted file mode 100644 index 08375c3a3..000000000 --- a/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_MetallicSmoothness.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4c59489103f8a5ef438f0f74484cdf5af90b1ee2985a180d690772d1325816bf -size 6990606 diff --git a/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_MetallicSmoothness.png.meta b/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_MetallicSmoothness.png.meta deleted file mode 100644 index 13b040de5..000000000 --- a/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_MetallicSmoothness.png.meta +++ /dev/null @@ -1,104 +0,0 @@ -fileFormatVersion: 2 -guid: d9cd336372c244e398532512e3f8f3be -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 13 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - flipGreenChannel: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMipmapLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 4 - mipBias: 0 - wrapU: 0 - wrapV: 0 - wrapW: 0 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 1 - platformSettings: - - serializedVersion: 4 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - customData: - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spriteCustomMetadata: - entries: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_Metalness.jpg b/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_Metalness.jpg deleted file mode 100644 index 10a0cd502..000000000 --- a/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_Metalness.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8be2891eeff9e521ac8d672edb106830e878ee0b73852a5763c803a8088014f2 -size 2705735 diff --git a/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_Metalness.jpg.meta b/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_Metalness.jpg.meta deleted file mode 100644 index 402c2f3f3..000000000 --- a/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_Metalness.jpg.meta +++ /dev/null @@ -1,104 +0,0 @@ -fileFormatVersion: 2 -guid: 464aecd85593406aa2426215e07b988a -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 13 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - flipGreenChannel: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMipmapLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 4 - mipBias: 0 - wrapU: 0 - wrapV: 0 - wrapW: 0 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 1 - platformSettings: - - serializedVersion: 4 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - customData: - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spriteCustomMetadata: - entries: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_NormalGL.jpg b/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_NormalGL.jpg deleted file mode 100644 index 549164ad2..000000000 --- a/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_NormalGL.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f2ae51f315549a7d63c7f0290e9f6d35dfcd1bc42df422579ee407c30692599a -size 6857447 diff --git a/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_NormalGL.jpg.meta b/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_NormalGL.jpg.meta deleted file mode 100644 index a9aa1c988..000000000 --- a/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_NormalGL.jpg.meta +++ /dev/null @@ -1,104 +0,0 @@ -fileFormatVersion: 2 -guid: 4ce3c2cc69304068b4a2ddc833b748b9 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 13 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - flipGreenChannel: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMipmapLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 4 - mipBias: 0 - wrapU: 0 - wrapV: 0 - wrapW: 0 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 1 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 1 - platformSettings: - - serializedVersion: 4 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - customData: - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spriteCustomMetadata: - entries: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_Roughness.jpg b/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_Roughness.jpg deleted file mode 100644 index d0ab06978..000000000 --- a/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_Roughness.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1207c0c4716229b36290416e4af37ccaf5351a65c8d93237a7802a95f45dfbcf -size 1929057 diff --git a/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_Roughness.jpg.meta b/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_Roughness.jpg.meta deleted file mode 100644 index 2b1eeabdb..000000000 --- a/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_Roughness.jpg.meta +++ /dev/null @@ -1,104 +0,0 @@ -fileFormatVersion: 2 -guid: 58cb097056b5431e819ca45954ee3b47 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 13 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - flipGreenChannel: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMipmapLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 4 - mipBias: 0 - wrapU: 0 - wrapV: 0 - wrapW: 0 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 1 - platformSettings: - - serializedVersion: 4 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - customData: - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spriteCustomMetadata: - entries: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Plastic_Matte.meta b/Assets/Materials/PBR/Plastic_Matte.meta deleted file mode 100644 index 91fd17d97..000000000 --- a/Assets/Materials/PBR/Plastic_Matte.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 1126ae7b5bcb4d6b8403e31233638b8d -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Plastic_Matte/Plastic_Matte.mat b/Assets/Materials/PBR/Plastic_Matte/Plastic_Matte.mat deleted file mode 100644 index f5845363d..000000000 --- a/Assets/Materials/PBR/Plastic_Matte/Plastic_Matte.mat +++ /dev/null @@ -1,86 +0,0 @@ -%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: Plastic_Matte - m_Shader: {fileID: 4800000, guid: ddff0b48b92c991499817d2a0f5d5059, type: 3} - m_ShaderKeywords: _MAINTEX _METALLICGLOSSMAP _NORMALMAP - m_LightmapFlags: 4 - m_EnableInstancingVariants: 0 - m_DoubleSidedGI: 0 - m_CustomRenderQueue: -1 - stringTagMap: {} - disabledShaderPasses: [] - m_SavedProperties: - serializedVersion: 3 - m_TexEnvs: - - _BumpMap: - m_Texture: {fileID: 2800000, guid: d9e9439b6e9f43ed9c47015cafdcd5d3, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailAlbedoMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailMask: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailNormalMap: - 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} - - _FadeTex: - m_Texture: {fileID: 2800000, guid: df0632a08c5f1a1498fa325c755dc459, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MainTex: - m_Texture: {fileID: 2800000, guid: 053c9b821bf649bab9c8f7b234803809, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MetallicGlossMap: - m_Texture: {fileID: 2800000, guid: f405c1ca89914831a4366ac1e4d850ee, type: 3} - 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} - - _ParallaxMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Floats: - - _BumpScale: 1 - - _Cutoff: 0.5 - - _DetailNormalMapScale: 1 - - _DstBlend: 0 - - _Fade: 0 - - _FadeEdge: 0.05 - - _FadeSharpness: 16 - - _GlossMapScale: 1 - - _Glossiness: 1 - - _GlossyReflections: 1 - - _Metallic: 1 - - _Mode: 0 - - _OcclusionStrength: 1 - - _Parallax: 0.02 - - _SmoothnessTextureChannel: 0 - - _SpecularHighlights: 1 - - _SrcBlend: 1 - - _UVSec: 0 - - _ZWrite: 1 - m_Colors: - - _Color: {r: 1, g: 1, b: 1, a: 1} - - _EdgeColor: {r: 3.0117648, g: 3.0117648, b: 11.984314, a: 1} - - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - m_BuildTextureStacks: [] diff --git a/Assets/Materials/PBR/Plastic_Matte/Plastic_Matte.mat.meta b/Assets/Materials/PBR/Plastic_Matte/Plastic_Matte.mat.meta deleted file mode 100644 index f92b559c4..000000000 --- a/Assets/Materials/PBR/Plastic_Matte/Plastic_Matte.mat.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 636667df941046e79d2417c6b062d995 -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 2100000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Plastic_Matte/Plastic_Matte_Color.jpg b/Assets/Materials/PBR/Plastic_Matte/Plastic_Matte_Color.jpg deleted file mode 100644 index 00c2a444a..000000000 --- a/Assets/Materials/PBR/Plastic_Matte/Plastic_Matte_Color.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5cb3a446755c2f868957807195d1e51ff989384da7878e8c0d9f93f391a5b755 -size 905715 diff --git a/Assets/Materials/PBR/Plastic_Matte/Plastic_Matte_Color.jpg.meta b/Assets/Materials/PBR/Plastic_Matte/Plastic_Matte_Color.jpg.meta deleted file mode 100644 index e0947dee4..000000000 --- a/Assets/Materials/PBR/Plastic_Matte/Plastic_Matte_Color.jpg.meta +++ /dev/null @@ -1,104 +0,0 @@ -fileFormatVersion: 2 -guid: 053c9b821bf649bab9c8f7b234803809 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 13 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - flipGreenChannel: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMipmapLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 4 - mipBias: 0 - wrapU: 0 - wrapV: 0 - wrapW: 0 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 1 - platformSettings: - - serializedVersion: 4 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - customData: - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spriteCustomMetadata: - entries: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Plastic_Matte/Plastic_Matte_MetallicSmoothness.png b/Assets/Materials/PBR/Plastic_Matte/Plastic_Matte_MetallicSmoothness.png deleted file mode 100644 index 45e075a5b..000000000 --- a/Assets/Materials/PBR/Plastic_Matte/Plastic_Matte_MetallicSmoothness.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:811b05a5b78048c711f5129d14073bfa1983443553a2b75453f15e46ad6da998 -size 3782071 diff --git a/Assets/Materials/PBR/Plastic_Matte/Plastic_Matte_MetallicSmoothness.png.meta b/Assets/Materials/PBR/Plastic_Matte/Plastic_Matte_MetallicSmoothness.png.meta deleted file mode 100644 index c641103a4..000000000 --- a/Assets/Materials/PBR/Plastic_Matte/Plastic_Matte_MetallicSmoothness.png.meta +++ /dev/null @@ -1,104 +0,0 @@ -fileFormatVersion: 2 -guid: f405c1ca89914831a4366ac1e4d850ee -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 13 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - flipGreenChannel: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMipmapLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 4 - mipBias: 0 - wrapU: 0 - wrapV: 0 - wrapW: 0 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 1 - platformSettings: - - serializedVersion: 4 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - customData: - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spriteCustomMetadata: - entries: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Plastic_Matte/Plastic_Matte_NormalGL.jpg b/Assets/Materials/PBR/Plastic_Matte/Plastic_Matte_NormalGL.jpg deleted file mode 100644 index 12b6ad1ff..000000000 --- a/Assets/Materials/PBR/Plastic_Matte/Plastic_Matte_NormalGL.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e177082ed5027b4bb533e39b0556c7f3ca4701d6ffa3761910dff678d7f43d07 -size 9096346 diff --git a/Assets/Materials/PBR/Plastic_Matte/Plastic_Matte_NormalGL.jpg.meta b/Assets/Materials/PBR/Plastic_Matte/Plastic_Matte_NormalGL.jpg.meta deleted file mode 100644 index 357ce2800..000000000 --- a/Assets/Materials/PBR/Plastic_Matte/Plastic_Matte_NormalGL.jpg.meta +++ /dev/null @@ -1,104 +0,0 @@ -fileFormatVersion: 2 -guid: d9e9439b6e9f43ed9c47015cafdcd5d3 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 13 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - flipGreenChannel: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMipmapLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 4 - mipBias: 0 - wrapU: 0 - wrapV: 0 - wrapW: 0 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 1 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 1 - platformSettings: - - serializedVersion: 4 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - customData: - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spriteCustomMetadata: - entries: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Plastic_Matte/Plastic_Matte_Roughness.jpg b/Assets/Materials/PBR/Plastic_Matte/Plastic_Matte_Roughness.jpg deleted file mode 100644 index c1eb5f150..000000000 --- a/Assets/Materials/PBR/Plastic_Matte/Plastic_Matte_Roughness.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:629c695383835080794b90174ae19a422cb7234870752642afa81f36a28cd9e7 -size 2095946 diff --git a/Assets/Materials/PBR/Plastic_Matte/Plastic_Matte_Roughness.jpg.meta b/Assets/Materials/PBR/Plastic_Matte/Plastic_Matte_Roughness.jpg.meta deleted file mode 100644 index 575bf2428..000000000 --- a/Assets/Materials/PBR/Plastic_Matte/Plastic_Matte_Roughness.jpg.meta +++ /dev/null @@ -1,104 +0,0 @@ -fileFormatVersion: 2 -guid: 142ed10762d242a9a4ecf63ee0e38b71 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 13 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - flipGreenChannel: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMipmapLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 4 - mipBias: 0 - wrapU: 0 - wrapV: 0 - wrapW: 0 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 1 - platformSettings: - - serializedVersion: 4 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - customData: - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spriteCustomMetadata: - entries: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Plates_Panels.meta b/Assets/Materials/PBR/Plates_Panels.meta deleted file mode 100644 index 99eb09f70..000000000 --- a/Assets/Materials/PBR/Plates_Panels.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 086928e6583747e1b14c6767ced082b4 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Plates_Panels/Plates_Panels.mat b/Assets/Materials/PBR/Plates_Panels/Plates_Panels.mat deleted file mode 100644 index babe13ca0..000000000 --- a/Assets/Materials/PBR/Plates_Panels/Plates_Panels.mat +++ /dev/null @@ -1,86 +0,0 @@ -%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: Plates_Panels - m_Shader: {fileID: 4800000, guid: ddff0b48b92c991499817d2a0f5d5059, type: 3} - m_ShaderKeywords: _MAINTEX _METALLICGLOSSMAP _NORMALMAP - m_LightmapFlags: 4 - m_EnableInstancingVariants: 0 - m_DoubleSidedGI: 0 - m_CustomRenderQueue: -1 - stringTagMap: {} - disabledShaderPasses: [] - m_SavedProperties: - serializedVersion: 3 - m_TexEnvs: - - _BumpMap: - m_Texture: {fileID: 2800000, guid: 8bc10cfce8a64defaf9f67d156003f09, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailAlbedoMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailMask: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailNormalMap: - 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} - - _FadeTex: - m_Texture: {fileID: 2800000, guid: df0632a08c5f1a1498fa325c755dc459, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MainTex: - m_Texture: {fileID: 2800000, guid: 2195885db9e846999fd10aa7f5c629b1, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MetallicGlossMap: - m_Texture: {fileID: 2800000, guid: d91bff887b764847a484d0a9bedce9e9, type: 3} - 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} - - _ParallaxMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Floats: - - _BumpScale: 1 - - _Cutoff: 0.5 - - _DetailNormalMapScale: 1 - - _DstBlend: 0 - - _Fade: 0 - - _FadeEdge: 0.05 - - _FadeSharpness: 16 - - _GlossMapScale: 1 - - _Glossiness: 1 - - _GlossyReflections: 1 - - _Metallic: 1 - - _Mode: 0 - - _OcclusionStrength: 1 - - _Parallax: 0.02 - - _SmoothnessTextureChannel: 0 - - _SpecularHighlights: 1 - - _SrcBlend: 1 - - _UVSec: 0 - - _ZWrite: 1 - m_Colors: - - _Color: {r: 1, g: 1, b: 1, a: 1} - - _EdgeColor: {r: 3.0117648, g: 3.0117648, b: 11.984314, a: 1} - - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - m_BuildTextureStacks: [] diff --git a/Assets/Materials/PBR/Plates_Panels/Plates_Panels.mat.meta b/Assets/Materials/PBR/Plates_Panels/Plates_Panels.mat.meta deleted file mode 100644 index a8a703cf0..000000000 --- a/Assets/Materials/PBR/Plates_Panels/Plates_Panels.mat.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: c508beb10bbe4c7f88fc9a7c003e51d5 -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 2100000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Plates_Panels/Plates_Panels_Color.jpg b/Assets/Materials/PBR/Plates_Panels/Plates_Panels_Color.jpg deleted file mode 100644 index 9945f16ae..000000000 --- a/Assets/Materials/PBR/Plates_Panels/Plates_Panels_Color.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4e69514467f58898537ecc6b3c47e618537406a00b7eb24099d3835ca4ae4c9a -size 2132182 diff --git a/Assets/Materials/PBR/Plates_Panels/Plates_Panels_Color.jpg.meta b/Assets/Materials/PBR/Plates_Panels/Plates_Panels_Color.jpg.meta deleted file mode 100644 index 960e6e0e3..000000000 --- a/Assets/Materials/PBR/Plates_Panels/Plates_Panels_Color.jpg.meta +++ /dev/null @@ -1,104 +0,0 @@ -fileFormatVersion: 2 -guid: 2195885db9e846999fd10aa7f5c629b1 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 13 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - flipGreenChannel: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMipmapLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 4 - mipBias: 0 - wrapU: 0 - wrapV: 0 - wrapW: 0 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 1 - platformSettings: - - serializedVersion: 4 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - customData: - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spriteCustomMetadata: - entries: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Plates_Panels/Plates_Panels_MetallicSmoothness.png b/Assets/Materials/PBR/Plates_Panels/Plates_Panels_MetallicSmoothness.png deleted file mode 100644 index de028ea73..000000000 --- a/Assets/Materials/PBR/Plates_Panels/Plates_Panels_MetallicSmoothness.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6b5ea65058b4792f97c7f9affd89930342b2306ab5dbd21f930ef153d4f4acf1 -size 3414650 diff --git a/Assets/Materials/PBR/Plates_Panels/Plates_Panels_MetallicSmoothness.png.meta b/Assets/Materials/PBR/Plates_Panels/Plates_Panels_MetallicSmoothness.png.meta deleted file mode 100644 index 6b036cb95..000000000 --- a/Assets/Materials/PBR/Plates_Panels/Plates_Panels_MetallicSmoothness.png.meta +++ /dev/null @@ -1,104 +0,0 @@ -fileFormatVersion: 2 -guid: d91bff887b764847a484d0a9bedce9e9 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 13 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - flipGreenChannel: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMipmapLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 4 - mipBias: 0 - wrapU: 0 - wrapV: 0 - wrapW: 0 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 1 - platformSettings: - - serializedVersion: 4 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - customData: - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spriteCustomMetadata: - entries: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Plates_Panels/Plates_Panels_Metalness.jpg b/Assets/Materials/PBR/Plates_Panels/Plates_Panels_Metalness.jpg deleted file mode 100644 index 9edfab941..000000000 --- a/Assets/Materials/PBR/Plates_Panels/Plates_Panels_Metalness.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:736a312c106a791672e1115df51ba0a08be7927f6cfc4aff97fcfb60311e002f -size 171958 diff --git a/Assets/Materials/PBR/Plates_Panels/Plates_Panels_Metalness.jpg.meta b/Assets/Materials/PBR/Plates_Panels/Plates_Panels_Metalness.jpg.meta deleted file mode 100644 index 69399ee42..000000000 --- a/Assets/Materials/PBR/Plates_Panels/Plates_Panels_Metalness.jpg.meta +++ /dev/null @@ -1,104 +0,0 @@ -fileFormatVersion: 2 -guid: 5df39678e5734f51a29940f2f6a43dda -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 13 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - flipGreenChannel: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMipmapLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 4 - mipBias: 0 - wrapU: 0 - wrapV: 0 - wrapW: 0 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 1 - platformSettings: - - serializedVersion: 4 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - customData: - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spriteCustomMetadata: - entries: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Plates_Panels/Plates_Panels_NormalGL.jpg b/Assets/Materials/PBR/Plates_Panels/Plates_Panels_NormalGL.jpg deleted file mode 100644 index 127c7888d..000000000 --- a/Assets/Materials/PBR/Plates_Panels/Plates_Panels_NormalGL.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5f916040ca388073191224a515def08761a3e136a74f559feb5774ef50527d54 -size 3505435 diff --git a/Assets/Materials/PBR/Plates_Panels/Plates_Panels_NormalGL.jpg.meta b/Assets/Materials/PBR/Plates_Panels/Plates_Panels_NormalGL.jpg.meta deleted file mode 100644 index da4e2137e..000000000 --- a/Assets/Materials/PBR/Plates_Panels/Plates_Panels_NormalGL.jpg.meta +++ /dev/null @@ -1,104 +0,0 @@ -fileFormatVersion: 2 -guid: 8bc10cfce8a64defaf9f67d156003f09 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 13 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - flipGreenChannel: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMipmapLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 4 - mipBias: 0 - wrapU: 0 - wrapV: 0 - wrapW: 0 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 1 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 1 - platformSettings: - - serializedVersion: 4 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - customData: - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spriteCustomMetadata: - entries: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Plates_Panels/Plates_Panels_Roughness.jpg b/Assets/Materials/PBR/Plates_Panels/Plates_Panels_Roughness.jpg deleted file mode 100644 index cf7a6709b..000000000 --- a/Assets/Materials/PBR/Plates_Panels/Plates_Panels_Roughness.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f9fc8550cdb559c16cbd2d43196dcc271653e78c802519bc446684224048ff69 -size 1742286 diff --git a/Assets/Materials/PBR/Plates_Panels/Plates_Panels_Roughness.jpg.meta b/Assets/Materials/PBR/Plates_Panels/Plates_Panels_Roughness.jpg.meta deleted file mode 100644 index 9d51593f6..000000000 --- a/Assets/Materials/PBR/Plates_Panels/Plates_Panels_Roughness.jpg.meta +++ /dev/null @@ -1,104 +0,0 @@ -fileFormatVersion: 2 -guid: e2f6e4f21fd14d6eb65e100b4f012349 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 13 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - flipGreenChannel: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMipmapLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 4 - mipBias: 0 - wrapU: 0 - wrapV: 0 - wrapW: 0 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 1 - platformSettings: - - serializedVersion: 4 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - customData: - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spriteCustomMetadata: - entries: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Plates_Riveted.meta b/Assets/Materials/PBR/Plates_Riveted.meta deleted file mode 100644 index 870fc938a..000000000 --- a/Assets/Materials/PBR/Plates_Riveted.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 79fbea05234f4b53a53eab2f090d2005 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted.mat b/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted.mat deleted file mode 100644 index e8088be9b..000000000 --- a/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted.mat +++ /dev/null @@ -1,86 +0,0 @@ -%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: Plates_Riveted - m_Shader: {fileID: 4800000, guid: ddff0b48b92c991499817d2a0f5d5059, type: 3} - m_ShaderKeywords: _MAINTEX _METALLICGLOSSMAP _NORMALMAP - m_LightmapFlags: 4 - m_EnableInstancingVariants: 0 - m_DoubleSidedGI: 0 - m_CustomRenderQueue: -1 - stringTagMap: {} - disabledShaderPasses: [] - m_SavedProperties: - serializedVersion: 3 - m_TexEnvs: - - _BumpMap: - m_Texture: {fileID: 2800000, guid: 6fb688a276034675b895c2edeb1b538b, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailAlbedoMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailMask: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailNormalMap: - 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} - - _FadeTex: - m_Texture: {fileID: 2800000, guid: df0632a08c5f1a1498fa325c755dc459, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MainTex: - m_Texture: {fileID: 2800000, guid: f07bacf217654b269eecfabbcc651b2b, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MetallicGlossMap: - m_Texture: {fileID: 2800000, guid: 08b45a54ea8c4521b7c4e7b3974f0b42, type: 3} - 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} - - _ParallaxMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Floats: - - _BumpScale: 1 - - _Cutoff: 0.5 - - _DetailNormalMapScale: 1 - - _DstBlend: 0 - - _Fade: 0 - - _FadeEdge: 0.05 - - _FadeSharpness: 16 - - _GlossMapScale: 1 - - _Glossiness: 1 - - _GlossyReflections: 1 - - _Metallic: 1 - - _Mode: 0 - - _OcclusionStrength: 1 - - _Parallax: 0.02 - - _SmoothnessTextureChannel: 0 - - _SpecularHighlights: 1 - - _SrcBlend: 1 - - _UVSec: 0 - - _ZWrite: 1 - m_Colors: - - _Color: {r: 1, g: 1, b: 1, a: 1} - - _EdgeColor: {r: 3.0117648, g: 3.0117648, b: 11.984314, a: 1} - - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - m_BuildTextureStacks: [] diff --git a/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted.mat.meta b/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted.mat.meta deleted file mode 100644 index 62c10b5e6..000000000 --- a/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted.mat.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 538d82fdc2de48f4bcf4e93b17407f90 -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 2100000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted_Color.jpg b/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted_Color.jpg deleted file mode 100644 index fe22d7428..000000000 --- a/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted_Color.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5a72ee2d4e5e6c3d4154e9244ad57f7c6b644b40b356db162c9f2b01e80547eb -size 1602784 diff --git a/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted_Color.jpg.meta b/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted_Color.jpg.meta deleted file mode 100644 index dc74b1c54..000000000 --- a/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted_Color.jpg.meta +++ /dev/null @@ -1,104 +0,0 @@ -fileFormatVersion: 2 -guid: f07bacf217654b269eecfabbcc651b2b -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 13 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - flipGreenChannel: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMipmapLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 4 - mipBias: 0 - wrapU: 0 - wrapV: 0 - wrapW: 0 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 1 - platformSettings: - - serializedVersion: 4 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - customData: - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spriteCustomMetadata: - entries: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted_MetallicSmoothness.png b/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted_MetallicSmoothness.png deleted file mode 100644 index 527fe9f5f..000000000 --- a/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted_MetallicSmoothness.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d678e8bff66b2d3bc703c5d355c47644f135544ac33afd517f1a542195b7e43d -size 5021835 diff --git a/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted_MetallicSmoothness.png.meta b/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted_MetallicSmoothness.png.meta deleted file mode 100644 index 778892894..000000000 --- a/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted_MetallicSmoothness.png.meta +++ /dev/null @@ -1,104 +0,0 @@ -fileFormatVersion: 2 -guid: 08b45a54ea8c4521b7c4e7b3974f0b42 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 13 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - flipGreenChannel: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMipmapLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 4 - mipBias: 0 - wrapU: 0 - wrapV: 0 - wrapW: 0 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 1 - platformSettings: - - serializedVersion: 4 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - customData: - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spriteCustomMetadata: - entries: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted_Metalness.jpg b/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted_Metalness.jpg deleted file mode 100644 index 05c05f99a..000000000 --- a/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted_Metalness.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:212258a43acddd1cb67203b3b263721022ae5f22bbf2213842a608fb09dc2b2f -size 1396144 diff --git a/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted_Metalness.jpg.meta b/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted_Metalness.jpg.meta deleted file mode 100644 index 86f483ff4..000000000 --- a/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted_Metalness.jpg.meta +++ /dev/null @@ -1,104 +0,0 @@ -fileFormatVersion: 2 -guid: 24e3f6b76da9420592e2f21931defae7 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 13 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - flipGreenChannel: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMipmapLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 4 - mipBias: 0 - wrapU: 0 - wrapV: 0 - wrapW: 0 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 1 - platformSettings: - - serializedVersion: 4 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - customData: - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spriteCustomMetadata: - entries: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted_NormalGL.jpg b/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted_NormalGL.jpg deleted file mode 100644 index 4c272122c..000000000 --- a/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted_NormalGL.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e49f90c003cf728de4892eec7d71f08abec1b2f9cb4780c875d005cb313498ac -size 3616644 diff --git a/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted_NormalGL.jpg.meta b/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted_NormalGL.jpg.meta deleted file mode 100644 index aa8d94dbe..000000000 --- a/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted_NormalGL.jpg.meta +++ /dev/null @@ -1,104 +0,0 @@ -fileFormatVersion: 2 -guid: 6fb688a276034675b895c2edeb1b538b -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 13 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - flipGreenChannel: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMipmapLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 4 - mipBias: 0 - wrapU: 0 - wrapV: 0 - wrapW: 0 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 1 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 1 - platformSettings: - - serializedVersion: 4 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - customData: - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spriteCustomMetadata: - entries: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted_Roughness.jpg b/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted_Roughness.jpg deleted file mode 100644 index b96f7460a..000000000 --- a/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted_Roughness.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d48b683b55fd5e89c91a0c4bfde3a539fc892abc958387045e7d0786fe5c1fbd -size 1889081 diff --git a/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted_Roughness.jpg.meta b/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted_Roughness.jpg.meta deleted file mode 100644 index 232a09cf3..000000000 --- a/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted_Roughness.jpg.meta +++ /dev/null @@ -1,104 +0,0 @@ -fileFormatVersion: 2 -guid: 7b50b58679684fc8991f112974a62120 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 13 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - flipGreenChannel: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMipmapLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 4 - mipBias: 0 - wrapU: 0 - wrapV: 0 - wrapW: 0 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 1 - platformSettings: - - serializedVersion: 4 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - customData: - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spriteCustomMetadata: - entries: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Rubber.meta b/Assets/Materials/PBR/Rubber.meta deleted file mode 100644 index f4d39fafb..000000000 --- a/Assets/Materials/PBR/Rubber.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 180d9a65c5784b618970824077421002 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Rubber/Rubber.mat.meta b/Assets/Materials/PBR/Rubber/Rubber.mat.meta deleted file mode 100644 index 989c2cd22..000000000 --- a/Assets/Materials/PBR/Rubber/Rubber.mat.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 257d49e9af154d6c9b5ea50a288db1fa -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 2100000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Rubber/Rubber_Color.jpg b/Assets/Materials/PBR/Rubber/Rubber_Color.jpg deleted file mode 100644 index 3a0e09062..000000000 --- a/Assets/Materials/PBR/Rubber/Rubber_Color.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d712c25987d3e6f40e3f37fae1ce1a4a4155d5e27cff64dadf2bbe140979dd98 -size 4479634 diff --git a/Assets/Materials/PBR/Rubber/Rubber_Color.jpg.meta b/Assets/Materials/PBR/Rubber/Rubber_Color.jpg.meta deleted file mode 100644 index ff443d7b4..000000000 --- a/Assets/Materials/PBR/Rubber/Rubber_Color.jpg.meta +++ /dev/null @@ -1,104 +0,0 @@ -fileFormatVersion: 2 -guid: 83e6c1768e014acfb494fbf007c40c80 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 13 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - flipGreenChannel: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMipmapLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 4 - mipBias: 0 - wrapU: 0 - wrapV: 0 - wrapW: 0 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 1 - platformSettings: - - serializedVersion: 4 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - customData: - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spriteCustomMetadata: - entries: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Rubber/Rubber_MetallicSmoothness.png b/Assets/Materials/PBR/Rubber/Rubber_MetallicSmoothness.png deleted file mode 100644 index d194ddc8f..000000000 --- a/Assets/Materials/PBR/Rubber/Rubber_MetallicSmoothness.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3a5d2c567edceeeec37de50166d325a0b3d29bc6cd90ad891635bf4cf8334376 -size 5044494 diff --git a/Assets/Materials/PBR/Rubber/Rubber_MetallicSmoothness.png.meta b/Assets/Materials/PBR/Rubber/Rubber_MetallicSmoothness.png.meta deleted file mode 100644 index fe4234492..000000000 --- a/Assets/Materials/PBR/Rubber/Rubber_MetallicSmoothness.png.meta +++ /dev/null @@ -1,104 +0,0 @@ -fileFormatVersion: 2 -guid: f1d4409638e4452cb1412503ed8526de -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 13 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - flipGreenChannel: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMipmapLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 4 - mipBias: 0 - wrapU: 0 - wrapV: 0 - wrapW: 0 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 1 - platformSettings: - - serializedVersion: 4 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - customData: - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spriteCustomMetadata: - entries: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Rubber/Rubber_NormalGL.jpg b/Assets/Materials/PBR/Rubber/Rubber_NormalGL.jpg deleted file mode 100644 index 461b856ff..000000000 --- a/Assets/Materials/PBR/Rubber/Rubber_NormalGL.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:61bf1b38eae723913275a1de5eb08d4ac543f11e28f4ac6f596a0644169010fc -size 9238212 diff --git a/Assets/Materials/PBR/Rubber/Rubber_NormalGL.jpg.meta b/Assets/Materials/PBR/Rubber/Rubber_NormalGL.jpg.meta deleted file mode 100644 index 16144739a..000000000 --- a/Assets/Materials/PBR/Rubber/Rubber_NormalGL.jpg.meta +++ /dev/null @@ -1,104 +0,0 @@ -fileFormatVersion: 2 -guid: 42826f488ae243178be306ada5ee9f41 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 13 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - flipGreenChannel: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMipmapLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 4 - mipBias: 0 - wrapU: 0 - wrapV: 0 - wrapW: 0 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 1 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 1 - platformSettings: - - serializedVersion: 4 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - customData: - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spriteCustomMetadata: - entries: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Rubber/Rubber_Roughness.jpg b/Assets/Materials/PBR/Rubber/Rubber_Roughness.jpg deleted file mode 100644 index 7c59cbb40..000000000 --- a/Assets/Materials/PBR/Rubber/Rubber_Roughness.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:dc137f95179a4ae42d67819750d78c3fe878d438b789cf96b33947618305a275 -size 3042709 diff --git a/Assets/Materials/PBR/Rubber/Rubber_Roughness.jpg.meta b/Assets/Materials/PBR/Rubber/Rubber_Roughness.jpg.meta deleted file mode 100644 index feca8c0c2..000000000 --- a/Assets/Materials/PBR/Rubber/Rubber_Roughness.jpg.meta +++ /dev/null @@ -1,104 +0,0 @@ -fileFormatVersion: 2 -guid: 834b5a5e1e1a49559f9fdeffd947e0a0 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 13 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - flipGreenChannel: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMipmapLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 4 - mipBias: 0 - wrapU: 0 - wrapV: 0 - wrapW: 0 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 1 - platformSettings: - - serializedVersion: 4 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - customData: - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spriteCustomMetadata: - entries: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/SOURCES.md b/Assets/Materials/PBR/SOURCES.md deleted file mode 100644 index baebd4022..000000000 --- a/Assets/Materials/PBR/SOURCES.md +++ /dev/null @@ -1,22 +0,0 @@ -# PBR material sources - -All texture sets are from ambientCG (https://ambientcg.com), licensed CC0 1.0 Universal (public domain, https://creativecommons.org/publicdomain/zero/1.0/). 2K-JPG downloads; displacement and NormalDX dropped; NormalGL kept (OpenGL convention, used by Blender and Unity). - -| Material | ambientCG id | URL | Metallic source | -|---|---|---|---| -| Paint_Clean_Light | Plastic010 | https://ambientcg.com/view?id=Plastic010 | none in set: constant 0 | -| Paint_Worn_Light | PaintedMetal012 | https://ambientcg.com/view?id=PaintedMetal012 | ambientCG Metalness map | -| Paint_Worn_Dark | PaintedMetal007 | https://ambientcg.com/view?id=PaintedMetal007 | ambientCG Metalness map | -| Steel_Brushed | Metal009 | https://ambientcg.com/view?id=Metal009 | ambientCG Metalness map | -| Metal_Scratched | Metal002 | https://ambientcg.com/view?id=Metal002 | ambientCG Metalness map | -| Gunmetal_Dark | Metal030 | https://ambientcg.com/view?id=Metal030 | ambientCG Metalness map | -| Plates_Riveted | MetalPlates002 | https://ambientcg.com/view?id=MetalPlates002 | ambientCG Metalness map | -| Plates_Panels | MetalPlates006 | https://ambientcg.com/view?id=MetalPlates006 | ambientCG Metalness map | -| Tread_Diamond | DiamondPlate001 | https://ambientcg.com/view?id=DiamondPlate001 | ambientCG Metalness map | -| Rubber | Rubber001 | https://ambientcg.com/view?id=Rubber001 | none in set: constant 0 | -| Plastic_Matte | Plastic004 | https://ambientcg.com/view?id=Plastic004 | none in set: constant 0 | -| Carbon_Fibre | Fabric004 | https://ambientcg.com/view?id=Fabric004 | set map is all 1.0; dielectric, so constant 0 | - -Files per material: `_Color`, `_Roughness`, `_NormalGL`, `_Metalness` and `_AO` (where the set has them), plus `_MetallicSmoothness.png` generated here for Unity (Metallic in R, Smoothness = 1 - Roughness in A). AO exists only for Paint_Worn_Light and Paint_Worn_Dark. - -Blender library: `Asset Sources/PBR Materials.blend` (catalog Aetheria/PBR, images linked by relative path to this folder). Unity materials use Aetheria/GlowFade. diff --git a/Assets/Materials/PBR/Steel_Brushed.meta b/Assets/Materials/PBR/Steel_Brushed.meta deleted file mode 100644 index 0a76b67a2..000000000 --- a/Assets/Materials/PBR/Steel_Brushed.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 76edddc4bbd74a8d80e7cc29729b334e -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed.mat b/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed.mat deleted file mode 100644 index 7147c9aa2..000000000 --- a/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed.mat +++ /dev/null @@ -1,86 +0,0 @@ -%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: Steel_Brushed - m_Shader: {fileID: 4800000, guid: ddff0b48b92c991499817d2a0f5d5059, type: 3} - m_ShaderKeywords: _MAINTEX _METALLICGLOSSMAP _NORMALMAP - m_LightmapFlags: 4 - m_EnableInstancingVariants: 0 - m_DoubleSidedGI: 0 - m_CustomRenderQueue: -1 - stringTagMap: {} - disabledShaderPasses: [] - m_SavedProperties: - serializedVersion: 3 - m_TexEnvs: - - _BumpMap: - m_Texture: {fileID: 2800000, guid: c3ef09438e3e46d18a4c267810aeb285, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailAlbedoMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailMask: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailNormalMap: - 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} - - _FadeTex: - m_Texture: {fileID: 2800000, guid: df0632a08c5f1a1498fa325c755dc459, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MainTex: - m_Texture: {fileID: 2800000, guid: f70b6df0395b4752b4ec80cb7bfd8f42, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MetallicGlossMap: - m_Texture: {fileID: 2800000, guid: 40f5e915d2734d43bc01f984772e9d29, type: 3} - 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} - - _ParallaxMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Floats: - - _BumpScale: 1 - - _Cutoff: 0.5 - - _DetailNormalMapScale: 1 - - _DstBlend: 0 - - _Fade: 0 - - _FadeEdge: 0.05 - - _FadeSharpness: 16 - - _GlossMapScale: 1 - - _Glossiness: 1 - - _GlossyReflections: 1 - - _Metallic: 1 - - _Mode: 0 - - _OcclusionStrength: 1 - - _Parallax: 0.02 - - _SmoothnessTextureChannel: 0 - - _SpecularHighlights: 1 - - _SrcBlend: 1 - - _UVSec: 0 - - _ZWrite: 1 - m_Colors: - - _Color: {r: 1, g: 1, b: 1, a: 1} - - _EdgeColor: {r: 3.0117648, g: 3.0117648, b: 11.984314, a: 1} - - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - m_BuildTextureStacks: [] diff --git a/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed.mat.meta b/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed.mat.meta deleted file mode 100644 index 6a17f81b3..000000000 --- a/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed.mat.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 65c607f056d64708bb493dd31b39e79e -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 2100000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed_Color.jpg b/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed_Color.jpg deleted file mode 100644 index c3406774a..000000000 --- a/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed_Color.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:209d3bb050be9f58c5af179d9712fa7799567a4cd50afd338d37674bdcff765b -size 2439272 diff --git a/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed_Color.jpg.meta b/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed_Color.jpg.meta deleted file mode 100644 index d6973f061..000000000 --- a/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed_Color.jpg.meta +++ /dev/null @@ -1,104 +0,0 @@ -fileFormatVersion: 2 -guid: f70b6df0395b4752b4ec80cb7bfd8f42 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 13 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - flipGreenChannel: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMipmapLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 4 - mipBias: 0 - wrapU: 0 - wrapV: 0 - wrapW: 0 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 1 - platformSettings: - - serializedVersion: 4 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - customData: - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spriteCustomMetadata: - entries: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed_MetallicSmoothness.png b/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed_MetallicSmoothness.png deleted file mode 100644 index 8142b06f2..000000000 --- a/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed_MetallicSmoothness.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f2b84e6acb67eb71fb263546ba5fe2ddd5f6e00517addb3c96c0f226becab3bb -size 3309438 diff --git a/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed_MetallicSmoothness.png.meta b/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed_MetallicSmoothness.png.meta deleted file mode 100644 index 130146909..000000000 --- a/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed_MetallicSmoothness.png.meta +++ /dev/null @@ -1,104 +0,0 @@ -fileFormatVersion: 2 -guid: 40f5e915d2734d43bc01f984772e9d29 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 13 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - flipGreenChannel: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMipmapLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 4 - mipBias: 0 - wrapU: 0 - wrapV: 0 - wrapW: 0 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 1 - platformSettings: - - serializedVersion: 4 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - customData: - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spriteCustomMetadata: - entries: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed_Metalness.jpg b/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed_Metalness.jpg deleted file mode 100644 index afd0fe3a6..000000000 --- a/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed_Metalness.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b65d6b9091747bd81ee58adedcb6209d8ee21b2bde9298d7216989ada85ef622 -size 16545 diff --git a/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed_Metalness.jpg.meta b/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed_Metalness.jpg.meta deleted file mode 100644 index 1aa819912..000000000 --- a/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed_Metalness.jpg.meta +++ /dev/null @@ -1,104 +0,0 @@ -fileFormatVersion: 2 -guid: 415d2498454d4d419948b2aa11eac78c -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 13 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - flipGreenChannel: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMipmapLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 4 - mipBias: 0 - wrapU: 0 - wrapV: 0 - wrapW: 0 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 1 - platformSettings: - - serializedVersion: 4 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - customData: - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spriteCustomMetadata: - entries: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed_NormalGL.jpg b/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed_NormalGL.jpg deleted file mode 100644 index 2c9942542..000000000 --- a/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed_NormalGL.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8773d9e97a4b057ced3e538d8ecc6069d27c8948191d61daf79b9ad93d93e3b3 -size 4120356 diff --git a/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed_NormalGL.jpg.meta b/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed_NormalGL.jpg.meta deleted file mode 100644 index e223398fa..000000000 --- a/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed_NormalGL.jpg.meta +++ /dev/null @@ -1,104 +0,0 @@ -fileFormatVersion: 2 -guid: c3ef09438e3e46d18a4c267810aeb285 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 13 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - flipGreenChannel: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMipmapLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 4 - mipBias: 0 - wrapU: 0 - wrapV: 0 - wrapW: 0 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 1 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 1 - platformSettings: - - serializedVersion: 4 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - customData: - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spriteCustomMetadata: - entries: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed_Roughness.jpg b/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed_Roughness.jpg deleted file mode 100644 index a1d7edd1f..000000000 --- a/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed_Roughness.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e802f013b93cb1bd4b55cd91f02a1863233475a7f8bd0e6755cfaa447a729674 -size 1891607 diff --git a/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed_Roughness.jpg.meta b/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed_Roughness.jpg.meta deleted file mode 100644 index 726ff5549..000000000 --- a/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed_Roughness.jpg.meta +++ /dev/null @@ -1,104 +0,0 @@ -fileFormatVersion: 2 -guid: 158c7794c28740d0a16fa2dc22e93d8c -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 13 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - flipGreenChannel: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMipmapLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 4 - mipBias: 0 - wrapU: 0 - wrapV: 0 - wrapW: 0 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 1 - platformSettings: - - serializedVersion: 4 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - customData: - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spriteCustomMetadata: - entries: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Tread_Diamond.meta b/Assets/Materials/PBR/Tread_Diamond.meta deleted file mode 100644 index 6a3445907..000000000 --- a/Assets/Materials/PBR/Tread_Diamond.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 78b78bf7d2f84a8d85daaf75d21fa56f -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond.mat b/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond.mat deleted file mode 100644 index 5b9542d0f..000000000 --- a/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond.mat +++ /dev/null @@ -1,86 +0,0 @@ -%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: Tread_Diamond - m_Shader: {fileID: 4800000, guid: ddff0b48b92c991499817d2a0f5d5059, type: 3} - m_ShaderKeywords: _MAINTEX _METALLICGLOSSMAP _NORMALMAP - m_LightmapFlags: 4 - m_EnableInstancingVariants: 0 - m_DoubleSidedGI: 0 - m_CustomRenderQueue: -1 - stringTagMap: {} - disabledShaderPasses: [] - m_SavedProperties: - serializedVersion: 3 - m_TexEnvs: - - _BumpMap: - m_Texture: {fileID: 2800000, guid: 043636050ee1492697e5bebb7603bf12, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailAlbedoMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailMask: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailNormalMap: - 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} - - _FadeTex: - m_Texture: {fileID: 2800000, guid: df0632a08c5f1a1498fa325c755dc459, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MainTex: - m_Texture: {fileID: 2800000, guid: f04f0c584e824d81b7d7a91b969efef8, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MetallicGlossMap: - m_Texture: {fileID: 2800000, guid: 28456bc0a3c045e394e0937b6fe0231c, type: 3} - 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} - - _ParallaxMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Floats: - - _BumpScale: 1 - - _Cutoff: 0.5 - - _DetailNormalMapScale: 1 - - _DstBlend: 0 - - _Fade: 0 - - _FadeEdge: 0.05 - - _FadeSharpness: 16 - - _GlossMapScale: 1 - - _Glossiness: 1 - - _GlossyReflections: 1 - - _Metallic: 1 - - _Mode: 0 - - _OcclusionStrength: 1 - - _Parallax: 0.02 - - _SmoothnessTextureChannel: 0 - - _SpecularHighlights: 1 - - _SrcBlend: 1 - - _UVSec: 0 - - _ZWrite: 1 - m_Colors: - - _Color: {r: 1, g: 1, b: 1, a: 1} - - _EdgeColor: {r: 3.0117648, g: 3.0117648, b: 11.984314, a: 1} - - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - m_BuildTextureStacks: [] diff --git a/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond.mat.meta b/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond.mat.meta deleted file mode 100644 index dd3e8ee22..000000000 --- a/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond.mat.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: bd8a08731d8c4a4d8961c92fe318f1bb -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 2100000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond_Color.jpg b/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond_Color.jpg deleted file mode 100644 index c4aae91a2..000000000 --- a/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond_Color.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0a1de0119ef8592c3054949b6a9608a5a814156f661ed54541b390feb6fb87cd -size 2675454 diff --git a/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond_Color.jpg.meta b/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond_Color.jpg.meta deleted file mode 100644 index f02278e36..000000000 --- a/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond_Color.jpg.meta +++ /dev/null @@ -1,104 +0,0 @@ -fileFormatVersion: 2 -guid: f04f0c584e824d81b7d7a91b969efef8 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 13 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - flipGreenChannel: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMipmapLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 4 - mipBias: 0 - wrapU: 0 - wrapV: 0 - wrapW: 0 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 1 - platformSettings: - - serializedVersion: 4 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - customData: - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spriteCustomMetadata: - entries: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond_MetallicSmoothness.png b/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond_MetallicSmoothness.png deleted file mode 100644 index 8c48d3028..000000000 --- a/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond_MetallicSmoothness.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b6131476bdbc8b6e910a5537a0aaadc977584f22c2a76d97f4cab4aa2b2b7ec0 -size 7151369 diff --git a/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond_MetallicSmoothness.png.meta b/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond_MetallicSmoothness.png.meta deleted file mode 100644 index 8804c2d58..000000000 --- a/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond_MetallicSmoothness.png.meta +++ /dev/null @@ -1,104 +0,0 @@ -fileFormatVersion: 2 -guid: 28456bc0a3c045e394e0937b6fe0231c -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 13 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - flipGreenChannel: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMipmapLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 4 - mipBias: 0 - wrapU: 0 - wrapV: 0 - wrapW: 0 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 1 - platformSettings: - - serializedVersion: 4 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - customData: - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spriteCustomMetadata: - entries: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond_Metalness.jpg b/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond_Metalness.jpg deleted file mode 100644 index d65027465..000000000 --- a/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond_Metalness.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6925202668aae7828b0a4765ca8854c539d94c4cd0f945b5195b5576272cdc7a -size 2420905 diff --git a/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond_Metalness.jpg.meta b/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond_Metalness.jpg.meta deleted file mode 100644 index c786edbd3..000000000 --- a/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond_Metalness.jpg.meta +++ /dev/null @@ -1,104 +0,0 @@ -fileFormatVersion: 2 -guid: 5086225cf1bf485597fe191f1b9ca912 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 13 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - flipGreenChannel: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMipmapLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 4 - mipBias: 0 - wrapU: 0 - wrapV: 0 - wrapW: 0 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 1 - platformSettings: - - serializedVersion: 4 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - customData: - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spriteCustomMetadata: - entries: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond_NormalGL.jpg b/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond_NormalGL.jpg deleted file mode 100644 index 7411d45d0..000000000 --- a/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond_NormalGL.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:317627265f2587cdfb00e06ea80415333b0ff2597321c79a77c2fd55448e5ec5 -size 7454546 diff --git a/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond_NormalGL.jpg.meta b/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond_NormalGL.jpg.meta deleted file mode 100644 index 747097254..000000000 --- a/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond_NormalGL.jpg.meta +++ /dev/null @@ -1,104 +0,0 @@ -fileFormatVersion: 2 -guid: 043636050ee1492697e5bebb7603bf12 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 13 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - flipGreenChannel: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMipmapLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 4 - mipBias: 0 - wrapU: 0 - wrapV: 0 - wrapW: 0 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 1 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 1 - platformSettings: - - serializedVersion: 4 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - customData: - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spriteCustomMetadata: - entries: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond_Roughness.jpg b/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond_Roughness.jpg deleted file mode 100644 index 2a2b7c7f8..000000000 --- a/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond_Roughness.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6aa2c8bd6044829215771cb1c3d82fcd3845565ff1a9416f4a10403dc2dfbc1b -size 2395648 diff --git a/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond_Roughness.jpg.meta b/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond_Roughness.jpg.meta deleted file mode 100644 index cc15cc441..000000000 --- a/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond_Roughness.jpg.meta +++ /dev/null @@ -1,104 +0,0 @@ -fileFormatVersion: 2 -guid: 1d942e92edc64885ae82ceb88af83104 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 13 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - flipGreenChannel: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMipmapLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 4 - mipBias: 0 - wrapU: 0 - wrapV: 0 - wrapW: 0 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 1 - platformSettings: - - serializedVersion: 4 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - customData: - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spriteCustomMetadata: - entries: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Materials/Particles/Dithered Particle Trail AetherDrive.mat b/Assets/Materials/Particles/Dithered Particle Trail AetherDrive.mat new file mode 100644 index 000000000..d4224d262 --- /dev/null +++ b/Assets/Materials/Particles/Dithered Particle Trail AetherDrive.mat @@ -0,0 +1,78 @@ +%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: Dithered Particle Trail AetherDrive + m_Shader: {fileID: 4800000, guid: 46776b9fa35a437448f683f31b04d68d, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + 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: 2800000, guid: 1d6eba2a167939a468c00fda35723dd0, type: 3} + m_Scale: {x: 0, y: 1} + m_Offset: {x: 0.5, 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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1.216786, g: 1.216786, b: 1.216786, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/Materials/Particles/Dithered Particle Trail AetherDrive.mat.meta b/Assets/Materials/Particles/Dithered Particle Trail AetherDrive.mat.meta new file mode 100644 index 000000000..292027b73 --- /dev/null +++ b/Assets/Materials/Particles/Dithered Particle Trail AetherDrive.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 555ada90c0f01654a9387483bd95a688 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/UI/MapAsteroid.mat b/Assets/Materials/UI/MapAsteroid.mat deleted file mode 100644 index a0dbbdb1f..000000000 --- a/Assets/Materials/UI/MapAsteroid.mat +++ /dev/null @@ -1,31 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!21 &2100000 -Material: - serializedVersion: 8 - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: MapAsteroid - m_Shader: {fileID: 4800000, guid: 22e2fc798f044a3aa2f6cd71f1df09a7, type: 3} - m_ValidKeywords: [] - m_InvalidKeywords: [] - m_LightmapFlags: 0 - m_EnableInstancingVariants: 0 - m_DoubleSidedGI: 0 - m_CustomRenderQueue: 3000 - stringTagMap: {} - disabledShaderPasses: [] - m_SavedProperties: - serializedVersion: 3 - m_TexEnvs: - - _MainTex: - m_Texture: {fileID: 2800000, guid: 060aefd5a3d5ced4dabd9190a140e76e, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Ints: [] - m_Floats: [] - m_Colors: - - _Color: {r: 1, g: 1, b: 1, a: 1} - m_BuildTextureStacks: [] diff --git a/Assets/Materials/UI/MapAsteroid.mat.meta b/Assets/Materials/UI/MapAsteroid.mat.meta deleted file mode 100644 index 2c044e9e9..000000000 --- a/Assets/Materials/UI/MapAsteroid.mat.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: c1012d5466454651b7279be93ef9af88 -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 2100000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Prefabs/RPG/Fog Patch.prefab b/Assets/Prefabs/RPG/Fog Patch.prefab index 52cdefc65..64769c721 100644 --- a/Assets/Prefabs/RPG/Fog Patch.prefab +++ b/Assets/Prefabs/RPG/Fog Patch.prefab @@ -11,7 +11,6 @@ GameObject: - component: {fileID: 3040023561780424834} - component: {fileID: 8539532519029615782} - component: {fileID: 4655154266675363797} - - component: {fileID: 2914522964471179774} m_Layer: 11 m_Name: Fog Patch m_TagString: Untagged @@ -26,13 +25,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 791530951415938407} - serializedVersion: 2 m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalPosition: {x: -3148.4, y: -253.6, z: -1108.1} + m_LocalScale: {x: 1513.8295, y: 1513.8295, z: 1513.8295} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} --- !u!33 &8539532519029615782 MeshFilter: @@ -59,11 +58,6 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 - m_ForceMeshLod: -1 - m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -85,22 +79,7 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} - m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 - m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!114 &2914522964471179774 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 791530951415938407} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a792b8f456004d04997a26557b338d1c, type: 3} - m_Name: - m_EditorClassIdentifier: Assembly-CSharp::VapourCloudInstance - PatchHeight: -5 diff --git a/Assets/Prefabs/RPG/Pickups/Dodecahedron.prefab b/Assets/Prefabs/RPG/Pickups/Dodecahedron.prefab index 7a65a0864..431b3c1a2 100644 --- a/Assets/Prefabs/RPG/Pickups/Dodecahedron.prefab +++ b/Assets/Prefabs/RPG/Pickups/Dodecahedron.prefab @@ -23,7 +23,6 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 4094535758000554889} - serializedVersion: 2 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} @@ -31,6 +30,7 @@ Transform: m_Children: - {fileID: 9133920759869389018} m_Father: {fileID: 8489385781787202308} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &5284461483464579928 GameObject: @@ -44,6 +44,7 @@ GameObject: - component: {fileID: 2667259809042191123} - component: {fileID: 2093307059618178533} - component: {fileID: 8815906420840494942} + - component: {fileID: 8842807112802394818} - component: {fileID: 8689774408369415534} - component: {fileID: 5705448000916375656} - component: {fileID: -5496574226213385675} @@ -61,7 +62,6 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 5284461483464579928} - serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 2.76403, y: 0, z: 0} m_LocalScale: {x: 3, y: 3, z: 3} @@ -69,6 +69,7 @@ Transform: m_Children: - {fileID: 6463386671854692106} m_Father: {fileID: 0} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!33 &2667259809042191123 MeshFilter: @@ -95,11 +96,6 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 - m_ForceMeshLod: -1 - m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -122,11 +118,9 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} - m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 - m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!135 &8815906420840494942 SphereCollider: @@ -136,19 +130,29 @@ SphereCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 5284461483464579928} m_Material: {fileID: 0} - m_IncludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_ExcludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_LayerOverridePriority: 0 m_IsTrigger: 0 - m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 3 + serializedVersion: 2 m_Radius: 0.91187096 m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &8842807112802394818 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5284461483464579928} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 737f47c158214f0995ba2835f040ed96, type: 3} + m_Name: + m_EditorClassIdentifier: + RotationSpeed: 1 + GridOffset: 0 + GridAttraction: 10 + Gravity: 1 + Drag: 0.05 + LaunchDrag: 0.2 --- !u!54 &8689774408369415534 Rigidbody: m_ObjectHideFlags: 0 @@ -156,21 +160,10 @@ Rigidbody: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 5284461483464579928} - serializedVersion: 5 + serializedVersion: 2 m_Mass: 1 - m_LinearDamping: 0 - m_AngularDamping: 0.05 - m_CenterOfMass: {x: 0, y: 0, z: 0} - m_InertiaTensor: {x: 1, y: 1, z: 1} - m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} - m_IncludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_ExcludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_ImplicitCom: 1 - m_ImplicitTensor: 1 + m_Drag: 0 + m_AngularDrag: 0.05 m_UseGravity: 0 m_IsKinematic: 1 m_Interpolate: 0 @@ -188,7 +181,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 0c18f67d85af44c2b5afc8ecd15ce960, type: 3} m_Name: m_EditorClassIdentifier: - RotationSpeed: 1 LabelFadeDuration: 0.5 LabelPersistDuration: 3 LabelDisplayAngle: 15 @@ -212,7 +204,6 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: - serializedVersion: 3 m_TransformParent: {fileID: 6463386671854692106} m_Modifications: - target: {fileID: 2945231343692618236, guid: e7877477dc889804ea9d04f7ffd08e9b, @@ -336,9 +327,6 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] - m_RemovedGameObjects: [] - m_AddedGameObjects: [] - m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e7877477dc889804ea9d04f7ffd08e9b, type: 3} --- !u!114 &3355762817961458026 stripped MonoBehaviour: diff --git a/Assets/Prefabs/RPG/Pickups/Hexahedron.prefab b/Assets/Prefabs/RPG/Pickups/Hexahedron.prefab index f9a477cda..fea9f67a9 100644 --- a/Assets/Prefabs/RPG/Pickups/Hexahedron.prefab +++ b/Assets/Prefabs/RPG/Pickups/Hexahedron.prefab @@ -23,7 +23,6 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 3193517496555256095} - serializedVersion: 2 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} @@ -31,6 +30,7 @@ Transform: m_Children: - {fileID: 7638477100053754924} m_Father: {fileID: 3419130779256825702} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &7643266616531142933 GameObject: @@ -44,6 +44,7 @@ GameObject: - component: {fileID: 3269639735116279291} - component: {fileID: 7427774873968414741} - component: {fileID: 674324171579366365} + - component: {fileID: 7449398549621940518} - component: {fileID: 4507103896627202189} - component: {fileID: 648083621841515580} - component: {fileID: -5443764149998352794} @@ -61,7 +62,6 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 7643266616531142933} - serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 3, y: 3, z: 3} @@ -69,6 +69,7 @@ Transform: m_Children: - {fileID: 3601651121922051457} m_Father: {fileID: 0} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!33 &3269639735116279291 MeshFilter: @@ -95,11 +96,6 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 - m_ForceMeshLod: -1 - m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -122,11 +118,9 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} - m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 - m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!135 &674324171579366365 SphereCollider: @@ -136,19 +130,29 @@ SphereCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 7643266616531142933} m_Material: {fileID: 0} - m_IncludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_ExcludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_LayerOverridePriority: 0 m_IsTrigger: 0 - m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 3 + serializedVersion: 2 m_Radius: 0.8 m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &7449398549621940518 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7643266616531142933} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 737f47c158214f0995ba2835f040ed96, type: 3} + m_Name: + m_EditorClassIdentifier: + RotationSpeed: 1 + GridOffset: 0 + GridAttraction: 10 + Gravity: 1 + Drag: 0.05 + LaunchDrag: 0.2 --- !u!114 &4507103896627202189 MonoBehaviour: m_ObjectHideFlags: 0 @@ -161,7 +165,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 0c18f67d85af44c2b5afc8ecd15ce960, type: 3} m_Name: m_EditorClassIdentifier: - RotationSpeed: 1 LabelFadeDuration: 0.5 LabelPersistDuration: 3 LabelDisplayAngle: 15 @@ -175,21 +178,10 @@ Rigidbody: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 7643266616531142933} - serializedVersion: 5 + serializedVersion: 2 m_Mass: 1 - m_LinearDamping: 0 - m_AngularDamping: 0.05 - m_CenterOfMass: {x: 0, y: 0, z: 0} - m_InertiaTensor: {x: 1, y: 1, z: 1} - m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} - m_IncludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_ExcludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_ImplicitCom: 1 - m_ImplicitTensor: 1 + m_Drag: 0 + m_AngularDrag: 0.05 m_UseGravity: 0 m_IsKinematic: 1 m_Interpolate: 0 @@ -212,7 +204,6 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: - serializedVersion: 3 m_TransformParent: {fileID: 3601651121922051457} m_Modifications: - target: {fileID: 2945231343692618236, guid: e7877477dc889804ea9d04f7ffd08e9b, @@ -336,9 +327,6 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] - m_RemovedGameObjects: [] - m_AddedGameObjects: [] - m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e7877477dc889804ea9d04f7ffd08e9b, type: 3} --- !u!114 &4202270197902620060 stripped MonoBehaviour: diff --git a/Assets/Prefabs/RPG/Pickups/Icosahedron.prefab b/Assets/Prefabs/RPG/Pickups/Icosahedron.prefab index 4252e74cc..e99ae3392 100644 --- a/Assets/Prefabs/RPG/Pickups/Icosahedron.prefab +++ b/Assets/Prefabs/RPG/Pickups/Icosahedron.prefab @@ -23,7 +23,6 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 6430764275721745537} - serializedVersion: 2 m_LocalRotation: {x: 0.7069834, y: -0, z: -0, w: 0.7072302} m_LocalPosition: {x: 0, y: -0.9858858, z: 0.000344038} m_LocalScale: {x: 1, y: 1, z: 1} @@ -31,6 +30,7 @@ Transform: m_Children: - {fileID: 5373456011921669618} m_Father: {fileID: 7548484292876150345} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &7167547457198401877 GameObject: @@ -44,6 +44,7 @@ GameObject: - component: {fileID: 7390838957595368880} - component: {fileID: 6960669510133879758} - component: {fileID: 3507902894264904200} + - component: {fileID: 8747099621875196907} - component: {fileID: 1545255963217739444} - component: {fileID: -5409019571952974707} - component: {fileID: -2501508196100734606} @@ -61,7 +62,6 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 7167547457198401877} - serializedVersion: 2 m_LocalRotation: {x: -0.7069834, y: 0, z: 0, w: 0.7072302} m_LocalPosition: {x: -0, y: 0, z: -2.9576573} m_LocalScale: {x: 3, y: 3, z: 3} @@ -69,6 +69,7 @@ Transform: m_Children: - {fileID: 4002800527770282731} m_Father: {fileID: 0} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: -89.98, y: 0, z: 0} --- !u!33 &7390838957595368880 MeshFilter: @@ -95,11 +96,6 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 - m_ForceMeshLod: -1 - m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -122,11 +118,9 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} - m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 - m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!135 &3507902894264904200 SphereCollider: @@ -136,19 +130,29 @@ SphereCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 7167547457198401877} m_Material: {fileID: 0} - m_IncludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_ExcludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_LayerOverridePriority: 0 m_IsTrigger: 0 - m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 3 + serializedVersion: 2 m_Radius: 0.8303433 m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &8747099621875196907 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7167547457198401877} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 737f47c158214f0995ba2835f040ed96, type: 3} + m_Name: + m_EditorClassIdentifier: + RotationSpeed: 1 + GridOffset: 0 + GridAttraction: 10 + Gravity: 1 + Drag: 0.05 + LaunchDrag: 0.2 --- !u!114 &1545255963217739444 MonoBehaviour: m_ObjectHideFlags: 0 @@ -161,7 +165,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 0c18f67d85af44c2b5afc8ecd15ce960, type: 3} m_Name: m_EditorClassIdentifier: - RotationSpeed: 1 LabelFadeDuration: 0.5 LabelPersistDuration: 3 LabelDisplayAngle: 15 @@ -175,21 +178,10 @@ Rigidbody: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 7167547457198401877} - serializedVersion: 5 + serializedVersion: 2 m_Mass: 1 - m_LinearDamping: 0 - m_AngularDamping: 0.05 - m_CenterOfMass: {x: 0, y: 0, z: 0} - m_InertiaTensor: {x: 1, y: 1, z: 1} - m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} - m_IncludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_ExcludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_ImplicitCom: 1 - m_ImplicitTensor: 1 + m_Drag: 0 + m_AngularDrag: 0.05 m_UseGravity: 0 m_IsKinematic: 1 m_Interpolate: 0 @@ -212,7 +204,6 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: - serializedVersion: 3 m_TransformParent: {fileID: 4002800527770282731} m_Modifications: - target: {fileID: 2945231343692618236, guid: e7877477dc889804ea9d04f7ffd08e9b, @@ -336,9 +327,6 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] - m_RemovedGameObjects: [] - m_AddedGameObjects: [] - m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e7877477dc889804ea9d04f7ffd08e9b, type: 3} --- !u!114 &1928241908402748482 stripped MonoBehaviour: diff --git a/Assets/Prefabs/RPG/Pickups/Octahedron.prefab b/Assets/Prefabs/RPG/Pickups/Octahedron.prefab index 099083195..7ba7910d2 100644 --- a/Assets/Prefabs/RPG/Pickups/Octahedron.prefab +++ b/Assets/Prefabs/RPG/Pickups/Octahedron.prefab @@ -23,7 +23,6 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 3932408193141279893} - serializedVersion: 2 m_LocalRotation: {x: 0.7069834, y: -0, z: -0, w: 0.7072302} m_LocalPosition: {x: 0, y: 0.9264834, z: -0.0003232956} m_LocalScale: {x: 1, y: 1, z: 1} @@ -31,6 +30,7 @@ Transform: m_Children: - {fileID: 7372978312502119311} m_Father: {fileID: 5807113421007930924} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &8555821447211356933 GameObject: @@ -44,6 +44,7 @@ GameObject: - component: {fileID: 4899765339662518078} - component: {fileID: 1691511938472729356} - component: {fileID: 3657818610818556929} + - component: {fileID: 946329779588188460} - component: {fileID: 7390748043139687254} - component: {fileID: -4611973708976329780} - component: {fileID: -8908388773057984787} @@ -61,7 +62,6 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 8555821447211356933} - serializedVersion: 2 m_LocalRotation: {x: -0.7069834, y: 0, z: 0, w: 0.7072302} m_LocalPosition: {x: -0, y: 0, z: 2.7794502} m_LocalScale: {x: 3, y: 3, z: 3} @@ -69,6 +69,7 @@ Transform: m_Children: - {fileID: 2388751103296260666} m_Father: {fileID: 0} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: -89.98, y: 0, z: 0} --- !u!33 &4899765339662518078 MeshFilter: @@ -95,11 +96,6 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 - m_ForceMeshLod: -1 - m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -122,11 +118,9 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} - m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 - m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!135 &3657818610818556929 SphereCollider: @@ -136,19 +130,29 @@ SphereCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 8555821447211356933} m_Material: {fileID: 0} - m_IncludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_ExcludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_LayerOverridePriority: 0 m_IsTrigger: 0 - m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 3 + serializedVersion: 2 m_Radius: 0.75 m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &946329779588188460 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8555821447211356933} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 737f47c158214f0995ba2835f040ed96, type: 3} + m_Name: + m_EditorClassIdentifier: + RotationSpeed: 1 + GridOffset: 0 + GridAttraction: 10 + Gravity: 1 + Drag: 0.05 + LaunchDrag: 0.2 --- !u!114 &7390748043139687254 MonoBehaviour: m_ObjectHideFlags: 0 @@ -161,7 +165,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 0c18f67d85af44c2b5afc8ecd15ce960, type: 3} m_Name: m_EditorClassIdentifier: - RotationSpeed: 1 LabelFadeDuration: 0.5 LabelPersistDuration: 3 LabelDisplayAngle: 15 @@ -175,21 +178,10 @@ Rigidbody: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 8555821447211356933} - serializedVersion: 5 + serializedVersion: 2 m_Mass: 1 - m_LinearDamping: 0 - m_AngularDamping: 0.05 - m_CenterOfMass: {x: 0, y: 0, z: 0} - m_InertiaTensor: {x: 1, y: 1, z: 1} - m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} - m_IncludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_ExcludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_ImplicitCom: 1 - m_ImplicitTensor: 1 + m_Drag: 0 + m_AngularDrag: 0.05 m_UseGravity: 0 m_IsKinematic: 1 m_Interpolate: 0 @@ -212,7 +204,6 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: - serializedVersion: 3 m_TransformParent: {fileID: 2388751103296260666} m_Modifications: - target: {fileID: 2945231343692618236, guid: e7877477dc889804ea9d04f7ffd08e9b, @@ -336,9 +327,6 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] - m_RemovedGameObjects: [] - m_AddedGameObjects: [] - m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e7877477dc889804ea9d04f7ffd08e9b, type: 3} --- !u!114 &3891726626588969535 stripped MonoBehaviour: diff --git a/Assets/Prefabs/RPG/Pickups/Scan Label.prefab b/Assets/Prefabs/RPG/Pickups/Scan Label.prefab index 62c129c2b..dff141f55 100644 --- a/Assets/Prefabs/RPG/Pickups/Scan Label.prefab +++ b/Assets/Prefabs/RPG/Pickups/Scan Label.prefab @@ -28,9 +28,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -48,17 +48,11 @@ MeshRenderer: m_CastShadows: 0 m_ReceiveShadows: 0 m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 - m_ForceMeshLod: -1 - m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -80,11 +74,9 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} - m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 - m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!114 &3085702413493447743 MonoBehaviour: @@ -144,23 +136,20 @@ MonoBehaviour: m_VerticalAlignment: 1024 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 0 + m_enableWordWrapping: 0 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 0 m_isCullingEnabled: 0 @@ -175,9 +164,8 @@ MonoBehaviour: m_margin: {x: 0, y: 0, z: 0, w: 0} m_isUsingLegacyAnimationComponent: 0 m_isVolumetricText: 0 - _SortingLayer: 0 - _SortingLayerID: 0 - _SortingOrder: 0 m_hasFontAssetChanged: 0 m_renderer: {fileID: 2000937249754104238} m_maskType: 0 + _SortingLayerID: 0 + _SortingOrder: 0 diff --git a/Assets/Prefabs/RPG/Pickups/Tetrahedron.prefab b/Assets/Prefabs/RPG/Pickups/Tetrahedron.prefab index 6dad19967..26c2b96dd 100644 --- a/Assets/Prefabs/RPG/Pickups/Tetrahedron.prefab +++ b/Assets/Prefabs/RPG/Pickups/Tetrahedron.prefab @@ -23,7 +23,6 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2238948151922859802} - serializedVersion: 2 m_LocalRotation: {x: 0.7069834, y: -0, z: -0, w: 0.7072302} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} @@ -31,6 +30,7 @@ Transform: m_Children: - {fileID: 3300919539099916088} m_Father: {fileID: 8414659055235772867} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &7767746557817481743 GameObject: @@ -44,6 +44,7 @@ GameObject: - component: {fileID: 2868629223358676395} - component: {fileID: 6959931328227918623} - component: {fileID: 4540815661693075899} + - component: {fileID: 4008709970769624704} - component: {fileID: 7436534270673427838} - component: {fileID: -6589342969031261525} - component: {fileID: 5724758014884646323} @@ -61,7 +62,6 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 7767746557817481743} - serializedVersion: 2 m_LocalRotation: {x: -0.7069834, y: 0, z: 0, w: 0.7072302} m_LocalPosition: {x: -0, y: 0, z: 0} m_LocalScale: {x: 3, y: 3, z: 3} @@ -69,6 +69,7 @@ Transform: m_Children: - {fileID: 7682789761269032435} m_Father: {fileID: 0} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: -89.98, y: 0, z: 0} --- !u!33 &2868629223358676395 MeshFilter: @@ -95,11 +96,6 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 - m_ForceMeshLod: -1 - m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -122,11 +118,9 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} - m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 - m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!135 &4540815661693075899 SphereCollider: @@ -136,19 +130,29 @@ SphereCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 7767746557817481743} m_Material: {fileID: 0} - m_IncludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_ExcludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_LayerOverridePriority: 0 m_IsTrigger: 0 - m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 3 + serializedVersion: 2 m_Radius: 0.60371214 m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &4008709970769624704 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7767746557817481743} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 737f47c158214f0995ba2835f040ed96, type: 3} + m_Name: + m_EditorClassIdentifier: + RotationSpeed: 1 + GridOffset: 0 + GridAttraction: 10 + Gravity: 1 + Drag: 0.05 + LaunchDrag: 0.2 --- !u!114 &7436534270673427838 MonoBehaviour: m_ObjectHideFlags: 0 @@ -161,7 +165,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 0c18f67d85af44c2b5afc8ecd15ce960, type: 3} m_Name: m_EditorClassIdentifier: - RotationSpeed: 1 LabelFadeDuration: 0.5 LabelPersistDuration: 3 LabelDisplayAngle: 15 @@ -175,21 +178,10 @@ Rigidbody: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 7767746557817481743} - serializedVersion: 5 + serializedVersion: 2 m_Mass: 1 - m_LinearDamping: 0 - m_AngularDamping: 0.05 - m_CenterOfMass: {x: 0, y: 0, z: 0} - m_InertiaTensor: {x: 1, y: 1, z: 1} - m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} - m_IncludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_ExcludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_ImplicitCom: 1 - m_ImplicitTensor: 1 + m_Drag: 0 + m_AngularDrag: 0.05 m_UseGravity: 0 m_IsKinematic: 1 m_Interpolate: 0 @@ -212,7 +204,6 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: - serializedVersion: 3 m_TransformParent: {fileID: 7682789761269032435} m_Modifications: - target: {fileID: 2945231343692618236, guid: e7877477dc889804ea9d04f7ffd08e9b, @@ -336,9 +327,6 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] - m_RemovedGameObjects: [] - m_AddedGameObjects: [] - m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e7877477dc889804ea9d04f7ffd08e9b, type: 3} --- !u!224 &3300919539099916088 stripped RectTransform: diff --git a/Assets/Prefabs/RPG/Planets/Gas Giant.prefab b/Assets/Prefabs/RPG/Planets/Gas Giant.prefab index de87b2a13..46ae7a3b1 100644 --- a/Assets/Prefabs/RPG/Planets/Gas Giant.prefab +++ b/Assets/Prefabs/RPG/Planets/Gas Giant.prefab @@ -30,6 +30,8 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: - {fileID: 3973935122748960680} + - {fileID: 3973935121058605868} + - {fileID: 3973935122114073483} - {fileID: 3973935121358855036} m_Father: {fileID: 0} m_RootOrder: 0 @@ -47,9 +49,94 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: Body: {fileID: 3973935122748960683} + GravityWell: {fileID: 3973935121058605871} Icon: {fileID: 3973935121358855037} Generator: {fileID: 0} SunMaterial: {fileID: 3973935122748960685} + GravityWaves: {fileID: 3973935122114073485} +--- !u!1 &3973935121058605867 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3973935121058605868} + - component: {fileID: 3973935121058605856} + - component: {fileID: 3973935121058605871} + m_Layer: 9 + m_Name: Gravity Well + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3973935121058605868 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3973935121058605867} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3973935120991099173} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} +--- !u!33 &3973935121058605856 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3973935121058605867} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &3973935121058605871 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3973935121058605867} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 44a8bbb89acb4e34c9f41a9da5842bb4, 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 + m_AdditionalVertexStreams: {fileID: 0} --- !u!1 &3973935121358855035 GameObject: m_ObjectHideFlags: 0 @@ -133,6 +220,89 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &3973935122114073482 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3973935122114073483} + - component: {fileID: 3973935122114073486} + - component: {fileID: 3973935122114073485} + m_Layer: 10 + m_Name: Gravity Waves + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3973935122114073483 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3973935122114073482} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3973935120991099173} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} +--- !u!33 &3973935122114073486 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3973935122114073482} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &3973935122114073485 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3973935122114073482} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 11fbaa87dcc7a3743a6bd3aa5c86e5ae, 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 + m_AdditionalVertexStreams: {fileID: 0} --- !u!1 &3973935122748960663 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Prefabs/RPG/Planets/Planet.prefab b/Assets/Prefabs/RPG/Planets/Planet.prefab index afffe73c4..336b3430b 100644 --- a/Assets/Prefabs/RPG/Planets/Planet.prefab +++ b/Assets/Prefabs/RPG/Planets/Planet.prefab @@ -83,6 +83,89 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &8859079004671924238 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8859079004671924239} + - component: {fileID: 8859079004671924339} + - component: {fileID: 8859079004671924338} + m_Layer: 9 + m_Name: Gravity Well + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8859079004671924239 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8859079004671924238} + m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8859079004937162792} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} +--- !u!33 &8859079004671924339 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8859079004671924238} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &8859079004671924338 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8859079004671924238} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 44a8bbb89acb4e34c9f41a9da5842bb4, 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 + m_AdditionalVertexStreams: {fileID: 0} --- !u!1 &8859079004937162791 GameObject: m_ObjectHideFlags: 0 @@ -114,6 +197,7 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: - {fileID: 8859079005270853336} + - {fileID: 8859079004671924239} - {fileID: 8859079003226229097} m_Father: {fileID: 0} m_RootOrder: 0 @@ -131,6 +215,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: Body: {fileID: 8859079005270853338} + GravityWell: {fileID: 8859079004671924338} Icon: {fileID: 8859079003226229098} Generator: {fileID: -7153121627769399805} --- !u!114 &-7153121627769399805 diff --git a/Assets/Prefabs/RPG/Planets/Sun.prefab b/Assets/Prefabs/RPG/Planets/Sun.prefab index ebe0fa72f..a7950f448 100644 --- a/Assets/Prefabs/RPG/Planets/Sun.prefab +++ b/Assets/Prefabs/RPG/Planets/Sun.prefab @@ -30,6 +30,8 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: - {fileID: 7852221720971737233} + - {fileID: 7852221720969441490} + - {fileID: 7852221720741322892} - {fileID: 7852221720816817928} - {fileID: 7852221720964551245} m_Father: {fileID: 0} @@ -48,11 +50,96 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: Body: {fileID: 7852221720971737229} + GravityWell: {fileID: 7852221720969441484} Icon: {fileID: 7852221720964551246} Generator: {fileID: 0} SunMaterial: {fileID: 7852221720971737234} + GravityWaves: {fileID: 7852221720741322894} FogTint: {fileID: 7852221720816817929} Light: {fileID: 8064377225639657765} +--- !u!1 &7852221720741322899 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7852221720741322892} + - component: {fileID: 7852221720741322895} + - component: {fileID: 7852221720741322894} + m_Layer: 10 + m_Name: Gravity Waves + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7852221720741322892 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7852221720741322899} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7852221720480299767} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} +--- !u!33 &7852221720741322895 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7852221720741322899} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &7852221720741322894 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7852221720741322899} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 11fbaa87dcc7a3743a6bd3aa5c86e5ae, 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 + m_AdditionalVertexStreams: {fileID: 0} --- !u!1 &7852221720816817935 GameObject: m_ObjectHideFlags: 0 @@ -219,6 +306,89 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &7852221720969441489 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7852221720969441490} + - component: {fileID: 7852221720969441485} + - component: {fileID: 7852221720969441484} + m_Layer: 9 + m_Name: Gravity Well + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7852221720969441490 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7852221720969441489} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7852221720480299767} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} +--- !u!33 &7852221720969441485 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7852221720969441489} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &7852221720969441484 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7852221720969441489} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 44a8bbb89acb4e34c9f41a9da5842bb4, 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 + m_AdditionalVertexStreams: {fileID: 0} --- !u!1 &7852221720971737232 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Prefabs/RPG/Wormhole 1.prefab b/Assets/Prefabs/RPG/Wormhole 1.prefab index e1ca93be7..b03d01009 100644 --- a/Assets/Prefabs/RPG/Wormhole 1.prefab +++ b/Assets/Prefabs/RPG/Wormhole 1.prefab @@ -1,5 +1,167 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: +--- !u!1 &1826894967093516808 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1030590306481442051} + - component: {fileID: 3216580199816124320} + - component: {fileID: 3211969211988968959} + m_Layer: 9 + m_Name: Gravity Well + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1030590306481442051 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1826894967093516808} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1024, y: 1024, z: 1024} + m_Children: [] + m_Father: {fileID: 463084220523011477} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} +--- !u!33 &3216580199816124320 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1826894967093516808} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &3211969211988968959 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1826894967093516808} + 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_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 244f3e4c0c030a24b8d7aa944895bdcf, 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 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &3908760799087214860 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 581261949390603689} + - component: {fileID: 987447324816385543} + - component: {fileID: 3959510878930752720} + m_Layer: 9 + m_Name: Gravity Waves + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &581261949390603689 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3908760799087214860} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 512, y: 512, z: 512} + m_Children: [] + m_Father: {fileID: 463084220523011477} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} +--- !u!33 &987447324816385543 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3908760799087214860} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &3959510878930752720 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3908760799087214860} + 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_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: ef2f6090d5cc14a4e9ce38def3bed9ac, 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 + m_AdditionalVertexStreams: {fileID: 0} --- !u!1 &4837153162502999620 GameObject: m_ObjectHideFlags: 0 @@ -27,6 +189,9 @@ Transform: m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: + - {fileID: 8222188360457572195} + - {fileID: 1030590306481442051} + - {fileID: 581261949390603689} - {fileID: 8249320701965103923} m_Father: {fileID: 0} m_RootOrder: 0 @@ -112,3 +277,84 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &7647029665738834910 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8222188360457572195} + - component: {fileID: 2468954688819198096} + - component: {fileID: 8290522694236574882} + m_Layer: 9 + m_Name: Gravity Pit + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8222188360457572195 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7647029665738834910} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 512, y: 512, z: 512} + m_Children: [] + m_Father: {fileID: 463084220523011477} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} +--- !u!33 &2468954688819198096 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7647029665738834910} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &8290522694236574882 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7647029665738834910} + 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_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: a9ef17c902709ce41a837c54b809184b, 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 + m_AdditionalVertexStreams: {fileID: 0} diff --git a/Assets/Prefabs/RTS/Asteroid Belt.prefab b/Assets/Prefabs/RTS/Asteroid Belt.prefab new file mode 100644 index 000000000..38df4e9e3 --- /dev/null +++ b/Assets/Prefabs/RTS/Asteroid Belt.prefab @@ -0,0 +1,111 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &992254348637625916 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1779911639310264026} + - component: {fileID: 349597964696402918} + - component: {fileID: 2844878085845264008} + - component: {fileID: 917803079556930035} + - component: {fileID: 4397878771830533054} + m_Layer: 14 + m_Name: Asteroid Belt + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1779911639310264026 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 992254348637625916} + 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: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &349597964696402918 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 992254348637625916} + m_Mesh: {fileID: 0} +--- !u!23 &2844878085845264008 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 992254348637625916} + 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_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c018d99199afeca448c64b9022ac7270, 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: 0 + 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 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!64 &917803079556930035 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 992254348637625916} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 0} +--- !u!114 &4397878771830533054 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 992254348637625916} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 52538a3309c36fc4583c964a1c0b705f, type: 3} + m_Name: + m_EditorClassIdentifier: diff --git a/Assets/Fonts/Emoji/emoji-font.lock.meta b/Assets/Prefabs/RTS/Asteroid Belt.prefab.meta similarity index 63% rename from Assets/Fonts/Emoji/emoji-font.lock.meta rename to Assets/Prefabs/RTS/Asteroid Belt.prefab.meta index d59e8a3eb..f1298ae38 100644 --- a/Assets/Fonts/Emoji/emoji-font.lock.meta +++ b/Assets/Prefabs/RTS/Asteroid Belt.prefab.meta @@ -1,6 +1,6 @@ fileFormatVersion: 2 -guid: 6290b5397f6ae1d47a19c6886ebd87e2 -DefaultImporter: +guid: 1f1bfa2175a13b647888e2949e0cb138 +PrefabImporter: externalObjects: {} userData: assetBundleName: diff --git a/Assets/Prefabs/RTS/Entity.prefab b/Assets/Prefabs/RTS/Entity.prefab index 61a1a8eb7..c981cb3fb 100644 --- a/Assets/Prefabs/RTS/Entity.prefab +++ b/Assets/Prefabs/RTS/Entity.prefab @@ -10,6 +10,7 @@ GameObject: m_Component: - component: {fileID: 4644834953993757301} - component: {fileID: 1859458984701215649} + - component: {fileID: 3439515216706641237} - component: {fileID: 3170441533209407059} - component: {fileID: 3150651635148382191} m_Layer: 0 @@ -29,9 +30,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 7667578565413050542} + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -49,21 +50,13 @@ MeshRenderer: m_CastShadows: 0 m_ReceiveShadows: 0 m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 - m_ForceMeshLod: -1 - m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: - - {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + - {fileID: 21677577810600300, guid: ef74c4c30ca5ced4489f28b914006aad, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -71,7 +64,6 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 - m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -81,12 +73,17 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} - m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 - m_MaskInteraction: 0 - m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &3439515216706641237 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 235155884317602032} + m_Mesh: {fileID: 0} --- !u!222 &3170441533209407059 CanvasRenderer: m_ObjectHideFlags: 0 @@ -110,18 +107,16 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] m_text: 'Something just happened, now I''m telling you about it. - Something - just happened, now I''m telling you about it.' + Something just happened, now I''m telling you about it.' m_isRightToLeft: 0 - m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} - m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontAsset: {fileID: 11400000, guid: ef74c4c30ca5ced4489f28b914006aad, type: 2} + m_sharedMaterial: {fileID: 21677577810600300, guid: ef74c4c30ca5ced4489f28b914006aad, + type: 2} m_fontSharedMaterials: [] m_fontMaterial: {fileID: 0} m_fontMaterials: [] @@ -139,12 +134,13 @@ MonoBehaviour: m_fontColorGradientPreset: {fileID: 0} m_spriteAsset: {fileID: 0} m_tintAllSprites: 0 - m_StyleSheet: {fileID: 0} - m_TextStyleHashCode: 0 m_overrideHtmlColors: 0 m_faceColor: serializedVersion: 2 rgba: 4294967295 + m_outlineColor: + serializedVersion: 2 + rgba: 4278190080 m_fontSize: 2.5 m_fontSizeBase: 2.5 m_fontWeight: 400 @@ -152,46 +148,62 @@ MonoBehaviour: m_fontSizeMin: 18 m_fontSizeMax: 72 m_fontStyle: 0 - m_HorizontalAlignment: 2 - m_VerticalAlignment: 1024 - m_textAlignment: 65535 + m_textAlignment: 1026 m_characterSpacing: 1.38 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 7.09 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 0 + m_enableWordWrapping: 0 m_wordWrappingRatios: 0.4 m_overflowMode: 0 + m_firstOverflowCharacterIndex: 0 m_linkedTextComponent: {fileID: 0} - parentLinkedComponent: {fileID: 0} + m_isLinkedTextComponent: 0 + m_isTextTruncated: 0 m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 0 m_isCullingEnabled: 0 + m_ignoreRectMaskCulling: 0 + m_ignoreCulling: 1 m_horizontalMapping: 0 m_verticalMapping: 0 m_uvLineOffset: 0 m_geometrySortingOrder: 0 - m_IsTextObjectScaleStatic: 0 m_VertexBufferAutoSizeReduction: 1 + m_firstVisibleCharacter: 0 m_useMaxVisibleDescender: 1 m_pageToDisplay: 1 m_margin: {x: 0, y: 0, z: 0, w: 0} + m_textInfo: + textComponent: {fileID: 3150651635148382191} + characterCount: 109 + spriteCount: 0 + spaceCount: 17 + wordCount: 18 + linkCount: 0 + lineCount: 2 + pageCount: 1 + materialCount: 1 m_isUsingLegacyAnimationComponent: 0 m_isVolumetricText: 0 - _SortingLayer: 0 - _SortingLayerID: 0 - _SortingOrder: 0 + m_spriteAnimator: {fileID: 0} m_hasFontAssetChanged: 0 m_renderer: {fileID: 1859458984701215649} + m_subTextObjects: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} m_maskType: 0 --- !u!1 &7667578565016065614 GameObject: @@ -220,13 +232,12 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 7667578565016065614} - serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0.05} m_LocalScale: {x: 0.75, y: 0.75, z: 1} - m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 7667578565413050542} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!33 &7667578565016065611 MeshFilter: @@ -247,17 +258,9 @@ MeshRenderer: m_CastShadows: 1 m_ReceiveShadows: 1 m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 - m_ForceMeshLod: -1 - m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -269,7 +272,6 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 - m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -279,12 +281,9 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} - m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 - m_MaskInteraction: 0 - m_AdditionalVertexStreams: {fileID: 0} --- !u!64 &7667578565016065609 MeshCollider: m_ObjectHideFlags: 0 @@ -293,19 +292,11 @@ MeshCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 7667578565016065614} m_Material: {fileID: 0} - m_IncludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_ExcludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_LayerOverridePriority: 0 m_IsTrigger: 0 - m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 5 + serializedVersion: 3 m_Convex: 0 - m_CookingOptions: 30 + m_CookingOptions: 14 m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} --- !u!114 &7667578565016065610 MonoBehaviour: @@ -343,16 +334,15 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 7667578565413050543} - serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 5.38, y: 0.81, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 m_Children: - {fileID: 7667578565016065613} - {fileID: 7667578566386612334} - {fileID: 4644834953993757301} m_Father: {fileID: 0} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &5800314421439145179 MonoBehaviour: @@ -380,6 +370,7 @@ GameObject: m_Component: - component: {fileID: 7667578566386612334} - component: {fileID: 7667578566386612330} + - component: {fileID: 7667578566386612331} - component: {fileID: 7667578566386612332} - component: {fileID: 7667578566386612333} m_Layer: 0 @@ -399,9 +390,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 7667578565413050542} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -419,21 +410,13 @@ MeshRenderer: m_CastShadows: 0 m_ReceiveShadows: 0 m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 - m_ForceMeshLod: -1 - m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: - - {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + - {fileID: 21677577810600300, guid: ef74c4c30ca5ced4489f28b914006aad, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -441,7 +424,6 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 - m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -451,12 +433,17 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} - m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 - m_MaskInteraction: 0 - m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &7667578566386612331 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7667578566386612335} + m_Mesh: {fileID: 0} --- !u!222 &7667578566386612332 CanvasRenderer: m_ObjectHideFlags: 0 @@ -480,8 +467,6 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] @@ -489,8 +474,9 @@ MonoBehaviour: ' m_isRightToLeft: 0 - m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} - m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontAsset: {fileID: 11400000, guid: ef74c4c30ca5ced4489f28b914006aad, type: 2} + m_sharedMaterial: {fileID: 21677577810600300, guid: ef74c4c30ca5ced4489f28b914006aad, + type: 2} m_fontSharedMaterials: [] m_fontMaterial: {fileID: 0} m_fontMaterials: [] @@ -508,12 +494,13 @@ MonoBehaviour: m_fontColorGradientPreset: {fileID: 0} m_spriteAsset: {fileID: 0} m_tintAllSprites: 0 - m_StyleSheet: {fileID: 0} - m_TextStyleHashCode: 0 m_overrideHtmlColors: 0 m_faceColor: serializedVersion: 2 rgba: 4294967295 + m_outlineColor: + serializedVersion: 2 + rgba: 4278190080 m_fontSize: 2 m_fontSizeBase: 2 m_fontWeight: 400 @@ -521,44 +508,60 @@ MonoBehaviour: m_fontSizeMin: 18 m_fontSizeMax: 72 m_fontStyle: 0 - m_HorizontalAlignment: 2 - m_VerticalAlignment: 256 - m_textAlignment: 65535 + m_textAlignment: 258 m_characterSpacing: 1.38 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 0 + m_enableWordWrapping: 0 m_wordWrappingRatios: 0.4 m_overflowMode: 0 + m_firstOverflowCharacterIndex: -1 m_linkedTextComponent: {fileID: 0} - parentLinkedComponent: {fileID: 0} + m_isLinkedTextComponent: 0 + m_isTextTruncated: 0 m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 0 m_isCullingEnabled: 0 + m_ignoreRectMaskCulling: 0 + m_ignoreCulling: 1 m_horizontalMapping: 0 m_verticalMapping: 0 m_uvLineOffset: 0 m_geometrySortingOrder: 0 - m_IsTextObjectScaleStatic: 0 m_VertexBufferAutoSizeReduction: 1 + m_firstVisibleCharacter: 0 m_useMaxVisibleDescender: 1 m_pageToDisplay: 1 m_margin: {x: 0, y: 0, z: 0, w: 0} + m_textInfo: + textComponent: {fileID: 7667578566386612333} + characterCount: 13 + spriteCount: 0 + spaceCount: 2 + wordCount: 2 + linkCount: 0 + lineCount: 1 + pageCount: 1 + materialCount: 1 m_isUsingLegacyAnimationComponent: 0 m_isVolumetricText: 0 - _SortingLayer: 0 - _SortingLayerID: 0 - _SortingOrder: 0 + m_spriteAnimator: {fileID: 0} m_hasFontAssetChanged: 0 m_renderer: {fileID: 7667578566386612330} + m_subTextObjects: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} m_maskType: 0 diff --git a/Assets/Prefabs/RTS/Planet.prefab b/Assets/Prefabs/RTS/Planet.prefab index b288f30c5..09c80e995 100644 --- a/Assets/Prefabs/RTS/Planet.prefab +++ b/Assets/Prefabs/RTS/Planet.prefab @@ -10,6 +10,7 @@ GameObject: m_Component: - component: {fileID: 1093865191529778971} - component: {fileID: 956320758189013213} + - component: {fileID: 6189203536709783203} - component: {fileID: 688008198251117811} - component: {fileID: 6196070888394201391} m_Layer: 0 @@ -29,9 +30,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 5321404118521994135} + m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -49,21 +50,13 @@ MeshRenderer: m_CastShadows: 0 m_ReceiveShadows: 0 m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 - m_ForceMeshLod: -1 - m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: - - {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + - {fileID: 21677577810600300, guid: ef74c4c30ca5ced4489f28b914006aad, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -71,7 +64,6 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 - m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -81,12 +73,17 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} - m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 - m_MaskInteraction: 0 - m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &6189203536709783203 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4176311944753611310} + m_Mesh: {fileID: 0} --- !u!222 &688008198251117811 CanvasRenderer: m_ObjectHideFlags: 0 @@ -110,18 +107,16 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] m_text: 'Something just happened, now I''m telling you about it. - Something - just happened, now I''m telling you about it.' + Something just happened, now I''m telling you about it.' m_isRightToLeft: 0 - m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} - m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontAsset: {fileID: 11400000, guid: ef74c4c30ca5ced4489f28b914006aad, type: 2} + m_sharedMaterial: {fileID: 21677577810600300, guid: ef74c4c30ca5ced4489f28b914006aad, + type: 2} m_fontSharedMaterials: [] m_fontMaterial: {fileID: 0} m_fontMaterials: [] @@ -139,12 +134,13 @@ MonoBehaviour: m_fontColorGradientPreset: {fileID: 0} m_spriteAsset: {fileID: 0} m_tintAllSprites: 0 - m_StyleSheet: {fileID: 0} - m_TextStyleHashCode: 0 m_overrideHtmlColors: 0 m_faceColor: serializedVersion: 2 rgba: 4294967295 + m_outlineColor: + serializedVersion: 2 + rgba: 4278190080 m_fontSize: 2.5 m_fontSizeBase: 2.5 m_fontWeight: 400 @@ -152,46 +148,62 @@ MonoBehaviour: m_fontSizeMin: 18 m_fontSizeMax: 72 m_fontStyle: 0 - m_HorizontalAlignment: 2 - m_VerticalAlignment: 1024 - m_textAlignment: 65535 + m_textAlignment: 1026 m_characterSpacing: 1.38 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 7.09 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 0 + m_enableWordWrapping: 0 m_wordWrappingRatios: 0.4 m_overflowMode: 0 + m_firstOverflowCharacterIndex: 0 m_linkedTextComponent: {fileID: 0} - parentLinkedComponent: {fileID: 0} + m_isLinkedTextComponent: 0 + m_isTextTruncated: 0 m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 0 m_isCullingEnabled: 0 + m_ignoreRectMaskCulling: 0 + m_ignoreCulling: 1 m_horizontalMapping: 0 m_verticalMapping: 0 m_uvLineOffset: 0 m_geometrySortingOrder: 0 - m_IsTextObjectScaleStatic: 0 m_VertexBufferAutoSizeReduction: 1 + m_firstVisibleCharacter: 0 m_useMaxVisibleDescender: 1 m_pageToDisplay: 1 m_margin: {x: 0, y: 0, z: 0, w: 0} + m_textInfo: + textComponent: {fileID: 6196070888394201391} + characterCount: 109 + spriteCount: 0 + spaceCount: 17 + wordCount: 18 + linkCount: 0 + lineCount: 2 + pageCount: 1 + materialCount: 1 m_isUsingLegacyAnimationComponent: 0 m_isVolumetricText: 0 - _SortingLayer: 0 - _SortingLayerID: 0 - _SortingOrder: 0 + m_spriteAnimator: {fileID: 0} m_hasFontAssetChanged: 0 m_renderer: {fileID: 956320758189013213} + m_subTextObjects: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} m_maskType: 0 --- !u!1 &5321404118521994134 GameObject: @@ -217,16 +229,16 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 5321404118521994134} - serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 5.38, y: 0.81, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 m_Children: + - {fileID: 5321404120083801960} - {fileID: 5321404118931821940} - {fileID: 5321404119494867799} - {fileID: 1093865191529778971} m_Father: {fileID: 0} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &5321404118521994133 MonoBehaviour: @@ -244,7 +256,7 @@ MonoBehaviour: Label: {fileID: 5321404119494867796} Message: {fileID: 6196070888394201391} Children: [] - GravityMesh: {fileID: 0} + GravityMesh: {fileID: 5321404120083801962} --- !u!1 &5321404118931821943 GameObject: m_ObjectHideFlags: 0 @@ -272,13 +284,12 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 5321404118931821943} - serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0.05} m_LocalScale: {x: 0.75, y: 0.75, z: 1} - m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 5321404118521994135} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!33 &5321404118931821938 MeshFilter: @@ -299,17 +310,9 @@ MeshRenderer: m_CastShadows: 1 m_ReceiveShadows: 1 m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 - m_ForceMeshLod: -1 - m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -321,7 +324,6 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 - m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -331,12 +333,9 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} - m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 - m_MaskInteraction: 0 - m_AdditionalVertexStreams: {fileID: 0} --- !u!64 &5321404118931821936 MeshCollider: m_ObjectHideFlags: 0 @@ -345,19 +344,11 @@ MeshCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 5321404118931821943} m_Material: {fileID: 0} - m_IncludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_ExcludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_LayerOverridePriority: 0 m_IsTrigger: 0 - m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 5 + serializedVersion: 3 m_Convex: 0 - m_CookingOptions: 30 + m_CookingOptions: 14 m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} --- !u!114 &5321404118931821939 MonoBehaviour: @@ -381,6 +372,7 @@ GameObject: m_Component: - component: {fileID: 5321404119494867799} - component: {fileID: 5321404119494867795} + - component: {fileID: 5321404119494867794} - component: {fileID: 5321404119494867797} - component: {fileID: 5321404119494867796} m_Layer: 0 @@ -400,9 +392,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 5321404118521994135} + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -420,21 +412,13 @@ MeshRenderer: m_CastShadows: 0 m_ReceiveShadows: 0 m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 - m_ForceMeshLod: -1 - m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: - - {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + - {fileID: 21677577810600300, guid: ef74c4c30ca5ced4489f28b914006aad, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -442,7 +426,6 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 - m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -452,12 +435,17 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} - m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 - m_MaskInteraction: 0 - m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &5321404119494867794 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5321404119494867798} + m_Mesh: {fileID: 0} --- !u!222 &5321404119494867797 CanvasRenderer: m_ObjectHideFlags: 0 @@ -481,8 +469,6 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] @@ -490,8 +476,9 @@ MonoBehaviour: ' m_isRightToLeft: 0 - m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} - m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontAsset: {fileID: 11400000, guid: ef74c4c30ca5ced4489f28b914006aad, type: 2} + m_sharedMaterial: {fileID: 21677577810600300, guid: ef74c4c30ca5ced4489f28b914006aad, + type: 2} m_fontSharedMaterials: [] m_fontMaterial: {fileID: 0} m_fontMaterials: [] @@ -509,12 +496,13 @@ MonoBehaviour: m_fontColorGradientPreset: {fileID: 0} m_spriteAsset: {fileID: 0} m_tintAllSprites: 0 - m_StyleSheet: {fileID: 0} - m_TextStyleHashCode: 0 m_overrideHtmlColors: 0 m_faceColor: serializedVersion: 2 rgba: 4294967295 + m_outlineColor: + serializedVersion: 2 + rgba: 4278190080 m_fontSize: 2 m_fontSizeBase: 2 m_fontWeight: 400 @@ -522,44 +510,137 @@ MonoBehaviour: m_fontSizeMin: 18 m_fontSizeMax: 72 m_fontStyle: 0 - m_HorizontalAlignment: 2 - m_VerticalAlignment: 256 - m_textAlignment: 65535 + m_textAlignment: 258 m_characterSpacing: 1.38 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 0 + m_enableWordWrapping: 0 m_wordWrappingRatios: 0.4 m_overflowMode: 0 + m_firstOverflowCharacterIndex: -1 m_linkedTextComponent: {fileID: 0} - parentLinkedComponent: {fileID: 0} + m_isLinkedTextComponent: 0 + m_isTextTruncated: 0 m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 0 m_isCullingEnabled: 0 + m_ignoreRectMaskCulling: 0 + m_ignoreCulling: 1 m_horizontalMapping: 0 m_verticalMapping: 0 m_uvLineOffset: 0 m_geometrySortingOrder: 0 - m_IsTextObjectScaleStatic: 0 m_VertexBufferAutoSizeReduction: 1 + m_firstVisibleCharacter: 0 m_useMaxVisibleDescender: 1 m_pageToDisplay: 1 m_margin: {x: 0, y: 0, z: 0, w: 0} + m_textInfo: + textComponent: {fileID: 5321404119494867796} + characterCount: 13 + spriteCount: 0 + spaceCount: 2 + wordCount: 2 + linkCount: 0 + lineCount: 1 + pageCount: 1 + materialCount: 1 m_isUsingLegacyAnimationComponent: 0 m_isVolumetricText: 0 - _SortingLayer: 0 - _SortingLayerID: 0 - _SortingOrder: 0 + m_spriteAnimator: {fileID: 0} m_hasFontAssetChanged: 0 m_renderer: {fileID: 5321404119494867795} + m_subTextObjects: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} m_maskType: 0 +--- !u!1 &5321404120083801964 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5321404120083801960} + - component: {fileID: 5321404120083801963} + - component: {fileID: 5321404120083801962} + m_Layer: 8 + m_Name: Gravity Well + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5321404120083801960 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5321404120083801964} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 10, y: 10, z: 1} + m_Children: [] + m_Father: {fileID: 5321404118521994135} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &5321404120083801963 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5321404120083801964} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &5321404120083801962 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5321404120083801964} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 44a8bbb89acb4e34c9f41a9da5842bb4, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + 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/Assets/Prefabs/RTS/Ship.prefab b/Assets/Prefabs/RTS/Ship.prefab index 9bfde2c33..34867f7bf 100644 --- a/Assets/Prefabs/RTS/Ship.prefab +++ b/Assets/Prefabs/RTS/Ship.prefab @@ -23,14 +23,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 717230718983664133} - serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0.7071068, w: 0.7071068} m_LocalPosition: {x: 0, y: -0.396, z: 0.025000002} m_LocalScale: {x: 1, y: 1.5, z: 1} - m_ConstrainProportionsScale: 0 m_Children: - {fileID: 6370514743660505460} m_Father: {fileID: 752969731239391542} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &752969730562965460 GameObject: @@ -56,16 +55,15 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 752969730562965460} - serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 5.38, y: 0.81, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 m_Children: - {fileID: 752969731239391542} - {fileID: 752969731603226389} - {fileID: 2376444423840420930} m_Father: {fileID: 0} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &795352744099449573 MonoBehaviour: @@ -111,14 +109,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 752969731239391541} - serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0.05} m_LocalScale: {x: 0.75, y: 0.75, z: 1} - m_ConstrainProportionsScale: 0 m_Children: - {fileID: 6634195572313526987} m_Father: {fileID: 752969730562965461} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!33 &752969731239391536 MeshFilter: @@ -139,17 +136,9 @@ MeshRenderer: m_CastShadows: 1 m_ReceiveShadows: 1 m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 - m_ForceMeshLod: -1 - m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -161,7 +150,6 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 - m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -171,12 +159,9 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} - m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 - m_MaskInteraction: 0 - m_AdditionalVertexStreams: {fileID: 0} --- !u!64 &752969731239391538 MeshCollider: m_ObjectHideFlags: 0 @@ -185,19 +170,11 @@ MeshCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 752969731239391541} m_Material: {fileID: 0} - m_IncludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_ExcludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_LayerOverridePriority: 0 m_IsTrigger: 0 - m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 5 + serializedVersion: 3 m_Convex: 0 - m_CookingOptions: 30 + m_CookingOptions: 14 m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} --- !u!114 &752969731239391537 MonoBehaviour: @@ -221,6 +198,7 @@ GameObject: m_Component: - component: {fileID: 752969731603226389} - component: {fileID: 752969731603226385} + - component: {fileID: 752969731603226384} - component: {fileID: 752969731603226391} - component: {fileID: 752969731603226390} m_Layer: 0 @@ -240,9 +218,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 752969730562965461} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -260,21 +238,13 @@ MeshRenderer: m_CastShadows: 0 m_ReceiveShadows: 0 m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 - m_ForceMeshLod: -1 - m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: - - {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + - {fileID: 21677577810600300, guid: ef74c4c30ca5ced4489f28b914006aad, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -282,7 +252,6 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 - m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -292,12 +261,17 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} - m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 - m_MaskInteraction: 0 - m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &752969731603226384 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 752969731603226388} + m_Mesh: {fileID: 0} --- !u!222 &752969731603226391 CanvasRenderer: m_ObjectHideFlags: 0 @@ -321,8 +295,6 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] @@ -330,8 +302,9 @@ MonoBehaviour: ' m_isRightToLeft: 0 - m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} - m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontAsset: {fileID: 11400000, guid: ef74c4c30ca5ced4489f28b914006aad, type: 2} + m_sharedMaterial: {fileID: 21677577810600300, guid: ef74c4c30ca5ced4489f28b914006aad, + type: 2} m_fontSharedMaterials: [] m_fontMaterial: {fileID: 0} m_fontMaterials: [] @@ -349,12 +322,13 @@ MonoBehaviour: m_fontColorGradientPreset: {fileID: 0} m_spriteAsset: {fileID: 0} m_tintAllSprites: 0 - m_StyleSheet: {fileID: 0} - m_TextStyleHashCode: 0 m_overrideHtmlColors: 0 m_faceColor: serializedVersion: 2 rgba: 4294967295 + m_outlineColor: + serializedVersion: 2 + rgba: 4278190080 m_fontSize: 2 m_fontSizeBase: 2 m_fontWeight: 400 @@ -362,46 +336,62 @@ MonoBehaviour: m_fontSizeMin: 18 m_fontSizeMax: 72 m_fontStyle: 0 - m_HorizontalAlignment: 2 - m_VerticalAlignment: 256 - m_textAlignment: 65535 + m_textAlignment: 258 m_characterSpacing: 1.38 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 0 + m_enableWordWrapping: 0 m_wordWrappingRatios: 0.4 m_overflowMode: 0 + m_firstOverflowCharacterIndex: -1 m_linkedTextComponent: {fileID: 0} - parentLinkedComponent: {fileID: 0} + m_isLinkedTextComponent: 0 + m_isTextTruncated: 0 m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 0 m_isCullingEnabled: 0 + m_ignoreRectMaskCulling: 0 + m_ignoreCulling: 1 m_horizontalMapping: 0 m_verticalMapping: 0 m_uvLineOffset: 0 m_geometrySortingOrder: 0 - m_IsTextObjectScaleStatic: 0 m_VertexBufferAutoSizeReduction: 1 + m_firstVisibleCharacter: 0 m_useMaxVisibleDescender: 1 m_pageToDisplay: 1 m_margin: {x: 0, y: 0, z: 0, w: 0} + m_textInfo: + textComponent: {fileID: 752969731603226390} + characterCount: 13 + spriteCount: 0 + spaceCount: 2 + wordCount: 2 + linkCount: 0 + lineCount: 1 + pageCount: 1 + materialCount: 1 m_isUsingLegacyAnimationComponent: 0 m_isVolumetricText: 0 - _SortingLayer: 0 - _SortingLayerID: 0 - _SortingOrder: 0 + m_spriteAnimator: {fileID: 0} m_hasFontAssetChanged: 0 m_renderer: {fileID: 752969731603226385} + m_subTextObjects: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} m_maskType: 0 --- !u!1 &1383583254418650531 GameObject: @@ -428,13 +418,12 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1383583254418650531} - serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0.114, y: 0, z: 0} m_LocalScale: {x: 0.3, y: 0.3, z: 1} - m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 6634195572313526987} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: -90} --- !u!33 &2644584120131549798 MeshFilter: @@ -455,17 +444,9 @@ MeshRenderer: m_CastShadows: 1 m_ReceiveShadows: 1 m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 - m_ForceMeshLod: -1 - m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -477,7 +458,6 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 - m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -487,12 +467,9 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} - m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 - m_MaskInteraction: 0 - m_AdditionalVertexStreams: {fileID: 0} --- !u!1 &8284500064616352456 GameObject: m_ObjectHideFlags: 0 @@ -503,6 +480,7 @@ GameObject: m_Component: - component: {fileID: 2376444423840420930} - component: {fileID: 9122382316357193139} + - component: {fileID: 2978801183465297864} - component: {fileID: 7740350830631187417} - component: {fileID: 2269191731601446379} m_Layer: 0 @@ -522,9 +500,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 752969730562965461} + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -542,21 +520,13 @@ MeshRenderer: m_CastShadows: 0 m_ReceiveShadows: 0 m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 - m_ForceMeshLod: -1 - m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: - - {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + - {fileID: 21677577810600300, guid: ef74c4c30ca5ced4489f28b914006aad, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -564,7 +534,6 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 - m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -574,12 +543,17 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} - m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 - m_MaskInteraction: 0 - m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &2978801183465297864 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8284500064616352456} + m_Mesh: {fileID: 0} --- !u!222 &7740350830631187417 CanvasRenderer: m_ObjectHideFlags: 0 @@ -603,18 +577,16 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] m_text: 'Something just happened, now I''m telling you about it. - Something - just happened, now I''m telling you about it.' + Something just happened, now I''m telling you about it.' m_isRightToLeft: 0 - m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} - m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontAsset: {fileID: 11400000, guid: ef74c4c30ca5ced4489f28b914006aad, type: 2} + m_sharedMaterial: {fileID: 21677577810600300, guid: ef74c4c30ca5ced4489f28b914006aad, + type: 2} m_fontSharedMaterials: [] m_fontMaterial: {fileID: 0} m_fontMaterials: [] @@ -632,12 +604,13 @@ MonoBehaviour: m_fontColorGradientPreset: {fileID: 0} m_spriteAsset: {fileID: 0} m_tintAllSprites: 0 - m_StyleSheet: {fileID: 0} - m_TextStyleHashCode: 0 m_overrideHtmlColors: 0 m_faceColor: serializedVersion: 2 rgba: 4294967295 + m_outlineColor: + serializedVersion: 2 + rgba: 4278190080 m_fontSize: 2.5 m_fontSizeBase: 2.5 m_fontWeight: 400 @@ -645,44 +618,60 @@ MonoBehaviour: m_fontSizeMin: 18 m_fontSizeMax: 72 m_fontStyle: 0 - m_HorizontalAlignment: 2 - m_VerticalAlignment: 1024 - m_textAlignment: 65535 + m_textAlignment: 1026 m_characterSpacing: 1.38 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 7.09 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 0 + m_enableWordWrapping: 0 m_wordWrappingRatios: 0.4 m_overflowMode: 0 + m_firstOverflowCharacterIndex: 0 m_linkedTextComponent: {fileID: 0} - parentLinkedComponent: {fileID: 0} + m_isLinkedTextComponent: 0 + m_isTextTruncated: 0 m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 0 m_isCullingEnabled: 0 + m_ignoreRectMaskCulling: 0 + m_ignoreCulling: 1 m_horizontalMapping: 0 m_verticalMapping: 0 m_uvLineOffset: 0 m_geometrySortingOrder: 0 - m_IsTextObjectScaleStatic: 0 m_VertexBufferAutoSizeReduction: 1 + m_firstVisibleCharacter: 0 m_useMaxVisibleDescender: 1 m_pageToDisplay: 1 m_margin: {x: 0, y: 0, z: 0, w: 0} + m_textInfo: + textComponent: {fileID: 2269191731601446379} + characterCount: 109 + spriteCount: 0 + spaceCount: 17 + wordCount: 18 + linkCount: 0 + lineCount: 2 + pageCount: 1 + materialCount: 1 m_isUsingLegacyAnimationComponent: 0 m_isVolumetricText: 0 - _SortingLayer: 0 - _SortingLayerID: 0 - _SortingOrder: 0 + m_spriteAnimator: {fileID: 0} m_hasFontAssetChanged: 0 m_renderer: {fileID: 9122382316357193139} + m_subTextObjects: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} m_maskType: 0 diff --git a/Assets/Prefabs/UI/Action Slot.prefab b/Assets/Prefabs/UI/Action Slot.prefab index acfc2f263..6ecf19406 100644 --- a/Assets/Prefabs/UI/Action Slot.prefab +++ b/Assets/Prefabs/UI/Action Slot.prefab @@ -31,6 +31,7 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 8334150340270499360} + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -104,23 +105,20 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 + m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -183,6 +181,7 @@ RectTransform: - {fileID: 8334150341178146430} - {fileID: 8334150340826609675} m_Father: {fileID: 0} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -351,6 +350,7 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 8334150340270499360} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -426,6 +426,7 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 8334150340270499360} + m_RootOrder: 7 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -501,6 +502,7 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 8334150340270499360} + m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -576,6 +578,7 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 8334150340270499360} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -651,6 +654,7 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 8334150340270499360} + m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 1, y: 1} m_AnchorMax: {x: 1, y: 1} @@ -724,23 +728,20 @@ MonoBehaviour: m_VerticalAlignment: 256 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 + m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -789,6 +790,7 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 8334150340270499360} + m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -862,23 +864,20 @@ MonoBehaviour: m_VerticalAlignment: 1024 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 + m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -927,6 +926,7 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 8334150340270499360} + m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} diff --git a/Assets/Prefabs/UI/Choice.prefab b/Assets/Prefabs/UI/Choice.prefab index 5624bd6ff..7aff99027 100644 --- a/Assets/Prefabs/UI/Choice.prefab +++ b/Assets/Prefabs/UI/Choice.prefab @@ -11,7 +11,7 @@ GameObject: - component: {fileID: 1388299342124750210} - component: {fileID: 7958013063086106696} m_Layer: 5 - m_Name: 'TMP SubMeshUI [UbuntuMono-R SDF + LiberationSans SDF Atlas]' + m_Name: TMP SubMeshUI [UbuntuMono-R SDF + LiberationSans SDF Atlas] m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -27,9 +27,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 3385051013345111086} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -76,10 +76,10 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 1388299342124750210} m_Father: {fileID: 0} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -152,23 +152,20 @@ MonoBehaviour: m_VerticalAlignment: 256 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 + m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 diff --git a/Assets/Prefabs/UI/Context Menu Option.prefab b/Assets/Prefabs/UI/Context Menu Option.prefab index ccaca26d5..77cbd95e0 100644 --- a/Assets/Prefabs/UI/Context Menu Option.prefab +++ b/Assets/Prefabs/UI/Context Menu Option.prefab @@ -32,11 +32,11 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 2147126713793274338} - {fileID: 1944744018361081348} m_Father: {fileID: 0} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -202,9 +202,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 2147126713262799480} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -278,23 +278,20 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 + m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -360,9 +357,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 2147126713262799480} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 1, y: 0.5} m_AnchorMax: {x: 1, y: 0.5} diff --git a/Assets/Prefabs/UI/Corporation Selection.prefab b/Assets/Prefabs/UI/Corporation Selection.prefab index b9dda795c..0e983e9be 100644 --- a/Assets/Prefabs/UI/Corporation Selection.prefab +++ b/Assets/Prefabs/UI/Corporation Selection.prefab @@ -29,10 +29,10 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 3643881634033459408} m_Father: {fileID: 3643881633437836137} + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -62,8 +62,6 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] @@ -91,12 +89,13 @@ MonoBehaviour: m_fontColorGradientPreset: {fileID: 0} m_spriteAsset: {fileID: 0} m_tintAllSprites: 0 - m_StyleSheet: {fileID: 0} - m_TextStyleHashCode: 0 m_overrideHtmlColors: 0 m_faceColor: serializedVersion: 2 rgba: 4294967295 + m_outlineColor: + serializedVersion: 2 + rgba: 4278190080 m_fontSize: 12 m_fontSizeBase: 16 m_fontWeight: 400 @@ -104,42 +103,61 @@ MonoBehaviour: m_fontSizeMin: 12 m_fontSizeMax: 20 m_fontStyle: 0 - m_HorizontalAlignment: 2 - m_VerticalAlignment: 512 - m_textAlignment: 65535 + m_textAlignment: 514 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 + m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 + m_firstOverflowCharacterIndex: 0 m_linkedTextComponent: {fileID: 0} - parentLinkedComponent: {fileID: 0} + m_isLinkedTextComponent: 0 + m_isTextTruncated: 0 m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 + m_ignoreRectMaskCulling: 0 + m_ignoreCulling: 1 m_horizontalMapping: 0 m_verticalMapping: 0 m_uvLineOffset: 0 m_geometrySortingOrder: 0 - m_IsTextObjectScaleStatic: 0 m_VertexBufferAutoSizeReduction: 1 + m_firstVisibleCharacter: 0 m_useMaxVisibleDescender: 1 m_pageToDisplay: 1 m_margin: {x: 0, y: 0, z: 0, w: 0} + m_textInfo: + textComponent: {fileID: 3643881633221182914} + characterCount: 212 + spriteCount: 0 + spaceCount: 31 + wordCount: 32 + linkCount: 0 + lineCount: 181 + pageCount: 1 + materialCount: 2 m_isUsingLegacyAnimationComponent: 0 m_isVolumetricText: 0 + m_spriteAnimator: {fileID: 0} m_hasFontAssetChanged: 0 + m_subTextObjects: + - {fileID: 0} + - {fileID: 3643881634033459409} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} m_baseMaterial: {fileID: 0} m_maskOffset: {x: 0, y: 0, z: 0, w: 0} --- !u!114 &3643881633221182915 @@ -151,7 +169,7 @@ MonoBehaviour: m_GameObject: {fileID: 3643881633221182924} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, type: 3} m_Name: m_EditorClassIdentifier: m_IgnoreLayout: 0 @@ -194,7 +212,6 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 3643881633927103020} - {fileID: 3643881634854544289} @@ -202,6 +219,7 @@ RectTransform: - {fileID: 3643881634695350169} - {fileID: 3643881634325817956} m_Father: {fileID: 0} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -217,7 +235,7 @@ MonoBehaviour: m_GameObject: {fileID: 3643881633437836136} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, type: 3} m_Name: m_EditorClassIdentifier: m_IgnoreLayout: 0 @@ -237,7 +255,7 @@ MonoBehaviour: m_GameObject: {fileID: 3643881633437836136} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} + m_Script: {fileID: 1297475563, guid: f70555f144d8491a825f0804e09c671c, type: 3} m_Name: m_EditorClassIdentifier: m_Padding: @@ -251,9 +269,6 @@ MonoBehaviour: m_ChildForceExpandHeight: 0 m_ChildControlWidth: 1 m_ChildControlHeight: 1 - m_ChildScaleWidth: 0 - m_ChildScaleHeight: 0 - m_ReverseArrangement: 0 --- !u!222 &3643881633437836141 CanvasRenderer: m_ObjectHideFlags: 0 @@ -271,14 +286,12 @@ MonoBehaviour: m_GameObject: {fileID: 3643881633437836136} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} m_Color: {r: 0, g: 0.29125005, b: 0.699, a: 1} m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] @@ -291,7 +304,6 @@ MonoBehaviour: m_FillClockwise: 1 m_FillOrigin: 0 m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 --- !u!114 &6925424662664426412 MonoBehaviour: m_ObjectHideFlags: 0 @@ -301,12 +313,11 @@ MonoBehaviour: m_GameObject: {fileID: 3643881633437836136} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, type: 3} m_Name: m_EditorClassIdentifier: m_Navigation: m_Mode: 3 - m_WrapAround: 0 m_SelectOnUp: {fileID: 0} m_SelectOnDown: {fileID: 0} m_SelectOnLeft: {fileID: 0} @@ -316,20 +327,17 @@ MonoBehaviour: m_NormalColor: {r: 0.3962264, g: 0.3962264, b: 0.3962264, a: 1} m_HighlightedColor: {r: 0.8018868, g: 0.8018868, b: 0.8018868, a: 1} m_PressedColor: {r: 1, g: 1, b: 1, a: 1} - m_SelectedColor: {r: 0.8018868, g: 0.8018868, b: 0.8018868, a: 1} m_DisabledColor: {r: 0.301, g: 0.301, b: 0.301, a: 0.5019608} m_ColorMultiplier: 1 m_FadeDuration: 0.1 m_SpriteState: m_HighlightedSprite: {fileID: 0} m_PressedSprite: {fileID: 0} - m_SelectedSprite: {fileID: 0} m_DisabledSprite: {fileID: 0} m_AnimationTriggers: m_NormalTrigger: Normal m_HighlightedTrigger: Highlighted m_PressedTrigger: Pressed - m_SelectedTrigger: Highlighted m_DisabledTrigger: Disabled m_Interactable: 1 m_TargetGraphic: {fileID: 3643881633437836140} @@ -382,9 +390,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 3643881633437836137} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -414,8 +422,6 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] @@ -441,12 +447,13 @@ MonoBehaviour: m_fontColorGradientPreset: {fileID: 0} m_spriteAsset: {fileID: 0} m_tintAllSprites: 0 - m_StyleSheet: {fileID: 0} - m_TextStyleHashCode: 0 m_overrideHtmlColors: 0 m_faceColor: serializedVersion: 2 rgba: 4294967295 + m_outlineColor: + serializedVersion: 2 + rgba: 4278190080 m_fontSize: 18 m_fontSizeBase: 48 m_fontWeight: 400 @@ -454,42 +461,61 @@ MonoBehaviour: m_fontSizeMin: 18 m_fontSizeMax: 72 m_fontStyle: 0 - m_HorizontalAlignment: 2 - m_VerticalAlignment: 512 - m_textAlignment: 65535 + m_textAlignment: 514 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 + m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 + m_firstOverflowCharacterIndex: 0 m_linkedTextComponent: {fileID: 0} - parentLinkedComponent: {fileID: 0} + m_isLinkedTextComponent: 0 + m_isTextTruncated: 0 m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 + m_ignoreRectMaskCulling: 0 + m_ignoreCulling: 1 m_horizontalMapping: 0 m_verticalMapping: 0 m_uvLineOffset: 0 m_geometrySortingOrder: 0 - m_IsTextObjectScaleStatic: 0 m_VertexBufferAutoSizeReduction: 1 + m_firstVisibleCharacter: 0 m_useMaxVisibleDescender: 1 m_pageToDisplay: 1 m_margin: {x: 0, y: 0, z: 0, w: 0} + m_textInfo: + textComponent: {fileID: 3643881633927103010} + characterCount: 17 + spriteCount: 0 + spaceCount: 1 + wordCount: 2 + linkCount: 0 + lineCount: 16 + pageCount: 1 + materialCount: 1 m_isUsingLegacyAnimationComponent: 0 m_isVolumetricText: 0 + m_spriteAnimator: {fileID: 0} m_hasFontAssetChanged: 0 + m_subTextObjects: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} m_baseMaterial: {fileID: 0} m_maskOffset: {x: 0, y: 0, z: 0, w: 0} --- !u!114 &3643881633927103021 @@ -501,7 +527,7 @@ MonoBehaviour: m_GameObject: {fileID: 3643881633927103023} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, type: 3} m_Name: m_EditorClassIdentifier: m_IgnoreLayout: 0 @@ -522,8 +548,9 @@ GameObject: m_Component: - component: {fileID: 3643881634033459408} - component: {fileID: 3643881634033459414} + - component: {fileID: 3643881634033459409} m_Layer: 5 - m_Name: 'TMP SubMeshUI [Ubuntu-R SDF Material + LiberationSans SDF Atlas]' + m_Name: TMP SubMeshUI [Ubuntu-R SDF Material + LiberationSans SDF Atlas] m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -539,9 +566,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 3643881633221182925} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -556,6 +583,33 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 3643881634033459411} m_CullTransparentMesh: 0 +--- !u!114 &3643881634033459409 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3643881634033459411} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 058cba836c1846c3aa1c5fd2e28aea77, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_spriteAsset: {fileID: 0} + m_material: {fileID: 0} + m_sharedMaterial: {fileID: 0} + m_isDefaultMaterial: 0 + m_padding: 8.5625 + m_canvasRenderer: {fileID: 3643881634033459414} + m_TextComponent: {fileID: 3643881633221182914} + m_materialReferenceIndex: 1 --- !u!1 &3643881634325817959 GameObject: m_ObjectHideFlags: 0 @@ -585,9 +639,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 3643881633437836137} + m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 1, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -611,14 +665,12 @@ MonoBehaviour: m_GameObject: {fileID: 3643881634325817959} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} m_Color: {r: 0.8, g: 0.9333333, b: 1, a: 1} m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] @@ -631,7 +683,6 @@ MonoBehaviour: m_FillClockwise: 1 m_FillOrigin: 0 m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 --- !u!114 &3643881634325817957 MonoBehaviour: m_ObjectHideFlags: 0 @@ -641,7 +692,7 @@ MonoBehaviour: m_GameObject: {fileID: 3643881634325817959} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, type: 3} m_Name: m_EditorClassIdentifier: m_IgnoreLayout: 1 @@ -682,9 +733,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 3643881634854544289} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -708,14 +759,12 @@ MonoBehaviour: m_GameObject: {fileID: 3643881634576849061} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] @@ -728,7 +777,6 @@ MonoBehaviour: m_FillClockwise: 1 m_FillOrigin: 0 m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 --- !u!114 &3643881634576849048 MonoBehaviour: m_ObjectHideFlags: 0 @@ -738,7 +786,7 @@ MonoBehaviour: m_GameObject: {fileID: 3643881634576849061} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 86710e43de46f6f4bac7c8e50813a599, type: 3} + m_Script: {fileID: -1254083943, guid: f70555f144d8491a825f0804e09c671c, type: 3} m_Name: m_EditorClassIdentifier: m_AspectMode: 1 @@ -752,7 +800,7 @@ MonoBehaviour: m_GameObject: {fileID: 3643881634576849061} m_Enabled: 0 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Script: {fileID: 1741964061, guid: f70555f144d8491a825f0804e09c671c, type: 3} m_Name: m_EditorClassIdentifier: m_HorizontalFit: 0 @@ -786,9 +834,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 3643881633437836137} + m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 1} @@ -812,14 +860,12 @@ MonoBehaviour: m_GameObject: {fileID: 3643881634695350168} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} m_Color: {r: 0.8, g: 0.9333333, b: 1, a: 1} m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] @@ -832,7 +878,6 @@ MonoBehaviour: m_FillClockwise: 1 m_FillOrigin: 0 m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 --- !u!114 &3643881634695350174 MonoBehaviour: m_ObjectHideFlags: 0 @@ -842,7 +887,7 @@ MonoBehaviour: m_GameObject: {fileID: 3643881634695350168} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, type: 3} m_Name: m_EditorClassIdentifier: m_IgnoreLayout: 1 @@ -881,10 +926,10 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 3643881634576849050} m_Father: {fileID: 3643881633437836137} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -900,7 +945,7 @@ MonoBehaviour: m_GameObject: {fileID: 3643881634854544288} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, type: 3} m_Name: m_EditorClassIdentifier: m_IgnoreLayout: 0 @@ -920,7 +965,7 @@ MonoBehaviour: m_GameObject: {fileID: 3643881634854544288} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} + m_Script: {fileID: -405508275, guid: f70555f144d8491a825f0804e09c671c, type: 3} m_Name: m_EditorClassIdentifier: m_Padding: @@ -934,6 +979,3 @@ MonoBehaviour: m_ChildForceExpandHeight: 0 m_ChildControlWidth: 1 m_ChildControlHeight: 0 - m_ChildScaleWidth: 0 - m_ChildScaleHeight: 0 - m_ReverseArrangement: 0 diff --git a/Assets/Prefabs/UI/Dropdown Option.prefab b/Assets/Prefabs/UI/Dropdown Option.prefab index a93c5f568..0f99f8b8a 100644 --- a/Assets/Prefabs/UI/Dropdown Option.prefab +++ b/Assets/Prefabs/UI/Dropdown Option.prefab @@ -30,11 +30,11 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 5288995275525413887} - {fileID: 4420144871448733516} m_Father: {fileID: 0} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -103,7 +103,6 @@ MonoBehaviour: m_EditorClassIdentifier: m_Navigation: m_Mode: 3 - m_WrapAround: 0 m_SelectOnUp: {fileID: 0} m_SelectOnDown: {fileID: 0} m_SelectOnLeft: {fileID: 0} @@ -162,9 +161,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 4420144871272692262} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -238,23 +237,20 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 + m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -321,9 +317,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 4420144871272692262} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} diff --git a/Assets/Prefabs/UI/Flat InputField.prefab b/Assets/Prefabs/UI/Flat InputField.prefab index 9e59ba224..f5748ed7b 100644 --- a/Assets/Prefabs/UI/Flat InputField.prefab +++ b/Assets/Prefabs/UI/Flat InputField.prefab @@ -28,11 +28,11 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 4451361955953725104} - {fileID: 4451361956030022757} m_Father: {fileID: 4451361956630297310} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -89,9 +89,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 4451361954557856253} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -164,23 +164,20 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 0 + m_enableWordWrapping: 0 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 1 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -226,9 +223,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 4451361954557856253} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -301,23 +298,20 @@ MonoBehaviour: m_VerticalAlignment: 256 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 3 + m_enableWordWrapping: 0 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 1 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -364,10 +358,10 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 4451361954557856253} m_Father: {fileID: 0} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -476,13 +470,10 @@ MonoBehaviour: m_GlobalFontAsset: {fileID: 11400000, guid: 3fb7d873bb5a7944bb9a7c73c430c44b, type: 2} m_OnFocusSelectAll: 1 m_ResetOnDeActivation: 1 - m_KeepTextSelectionVisible: 0 m_RestoreOriginalTextOnEscape: 1 m_isRichTextEditingAllowed: 0 m_LineLimit: 0 - isAlert: 0 m_InputValidator: {fileID: 0} - m_ShouldActivateOnSelect: 1 --- !u!114 &3109909670730689337 MonoBehaviour: m_ObjectHideFlags: 0 diff --git a/Assets/Prefabs/UI/Input Display Container.prefab b/Assets/Prefabs/UI/Input Display Container.prefab index e0fe5c833..20f1b6c1a 100644 --- a/Assets/Prefabs/UI/Input Display Container.prefab +++ b/Assets/Prefabs/UI/Input Display Container.prefab @@ -26,10 +26,10 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 3575543201409287275} m_Father: {fileID: 3575543199475698844} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -64,9 +64,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 3575543201164511461} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -138,13 +138,13 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 3575543199328406134} - {fileID: 3575543201062286834} - {fileID: 3575543199601288280} - {fileID: 3575543201335647258} m_Father: {fileID: 0} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 0.5} @@ -217,9 +217,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 3575543200853098928} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -292,7 +292,6 @@ RectTransform: m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 0.8, y: 0.8, z: 1} - m_ConstrainProportionsScale: 0 m_Children: - {fileID: 3575543201164511461} - {fileID: 3575543200709404420} @@ -300,6 +299,7 @@ RectTransform: - {fileID: 3575543200853098928} - {fileID: 3575543200736016708} m_Father: {fileID: 3575543199475698844} + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 1, y: 0} m_AnchorMax: {x: 1, y: 0} @@ -373,11 +373,11 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 3575543200370154277} - {fileID: 3575543199949252307} m_Father: {fileID: 3575543201062286834} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -465,9 +465,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 3575543199809032539} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -534,9 +534,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 3575543200370154277} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -616,13 +616,13 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 3575543200306509116} - {fileID: 3575543201356857812} - {fileID: 3575543201337423529} - {fileID: 3575543200656285771} m_Father: {fileID: 3575543199809032539} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -743,7 +743,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 3468b3db8d419c745b12124f6432696b, type: 3} m_Name: m_EditorClassIdentifier: - SuppressDisable: 0 --- !u!114 &3575543200370154281 MonoBehaviour: m_ObjectHideFlags: 0 @@ -791,10 +790,10 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 3575543200396461816} m_Father: {fileID: 3575543199601288280} + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -906,7 +905,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 3468b3db8d419c745b12124f6432696b, type: 3} m_Name: m_EditorClassIdentifier: - SuppressDisable: 0 --- !u!114 &3575543200394488151 MonoBehaviour: m_ObjectHideFlags: 0 @@ -959,9 +957,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 3575543200394488147} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -1034,9 +1032,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 3575543200978094812} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -1110,23 +1108,20 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 + m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -1172,9 +1167,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 3575543200370154277} + m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0.5} m_AnchorMax: {x: 1, y: 1} @@ -1248,23 +1243,20 @@ MonoBehaviour: m_VerticalAlignment: 256 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 + m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -1310,9 +1302,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 3575543200736016708} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -1392,10 +1384,10 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 3575543201305645094} m_Father: {fileID: 3575543199601288280} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -1507,7 +1499,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 3468b3db8d419c745b12124f6432696b, type: 3} m_Name: m_EditorClassIdentifier: - SuppressDisable: 0 --- !u!114 &3575543200709404424 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1567,10 +1558,10 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 3575543200691046844} m_Father: {fileID: 3575543199601288280} + m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -1682,7 +1673,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 3468b3db8d419c745b12124f6432696b, type: 3} m_Name: m_EditorClassIdentifier: - SuppressDisable: 0 --- !u!114 &3575543200736016712 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1742,10 +1732,10 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 3575543199594005114} m_Father: {fileID: 3575543199601288280} + m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -1857,7 +1847,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 3468b3db8d419c745b12124f6432696b, type: 3} m_Name: m_EditorClassIdentifier: - SuppressDisable: 0 --- !u!114 &3575543200853098932 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1910,9 +1899,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 3575543201062286834} + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -1978,10 +1967,10 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 3575543200538069944} m_Father: {fileID: 3575543201062286834} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -2042,12 +2031,12 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 3575543200978094812} - {fileID: 3575543199809032539} - {fileID: 3575543200860056044} m_Father: {fileID: 3575543199475698844} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -2128,9 +2117,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 3575543201335647258} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -2232,23 +2221,20 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 + m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -2352,10 +2338,10 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 3575543199395697427} m_Father: {fileID: 3575543199601288280} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -2467,7 +2453,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 3468b3db8d419c745b12124f6432696b, type: 3} m_Name: m_EditorClassIdentifier: - SuppressDisable: 0 --- !u!114 &3575543201164511465 MonoBehaviour: m_ObjectHideFlags: 0 @@ -2520,9 +2505,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 3575543200709404420} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -2593,10 +2578,10 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 3575543201132091707} m_Father: {fileID: 3575543199475698844} + m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -2631,9 +2616,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 3575543200370154277} + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 0.5} @@ -2707,23 +2692,20 @@ MonoBehaviour: m_VerticalAlignment: 1024 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 + m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -2769,9 +2751,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 3575543200370154277} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -2845,9 +2827,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 3575543199328406134} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} diff --git a/Assets/Prefabs/UI/Inventory.prefab b/Assets/Prefabs/UI/Inventory.prefab index dd6baefd6..0addea4f8 100644 --- a/Assets/Prefabs/UI/Inventory.prefab +++ b/Assets/Prefabs/UI/Inventory.prefab @@ -28,9 +28,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 4075091371340814903} + m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 1, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -104,23 +104,20 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 + m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -166,9 +163,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 4075091371340814903} + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 1} @@ -242,23 +239,20 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 + m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -306,9 +300,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 6584545650613466935} + m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 1, y: 1} m_AnchorMax: {x: 1, y: 1} @@ -382,23 +376,20 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 + m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -506,10 +497,10 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 2279630452912159027} m_Father: {fileID: 2279630453233804081} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -544,9 +535,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 2279630452881931921} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -618,12 +609,12 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 2279630452951644481} - {fileID: 2279630453233804081} - {fileID: 2279630454002795611} m_Father: {fileID: 2279630453886260053} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -686,10 +677,10 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 2279630452592903581} m_Father: {fileID: 2279630454002795611} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -724,9 +715,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 2279630452357787793} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -800,10 +791,10 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 2279630453710142155} m_Father: {fileID: 2279630452842594753} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -890,9 +881,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 6584545650613466935} + m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 0} @@ -986,10 +977,10 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 2279630452357787793} m_Father: {fileID: 2279630452842594753} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -1117,9 +1108,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 2279630454000268454} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -1212,7 +1203,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 3468b3db8d419c745b12124f6432696b, type: 3} m_Name: m_EditorClassIdentifier: - SuppressDisable: 0 --- !u!114 &3026868749259999386 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1265,9 +1255,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 6584545650613466935} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -1341,23 +1331,20 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 + m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -1403,11 +1390,11 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 5904147203112258852} - {fileID: 2279630454000268454} m_Father: {fileID: 2279630452951644481} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -1481,12 +1468,12 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 6584545650613466935} - {fileID: 2279630452842594753} - {fileID: 4075091371340814903} m_Father: {fileID: 0} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -1506,7 +1493,6 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: Dialog: {fileID: 0} - DragParent: {fileID: 0} Flip: 0 Settings: {fileID: 0} GameManager: {fileID: 0} @@ -2326,7 +2312,6 @@ MonoBehaviour: CellBackgroundColor: {r: 0, g: 0, b: 0, a: 0.9019608} MinTempRange: 1 DoubleClickTime: 0.5 - HitDamageThreshold: 1 EmptyCells: [] --- !u!222 &6932930312706461541 CanvasRenderer: @@ -2394,11 +2379,11 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 2279630453345861720} - {fileID: 2862553520485687858} m_Father: {fileID: 2279630453710142155} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -2466,10 +2451,10 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 2279630452881931921} m_Father: {fileID: 2279630452842594753} + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 1, y: 0} m_AnchorMax: {x: 1, y: 0} @@ -2589,13 +2574,13 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 25087979752144322} - {fileID: 6451840322166179141} - {fileID: 8682495930185187424} - {fileID: 1941003311334506942} m_Father: {fileID: 2279630453886260053} + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -2631,10 +2616,10 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 5788397503820000463} m_Father: {fileID: 4075091371340814903} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -2719,7 +2704,6 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 4397116930423727094} - {fileID: 2279630453679143107} @@ -2728,6 +2712,7 @@ RectTransform: - {fileID: 5683613523479270443} - {fileID: 6462754505713931446} m_Father: {fileID: 2279630453886260053} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 1, y: 1} @@ -2788,9 +2773,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 25087979752144322} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -2863,9 +2848,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 2279630454000268454} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -2941,9 +2926,9 @@ RectTransform: m_LocalRotation: {x: 0, y: 0, z: -0.7071068, w: 0.7071068} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 6584545650613466935} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: -90} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -3097,9 +3082,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 3031152863755518086} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: -90} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -3251,9 +3236,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 2279630453710142155} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -3342,10 +3327,10 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 8871154407653395989} m_Father: {fileID: 6584545650613466935} + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -3400,9 +3385,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 4075091371340814903} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -3477,9 +3462,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 6584545650613466935} + m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -3555,23 +3540,20 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 + m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 diff --git a/Assets/Prefabs/UI/Main Menu Canvas.prefab b/Assets/Prefabs/UI/Main Menu Canvas.prefab index e185d1911..a03628ba0 100644 --- a/Assets/Prefabs/UI/Main Menu Canvas.prefab +++ b/Assets/Prefabs/UI/Main Menu Canvas.prefab @@ -29,10 +29,10 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 350889891057474423} m_Father: {fileID: 350889891632477145} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -118,9 +118,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 350889892050671116} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -193,9 +193,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 350889890423887027} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -270,10 +270,10 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 350889892050671116} m_Father: {fileID: 350889891632477145} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 1} @@ -366,11 +366,11 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 350889890423887027} - {fileID: 350889891628991064} m_Father: {fileID: 7329274282942065572} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -461,10 +461,10 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 350889890962861326} m_Father: {fileID: 350889891628991064} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -500,9 +500,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 8184616833802884024} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -596,11 +596,11 @@ RectTransform: m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 0.6666667, y: 0.6666667, z: 0.6666667} - m_ConstrainProportionsScale: 0 m_Children: - {fileID: 2261466211211207212} - {fileID: 7963881274223503427} m_Father: {fileID: 4533226043457584179} + m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -695,12 +695,12 @@ RectTransform: m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 0.6666667, y: 0.6666667, z: 0.6666667} - m_ConstrainProportionsScale: 0 m_Children: - {fileID: 4533226043526995714} - {fileID: 4533226043829246279} - {fileID: 4533226044611060154} m_Father: {fileID: 4533226043457584179} + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -788,9 +788,8 @@ MonoBehaviour: type: 3} StatSheet: {fileID: 0} CurveField: {fileID: 0} - WeaponGroupAssignment: {fileID: 0} Content: {fileID: 4533226043449861658} - DragParent: {fileID: 0} + SelectedChild: {fileID: 0} GameManager: {fileID: 0} CancelClickCatcher: {fileID: 725430339668194415} ButtonGroup: {fileID: 4533226044611060155} @@ -828,13 +827,13 @@ RectTransform: m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 0, y: 0, z: 0} - m_ConstrainProportionsScale: 0 m_Children: - {fileID: 8079387348638243065} - {fileID: 7201272822408223301} - {fileID: 4533226043449861658} - {fileID: 8184616833802884024} m_Father: {fileID: 0} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -858,9 +857,7 @@ Canvas: m_OverrideSorting: 0 m_OverridePixelPerfect: 0 m_SortingBucketNormalizedSize: 0 - m_VertexColorAlwaysGammaSpace: 0 m_AdditionalShaderChannelsFlag: 25 - m_UpdateRectTransformForStandalone: 0 m_SortingLayerID: 0 m_SortingOrder: 0 m_TargetDisplay: 0 @@ -916,9 +913,9 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 3d7c7b928d043a3449b93bce9de03d1c, type: 3} m_Name: m_EditorClassIdentifier: - CloudRenderer: {fileID: 0} Settings: {fileID: 11400000, guid: cd2344e2001a37544aab0960c164d4ff, type: 2} Dialog: {fileID: 4533226043449861657} + InGame: 0 PanelPrototype: {fileID: 7329274282942065594} FadeTime: 0.5 FadeDistance: 1024 @@ -953,9 +950,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 4533226043449861658} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -1048,9 +1045,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 4533226043449861658} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -1124,23 +1121,20 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 + m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -1185,9 +1179,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 4533226044611060154} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -1241,12 +1235,12 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 2381176780008325752} - {fileID: 4533226043924106331} - {fileID: 2381176779129949493} m_Father: {fileID: 4533226043449861658} + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -1305,10 +1299,10 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 7329274282942065572} m_Father: {fileID: 4533226043457584179} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -1344,9 +1338,9 @@ RectTransform: m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 0.6666667, y: 0.6666667, z: 0.6666667} - m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 4533226043457584179} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -1435,11 +1429,11 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 7329274283166941234} - {fileID: 350889891632477145} m_Father: {fileID: 8079387348638243065} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 1} @@ -1488,9 +1482,8 @@ MonoBehaviour: StatSheet: {fileID: 3416329628306957711, guid: 4f75723ed178a084e813965e84825bd4, type: 3} CurveField: {fileID: 0} - WeaponGroupAssignment: {fileID: 0} Content: {fileID: 350889891057474423} - DragParent: {fileID: 0} + SelectedChild: {fileID: 0} GameManager: {fileID: 0} --- !u!222 &7329274282942065577 CanvasRenderer: @@ -1580,9 +1573,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 7329274282942065572} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -1658,23 +1651,20 @@ MonoBehaviour: m_VerticalAlignment: 256 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: -20 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 + m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -1755,9 +1745,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 8184616833802884024} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -1817,7 +1807,6 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: - serializedVersion: 3 m_TransformParent: {fileID: 4533226044611060154} m_Modifications: - target: {fileID: 422905925398675622, guid: 2758dfa2744d7ad4d8877545189d116e, @@ -1900,11 +1889,6 @@ PrefabInstance: propertyPath: m_firstOverflowCharacterIndex value: 0 objectReference: {fileID: 0} - - target: {fileID: 1713457305180270767, guid: 2758dfa2744d7ad4d8877545189d116e, - type: 3} - propertyPath: 'm_ActiveFontFeatures.Array.data[0]' - value: 1801810542 - objectReference: {fileID: 0} - target: {fileID: 2297648055057363568, guid: 2758dfa2744d7ad4d8877545189d116e, type: 3} propertyPath: m_Pivot.x @@ -2096,28 +2080,7 @@ PrefabInstance: value: Confirm Button objectReference: {fileID: 0} m_RemovedComponents: [] - m_RemovedGameObjects: [] - m_AddedGameObjects: [] - m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 2758dfa2744d7ad4d8877545189d116e, type: 3} ---- !u!114 &1044359408896957406 stripped -MonoBehaviour: - m_CorrespondingSourceObject: {fileID: 3501282941175030939, guid: 2758dfa2744d7ad4d8877545189d116e, - type: 3} - m_PrefabInstance: {fileID: 4533226044147941189} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!224 &2381176779129949493 stripped -RectTransform: - m_CorrespondingSourceObject: {fileID: 2297648055057363568, guid: 2758dfa2744d7ad4d8877545189d116e, - type: 3} - m_PrefabInstance: {fileID: 4533226044147941189} - m_PrefabAsset: {fileID: 0} --- !u!114 &2967358985619754986 stripped MonoBehaviour: m_CorrespondingSourceObject: {fileID: 1713457305180270767, guid: 2758dfa2744d7ad4d8877545189d116e, @@ -2130,12 +2093,29 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} m_Name: m_EditorClassIdentifier: +--- !u!224 &2381176779129949493 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 2297648055057363568, guid: 2758dfa2744d7ad4d8877545189d116e, + type: 3} + m_PrefabInstance: {fileID: 4533226044147941189} + m_PrefabAsset: {fileID: 0} +--- !u!114 &1044359408896957406 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 3501282941175030939, guid: 2758dfa2744d7ad4d8877545189d116e, + type: 3} + m_PrefabInstance: {fileID: 4533226044147941189} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!1001 &4533226044873879560 PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: - serializedVersion: 3 m_TransformParent: {fileID: 4533226044611060154} m_Modifications: - target: {fileID: 422905925398675622, guid: 2758dfa2744d7ad4d8877545189d116e, @@ -2223,11 +2203,6 @@ PrefabInstance: propertyPath: m_firstOverflowCharacterIndex value: 0 objectReference: {fileID: 0} - - target: {fileID: 1713457305180270767, guid: 2758dfa2744d7ad4d8877545189d116e, - type: 3} - propertyPath: 'm_ActiveFontFeatures.Array.data[0]' - value: 1801810542 - objectReference: {fileID: 0} - target: {fileID: 2297648055057363568, guid: 2758dfa2744d7ad4d8877545189d116e, type: 3} propertyPath: m_Pivot.x @@ -2419,22 +2394,7 @@ PrefabInstance: value: Cancel Button objectReference: {fileID: 0} m_RemovedComponents: [] - m_RemovedGameObjects: [] - m_AddedGameObjects: [] - m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 2758dfa2744d7ad4d8877545189d116e, type: 3} ---- !u!114 &1044359407629948051 stripped -MonoBehaviour: - m_CorrespondingSourceObject: {fileID: 3501282941175030939, guid: 2758dfa2744d7ad4d8877545189d116e, - type: 3} - m_PrefabInstance: {fileID: 4533226044873879560} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} - m_Name: - m_EditorClassIdentifier: --- !u!224 &2381176780008325752 stripped RectTransform: m_CorrespondingSourceObject: {fileID: 2297648055057363568, guid: 2758dfa2744d7ad4d8877545189d116e, @@ -2453,3 +2413,15 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} m_Name: m_EditorClassIdentifier: +--- !u!114 &1044359407629948051 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 3501282941175030939, guid: 2758dfa2744d7ad4d8877545189d116e, + type: 3} + m_PrefabInstance: {fileID: 4533226044873879560} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: diff --git a/Assets/Prefabs/UI/Properties Panel/Fancy/Bool Field.prefab b/Assets/Prefabs/UI/Properties Panel/Fancy/Bool Field.prefab index 9fc83e309..84e750891 100644 --- a/Assets/Prefabs/UI/Properties Panel/Fancy/Bool Field.prefab +++ b/Assets/Prefabs/UI/Properties Panel/Fancy/Bool Field.prefab @@ -35,6 +35,7 @@ RectTransform: - {fileID: 7661950295498381397} - {fileID: 7661950294707789146} m_Father: {fileID: 0} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -151,6 +152,7 @@ RectTransform: m_Children: - {fileID: 7661950295217243554} m_Father: {fileID: 7661950294707789146} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -228,6 +230,7 @@ RectTransform: m_Children: - {fileID: 7661950294137596689} m_Father: {fileID: 7661950293931311387} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -347,6 +350,7 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 7661950294137596689} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.2, y: 0.2} m_AnchorMax: {x: 0.8, y: 0.8} @@ -423,6 +427,7 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 7661950293931311387} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -496,23 +501,20 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 + m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 diff --git a/Assets/Prefabs/UI/Properties Panel/Fancy/Button Field.prefab b/Assets/Prefabs/UI/Properties Panel/Fancy/Button Field.prefab index 2515f64a0..bc492fa08 100644 --- a/Assets/Prefabs/UI/Properties Panel/Fancy/Button Field.prefab +++ b/Assets/Prefabs/UI/Properties Panel/Fancy/Button Field.prefab @@ -28,9 +28,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 790814198576895811} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -104,23 +104,20 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 + m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -168,10 +165,10 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 790814197411605233} m_Father: {fileID: 6566784227922820063} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -310,11 +307,11 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 6566784228232816309} - {fileID: 790814198576895811} m_Father: {fileID: 0} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -429,9 +426,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 6566784227922820063} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -505,23 +502,20 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 + m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 diff --git a/Assets/Prefabs/UI/Properties Panel/Fancy/Curve Field.prefab b/Assets/Prefabs/UI/Properties Panel/Fancy/Curve Field.prefab index 5cbdc480d..ea233162a 100644 --- a/Assets/Prefabs/UI/Properties Panel/Fancy/Curve Field.prefab +++ b/Assets/Prefabs/UI/Properties Panel/Fancy/Curve Field.prefab @@ -28,9 +28,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 5150349054046905327} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.25} m_AnchorMax: {x: 0.5, y: 0.25} @@ -103,9 +103,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 5150349054046905327} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0} m_AnchorMax: {x: 0.5, y: 0.25} @@ -179,9 +179,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 4525093026741206958} + m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 1, y: 1} @@ -255,23 +255,20 @@ MonoBehaviour: m_VerticalAlignment: 256 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 + m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -338,9 +335,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 4525093026741206958} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -414,23 +411,20 @@ MonoBehaviour: m_VerticalAlignment: 256 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 + m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -496,9 +490,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 4525093026741206958} + m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 0} @@ -572,9 +566,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 4525093026741206958} + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0} m_AnchorMax: {x: 0.5, y: 0} @@ -648,23 +642,20 @@ MonoBehaviour: m_VerticalAlignment: 256 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 + m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -731,9 +722,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 4525093026741206958} + m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 1, y: 0} m_AnchorMax: {x: 1, y: 0} @@ -807,23 +798,20 @@ MonoBehaviour: m_VerticalAlignment: 256 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 + m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -889,11 +877,11 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 2039464565} - {fileID: 2008487938} m_Father: {fileID: 4525093026741206958} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -976,7 +964,6 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 5150349054046905327} - {fileID: 8457868409217303238} @@ -985,6 +972,7 @@ RectTransform: - {fileID: 5150349052900313153} - {fileID: 7117984985042789648} m_Father: {fileID: 0} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} diff --git a/Assets/Prefabs/UI/Properties Panel/Fancy/Enum Field.prefab b/Assets/Prefabs/UI/Properties Panel/Fancy/Enum Field.prefab index 4634a2775..61980ca29 100644 --- a/Assets/Prefabs/UI/Properties Panel/Fancy/Enum Field.prefab +++ b/Assets/Prefabs/UI/Properties Panel/Fancy/Enum Field.prefab @@ -31,6 +31,7 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1444953513611246322} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -104,23 +105,20 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 + m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -173,6 +171,7 @@ RectTransform: - {fileID: 1444953513591056483} - {fileID: 1444953514355799430} m_Father: {fileID: 1444953514731475974} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -313,6 +312,7 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1444953514731475974} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -386,23 +386,20 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 + m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -471,6 +468,7 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1444953513611246322} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: -90} m_AnchorMin: {x: 1, y: 0.5} m_AnchorMax: {x: 1, y: 0.5} @@ -550,6 +548,7 @@ RectTransform: - {fileID: 1444953513817938006} - {fileID: 1444953513611246322} m_Father: {fileID: 0} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} diff --git a/Assets/Prefabs/UI/Properties Panel/Fancy/Increment Field.prefab b/Assets/Prefabs/UI/Properties Panel/Fancy/Increment Field.prefab index 66fbba81a..112cd3b81 100644 --- a/Assets/Prefabs/UI/Properties Panel/Fancy/Increment Field.prefab +++ b/Assets/Prefabs/UI/Properties Panel/Fancy/Increment Field.prefab @@ -33,6 +33,7 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 2544338102157427055} + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 1, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -168,6 +169,7 @@ RectTransform: - {fileID: 7863247503782211248} - {fileID: 8483308900631515678} m_Father: {fileID: 6770904480725292323} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -226,6 +228,7 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 6770904480725292323} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -299,23 +302,20 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 + m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -388,6 +388,7 @@ RectTransform: - {fileID: 6770904480229951561} - {fileID: 2544338102157427055} m_Father: {fileID: 0} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -507,6 +508,7 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 2544338102157427055} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 1, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -640,6 +642,7 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 2544338102157427055} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -713,23 +716,20 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 + m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 diff --git a/Assets/Prefabs/UI/Properties Panel/Fancy/Input Field.prefab b/Assets/Prefabs/UI/Properties Panel/Fancy/Input Field.prefab index afc077a82..bdcedb118 100644 --- a/Assets/Prefabs/UI/Properties Panel/Fancy/Input Field.prefab +++ b/Assets/Prefabs/UI/Properties Panel/Fancy/Input Field.prefab @@ -35,6 +35,7 @@ RectTransform: - {fileID: 23155009713813574} - {fileID: 8734896053364945145} m_Father: {fileID: 0} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -151,6 +152,7 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 23155009655760172} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -224,23 +226,20 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 + m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -309,6 +308,7 @@ RectTransform: m_Children: - {fileID: 5938949450847760329} m_Father: {fileID: 23155009655760172} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -367,6 +367,7 @@ RectTransform: - {fileID: 5938949451508194215} - {fileID: 5938949451316023666} m_Father: {fileID: 5938949450847760329} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -421,6 +422,7 @@ RectTransform: m_Children: - {fileID: 5938949450758544618} m_Father: {fileID: 8734896053364945145} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -559,13 +561,10 @@ MonoBehaviour: m_GlobalFontAsset: {fileID: 11400000, guid: 9dcd07b95faae7641a3ff6fccab43c32, type: 2} m_OnFocusSelectAll: 1 m_ResetOnDeActivation: 1 - m_KeepTextSelectionVisible: 0 m_RestoreOriginalTextOnEscape: 1 m_isRichTextEditingAllowed: 0 m_LineLimit: 0 - isAlert: 0 m_InputValidator: {fileID: 0} - m_ShouldActivateOnSelect: 1 --- !u!114 &1618696626055083017 MonoBehaviour: m_ObjectHideFlags: 0 @@ -617,6 +616,7 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 5938949450758544618} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -690,23 +690,20 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 3 + m_enableWordWrapping: 0 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 1 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -755,6 +752,7 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 5938949450758544618} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -828,23 +826,20 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 0 + m_enableWordWrapping: 0 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 1 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 diff --git a/Assets/Prefabs/UI/Properties Panel/Fancy/Progress Field.prefab b/Assets/Prefabs/UI/Properties Panel/Fancy/Progress Field.prefab index 18872559c..c9200c393 100644 --- a/Assets/Prefabs/UI/Properties Panel/Fancy/Progress Field.prefab +++ b/Assets/Prefabs/UI/Properties Panel/Fancy/Progress Field.prefab @@ -31,6 +31,7 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 8181761431199775037} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -106,6 +107,7 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 8181761431199775037} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -185,6 +187,7 @@ RectTransform: - {fileID: 3301729265189646952} - {fileID: 8626591645481506733} m_Father: {fileID: 0} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -301,6 +304,7 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 3301729265155698787} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -374,23 +378,20 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 + m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -459,6 +460,7 @@ RectTransform: - {fileID: 4052465884214141673} - {fileID: 1684719062263664779} m_Father: {fileID: 8626591645481506733} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -497,6 +499,7 @@ RectTransform: m_Children: - {fileID: 8181761431199775037} m_Father: {fileID: 3301729265155698787} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} diff --git a/Assets/Prefabs/UI/Properties Panel/Fancy/Property Label.prefab b/Assets/Prefabs/UI/Properties Panel/Fancy/Property Label.prefab index 599a29f50..6ec1c92cc 100644 --- a/Assets/Prefabs/UI/Properties Panel/Fancy/Property Label.prefab +++ b/Assets/Prefabs/UI/Properties Panel/Fancy/Property Label.prefab @@ -32,6 +32,7 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 2677123916507168719} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -105,23 +106,20 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 + m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -194,6 +192,7 @@ RectTransform: - {fileID: 2677123916028371621} - {fileID: 6602089867192183683} m_Father: {fileID: 0} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -310,6 +309,7 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 2677123916507168719} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -383,23 +383,20 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 + m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 diff --git a/Assets/Prefabs/UI/Properties Panel/Fancy/Property.prefab b/Assets/Prefabs/UI/Properties Panel/Fancy/Property.prefab index 6c64288ee..fd7063dc1 100644 --- a/Assets/Prefabs/UI/Properties Panel/Fancy/Property.prefab +++ b/Assets/Prefabs/UI/Properties Panel/Fancy/Property.prefab @@ -29,9 +29,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 9159917045172241900} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -107,23 +107,20 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 + m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -191,10 +188,10 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 9159917045079857286} m_Father: {fileID: 0} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} diff --git a/Assets/Prefabs/UI/Properties Panel/Fancy/Ranged Float Field.prefab b/Assets/Prefabs/UI/Properties Panel/Fancy/Ranged Float Field.prefab index f195ba08f..5821edb01 100644 --- a/Assets/Prefabs/UI/Properties Panel/Fancy/Ranged Float Field.prefab +++ b/Assets/Prefabs/UI/Properties Panel/Fancy/Ranged Float Field.prefab @@ -31,6 +31,7 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 7146463267720429741} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0.5} m_AnchorMax: {x: 1, y: 0.5} @@ -105,6 +106,7 @@ RectTransform: m_Children: - {fileID: 3436413162678517982} m_Father: {fileID: 7146463267720429741} + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0.5} m_AnchorMax: {x: 1, y: 0.5} @@ -142,6 +144,7 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 7282863425963355709} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -216,6 +219,7 @@ RectTransform: m_Children: - {fileID: 287045173602649995} m_Father: {fileID: 7146463267720429741} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0.5} m_AnchorMax: {x: 1, y: 0.5} @@ -254,6 +258,7 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 3222204141728529077} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -348,6 +353,7 @@ RectTransform: - {fileID: 4127690186274268520} - {fileID: 7146463267720429741} m_Father: {fileID: 0} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -484,6 +490,7 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 4127690186169542499} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -557,23 +564,20 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 + m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -645,6 +649,7 @@ RectTransform: - {fileID: 7282863425963355709} - {fileID: 3222204141728529077} m_Father: {fileID: 4127690186169542499} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} diff --git a/Assets/Prefabs/UI/Properties Panel/Fancy/Stat.prefab b/Assets/Prefabs/UI/Properties Panel/Fancy/Stat.prefab index 4e3669a40..fcbe746fb 100644 --- a/Assets/Prefabs/UI/Properties Panel/Fancy/Stat.prefab +++ b/Assets/Prefabs/UI/Properties Panel/Fancy/Stat.prefab @@ -29,11 +29,11 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 215031283457978355} - {fileID: 6087143909423189777} m_Father: {fileID: 0} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -120,9 +120,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 169101331738242590} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 0.5} @@ -196,23 +196,20 @@ MonoBehaviour: m_VerticalAlignment: 256 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 + m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -258,9 +255,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 169101331738242590} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0.5} m_AnchorMax: {x: 1, y: 1} @@ -334,23 +331,20 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 + m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 diff --git a/Assets/Prefabs/UI/Properties Panel/Fancy/Weapon Group.prefab b/Assets/Prefabs/UI/Properties Panel/Fancy/Weapon Group.prefab index a27bdfb46..95677030e 100644 --- a/Assets/Prefabs/UI/Properties Panel/Fancy/Weapon Group.prefab +++ b/Assets/Prefabs/UI/Properties Panel/Fancy/Weapon Group.prefab @@ -29,9 +29,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 7093141058661617964} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -105,23 +105,20 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 + m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -211,9 +208,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 7093141058661617964} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -291,11 +288,11 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 8854537499952373070} - {fileID: 8854537499097178562} m_Father: {fileID: 0} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} diff --git a/Assets/Prefabs/UI/Properties Panel/Fancy/Weapon Groups.prefab b/Assets/Prefabs/UI/Properties Panel/Fancy/Weapon Groups.prefab index c0ed5af9b..77e704a12 100644 --- a/Assets/Prefabs/UI/Properties Panel/Fancy/Weapon Groups.prefab +++ b/Assets/Prefabs/UI/Properties Panel/Fancy/Weapon Groups.prefab @@ -28,9 +28,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 7017012055636029233} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0.5} m_AnchorMax: {x: 1, y: 1} @@ -104,23 +104,20 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 + m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -165,9 +162,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 7017012055636029233} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 0} @@ -231,11 +228,11 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 7044292112900681436} - {fileID: 4617351576505394386} m_Father: {fileID: 0} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} diff --git a/Assets/Prefabs/UI/Properties Panel/Properties.prefab b/Assets/Prefabs/UI/Properties Panel/Properties.prefab index d51addf62..29d281e03 100644 --- a/Assets/Prefabs/UI/Properties Panel/Properties.prefab +++ b/Assets/Prefabs/UI/Properties Panel/Properties.prefab @@ -28,9 +28,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 257019180622654292} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -103,9 +103,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 257019180101986795} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -181,10 +181,10 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 257019179596293679} m_Father: {fileID: 257019181563268737} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -268,10 +268,10 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 257019179550429270} m_Father: {fileID: 257019181577240320} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -306,11 +306,11 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 257019180101986795} - {fileID: 257019181577240320} m_Father: {fileID: 7131821417165215484} + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -383,10 +383,10 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 257019180622654292} m_Father: {fileID: 257019181563268737} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 1, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -479,9 +479,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 7131821417165215484} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 1, y: 1} @@ -575,9 +575,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 7131821417165215484} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 1, y: 1} @@ -651,23 +651,20 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 + m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -734,12 +731,12 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 7131821417072393578} - {fileID: 7131821415452796888} - {fileID: 257019181563268737} m_Father: {fileID: 0} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 1, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -789,10 +786,10 @@ MonoBehaviour: type: 3} CurveField: {fileID: 3018914896466881005, guid: 168887bbd3de8c74eb3f06d3d46dda4e, type: 3} + Content: {fileID: 257019179596293679} WeaponGroupAssignment: {fileID: 8654742830357802168, guid: fbe6efeb205a68946af7a6f1cb8b9904, type: 3} - Content: {fileID: 257019179596293679} - DragParent: {fileID: 0} + SelectedChild: {fileID: 0} GameManager: {fileID: 0} --- !u!222 &7131821417165215473 CanvasRenderer: diff --git a/Assets/Prefabs/UI/Properties Panel/Property Button.prefab b/Assets/Prefabs/UI/Properties Panel/Property Button.prefab index 440b6cbc2..342160309 100644 --- a/Assets/Prefabs/UI/Properties Panel/Property Button.prefab +++ b/Assets/Prefabs/UI/Properties Panel/Property Button.prefab @@ -29,9 +29,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1613450655389604793} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -106,23 +106,20 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 + m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -190,11 +187,11 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 7085828711539161696} - {fileID: 1613450655044732627} m_Father: {fileID: 0} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -322,9 +319,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1613450655389604793} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} diff --git a/Assets/Prefabs/UI/Properties Panel/Property List 1.prefab b/Assets/Prefabs/UI/Properties Panel/Property List 1.prefab index e2c9744d6..f776c2be8 100644 --- a/Assets/Prefabs/UI/Properties Panel/Property List 1.prefab +++ b/Assets/Prefabs/UI/Properties Panel/Property List 1.prefab @@ -29,9 +29,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 2088721703295321218} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 1, y: 1} @@ -105,23 +105,20 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 + m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -189,12 +186,12 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 6724740944390240338} - {fileID: 2088721703192714102} - {fileID: 2118837324186690404} m_Father: {fileID: 0} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -286,12 +283,8 @@ MonoBehaviour: type: 3} IncrementField: {fileID: 5486709585343280439, guid: 9c14c92a1a08b0a4fb4f6aa6f8504082, type: 3} - StatSheet: {fileID: 0} - CurveField: {fileID: 0} - WeaponGroupAssignment: {fileID: 0} Content: {fileID: 0} - DragParent: {fileID: 0} - GameManager: {fileID: 0} + SelectedChild: {fileID: 0} FoldoutIcon: {fileID: 6485458701090981364} FoldoutRotationDamping: 10 Button: {fileID: 2066200247} @@ -371,9 +364,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 2088721703295321218} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -467,9 +460,9 @@ RectTransform: m_LocalRotation: {x: 0, y: 0, z: -0.7071068, w: 0.7071068} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 2088721703295321218} + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: -90} m_AnchorMin: {x: 1, y: 1} m_AnchorMax: {x: 1, y: 1} diff --git a/Assets/Prefabs/UI/Properties Panel/Property List.prefab b/Assets/Prefabs/UI/Properties Panel/Property List.prefab index d99bbf8c3..a9a55945f 100644 --- a/Assets/Prefabs/UI/Properties Panel/Property List.prefab +++ b/Assets/Prefabs/UI/Properties Panel/Property List.prefab @@ -29,9 +29,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 2088721703295321218} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 1, y: 1} @@ -105,23 +105,20 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 + m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -189,12 +186,12 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 6724740944390240338} - {fileID: 2088721703192714102} - {fileID: 2118837324186690404} m_Father: {fileID: 0} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -286,12 +283,8 @@ MonoBehaviour: type: 3} IncrementField: {fileID: 5486709585343280439, guid: 9c14c92a1a08b0a4fb4f6aa6f8504082, type: 3} - StatSheet: {fileID: 0} - CurveField: {fileID: 0} - WeaponGroupAssignment: {fileID: 0} Content: {fileID: 0} - DragParent: {fileID: 0} - GameManager: {fileID: 0} + SelectedChild: {fileID: 0} FoldoutIcon: {fileID: 6485458701090981364} FoldoutRotationDamping: 10 Button: {fileID: 2066200247} @@ -371,9 +364,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 2088721703295321218} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -467,9 +460,9 @@ RectTransform: m_LocalRotation: {x: 0, y: 0, z: -0.7071068, w: 0.7071068} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 2088721703295321218} + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: -90} m_AnchorMin: {x: 1, y: 1} m_AnchorMax: {x: 1, y: 1} diff --git a/Assets/Prefabs/UI/Properties Panel/Property Section.prefab b/Assets/Prefabs/UI/Properties Panel/Property Section.prefab index 2d2ccb36c..f0629b763 100644 --- a/Assets/Prefabs/UI/Properties Panel/Property Section.prefab +++ b/Assets/Prefabs/UI/Properties Panel/Property Section.prefab @@ -28,9 +28,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1026668114703092140} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -104,23 +104,20 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 + m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -165,10 +162,10 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 1026668113805589148} m_Father: {fileID: 0} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} diff --git a/Assets/Prefabs/UI/Properties Panel/Simple/Attribute.prefab b/Assets/Prefabs/UI/Properties Panel/Simple/Attribute.prefab index c19b97642..dbad2c53d 100644 --- a/Assets/Prefabs/UI/Properties Panel/Simple/Attribute.prefab +++ b/Assets/Prefabs/UI/Properties Panel/Simple/Attribute.prefab @@ -28,9 +28,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 4958798766822876479} + m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 0} @@ -60,15 +60,13 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] m_text: efficient/organized m_isRightToLeft: 0 - m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} - m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontAsset: {fileID: 11400000, guid: ef74c4c30ca5ced4489f28b914006aad, type: 2} + m_sharedMaterial: {fileID: 2100000, guid: 52bc194c171fd114e9a962923283262d, type: 2} m_fontSharedMaterials: [] m_fontMaterial: {fileID: 0} m_fontMaterials: [] @@ -86,12 +84,13 @@ MonoBehaviour: m_fontColorGradientPreset: {fileID: 0} m_spriteAsset: {fileID: 0} m_tintAllSprites: 0 - m_StyleSheet: {fileID: 0} - m_TextStyleHashCode: 0 m_overrideHtmlColors: 0 m_faceColor: serializedVersion: 2 rgba: 4294967295 + m_outlineColor: + serializedVersion: 2 + rgba: 4278190080 m_fontSize: 8 m_fontSizeBase: 8 m_fontWeight: 400 @@ -99,42 +98,61 @@ MonoBehaviour: m_fontSizeMin: 18 m_fontSizeMax: 72 m_fontStyle: 0 - m_HorizontalAlignment: 4 - m_VerticalAlignment: 1024 - m_textAlignment: 65535 + m_textAlignment: 1028 m_characterSpacing: 1.5 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 + m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 + m_firstOverflowCharacterIndex: -1 m_linkedTextComponent: {fileID: 0} - parentLinkedComponent: {fileID: 0} + m_isLinkedTextComponent: 0 + m_isTextTruncated: 0 m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 + m_ignoreRectMaskCulling: 0 + m_ignoreCulling: 1 m_horizontalMapping: 0 m_verticalMapping: 0 m_uvLineOffset: 0 m_geometrySortingOrder: 0 - m_IsTextObjectScaleStatic: 0 m_VertexBufferAutoSizeReduction: 1 + m_firstVisibleCharacter: 0 m_useMaxVisibleDescender: 1 m_pageToDisplay: 1 m_margin: {x: 0, y: 0, z: 0, w: 0} + m_textInfo: + textComponent: {fileID: 4958798766555897797} + characterCount: 19 + spriteCount: 0 + spaceCount: 0 + wordCount: 2 + linkCount: 0 + lineCount: 1 + pageCount: 1 + materialCount: 1 m_isUsingLegacyAnimationComponent: 0 m_isVolumetricText: 0 + m_spriteAnimator: {fileID: 0} m_hasFontAssetChanged: 0 + m_subTextObjects: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} m_baseMaterial: {fileID: 0} m_maskOffset: {x: 0, y: 0, z: 0, w: 0} --- !u!1 &4958798766635474175 @@ -165,9 +183,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 4958798768237988480} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -191,14 +209,12 @@ MonoBehaviour: m_GameObject: {fileID: 4958798766635474175} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} m_Color: {r: 1, g: 0.44583336, b: 0.050000012, a: 1} m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] @@ -211,7 +227,6 @@ MonoBehaviour: m_FillClockwise: 1 m_FillOrigin: 0 m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 --- !u!1 &4958798766822876478 GameObject: m_ObjectHideFlags: 0 @@ -240,13 +255,13 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 4958798767036921042} - {fileID: 4958798767833643858} - {fileID: 4958798767855898775} - {fileID: 4958798766555897796} m_Father: {fileID: 0} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -262,7 +277,7 @@ MonoBehaviour: m_GameObject: {fileID: 4958798766822876478} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, type: 3} m_Name: m_EditorClassIdentifier: m_IgnoreLayout: 0 @@ -317,9 +332,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 4958798766822876479} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 1, y: 1} @@ -349,8 +364,6 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] @@ -376,12 +389,13 @@ MonoBehaviour: m_fontColorGradientPreset: {fileID: 0} m_spriteAsset: {fileID: 0} m_tintAllSprites: 0 - m_StyleSheet: {fileID: 0} - m_TextStyleHashCode: 0 m_overrideHtmlColors: 0 m_faceColor: serializedVersion: 2 rgba: 4294967295 + m_outlineColor: + serializedVersion: 2 + rgba: 4278190080 m_fontSize: 20 m_fontSizeBase: 20 m_fontWeight: 400 @@ -389,42 +403,61 @@ MonoBehaviour: m_fontSizeMin: 18 m_fontSizeMax: 72 m_fontStyle: 0 - m_HorizontalAlignment: 2 - m_VerticalAlignment: 256 - m_textAlignment: 65535 + m_textAlignment: 258 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 + m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 + m_firstOverflowCharacterIndex: -1 m_linkedTextComponent: {fileID: 0} - parentLinkedComponent: {fileID: 0} + m_isLinkedTextComponent: 0 + m_isTextTruncated: 0 m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 + m_ignoreRectMaskCulling: 0 + m_ignoreCulling: 1 m_horizontalMapping: 0 m_verticalMapping: 0 m_uvLineOffset: 0 m_geometrySortingOrder: 0 - m_IsTextObjectScaleStatic: 0 m_VertexBufferAutoSizeReduction: 1 + m_firstVisibleCharacter: 0 m_useMaxVisibleDescender: 1 m_pageToDisplay: 1 m_margin: {x: 0, y: 0, z: 0, w: 0} + m_textInfo: + textComponent: {fileID: 4958798767036921043} + characterCount: 18 + spriteCount: 0 + spaceCount: 1 + wordCount: 1 + linkCount: 0 + lineCount: 1 + pageCount: 1 + materialCount: 1 m_isUsingLegacyAnimationComponent: 0 m_isVolumetricText: 0 + m_spriteAnimator: {fileID: 0} m_hasFontAssetChanged: 0 + m_subTextObjects: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} m_baseMaterial: {fileID: 0} m_maskOffset: {x: 0, y: 0, z: 0, w: 0} --- !u!1 &4958798767101845646 @@ -455,9 +488,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 4958798768306156651} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -481,14 +514,12 @@ MonoBehaviour: m_GameObject: {fileID: 4958798767101845646} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} m_Color: {r: 1, g: 0.44583336, b: 0.050000012, a: 1} m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] @@ -501,7 +532,6 @@ MonoBehaviour: m_FillClockwise: 1 m_FillOrigin: 0 m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 --- !u!1 &4958798767393056018 GameObject: m_ObjectHideFlags: 0 @@ -531,14 +561,14 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 4958798767885421271} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} + m_AnchorMin: {x: 0.332, y: 0} + m_AnchorMax: {x: 0.332, y: 1} m_AnchoredPosition: {x: 0, y: -2} - m_SizeDelta: {x: 12.599999, y: 4} + m_SizeDelta: {x: 0, y: 4} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &4958798767393056030 CanvasRenderer: @@ -557,14 +587,12 @@ MonoBehaviour: m_GameObject: {fileID: 4958798767393056018} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} m_Color: {r: 0.8, g: 0.9333333, b: 1, a: 1} m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] @@ -577,7 +605,6 @@ MonoBehaviour: m_FillClockwise: 1 m_FillOrigin: 0 m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 --- !u!114 &4958798767393056028 MonoBehaviour: m_ObjectHideFlags: 0 @@ -587,7 +614,7 @@ MonoBehaviour: m_GameObject: {fileID: 4958798767393056018} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 86710e43de46f6f4bac7c8e50813a599, type: 3} + m_Script: {fileID: -1254083943, guid: f70555f144d8491a825f0804e09c671c, type: 3} m_Name: m_EditorClassIdentifier: m_AspectMode: 2 @@ -619,12 +646,12 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 4958798768237988480} - {fileID: 4958798768306156651} - {fileID: 4958798767966920791} m_Father: {fileID: 4958798766822876479} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0.5} m_AnchorMax: {x: 1, y: 0.5} @@ -640,12 +667,11 @@ MonoBehaviour: m_GameObject: {fileID: 4958798767833643857} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 67db9e8f0e2ae9c40bc1e2b64352a6b4, type: 3} + m_Script: {fileID: -113659843, guid: f70555f144d8491a825f0804e09c671c, type: 3} m_Name: m_EditorClassIdentifier: m_Navigation: m_Mode: 3 - m_WrapAround: 0 m_SelectOnUp: {fileID: 0} m_SelectOnDown: {fileID: 0} m_SelectOnLeft: {fileID: 0} @@ -655,20 +681,17 @@ MonoBehaviour: m_NormalColor: {r: 1, g: 1, b: 1, a: 1} m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} m_ColorMultiplier: 1 m_FadeDuration: 0.1 m_SpriteState: m_HighlightedSprite: {fileID: 0} m_PressedSprite: {fileID: 0} - m_SelectedSprite: {fileID: 0} m_DisabledSprite: {fileID: 0} m_AnimationTriggers: m_NormalTrigger: Normal m_HighlightedTrigger: Highlighted m_PressedTrigger: Pressed - m_SelectedTrigger: Highlighted m_DisabledTrigger: Disabled m_Interactable: 0 m_TargetGraphic: {fileID: 0} @@ -710,9 +733,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 4958798766822876479} + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 0} @@ -742,15 +765,13 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] m_text: easy-going/careless m_isRightToLeft: 0 - m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} - m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontAsset: {fileID: 11400000, guid: ef74c4c30ca5ced4489f28b914006aad, type: 2} + m_sharedMaterial: {fileID: 2100000, guid: 006954f79490ab54bbc51d74b44d6e1c, type: 2} m_fontSharedMaterials: [] m_fontMaterial: {fileID: 0} m_fontMaterials: [] @@ -768,12 +789,13 @@ MonoBehaviour: m_fontColorGradientPreset: {fileID: 0} m_spriteAsset: {fileID: 0} m_tintAllSprites: 0 - m_StyleSheet: {fileID: 0} - m_TextStyleHashCode: 0 m_overrideHtmlColors: 0 m_faceColor: serializedVersion: 2 rgba: 4294967295 + m_outlineColor: + serializedVersion: 2 + rgba: 4278190080 m_fontSize: 8 m_fontSizeBase: 8 m_fontWeight: 400 @@ -781,42 +803,61 @@ MonoBehaviour: m_fontSizeMin: 18 m_fontSizeMax: 72 m_fontStyle: 0 - m_HorizontalAlignment: 1 - m_VerticalAlignment: 1024 - m_textAlignment: 65535 + m_textAlignment: 1025 m_characterSpacing: 1.5 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 + m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 + m_firstOverflowCharacterIndex: -1 m_linkedTextComponent: {fileID: 0} - parentLinkedComponent: {fileID: 0} + m_isLinkedTextComponent: 0 + m_isTextTruncated: 0 m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 + m_ignoreRectMaskCulling: 0 + m_ignoreCulling: 1 m_horizontalMapping: 0 m_verticalMapping: 0 m_uvLineOffset: 0 m_geometrySortingOrder: 0 - m_IsTextObjectScaleStatic: 0 m_VertexBufferAutoSizeReduction: 1 + m_firstVisibleCharacter: 0 m_useMaxVisibleDescender: 1 m_pageToDisplay: 1 m_margin: {x: 0, y: 0, z: 0, w: 0} + m_textInfo: + textComponent: {fileID: 4958798767855898768} + characterCount: 19 + spriteCount: 0 + spaceCount: 0 + wordCount: 2 + linkCount: 0 + lineCount: 1 + pageCount: 1 + materialCount: 1 m_isUsingLegacyAnimationComponent: 0 m_isVolumetricText: 0 + m_spriteAnimator: {fileID: 0} m_hasFontAssetChanged: 0 + m_subTextObjects: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} m_baseMaterial: {fileID: 0} m_maskOffset: {x: 0, y: 0, z: 0, w: 0} --- !u!1 &4958798767885421270 @@ -845,10 +886,10 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 4958798767393056019} m_Father: {fileID: 4958798768237988480} + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -883,9 +924,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 4958798767833643858} + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0.35} m_AnchorMax: {x: 1, y: 0.65} @@ -909,14 +950,12 @@ MonoBehaviour: m_GameObject: {fileID: 4958798767966920790} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} m_Color: {r: 0.8, g: 0.9333333, b: 1, a: 1} m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] @@ -929,7 +968,6 @@ MonoBehaviour: m_FillClockwise: 1 m_FillOrigin: 0 m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 --- !u!1 &4958798768237988487 GameObject: m_ObjectHideFlags: 0 @@ -959,12 +997,12 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 4958798768341589565} - {fileID: 4958798766635474168} - {fileID: 4958798767885421271} m_Father: {fileID: 4958798767833643858} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0.35} m_AnchorMax: {x: 1, y: 0.65} @@ -988,14 +1026,12 @@ MonoBehaviour: m_GameObject: {fileID: 4958798768237988487} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} m_Color: {r: 0, g: 0.06416668, b: 0.154, a: 1} m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] @@ -1008,7 +1044,6 @@ MonoBehaviour: m_FillClockwise: 1 m_FillOrigin: 0 m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 --- !u!114 &4958798768237988481 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1018,7 +1053,7 @@ MonoBehaviour: m_GameObject: {fileID: 4958798768237988487} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3} + m_Script: {fileID: -1200242548, guid: f70555f144d8491a825f0804e09c671c, type: 3} m_Name: m_EditorClassIdentifier: m_ShowMaskGraphic: 0 @@ -1048,10 +1083,10 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 4958798767101845647} m_Father: {fileID: 4958798767833643858} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0.25} m_AnchorMax: {x: 1, y: 0.75} @@ -1086,9 +1121,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 4958798768237988480} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -1112,14 +1147,12 @@ MonoBehaviour: m_GameObject: {fileID: 4958798768341589564} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} m_Color: {r: 0, g: 0.25294134, b: 0.6, a: 1} m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] @@ -1132,4 +1165,3 @@ MonoBehaviour: m_FillClockwise: 1 m_FillOrigin: 0 m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 diff --git a/Assets/Prefabs/UI/Properties Panel/Simple/Bool Field.prefab b/Assets/Prefabs/UI/Properties Panel/Simple/Bool Field.prefab index d5cefa04e..d005cdba5 100644 --- a/Assets/Prefabs/UI/Properties Panel/Simple/Bool Field.prefab +++ b/Assets/Prefabs/UI/Properties Panel/Simple/Bool Field.prefab @@ -29,11 +29,11 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 7661950295498381397} - {fileID: 7661950294707789146} m_Father: {fileID: 0} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -116,10 +116,10 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 7661950295217243554} m_Father: {fileID: 7661950294707789146} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -193,10 +193,10 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 7661950294137596689} m_Father: {fileID: 7661950293931311387} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -313,9 +313,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 7661950294137596689} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.2, y: 0.2} m_AnchorMax: {x: 0.8, y: 0.8} @@ -389,9 +389,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 7661950293931311387} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -465,23 +465,20 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 + m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 diff --git a/Assets/Prefabs/UI/Properties Panel/Simple/Button Field.prefab b/Assets/Prefabs/UI/Properties Panel/Simple/Button Field.prefab index 39a19b9cc..0d208cbde 100644 --- a/Assets/Prefabs/UI/Properties Panel/Simple/Button Field.prefab +++ b/Assets/Prefabs/UI/Properties Panel/Simple/Button Field.prefab @@ -28,9 +28,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 790814198576895811} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -104,23 +104,20 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 + m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -168,10 +165,10 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 790814197411605233} m_Father: {fileID: 6566784227922820063} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -309,11 +306,11 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 6566784228232816309} - {fileID: 790814198576895811} m_Father: {fileID: 0} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -398,9 +395,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 6566784227922820063} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -474,23 +471,20 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 + m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 diff --git a/Assets/Prefabs/UI/Properties Panel/Simple/Enum Field.prefab b/Assets/Prefabs/UI/Properties Panel/Simple/Enum Field.prefab index a426e807a..aded92530 100644 --- a/Assets/Prefabs/UI/Properties Panel/Simple/Enum Field.prefab +++ b/Assets/Prefabs/UI/Properties Panel/Simple/Enum Field.prefab @@ -28,9 +28,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1444953513611246322} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -104,23 +104,20 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 + m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -168,11 +165,11 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 1444953513591056483} - {fileID: 1444953514355799430} m_Father: {fileID: 1444953514731475974} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -310,9 +307,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1444953514731475974} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -386,23 +383,20 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 + m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -468,9 +462,9 @@ RectTransform: m_LocalRotation: {x: 0, y: 0, z: -0.7071068, w: 0.7071068} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1444953513611246322} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: -90} m_AnchorMin: {x: 1, y: 0.5} m_AnchorMax: {x: 1, y: 0.5} @@ -544,11 +538,11 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 1444953513817938006} - {fileID: 1444953513611246322} m_Father: {fileID: 0} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} diff --git a/Assets/Prefabs/UI/Properties Panel/Simple/Increment Field.prefab b/Assets/Prefabs/UI/Properties Panel/Simple/Increment Field.prefab index 1009b9d25..db1ffa153 100644 --- a/Assets/Prefabs/UI/Properties Panel/Simple/Increment Field.prefab +++ b/Assets/Prefabs/UI/Properties Panel/Simple/Increment Field.prefab @@ -30,9 +30,9 @@ RectTransform: m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 0.75, y: 0.75, z: 1} - m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 2544338102157427055} + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 1, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -162,12 +162,12 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 3841991687815987397} - {fileID: 7863247503782211248} - {fileID: 8483308900631515678} m_Father: {fileID: 6770904480725292323} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -223,9 +223,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 6770904480725292323} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -299,23 +299,20 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 + m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -382,11 +379,11 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 6770904480229951561} - {fileID: 2544338102157427055} m_Father: {fileID: 0} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -473,9 +470,9 @@ RectTransform: m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 0.75, y: 0.75, z: 1} - m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 2544338102157427055} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 1, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -606,9 +603,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 2544338102157427055} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -682,23 +679,20 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 + m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 diff --git a/Assets/Prefabs/UI/Properties Panel/Simple/Input Field.prefab b/Assets/Prefabs/UI/Properties Panel/Simple/Input Field.prefab index 29050392e..d5784a8cb 100644 --- a/Assets/Prefabs/UI/Properties Panel/Simple/Input Field.prefab +++ b/Assets/Prefabs/UI/Properties Panel/Simple/Input Field.prefab @@ -29,11 +29,11 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 23155009713813574} - {fileID: 8734896053364945145} m_Father: {fileID: 0} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -117,9 +117,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 23155009655760172} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -193,23 +193,20 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 + m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -274,10 +271,10 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 5938949450847760329} m_Father: {fileID: 23155009655760172} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -331,11 +328,11 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 5938949451508194215} - {fileID: 5938949451316023666} m_Father: {fileID: 5938949450847760329} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -386,10 +383,10 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 5938949450758544618} m_Father: {fileID: 8734896053364945145} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -528,13 +525,10 @@ MonoBehaviour: m_GlobalFontAsset: {fileID: 11400000, guid: 9dcd07b95faae7641a3ff6fccab43c32, type: 2} m_OnFocusSelectAll: 1 m_ResetOnDeActivation: 1 - m_KeepTextSelectionVisible: 0 m_RestoreOriginalTextOnEscape: 1 m_isRichTextEditingAllowed: 0 m_LineLimit: 0 - isAlert: 0 m_InputValidator: {fileID: 0} - m_ShouldActivateOnSelect: 1 --- !u!114 &1618696626055083017 MonoBehaviour: m_ObjectHideFlags: 0 @@ -583,9 +577,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 5938949450758544618} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -659,23 +653,20 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 3 + m_enableWordWrapping: 0 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 1 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -721,9 +712,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 5938949450758544618} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -797,23 +788,20 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 0 + m_enableWordWrapping: 0 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 1 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 diff --git a/Assets/Prefabs/UI/Properties Panel/Simple/Progress Field.prefab b/Assets/Prefabs/UI/Properties Panel/Simple/Progress Field.prefab index d57409ee5..1360e00de 100644 --- a/Assets/Prefabs/UI/Properties Panel/Simple/Progress Field.prefab +++ b/Assets/Prefabs/UI/Properties Panel/Simple/Progress Field.prefab @@ -28,9 +28,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 8181761431199775037} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -103,9 +103,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 8626591645481506733} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0.25} m_AnchorMax: {x: 1, y: 0.75} @@ -179,11 +179,11 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 3301729265189646952} - {fileID: 8626591645481506733} m_Father: {fileID: 0} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -267,9 +267,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 3301729265155698787} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -343,23 +343,20 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 + m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -423,10 +420,10 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 1684719062263664779} m_Father: {fileID: 8626591645481506733} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0.5} m_AnchorMax: {x: 1, y: 0.5} @@ -461,11 +458,11 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 4052465884214141673} - {fileID: 8181761431199775037} m_Father: {fileID: 3301729265155698787} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} diff --git a/Assets/Prefabs/UI/Properties Panel/Simple/Property Label.prefab b/Assets/Prefabs/UI/Properties Panel/Simple/Property Label.prefab index f7f4fa9e9..77133101c 100644 --- a/Assets/Prefabs/UI/Properties Panel/Simple/Property Label.prefab +++ b/Assets/Prefabs/UI/Properties Panel/Simple/Property Label.prefab @@ -29,9 +29,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 2677123916507168719} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -105,23 +105,20 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 + m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -188,11 +185,11 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 2677123916028371621} - {fileID: 6602089867192183683} m_Father: {fileID: 0} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -276,9 +273,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 2677123916507168719} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -352,23 +349,20 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 + m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 diff --git a/Assets/Prefabs/UI/Properties Panel/Simple/Property.prefab b/Assets/Prefabs/UI/Properties Panel/Simple/Property.prefab index f53bd6914..06e3eca26 100644 --- a/Assets/Prefabs/UI/Properties Panel/Simple/Property.prefab +++ b/Assets/Prefabs/UI/Properties Panel/Simple/Property.prefab @@ -29,9 +29,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 9159917045172241900} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -107,23 +107,20 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 + m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -190,10 +187,10 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 9159917045079857286} m_Father: {fileID: 0} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} diff --git a/Assets/Prefabs/UI/Properties Panel/Simple/Ranged Float Field.prefab b/Assets/Prefabs/UI/Properties Panel/Simple/Ranged Float Field.prefab index c2f68c328..3a13a994a 100644 --- a/Assets/Prefabs/UI/Properties Panel/Simple/Ranged Float Field.prefab +++ b/Assets/Prefabs/UI/Properties Panel/Simple/Ranged Float Field.prefab @@ -28,9 +28,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 7146463267720429741} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0.5} m_AnchorMax: {x: 1, y: 0.5} @@ -101,10 +101,10 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 3436413162678517982} m_Father: {fileID: 7146463267720429741} + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0.5} m_AnchorMax: {x: 1, y: 0.5} @@ -139,9 +139,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 7282863425963355709} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -212,10 +212,10 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 287045173602649995} m_Father: {fileID: 7146463267720429741} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0.5} m_AnchorMax: {x: 1, y: 0.5} @@ -251,9 +251,9 @@ RectTransform: m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 0.75, y: 0.75, z: 1} - m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 3222204141728529077} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -342,11 +342,11 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 4127690186274268520} - {fileID: 7146463267720429741} m_Father: {fileID: 0} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -450,9 +450,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 4127690186169542499} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -526,23 +526,20 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 + m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -608,12 +605,12 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 3217779461217105385} - {fileID: 7282863425963355709} - {fileID: 3222204141728529077} m_Father: {fileID: 4127690186169542499} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} diff --git a/Assets/Prefabs/UI/Properties Panel/Text Button.prefab b/Assets/Prefabs/UI/Properties Panel/Text Button.prefab index 8f001bcfe..65d6df6d7 100644 --- a/Assets/Prefabs/UI/Properties Panel/Text Button.prefab +++ b/Assets/Prefabs/UI/Properties Panel/Text Button.prefab @@ -31,9 +31,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -107,23 +107,20 @@ MonoBehaviour: m_VerticalAlignment: 256 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 0 + m_enableWordWrapping: 0 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 diff --git a/Assets/Prefabs/UI/Tab Button Primary.prefab b/Assets/Prefabs/UI/Tab Button Primary.prefab index 1795e41df..fa0e184d4 100644 --- a/Assets/Prefabs/UI/Tab Button Primary.prefab +++ b/Assets/Prefabs/UI/Tab Button Primary.prefab @@ -29,9 +29,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 7200536746924797989} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -105,23 +105,20 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 + m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -182,10 +179,10 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 7200536746924797989} m_Father: {fileID: 0} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -252,7 +249,6 @@ MonoBehaviour: m_EditorClassIdentifier: m_Navigation: m_Mode: 3 - m_WrapAround: 0 m_SelectOnUp: {fileID: 0} m_SelectOnDown: {fileID: 0} m_SelectOnLeft: {fileID: 0} @@ -311,10 +307,10 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 6493174789768221420} m_Father: {fileID: 5318229203699776728} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} diff --git a/Assets/Resources/Aetheria.inputactions b/Assets/Resources/Aetheria.inputactions index fe1ef6086..c5e3153a6 100644 --- a/Assets/Resources/Aetheria.inputactions +++ b/Assets/Resources/Aetheria.inputactions @@ -1,6 +1,5 @@ { "name": "Aetheria", - "version": 1, "maps": [ { "name": "Player", @@ -13,8 +12,7 @@ "expectedControlType": "Vector2", "processors": "", "interactions": "", - "initialStateCheck": true, - "priority": 0 + "initialStateCheck": true }, { "name": "Look", @@ -23,8 +21,7 @@ "expectedControlType": "Vector2", "processors": "", "interactions": "", - "initialStateCheck": true, - "priority": 0 + "initialStateCheck": true }, { "name": "Minimap Zoom", @@ -33,8 +30,7 @@ "expectedControlType": "Button", "processors": "", "interactions": "", - "initialStateCheck": false, - "priority": 0 + "initialStateCheck": false }, { "name": "Target Reticle", @@ -43,8 +39,7 @@ "expectedControlType": "Button", "processors": "", "interactions": "", - "initialStateCheck": false, - "priority": 0 + "initialStateCheck": false }, { "name": "Target Previous", @@ -53,8 +48,7 @@ "expectedControlType": "Button", "processors": "", "interactions": "", - "initialStateCheck": false, - "priority": 0 + "initialStateCheck": false }, { "name": "Target Next", @@ -63,8 +57,7 @@ "expectedControlType": "Button", "processors": "", "interactions": "", - "initialStateCheck": false, - "priority": 0 + "initialStateCheck": false }, { "name": "Target Nearest", @@ -73,18 +66,7 @@ "expectedControlType": "Button", "processors": "", "interactions": "", - "initialStateCheck": false, - "priority": 0 - }, - { - "name": "Cycle Target Item", - "type": "Button", - "id": "3f9a2f0a-6e3f-4a53-9f5e-1a9c1e6d9f7b", - "expectedControlType": "Button", - "processors": "", - "interactions": "", - "initialStateCheck": false, - "priority": 0 + "initialStateCheck": false }, { "name": "Toggle Heatsinks", @@ -93,8 +75,7 @@ "expectedControlType": "Button", "processors": "", "interactions": "", - "initialStateCheck": false, - "priority": 0 + "initialStateCheck": false }, { "name": "Toggle Shield", @@ -103,8 +84,7 @@ "expectedControlType": "Button", "processors": "", "interactions": "", - "initialStateCheck": false, - "priority": 0 + "initialStateCheck": false }, { "name": "Toggle Stance", @@ -113,8 +93,7 @@ "expectedControlType": "Button", "processors": "", "interactions": "", - "initialStateCheck": false, - "priority": 0 + "initialStateCheck": false }, { "name": "Override Shutdown", @@ -123,8 +102,7 @@ "expectedControlType": "Button", "processors": "", "interactions": "", - "initialStateCheck": false, - "priority": 0 + "initialStateCheck": false }, { "name": "Ping", @@ -133,8 +111,7 @@ "expectedControlType": "Button", "processors": "", "interactions": "", - "initialStateCheck": false, - "priority": 0 + "initialStateCheck": false }, { "name": "Hide UI", @@ -143,8 +120,7 @@ "expectedControlType": "Button", "processors": "", "interactions": "", - "initialStateCheck": false, - "priority": 0 + "initialStateCheck": false }, { "name": "Tractor Beam", @@ -153,8 +129,7 @@ "expectedControlType": "", "processors": "", "interactions": "", - "initialStateCheck": true, - "priority": 0 + "initialStateCheck": true }, { "name": "Turn", @@ -163,88 +138,23 @@ "expectedControlType": "Axis", "processors": "", "interactions": "", - "initialStateCheck": true, - "priority": 0 - }, - { - "name": "Face Aim", - "type": "Button", - "id": "6d5bd565-8c0e-4789-9d51-177dc0ec8e11", - "expectedControlType": "Button", - "processors": "", - "interactions": "", - "initialStateCheck": false, - "priority": 0 - }, - { - "name": "Toggle Face Aim", - "type": "Button", - "id": "4067c72f-3e3d-4d7b-a8b5-356cab9793fc", - "expectedControlType": "Button", - "processors": "", - "interactions": "", - "initialStateCheck": false, - "priority": 0 + "initialStateCheck": true } ], "bindings": [ { - "name": "Gamepad Move", + "name": "", "id": "978bfe49-cc26-4a3d-ab7b-7d7a29327403", - "path": "2DVector(mode=2)", + "path": "/leftStick", "interactions": "", "processors": "", - "groups": "", + "groups": ";Gamepad", "action": "Move", - "isComposite": true, + "isComposite": false, "isPartOfComposite": false }, { - "name": "up", - "id": "e9c57b4d-1cd8-4b2f-93d6-1745a37cabc9", - "path": "/leftStick/up", - "interactions": "", - "processors": "", - "groups": ";Gamepad", - "action": "Move", - "isComposite": false, - "isPartOfComposite": true - }, - { - "name": "down", - "id": "05f19282-8364-4ae0-b5c3-d471c10601a7", - "path": "/leftStick/down", - "interactions": "", - "processors": "", - "groups": ";Gamepad", - "action": "Move", - "isComposite": false, - "isPartOfComposite": true - }, - { - "name": "left", - "id": "1ce4a07f-43af-4e82-a631-dbb43c8191d3", - "path": "/leftShoulder", - "interactions": "", - "processors": "", - "groups": ";Gamepad", - "action": "Move", - "isComposite": false, - "isPartOfComposite": true - }, - { - "name": "right", - "id": "bd1aed7e-b80b-4341-a550-4ef10bacf4b4", - "path": "/rightShoulder", - "interactions": "", - "processors": "", - "groups": ";Gamepad", - "action": "Move", - "isComposite": false, - "isPartOfComposite": true - }, - { - "name": "W S Q E", + "name": "WASD", "id": "00ca640b-d935-4593-8157-c05846ea39b3", "path": "Dpad(mode=1)", "interactions": "", @@ -279,7 +189,7 @@ { "name": "left", "id": "d2581a9b-1d11-4566-b27d-b92aff5fabbc", - "path": "/q", + "path": "/a", "interactions": "", "processors": "", "groups": ";Keyboard&Mouse", @@ -290,7 +200,7 @@ { "name": "right", "id": "fcfe95b8-67b9-4526-84b5-5d0bc98d6400", - "path": "/e", + "path": "/d", "interactions": "", "processors": "", "groups": ";Keyboard&Mouse", @@ -397,17 +307,6 @@ "isComposite": false, "isPartOfComposite": false }, - { - "name": "", - "id": "8c2d5e77-4b18-4f0b-9a2e-6d3f7c1a5e90", - "path": "/j", - "interactions": "", - "processors": "", - "groups": "Keyboard&Mouse", - "action": "Cycle Target Item", - "isComposite": false, - "isPartOfComposite": false - }, { "name": "", "id": "71ac6088-1e18-4810-86be-1179918dd4a2", @@ -499,7 +398,7 @@ { "name": "negative", "id": "8536ca60-1fed-4f29-8060-04d46cfffcab", - "path": "/a", + "path": "/q", "interactions": "", "processors": "", "groups": "", @@ -510,57 +409,13 @@ { "name": "positive", "id": "19c175bf-d4e6-4626-8bee-91e0c473a94b", - "path": "/d", + "path": "/e", "interactions": "", "processors": "", "groups": "", "action": "Turn", "isComposite": false, "isPartOfComposite": true - }, - { - "name": "", - "id": "fdff8f1f-0824-49bd-b09a-c1b792f16299", - "path": "/leftStick/x", - "interactions": "", - "processors": "", - "groups": ";Gamepad", - "action": "Turn", - "isComposite": false, - "isPartOfComposite": false - }, - { - "name": "", - "id": "1ee2fadd-3db4-45e6-8fa4-7a621ef7d165", - "path": "/leftShift", - "interactions": "", - "processors": "", - "groups": "Keyboard&Mouse", - "action": "Face Aim", - "isComposite": false, - "isPartOfComposite": false - }, - { - "name": "", - "id": "e9520d95-0458-439b-a37c-84c45237e110", - "path": "/capsLock", - "interactions": "", - "processors": "", - "groups": "Keyboard&Mouse", - "action": "Toggle Face Aim", - "isComposite": false, - "isPartOfComposite": false - }, - { - "name": "", - "id": "596ed367-be34-4951-9aac-d8caa57b411f", - "path": "/leftStickPress", - "interactions": "", - "processors": "", - "groups": ";Gamepad", - "action": "Toggle Face Aim", - "isComposite": false, - "isPartOfComposite": false } ] }, @@ -575,8 +430,7 @@ "expectedControlType": "Vector2", "processors": "", "interactions": "", - "initialStateCheck": true, - "priority": 0 + "initialStateCheck": true }, { "name": "Submit", @@ -585,8 +439,7 @@ "expectedControlType": "Button", "processors": "", "interactions": "", - "initialStateCheck": false, - "priority": 0 + "initialStateCheck": false }, { "name": "Cancel", @@ -595,8 +448,7 @@ "expectedControlType": "Button", "processors": "", "interactions": "", - "initialStateCheck": false, - "priority": 0 + "initialStateCheck": false }, { "name": "Point", @@ -605,8 +457,7 @@ "expectedControlType": "Vector2", "processors": "", "interactions": "", - "initialStateCheck": false, - "priority": 0 + "initialStateCheck": false }, { "name": "Click", @@ -615,8 +466,7 @@ "expectedControlType": "Button", "processors": "", "interactions": "", - "initialStateCheck": false, - "priority": 0 + "initialStateCheck": false }, { "name": "ScrollWheel", @@ -625,8 +475,7 @@ "expectedControlType": "Vector2", "processors": "", "interactions": "", - "initialStateCheck": false, - "priority": 0 + "initialStateCheck": false }, { "name": "MiddleClick", @@ -635,8 +484,7 @@ "expectedControlType": "", "processors": "", "interactions": "", - "initialStateCheck": false, - "priority": 0 + "initialStateCheck": false }, { "name": "RightClick", @@ -645,8 +493,7 @@ "expectedControlType": "", "processors": "", "interactions": "", - "initialStateCheck": false, - "priority": 0 + "initialStateCheck": false }, { "name": "Drag", @@ -655,8 +502,7 @@ "expectedControlType": "Vector2", "processors": "", "interactions": "", - "initialStateCheck": true, - "priority": 0 + "initialStateCheck": true } ], "bindings": [ @@ -1047,8 +893,7 @@ "expectedControlType": "Button", "processors": "", "interactions": "", - "initialStateCheck": false, - "priority": 0 + "initialStateCheck": false }, { "name": "Galaxy Map", @@ -1057,8 +902,7 @@ "expectedControlType": "Button", "processors": "", "interactions": "", - "initialStateCheck": false, - "priority": 0 + "initialStateCheck": false }, { "name": "Inventory", @@ -1067,8 +911,7 @@ "expectedControlType": "Button", "processors": "", "interactions": "", - "initialStateCheck": false, - "priority": 0 + "initialStateCheck": false }, { "name": "Main Menu", @@ -1077,8 +920,7 @@ "expectedControlType": "Button", "processors": "", "interactions": "", - "initialStateCheck": false, - "priority": 0 + "initialStateCheck": false }, { "name": "Input Screen", @@ -1087,8 +929,7 @@ "expectedControlType": "Button", "processors": "", "interactions": "", - "initialStateCheck": false, - "priority": 0 + "initialStateCheck": false }, { "name": "Interact", @@ -1097,8 +938,7 @@ "expectedControlType": "Button", "processors": "", "interactions": "", - "initialStateCheck": false, - "priority": 0 + "initialStateCheck": false } ], "bindings": [ diff --git a/Assets/Materials/PBR/Gunmetal_Dark.meta b/Assets/Resources/Geonames.meta similarity index 77% rename from Assets/Materials/PBR/Gunmetal_Dark.meta rename to Assets/Resources/Geonames.meta index 7680bfe76..64c8c9a19 100644 --- a/Assets/Materials/PBR/Gunmetal_Dark.meta +++ b/Assets/Resources/Geonames.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 22e47659e8e14482b3466711751b01b8 +guid: 0f3e518a4c9bcc2469abe6cebdcb3691 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Assets/Resources/Geonames/Australia.csv b/Assets/Resources/Geonames/Australia.csv new file mode 100644 index 000000000..05587efaa --- /dev/null +++ b/Assets/Resources/Geonames/Australia.csv @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:01bb478f4433dc42d5533e5030ef103ad163deca6bc40fb412025acd12e35c73 +size 442795 diff --git a/Assets/Materials/PBR/SOURCES.md.meta b/Assets/Resources/Geonames/Australia.csv.meta similarity index 75% rename from Assets/Materials/PBR/SOURCES.md.meta rename to Assets/Resources/Geonames/Australia.csv.meta index 4c16a4a62..33d8c7dbe 100644 --- a/Assets/Materials/PBR/SOURCES.md.meta +++ b/Assets/Resources/Geonames/Australia.csv.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: a29568b9a0cf46babc43fe6045d6e10a +guid: 8ba25d5d0ecee31408c7ce7460b4e015 TextScriptImporter: externalObjects: {} userData: diff --git a/Assets/Resources/Geonames/Congo.csv b/Assets/Resources/Geonames/Congo.csv new file mode 100644 index 000000000..5d0f0b66e --- /dev/null +++ b/Assets/Resources/Geonames/Congo.csv @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c84ff44083e4f0d9d9314e7b7095ed4ce2955905f26e7926faa09ed222655729 +size 506722 diff --git a/Assets/Fonts/Emoji/LICENSE.txt.meta b/Assets/Resources/Geonames/Congo.csv.meta similarity index 75% rename from Assets/Fonts/Emoji/LICENSE.txt.meta rename to Assets/Resources/Geonames/Congo.csv.meta index 8dabd4444..6147d0a96 100644 --- a/Assets/Fonts/Emoji/LICENSE.txt.meta +++ b/Assets/Resources/Geonames/Congo.csv.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: db23d2e6bc295794888af02d32cbae60 +guid: 1e43b383bf860524986a6947496776d0 TextScriptImporter: externalObjects: {} userData: diff --git a/Assets/Resources/Geonames/Germany.csv b/Assets/Resources/Geonames/Germany.csv new file mode 100644 index 000000000..beb35d1d0 --- /dev/null +++ b/Assets/Resources/Geonames/Germany.csv @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:73e4e7231d448879d0a6d8524b3200be75fc8f5011a70cfd670b0897d07eca10 +size 1284208 diff --git a/Assets/Resources/Geonames/Germany.csv.meta b/Assets/Resources/Geonames/Germany.csv.meta new file mode 100644 index 000000000..244e41eda --- /dev/null +++ b/Assets/Resources/Geonames/Germany.csv.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ed470b8eb6cc68c4485ddc05d5a17ca1 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Geonames/India.csv b/Assets/Resources/Geonames/India.csv new file mode 100644 index 000000000..6b4eab5c6 --- /dev/null +++ b/Assets/Resources/Geonames/India.csv @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:96c66414822c43a5451ce1910c1e545dedb224b0f3e79bc54f945dd484afc6a2 +size 3229324 diff --git a/Assets/Resources/Geonames/India.csv.meta b/Assets/Resources/Geonames/India.csv.meta new file mode 100644 index 000000000..3f8c176b4 --- /dev/null +++ b/Assets/Resources/Geonames/India.csv.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ca62f6d649360184aaa975c2716dfb27 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Geonames/Iran.csv b/Assets/Resources/Geonames/Iran.csv new file mode 100644 index 000000000..8d2754642 --- /dev/null +++ b/Assets/Resources/Geonames/Iran.csv @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b70fbbe6b4832eb1a3f35844bd87c0eb479fc77b6e59d6600b64cbbe7cc1bf16 +size 1073119 diff --git a/Assets/Resources/Geonames/Iran.csv.meta b/Assets/Resources/Geonames/Iran.csv.meta new file mode 100644 index 000000000..507664280 --- /dev/null +++ b/Assets/Resources/Geonames/Iran.csv.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: e2d60c7158f6a01418d78e46c5845729 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Geonames/Japan.csv b/Assets/Resources/Geonames/Japan.csv new file mode 100644 index 000000000..d106ec364 --- /dev/null +++ b/Assets/Resources/Geonames/Japan.csv @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d58dc0227cc6e3b7622726c155031467b6d7314623c7e3a33aad8ce1462b2c5b +size 1031132 diff --git a/Assets/Resources/Geonames/Japan.csv.meta b/Assets/Resources/Geonames/Japan.csv.meta new file mode 100644 index 000000000..f46c1022d --- /dev/null +++ b/Assets/Resources/Geonames/Japan.csv.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 5dd450a6f5ec92d49871674b33509135 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Geonames/Mexico.csv b/Assets/Resources/Geonames/Mexico.csv new file mode 100644 index 000000000..517228e8f --- /dev/null +++ b/Assets/Resources/Geonames/Mexico.csv @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9a654b8451a08a0c769712f4fb1d96c3c661457a88bb57ec4288eab36eab7ec1 +size 633432 diff --git a/Assets/Resources/Geonames/Mexico.csv.meta b/Assets/Resources/Geonames/Mexico.csv.meta new file mode 100644 index 000000000..2b0283e78 --- /dev/null +++ b/Assets/Resources/Geonames/Mexico.csv.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: b75e17ea31f6a62488628bf9605bd48c +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Geonames/Russia.csv b/Assets/Resources/Geonames/Russia.csv new file mode 100644 index 000000000..6344ff571 --- /dev/null +++ b/Assets/Resources/Geonames/Russia.csv @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f4ed581eef681e5357a14efe4e6a1fc52370def7ada6565f4b953e410fa7f39e +size 2375319 diff --git a/Assets/Resources/Geonames/Russia.csv.meta b/Assets/Resources/Geonames/Russia.csv.meta new file mode 100644 index 000000000..7794294e9 --- /dev/null +++ b/Assets/Resources/Geonames/Russia.csv.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 5c1aee30ccf3a1e44bddeb4d550edbf0 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Geonames/Swahili.csv b/Assets/Resources/Geonames/Swahili.csv new file mode 100644 index 000000000..678065eed --- /dev/null +++ b/Assets/Resources/Geonames/Swahili.csv @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fb0f44e7948c637a2b0f9e0ca098b2f4689d065fe6484723acf0bfa34a26d0a5 +size 501002 diff --git a/Assets/Resources/Geonames/Swahili.csv.meta b/Assets/Resources/Geonames/Swahili.csv.meta new file mode 100644 index 000000000..94bfbb4f8 --- /dev/null +++ b/Assets/Resources/Geonames/Swahili.csv.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 63e21276398c8b0449e01d97a088add1 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Geonames/Thailand.csv b/Assets/Resources/Geonames/Thailand.csv new file mode 100644 index 000000000..400b8f1a9 --- /dev/null +++ b/Assets/Resources/Geonames/Thailand.csv @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:888c929f0e29728369448e6981bb8a043c49610f4c4390a2cb549bf6b494d3dc +size 143084 diff --git a/Assets/Resources/Geonames/Thailand.csv.meta b/Assets/Resources/Geonames/Thailand.csv.meta new file mode 100644 index 000000000..fd5bd346a --- /dev/null +++ b/Assets/Resources/Geonames/Thailand.csv.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 2923f8bd3a2f0fb4084f64138e6d793d +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Geonames/USA.csv b/Assets/Resources/Geonames/USA.csv new file mode 100644 index 000000000..05bd91140 --- /dev/null +++ b/Assets/Resources/Geonames/USA.csv @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:314a30df2033795f04738589c660991e4310f1bfe0578c71bda2a9a72d8a617f +size 954928 diff --git a/Assets/Resources/Geonames/USA.csv.meta b/Assets/Resources/Geonames/USA.csv.meta new file mode 100644 index 000000000..b59cdf567 --- /dev/null +++ b/Assets/Resources/Geonames/USA.csv.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: a06c0e26f73d51f489303deadad77030 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Geonames/bad-words.txt b/Assets/Resources/Geonames/bad-words.txt new file mode 100644 index 000000000..5013fea9d --- /dev/null +++ b/Assets/Resources/Geonames/bad-words.txt @@ -0,0 +1,1384 @@ + +abbo +abo +abortion +abuse +addict +addicts +adult +africa +african +alla +allah +alligatorbait +amateur +american +anal +analannie +analsex +angie +angry +anus +arab +arabs +areola +argie +aroused +arse +arsehole +asian +ass +assassin +assassinate +assassination +assault +assbagger +assblaster +assclown +asscowboy +asses +assfuck +assfucker +asshat +asshole +assholes +asshore +assjockey +asskiss +asskisser +assklown +asslick +asslicker +asslover +assman +assmonkey +assmunch +assmuncher +asspacker +asspirate +asspuppies +assranger +asswhore +asswipe +athletesfoot +attack +australian +babe +babies +backdoor +backdoorman +backseat +badfuck +balllicker +balls +ballsack +banging +baptist +barelylegal +barf +barface +barfface +bast +bastard +bazongas +bazooms +beaner +beast +beastality +beastial +beastiality +beatoff +beat-off +beatyourmeat +beaver +bestial +bestiality +bi +biatch +bible +bicurious +bigass +bigbastard +bigbutt +bigger +bisexual +bi-sexual +bitch +bitcher +bitches +bitchez +bitchin +bitching +bitchslap +bitchy +biteme +black +blackman +blackout +blacks +blind +blow +blowjob +boang +bogan +bohunk +bollick +bollock +bomb +bombers +bombing +bombs +bomd +bondage +boner +bong +boob +boobies +boobs +booby +boody +boom +boong +boonga +boonie +booty +bootycall +bountybar +bra +brea5t +breast +breastjob +breastlover +breastman +brothel +bugger +buggered +buggery +bullcrap +bulldike +bulldyke +bullshit +bumblefuck +bumfuck +bunga +bunghole +buried +burn +butchbabes +butchdike +butchdyke +butt +buttbang +butt-bang +buttface +buttfuck +butt-fuck +buttfucker +butt-fucker +buttfuckers +butt-fuckers +butthead +buttman +buttmunch +buttmuncher +buttpirate +buttplug +buttstain +byatch +cacker +cameljockey +cameltoe +canadian +cancer +carpetmuncher +carruth +catholic +catholics +cemetery +chav +cherrypopper +chickslick +children's +chin +chinaman +chinamen +chinese +chink +chinky +choad +chode +christ +christian +church +cigarette +cigs +clamdigger +clamdiver +clit +clitoris +clogwog +cocaine +cock +cockblock +cockblocker +cockcowboy +cockfight +cockhead +cockknob +cocklicker +cocklover +cocknob +cockqueen +cockrider +cocksman +cocksmith +cocksmoker +cocksucer +cocksuck +cocksucked +cocksucker +cocksucking +cocktail +cocktease +cocky +cohee +coitus +color +colored +coloured +commie +communist +condom +conservative +conspiracy +coolie +cooly +coon +coondog +copulate +cornhole +corruption +cra5h +crabs +crack +crackpipe +crackwhore +crack-whore +crap +crapola +crapper +crappy +crash +creamy +crime +crimes +criminal +criminals +crotch +crotchjockey +crotchmonkey +crotchrot +cum +cumbubble +cumfest +cumjockey +cumm +cummer +cumming +cumquat +cumqueen +cumshot +cunilingus +cunillingus +cunn +cunnilingus +cunntt +cunt +cunteyed +cuntfuck +cuntfucker +cuntlick +cuntlicker +cuntlicking +cuntsucker +cybersex +cyberslimer +dago +dahmer +dammit +damn +damnation +damnit +darkie +darky +datnigga +dead +deapthroat +death +deepthroat +defecate +dego +demon +deposit +desire +destroy +deth +devil +devilworshipper +dick +dickbrain +dickforbrains +dickhead +dickless +dicklick +dicklicker +dickman +dickwad +dickweed +diddle +die +died +dies +dike +dildo +dingleberry +dink +dipshit +dipstick +dirty +disease +diseases +disturbed +dive +dix +dixiedike +dixiedyke +doggiestyle +doggystyle +dong +doodoo +doo-doo +doom +dope +dragqueen +dragqween +dripdick +drug +drunk +drunken +dumb +dumbass +dumbbitch +dumbfuck +dyefly +dyke +easyslut +eatballs +eatme +eatpussy +ecstacy +ejaculate +ejaculated +ejaculating +ejaculation +enema +enemy +erect +erection +ero +escort +ethiopian +ethnic +european +evl +excrement +execute +executed +execution +executioner +explosion +facefucker +faeces +fag +fagging +faggot +fagot +failed +failure +fairies +fairy +faith +fannyfucker +fart +farted +farting +farty +fastfuck +fat +fatah +fatass +fatfuck +fatfucker +fatso +fckcum +fear +feces +felatio +felch +felcher +felching +fellatio +feltch +feltcher +feltching +fetish +fight +filipina +filipino +fingerfood +fingerfuck +fingerfucked +fingerfucker +fingerfuckers +fingerfucking +fire +firing +fister +fistfuck +fistfucked +fistfucker +fistfucking +fisting +flange +flasher +flatulence +floo +flydie +flydye +fok +fondle +footaction +footfuck +footfucker +footlicker +footstar +fore +foreskin +forni +fornicate +foursome +fourtwenty +fraud +freakfuck +freakyfucker +freefuck +fu +fubar +fuc +fucck +fuck +fucka +fuckable +fuckbag +fuckbuddy +fucked +fuckedup +fucker +fuckers +fuckface +fuckfest +fuckfreak +fuckfriend +fuckhead +fuckher +fuckin +fuckina +fucking +fuckingbitch +fuckinnuts +fuckinright +fuckit +fuckknob +fuckme +fuckmehard +fuckmonkey +fuckoff +fuckpig +fucks +fucktard +fuckwhore +fuckyou +fudgepacker +fugly +fuk +fuks +funeral +funfuck +fungus +fuuck +gangbang +gangbanged +gangbanger +gangsta +gatorbait +gay +gaymuthafuckinwhore +gaysex +geez +geezer +geni +genital +german +getiton +gin +ginzo +gipp +girls +givehead +glazeddonut +gob +god +godammit +goddamit +goddammit +goddamn +goddamned +goddamnes +goddamnit +goddamnmuthafucker +goldenshower +gonorrehea +gonzagas +gook +gotohell +goy +goyim +greaseball +gringo +groe +gross +grostulation +gubba +gummer +gun +gyp +gypo +gypp +gyppie +gyppo +gyppy +hamas +handjob +hapa +harder +hardon +harem +headfuck +headlights +hebe +heeb +hell +henhouse +heroin +herpes +heterosexual +hijack +hijacker +hijacking +hillbillies +hindoo +hiscock +hitler +hitlerism +hitlerist +hiv +ho +hobo +hodgie +hoes +hole +holestuffer +homicide +homo +homobangers +homosexual +honger +honk +honkers +honkey +honky +hook +hooker +hookers +hooters +hore +hork +horn +horney +horniest +horny +horseshit +hosejob +hoser +hostage +hotdamn +hotpussy +hottotrot +hummer +husky +hussy +hustler +hymen +hymie +iblowu +idiot +ikey +illegal +incest +insest +intercourse +interracial +intheass +inthebuff +israel +israeli +israel's +italiano +itch +jackass +jackoff +jackshit +jacktheripper +jade +jap +japanese +japcrap +jebus +jeez +jerkoff +jesus +jesuschrist +jew +jewish +jiga +jigaboo +jigg +jigga +jiggabo +jigger +jiggy +jihad +jijjiboo +jimfish +jism +jiz +jizim +jizjuice +jizm +jizz +jizzim +jizzum +joint +juggalo +jugs +junglebunny +kaffer +kaffir +kaffre +kafir +kanake +kid +kigger +kike +kill +killed +killer +killing +kills +kink +kinky +kissass +kkk +knife +knockers +kock +kondum +koon +kotex +krap +krappy +kraut +kum +kumbubble +kumbullbe +kummer +kumming +kumquat +kums +kunilingus +kunnilingus +kunt +ky +kyke +lactate +laid +lapdance +latin +lesbain +lesbayn +lesbian +lesbin +lesbo +lez +lezbe +lezbefriends +lezbo +lezz +lezzo +liberal +libido +licker +lickme +lies +limey +limpdick +limy +lingerie +liquor +livesex +loadedgun +lolita +looser +loser +lotion +lovebone +lovegoo +lovegun +lovejuice +lovemuscle +lovepistol +loverocket +lowlife +lsd +lubejob +lucifer +luckycammeltoe +lugan +lynch +macaca +mad +mafia +magicwand +mams +manhater +manpaste +marijuana +mastabate +mastabater +masterbate +masterblaster +mastrabator +masturbate +masturbating +mattressprincess +meatbeatter +meatrack +meth +mexican +mgger +mggor +mickeyfinn +mideast +milf +minority +mockey +mockie +mocky +mofo +moky +moles +molest +molestation +molester +molestor +moneyshot +mooncricket +mormon +moron +moslem +mosshead +mothafuck +mothafucka +mothafuckaz +mothafucked +mothafucker +mothafuckin +mothafucking +mothafuckings +motherfuck +motherfucked +motherfucker +motherfuckin +motherfucking +motherfuckings +motherlovebone +muff +muffdive +muffdiver +muffindiver +mufflikcer +mulatto +muncher +munt +murder +murderer +muslim +naked +narcotic +nasty +nastybitch +nastyho +nastyslut +nastywhore +nazi +necro +negro +negroes +negroid +negro's +nig +niger +nigerian +nigerians +nigg +nigga +niggah +niggaracci +niggard +niggarded +niggarding +niggardliness +niggardliness's +niggardly +niggards +niggard's +niggaz +nigger +niggerhead +niggerhole +niggers +nigger's +niggle +niggled +niggles +niggling +nigglings +niggor +niggur +niglet +nignog +nigr +nigra +nigre +nip +nipple +nipplering +nittit +nlgger +nlggor +nofuckingway +nook +nookey +nookie +noonan +nooner +nude +nudger +nuke +nutfucker +nymph +ontherag +oral +orga +orgasim +orgasm +orgies +orgy +osama +paki +palesimian +palestinian +pansies +pansy +panti +panties +payo +pearlnecklace +peck +pecker +peckerwood +pee +peehole +pee-pee +peepshow +peepshpw +pendy +penetration +peni5 +penile +penis +penises +penthouse +period +perv +phonesex +phuk +phuked +phuking +phukked +phukking +phungky +phuq +pi55 +picaninny +piccaninny +pickaninny +piker +pikey +piky +pimp +pimped +pimper +pimpjuic +pimpjuice +pimpsimp +pindick +piss +pissed +pisser +pisses +pisshead +pissin +pissing +pissoff +pistol +pixie +pixy +playboy +playgirl +pocha +pocho +pocketpool +pohm +polack +pom +pommie +pommy +poo +poon +poontang +poop +pooper +pooperscooper +pooping +poorwhitetrash +popimp +porchmonkey +porn +pornflick +pornking +porno +pornography +pornprincess +pot +poverty +premature +pric +prick +prickhead +primetime +propaganda +pros +prostitute +protestant +pu55i +pu55y +pube +pubic +pubiclice +pud +pudboy +pudd +puddboy +puke +puntang +purinapricness +puss +pussie +pussies +pussy +pussycat +pussyeater +pussyfucker +pussylicker +pussylips +pussylover +pussypounder +pusy +quashie +queef +queer +quickie +quim +ra8s +rabbi +racial +racist +radical +radicals +raghead +randy +rape +raped +raper +rapist +rearend +rearentry +rectum +redlight +redneck +reefer +reestie +refugee +reject +remains +rentafuck +republican +rere +retard +retarded +ribbed +rigger +rimjob +rimming +roach +robber +roundeye +rump +russki +russkie +sadis +sadom +samckdaddy +sandm +sandnigger +satan +scag +scallywag +scat +schlong +screw +screwyou +scrotum +scum +semen +seppo +servant +sex +sexed +sexfarm +sexhound +sexhouse +sexing +sexkitten +sexpot +sexslave +sextogo +sextoy +sextoys +sexual +sexually +sexwhore +sexy +sexymoma +sexy-slim +shag +shaggin +shagging +shat +shav +shawtypimp +sheeney +shhit +shinola +shit +shitcan +shitdick +shite +shiteater +shited +shitface +shitfaced +shitfit +shitforbrains +shitfuck +shitfucker +shitfull +shithapens +shithappens +shithead +shithouse +shiting +shitlist +shitola +shitoutofluck +shits +shitstain +shitted +shitter +shitting +shitty +shoot +shooting +shortfuck +showtime +sick +sissy +sixsixsix +sixtynine +sixtyniner +skank +skankbitch +skankfuck +skankwhore +skanky +skankybitch +skankywhore +skinflute +skum +skumbag +slant +slanteye +slapper +slaughter +slav +slave +slavedriver +sleezebag +sleezeball +slideitin +slime +slimeball +slimebucket +slopehead +slopey +slopy +slut +sluts +slutt +slutting +slutty +slutwear +slutwhore +smack +smackthemonkey +smut +snatch +snatchpatch +snigger +sniggered +sniggering +sniggers +snigger's +sniper +snot +snowback +snownigger +sob +sodom +sodomise +sodomite +sodomize +sodomy +sonofabitch +sonofbitch +sooty +sos +soviet +spaghettibender +spaghettinigger +spank +spankthemonkey +sperm +spermacide +spermbag +spermhearder +spermherder +spic +spick +spig +spigotty +spik +spit +spitter +splittail +spooge +spreadeagle +spunk +spunky +squaw +stagg +stiffy +strapon +stringer +stripclub +stroke +stroking +stupid +stupidfuck +stupidfucker +suck +suckdick +sucker +suckme +suckmyass +suckmydick +suckmytit +suckoff +suicide +swallow +swallower +swalow +swastika +sweetness +syphilis +taboo +taff +tampon +tang +tantra +tarbaby +tard +teat +terror +terrorist +teste +testicle +testicles +thicklips +thirdeye +thirdleg +threesome +threeway +timbernigger +tinkle +tit +titbitnipply +titfuck +titfucker +titfuckin +titjob +titlicker +titlover +tits +tittie +titties +titty +tnt +toilet +tongethruster +tongue +tonguethrust +tonguetramp +tortur +torture +tosser +towelhead +trailertrash +tramp +trannie +tranny +transexual +transsexual +transvestite +triplex +trisexual +trojan +trots +tuckahoe +tunneloflove +turd +turnon +twat +twink +twinkie +twobitwhore +uck +uk +unfuckable +upskirt +uptheass +upthebutt +urinary +urinate +urine +usama +uterus +vagina +vaginal +vatican +vibr +vibrater +vibrator +vietcong +violence +virgin +virginbreaker +vomit +vulva +wab +wank +wanker +wanking +waysted +weapon +weenie +weewee +welcher +welfare +wetb +wetback +wetspot +whacker +whash +whigger +whiskey +whiskeydick +whiskydick +whit +whitenigger +whites +whitetrash +whitey +whiz +whop +whore +whorefucker +whorehouse +wigger +willie +williewanker +willy +wn +wog +women's +wop +wtf +wuss +wuzzie +xtc +xxx +yankee +yellowman +zigabo +zipperhead diff --git a/Assets/Resources/Geonames/bad-words.txt.meta b/Assets/Resources/Geonames/bad-words.txt.meta new file mode 100644 index 000000000..ff605e0c5 --- /dev/null +++ b/Assets/Resources/Geonames/bad-words.txt.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 790ef350f8658b04480e0645919a21fa +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Geonames/pleiades.csv b/Assets/Resources/Geonames/pleiades.csv new file mode 100644 index 000000000..581d44ff7 --- /dev/null +++ b/Assets/Resources/Geonames/pleiades.csv @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:45b0dbc07d492958b26de3695427076d270bdd0525ab45c415be72560ebccb5f +size 400944 diff --git a/Assets/Resources/Geonames/pleiades.csv.meta b/Assets/Resources/Geonames/pleiades.csv.meta new file mode 100644 index 000000000..dc0edb8f1 --- /dev/null +++ b/Assets/Resources/Geonames/pleiades.csv.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: b532694a5ec3cc6458d42aa2835537b5 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Settings.asset b/Assets/Resources/Settings.asset index 46bee7272..b2a9b0ed2 100644 --- a/Assets/Resources/Settings.asset +++ b/Assets/Resources/Settings.asset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7f09c54dfdb87dffd76fa92365d62c53ce333457b89ccf8ead09093ffffedc42 -size 12525 +oid sha256:347752dd66c3d250eddde8f6f78a17d7369d562bd698a0c8099e941f7c0825c8 +size 13163 diff --git a/Assets/Scenes/ARPG.unity b/Assets/Scenes/ARPG.unity index 4d5b15473..c4bd71fcf 100644 --- a/Assets/Scenes/ARPG.unity +++ b/Assets/Scenes/ARPG.unity @@ -409,13 +409,13 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 23420356} serializedVersion: 2 - m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071068} - m_LocalPosition: {x: 0, y: -5, z: 0} + 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_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} + m_Father: {fileID: 1037490739} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!23 &23420359 MeshRenderer: m_ObjectHideFlags: 0 @@ -436,8 +436,6 @@ MeshRenderer: m_RayTracingAccelStructBuildFlagsOverride: 0 m_RayTracingAccelStructBuildFlags: 1 m_SmallMeshCulling: 1 - m_ForceMeshLod: -1 - m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -459,11 +457,9 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} - m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 - m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &23420360 MeshFilter: @@ -705,8 +701,6 @@ MeshRenderer: m_RayTracingAccelStructBuildFlagsOverride: 0 m_RayTracingAccelStructBuildFlags: 1 m_SmallMeshCulling: 1 - m_ForceMeshLod: -1 - m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -728,11 +722,9 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} - m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 - m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &45636168 MeshFilter: @@ -1145,7 +1137,6 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 @@ -1157,7 +1148,7 @@ MonoBehaviour: m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 @@ -1606,7 +1597,6 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 @@ -1618,7 +1608,7 @@ MonoBehaviour: m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 @@ -1648,6 +1638,81 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 125165634} m_CullTransparentMesh: 0 +--- !u!1 &126433269 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 126433270} + - component: {fileID: 126433272} + - component: {fileID: 126433271} + m_Layer: 5 + m_Name: Icon + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &126433270 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 126433269} + m_LocalRotation: {x: 0, y: 0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 691045497} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 8, y: 0} + m_SizeDelta: {x: 14, y: -2} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &126433271 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 126433269} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 55bed7a5ff978bf4c8cbda9971585df0, type: 3} + m_Type: 0 + m_PreserveAspect: 1 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &126433272 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 126433269} + m_CullTransparentMesh: 0 --- !u!1 &134113270 GameObject: m_ObjectHideFlags: 0 @@ -1756,7 +1821,6 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 @@ -1768,7 +1832,7 @@ MonoBehaviour: m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 @@ -2205,81 +2269,6 @@ MonoBehaviour: m_FlexibleWidth: -1 m_FlexibleHeight: -1 m_LayoutPriority: 1 ---- !u!1001 &177891521 -PrefabInstance: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - serializedVersion: 3 - m_TransformParent: {fileID: 775333809} - m_Modifications: - - target: {fileID: 1337198075554910, guid: 25c7aa9ad705fe143a4d71c1c8deb7d4, type: 3} - propertyPath: m_Name - value: TinyExplosion - objectReference: {fileID: 0} - - target: {fileID: 4441266138185142, guid: 25c7aa9ad705fe143a4d71c1c8deb7d4, type: 3} - propertyPath: m_LocalPosition.x - value: -4.2346153 - objectReference: {fileID: 0} - - target: {fileID: 4441266138185142, guid: 25c7aa9ad705fe143a4d71c1c8deb7d4, type: 3} - propertyPath: m_LocalPosition.y - value: 2.42 - objectReference: {fileID: 0} - - target: {fileID: 4441266138185142, guid: 25c7aa9ad705fe143a4d71c1c8deb7d4, type: 3} - propertyPath: m_LocalPosition.z - value: -21.91896 - objectReference: {fileID: 0} - - target: {fileID: 4441266138185142, guid: 25c7aa9ad705fe143a4d71c1c8deb7d4, type: 3} - propertyPath: m_LocalRotation.w - value: 0.7071068 - objectReference: {fileID: 0} - - target: {fileID: 4441266138185142, guid: 25c7aa9ad705fe143a4d71c1c8deb7d4, type: 3} - propertyPath: m_LocalRotation.x - value: -0.7071068 - objectReference: {fileID: 0} - - target: {fileID: 4441266138185142, guid: 25c7aa9ad705fe143a4d71c1c8deb7d4, type: 3} - propertyPath: m_LocalRotation.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 4441266138185142, guid: 25c7aa9ad705fe143a4d71c1c8deb7d4, type: 3} - propertyPath: m_LocalRotation.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 4441266138185142, guid: 25c7aa9ad705fe143a4d71c1c8deb7d4, type: 3} - propertyPath: m_LocalEulerAnglesHint.x - value: -90 - objectReference: {fileID: 0} - - target: {fileID: 4441266138185142, guid: 25c7aa9ad705fe143a4d71c1c8deb7d4, type: 3} - propertyPath: m_LocalEulerAnglesHint.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 4441266138185142, guid: 25c7aa9ad705fe143a4d71c1c8deb7d4, type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: 0 - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_RemovedGameObjects: [] - m_AddedGameObjects: [] - m_AddedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: 25c7aa9ad705fe143a4d71c1c8deb7d4, type: 3} ---- !u!114 &177891522 stripped -MonoBehaviour: - m_CorrespondingSourceObject: {fileID: 8662091027736085435, guid: 25c7aa9ad705fe143a4d71c1c8deb7d4, - type: 3} - m_PrefabInstance: {fileID: 177891521} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1281fe44325f9b548aa42dc331b17266, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!4 &177891523 stripped -Transform: - m_CorrespondingSourceObject: {fileID: 4441266138185142, guid: 25c7aa9ad705fe143a4d71c1c8deb7d4, - type: 3} - m_PrefabInstance: {fileID: 177891521} - m_PrefabAsset: {fileID: 0} --- !u!1 &178733679 GameObject: m_ObjectHideFlags: 0 @@ -2508,8 +2497,6 @@ MeshRenderer: m_RayTracingAccelStructBuildFlagsOverride: 0 m_RayTracingAccelStructBuildFlags: 1 m_SmallMeshCulling: 1 - m_ForceMeshLod: -1 - m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -2531,11 +2518,9 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} - m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 - m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &195655953 MeshFilter: @@ -2900,7 +2885,6 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 @@ -2912,7 +2896,7 @@ MonoBehaviour: m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 @@ -3426,7 +3410,6 @@ MonoBehaviour: InfiniteAmmoIcon: {fileID: 2044077503} CooldownFill: {fileID: 757740693} HeatFill: {fileID: 2060807771} - SelectedIndicator: {fileID: 0} --- !u!114 &232470601 MonoBehaviour: m_ObjectHideFlags: 0 @@ -3852,7 +3835,6 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 @@ -3864,7 +3846,7 @@ MonoBehaviour: m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 @@ -4135,8 +4117,6 @@ MeshRenderer: m_RayTracingAccelStructBuildFlagsOverride: 0 m_RayTracingAccelStructBuildFlags: 1 m_SmallMeshCulling: 1 - m_ForceMeshLod: -1 - m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -4158,11 +4138,9 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} - m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 - m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &259676750 MeshFilter: @@ -4865,7 +4843,6 @@ RectTransform: m_Children: - {fileID: 2352149240727418666} - {fileID: 410701128} - - {fileID: 568886950} - {fileID: 1558520822} - {fileID: 1396909587} - {fileID: 1556666354} @@ -5081,6 +5058,142 @@ RectTransform: m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 100, y: 100} m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &383790463 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 383790464} + - component: {fileID: 383790466} + - component: {fileID: 383790465} + m_Layer: 5 + m_Name: Strafe RPM + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &383790464 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 383790463} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 691045497} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 8, y: 0} + m_SizeDelta: {x: -16, y: -4} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &383790465 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 383790463} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: 18,000 + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 3fb7d873bb5a7944bb9a7c73c430c44b, type: 2} + m_sharedMaterial: {fileID: 2100000, guid: b9d2f6c9804cec1489502dcc1c19ec54, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 10 + m_fontSizeBase: 10 + m_fontWeight: 400 + m_enableAutoSizing: 1 + m_fontSizeMin: 6 + m_fontSizeMax: 16 + m_fontStyle: 0 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_ActiveFontFeatures: 6e72656b + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_EmojiFallbackSupport: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 1 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!222 &383790466 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 383790463} + m_CullTransparentMesh: 0 --- !u!1 &388927454 GameObject: m_ObjectHideFlags: 0 @@ -5176,7 +5289,6 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 @@ -5188,7 +5300,7 @@ MonoBehaviour: m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 @@ -5583,7 +5695,6 @@ MonoBehaviour: m_VerticalAlignment: 256 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 @@ -5595,7 +5706,7 @@ MonoBehaviour: m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 @@ -5842,6 +5953,7 @@ MonoBehaviour: OverrideIconBlinkSpeed: 0 ShieldIcon: {fileID: 0} HeatsinkBackground: {fileID: 0} + AetherDriveUi: {fileID: 0} EnergyLabel: {fileID: 0} CockpitTemperatureLabel: {fileID: 0} RadiatorTemperatureLabel: {fileID: 0} @@ -5850,12 +5962,18 @@ MonoBehaviour: VisibilityLabel: {fileID: 0} HullDurabilityLabel: {fileID: 0} DistanceLabel: {fileID: 0} + ForwardRPMLabel: {fileID: 0} + StrafeRPMLabel: {fileID: 0} + TurnRPMLabel: {fileID: 0} SensorCooldownFill: {fileID: 0} EnergyFill: {fileID: 0} HullDurabilityFill: {fileID: 0} HeatstrokeMeterFill: {fileID: 0} HypothermiaMeterFill: {fileID: 0} HeatstrokeLimitFill: {fileID: 0} + ForwardRPMFill: {fileID: 0} + StrafeRPMFill: {fileID: 0} + TurnRPMFill: {fileID: 0} --- !u!114 &410701130 MonoBehaviour: m_ObjectHideFlags: 0 @@ -7596,7 +7714,6 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 @@ -7608,7 +7725,7 @@ MonoBehaviour: m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 @@ -8037,7 +8154,7 @@ Camera: m_Depth: 0 m_CullingMask: serializedVersion: 2 - m_Bits: 5120 + m_Bits: 5632 m_RenderingPath: 1 m_TargetTexture: {fileID: 8400000, guid: 06ec5ef8a5830fc44b1ac1a6e123add5, type: 2} m_TargetDisplay: 0 @@ -8241,7 +8358,6 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 @@ -8253,7 +8369,7 @@ MonoBehaviour: m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c + m_ActiveFontFeatures: 00000000 m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 @@ -8616,8 +8732,6 @@ MeshRenderer: m_RayTracingAccelStructBuildFlagsOverride: 0 m_RayTracingAccelStructBuildFlags: 1 m_SmallMeshCulling: 1 - m_ForceMeshLod: -1 - m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -8639,11 +8753,9 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} - m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 - m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &542243549 MeshFilter: @@ -8968,82 +9080,6 @@ RectTransform: type: 3} m_PrefabInstance: {fileID: 2279630454421103832} m_PrefabAsset: {fileID: 0} ---- !u!1 &568886949 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 568886950} - - component: {fileID: 568886952} - - component: {fileID: 568886951} - m_Layer: 5 - m_Name: Debug Info Panel - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &568886950 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 568886949} - 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_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1731988778} - m_Father: {fileID: 346000247} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 16, y: -800} - m_SizeDelta: {x: 220, y: 120} - m_Pivot: {x: 0, y: 0} ---- !u!114 &568886951 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 568886949} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 2100000, guid: 46238d909c2092c4eb873278d84c6ce8, type: 2} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 0 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 0 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 21300000, guid: 84d126f984de5fd42ac66361c00f830c, type: 3} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 0.5 ---- !u!222 &568886952 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 568886949} - m_CullTransparentMesh: 0 --- !u!1 &569895571 GameObject: m_ObjectHideFlags: 0 @@ -9492,6 +9528,11 @@ PrefabInstance: propertyPath: m_SizeDelta.y value: 90.91 objectReference: {fileID: 0} + - target: {fileID: 4533226043457584178, guid: 3d8d9cbf10b12214e98891c1f03c1e99, + type: 3} + propertyPath: InGame + value: 1 + objectReference: {fileID: 0} - target: {fileID: 4533226043457584178, guid: 3d8d9cbf10b12214e98891c1f03c1e99, type: 3} propertyPath: CloudRenderer @@ -10192,6 +10233,9 @@ MonoBehaviour: TintDisplay: {fileID: 218215088} InfluenceDisplay: {fileID: 1390179643} Scale: 1 + Position: + x: 0 + y: 0 IconSize: 32 --- !u!1001 &642590526 PrefabInstance: @@ -11014,8 +11058,6 @@ MeshRenderer: m_RayTracingAccelStructBuildFlagsOverride: 0 m_RayTracingAccelStructBuildFlags: 1 m_SmallMeshCulling: 1 - m_ForceMeshLod: -1 - m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -11037,11 +11079,9 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} - m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 - m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &677960094 MeshFilter: @@ -11051,6 +11091,105 @@ MeshFilter: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 677960091} m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &691045496 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 691045497} + - component: {fileID: 691045500} + - component: {fileID: 691045499} + - component: {fileID: 691045498} + m_Layer: 5 + m_Name: Strafe + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &691045497 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 691045496} + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1542388328} + - {fileID: 126433270} + - {fileID: 383790464} + m_Father: {fileID: 1735948312} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &691045498 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 691045496} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0.011764706} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &691045499 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 691045496} + m_CullTransparentMesh: 1 +--- !u!114 &691045500 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 691045496} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: 16 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 --- !u!1 &693745763 GameObject: m_ObjectHideFlags: 0 @@ -11255,7 +11394,6 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 @@ -11267,7 +11405,7 @@ MonoBehaviour: m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 @@ -11374,8 +11512,6 @@ MeshRenderer: m_RayTracingAccelStructBuildFlagsOverride: 0 m_RayTracingAccelStructBuildFlags: 1 m_SmallMeshCulling: 1 - m_ForceMeshLod: -1 - m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -11397,11 +11533,9 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} - m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 - m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &708399897 MeshFilter: @@ -11634,6 +11768,105 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 719842150} m_CullTransparentMesh: 1 +--- !u!1 &723697980 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 723697981} + - component: {fileID: 723697984} + - component: {fileID: 723697983} + - component: {fileID: 723697982} + m_Layer: 5 + m_Name: Forward + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &723697981 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 723697980} + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1946192591} + - {fileID: 1463754850} + - {fileID: 1558236436} + m_Father: {fileID: 1735948312} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &723697982 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 723697980} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0.011764706} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &723697983 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 723697980} + m_CullTransparentMesh: 1 +--- !u!114 &723697984 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 723697980} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: 16 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 --- !u!1 &732687889 GameObject: m_ObjectHideFlags: 0 @@ -11813,7 +12046,6 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 @@ -11825,7 +12057,7 @@ MonoBehaviour: m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 @@ -11884,6 +12116,7 @@ RectTransform: m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: + - {fileID: 1735948312} - {fileID: 232470597} m_Father: {fileID: 60313920} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -12276,94 +12509,6 @@ RectTransform: m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0, y: 0} ---- !u!1 &775333807 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 775333809} - - component: {fileID: 775333808} - m_Layer: 0 - m_Name: Impact Feedback - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &775333808 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 775333807} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: bfdc38a81d00b0347bb55ad6469535ff, type: 3} - m_Name: - m_EditorClassIdentifier: Assembly-CSharp::ImpactFeedback - HullEffect: {fileID: 177891522} - IntensityScale: 10 - MinEffectScale: 0.3 - Impulse: - m_ImpulseChannel: 1 - m_ImpulseShape: 0 - m_CustomImpulseShape: - serializedVersion: 2 - m_Curve: [] - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - m_ImpulseDuration: 0.2 - m_ImpulseType: 3 - m_DissipationRate: 0 - m_RawSignal: {fileID: 0} - m_AmplitudeGain: 1 - m_FrequencyGain: 1 - m_RepeatMode: 0 - m_Randomize: 1 - m_TimeEnvelope: - m_AttackShape: - serializedVersion: 2 - m_Curve: [] - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - m_DecayShape: - serializedVersion: 2 - m_Curve: [] - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - m_AttackTime: 0 - m_SustainTime: 0.2 - m_DecayTime: 0.7 - m_ScaleWithImpact: 1 - m_HoldForever: 0 - m_ImpactRadius: 100 - m_DirectionMode: 0 - m_DissipationMode: 2 - m_DissipationDistance: 100 - m_PropagationSpeed: 343 ---- !u!4 &775333809 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 775333807} - serializedVersion: 2 - 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_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 177891523} - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &776416423 GameObject: m_ObjectHideFlags: 0 @@ -13022,7 +13167,6 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 @@ -13034,7 +13178,7 @@ MonoBehaviour: m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 @@ -13290,7 +13434,6 @@ MonoBehaviour: m_VerticalAlignment: 256 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 @@ -13302,7 +13445,7 @@ MonoBehaviour: m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c + m_ActiveFontFeatures: 00000000 m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 @@ -13595,7 +13738,6 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 @@ -13607,7 +13749,7 @@ MonoBehaviour: m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 @@ -13657,6 +13799,81 @@ MonoBehaviour: m_FlexibleWidth: -1 m_FlexibleHeight: -1 m_LayoutPriority: 1 +--- !u!1 &853400335 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 853400336} + - component: {fileID: 853400338} + - component: {fileID: 853400337} + m_Layer: 5 + m_Name: Icon + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &853400336 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 853400335} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1214607512} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 8, y: 0} + m_SizeDelta: {x: 10, y: -4} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &853400337 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 853400335} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 4b33557baae0da54a96c0aa97bf752ee, type: 3} + m_Type: 0 + m_PreserveAspect: 1 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &853400338 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 853400335} + m_CullTransparentMesh: 0 --- !u!1 &861158450 GameObject: m_ObjectHideFlags: 0 @@ -13793,7 +14010,6 @@ GameObject: m_Component: - component: {fileID: 887677623} - component: {fileID: 887677622} - - component: {fileID: 887677624} m_Layer: 0 m_Name: Third Person Rig m_TagString: Untagged @@ -13856,29 +14072,6 @@ Transform: - {fileID: 1319157835} m_Father: {fileID: 1665127616} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &887677624 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 887677621} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 00b2d199b96b516448144ab30fb26aed, type: 3} - m_Name: - m_EditorClassIdentifier: Cinemachine::Cinemachine.CinemachineImpulseListener - m_ApplyAfter: 2 - m_ChannelMask: 1 - m_Gain: 1 - m_Use2DDistance: 0 - m_UseCameraSpace: 1 - m_ReactionSettings: - m_SecondaryNoise: {fileID: 0} - m_AmplitudeGain: 1 - m_FrequencyGain: 1 - m_Duration: 1 - m_NoiseOffsets: {x: 0, y: 0, z: 0} --- !u!1 &906767441 GameObject: m_ObjectHideFlags: 0 @@ -14013,7 +14206,6 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 @@ -14025,7 +14217,7 @@ MonoBehaviour: m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 @@ -14151,7 +14343,6 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 @@ -14163,7 +14354,7 @@ MonoBehaviour: m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 @@ -14319,8 +14510,6 @@ MeshRenderer: m_RayTracingAccelStructBuildFlagsOverride: 0 m_RayTracingAccelStructBuildFlags: 1 m_SmallMeshCulling: 1 - m_ForceMeshLod: -1 - m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -14342,11 +14531,9 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} - m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 - m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &926083405 MeshFilter: @@ -14512,7 +14699,6 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 @@ -14524,7 +14710,7 @@ MonoBehaviour: m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 @@ -14646,6 +14832,142 @@ RectTransform: m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 56, y: 56} m_Pivot: {x: 0, y: 0} +--- !u!1 &932757481 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 932757482} + - component: {fileID: 932757484} + - component: {fileID: 932757483} + m_Layer: 5 + m_Name: Turn RPM + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &932757482 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 932757481} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1214607512} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 8, y: 0} + m_SizeDelta: {x: -16, y: -4} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &932757483 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 932757481} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: 18,000 + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 3fb7d873bb5a7944bb9a7c73c430c44b, type: 2} + m_sharedMaterial: {fileID: 2100000, guid: b9d2f6c9804cec1489502dcc1c19ec54, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 10 + m_fontSizeBase: 10 + m_fontWeight: 400 + m_enableAutoSizing: 1 + m_fontSizeMin: 6 + m_fontSizeMax: 16 + m_fontStyle: 0 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_ActiveFontFeatures: 6e72656b + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_EmojiFallbackSupport: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 1 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!222 &932757484 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 932757481} + m_CullTransparentMesh: 0 --- !u!1 &933815652 GameObject: m_ObjectHideFlags: 0 @@ -14772,8 +15094,6 @@ MeshRenderer: m_RayTracingAccelStructBuildFlagsOverride: 0 m_RayTracingAccelStructBuildFlags: 1 m_SmallMeshCulling: 1 - m_ForceMeshLod: -1 - m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -14795,11 +15115,9 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} - m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 - m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &936330464 MeshFilter: @@ -14926,8 +15244,6 @@ MeshRenderer: m_RayTracingAccelStructBuildFlagsOverride: 0 m_RayTracingAccelStructBuildFlags: 1 m_SmallMeshCulling: 1 - m_ForceMeshLod: -1 - m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -14949,11 +15265,9 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} - m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 - m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &945347194 MeshFilter: @@ -16231,6 +16545,12 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: Settings: {fileID: 11400000, guid: cd2344e2001a37544aab0960c164d4ff, type: 2} + Sensitivity: + x: -0.001 + y: 0.001 + Credits: 100000000 + TargetSpottedBlinkFrequency: 20 + TargetSpottedBlinkOffset: -0.25 DeathPostTransitionTime: 1 DeathPost: {fileID: 803284856} HeatstrokePost: {fileID: 1404901906} @@ -16265,7 +16585,6 @@ MonoBehaviour: FriendlyTargetIndicator: {fileID: 332734009} ViewDot: {fileID: 146394778} LockIndicator: {fileID: 1876420642} - IncomingLockIndicatorDistance: 30 Crosshairs: - {fileID: 1914685583} - {fileID: 1284802339} @@ -16275,7 +16594,6 @@ MonoBehaviour: HitMarkerDuration: 0.25 SchematicDisplay: {fileID: 7628189704109037584} TargetSchematicDisplay: {fileID: 410701129} - DebugInfoText: {fileID: 1731988779} TargetIndicator: {fileID: 1556666357} TargetHitpointsFill: {fileID: 1691348884} TargetVisibilityFill: {fileID: 1715434759} @@ -16287,6 +16605,7 @@ MonoBehaviour: NoShieldColor: {r: 0.6, g: 0.6, b: 0.6, a: 1} ShieldIcon: {fileID: 21300000, guid: 2a61aee34fcf7e640a093cb4c4fa56bc, type: 3} NoShieldIcon: {fileID: 21300000, guid: bc1017eafc2627f4aaa4e247f14347fd, type: 3} + IntroDuration: 10 --- !u!4 &1009503730 Transform: m_ObjectHideFlags: 0 @@ -16322,7 +16641,7 @@ MonoBehaviour: Settings: {fileID: 11400000, guid: cd2344e2001a37544aab0960c164d4ff, type: 2} ZoneRoot: {fileID: 2095699057} SectorBrushes: {fileID: 1037490739} - AmbientLight: {fileID: 23420357} + SectorBoundaryBrush: {fileID: 1476765550} SceneCamera: {fileID: 887677622} FogCameras: - {fileID: 559840917} @@ -16333,125 +16652,93 @@ MonoBehaviour: - {fileID: 488792362} - {fileID: 970624071} - {fileID: 2095741464} + FogMaterial: {fileID: 2100000, guid: 2ff39f5d101241043ba1dcde19d92f77, type: 2} + FogFarFadeFraction: 0.125 FarPlaneDistanceMultiplier: 1 AsteroidMeshes: - Mesh: {fileID: 4300004, guid: bdb4c719a85f3f2419f6c573dd1daf15, type: 3} Material: {fileID: 2100000, guid: ce975d2d2ccd0914b9260b7d66319aaa, type: 2} - Radius: 1.5022775 - Mesh: {fileID: 4300004, guid: 19fa9aa3b5fee244fb007d58c351be01, type: 3} Material: {fileID: 2100000, guid: 443981befe15f604aba2b04eef2f0de2, type: 2} - Radius: 1.0907339 - Mesh: {fileID: 4300004, guid: 693c11c21d8f22240ae2b6c576bf923a, type: 3} Material: {fileID: 2100000, guid: 818a00140c1abb047be1d65d1c20b52a, type: 2} - Radius: 1.345119 - Mesh: {fileID: 4300004, guid: 73f7fb37d1925f246919650feda3df71, type: 3} Material: {fileID: 2100000, guid: 60bb3870b22a23b458c2bc94e4403bda, type: 2} - Radius: 0.9581426 - Mesh: {fileID: 4300004, guid: 13503d5cc77421a4384053d90e12610f, type: 3} Material: {fileID: 2100000, guid: 3175592343a31774b872b32ae89a7ee8, type: 2} - Radius: 1.3620772 - Mesh: {fileID: 4300004, guid: 7c93e75f8f4cde14d82932c65389f566, type: 3} Material: {fileID: 2100000, guid: edee875c32d24154688acf645e314864, type: 2} - Radius: 1.1282945 - Mesh: {fileID: 4300004, guid: b2e60056527750e4c87bd4f6de85ec32, type: 3} Material: {fileID: 2100000, guid: c3d0e5db17690724b89cff9a71876aa6, type: 2} - Radius: 1.5490558 - Mesh: {fileID: 4300004, guid: 87ef785989ec82b498488e651b61b2c6, type: 3} Material: {fileID: 2100000, guid: 5686a9131ca8350448768971c9e21da0, type: 2} - Radius: 1.4786077 - Mesh: {fileID: 4300004, guid: a0f93e74d454f5046908a26ecbbc31cf, type: 3} Material: {fileID: 2100000, guid: 85e9ac4c62af0fb4a94bc35ac5e24254, type: 2} - Radius: 1.1443666 - Mesh: {fileID: 4300004, guid: 4a9e0d7ffd8f8e94abf7a800653c0b4e, type: 3} Material: {fileID: 2100000, guid: 27b1a299ede684d499133b9a0dc85bda, type: 2} - Radius: 1.1114912 - Mesh: {fileID: 4300004, guid: 232b4a71860923049890d661dee4aff7, type: 3} Material: {fileID: 2100000, guid: d9e9ebabc89054f4495754372a7b4d8f, type: 2} - Radius: 1.5410137 - Mesh: {fileID: 4300004, guid: 335c54d8095aa3f44bab46ca5fa5bd4c, type: 3} Material: {fileID: 2100000, guid: 71cd479bb26cd7140ba9d3753f49ffbc, type: 2} - Radius: 1.3792597 - Mesh: {fileID: 4300004, guid: 8942a135422bd014bb3451fe02d656f2, type: 3} Material: {fileID: 2100000, guid: 0f7035043b158484995ff86e9371b141, type: 2} - Radius: 1.2433527 - Mesh: {fileID: 4300004, guid: 47e8c832aa7d46e4ba06961fddf3cc06, type: 3} Material: {fileID: 2100000, guid: d5788bb4b0d2d93429d9c6462034e470, type: 2} - Radius: 1.3664026 - Mesh: {fileID: 4300004, guid: 7c1227bb235e0f74aa9a6cdb9e7ccac5, type: 3} Material: {fileID: 2100000, guid: 060b5e360701d5146adc3d1c65c7a3df, type: 2} - Radius: 1.2458941 - Mesh: {fileID: 4300004, guid: 77a272b796d88344eacf56a79372b45e, type: 3} Material: {fileID: 2100000, guid: 3cd15eb9c358aa547bcd223ee3c1edde, type: 2} - Radius: 2.157539 - Mesh: {fileID: 4300004, guid: bafc829a0712b174d9485c5bcbc1b529, type: 3} Material: {fileID: 2100000, guid: b58fd84189173114d8708fb50b43f2d7, type: 2} - Radius: 1.5399581 - Mesh: {fileID: 4300004, guid: 47fa308b6b417034ea47809cb08bccfb, type: 3} Material: {fileID: 2100000, guid: f56b0896907ac9e41b6fd9dca05f1fa2, type: 2} - Radius: 1.8855069 - Mesh: {fileID: 4300004, guid: fb03a3e40b409db44a810641e0a6c493, type: 3} Material: {fileID: 2100000, guid: 78859c2284122944493cc283967036db, type: 2} - Radius: 1.2214345 - Mesh: {fileID: 4300004, guid: de7739fee205f4a4f9ae290126a36b61, type: 3} Material: {fileID: 2100000, guid: 89b312038af5203469d447f7ff01105f, type: 2} - Radius: 1.8183402 - Mesh: {fileID: 4300004, guid: a966f9aba651bf34da1bb6e3e7f26301, type: 3} Material: {fileID: 2100000, guid: 3326bc3e2b8ada34c9bfd44cf8cf1a1c, type: 2} - Radius: 1.5686527 - Mesh: {fileID: 4300004, guid: 0d55ec2b68453b7418abcd63378eed69, type: 3} Material: {fileID: 2100000, guid: 12b1f515279281a42b2bd53cdb174488, type: 2} - Radius: 1.9112675 - Mesh: {fileID: 4300004, guid: e5dc38d7ffa6ed242831255d93657aaa, type: 3} Material: {fileID: 2100000, guid: 5a06a4f6d5df32b4dae76c13939d3ce9, type: 2} - Radius: 1.9507759 - Mesh: {fileID: 4300004, guid: 9f36793bd68d3d84d8116485bf933992, type: 3} Material: {fileID: 2100000, guid: decc37f956dfc244b956de2d6f5375c2, type: 2} - Radius: 1.5778105 - Mesh: {fileID: 4300004, guid: 214c1534cdd5b3a4a80927e9d879290f, type: 3} Material: {fileID: 2100000, guid: a20b424628f81de4e8cf080a503b66af, type: 2} - Radius: 1.4580269 - Mesh: {fileID: 4300004, guid: 7db51bba443e10f4f9a597a296ceb0c6, type: 3} Material: {fileID: 2100000, guid: f96d19f3fe978b044972d1360d2e7707, type: 2} - Radius: 2.430305 - Mesh: {fileID: 4300004, guid: 6116ec4d9786d04408c3b26d0c525407, type: 3} Material: {fileID: 2100000, guid: 1788de6db766a4444a09dc0c80e1bcb2, type: 2} - Radius: 1.7872484 - Mesh: {fileID: 4300004, guid: 3d6e611c9ebead04b9d6d7d490977ddc, type: 3} Material: {fileID: 2100000, guid: 0fab294fd86e3b84394a967642904d55, type: 2} - Radius: 1.9273407 - Mesh: {fileID: 4300004, guid: 76b1f709ca820234bbf6c03507333b7e, type: 3} Material: {fileID: 2100000, guid: 63a8a57976371814689d7fb222e635e9, type: 2} - Radius: 1.70707 - Mesh: {fileID: 4300004, guid: d3c9f05eabff9e24ca9521e0b8dffd50, type: 3} Material: {fileID: 2100000, guid: 9be65d82397829b46894243c2d91a06d, type: 2} - Radius: 1.6336656 AsteroidSpritesheetWidth: 4 AsteroidSpritesheetHeight: 4 LODHandler: {fileID: 1009503736} SlimeRenderer: {fileID: 1254851254} SlimeGravityCamera: {fileID: 1066823975} - SimpleCommodityPickup: {fileID: 7436534270673427838, guid: 521bfeece7dd5fd4e8f166d38493f18c, + SimpleCommodityPickup: {fileID: 4008709970769624704, guid: 521bfeece7dd5fd4e8f166d38493f18c, type: 3} - CompoundCommodityPickup: {fileID: 4507103896627202189, guid: 366909b6a01d7254d8eef01c333f8e00, + CompoundCommodityPickup: {fileID: 7449398549621940518, guid: 366909b6a01d7254d8eef01c333f8e00, type: 3} - GearPickup: {fileID: 7390748043139687254, guid: d2b7e9a9cd7733041b0553682e4b61af, + GearPickup: {fileID: 946329779588188460, guid: d2b7e9a9cd7733041b0553682e4b61af, type: 3} - WeaponPickup: {fileID: 5705448000916375656, guid: d2cec1d8c3d94074e9d2e6088e1c02d7, - type: 3} - MinePrefab: {fileID: 7283754118921506074, guid: b04728b2b65e057429eb6e8529299c8a, - type: 3} - CloudPrefab: {fileID: 2914522964471179774, guid: 4084aa3d08e52e04f880ad13daa409b4, + WeaponPickup: {fileID: 8842807112802394818, guid: d2cec1d8c3d94074e9d2e6088e1c02d7, type: 3} MapGravityMaterials: - {fileID: 2100000, guid: 841e4091d19548347bd59115047b4e49, type: 2} - {fileID: 2100000, guid: a92fc6d958edb9f46b6e58134f609cc0, type: 2} - GravityField: {fileID: 2100000, guid: 44a8bbb89acb4e34c9f41a9da5842bb4, type: 2} Tour: 0 TourSwitchTime: 10 TourFollowDistance: 100 TourHeightOffset: 50 TourFollowOffsetDegrees: 55 - MapAsteroidMaterial: {fileID: 2100000, guid: c1012d5466454651b7279be93ef9af88, type: 2} + AsteroidBeltUI: {fileID: 349597964696402918, guid: 1f1bfa2175a13b647888e2949e0cb138, + type: 3} Planet: {fileID: 8287217960984982033, guid: 88ace6073e3db1a46bd3aaf4f971acb9, type: 3} GasGiant: {fileID: 3250623180916197132, guid: 85753b4a7c762274385af384abed7a04, type: 3} @@ -16491,6 +16778,7 @@ MonoBehaviour: NebulaTint: {fileID: 8400000, guid: d196505464047f04a97f28689041209b, type: 2} Heightmap: {fileID: 8400000, guid: 2fc21a9d3e9647948b56e384cd9378b3, type: 2} ParticleColors: {fileID: 2800000, guid: 56db63da398b2d04394ddbccedce943c, type: 3} + GravityCamera: {fileID: 1537342003} --- !u!114 &1009503736 MonoBehaviour: m_ObjectHideFlags: 0 @@ -16709,7 +16997,6 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 @@ -16721,7 +17008,7 @@ MonoBehaviour: m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 @@ -16751,6 +17038,81 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1012981707} m_CullTransparentMesh: 0 +--- !u!1 &1013676407 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1013676408} + - component: {fileID: 1013676410} + - component: {fileID: 1013676409} + m_Layer: 5 + m_Name: Turn Fill + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1013676408 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1013676407} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1214607512} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0.8, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1013676409 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1013676407} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0.101960786} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1013676410 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1013676407} + m_CullTransparentMesh: 0 --- !u!1 &1029396710 GameObject: m_ObjectHideFlags: 0 @@ -16891,6 +17253,8 @@ Transform: m_LocalScale: {x: 3000, y: 3000, z: 3000} m_ConstrainProportionsScale: 0 m_Children: + - {fileID: 1476765548} + - {fileID: 23420357} - {fileID: 1108843909} - {fileID: 1647230682} - {fileID: 1254851255} @@ -17067,7 +17431,6 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 @@ -17079,7 +17442,7 @@ MonoBehaviour: m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 @@ -17204,7 +17567,6 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 @@ -17216,7 +17578,7 @@ MonoBehaviour: m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 @@ -17985,7 +18347,6 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 @@ -17997,7 +18358,7 @@ MonoBehaviour: m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 @@ -18398,7 +18759,6 @@ MonoBehaviour: m_VerticalAlignment: 256 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 @@ -18410,7 +18770,7 @@ MonoBehaviour: m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c + m_ActiveFontFeatures: 00000000 m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 @@ -18685,8 +19045,6 @@ MeshRenderer: m_RayTracingAccelStructBuildFlagsOverride: 0 m_RayTracingAccelStructBuildFlags: 1 m_SmallMeshCulling: 1 - m_ForceMeshLod: -1 - m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -18708,11 +19066,9 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} - m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 - m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &1163671429 MeshFilter: @@ -19327,6 +19683,105 @@ RectTransform: m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0, y: 0} +--- !u!1 &1214607511 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1214607512} + - component: {fileID: 1214607515} + - component: {fileID: 1214607514} + - component: {fileID: 1214607513} + m_Layer: 5 + m_Name: Turn + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1214607512 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1214607511} + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1013676408} + - {fileID: 853400336} + - {fileID: 932757482} + m_Father: {fileID: 1735948312} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &1214607513 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1214607511} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0.011764706} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1214607514 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1214607511} + m_CullTransparentMesh: 1 +--- !u!114 &1214607515 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1214607511} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: 16 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 --- !u!1 &1218822609 GameObject: m_ObjectHideFlags: 0 @@ -20560,7 +21015,6 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 @@ -20572,7 +21026,7 @@ MonoBehaviour: m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 @@ -21181,8 +21635,6 @@ MeshRenderer: m_RayTracingAccelStructBuildFlagsOverride: 0 m_RayTracingAccelStructBuildFlags: 1 m_SmallMeshCulling: 1 - m_ForceMeshLod: -1 - m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -21204,11 +21656,9 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} - m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 - m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &1390575965 MeshFilter: @@ -21405,7 +21855,6 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 @@ -21417,7 +21866,7 @@ MonoBehaviour: m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 @@ -21605,7 +22054,6 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 @@ -21617,7 +22065,7 @@ MonoBehaviour: m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 @@ -21792,7 +22240,6 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 @@ -21804,7 +22251,7 @@ MonoBehaviour: m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 @@ -22299,7 +22746,6 @@ MonoBehaviour: InfiniteAmmoIcon: {fileID: 0} CooldownFill: {fileID: 0} HeatFill: {fileID: 0} - SelectedIndicator: {fileID: 0} --- !u!114 &1462704894 MonoBehaviour: m_ObjectHideFlags: 0 @@ -22332,6 +22778,81 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 1281fe44325f9b548aa42dc331b17266, type: 3} m_Name: m_EditorClassIdentifier: +--- !u!1 &1463754849 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1463754850} + - component: {fileID: 1463754852} + - component: {fileID: 1463754851} + m_Layer: 5 + m_Name: Icon + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1463754850 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1463754849} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 723697981} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 8, y: 0} + m_SizeDelta: {x: 14, y: -2} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1463754851 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1463754849} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 55bed7a5ff978bf4c8cbda9971585df0, type: 3} + m_Type: 0 + m_PreserveAspect: 1 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1463754852 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1463754849} + m_CullTransparentMesh: 0 --- !u!1 &1464157084 GameObject: m_ObjectHideFlags: 0 @@ -22490,7 +23011,6 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 @@ -22502,7 +23022,7 @@ MonoBehaviour: m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 @@ -22664,6 +23184,92 @@ RectTransform: m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &1476765547 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1476765548} + - component: {fileID: 1476765551} + - component: {fileID: 1476765550} + m_Layer: 9 + m_Name: Boundary + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1476765548 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1476765547} + serializedVersion: 2 + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1037490739} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1476765550 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1476765547} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 0 + m_StaticShadowCaster: 0 + m_MotionVectors: 2 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 0 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 8f45fb3a0f420d5428f1528827d55fa2, 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 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1476765551 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1476765547} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &1485884351 GameObject: m_ObjectHideFlags: 0 @@ -22822,7 +23428,6 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 @@ -22834,7 +23439,7 @@ MonoBehaviour: m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 @@ -23219,7 +23824,6 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 @@ -23231,7 +23835,7 @@ MonoBehaviour: m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c + m_ActiveFontFeatures: 00000000 m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 @@ -23500,7 +24104,7 @@ Camera: m_Depth: 0 m_CullingMask: serializedVersion: 2 - m_Bits: 512 + m_Bits: 1536 m_RenderingPath: 1 m_TargetTexture: {fileID: 8400000, guid: 2fc21a9d3e9647948b56e384cd9378b3, type: 2} m_TargetDisplay: 0 @@ -23663,6 +24267,81 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1541341820} m_CullTransparentMesh: 1 +--- !u!1 &1542388327 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1542388328} + - component: {fileID: 1542388330} + - component: {fileID: 1542388329} + m_Layer: 5 + m_Name: Strafe Fill + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1542388328 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1542388327} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 691045497} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0.8, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1542388329 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1542388327} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0.101960786} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1542388330 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1542388327} + m_CullTransparentMesh: 0 --- !u!1 &1547889398 GameObject: m_ObjectHideFlags: 0 @@ -23811,11 +24490,6 @@ PrefabInstance: propertyPath: m_firstOverflowCharacterIndex value: 0 objectReference: {fileID: 0} - - target: {fileID: 1713457305180270767, guid: 2758dfa2744d7ad4d8877545189d116e, - type: 3} - propertyPath: 'm_ActiveFontFeatures.Array.data[0]' - value: 1801810542 - objectReference: {fileID: 0} - target: {fileID: 2297648055057363568, guid: 2758dfa2744d7ad4d8877545189d116e, type: 3} propertyPath: m_Pivot.x @@ -24162,6 +24836,142 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1558182380} m_CullTransparentMesh: 1 +--- !u!1 &1558236435 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1558236436} + - component: {fileID: 1558236438} + - component: {fileID: 1558236437} + m_Layer: 5 + m_Name: Forward RPM + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1558236436 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1558236435} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 723697981} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 8, y: 0} + m_SizeDelta: {x: -16, y: -4} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1558236437 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1558236435} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: 18,000 + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 3fb7d873bb5a7944bb9a7c73c430c44b, type: 2} + m_sharedMaterial: {fileID: 2100000, guid: b9d2f6c9804cec1489502dcc1c19ec54, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 10 + m_fontSizeBase: 10 + m_fontWeight: 400 + m_enableAutoSizing: 1 + m_fontSizeMin: 6 + m_fontSizeMax: 16 + m_fontStyle: 0 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_ActiveFontFeatures: 6e72656b + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_EmojiFallbackSupport: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 1 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!222 &1558236438 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1558236435} + m_CullTransparentMesh: 0 --- !u!1 &1558520821 GameObject: m_ObjectHideFlags: 0 @@ -24401,8 +25211,6 @@ MeshRenderer: m_RayTracingAccelStructBuildFlagsOverride: 0 m_RayTracingAccelStructBuildFlags: 1 m_SmallMeshCulling: 1 - m_ForceMeshLod: -1 - m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -24424,11 +25232,9 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} - m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 - m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &1566772338 MeshFilter: @@ -24761,7 +25567,6 @@ MonoBehaviour: m_VerticalAlignment: 1024 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 50 m_lineSpacingMax: 0 @@ -24773,7 +25578,7 @@ MonoBehaviour: m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c + m_ActiveFontFeatures: 00000000 m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 @@ -24905,11 +25710,6 @@ PrefabInstance: propertyPath: m_firstOverflowCharacterIndex value: 0 objectReference: {fileID: 0} - - target: {fileID: 1713457305180270767, guid: 2758dfa2744d7ad4d8877545189d116e, - type: 3} - propertyPath: 'm_ActiveFontFeatures.Array.data[0]' - value: 1801810542 - objectReference: {fileID: 0} - target: {fileID: 2297648055057363568, guid: 2758dfa2744d7ad4d8877545189d116e, type: 3} propertyPath: m_Pivot.x @@ -25404,7 +26204,6 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 @@ -25416,7 +26215,7 @@ MonoBehaviour: m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c + m_ActiveFontFeatures: 00000000 m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 @@ -25916,7 +26715,6 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 @@ -25928,7 +26726,7 @@ MonoBehaviour: m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 @@ -26164,8 +26962,6 @@ MeshRenderer: m_RayTracingAccelStructBuildFlagsOverride: 0 m_RayTracingAccelStructBuildFlags: 1 m_SmallMeshCulling: 1 - m_ForceMeshLod: -1 - m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -26187,11 +26983,9 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} - m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 - m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &1713745167 MeshFilter: @@ -26679,151 +27473,6 @@ MonoBehaviour: TabButtons: {fileID: 1783772015} ActiveTabColor: {r: 1, g: 0.44583336, b: 0.050000012, a: 1} InactiveTabColor: {r: 0.6981132, g: 0.6981132, b: 0.6981132, a: 1} ---- !u!1 &1731988777 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1731988778} - - component: {fileID: 1731988780} - - component: {fileID: 1731988779} - m_Layer: 5 - m_Name: Debug Info Text - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &1731988778 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1731988777} - 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_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 568886950} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 2, y: 2} - m_SizeDelta: {x: -20, y: -20} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &1731988779 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1731988777} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} - m_Name: - m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_text: 'New TextNew TextNew Text - - New TextNew TextNew TextNew Text - - New - TextNew Text - - New TextNew Text' - m_isRightToLeft: 0 - m_fontAsset: {fileID: 11400000, guid: 53555f7a2d5e745428813f1b1118734f, type: 2} - m_sharedMaterial: {fileID: -2804126062856497447, guid: 53555f7a2d5e745428813f1b1118734f, - type: 2} - m_fontSharedMaterials: [] - m_fontMaterial: {fileID: 0} - m_fontMaterials: [] - m_fontColor32: - serializedVersion: 2 - rgba: 4294967295 - m_fontColor: {r: 1, g: 1, b: 1, a: 1} - m_enableVertexGradient: 0 - m_colorMode: 3 - m_fontColorGradient: - topLeft: {r: 1, g: 1, b: 1, a: 1} - topRight: {r: 1, g: 1, b: 1, a: 1} - bottomLeft: {r: 1, g: 1, b: 1, a: 1} - bottomRight: {r: 1, g: 1, b: 1, a: 1} - m_fontColorGradientPreset: {fileID: 0} - m_spriteAsset: {fileID: 0} - m_tintAllSprites: 0 - m_StyleSheet: {fileID: 0} - m_TextStyleHashCode: -1183493901 - m_overrideHtmlColors: 0 - m_faceColor: - serializedVersion: 2 - rgba: 4294967295 - m_fontSize: 15.85 - m_fontSizeBase: 12 - m_fontWeight: 400 - m_enableAutoSizing: 1 - m_fontSizeMin: 8 - m_fontSizeMax: 72 - m_fontStyle: 0 - m_HorizontalAlignment: 1 - m_VerticalAlignment: 1024 - m_textAlignment: 65535 - m_characterSpacing: 0 - m_characterHorizontalScale: 1 - m_wordSpacing: 0 - m_lineSpacing: 0 - m_lineSpacingMax: 0 - m_paragraphSpacing: 0 - m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 - m_wordWrappingRatios: 0.4 - m_overflowMode: 0 - m_linkedTextComponent: {fileID: 0} - parentLinkedComponent: {fileID: 0} - m_enableKerning: 0 - m_ActiveFontFeatures: 6e72656b6167696c - m_enableExtraPadding: 0 - checkPaddingRequired: 0 - m_isRichText: 1 - m_EmojiFallbackSupport: 1 - m_parseCtrlCharacters: 1 - m_isOrthographic: 1 - m_isCullingEnabled: 0 - m_horizontalMapping: 0 - m_verticalMapping: 0 - m_uvLineOffset: 0 - m_geometrySortingOrder: 0 - m_IsTextObjectScaleStatic: 0 - m_VertexBufferAutoSizeReduction: 0 - m_useMaxVisibleDescender: 1 - m_pageToDisplay: 1 - m_margin: {x: 0, y: 0, z: 0, w: 0} - m_isUsingLegacyAnimationComponent: 0 - m_isVolumetricText: 0 - m_hasFontAssetChanged: 0 - m_baseMaterial: {fileID: 0} - m_maskOffset: {x: 0, y: 0, z: 0, w: 0} ---- !u!222 &1731988780 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1731988777} - m_CullTransparentMesh: 1 --- !u!1 &1733988258 GameObject: m_ObjectHideFlags: 0 @@ -26920,7 +27569,6 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 @@ -26932,7 +27580,7 @@ MonoBehaviour: m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 @@ -26962,6 +27610,92 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1733988258} m_CullTransparentMesh: 1 +--- !u!1 &1735948311 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1735948312} + - component: {fileID: 1735948314} + - component: {fileID: 1735948313} + m_Layer: 5 + m_Name: RPM Display + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1735948312 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1735948311} + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 723697981} + - {fileID: 691045497} + - {fileID: 1214607512} + m_Father: {fileID: 746825913} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1735948313 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1735948311} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 0 + m_Spacing: 2 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!114 &1735948314 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1735948311} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: 14 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 --- !u!1 &1741914909 GameObject: m_ObjectHideFlags: 0 @@ -27194,7 +27928,6 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 @@ -27206,7 +27939,7 @@ MonoBehaviour: m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 @@ -28246,8 +28979,6 @@ MeshRenderer: m_RayTracingAccelStructBuildFlagsOverride: 0 m_RayTracingAccelStructBuildFlags: 1 m_SmallMeshCulling: 1 - m_ForceMeshLod: -1 - m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -28269,11 +29000,9 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} - m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 - m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &1857285688 MeshFilter: @@ -29036,6 +29765,81 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1943948574} m_CullTransparentMesh: 0 +--- !u!1 &1946192590 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1946192591} + - component: {fileID: 1946192593} + - component: {fileID: 1946192592} + m_Layer: 5 + m_Name: Forward Fill + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1946192591 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1946192590} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 723697981} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0.8, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1946192592 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1946192590} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0.101960786} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1946192593 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1946192590} + m_CullTransparentMesh: 0 --- !u!1 &1952022815 GameObject: m_ObjectHideFlags: 0 @@ -29276,7 +30080,6 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 @@ -29288,7 +30091,7 @@ MonoBehaviour: m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c + m_ActiveFontFeatures: 00000000 m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 @@ -30253,7 +31056,6 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 @@ -30265,7 +31067,7 @@ MonoBehaviour: m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 @@ -30310,8 +31112,6 @@ MeshRenderer: m_RayTracingAccelStructBuildFlagsOverride: 0 m_RayTracingAccelStructBuildFlags: 1 m_SmallMeshCulling: 1 - m_ForceMeshLod: -1 - m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -30333,11 +31133,9 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} - m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 - m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!1 &2095699056 GameObject: @@ -30570,7 +31368,6 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 @@ -30582,7 +31379,7 @@ MonoBehaviour: m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 @@ -30911,8 +31708,6 @@ MeshRenderer: m_RayTracingAccelStructBuildFlagsOverride: 0 m_RayTracingAccelStructBuildFlags: 1 m_SmallMeshCulling: 1 - m_ForceMeshLod: -1 - m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -30934,11 +31729,9 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} - m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 - m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &2117796868 MeshFilter: @@ -31099,7 +31892,6 @@ MonoBehaviour: m_VerticalAlignment: 256 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 @@ -31111,7 +31903,7 @@ MonoBehaviour: m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c + m_ActiveFontFeatures: 00000000 m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 @@ -31236,7 +32028,6 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 @@ -31248,7 +32039,7 @@ MonoBehaviour: m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 @@ -32379,7 +33170,6 @@ MonoBehaviour: m_VerticalAlignment: 1024 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 @@ -32391,7 +33181,7 @@ MonoBehaviour: m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c + m_ActiveFontFeatures: 00000000 m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 @@ -32480,7 +33270,6 @@ MonoBehaviour: m_VerticalAlignment: 1024 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 @@ -32492,7 +33281,7 @@ MonoBehaviour: m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c + m_ActiveFontFeatures: 00000000 m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 @@ -32801,7 +33590,6 @@ MonoBehaviour: m_VerticalAlignment: 256 m_textAlignment: 65535 m_characterSpacing: 9.01 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 @@ -32813,7 +33601,7 @@ MonoBehaviour: m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c + m_ActiveFontFeatures: 00000000 m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 @@ -32931,7 +33719,6 @@ MonoBehaviour: m_VerticalAlignment: 1024 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 @@ -32943,7 +33730,7 @@ MonoBehaviour: m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c + m_ActiveFontFeatures: 00000000 m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 @@ -33032,7 +33819,6 @@ MonoBehaviour: m_VerticalAlignment: 1024 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 @@ -33044,7 +33830,7 @@ MonoBehaviour: m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c + m_ActiveFontFeatures: 00000000 m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 @@ -33244,7 +34030,6 @@ MonoBehaviour: m_VerticalAlignment: 1024 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 @@ -33256,7 +34041,7 @@ MonoBehaviour: m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c + m_ActiveFontFeatures: 00000000 m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 @@ -33584,7 +34369,6 @@ MonoBehaviour: m_VerticalAlignment: 1024 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 @@ -33596,7 +34380,7 @@ MonoBehaviour: m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c + m_ActiveFontFeatures: 00000000 m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 @@ -33722,7 +34506,6 @@ MonoBehaviour: m_VerticalAlignment: 1024 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 @@ -33734,7 +34517,7 @@ MonoBehaviour: m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c + m_ActiveFontFeatures: 00000000 m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 @@ -33842,7 +34625,6 @@ MonoBehaviour: m_VerticalAlignment: 1024 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 @@ -33854,7 +34636,7 @@ MonoBehaviour: m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c + m_ActiveFontFeatures: 00000000 m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 @@ -33998,7 +34780,6 @@ MonoBehaviour: m_VerticalAlignment: 1024 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 @@ -34010,7 +34791,7 @@ MonoBehaviour: m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c + m_ActiveFontFeatures: 00000000 m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 @@ -34136,7 +34917,6 @@ MonoBehaviour: m_VerticalAlignment: 1024 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 @@ -34148,7 +34928,7 @@ MonoBehaviour: m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c + m_ActiveFontFeatures: 00000000 m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 @@ -34442,7 +35222,6 @@ MonoBehaviour: m_VerticalAlignment: 1024 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 @@ -34454,7 +35233,7 @@ MonoBehaviour: m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c + m_ActiveFontFeatures: 00000000 m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 @@ -34579,7 +35358,6 @@ MonoBehaviour: m_VerticalAlignment: 1024 m_textAlignment: 65535 m_characterSpacing: 9.01 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 @@ -34591,7 +35369,7 @@ MonoBehaviour: m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c + m_ActiveFontFeatures: 00000000 m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 @@ -34679,7 +35457,6 @@ MonoBehaviour: m_VerticalAlignment: 1024 m_textAlignment: 65535 m_characterSpacing: 9.01 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 @@ -34691,7 +35468,7 @@ MonoBehaviour: m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c + m_ActiveFontFeatures: 00000000 m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 @@ -34854,7 +35631,6 @@ MonoBehaviour: m_VerticalAlignment: 1024 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 @@ -34866,7 +35642,7 @@ MonoBehaviour: m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c + m_ActiveFontFeatures: 00000000 m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 @@ -35011,7 +35787,6 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 @@ -35023,7 +35798,7 @@ MonoBehaviour: m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 @@ -36356,7 +37131,6 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 @@ -36368,7 +37142,7 @@ MonoBehaviour: m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 @@ -36803,7 +37577,6 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 @@ -36815,7 +37588,7 @@ MonoBehaviour: m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c + m_ActiveFontFeatures: 00000000 m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 @@ -37115,7 +37888,6 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 @@ -37127,7 +37899,7 @@ MonoBehaviour: m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 @@ -38238,6 +39010,7 @@ MonoBehaviour: OverrideIconBlinkSpeed: 10 ShieldIcon: {fileID: 19222411} HeatsinkBackground: {fileID: 661332569} + AetherDriveUi: {fileID: 1735948311} EnergyLabel: {fileID: 804489113} CockpitTemperatureLabel: {fileID: 212527384} RadiatorTemperatureLabel: {fileID: 1752418078} @@ -38246,12 +39019,18 @@ MonoBehaviour: VisibilityLabel: {fileID: 2122035461} HullDurabilityLabel: {fileID: 697075017} DistanceLabel: {fileID: 0} + ForwardRPMLabel: {fileID: 1558236437} + StrafeRPMLabel: {fileID: 383790465} + TurnRPMLabel: {fileID: 932757483} SensorCooldownFill: {fileID: 1943948575} EnergyFill: {fileID: 271575215} HullDurabilityFill: {fileID: 753112995} HeatstrokeMeterFill: {fileID: 1029396711} HypothermiaMeterFill: {fileID: 79341832} HeatstrokeLimitFill: {fileID: 933815653} + ForwardRPMFill: {fileID: 1946192591} + StrafeRPMFill: {fileID: 1542388328} + TurnRPMFill: {fileID: 1013676408} --- !u!224 &7628189704657849088 RectTransform: m_ObjectHideFlags: 0 @@ -38421,7 +39200,6 @@ SceneRoots: - {fileID: 906767442} - {fileID: 1009503730} - {fileID: 1037490739} - - {fileID: 23420357} - {fileID: 2095699057} - {fileID: 134113271} - {fileID: 666227432} @@ -38431,4 +39209,3 @@ SceneRoots: - {fileID: 990038542} - {fileID: 2135526003} - {fileID: 495677244} - - {fileID: 775333809} diff --git a/Assets/Scenes/FieldShieldTest.unity b/Assets/Scenes/FieldShieldTest.unity index b659bb95b..b1b2e50b9 100644 --- a/Assets/Scenes/FieldShieldTest.unity +++ b/Assets/Scenes/FieldShieldTest.unity @@ -13,7 +13,7 @@ OcclusionCullingSettings: --- !u!104 &2 RenderSettings: m_ObjectHideFlags: 0 - serializedVersion: 10 + serializedVersion: 9 m_Fog: 0 m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} m_FogMode: 3 @@ -38,12 +38,13 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0.023674645, g: 0.04639011, b: 0.122535154, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &3 LightmapSettings: m_ObjectHideFlags: 0 - serializedVersion: 13 - m_BakeOnSceneLoad: 0 + serializedVersion: 12 + m_GIWorkflowMode: 1 m_GISettings: serializedVersion: 2 m_BounceScale: 1 @@ -66,6 +67,9 @@ LightmapSettings: m_LightmapParameters: {fileID: 0} m_LightmapsBakeMode: 1 m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 m_ReflectionCompression: 2 m_MixedBakeMode: 2 m_BakeBackend: 1 @@ -100,7 +104,7 @@ NavMeshSettings: serializedVersion: 2 m_ObjectHideFlags: 0 m_BuildSettings: - serializedVersion: 3 + serializedVersion: 2 agentTypeID: 0 agentRadius: 0.5 agentHeight: 2 @@ -113,7 +117,7 @@ NavMeshSettings: cellSize: 0.16666667 manualTileSize: 0 tileSize: 256 - buildHeightMesh: 0 + accuratePlacement: 0 maxJobWorkers: 0 preserveTilesOutsideBounds: 0 debug: @@ -151,6 +155,7 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 815358592} + m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -291,6 +296,7 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 815358592} + m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -302,7 +308,6 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: - serializedVersion: 3 m_TransformParent: {fileID: 815358592} m_Modifications: - target: {fileID: 257019179550429270, guid: 426f9dcb510530d4dbfa678c9f727ec1, @@ -355,11 +360,6 @@ PrefabInstance: propertyPath: m_text value: Aetheric Field Tester objectReference: {fileID: 0} - - target: {fileID: 7131821417072393581, guid: 426f9dcb510530d4dbfa678c9f727ec1, - type: 3} - propertyPath: 'm_ActiveFontFeatures.Array.data[0]' - value: 1801810542 - objectReference: {fileID: 0} - target: {fileID: 7131821417165215474, guid: 426f9dcb510530d4dbfa678c9f727ec1, type: 3} propertyPath: m_Enabled @@ -481,9 +481,6 @@ PrefabInstance: value: Properties objectReference: {fileID: 0} m_RemovedComponents: [] - m_RemovedGameObjects: [] - m_AddedGameObjects: [] - m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 426f9dcb510530d4dbfa678c9f727ec1, type: 3} --- !u!114 &401779935 stripped MonoBehaviour: @@ -508,7 +505,6 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: - serializedVersion: 3 m_TransformParent: {fileID: 815358592} m_Modifications: - target: {fileID: 9194050151789067659, guid: 5c3a7b786419db74a8c1d17039fd4f67, @@ -667,9 +663,6 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] - m_RemovedGameObjects: [] - m_AddedGameObjects: [] - m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 5c3a7b786419db74a8c1d17039fd4f67, type: 3} --- !u!224 &415327856 stripped RectTransform: @@ -720,6 +713,7 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1112533349} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 180} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -811,9 +805,6 @@ MonoBehaviour: Camera: {fileID: 1153356615} TestField: {fileID: 909026488} Properties: {fileID: 401779935} - GrabExtendTime: 1.5 - GrabEnvelopTime: 0.75 - GrabPullTime: 1.5 --- !u!4 &699508827 Transform: m_ObjectHideFlags: 0 @@ -821,13 +812,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 699508825} - serializedVersion: 2 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} + m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &815358588 GameObject: @@ -905,9 +896,7 @@ Canvas: m_OverrideSorting: 0 m_OverridePixelPerfect: 0 m_SortingBucketNormalizedSize: 0 - m_VertexColorAlwaysGammaSpace: 0 m_AdditionalShaderChannelsFlag: 25 - m_UpdateRectTransformForStandalone: 0 m_SortingLayerID: 0 m_SortingOrder: 0 m_TargetDisplay: 0 @@ -930,6 +919,7 @@ RectTransform: - {fileID: 415327856} - {fileID: 87891009} m_Father: {fileID: 0} + m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -941,7 +931,6 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: - serializedVersion: 3 m_TransformParent: {fileID: 0} m_Modifications: - target: {fileID: 411033920054375063, guid: fe47fadcdb5ae5c4caca516b4af6fde6, @@ -1019,39 +1008,7 @@ PrefabInstance: propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 2212592724187910978, guid: fe47fadcdb5ae5c4caca516b4af6fde6, - type: 3} - propertyPath: m_Enabled - value: 0 - objectReference: {fileID: 0} m_RemovedComponents: [] - m_RemovedGameObjects: [] - m_AddedGameObjects: [] - m_AddedComponents: - - targetCorrespondingSourceObject: {fileID: 411033920054375063, guid: fe47fadcdb5ae5c4caca516b4af6fde6, - type: 3} - insertIndex: -1 - addedObject: {fileID: 909026487} - - targetCorrespondingSourceObject: {fileID: 411033920054375063, guid: fe47fadcdb5ae5c4caca516b4af6fde6, - type: 3} - insertIndex: -1 - addedObject: {fileID: 909026488} - - targetCorrespondingSourceObject: {fileID: 411033920054375063, guid: fe47fadcdb5ae5c4caca516b4af6fde6, - type: 3} - insertIndex: -1 - addedObject: {fileID: 909026489} - - targetCorrespondingSourceObject: {fileID: 411033920054375063, guid: fe47fadcdb5ae5c4caca516b4af6fde6, - type: 3} - insertIndex: -1 - addedObject: {fileID: 909026490} - - targetCorrespondingSourceObject: {fileID: 411033920054375063, guid: fe47fadcdb5ae5c4caca516b4af6fde6, - type: 3} - insertIndex: -1 - addedObject: {fileID: 909026492} - - targetCorrespondingSourceObject: {fileID: 411033920054375063, guid: fe47fadcdb5ae5c4caca516b4af6fde6, - type: 3} - insertIndex: -1 - addedObject: {fileID: 909026491} m_SourcePrefab: {fileID: 100100000, guid: fe47fadcdb5ae5c4caca516b4af6fde6, type: 3} --- !u!1 &909026486 stripped GameObject: @@ -1067,17 +1024,9 @@ MeshCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 909026486} m_Material: {fileID: 0} - m_IncludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_ExcludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_LayerOverridePriority: 0 m_IsTrigger: 0 - m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 5 + serializedVersion: 4 m_Convex: 1 m_CookingOptions: 30 m_Mesh: {fileID: -5495902117074765545, guid: dd6644c1aa6c16c47bb9fea9822ce805, type: 3} @@ -1094,9 +1043,11 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: Camera: {fileID: 1153356615} - FrontTwist: 0 - RearTwist: 0 TestMagnitude: 0.5 + Throttle: + x: 0 + y: 0 + ThrottleDecay: 5 FlowSpeed: 2 FlowSpeedThrottleExponent: 1 WaveThrottleExponent: 0 @@ -1119,6 +1070,9 @@ MonoBehaviour: TendrilBaseDamping: 2 TendrilTipRadiusAnimationExponent: 2 TendrilFadeExponent: 2 + GrabExtendTime: 1.5 + GrabEnvelopTime: 0.75 + GrabPullTime: 1.5 RefractionAxis: 1 --- !u!114 &909026489 MonoBehaviour: @@ -1130,8 +1084,8 @@ MonoBehaviour: m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 52538a3309c36fc4583c964a1c0b705f, type: 3} - m_Name: - m_EditorClassIdentifier: + m_Name: + m_EditorClassIdentifier: --- !u!114 &909026490 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1142,40 +1096,8 @@ MonoBehaviour: m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: d8f4aa77146e46a2a4b28d9fefb98496, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!114 &909026491 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 909026486} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fdca6a832d764b6e89fc83fdcf7b42d7, type: 3} - m_Name: - m_EditorClassIdentifier: Assembly-CSharp::ShieldInterceptor - Envelope: {fileID: 909026492} - PanelPrototype: {fileID: 1087039186} - MaxLivePanels: 12 - PanelRadius: 2 - EnergyScale: 1 - ReuseFraction: 1 - DeathMargin: 0.25 - PatternByDamageType: ---- !u!114 &909026492 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 909026486} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: e25c67ee83c01364fb121caeda952606, type: 3} - m_Name: - m_EditorClassIdentifier: Assembly-CSharp::ShieldEnvelope + m_Name: + m_EditorClassIdentifier: --- !u!1 &1012179276 GameObject: m_ObjectHideFlags: 0 @@ -1216,13 +1138,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1012179276} - serializedVersion: 2 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} + m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &1012179280 MonoBehaviour: @@ -1264,14 +1186,11 @@ MonoBehaviour: type: 3} m_DeselectOnBackgroundClick: 1 m_PointerBehavior: 0 - m_CursorLockBehavior: 0 - m_ScrollDeltaPerTick: 6 --- !u!1001 &1080184620 PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: - serializedVersion: 3 m_TransformParent: {fileID: 0} m_Modifications: - target: {fileID: 105552333169325610, guid: 4a3db6090789ca24cb57c43666754017, @@ -1356,101 +1275,7 @@ PrefabInstance: objectReference: {fileID: 0} m_RemovedComponents: - {fileID: 7577392600424441103, guid: 4a3db6090789ca24cb57c43666754017, type: 3} - m_RemovedGameObjects: [] - m_AddedGameObjects: [] - m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 4a3db6090789ca24cb57c43666754017, type: 3} ---- !u!1 &1087039185 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1087039188} - - component: {fileID: 1087039187} - - component: {fileID: 1087039186} - m_Layer: 0 - m_Name: Panel - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 0 ---- !u!114 &1087039186 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1087039185} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1281fe44325f9b548aa42dc331b17266, type: 3} - m_Name: - m_EditorClassIdentifier: Assembly-CSharp::Prototype ---- !u!114 &1087039187 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1087039185} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c1b180b85c234a4488cf0662b75ac77f, type: 3} - m_Name: - m_EditorClassIdentifier: Assembly-CSharp::ShieldField.ShieldPanel - tiling: 3 - panelRadius: 5 - cellSize: 0.35 - mergeRhombs: 1 - takeDual: 0 - seed: 1337 - sim: {fileID: 7200000, guid: 1d17c100121b5ba47af9c75de451a2f1, type: 3} - panelShader: {fileID: 4800000, guid: 6a7f034931432c2418a0f0f0b9af0b93, type: 3} - growDuration: 0.35 - wavefrontSpeed: 8 - delayJitter: 0.06 - waveSpeed2: 26 - damping: 1.6 - stressClamp: 4 - substeps: 6 - fixedSubstepDt: 0.0025 - echoDelaySteps: 5 - echoReflect: -0.65 - tensileStrength: 0.9 - temperInit: 0.55 - temperErosion: 2.2 - storedEnergyGain: 0.8 - damageGain: 6 - breakAt: 0.75 - crackStart: 0.18 - breakBudgetFraction: 0.02 - radialKick: 1.6 - lateralKick: 2.2 - normalKick: 1.1 - spinKick: 7 - shardLife: 2.5 - shardDrag: 0.7 - maxShards: 6 - conduitGain: 2.5 ---- !u!4 &1087039188 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1087039185} - serializedVersion: 2 - 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_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1112013867 GameObject: m_ObjectHideFlags: 0 @@ -1475,7 +1300,6 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1112013867} - serializedVersion: 2 m_LocalRotation: {x: 0.05948526, y: -0.910067, z: 0.14047916, w: 0.38536373} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} @@ -1483,6 +1307,7 @@ Transform: m_Children: - {fileID: 1153356611} m_Father: {fileID: 0} + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 17.55, y: -134.1, z: 0} --- !u!114 &1112013869 MonoBehaviour: @@ -1528,6 +1353,7 @@ RectTransform: m_Children: - {fileID: 602735389} m_Father: {fileID: 815358592} + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 1, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -1561,13 +1387,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1153356610} - serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: -50} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1112013868} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &1153356612 MonoBehaviour: @@ -1666,17 +1492,9 @@ Camera: m_projectionMatrixMode: 1 m_GateFitMode: 2 m_FOVAxisMode: 0 - m_Iso: 200 - m_ShutterSpeed: 0.005 - m_Aperture: 16 - m_FocusDistance: 10 - m_FocalLength: 50 - m_BladeCount: 5 - m_Curvature: {x: 2, y: 11} - m_BarrelClipping: 0.25 - m_Anamorphism: 0 m_SensorSize: {x: 36, y: 24} m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 m_NormalizedViewPortRect: serializedVersion: 2 x: 0 @@ -1746,17 +1564,9 @@ BoxCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1424996955} m_Material: {fileID: 0} - m_IncludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_ExcludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_LayerOverridePriority: 0 m_IsTrigger: 1 - m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 3 + serializedVersion: 2 m_Size: {x: 1, y: 1, z: 1} m_Center: {x: 0, y: 0, z: 0} --- !u!4 &1424996958 @@ -1766,13 +1576,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1424996955} - serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: -1.4908371, y: -143.55145, z: 0.8193531} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1618381683 GameObject: @@ -1807,6 +1617,7 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 815358592} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -1880,15 +1691,3 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1618381683} m_CullTransparentMesh: 1 ---- !u!1660057539 &9223372036854775807 -SceneRoots: - m_ObjectHideFlags: 0 - m_Roots: - - {fileID: 909026485} - - {fileID: 1424996958} - - {fileID: 1112013868} - - {fileID: 815358592} - - {fileID: 1012179279} - - {fileID: 699508827} - - {fileID: 1080184620} - - {fileID: 1087039188} diff --git a/Assets/Scenes/Main Menu.unity b/Assets/Scenes/Main Menu.unity index 4fafe8336..a37cfffba 100644 --- a/Assets/Scenes/Main Menu.unity +++ b/Assets/Scenes/Main Menu.unity @@ -892,6 +892,7 @@ MonoBehaviour: NebulaTint: {fileID: 8400000, guid: d196505464047f04a97f28689041209b, type: 2} Heightmap: {fileID: 8400000, guid: 2fc21a9d3e9647948b56e384cd9378b3, type: 2} ParticleColors: {fileID: 2800000, guid: 56db63da398b2d04394ddbccedce943c, type: 3} + GravityCamera: {fileID: 2103364771} --- !u!114 &750375536 MonoBehaviour: m_ObjectHideFlags: 0 @@ -981,7 +982,7 @@ Camera: m_Depth: 0 m_CullingMask: serializedVersion: 2 - m_Bits: 5120 + m_Bits: 5632 m_RenderingPath: 1 m_TargetTexture: {fileID: 8400000, guid: 06ec5ef8a5830fc44b1ac1a6e123add5, type: 2} m_TargetDisplay: 0 @@ -1060,6 +1061,16 @@ PrefabInstance: propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} + - target: {fileID: 7852221720741322892, guid: 046dde0f4600bce41ad33c476f99b309, + type: 3} + propertyPath: m_LocalScale.x + value: 512 + objectReference: {fileID: 0} + - target: {fileID: 7852221720741322892, guid: 046dde0f4600bce41ad33c476f99b309, + type: 3} + propertyPath: m_LocalScale.y + value: 512 + objectReference: {fileID: 0} - target: {fileID: 7852221720816817928, guid: 046dde0f4600bce41ad33c476f99b309, type: 3} propertyPath: m_LocalScale.x @@ -1075,6 +1086,16 @@ PrefabInstance: propertyPath: m_Materials.Array.data[0] value: objectReference: {fileID: 2100000, guid: b9f52544f98f47146b486fb6e27179bb, type: 2} + - target: {fileID: 7852221720969441490, guid: 046dde0f4600bce41ad33c476f99b309, + type: 3} + propertyPath: m_LocalScale.x + value: 512 + objectReference: {fileID: 0} + - target: {fileID: 7852221720969441490, guid: 046dde0f4600bce41ad33c476f99b309, + type: 3} + propertyPath: m_LocalScale.y + value: 512 + objectReference: {fileID: 0} - target: {fileID: 7852221720971737233, guid: 046dde0f4600bce41ad33c476f99b309, type: 3} propertyPath: m_LocalScale.x diff --git a/Assets/Scenes/TestScene.unity b/Assets/Scenes/TestScene.unity index 45c73ee85..933f4c4ca 100644 --- a/Assets/Scenes/TestScene.unity +++ b/Assets/Scenes/TestScene.unity @@ -13,7 +13,7 @@ OcclusionCullingSettings: --- !u!104 &2 RenderSettings: m_ObjectHideFlags: 0 - serializedVersion: 10 + serializedVersion: 9 m_Fog: 0 m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} m_FogMode: 3 @@ -38,12 +38,13 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0.18113758, g: 0.20078251, b: 0.17357464, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &4 LightmapSettings: m_ObjectHideFlags: 0 - serializedVersion: 13 - m_BakeOnSceneLoad: 0 + serializedVersion: 12 + m_GIWorkflowMode: 1 m_GISettings: serializedVersion: 2 m_BounceScale: 1 @@ -66,6 +67,9 @@ LightmapSettings: m_LightmapParameters: {fileID: 0} m_LightmapsBakeMode: 1 m_TextureCompression: 0 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 1024 m_ReflectionCompression: 2 m_MixedBakeMode: 1 m_BakeBackend: 0 @@ -101,7 +105,7 @@ NavMeshSettings: serializedVersion: 2 m_ObjectHideFlags: 0 m_BuildSettings: - serializedVersion: 3 + serializedVersion: 2 agentTypeID: 0 agentRadius: 0.5 agentHeight: 2 @@ -114,7 +118,7 @@ NavMeshSettings: cellSize: 0.16666666 manualTileSize: 0 tileSize: 256 - buildHeightMesh: 0 + accuratePlacement: 0 maxJobWorkers: 0 preserveTilesOutsideBounds: 0 debug: @@ -149,9 +153,9 @@ RectTransform: m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: -1} m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1124877095} + m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -216,23 +220,20 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 + m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 0 m_isCullingEnabled: 0 @@ -247,12 +248,11 @@ MonoBehaviour: m_margin: {x: 0, y: 0, z: 0, w: 0} m_isUsingLegacyAnimationComponent: 0 m_isVolumetricText: 0 - _SortingLayer: 0 - _SortingLayerID: 0 - _SortingOrder: 0 m_hasFontAssetChanged: 0 m_renderer: {fileID: 62236176} m_maskType: 0 + _SortingLayerID: 0 + _SortingOrder: 0 --- !u!23 &62236176 MeshRenderer: m_ObjectHideFlags: 0 @@ -264,17 +264,11 @@ MeshRenderer: m_CastShadows: 0 m_ReceiveShadows: 0 m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 - m_ForceMeshLod: -1 - m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -296,11 +290,9 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} - m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 - m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!114 &62236177 MonoBehaviour: @@ -343,11 +335,11 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 73838348} - {fileID: 1538186655} m_Father: {fileID: 1187011252} + m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -402,9 +394,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 67477253} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 1} @@ -478,9 +470,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 676739119} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -573,9 +565,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1928037890} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 1} @@ -646,13 +638,12 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 162042368} - serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0.0125, z: 1} m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1124877095} + m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!64 &162042370 MeshCollider: @@ -662,17 +653,9 @@ MeshCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 162042368} m_Material: {fileID: 0} - m_IncludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_ExcludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_LayerOverridePriority: 0 m_IsTrigger: 0 - m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 5 + serializedVersion: 4 m_Convex: 0 m_CookingOptions: 30 m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} @@ -687,17 +670,11 @@ MeshRenderer: m_CastShadows: 1 m_ReceiveShadows: 1 m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 - m_ForceMeshLod: -1 - m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -719,11 +696,9 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} - m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 - m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &162042372 MeshFilter: @@ -758,13 +733,12 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 215995290} - serializedVersion: 2 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 789220865} + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!23 &215995292 MeshRenderer: @@ -777,17 +751,11 @@ MeshRenderer: m_CastShadows: 0 m_ReceiveShadows: 0 m_DynamicOccludee: 0 - m_StaticShadowCaster: 0 m_MotionVectors: 2 m_LightProbeUsage: 0 m_ReflectionProbeUsage: 0 m_RayTracingMode: 2 m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 - m_ForceMeshLod: -1 - m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -809,11 +777,9 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} - m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 - m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &215995293 MeshFilter: @@ -828,7 +794,6 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: - serializedVersion: 3 m_TransformParent: {fileID: 1090070598} m_Modifications: - target: {fileID: 7852221720480299766, guid: 046dde0f4600bce41ad33c476f99b309, @@ -911,15 +876,32 @@ PrefabInstance: propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} + - target: {fileID: 7852221720741322892, guid: 046dde0f4600bce41ad33c476f99b309, + type: 3} + propertyPath: m_LocalScale.x + value: 40 + objectReference: {fileID: 0} + - target: {fileID: 7852221720741322892, guid: 046dde0f4600bce41ad33c476f99b309, + type: 3} + propertyPath: m_LocalScale.y + value: 40 + objectReference: {fileID: 0} + - target: {fileID: 7852221720969441490, guid: 046dde0f4600bce41ad33c476f99b309, + type: 3} + propertyPath: m_LocalScale.x + value: 20 + objectReference: {fileID: 0} + - target: {fileID: 7852221720969441490, guid: 046dde0f4600bce41ad33c476f99b309, + type: 3} + propertyPath: m_LocalScale.y + value: 20 + objectReference: {fileID: 0} - target: {fileID: 7852221720971737233, guid: 046dde0f4600bce41ad33c476f99b309, type: 3} propertyPath: m_LocalPosition.y value: -4 objectReference: {fileID: 0} m_RemovedComponents: [] - m_RemovedGameObjects: [] - m_AddedGameObjects: [] - m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 046dde0f4600bce41ad33c476f99b309, type: 3} --- !u!4 &229068763 stripped Transform: @@ -967,17 +949,9 @@ MeshCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 240056260} m_Material: {fileID: 0} - m_IncludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_ExcludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_LayerOverridePriority: 0 m_IsTrigger: 0 - m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 5 + serializedVersion: 4 m_Convex: 0 m_CookingOptions: 30 m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} @@ -992,17 +966,11 @@ MeshRenderer: m_CastShadows: 1 m_ReceiveShadows: 1 m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 - m_ForceMeshLod: -1 - m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -1024,11 +992,9 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} - m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 - m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &240056264 MeshFilter: @@ -1045,13 +1011,12 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 240056260} - serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 1} m_LocalScale: {x: 0.044999998, y: 0.044999998, z: 3} - m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 820952285} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &302169896 GameObject: @@ -1080,11 +1045,11 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 2061863457} - {fileID: 686739139} m_Father: {fileID: 1187011252} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -1187,9 +1152,7 @@ Canvas: m_OverrideSorting: 0 m_OverridePixelPerfect: 0 m_SortingBucketNormalizedSize: 0 - m_VertexColorAlwaysGammaSpace: 0 m_AdditionalShaderChannelsFlag: 25 - m_UpdateRectTransformForStandalone: 0 m_SortingLayerID: 0 m_SortingOrder: 0 m_TargetDisplay: 0 @@ -1203,10 +1166,10 @@ RectTransform: m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 0, y: 0, z: 0} - m_ConstrainProportionsScale: 0 m_Children: - {fileID: 676739119} m_Father: {fileID: 0} + m_RootOrder: 8 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -1237,13 +1200,12 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 375851675} - serializedVersion: 2 m_LocalRotation: {x: 0, y: 0.7071068, z: -0.7071068, w: 0} m_LocalPosition: {x: 0, y: 10, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1532567794} + m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 90, y: 180, z: 0} --- !u!20 &375851677 Camera: @@ -1259,17 +1221,9 @@ Camera: m_projectionMatrixMode: 1 m_GateFitMode: 2 m_FOVAxisMode: 0 - m_Iso: 200 - m_ShutterSpeed: 0.005 - m_Aperture: 16 - m_FocusDistance: 10 - m_FocalLength: 50 - m_BladeCount: 5 - m_Curvature: {x: 2, y: 11} - m_BarrelClipping: 0.25 - m_Anamorphism: 0 m_SensorSize: {x: 36, y: 24} m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 m_NormalizedViewPortRect: serializedVersion: 2 x: 0 @@ -1301,7 +1255,6 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: - serializedVersion: 3 m_TransformParent: {fileID: 0} m_Modifications: - target: {fileID: 8326552097884649274, guid: 897fa55d98f1f7f40b889f93ce9146f4, @@ -1375,9 +1328,6 @@ PrefabInstance: value: 90 objectReference: {fileID: 0} m_RemovedComponents: [] - m_RemovedGameObjects: [] - m_AddedGameObjects: [] - m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 897fa55d98f1f7f40b889f93ce9146f4, type: 3} --- !u!1 &441433737 GameObject: @@ -1405,13 +1355,12 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 441433737} - serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 4} m_LocalScale: {x: 2, y: 2, z: 2} - m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1124877095} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!64 &441433739 MeshCollider: @@ -1421,17 +1370,9 @@ MeshCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 441433737} m_Material: {fileID: 0} - m_IncludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_ExcludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_LayerOverridePriority: 0 m_IsTrigger: 0 - m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 5 + serializedVersion: 4 m_Convex: 0 m_CookingOptions: 30 m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} @@ -1446,17 +1387,11 @@ MeshRenderer: m_CastShadows: 1 m_ReceiveShadows: 1 m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 - m_ForceMeshLod: -1 - m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -1478,11 +1413,9 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} - m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 - m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &441433741 MeshFilter: @@ -1520,9 +1453,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 2039345446} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -1609,17 +1542,11 @@ MeshRenderer: m_CastShadows: 1 m_ReceiveShadows: 1 m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 - m_ForceMeshLod: -1 - m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -1641,11 +1568,9 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} - m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 - m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &507446969 MeshFilter: @@ -1662,20 +1587,18 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 507446966} - serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 5} m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1183010124} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1001 &556481138 PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: - serializedVersion: 3 m_TransformParent: {fileID: 1090070598} m_Modifications: - target: {fileID: 7852221720480299766, guid: 046dde0f4600bce41ad33c476f99b309, @@ -1758,15 +1681,32 @@ PrefabInstance: propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} + - target: {fileID: 7852221720741322892, guid: 046dde0f4600bce41ad33c476f99b309, + type: 3} + propertyPath: m_LocalScale.x + value: 40 + objectReference: {fileID: 0} + - target: {fileID: 7852221720741322892, guid: 046dde0f4600bce41ad33c476f99b309, + type: 3} + propertyPath: m_LocalScale.y + value: 40 + objectReference: {fileID: 0} + - target: {fileID: 7852221720969441490, guid: 046dde0f4600bce41ad33c476f99b309, + type: 3} + propertyPath: m_LocalScale.x + value: 20 + objectReference: {fileID: 0} + - target: {fileID: 7852221720969441490, guid: 046dde0f4600bce41ad33c476f99b309, + type: 3} + propertyPath: m_LocalScale.y + value: 20 + objectReference: {fileID: 0} - target: {fileID: 7852221720971737233, guid: 046dde0f4600bce41ad33c476f99b309, type: 3} propertyPath: m_LocalPosition.y value: -4 objectReference: {fileID: 0} m_RemovedComponents: [] - m_RemovedGameObjects: [] - m_AddedGameObjects: [] - m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 046dde0f4600bce41ad33c476f99b309, type: 3} --- !u!1 &599096482 stripped GameObject: @@ -1829,11 +1769,11 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 2039345446} - {fileID: 1808942506} m_Father: {fileID: 1236141028} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -1916,9 +1856,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 676739119} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 1, y: 1} @@ -1984,23 +1924,20 @@ MonoBehaviour: m_VerticalAlignment: 256 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 + m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -2076,13 +2013,13 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 671490389} - {fileID: 87390263} - {fileID: 1187011252} - {fileID: 1236141028} m_Father: {fileID: 344649059} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -2195,9 +2132,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 302169897} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -2263,23 +2200,20 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 + m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -2332,11 +2266,11 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 1691202846} - {fileID: 840997727} m_Father: {fileID: 1187011252} + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -2392,11 +2326,9 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 753458616} - serializedVersion: 2 m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071068} m_LocalPosition: {x: 0, y: -5, z: 0} m_LocalScale: {x: 1024, y: 1024, z: 1024} - m_ConstrainProportionsScale: 0 m_Children: - {fileID: 1807969627} - {fileID: 1466792827} @@ -2404,6 +2336,7 @@ Transform: - {fileID: 1328848283} - {fileID: 6977256487279145164} m_Father: {fileID: 0} + m_RootOrder: 11 m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} --- !u!1 &789220864 GameObject: @@ -2428,16 +2361,15 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 789220864} - serializedVersion: 2 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 1489231075} - {fileID: 1223346183} - {fileID: 215995291} m_Father: {fileID: 753458617} + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &801092328 GameObject: @@ -2465,13 +2397,12 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 801092328} - serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 0.015, y: 0.015, z: 1} - m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 820952285} + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &801092330 MonoBehaviour: @@ -2496,17 +2427,11 @@ MeshRenderer: m_CastShadows: 1 m_ReceiveShadows: 1 m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 - m_ForceMeshLod: -1 - m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -2528,11 +2453,9 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} - m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 - m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &801092332 MeshFilter: @@ -2565,16 +2488,15 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 820952284} - serializedVersion: 2 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 1124877095} - {fileID: 240056265} - {fileID: 801092329} m_Father: {fileID: 2067021207} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &840997726 GameObject: @@ -2604,9 +2526,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 719378462} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -2672,23 +2594,20 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 + m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -2739,13 +2658,12 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 855309154} - serializedVersion: 2 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1328848283} + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!23 &855309156 MeshRenderer: @@ -2758,17 +2676,11 @@ MeshRenderer: m_CastShadows: 0 m_ReceiveShadows: 0 m_DynamicOccludee: 0 - m_StaticShadowCaster: 0 m_MotionVectors: 2 m_LightProbeUsage: 0 m_ReflectionProbeUsage: 0 m_RayTracingMode: 2 m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 - m_ForceMeshLod: -1 - m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -2790,11 +2702,9 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} - m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 - m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &855309157 MeshFilter: @@ -2809,7 +2719,6 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: - serializedVersion: 3 m_TransformParent: {fileID: 0} m_Modifications: - target: {fileID: 235077144, guid: 897fa55d98f1f7f40b889f93ce9146f4, type: 3} @@ -2882,9 +2791,6 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] - m_RemovedGameObjects: [] - m_AddedGameObjects: [] - m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 897fa55d98f1f7f40b889f93ce9146f4, type: 3} --- !u!1 &942014700 GameObject: @@ -2910,13 +2816,12 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 942014700} - serializedVersion: 2 m_LocalRotation: {x: 0, y: 0.7071068, z: -0.7071068, w: 0} m_LocalPosition: {x: 0, y: 10, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1532567794} + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 90, y: 180, z: 0} --- !u!20 &942014702 Camera: @@ -2932,17 +2837,9 @@ Camera: m_projectionMatrixMode: 1 m_GateFitMode: 2 m_FOVAxisMode: 0 - m_Iso: 200 - m_ShutterSpeed: 0.005 - m_Aperture: 16 - m_FocusDistance: 10 - m_FocalLength: 50 - m_BladeCount: 5 - m_Curvature: {x: 2, y: 11} - m_BarrelClipping: 0.25 - m_Anamorphism: 0 m_SensorSize: {x: 36, y: 24} m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 m_NormalizedViewPortRect: serializedVersion: 2 x: 0 @@ -3000,17 +2897,9 @@ Camera: m_projectionMatrixMode: 1 m_GateFitMode: 2 m_FOVAxisMode: 0 - m_Iso: 200 - m_ShutterSpeed: 0.005 - m_Aperture: 16 - m_FocusDistance: 10 - m_FocalLength: 50 - m_BladeCount: 5 - m_Curvature: {x: 2, y: 11} - m_BarrelClipping: 0.25 - m_Anamorphism: 0 m_SensorSize: {x: 36, y: 24} m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 m_NormalizedViewPortRect: serializedVersion: 2 x: 0 @@ -3044,13 +2933,12 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 983613690} - serializedVersion: 2 m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} m_LocalPosition: {x: 0, y: 10, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} + m_RootOrder: 10 m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} --- !u!1 &1073373262 GameObject: @@ -3083,17 +2971,9 @@ Camera: m_projectionMatrixMode: 1 m_GateFitMode: 2 m_FOVAxisMode: 0 - m_Iso: 200 - m_ShutterSpeed: 0.005 - m_Aperture: 16 - m_FocusDistance: 10 - m_FocalLength: 50 - m_BladeCount: 5 - m_Curvature: {x: 2, y: 11} - m_BarrelClipping: 0.25 - m_Anamorphism: 0 m_SensorSize: {x: 36, y: 24} m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 m_NormalizedViewPortRect: serializedVersion: 2 x: 0 @@ -3127,13 +3007,12 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1073373262} - serializedVersion: 2 m_LocalRotation: {x: 0, y: 0.7071068, z: -0.7071068, w: 0} m_LocalPosition: {x: 0, y: 10, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1532567794} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 90, y: 180, z: 0} --- !u!1 &1090070596 GameObject: @@ -3172,16 +3051,15 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1090070596} - serializedVersion: 2 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 1647759374} - {fileID: 229068763} - {fileID: 734604127} m_Father: {fileID: 0} + m_RootOrder: 13 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1124877094 GameObject: @@ -3208,11 +3086,9 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1124877094} - serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0.25, y: 0.25, z: 0} m_LocalScale: {x: 0.015, y: 0.015, z: 1} - m_ConstrainProportionsScale: 0 m_Children: - {fileID: 1520024706} - {fileID: 441433738} @@ -3220,6 +3096,7 @@ Transform: - {fileID: 162042369} - {fileID: 62236174} m_Father: {fileID: 820952285} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &1124877096 MonoBehaviour: @@ -3249,8 +3126,6 @@ MonoBehaviour: Secondary: {fileID: 441433740} Influence: {fileID: 1190354611} Label: {fileID: 62236175} - IconContainer: {fileID: 0} - Clickable: {fileID: 0} --- !u!4 &1128149392 stripped Transform: m_CorrespondingSourceObject: {fileID: 7852221720971737233, guid: 046dde0f4600bce41ad33c476f99b309, @@ -3281,16 +3156,15 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1183010123} - serializedVersion: 2 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 1940409868} - {fileID: 507446970} - {fileID: 2067021207} m_Father: {fileID: 0} + m_RootOrder: 7 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &1183010125 MonoBehaviour: @@ -3334,8 +3208,6 @@ MonoBehaviour: m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 - PlayerLocationLabelColor: {r: 0, g: 0, b: 0, a: 0} - PlayerLocationIconSize: 1.25 --- !u!1 &1187011251 GameObject: m_ObjectHideFlags: 0 @@ -3364,13 +3236,13 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 1928037890} - {fileID: 302169897} - {fileID: 719378462} - {fileID: 67477253} m_Father: {fileID: 676739119} + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -3443,13 +3315,12 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1190354608} - serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 15, y: 15, z: 1} - m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1124877095} + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!64 &1190354610 MeshCollider: @@ -3459,17 +3330,9 @@ MeshCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1190354608} m_Material: {fileID: 0} - m_IncludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_ExcludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_LayerOverridePriority: 0 m_IsTrigger: 0 - m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 5 + serializedVersion: 4 m_Convex: 0 m_CookingOptions: 30 m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} @@ -3484,17 +3347,11 @@ MeshRenderer: m_CastShadows: 1 m_ReceiveShadows: 1 m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 - m_ForceMeshLod: -1 - m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -3516,11 +3373,9 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} - m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 - m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &1190354612 MeshFilter: @@ -3555,13 +3410,12 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1223346182} - serializedVersion: 2 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 789220865} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!23 &1223346184 MeshRenderer: @@ -3574,17 +3428,11 @@ MeshRenderer: m_CastShadows: 0 m_ReceiveShadows: 0 m_DynamicOccludee: 0 - m_StaticShadowCaster: 0 m_MotionVectors: 2 m_LightProbeUsage: 0 m_ReflectionProbeUsage: 0 m_RayTracingMode: 2 m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 - m_ForceMeshLod: -1 - m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -3606,11 +3454,9 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} - m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 - m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &1223346185 MeshFilter: @@ -3648,10 +3494,10 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 652433664} m_Father: {fileID: 676739119} + m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -3722,13 +3568,12 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1307174805} - serializedVersion: 2 m_LocalRotation: {x: 0, y: 0.7071068, z: -0.7071068, w: 0} m_LocalPosition: {x: 0, y: 10, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1532567794} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 90, y: 180, z: 0} --- !u!20 &1307174807 Camera: @@ -3744,17 +3589,9 @@ Camera: m_projectionMatrixMode: 1 m_GateFitMode: 2 m_FOVAxisMode: 0 - m_Iso: 200 - m_ShutterSpeed: 0.005 - m_Aperture: 16 - m_FocusDistance: 10 - m_FocalLength: 50 - m_BladeCount: 5 - m_Curvature: {x: 2, y: 11} - m_BarrelClipping: 0.25 - m_Anamorphism: 0 m_SensorSize: {x: 36, y: 24} m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 m_NormalizedViewPortRect: serializedVersion: 2 x: 0 @@ -3769,7 +3606,7 @@ Camera: m_Depth: 0 m_CullingMask: serializedVersion: 2 - m_Bits: 5120 + m_Bits: 5632 m_RenderingPath: 1 m_TargetTexture: {fileID: 8400000, guid: 06ec5ef8a5830fc44b1ac1a6e123add5, type: 2} m_TargetDisplay: 0 @@ -3847,13 +3684,8 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 8c03374f22d0a3d4882018de66894a84, type: 3} m_Name: m_EditorClassIdentifier: - GridMesh: {fileID: 0} - GridCamera: {fileID: 0} - Settings: {fileID: 0} - NebulaSurfaceHeight: {fileID: 0} - NebulaPatchHeight: {fileID: 0} - NebulaPatch: {fileID: 0} - NebulaTint: {fileID: 0} + _volMaterial: {fileID: 2100000, guid: ad63650ae6d6cc542a5aad16694b3c46, type: 2} + GridTransform: {fileID: 753458617} --- !u!114 &1314993071 MonoBehaviour: m_ObjectHideFlags: 0 @@ -3912,9 +3744,7 @@ MonoBehaviour: m_ShowCustomSorter: 0 breakBeforeColorGrading: 0 m_BeforeTransparentBundles: [] - m_BeforeStackBundles: - - assemblyQualifiedName: UnityEngine.Rendering.PostProcessing.DepthOfField, Assembly-CSharp, - Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + m_BeforeStackBundles: [] m_AfterStackBundles: [] --- !u!20 &1314993072 Camera: @@ -3930,17 +3760,9 @@ Camera: m_projectionMatrixMode: 1 m_GateFitMode: 2 m_FOVAxisMode: 0 - m_Iso: 200 - m_ShutterSpeed: 0.005 - m_Aperture: 16 - m_FocusDistance: 10 - m_FocalLength: 50 - m_BladeCount: 5 - m_Curvature: {x: 2, y: 11} - m_BarrelClipping: 0.25 - m_Anamorphism: 0 m_SensorSize: {x: 36, y: 24} m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 m_NormalizedViewPortRect: serializedVersion: 2 x: 0 @@ -3974,13 +3796,12 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1314993065} - serializedVersion: 2 m_LocalRotation: {x: 0.2267062, y: 0.44560468, z: -0.11773936, w: 0.8580083} m_LocalPosition: {x: -299.03247, y: -38.375748, z: -188.30061} m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} + m_RootOrder: 9 m_LocalEulerAnglesHint: {x: 20, y: 0, z: 0} --- !u!1 &1328848282 GameObject: @@ -4005,16 +3826,15 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1328848282} - serializedVersion: 2 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 1563996706} - {fileID: 1584275846} - {fileID: 855309155} m_Father: {fileID: 753458617} + m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1388747984 GameObject: @@ -4039,14 +3859,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1388747984} - serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 3} m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 m_Children: - {fileID: 1955533727} m_Father: {fileID: 2067021207} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1404197274 GameObject: @@ -4141,17 +3960,9 @@ Camera: m_projectionMatrixMode: 1 m_GateFitMode: 2 m_FOVAxisMode: 0 - m_Iso: 200 - m_ShutterSpeed: 0.005 - m_Aperture: 16 - m_FocusDistance: 10 - m_FocalLength: 50 - m_BladeCount: 5 - m_Curvature: {x: 2, y: 11} - m_BarrelClipping: 0.25 - m_Anamorphism: 0 m_SensorSize: {x: 36, y: 24} m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 m_NormalizedViewPortRect: serializedVersion: 2 x: 0 @@ -4185,13 +3996,12 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1404197274} - serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: -1} m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} + m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &1404197280 MonoBehaviour: @@ -4241,17 +4051,9 @@ Camera: m_projectionMatrixMode: 1 m_GateFitMode: 2 m_FOVAxisMode: 0 - m_Iso: 200 - m_ShutterSpeed: 0.005 - m_Aperture: 16 - m_FocusDistance: 10 - m_FocalLength: 50 - m_BladeCount: 5 - m_Curvature: {x: 2, y: 11} - m_BarrelClipping: 0.25 - m_Anamorphism: 0 m_SensorSize: {x: 36, y: 24} m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 m_NormalizedViewPortRect: serializedVersion: 2 x: 0 @@ -4285,13 +4087,12 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1462895483} - serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: -1} m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} + m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &1462895486 MonoBehaviour: @@ -4354,13 +4155,12 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1466792826} - serializedVersion: 2 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 753458617} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!23 &1466792829 MeshRenderer: @@ -4373,17 +4173,11 @@ MeshRenderer: m_CastShadows: 0 m_ReceiveShadows: 0 m_DynamicOccludee: 0 - m_StaticShadowCaster: 0 m_MotionVectors: 2 m_LightProbeUsage: 0 m_ReflectionProbeUsage: 0 m_RayTracingMode: 2 m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 - m_ForceMeshLod: -1 - m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -4405,11 +4199,9 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} - m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 - m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &1466792830 MeshFilter: @@ -4462,11 +4254,7 @@ MonoBehaviour: NearClipPlane: 0.3 FarClipPlane: 4096 Dutch: 0 - ModeOverride: 0 LensShift: {x: 0, y: 0} - GateFit: 2 - FocusDistance: 10 - m_SensorSize: {x: 1, y: 1} m_Transitions: m_BlendHint: 0 m_InheritPosition: 0 @@ -4482,14 +4270,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1479254159} - serializedVersion: 2 m_LocalRotation: {x: 0.2267062, y: 0.44560468, z: -0.11773936, w: 0.8580083} m_LocalPosition: {x: -299.03247, y: -38.375748, z: -188.30061} m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 m_Children: - {fileID: 1547641803} m_Father: {fileID: 0} + m_RootOrder: 14 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1489231074 GameObject: @@ -4516,13 +4303,12 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1489231074} - serializedVersion: 2 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 789220865} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!23 &1489231076 MeshRenderer: @@ -4535,17 +4321,11 @@ MeshRenderer: m_CastShadows: 0 m_ReceiveShadows: 0 m_DynamicOccludee: 0 - m_StaticShadowCaster: 0 m_MotionVectors: 2 m_LightProbeUsage: 0 m_ReflectionProbeUsage: 0 m_RayTracingMode: 2 m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 - m_ForceMeshLod: -1 - m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -4567,11 +4347,9 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} - m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 - m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &1489231077 MeshFilter: @@ -4613,13 +4391,12 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1520024705} - serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 2} m_LocalScale: {x: 0.87800574, y: 0.87800574, z: 1.7560115} - m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1124877095} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!64 &1520024707 MeshCollider: @@ -4629,17 +4406,9 @@ MeshCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1520024705} m_Material: {fileID: 0} - m_IncludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_ExcludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_LayerOverridePriority: 0 m_IsTrigger: 0 - m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 5 + serializedVersion: 4 m_Convex: 0 m_CookingOptions: 30 m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} @@ -4654,17 +4423,11 @@ MeshRenderer: m_CastShadows: 1 m_ReceiveShadows: 1 m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 - m_ForceMeshLod: -1 - m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -4686,11 +4449,9 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} - m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 - m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &1520024709 MeshFilter: @@ -4723,17 +4484,16 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1532567792} - serializedVersion: 2 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 1073373264} - {fileID: 1307174806} - {fileID: 942014701} - {fileID: 375851676} m_Father: {fileID: 0} + m_RootOrder: 12 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1538186654 GameObject: @@ -4763,9 +4523,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 67477253} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -4831,23 +4591,20 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 + m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -4899,13 +4656,12 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1547641802} - serializedVersion: 2 m_LocalRotation: {x: -0.7071068, y: -0, z: -0, w: 0.7071068} m_LocalPosition: {x: -58.728523, y: 4.327759, z: 429.1176} m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1479254161} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &1547641804 MonoBehaviour: @@ -5014,13 +4770,12 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1563996705} - serializedVersion: 2 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1328848283} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!23 &1563996707 MeshRenderer: @@ -5033,17 +4788,11 @@ MeshRenderer: m_CastShadows: 0 m_ReceiveShadows: 0 m_DynamicOccludee: 0 - m_StaticShadowCaster: 0 m_MotionVectors: 2 m_LightProbeUsage: 0 m_ReflectionProbeUsage: 0 m_RayTracingMode: 2 m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 - m_ForceMeshLod: -1 - m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -5065,11 +4814,9 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} - m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 - m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &1563996708 MeshFilter: @@ -5104,13 +4851,12 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1584275845} - serializedVersion: 2 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1328848283} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!23 &1584275847 MeshRenderer: @@ -5123,17 +4869,11 @@ MeshRenderer: m_CastShadows: 0 m_ReceiveShadows: 0 m_DynamicOccludee: 0 - m_StaticShadowCaster: 0 m_MotionVectors: 2 m_LightProbeUsage: 0 m_ReflectionProbeUsage: 0 m_RayTracingMode: 2 m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 - m_ForceMeshLod: -1 - m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -5155,11 +4895,9 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} - m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 - m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &1584275848 MeshFilter: @@ -5174,7 +4912,6 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: - serializedVersion: 3 m_TransformParent: {fileID: 1090070598} m_Modifications: - target: {fileID: 7852221720480299766, guid: 046dde0f4600bce41ad33c476f99b309, @@ -5257,15 +4994,32 @@ PrefabInstance: propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} + - target: {fileID: 7852221720741322892, guid: 046dde0f4600bce41ad33c476f99b309, + type: 3} + propertyPath: m_LocalScale.x + value: 40 + objectReference: {fileID: 0} + - target: {fileID: 7852221720741322892, guid: 046dde0f4600bce41ad33c476f99b309, + type: 3} + propertyPath: m_LocalScale.y + value: 40 + objectReference: {fileID: 0} + - target: {fileID: 7852221720969441490, guid: 046dde0f4600bce41ad33c476f99b309, + type: 3} + propertyPath: m_LocalScale.x + value: 20 + objectReference: {fileID: 0} + - target: {fileID: 7852221720969441490, guid: 046dde0f4600bce41ad33c476f99b309, + type: 3} + propertyPath: m_LocalScale.y + value: 20 + objectReference: {fileID: 0} - target: {fileID: 7852221720971737233, guid: 046dde0f4600bce41ad33c476f99b309, type: 3} propertyPath: m_LocalPosition.y value: -4 objectReference: {fileID: 0} m_RemovedComponents: [] - m_RemovedGameObjects: [] - m_AddedGameObjects: [] - m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 046dde0f4600bce41ad33c476f99b309, type: 3} --- !u!4 &1647759374 stripped Transform: @@ -5301,9 +5055,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 719378462} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 1} @@ -5373,13 +5127,12 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1807969626} - serializedVersion: 2 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 753458617} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!23 &1807969629 MeshRenderer: @@ -5392,17 +5145,11 @@ MeshRenderer: m_CastShadows: 0 m_ReceiveShadows: 0 m_DynamicOccludee: 0 - m_StaticShadowCaster: 0 m_MotionVectors: 2 m_LightProbeUsage: 0 m_ReflectionProbeUsage: 0 m_RayTracingMode: 2 m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 - m_ForceMeshLod: -1 - m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -5424,11 +5171,9 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} - m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 - m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &1807969630 MeshFilter: @@ -5466,9 +5211,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 652433664} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -5534,23 +5279,20 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 + m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -5617,13 +5359,12 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1812750579} - serializedVersion: 2 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!850595691 &1821185769 LightingSettings: @@ -5632,7 +5373,8 @@ LightingSettings: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: Settings.lighting - serializedVersion: 10 + serializedVersion: 3 + m_GIWorkflowMode: 1 m_EnableBakedLightmaps: 1 m_EnableRealtimeLightmaps: 0 m_RealtimeEnvironmentLighting: 1 @@ -5640,19 +5382,11 @@ LightingSettings: m_AlbedoBoost: 1 m_IndirectOutputScale: 1 m_UsingShadowmask: 0 - m_BakeBackend: 1 + m_BakeBackend: 0 m_LightmapMaxSize: 1024 - m_LightmapSizeFixed: 0 - m_UseMipmapLimits: 1 m_BakeResolution: 50 m_Padding: 2 - m_LightmapCompression: 0 - m_LightmapPackingMode: 1 - m_LightmapPackingMethod: 0 - m_XAtlasPackingAttempts: 16384 - m_XAtlasBruteForce: 0 - m_XAtlasBlockAlign: 0 - m_XAtlasRepackUnderutilizedLightmaps: 1 + m_TextureCompression: 0 m_AO: 0 m_AOMaxDistance: 1 m_CompAOExponent: 0 @@ -5663,11 +5397,13 @@ LightingSettings: m_FilterMode: 1 m_LightmapParameters: {fileID: 15204, guid: 0000000000000000f000000000000000, type: 0} m_ExportTrainingData: 0 - m_EnableWorkerProcessBaking: 1 m_TrainingDataDestination: TrainingData m_RealtimeResolution: 1 m_ForceWhiteAlbedo: 0 m_ForceUpdates: 0 + m_FinalGather: 0 + m_FinalGatherRayCount: 1024 + m_FinalGatherFiltering: 1 m_PVRCulling: 1 m_PVRSampling: 1 m_PVRDirectSampleCount: 32 @@ -5677,7 +5413,7 @@ LightingSettings: m_LightProbeSampleCountMultiplier: 4 m_PVRBounces: 2 m_PVRMinBounces: 2 - m_PVREnvironmentImportanceSampling: 0 + m_PVREnvironmentMIS: 0 m_PVRFilteringMode: 0 m_PVRDenoiserTypeDirect: 0 m_PVRDenoiserTypeIndirect: 0 @@ -5691,7 +5427,6 @@ LightingSettings: m_PVRFilteringAtrousPositionSigmaDirect: 0.5 m_PVRFilteringAtrousPositionSigmaIndirect: 2 m_PVRFilteringAtrousPositionSigmaAO: 1 - m_RespectSceneVisibilityWhenBakingGI: 0 --- !u!1 &1928037889 GameObject: m_ObjectHideFlags: 0 @@ -5719,11 +5454,11 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 115022189} - {fileID: 2008674250} m_Father: {fileID: 1187011252} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -5779,17 +5514,11 @@ MeshRenderer: m_CastShadows: 1 m_ReceiveShadows: 1 m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 - m_ForceMeshLod: -1 - m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -5811,11 +5540,9 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} - m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 - m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &1940409867 MeshFilter: @@ -5832,13 +5559,12 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1940409864} - serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0.5} m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1183010124} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1955533722 GameObject: @@ -5880,17 +5606,9 @@ MeshCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1955533722} m_Material: {fileID: 0} - m_IncludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_ExcludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_LayerOverridePriority: 0 m_IsTrigger: 0 - m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 5 + serializedVersion: 4 m_Convex: 0 m_CookingOptions: 30 m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} @@ -5905,17 +5623,11 @@ MeshRenderer: m_CastShadows: 1 m_ReceiveShadows: 1 m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 - m_ForceMeshLod: -1 - m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -5937,11 +5649,9 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} - m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 - m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &1955533726 MeshFilter: @@ -5958,13 +5668,12 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1955533722} - serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0.25, y: 0.25, z: 0} m_LocalScale: {x: 0.1, y: 0.002, z: 1} - m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1388747985} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1988754119 GameObject: @@ -6003,13 +5712,12 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1988754119} - serializedVersion: 2 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &2008674249 GameObject: @@ -6039,9 +5747,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1928037890} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -6107,23 +5815,20 @@ MonoBehaviour: m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 - m_characterHorizontalScale: 1 m_wordSpacing: 0 m_lineSpacing: 0 m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 + m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 - m_ActiveFontFeatures: 6e72656b6167696c m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 - m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -6177,10 +5882,10 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 453065208} m_Father: {fileID: 652433664} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 1} @@ -6253,9 +5958,9 @@ RectTransform: 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_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 302169897} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 1} @@ -6323,22 +6028,20 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2067021206} - serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: -0.5, y: -0.5, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 m_Children: - {fileID: 820952285} - {fileID: 1388747985} m_Father: {fileID: 1183010124} + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1001 &6977256487279145163 PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: - serializedVersion: 3 m_TransformParent: {fileID: 753458617} m_Modifications: - target: {fileID: 2784739443721397315, guid: efd1f097ce29ffa48bb0045d6502f55d, @@ -6412,13 +6115,6 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] - m_RemovedGameObjects: [] - m_AddedGameObjects: [] - m_AddedComponents: - - targetCorrespondingSourceObject: {fileID: 6977256487485077368, guid: efd1f097ce29ffa48bb0045d6502f55d, - type: 3} - insertIndex: -1 - addedObject: {fileID: 599096484} m_SourcePrefab: {fileID: 100100000, guid: efd1f097ce29ffa48bb0045d6502f55d, type: 3} --- !u!4 &6977256487279145164 stripped Transform: @@ -6431,7 +6127,6 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: - serializedVersion: 3 m_TransformParent: {fileID: 0} m_Modifications: - target: {fileID: 7383646976225659329, guid: eb3a880755444d144a4d7f13ef11df77, @@ -6505,26 +6200,4 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] - m_RemovedGameObjects: [] - m_AddedGameObjects: [] - m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: eb3a880755444d144a4d7f13ef11df77, type: 3} ---- !u!1660057539 &9223372036854775807 -SceneRoots: - m_ObjectHideFlags: 0 - m_Roots: - - {fileID: 1988754121} - - {fileID: 1812750581} - - {fileID: 7383646976240752633} - - {fileID: 426221916} - - {fileID: 924112690} - - {fileID: 1404197278} - - {fileID: 1462895485} - - {fileID: 1183010124} - - {fileID: 344649059} - - {fileID: 1314993073} - - {fileID: 983613692} - - {fileID: 753458617} - - {fileID: 1532567794} - - {fileID: 1090070598} - - {fileID: 1479254161} diff --git a/Assets/Scripts/AetheriaInput.cs b/Assets/Scripts/AetheriaInput.cs index 373c0b8bb..c6eb618c2 100644 --- a/Assets/Scripts/AetheriaInput.cs +++ b/Assets/Scripts/AetheriaInput.cs @@ -162,16 +162,6 @@ public partial class @AetheriaInput: IInputActionCollection2, IDisposable ""initialStateCheck"": false, ""priority"": 0 }, - { - ""name"": ""Cycle Target Item"", - ""type"": ""Button"", - ""id"": ""3f9a2f0a-6e3f-4a53-9f5e-1a9c1e6d9f7b"", - ""expectedControlType"": ""Button"", - ""processors"": """", - ""interactions"": """", - ""initialStateCheck"": false, - ""priority"": 0 - }, { ""name"": ""Toggle Heatsinks"", ""type"": ""Button"", @@ -251,86 +241,22 @@ public partial class @AetheriaInput: IInputActionCollection2, IDisposable ""interactions"": """", ""initialStateCheck"": true, ""priority"": 0 - }, - { - ""name"": ""Face Aim"", - ""type"": ""Button"", - ""id"": ""6d5bd565-8c0e-4789-9d51-177dc0ec8e11"", - ""expectedControlType"": ""Button"", - ""processors"": """", - ""interactions"": """", - ""initialStateCheck"": false, - ""priority"": 0 - }, - { - ""name"": ""Toggle Face Aim"", - ""type"": ""Button"", - ""id"": ""4067c72f-3e3d-4d7b-a8b5-356cab9793fc"", - ""expectedControlType"": ""Button"", - ""processors"": """", - ""interactions"": """", - ""initialStateCheck"": false, - ""priority"": 0 } ], ""bindings"": [ { - ""name"": ""Gamepad Move"", + ""name"": """", ""id"": ""978bfe49-cc26-4a3d-ab7b-7d7a29327403"", - ""path"": ""2DVector(mode=2)"", + ""path"": ""/leftStick"", ""interactions"": """", ""processors"": """", - ""groups"": """", + ""groups"": "";Gamepad"", ""action"": ""Move"", - ""isComposite"": true, + ""isComposite"": false, ""isPartOfComposite"": false }, { - ""name"": ""up"", - ""id"": ""e9c57b4d-1cd8-4b2f-93d6-1745a37cabc9"", - ""path"": ""/leftStick/up"", - ""interactions"": """", - ""processors"": """", - ""groups"": "";Gamepad"", - ""action"": ""Move"", - ""isComposite"": false, - ""isPartOfComposite"": true - }, - { - ""name"": ""down"", - ""id"": ""05f19282-8364-4ae0-b5c3-d471c10601a7"", - ""path"": ""/leftStick/down"", - ""interactions"": """", - ""processors"": """", - ""groups"": "";Gamepad"", - ""action"": ""Move"", - ""isComposite"": false, - ""isPartOfComposite"": true - }, - { - ""name"": ""left"", - ""id"": ""1ce4a07f-43af-4e82-a631-dbb43c8191d3"", - ""path"": ""/leftShoulder"", - ""interactions"": """", - ""processors"": """", - ""groups"": "";Gamepad"", - ""action"": ""Move"", - ""isComposite"": false, - ""isPartOfComposite"": true - }, - { - ""name"": ""right"", - ""id"": ""bd1aed7e-b80b-4341-a550-4ef10bacf4b4"", - ""path"": ""/rightShoulder"", - ""interactions"": """", - ""processors"": """", - ""groups"": "";Gamepad"", - ""action"": ""Move"", - ""isComposite"": false, - ""isPartOfComposite"": true - }, - { - ""name"": ""W S Q E"", + ""name"": ""WASD"", ""id"": ""00ca640b-d935-4593-8157-c05846ea39b3"", ""path"": ""Dpad(mode=1)"", ""interactions"": """", @@ -365,7 +291,7 @@ public partial class @AetheriaInput: IInputActionCollection2, IDisposable { ""name"": ""left"", ""id"": ""d2581a9b-1d11-4566-b27d-b92aff5fabbc"", - ""path"": ""/q"", + ""path"": ""/a"", ""interactions"": """", ""processors"": """", ""groups"": "";Keyboard&Mouse"", @@ -376,7 +302,7 @@ public partial class @AetheriaInput: IInputActionCollection2, IDisposable { ""name"": ""right"", ""id"": ""fcfe95b8-67b9-4526-84b5-5d0bc98d6400"", - ""path"": ""/e"", + ""path"": ""/d"", ""interactions"": """", ""processors"": """", ""groups"": "";Keyboard&Mouse"", @@ -483,17 +409,6 @@ public partial class @AetheriaInput: IInputActionCollection2, IDisposable ""isComposite"": false, ""isPartOfComposite"": false }, - { - ""name"": """", - ""id"": ""8c2d5e77-4b18-4f0b-9a2e-6d3f7c1a5e90"", - ""path"": ""/j"", - ""interactions"": """", - ""processors"": """", - ""groups"": ""Keyboard&Mouse"", - ""action"": ""Cycle Target Item"", - ""isComposite"": false, - ""isPartOfComposite"": false - }, { ""name"": """", ""id"": ""71ac6088-1e18-4810-86be-1179918dd4a2"", @@ -585,7 +500,7 @@ public partial class @AetheriaInput: IInputActionCollection2, IDisposable { ""name"": ""negative"", ""id"": ""8536ca60-1fed-4f29-8060-04d46cfffcab"", - ""path"": ""/a"", + ""path"": ""/q"", ""interactions"": """", ""processors"": """", ""groups"": """", @@ -596,57 +511,13 @@ public partial class @AetheriaInput: IInputActionCollection2, IDisposable { ""name"": ""positive"", ""id"": ""19c175bf-d4e6-4626-8bee-91e0c473a94b"", - ""path"": ""/d"", + ""path"": ""/e"", ""interactions"": """", ""processors"": """", ""groups"": """", ""action"": ""Turn"", ""isComposite"": false, ""isPartOfComposite"": true - }, - { - ""name"": """", - ""id"": ""fdff8f1f-0824-49bd-b09a-c1b792f16299"", - ""path"": ""/leftStick/x"", - ""interactions"": """", - ""processors"": """", - ""groups"": "";Gamepad"", - ""action"": ""Turn"", - ""isComposite"": false, - ""isPartOfComposite"": false - }, - { - ""name"": """", - ""id"": ""1ee2fadd-3db4-45e6-8fa4-7a621ef7d165"", - ""path"": ""/leftShift"", - ""interactions"": """", - ""processors"": """", - ""groups"": ""Keyboard&Mouse"", - ""action"": ""Face Aim"", - ""isComposite"": false, - ""isPartOfComposite"": false - }, - { - ""name"": """", - ""id"": ""e9520d95-0458-439b-a37c-84c45237e110"", - ""path"": ""/capsLock"", - ""interactions"": """", - ""processors"": """", - ""groups"": ""Keyboard&Mouse"", - ""action"": ""Toggle Face Aim"", - ""isComposite"": false, - ""isPartOfComposite"": false - }, - { - ""name"": """", - ""id"": ""596ed367-be34-4951-9aac-d8caa57b411f"", - ""path"": ""/leftStickPress"", - ""interactions"": """", - ""processors"": """", - ""groups"": "";Gamepad"", - ""action"": ""Toggle Face Aim"", - ""isComposite"": false, - ""isPartOfComposite"": false } ] }, @@ -1307,7 +1178,6 @@ public partial class @AetheriaInput: IInputActionCollection2, IDisposable m_Player_TargetPrevious = m_Player.FindAction("Target Previous", throwIfNotFound: true); m_Player_TargetNext = m_Player.FindAction("Target Next", throwIfNotFound: true); m_Player_TargetNearest = m_Player.FindAction("Target Nearest", throwIfNotFound: true); - m_Player_CycleTargetItem = m_Player.FindAction("Cycle Target Item", throwIfNotFound: true); m_Player_ToggleHeatsinks = m_Player.FindAction("Toggle Heatsinks", throwIfNotFound: true); m_Player_ToggleShield = m_Player.FindAction("Toggle Shield", throwIfNotFound: true); m_Player_ToggleStance = m_Player.FindAction("Toggle Stance", throwIfNotFound: true); @@ -1316,8 +1186,6 @@ public partial class @AetheriaInput: IInputActionCollection2, IDisposable m_Player_HideUI = m_Player.FindAction("Hide UI", throwIfNotFound: true); m_Player_TractorBeam = m_Player.FindAction("Tractor Beam", throwIfNotFound: true); m_Player_Turn = m_Player.FindAction("Turn", throwIfNotFound: true); - m_Player_FaceAim = m_Player.FindAction("Face Aim", throwIfNotFound: true); - m_Player_ToggleFaceAim = m_Player.FindAction("Toggle Face Aim", throwIfNotFound: true); // UI m_UI = asset.FindActionMap("UI", throwIfNotFound: true); m_UI_Navigate = m_UI.FindAction("Navigate", throwIfNotFound: true); @@ -1426,7 +1294,6 @@ public partial class @AetheriaInput: IInputActionCollection2, IDisposable private readonly InputAction m_Player_TargetPrevious; private readonly InputAction m_Player_TargetNext; private readonly InputAction m_Player_TargetNearest; - private readonly InputAction m_Player_CycleTargetItem; private readonly InputAction m_Player_ToggleHeatsinks; private readonly InputAction m_Player_ToggleShield; private readonly InputAction m_Player_ToggleStance; @@ -1435,8 +1302,6 @@ public partial class @AetheriaInput: IInputActionCollection2, IDisposable private readonly InputAction m_Player_HideUI; private readonly InputAction m_Player_TractorBeam; private readonly InputAction m_Player_Turn; - private readonly InputAction m_Player_FaceAim; - private readonly InputAction m_Player_ToggleFaceAim; /// /// Provides access to input actions defined in input action map "Player". /// @@ -1477,10 +1342,6 @@ public partial class @AetheriaInput: IInputActionCollection2, IDisposable /// public InputAction @TargetNearest => m_Wrapper.m_Player_TargetNearest; /// - /// Provides access to the underlying input action "Player/CycleTargetItem". - /// - public InputAction @CycleTargetItem => m_Wrapper.m_Player_CycleTargetItem; - /// /// Provides access to the underlying input action "Player/ToggleHeatsinks". /// public InputAction @ToggleHeatsinks => m_Wrapper.m_Player_ToggleHeatsinks; @@ -1513,14 +1374,6 @@ public partial class @AetheriaInput: IInputActionCollection2, IDisposable /// public InputAction @Turn => m_Wrapper.m_Player_Turn; /// - /// Provides access to the underlying input action "Player/FaceAim". - /// - public InputAction @FaceAim => m_Wrapper.m_Player_FaceAim; - /// - /// Provides access to the underlying input action "Player/ToggleFaceAim". - /// - public InputAction @ToggleFaceAim => m_Wrapper.m_Player_ToggleFaceAim; - /// /// Provides access to the underlying input action map instance. /// public InputActionMap Get() { return m_Wrapper.m_Player; } @@ -1567,9 +1420,6 @@ public partial class @AetheriaInput: IInputActionCollection2, IDisposable @TargetNearest.started += instance.OnTargetNearest; @TargetNearest.performed += instance.OnTargetNearest; @TargetNearest.canceled += instance.OnTargetNearest; - @CycleTargetItem.started += instance.OnCycleTargetItem; - @CycleTargetItem.performed += instance.OnCycleTargetItem; - @CycleTargetItem.canceled += instance.OnCycleTargetItem; @ToggleHeatsinks.started += instance.OnToggleHeatsinks; @ToggleHeatsinks.performed += instance.OnToggleHeatsinks; @ToggleHeatsinks.canceled += instance.OnToggleHeatsinks; @@ -1594,12 +1444,6 @@ public partial class @AetheriaInput: IInputActionCollection2, IDisposable @Turn.started += instance.OnTurn; @Turn.performed += instance.OnTurn; @Turn.canceled += instance.OnTurn; - @FaceAim.started += instance.OnFaceAim; - @FaceAim.performed += instance.OnFaceAim; - @FaceAim.canceled += instance.OnFaceAim; - @ToggleFaceAim.started += instance.OnToggleFaceAim; - @ToggleFaceAim.performed += instance.OnToggleFaceAim; - @ToggleFaceAim.canceled += instance.OnToggleFaceAim; } /// @@ -1632,9 +1476,6 @@ public partial class @AetheriaInput: IInputActionCollection2, IDisposable @TargetNearest.started -= instance.OnTargetNearest; @TargetNearest.performed -= instance.OnTargetNearest; @TargetNearest.canceled -= instance.OnTargetNearest; - @CycleTargetItem.started -= instance.OnCycleTargetItem; - @CycleTargetItem.performed -= instance.OnCycleTargetItem; - @CycleTargetItem.canceled -= instance.OnCycleTargetItem; @ToggleHeatsinks.started -= instance.OnToggleHeatsinks; @ToggleHeatsinks.performed -= instance.OnToggleHeatsinks; @ToggleHeatsinks.canceled -= instance.OnToggleHeatsinks; @@ -1659,12 +1500,6 @@ public partial class @AetheriaInput: IInputActionCollection2, IDisposable @Turn.started -= instance.OnTurn; @Turn.performed -= instance.OnTurn; @Turn.canceled -= instance.OnTurn; - @FaceAim.started -= instance.OnFaceAim; - @FaceAim.performed -= instance.OnFaceAim; - @FaceAim.canceled -= instance.OnFaceAim; - @ToggleFaceAim.started -= instance.OnToggleFaceAim; - @ToggleFaceAim.performed -= instance.OnToggleFaceAim; - @ToggleFaceAim.canceled -= instance.OnToggleFaceAim; } /// @@ -2129,13 +1964,6 @@ public partial class @AetheriaInput: IInputActionCollection2, IDisposable /// void OnTargetNearest(InputAction.CallbackContext context); /// - /// Method invoked when associated input action "Cycle Target Item" is either , or . - /// - /// - /// - /// - void OnCycleTargetItem(InputAction.CallbackContext context); - /// /// Method invoked when associated input action "Toggle Heatsinks" is either , or . /// /// @@ -2191,20 +2019,6 @@ public partial class @AetheriaInput: IInputActionCollection2, IDisposable /// /// void OnTurn(InputAction.CallbackContext context); - /// - /// Method invoked when associated input action "Face Aim" is either , or . - /// - /// - /// - /// - void OnFaceAim(InputAction.CallbackContext context); - /// - /// Method invoked when associated input action "Toggle Face Aim" is either , or . - /// - /// - /// - /// - void OnToggleFaceAim(InputAction.CallbackContext context); } /// /// Interface to implement callback methods for all input action callbacks associated with input actions defined by "UI" which allows adding and removing callbacks. diff --git a/Assets/Scripts/Editor/AmbientEdgeVerify.cs b/Assets/Scripts/Editor/AmbientEdgeVerify.cs deleted file mode 100644 index 4a56b6ea9..000000000 --- a/Assets/Scripts/Editor/AmbientEdgeVerify.cs +++ /dev/null @@ -1,244 +0,0 @@ -using System; -using System.IO; -using GameCult.Caching; -using UnityEditor; -using UnityEditor.SceneManagement; -using UnityEngine; -using UnityEngine.Experimental.Rendering; -using UnityEngine.Rendering; - -namespace Aetheria.EditorTools -{ - /// - /// Batchmode check for campaign aetheria-gravity, cut ambient-follows-populated-area: the ambient tint falls softly to - /// dark and never hits an edge (ruling dark-beyond-populated-area). It opens ARPG.unity, takes the Ambient Fog Light the - /// scene wires into ZoneRenderer, sizes it for a generated zone with ZoneRenderer.FitAmbientLight (the call LoadZone - /// makes, not a copy), renders it through an orthographic camera that culls its layer into a target built from the descriptor of the production - /// Fog Tint render texture (B10G11R11_UFloatPack32, the format the Tint cameras write), and checks the - /// radial profile against exp(-(r/P)^2 ln(1/_EdgeBrightness)) times the centre, to within what that format stores (a - /// 5-bit mantissa) wherever the gaussian is at least a few ZoneRenderer.AmbientFloor (P is Zone.PopulatedRadius), that it - /// is lit at Pack.Radius, that the quad's rim and every lit texel beside a dark one are - /// at most two floors, and that no two lit texels are more than half a decade apart. - /// - /// Renders, so it needs a graphics device: run WITHOUT -nographics. - /// Unity -batchmode -projectPath <repo> -executeMethod Aetheria.EditorTools.AmbientEdgeVerify.Run -logFile <path> - /// Do not pass -quit: Run exits the Editor itself, 0 on success and 1 on any failure. - /// - public static class AmbientEdgeVerify - { - const string Tag = "[AmbientEdgeVerify]"; - const int Size = 512; - const int AmbientLayer = 13; - const string FogTintPath = "Assets/Resources/Fog Tint.renderTexture"; - // A float with a 5-bit mantissa (Fog Tint's blue) steps by 2^-5 of its value, and the target truncates to a step. - const float FormatRelativeError = 1f / 32f; - // The profile is held to the gaussian where it is at least this many floors; below that the format's tail is measured, not held. - const float FaithfulFloors = 8f; - // The rim and every lit texel beside a dark one hold at most this many floors, 2^-14 (the smallest normal of the format's - // floats): the one step to dark is the format's last value. Measured on the Fog Tint format it is 1.5 floors at most. - const float StepToDarkFloors = 2f; - static bool _ok = true; - - static void OnLog(string message, string stack, LogType type) - { - if ((type == LogType.Error || type == LogType.Exception || type == LogType.Assert) && !message.StartsWith(Tag)) - Fail("logged-error", message.Split('\n')[0]); - } - - static void Fail(string check, string detail) - { - Debug.LogError($"{Tag} FAIL {check}: {detail}"); - _ok = false; - } - - public static void Run() - { - if (SystemInfo.graphicsDeviceType == GraphicsDeviceType.Null) - { - Debug.LogError($"{Tag} FAIL: no graphics device in this session; rerun batchmode without -nographics."); - EditorApplication.Exit(1); - return; - } - Application.logMessageReceived += OnLog; - var work = Path.Combine(Path.GetTempPath(), "ambient-edge-" + Guid.NewGuid().ToString("N")); - Directory.CreateDirectory(Path.Combine(work, "probe")); - try - { - var settings = AssetDatabase.LoadAssetAtPath("Assets/Resources/Settings.asset") - ?? throw new InvalidOperationException("No Settings.asset."); - // Generated zones have the populated radius at about .78 of the pack radius (p50 over 1500 zones): this one's - // pack radius is set so, which puts Pack.Radius where it sits in play, inside the quad's reach. - var probe = GravityFieldParityVerify.BuildZone(settings, Path.Combine(work, "probe"), out _); - var zone = GravityFieldParityVerify.BuildZone(settings, work, out _, probe.PopulatedRadius / .78f); - EditorSceneManager.OpenScene("Assets/Scenes/ARPG.unity", OpenSceneMode.Single); - try - { - var renderer = UnityEngine.Object.FindFirstObjectByType(FindObjectsInactive.Include); - if (renderer == null || renderer.AmbientLight == null) throw new InvalidOperationException("ARPG.unity wires no ZoneRenderer.AmbientLight."); - Check(renderer, zone); - } - finally - { - EditorSceneManager.NewScene(NewSceneSetup.EmptyScene, NewSceneMode.Single); - } - Debug.Log(_ok ? $"{Tag} PASS" : $"{Tag} FAIL: see errors above"); - } - catch (Exception e) - { - Debug.LogError($"{Tag} FAIL exception: {e}"); - _ok = false; - } - finally - { - Application.logMessageReceived -= OnLog; - try { Directory.Delete(work, true); } catch { } - } - EditorApplication.Exit(_ok ? 0 : 1); - } - - // A bare ambient quad for the verifies that run LoadZone on a renderer built in code: the scene's material, no scene. - public static Transform NewAmbientLight() - { - var quad = new GameObject("Ambient Fog Light") { layer = AmbientLayer }; - quad.AddComponent().sharedMesh = Resources.GetBuiltinResource("Quad.fbx"); - quad.AddComponent().sharedMaterial = AssetDatabase.LoadAssetAtPath("Assets/Materials/Brushes/Sector Tint.mat"); - return quad.transform; - } - - static void Check(ZoneRenderer renderer, Zone zone) - { - var production = AssetDatabase.LoadAssetAtPath(FogTintPath); - if (production == null || production.graphicsFormat != GraphicsFormat.B10G11R11_UFloatPack32) - Fail("format", $"Fog Tint is {(production == null ? "missing" : production.graphicsFormat.ToString())}, not the B10G11R11_UFloatPack32 that AmbientFloor and FormatRelativeError describe"); - var light = renderer.AmbientLight; - if (light.parent != null) Fail("wiring", $"the ambient quad sits under {light.parent.name}, whose scale is the pack radius's"); - if (light.gameObject.layer != AmbientLayer) Fail("wiring", $"the ambient quad is on layer {light.gameObject.layer}, not {AmbientLayer}"); - - ZoneRenderer.FitAmbientLight(light, zone); - var meshRenderer = light.GetComponent(); - var material = meshRenderer.sharedMaterial; - var edge = material.GetFloat("_EdgeBrightness"); - var tint = material.GetColor("_Color").linear; - var centre = material.GetFloat("_Depth") * Mathf.Max(tint.r, Mathf.Max(tint.g, tint.b)); - var populated = zone.PopulatedRadius; - var half = light.localScale.x / 2f; - Debug.Log($"{Tag} populated radius {populated:F1} u, pack radius {zone.Pack.Radius:F1} u, quad half-extent {half:F1} u, edge brightness {edge:G3}, centre {centre:G4}"); - if (!(populated > 0f) || !(half > populated)) { Fail("sizing", $"the quad half-extent {half:F1} u does not reach beyond the populated radius {populated:F1} u"); return; } - - Render(light, half * 1.05f, out var value, out var world); - var floor = ZoneRenderer.AmbientFloor; - Debug.Log($"{Tag} format floor {floor:E2} = {floor / centre:E2} of the centre; tail (drawn / floor): " - + string.Join(" ", System.Linq.Enumerable.Select(new[] { 1.5f, 1.75f, 1.9f, 2f, 2.05f, 2.1f, 2.15f, 2.2f }, - k => $"{k}P:{Sample(value, world, new Vector2(k * populated, 0f)) / floor:G3}"))); - var logFall = Mathf.Log(1f / edge); - foreach (var k in new[] { 0f, .5f, 1f, 1.5f, 2f }) - { - var drawn = Sample(value, world, new Vector2(k * populated, 0f)); - Debug.Log($"{Tag} r = {k} P: drawn {drawn:G5}, expected {centre * Mathf.Exp(-k * k * logFall):G5}"); - } - var worstProfile = 0f; - var compared = 0; - var rim = 0f; - for (var i = 0; i < value.Length; i++) - { - if (float.IsNaN(value[i])) { Fail("texels", $"texel {i}: NaN"); return; } - var r = world[i].magnitude; - var expected = centre * Mathf.Exp(-(r / populated) * (r / populated) * logFall); - if (r <= half && expected >= FaithfulFloors * floor) - { - var error = Mathf.Abs(value[i] - expected) / (FormatRelativeError * expected); - worstProfile = Mathf.Max(worstProfile, error); - compared++; - if (error > 1f) { Fail("profile", $"at r = {r / populated:F3} P: expected {expected:G5}, drawn {value[i]:G5}, off by {error:F2} times the format's step"); return; } - } - // The rim: the texels in the quad's outermost ring (within two texels of its edge). - var edgeDistance = half - Mathf.Max(Mathf.Abs(world[i].x), Mathf.Abs(world[i].y)); - if (edgeDistance >= 0f && edgeDistance < 2f * (half * 1.05f * 2f / Size)) rim = Mathf.Max(rim, value[i]); - } - Debug.Log($"{Tag} profile: {compared} texels held to the gaussian, worst error {worstProfile:F3} of the format's step; rim {rim / centre:E2} of the centre"); - if (compared < Size * Size / 16) Fail("profile", $"only {compared} texels were held to the gaussian; the check is vacuous"); - if (rim > floor * StepToDarkFloors) Fail("rim", $"the quad's rim is {rim / floor:G3} times the format floor"); - - var atPack = Sample(value, world, new Vector2(zone.Pack.Radius, 0f)); - Debug.Log($"{Tag} at Pack.Radius: {atPack / centre:E2} of the centre"); - if (!(atPack > 0f)) Fail("pack-radius", "the ambient is zero at Pack.Radius"); - - var worstJump = 0f; - for (var y = 0; y < Size; y++) - for (var x = 0; x < Size; x++) - { - var here = value[y * Size + x]; - if (here <= 0f) continue; - foreach (var next in new[] { x + 1 < Size ? value[y * Size + x + 1] : 0f, y + 1 < Size ? value[(y + 1) * Size + x] : 0f }) - { - if (next <= 0f) { if (here > floor * StepToDarkFloors) Fail("last-step", $"a lit texel of {here / floor:G3} floors sits beside a dark one"); continue; } - worstJump = Mathf.Max(worstJump, Mathf.Abs(Mathf.Log10(here / next))); - } - } - Debug.Log($"{Tag} largest jump between neighbouring lit texels: {worstJump:F3} decades (limit 0.5)"); - if (worstJump > .5f) Fail("jump", $"neighbouring texels differ by {worstJump:F2} decades"); - var lit = 0; - foreach (var v in value) if (v > 0f) lit++; - if (lit < Size * Size / 2) Fail("jump", $"only {lit} texels are lit; the check is vacuous"); - } - - static float Sample(float[] value, Vector2[] world, Vector2 at) - { - var best = 0; - for (var i = 1; i < world.Length; i++) - if ((world[i] - at).sqrMagnitude < (world[best] - at).sqrMagnitude) best = i; - return value[best]; - } - - // Renders the ambient layer through a downward orthographic camera centred on the origin, as the Tint cameras see it, - // and returns the brightest channel of every texel with the world xz of its centre, which is asked of the camera. - static void Render(Transform light, float half, out float[] value, out Vector2[] world) - { - var production = AssetDatabase.LoadAssetAtPath(FogTintPath) ?? throw new InvalidOperationException("No Fog Tint render texture."); - var rt = new RenderTexture(production.descriptor) { filterMode = FilterMode.Point }; - var cameraObject = new GameObject("Ambient Edge Camera"); - var read = new Texture2D(Size, Size, TextureFormat.RGBAFloat, false); - var previous = RenderTexture.active; - try - { - var camera = cameraObject.AddComponent(); - camera.orthographic = true; - camera.orthographicSize = half; - camera.aspect = 1f; - camera.nearClipPlane = .3f; - camera.farClipPlane = 1000f; - camera.cullingMask = 1 << light.gameObject.layer; - camera.clearFlags = CameraClearFlags.SolidColor; - camera.backgroundColor = Color.black; - camera.allowHDR = false; - camera.allowMSAA = false; - camera.targetTexture = rt; - cameraObject.transform.SetPositionAndRotation(new Vector3(0f, 100f, 0f), Quaternion.Euler(90f, 0f, 0f)); - camera.Render(); - - RenderTexture.active = rt; - read.ReadPixels(new Rect(0, 0, Size, Size), 0, 0); - read.Apply(); - var pixels = read.GetPixelData(0); - value = new float[Size * Size]; - for (var i = 0; i < value.Length; i++) - value[i] = Mathf.Max(pixels[4 * i], Mathf.Max(pixels[4 * i + 1], pixels[4 * i + 2])); - world = new Vector2[Size * Size]; - for (var y = 0; y < Size; y++) - for (var x = 0; x < Size; x++) - { - var p = camera.ViewportToWorldPoint(new Vector3((x + .5f) / Size, (y + .5f) / Size, 100f)); - world[y * Size + x] = new Vector2(p.x, p.z); - } - } - finally - { - RenderTexture.active = previous; - UnityEngine.Object.DestroyImmediate(cameraObject); - UnityEngine.Object.DestroyImmediate(read); - rt.Release(); - UnityEngine.Object.DestroyImmediate(rt); - } - } - } -} diff --git a/Assets/Scripts/Editor/AmbientEdgeVerify.cs.meta b/Assets/Scripts/Editor/AmbientEdgeVerify.cs.meta deleted file mode 100644 index 0962854de..000000000 --- a/Assets/Scripts/Editor/AmbientEdgeVerify.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 63b03af05dfdae44c89e21ca7ebec892 \ No newline at end of file diff --git a/Assets/Scripts/Editor/BeltFloaterLayerVerify.cs b/Assets/Scripts/Editor/BeltFloaterLayerVerify.cs deleted file mode 100644 index 500ae1cea..000000000 --- a/Assets/Scripts/Editor/BeltFloaterLayerVerify.cs +++ /dev/null @@ -1,265 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Reflection; -using GameCult.Caching; -using UnityEditor; -using UnityEditor.SceneManagement; -using UnityEngine; -using float2 = CultMath.float2; -using float4 = CultMath.float4; - -// End-to-end proof of the belt draw (rulings asteroid-tops-at-layer, rock-meshes-by-size), measured where it fails: two belts are loaded -// into a ZoneRenderer carrying ARPG.unity's real AsteroidMeshes (meshes, stored radii) and Settings.asset, over a zone whose wells make the -// field differ rock to rock, and ZoneRenderer.DrawBelts runs as Update runs it. Every instanced matrix it hands to the GPU is read back with the -// mesh it is drawn with (ZoneRenderer.DrawInstanced), and for each drawn rock the verify measures, from the mesh's real vertices: -// - the farthest vertex from the rock's centre after the matrix (the reach, a bound on the rock's top under any rotation) is the rock's -// gameplay radius, and centre y + reach is the floater layer over the field at the rock's xz and the drawn time; -// - the rock is drawn exactly once, on exactly one matrix of a real pose (no spare instance in a batch); -// - within a belt a bigger rock never takes a smaller mesh (by the mesh's own farthest vertex), and the belt keeps min(AsteroidMeshCount, meshes) meshes. -// The arguments the renderer hands the draw list (radius field, belt, batch size, kept count) are not inspected: their consequence is. -// -// Reached: ZoneRenderer.LoadPlanet for each belt, DrawBelts. Not reached: LoadZone's other planets (their prefabs), the GPU draw itself. -// Needs a GPU device for MapPresenter's belt buffer: run without -nographics. -// -// Unity -batchmode -projectPath -executeMethod Aetheria.EditorTools.BeltFloaterLayerVerify.Run -logFile -// -// Do not pass -quit: Run enters play mode (a domain reload), the check runs there, and the Editor exits itself, 0 on success and 1 on any failure. -namespace Aetheria.EditorTools -{ - [InitializeOnLoad] - public static class BeltFloaterLayerVerify - { - private const string Tag = "[BeltFloaterLayerVerify]"; - private const string Flag = "BeltFloaterLayerVerify.running"; - private const string Wiring = "BeltFloaterLayerVerify.wiring"; - private const double Budget = 300; // real seconds - private const float Lead = .008f, Layer = -1.5f, Tolerance = .02f; - private static IEnumerator _check; - private static double _started; - private static string _work; - - static BeltFloaterLayerVerify() - { - if (SessionState.GetBool(Flag, false)) EditorApplication.playModeStateChanged += OnPlayMode; - } - - public static void Run() - { - try - { - SessionState.SetString(Wiring, ReadWiring()); - SessionState.SetBool(Flag, true); - EditorApplication.EnterPlaymode(); - } - catch (Exception exception) - { - Debug.LogException(exception); - EditorApplication.Exit(1); - } - } - - private static void OnPlayMode(PlayModeStateChange change) - { - if (change != PlayModeStateChange.EnteredPlayMode) return; - _work = Path.Combine(Path.GetTempPath(), $"belt-floater-{Guid.NewGuid():N}"); - Directory.CreateDirectory(_work); - _started = Time.realtimeSinceStartupAsDouble; - _check = Check(); - EditorApplication.update += Step; - } - - private static void Step() - { - try - { - if (Time.realtimeSinceStartupAsDouble - _started > Budget) throw new InvalidOperationException($"The check did not finish in {Budget} seconds."); - if (_check.MoveNext()) return; - Finish(0); - } - catch (Exception exception) - { - Debug.LogException(exception); - Finish(1); - } - } - - private static void Finish(int code) - { - EditorApplication.update -= Step; - SessionState.SetBool(Flag, false); - try { if (Directory.Exists(_work)) Directory.Delete(_work, true); } catch (Exception) { /* a temp directory */ } - EditorApplication.Exit(code); - } - - private static void Require(bool condition, string what) - { - if (!condition) throw new InvalidOperationException(what); - } - - // A belt of rocks of every size, its sizes in the given order, round an orbit about the planet. - private static Asteroid[] Rocks(int count, Func size, float start) => Enumerable.Range(0, count).Select(i => new Asteroid - { - Distance = start + i * 9.7f, Phase = Mathf.Repeat(i * .6180339887f, 1f), Size = size(i), RotationSpeed = .1f + i * .013f - }).ToArray(); - - private static IEnumerator Check() - { - var game = AssetDatabase.LoadAssetAtPath("Assets/Resources/Settings.asset") ?? throw new InvalidOperationException("No Settings.asset."); - var settings = game.GameplaySettings; - settings.FloaterLayerHeight = Layer; // in memory, never saved back to the asset: a draw that drops the layer fails - - var meshes = SessionState.GetString(Wiring, "").Split('|').Select(entry => entry.Split('~')).Select(p => new InstancedMesh - { - Mesh = AssetDatabase.LoadAllAssetsAtPath(p[0]).OfType().First(m => m.name == p[1]), - Material = p[2] == "" ? null : AssetDatabase.LoadAssetAtPath(p[2]), - Radius = float.Parse(p[3], System.Globalization.CultureInfo.InvariantCulture) - }).ToArray(); - Require(meshes.Length > game.AsteroidMeshCount, $"ARPG.unity has {meshes.Length} rock meshes for a kept count of {game.AsteroidMeshCount}: nothing to prune."); - - var cache = AetheriaStores.Open(Path.Combine(_work, "belts.cc"), Path.Combine(_work, "belts-run.cc"), catalogWritable: true); - cache.Upsert(new VerseGrammar { Revision = 1 }); - cache.FlushAsync().Wait(); - var items = new ItemManager(1u, cache, new ProvenanceLedger(), settings, _ => { }); - - CultRecordKey Orbit(CultRecordKey parent, float distance, float phase, float2 fixedPosition = default) - { - var data = new OrbitData { Distance = distance, Phase = phase, FixedPosition = fixedPosition }; - if (parent.IsSet()) data.Parent = new CultRecordRef(parent); - return cache.Upsert(data).Key; - } - - // A heavy sun and a planet on a moving rail, the belts round the planet: the field under a rock differs from rock to rock. - var sunOrbit = Orbit(default, 0f, 0f, new float2(700f, -300f)); - var planetOrbit = Orbit(sunOrbit, 600f, .3f); - var beltOrbitA = Orbit(planetOrbit, 150f, .1f); - var beltOrbitB = Orbit(planetOrbit, 300f, .6f); - var beltA = cache.Upsert(new AsteroidBeltData { Orbit = new CultRecordRef(beltOrbitA), Asteroids = Rocks(24, i => (i * 7 % 24) / 23f, 40f) }).Key; - var beltB = cache.Upsert(new AsteroidBeltData { Orbit = new CultRecordRef(beltOrbitB), Asteroids = Rocks(24, i => (i * 5 % 24) / 23f, 60f) }).Key; - var pack = new ZonePack { Radius = 5000f, Mass = 10000f }; - foreach (var orbit in new[] { sunOrbit, planetOrbit, beltOrbitA, beltOrbitB }) pack.Orbits.Add(new CultRecordRef(orbit)); - pack.Planets.Add(new CultRecordRef(cache.Upsert(new PlanetData { Name = "Belt Sun", Orbit = new CultRecordRef(sunOrbit), Mass = 400f }).Key)); - pack.Planets.Add(new CultRecordRef(cache.Upsert(new PlanetData { Name = "Belt Planet", Orbit = new CultRecordRef(planetOrbit), Mass = 400f }).Key)); - pack.Planets.Add(new CultRecordRef(beltA)); - pack.Planets.Add(new CultRecordRef(beltB)); - var curves = new PlanetSettings - { - BodyRadius = new ExponentialCurve(), - WellStrength = new ExponentialCurve { Multiplier = 1f, Exponent = 1f }, - RocheLimit = new ExponentialCurve { Constant = 10f }, - AsteroidSize = new ExponentialLerp { Minimum = 2f, Maximum = 9f, Exponent = 1.7f }, - AsteroidHitpoints = new ExponentialLerp { Minimum = 10f, Maximum = 300f, Exponent = 2f }, - AsteroidRespawnTime = new ExponentialLerp { Minimum = 5f, Maximum = 60f, Exponent = 1f } - }; - var zone = new Zone(items, curves, pack, null, null); - zone.Update(.5f); - - // The renderer, configured as the scene configures it for belts: Awake builds the map, LoadPlanet reads Zone, Settings and AsteroidMeshes. - var rendererObject = new GameObject("Belt Zone Renderer"); - rendererObject.SetActive(false); - var renderer = rendererObject.AddComponent(); - renderer.Settings = game; - renderer.AsteroidMeshes = meshes; - renderer.ItemManager = items; - renderer.LODHandler = new GameObject("Belt LOD").AddComponent(); - const BindingFlags Any = BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public; - typeof(ZoneRenderer).GetProperty("Zone").GetSetMethod(true).Invoke(renderer, new object[] { zone }); - typeof(ZoneRenderer).GetMethod("Awake", Any).Invoke(renderer, null); - var load = typeof(ZoneRenderer).GetMethod("LoadPlanet", Any); - foreach (var belt in new[] { beltA, beltB }) load.Invoke(renderer, new object[] { belt, zone.Planets[belt] }); - - var planetAt = DrawAhead.Orbit(zone, planetOrbit, Lead); - var camera = new GameObject("Belt Camera").AddComponent(); - camera.transform.position = new Vector3(planetAt.x, 4000f, planetAt.y); - camera.transform.rotation = Quaternion.Euler(90, 0, 0); - camera.farClipPlane = 20000f; - renderer.MainCamera = camera; - yield return null; - - ActionGameManager.Clock.Reset(); - ActionGameManager.Clock.Advance(Lead, _ => throw new InvalidOperationException("a step ran")); - var lead = ActionGameManager.Clock.Lead; - Require(Mathf.Abs(lead - Lead) < 1e-6f, $"The clock's lead is {lead}, not {Lead}."); - - var drawn = new List<(Mesh mesh, Matrix4x4[] matrices)>(); - renderer.DrawInstanced = (mesh, _, matrices) => drawn.Add((mesh, (Matrix4x4[]) matrices.Clone())); - renderer.DrawBelts(lead); - - // The poses the sim defines at the drawn time: every rock of both belts. - var rocks = new List<(CultRecordKey belt, int index, float4 pose)>(); - foreach (var belt in new[] { beltA, beltB }) - { - var poses = new float4[((AsteroidBeltData) zone.Planets[belt]).Asteroids.Length]; - zone.EvaluateBelt(belt, poses, DrawAhead.Time(zone, lead)); - for (var i = 0; i < poses.Length; i++) rocks.Add((belt, i, poses[i])); - } - Require(drawn.Count > 0, "DrawBelts drew nothing: the belts are out of the camera or have no rocks."); - - // The field differs between rocks, so a draw that drops it or samples it at the wrong place fails. - var layers = rocks.Select(r => DrawAhead.FloaterHeight(zone, settings, r.pose.xy, lead)).ToArray(); - Require(layers.Max() - layers.Min() > 1f, $"The fixture's field is flat under the rocks: layer heights span {layers.Max() - layers.Min()}."); - - var seen = new Dictionary<(CultRecordKey, int), float>(); // rock -> its mesh's own farthest vertex - var vertices = new Dictionary(); - foreach (var (mesh, matrices) in drawn) - { - if (!vertices.TryGetValue(mesh, out var v)) vertices[mesh] = v = mesh.vertices; - var own = Mathf.Sqrt(v.Max(x => x.sqrMagnitude)); - foreach (var matrix in matrices) - { - var centre = (Vector3) matrix.GetColumn(3); - var at = rocks.Where(r => Mathf.Abs(r.pose.x - centre.x) < .01f && Mathf.Abs(r.pose.y - centre.z) < .01f).ToArray(); - Require(at.Length == 1, $"An instance of {mesh.name} sits at {centre.x},{centre.z}, where {at.Length} rocks are (a spare or misplaced instance)."); - var rock = at[0]; - Require(seen.TryAdd((rock.belt, rock.index), own), $"Rock {rock.index} of {rock.belt} is drawn twice."); - var reach = v.Max(x => (matrix.MultiplyPoint3x4(x) - centre).magnitude); - Require(Mathf.Abs(reach - rock.pose.w) < Tolerance * Mathf.Max(1f, rock.pose.w), - $"Rock {rock.index} of {rock.belt} on {mesh.name}: its farthest vertex is {reach} from its centre, its gameplay radius {rock.pose.w}."); - var top = centre.y + reach; - var want = DrawAhead.FloaterHeight(zone, settings, rock.pose.xy, lead); - Require(Mathf.Abs(top - want) < Tolerance, - $"Rock {rock.index} of {rock.belt} on {mesh.name}: its top is {top}, the floater layer over the field there {want}."); - } - } - Require(seen.Count == rocks.Count, $"{seen.Count} of {rocks.Count} rocks were drawn."); - - foreach (var belt in new[] { beltA, beltB }) - { - var mine = rocks.Where(r => r.belt.Equals(belt)).ToArray(); - var radii = mine.Select(r => seen[(belt, r.index)]).Distinct().OrderBy(x => x).ToArray(); - Require(radii.Length >= 2, $"Belt {belt} is drawn on {radii.Length} distinct mesh radii: the size match is not exercised."); - var kept = drawn.Where(d => d.matrices.Any(m => mine.Any(r => Mathf.Abs(r.pose.x - m.m03) < .01f && Mathf.Abs(r.pose.y - m.m23) < .01f))).Select(d => d.mesh).Distinct().Count(); - Require(kept == Mathf.Min(game.AsteroidMeshCount, meshes.Length), $"Belt {belt} is drawn on {kept} meshes, not the kept count {game.AsteroidMeshCount}."); - var size = mine.ToDictionary(r => r.index, r => zone.AsteroidBelts[belt].UndamagedSize(r.index, zone.Settings)); - foreach (var a in mine) - foreach (var b in mine) - if (size[a.index] < size[b.index]) - Require(seen[(belt, a.index)] <= seen[(belt, b.index)], - $"Belt {belt}: rock {a.index} (size {size[a.index]}) is smaller than rock {b.index} ({size[b.index]}) and takes a bigger mesh ({seen[(belt, a.index)]} against {seen[(belt, b.index)]})."); - var biggest = mine.OrderByDescending(r => size[r.index]).First(); - Require(Mathf.Approximately(seen[(belt, biggest.index)], radii[^1]), $"Belt {belt}: its biggest rock is not on its biggest mesh."); - } - ActionGameManager.Clock.Reset(); - Debug.Log($"{Tag} ok: {rocks.Count} rocks of 2 belts drawn at the floater layer, big rocks on big meshes ({drawn.Count} batches)"); - } - - // The AsteroidMeshes ARPG.unity's ZoneRenderer names, read before the play session (a scene cannot be opened inside one) and carried across the - // domain reload as asset paths: mesh path, mesh name, material path, stored radius. - private static string ReadWiring() - { - var scene = EditorSceneManager.OpenScene("Assets/Scenes/ARPG.unity", OpenSceneMode.Additive); - try - { - var found = UnityEngine.Object.FindObjectsByType(FindObjectsInactive.Include, FindObjectsSortMode.None) - .Where(r => r.gameObject.scene == scene).ToArray(); - Require(found.Length == 1, $"ARPG.unity has {found.Length} ZoneRenderers."); - var meshes = found[0].AsteroidMeshes ?? throw new InvalidOperationException("ARPG.unity's ZoneRenderer has no AsteroidMeshes."); - return string.Join("|", meshes.Select(m => string.Join("~", AssetDatabase.GetAssetPath(m.Mesh), m.Mesh.name, - m.Material == null ? "" : AssetDatabase.GetAssetPath(m.Material), m.Radius.ToString("R", System.Globalization.CultureInfo.InvariantCulture)))); - } - finally { EditorSceneManager.CloseScene(scene, true); } - } - } -} diff --git a/Assets/Scripts/Editor/BeltFloaterLayerVerify.cs.meta b/Assets/Scripts/Editor/BeltFloaterLayerVerify.cs.meta deleted file mode 100644 index a383593c7..000000000 --- a/Assets/Scripts/Editor/BeltFloaterLayerVerify.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 7d25a93db1972324fa5460b2415c1e4a \ No newline at end of file diff --git a/Assets/Scripts/Editor/CapabilityPresentationSmoke.cs b/Assets/Scripts/Editor/CapabilityPresentationSmoke.cs deleted file mode 100644 index 135163e24..000000000 --- a/Assets/Scripts/Editor/CapabilityPresentationSmoke.cs +++ /dev/null @@ -1,217 +0,0 @@ -using System; -using System.IO; -using System.Linq; -using System.Reflection; -using GameCult.Caching; -using UnityEditor; -using UnityEngine; -using CultMath; -using static CultMath.math; - -// Batch proof of the capability presenters' wiring, without a scene: a zone ship is bound to an EntityInstance through the -// game's own SetEntity, and impacts and grabs are published on the ship's Capabilities exactly as the simulation does. A hull absorb spawns -// one hull effect under the instance and, for the player's ship at ScreenShake 1, raises one camera impulse; ScreenShake 0 -// or another ship raises none; a shield absorb spawns no hull effect. The shield ripple itself (ShieldManager.ShowHit -// needs a shield material and a rig) is looked at in the editor, not here. Grabs: a Tractor Beam prefab under the instance -// is bound by the same SetEntity and presents a grab from events alone (emission at Power and the aim at the held point -// from Started to Completed or Cancelled, nothing otherwise, nothing for another entity's grab). -// -// Unity -batchmode -nographics -projectPath -executeMethod CapabilityPresentationSmoke.Run -logFile -// -// Do not pass -quit: Run exits the Editor itself, 0 on success and 1 on any failure. -public static class CapabilityPresentationSmoke -{ - private const BindingFlags Any = BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic; - - public static void Run() - { - var work = Path.Combine(Path.GetTempPath(), $"capability-presentation-smoke-{Guid.NewGuid():N}"); - GameObject[] objects = null; - try - { - Directory.CreateDirectory(work); - objects = Check(work); - Clean(objects, work); - EditorApplication.Exit(0); - } - catch (Exception exception) - { - Debug.LogException(exception); - Clean(objects, work); - EditorApplication.Exit(1); - } - } - - // Edit mode runs no Awake or Start; the smoke runs the ones the game's scene would have. - private static void Awaken(Component component) => component.GetType().GetMethod("Awake", Any)?.Invoke(component, null); - - private static GameObject[] Check(string work) - { - var settings = AssetDatabase.LoadAssetAtPath("Assets/Resources/Settings.asset")?.GameplaySettings - ?? throw new InvalidOperationException("No Settings.asset."); - - var shape = new Shape(5, 4); - foreach (var cell in shape.AllCoordinates) shape[cell] = true; - var hullData = new HullData - { - Name = "Smoke Hull", HullType = HullType.Ship, Shape = shape, Durability = 1000, Mass = 1000, Armor = 0 - }; - var cache = AetheriaStores.Open(Path.Combine(work, "smoke.cc"), catalogWritable: true); - cache.Upsert(new VerseGrammar { Revision = 1 }); - cache.Upsert(hullData); - cache.FlushAsync().Wait(); - var ledger = new ProvenanceLedger(); - for (var i = 1; i <= 8; i++) ledger.Lots[i] = new Lot { Origin = new Attributed(), Quality = 1 }; - var items = new ItemManager(1u, cache, ledger, settings, _ => { }); - var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Smoke", Owner = null }, null); - var hullRef = items.ItemData.RefOf(items.ItemData.GetByName("Smoke Hull")); - var ship = new Ship(items, zone, new EquippableItem { Data = hullRef, Durability = 1000, Lot = 1 }, new EntitySettings()); - var other = new Ship(items, zone, new EquippableItem { Data = hullRef, Durability = 1000, Lot = 2 }, new EntitySettings()); - zone.Admit(ship, piloted: false); - zone.Admit(other, piloted: false); - - // The scene's side: the tuning object with a pooled effect, and the game manager that names the player's ship. - var feedbackObject = new GameObject("Smoke Impact Feedback"); - var feedback = feedbackObject.AddComponent(); - Awaken(feedback); - var effectObject = new GameObject("Smoke Hull Effect"); - feedback.HullEffect = effectObject.AddComponent(); - var managerObject = new GameObject("Smoke Game Manager"); - var manager = managerObject.AddComponent(); - typeof(ActionGameManager).GetProperty("Instance", Any).SetValue(null, manager); - manager.CurrentEntity = ship; - - var beamPrefab = AssetDatabase.LoadAssetAtPath("Assets/Content/Prefabs/Tractor Beam.prefab") - ?? throw new InvalidOperationException("No Tractor Beam prefab."); - // An entity's instance as the game builds it: the beam is a child before SetEntity on both ship paths, so the - // binder finds it as the game does. - // The scene's map: an entity registers its icon with the ZoneRenderer's presenter, so each instance carries a quad. - var mapRenderer = new GameObject("Smoke Zone Renderer").AddComponent(); - mapRenderer.Settings = AssetDatabase.LoadAssetAtPath("Assets/Resources/Settings.asset"); - mapRenderer.MapGravityMaterials = new Material[0]; - Awaken(mapRenderer); - (GameObject Object, EntityInstance Instance, TractorBeam Beam) Bound(string name, Entity entity) - { - var go = new GameObject(name); - var bound = go.AddComponent(); - Awaken(bound); - bound.HullColliders = new HullCollider[0]; - bound.RadiatorHardpoints = new RadiatorHardpoint[0]; - bound.ThrusterHardpoints = new ThrusterHardpoint[0]; - bound.WeaponHardpoints = new WeaponHardpoint[0]; - bound.ArticulationPoints = new ArticulationPoint[0]; - var tractor = ((GameObject)PrefabUtility.InstantiatePrefab(beamPrefab, go.transform)).GetComponent(); - tractor.Power = .8f; - tractor.Direction = Vector3.forward; - var icon = GameObject.CreatePrimitive(PrimitiveType.Quad); - icon.transform.SetParent(go.transform); - bound.MapIcon = icon.GetComponent(); - bound.MapIcon.sharedMaterial = new Material(Shader.Find("Unlit/Color")); - bound.SetEntity(mapRenderer, entity); - return (go, bound, tractor); - } - var (instanceObject, instance, beam) = Bound("Smoke Entity Instance", ship); - var (otherObject, _, otherBeam) = Bound("Smoke Other Instance", other); - - int Effects() => instance.GetComponentsInChildren(true).Count(p => p != null && !p.isOriginalPrototype); - void Expect(string what, int effects, int kicks) - { - if (Effects() != effects || feedback.KicksRaised != kicks) - throw new InvalidOperationException($"{what}: {Effects()} hull effects (want {effects}), {feedback.KicksRaised} impulses (want {kicks})."); - } - AbsorbEvent Hit(AbsorbLayer layer) => new AbsorbEvent(float3(1f, 0f, 2f), float3(0f, 0f, 1f), 100f, DamageType.Kinetic, layer); - - ActionGameManager.PlayerSettings.GraphicsSettings.ScreenShake = 1f; - ship.Capabilities.PublishAbsorb(Hit(AbsorbLayer.Hull)); - Expect("player's hull hit", 1, 1); - var effect = instance.GetComponentsInChildren(true).Single(p => !p.isOriginalPrototype); - var drawn = DrawAhead.Carried(ship, float3(1f, 0f, 2f), ActionGameManager.Clock.Lead); - if (abs(effect.transform.position.x - drawn.x) > 1e-3f || abs(effect.transform.position.z - drawn.z) > 1e-3f) - throw new InvalidOperationException("The hull effect is not at the drawn impact point."); - - ActionGameManager.PlayerSettings.GraphicsSettings.ScreenShake = 0f; - ship.Capabilities.PublishAbsorb(Hit(AbsorbLayer.Hull)); - Expect("hull hit at ScreenShake 0", 2, 1); - - ActionGameManager.PlayerSettings.GraphicsSettings.ScreenShake = 1f; - manager.CurrentEntity = other; - ship.Capabilities.PublishAbsorb(Hit(AbsorbLayer.Hull)); - // An untracked ship is not drawn at (ActionGameManager.DrawsAt, since contact-hud): no hull effect, no impulse. - Expect("hull hit on an untracked ship", 2, 1); - - // Once the player's instruments track it, the same hit is drawn. - other.VisibleEntities.Add(ship); - ship.Capabilities.PublishAbsorb(Hit(AbsorbLayer.Hull)); - Expect("hull hit on a tracked ship", 3, 1); - other.VisibleEntities.Remove(ship); - - manager.CurrentEntity = ship; - ship.Capabilities.PublishAbsorb(Hit(AbsorbLayer.Shield)); - Expect("player's shield hit", 3, 2); - - // Grabs: the beam presents the simulation's events and nothing else. - float Emission() => beam.ParticleSystem.emission.rateOverTimeMultiplier; - void ExpectBeam(string what, float emission, bool towardHeld) - { - beam.Update(); - var forward = beam.transform.forward; - var aimed = towardHeld ? forward.x > .999f : forward.z > .999f; - if (abs(Emission() - emission) > 1e-4f || !aimed) - throw new InvalidOperationException($"{what}: emission {Emission()} (want {emission}), forward {forward} (want {(towardHeld ? "+x" : "+z")})."); - } - GrabEvent Grab(GrabPhase phase, float3 at) => new GrabEvent(new FloatingBodyId(7), phase, at, 1f); - - ExpectBeam("idle beam", 0f, false); - ship.Capabilities.PublishGrab(Grab(GrabPhase.Started, float3(20f, 0f, 0f))); - ExpectBeam("grab started", .8f, true); - foreach (var phase in new[] { GrabPhase.Extend, GrabPhase.Envelop, GrabPhase.Pull }) - { - ship.Capabilities.PublishGrab(Grab(phase, float3(20f, 0f, 0f))); - ExpectBeam($"grab {phase}", .8f, true); - } - ship.Capabilities.PublishGrab(Grab(GrabPhase.Completed, float3(20f, 0f, 0f))); - ExpectBeam("grab completed", 0f, false); - - // A grab cancelled after its item vanished carries no position: the beam goes dark and never turns toward it. - ship.Capabilities.PublishGrab(Grab(GrabPhase.Started, float3(20f, 0f, 0f))); - ExpectBeam("second grab started", .8f, true); - ship.Capabilities.PublishGrab(Grab(GrabPhase.Cancelled, float3(0f, 0f, 0f))); - ExpectBeam("grab cancelled", 0f, false); - - // Aim is on the ground plane: a beam above the held point does not pitch toward it. - var beamHome = beam.transform.position; - beam.transform.position = beamHome + new Vector3(0f, 10f, 0f); - ship.Capabilities.PublishGrab(Grab(GrabPhase.Started, float3(20f, 7f, 0f))); - ExpectBeam("grab from above", .8f, true); - ship.Capabilities.PublishGrab(Grab(GrabPhase.Completed, float3(20f, 7f, 0f))); - beam.transform.position = beamHome; - - // A grab held at the beam's own position has no direction to take: the beam keeps the aim it had. - beam.Direction = Vector3.right; - var atBeam = float3(beam.transform.position.x, 0f, beam.transform.position.z); - ship.Capabilities.PublishGrab(Grab(GrabPhase.Started, atBeam)); - ExpectBeam("grab at the beam", .8f, true); - ship.Capabilities.PublishGrab(Grab(GrabPhase.Completed, atBeam)); - beam.Direction = Vector3.forward; - ExpectBeam("after the grab at the beam", 0f, false); - - // The beam belongs to the ship's entity: another entity's grab, with its own beam bound, moves only that beam. - other.Capabilities.PublishGrab(Grab(GrabPhase.Started, float3(20f, 0f, 0f))); - ExpectBeam("another entity's grab", 0f, false); - otherBeam.Update(); - if (abs(otherBeam.ParticleSystem.emission.rateOverTimeMultiplier - .8f) > 1e-4f) - throw new InvalidOperationException("The other entity's own beam did not present its grab."); - - Debug.Log("CAPABILITY_PRESENTATION_SMOKE ok effects=3 impulses=2 grabs=ok"); - return new[] { feedbackObject, effectObject, managerObject, instanceObject, otherObject }; - } - - private static void Clean(GameObject[] objects, string work) - { - if (objects != null) - foreach (var go in objects) - if (go != null) UnityEngine.Object.DestroyImmediate(go); - try { if (Directory.Exists(work)) Directory.Delete(work, true); } - catch (Exception error) { Debug.LogWarning($"Impact presenter smoke left {work}: {error.Message}"); } - } -} diff --git a/Assets/Scripts/Editor/CapabilityPresentationSmoke.cs.meta b/Assets/Scripts/Editor/CapabilityPresentationSmoke.cs.meta deleted file mode 100644 index 05df104cd..000000000 --- a/Assets/Scripts/Editor/CapabilityPresentationSmoke.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: b1b27e4493b2cfe48805c786a5090cd3 \ No newline at end of file diff --git a/Assets/Scripts/Editor/CultCacheDrawers.cs b/Assets/Scripts/Editor/CultCacheDrawers.cs index 27d21afec..c446212db 100644 --- a/Assets/Scripts/Editor/CultCacheDrawers.cs +++ b/Assets/Scripts/Editor/CultCacheDrawers.cs @@ -1,4 +1,3 @@ -using System.Collections.Generic; using System; using System.Linq; using System.Reflection; @@ -88,13 +87,14 @@ public sealed class InspectableTemperatureDrawer : ICultInspectorDrawer } } -// A size and a toggle per cell. The underlay (the item's schematic texture, or a hull's line art stretched to the Shape's -// Width x Height) is drawn by HullUnderlay; the height follows a texture's aspect. A hull's hardpoint cells are tinted. -// Both read the owning record through +// A size and a toggle per cell. When the owning item has a schematic texture, the texture lies under the grid and the +// height follows its aspect; a hull's hardpoint cells are tinted. Both read the owning record through // inspector.Record, which is a read-only copy: nothing here writes to it. [CultInspectorDrawer(typeof(InspectableSchematicShapeAttribute))] public sealed class InspectableSchematicShapeDrawer : ICultInspectorDrawer { + private static Material _schematicMaterial; + public object Draw(CultInspector inspector, string label, Type type, object value, MemberInfo member) { if (type != typeof(Shape)) return inspector.DrawDefault(label, type, value, member); @@ -122,13 +122,18 @@ public sealed class InspectableSchematicShapeDrawer : ICultInspectorDrawer { using (var grid = new EditorGUILayout.VerticalScope()) { - HullUnderlay.Draw(grid.rect, item, inspector.Records); + if (schematic != null && Event.current.type == EventType.Repaint) + { + _schematicMaterial ??= new Material(Shader.Find("Legacy Shaders/Particles/Additive")); + EditorGUI.DrawPreviewTexture(grid.rect, schematic, _schematicMaterial); + } for (var y = shape.Height - 1; y >= 0; y--) using (new EditorGUILayout.HorizontalScope()) for (var x = 0; x < shape.Width; x++) { - var hardpoint = hull?.Hardpoints.FirstOrDefault(hp => HullFootprint.Cells(hp).Contains(int2(x, y))); + var hardpoint = hull?.Hardpoints.FirstOrDefault(hp => hp.Shape.Coordinates + .Any(v => v.x + hp.Position.x == x && v.y + hp.Position.y == y)); var previous = GUI.backgroundColor; if (hardpoint != null) GUI.backgroundColor = hardpoint.TintColor.ToColor(); shape[int2(x, y)] = GUILayout.Toggle(shape[int2(x, y)], GUIContent.none, GUILayout.Width(16)); @@ -140,93 +145,3 @@ public sealed class InspectableSchematicShapeDrawer : ICultInspectorDrawer return shape; } } - -// The underlay under a hull's cell grids, drawn on Repaint only. A shipped hull's schematic texture is stretched over -// the grid rect; a mod hull's line art (its ShipAuthoring, found in the open cache at hull.Visual) is placed by -// SchematicUnderlay.Fit in cell units and mapped to the rect here, the one site that maps cells to a grid's screen -// rect. The hull Shape grid and the footprint painter both draw through it. No lookup found: no line underlay. -public static class HullUnderlay -{ - private static Material _schematicMaterial; - - public static void Draw(Rect grid, EquippableItemData item, IReadOnlyList records) - { - if (item == null || Event.current.type != EventType.Repaint) return; - var texture = string.IsNullOrEmpty(item.Schematic) ? null : AssetDatabase.LoadAssetAtPath(AssetDatabase.GUIDToAssetPath(item.Schematic)); - if (texture != null) - { - _schematicMaterial ??= new Material(Shader.Find("Legacy Shaders/Particles/Additive")); - EditorGUI.DrawPreviewTexture(grid, texture, _schematicMaterial); - } - - if (!(item is HullData hull) || hull.Shape == null || hull.Shape.Width == 0 || hull.Shape.Height == 0) return; - var key = CultInspectorModel.RecordKey(hull.Visual); - var authoring = records?.FirstOrDefault(record => record.Key.Value == key && record.Document is ShipAuthoring)?.Document as ShipAuthoring; - if (authoring == null) return; - - var lines = authoring.SchematicLines; - var fit = SchematicUnderlay.Fit(lines, hull.Shape); - for (var i = 0; i < fit.Length; i++) - { - var rgba = lines[i].Color; - var color = rgba == null ? Color.white : new Color(rgba[0], rgba[1], rgba[2], rgba[3]); - var points = fit[i].Select(p => new Vector3( - grid.x + p.x / hull.Shape.Width * grid.width, - grid.yMax - p.y / hull.Shape.Height * grid.height)).ToList(); - if (lines[i].Cyclic && points.Count > 2) points.Add(points[0]); - using (new Handles.DrawingScope(color)) Handles.DrawAAPolyLine(2f, points.ToArray()); - } - } -} - -// A hardpoint's schematic footprint over its hull's cells: the hull's occupied cells shaded, this hardpoint's cells lit -// in its tint, other hardpoints' cells tinted and disabled. A click edits Position and Shape together through -// HullFootprint.Toggle, which owns the rule so a Thing host reads the same one. The footprint is authored for gameplay, -// never derived from the model. Read-only on inspector.Record; only the HardpointData it is given changes. -[CultInspectorDrawer(typeof(HardpointData))] -public sealed class HardpointFootprintDrawer : ICultInspectorDrawer -{ - public object Draw(CultInspector inspector, string label, Type type, object value, MemberInfo member) - { - var hardpoint = value as HardpointData; - if (type != typeof(HardpointData) || hardpoint == null) return inspector.DrawDefault(label, type, value, member); - var hull = inspector.Record as HullData; - var own = hull?.Hardpoints.FirstOrDefault(hp => hp.Type == hardpoint.Type && hp.Position.Equals(hardpoint.Position) - && HullFootprint.Cells(hp).SequenceEqual(HullFootprint.Cells(hardpoint))); - var drawn = (HardpointData) inspector.DrawDefault(label, type, value, member); - if (hull?.Shape == null) return drawn; - - var others = hull.Hardpoints.Where(hp => hp != own).ToArray(); - EditorGUILayout.LabelField("Footprint"); - using (new EditorGUILayout.HorizontalScope()) - { - using (var grid = new EditorGUILayout.VerticalScope()) - { - HullUnderlay.Draw(grid.rect, hull, inspector.Records); - for (var y = hull.Shape.Height - 1; y >= 0; y--) - using (new EditorGUILayout.HorizontalScope()) - for (var x = 0; x < hull.Shape.Width; x++) - { - var cell = int2(x, y); - var other = others.FirstOrDefault(hp => HullFootprint.Cells(hp).Contains(cell)); - var on = HullFootprint.Cells(drawn).Contains(cell); - var previous = GUI.backgroundColor; - GUI.backgroundColor = on ? drawn.TintColor.ToColor() : other != null ? other.TintColor.ToColor() - : hull.Shape[cell] ? Color.gray : previous; - EditorGUI.BeginChangeCheck(); - using (new EditorGUI.DisabledScope(other != null && !on)) - GUILayout.Toggle(on || other != null, GUIContent.none, GUILayout.Width(16)); - if (EditorGUI.EndChangeCheck() && HullFootprint.Toggle(drawn.Shape, drawn.Position, cell, out var shape, out var position)) - { - drawn.Shape = shape; - drawn.Position = position; - GUI.changed = true; - } - GUI.backgroundColor = previous; - } - } - GUILayout.FlexibleSpace(); - } - return drawn; - } -} diff --git a/Assets/Scripts/Editor/DrawnPoseWiringVerify.cs b/Assets/Scripts/Editor/DrawnPoseWiringVerify.cs deleted file mode 100644 index 69109a622..000000000 --- a/Assets/Scripts/Editor/DrawnPoseWiringVerify.cs +++ /dev/null @@ -1,232 +0,0 @@ -using System; -using System.Collections; -using System.IO; -using System.Linq; -using GameCult.Caching; -using UnityEditor; -using UnityEditor.SceneManagement; -using UnityEngine; -using float2 = CultMath.float2; -using float3 = CultMath.float3; - -// Batch proof that the presenters read the drawn pose through the clock: DrawnPoseTests pins the pose maths headlessly, -// and this is what pins that each presenter passes ActionGameManager.Clock.Lead into it. A zone with a sun and a planet on a moving rail -// is built and the pickup and mine prefabs ARPG.unity's ZoneRenderer names are bound to it as the renderer binds them; a loose Projectile is launched on the -// zone. The zone is stepped once, then the clock is set to leads 0, 0.008 and 0.015 s with no step, and each presenter's -// own Update places its transform. A body is drawn at its last step plus its step velocity times the lead, spelled here -// from the body's fields, so a presenter that reads lead 0 (or half the lead) sits on the step and fails. -// -// Reached: ItemPickup, MineInstance, Projectile.Draw. Not reached: ZoneRenderer.Update (Lower needs a ComputeBuffer, a -// GPU device) and the ActionGameManager markers (they need the ARPG scene running); a Lower split so its record fill is -// pure, or a run with a GPU and ARPG.unity in play mode, would reach them. -// -// Unity -batchmode -nographics -projectPath -executeMethod Aetheria.EditorTools.DrawnPoseWiringVerify.Run -logFile -// -// Do not pass -quit: Run enters play mode (a domain reload), the check runs there, and the Editor exits itself, 0 on -// success and 1 on any failure. -namespace Aetheria.EditorTools -{ - [InitializeOnLoad] - public static class DrawnPoseWiringVerify - { - private const string Tag = "[DrawnPoseWiringVerify]"; - private const string Flag = "DrawnPoseWiringVerify.running"; - private const string Wiring = "DrawnPoseWiringVerify.wiring"; - private const double Budget = 300; // real seconds - private const float RoundSpeed = 100f, Tolerance = 1e-3f; - private static IEnumerator _check; - private static double _started; - private static string _work; - - static DrawnPoseWiringVerify() - { - if (SessionState.GetBool(Flag, false)) EditorApplication.playModeStateChanged += OnPlayMode; - } - - public static void Run() - { - try - { - SessionState.SetString(Wiring, ReadWiring()); - SessionState.SetBool(Flag, true); - EditorApplication.EnterPlaymode(); - } - catch (Exception exception) - { - Debug.LogException(exception); - EditorApplication.Exit(1); - } - } - - private static void OnPlayMode(PlayModeStateChange change) - { - if (change != PlayModeStateChange.EnteredPlayMode) return; - _work = Path.Combine(Path.GetTempPath(), $"drawn-pose-wiring-{Guid.NewGuid():N}"); - Directory.CreateDirectory(_work); - _started = Time.realtimeSinceStartupAsDouble; - _check = Check(); - EditorApplication.update += Step; - } - - private static void Step() - { - try - { - if (Time.realtimeSinceStartupAsDouble - _started > Budget) throw new InvalidOperationException($"The check did not finish in {Budget} seconds."); - if (_check.MoveNext()) return; - Finish(0); - } - catch (Exception exception) - { - Debug.LogException(exception); - Finish(1); - } - } - - private static void Finish(int code) - { - EditorApplication.update -= Step; - SessionState.SetBool(Flag, false); - try { if (Directory.Exists(_work)) Directory.Delete(_work, true); } catch (Exception) { /* a temp directory */ } - EditorApplication.Exit(code); - } - - private static void Require(bool condition, string what) - { - if (!condition) throw new InvalidOperationException(what); - } - - private static IEnumerator Check() - { - var settings = AssetDatabase.LoadAssetAtPath("Assets/Resources/Settings.asset")?.GameplaySettings - ?? throw new InvalidOperationException("No Settings.asset."); - settings.FloaterLayerHeight = -1.5f; // nonzero, so a presenter that drops the floater layer fails - - var wired = SessionState.GetString(Wiring, "").Split('|').Select(entry => entry.Split('=')).ToDictionary(pair => pair[0], pair => pair[1]); - var pickupPrefab = AssetDatabase.LoadAssetAtPath(wired["SimpleCommodityPickup"])?.GetComponent(); - var minePrefab = AssetDatabase.LoadAssetAtPath(wired["MinePrefab"])?.GetComponent(); - Require(pickupPrefab != null, "ZoneRenderer.SimpleCommodityPickup is not an ItemPickup in ARPG.unity."); - Require(minePrefab != null, "ZoneRenderer.MinePrefab is not a MineInstance in ARPG.unity."); - - var oneCell = new Shape(1, 1); - oneCell[new CultMath.int2(0, 0)] = true; - var cache = AetheriaStores.Open(Path.Combine(_work, "wiring.cc"), Path.Combine(_work, "wiring-run.cc"), catalogWritable: true); - cache.Upsert(new VerseGrammar { Revision = 1 }); - cache.Upsert(new SimpleCommodityData { Name = "Wiring Ore", Shape = oneCell, MaxStack = 100 }); - cache.FlushAsync().Wait(); - var ledger = new ProvenanceLedger(); - var items = new ItemManager(1u, cache, ledger, settings, _ => { }); - - // A sun and a planet on a moving rail round it, both near the bodies below: the field under a floater changes with the - // drawn time, so a presenter that samples it at the step's time, drops it, or reads lead 0 for the height draws a different y. - var sunOrbit = cache.Upsert(new OrbitData { FixedPosition = new float2(-55, -.5f) }).Key; - var planetOrbit = cache.Upsert(new OrbitData { Parent = new CultRecordRef(sunOrbit), Distance = 40f, Phase = 0f }).Key; - var pack = new ZonePack { Radius = 5000f, Mass = 10000f }; - pack.Orbits.Add(new CultRecordRef(sunOrbit)); - pack.Orbits.Add(new CultRecordRef(planetOrbit)); - pack.Planets.Add(new CultRecordRef(cache.Upsert(new PlanetData { Name = "Wiring Sun", Orbit = new CultRecordRef(sunOrbit), Mass = 400f }).Key)); - pack.Planets.Add(new CultRecordRef(cache.Upsert(new PlanetData { Name = "Wiring Planet", Orbit = new CultRecordRef(planetOrbit), Mass = 400f }).Key)); - var curves = new PlanetSettings - { - BodyRadius = new ExponentialCurve(), - WellStrength = new ExponentialCurve { Multiplier = 1f, Exponent = 1f }, - RocheLimit = new ExponentialCurve { Constant = 10f } - }; - var zone = new Zone(items, curves, pack, null, null); - - var rootObject = new GameObject("Wiring Zone Root"); - - var ore = new SimpleCommodity { Data = items.ItemData.RefOf(items.ItemData.GetByName("Wiring Ore")), Quantity = 7 }; - var floating = zone.Release(ore, new float2(-17, 4), new float2(10, 0)); - var mine = new Mine - { - Body = new KinematicBody { Position = new float2(-20, 8), Velocity = new float2(0, 14) }, - ArmingDelay = 1e6f, FuseDelay = 1f, Lifetime = 1e6f, BlastRadius = 1f - }; - zone.Lay(mine); - - // Bound the way ZoneRenderer.LoadFloatingItem and LoadMine bind them: the prefab ARPG.unity names, Bind(zone, body, settings). - // (A ZoneRenderer would load this zone's sun and planet too, and that needs the planet prefab, the map and a GPU.) - var pickup = UnityEngine.Object.Instantiate(pickupPrefab, rootObject.transform); - pickup.Bind(zone, floating, settings); - var mineInstance = UnityEngine.Object.Instantiate(minePrefab, rootObject.transform); - mineInstance.Bind(zone, mine, settings); - - // A round on its frozen line, no target and no outcome known: drawn at FireOrigin + direction * speed * (T - FireTime). - var shot = new PendingShot - { - ShotId = 1, FireOrigin = new float3(0, 0, 0), FireTime = 0f, TravelDirection = new float2(1, 0), Speed = RoundSpeed, - MaxRange = 1e6f, FireRange = 1e6f, CommitTime = 1e5f, ArrivalTime = 2e5f - }; - var projectile = new GameObject("Wiring Round").AddComponent(); - projectile.Launch(null, zone, shot, new Vector3(0, 0, 0)); - yield return null; - - zone.Update(.5f); - - - var pickupVelocity = floating.Body.TotalVelocity; - var mineVelocity = mine.Body.TotalVelocity; - Require(Mathf.Abs(pickupVelocity.x) > 1f && Mathf.Abs(mineVelocity.y) > 1f, "The fixture's bodies stopped: a lead would not move them."); - - // The field under each floater really is a function of the drawn time here, by more than the tolerance at the largest lead. - const float LargestLead = .015f; - foreach (var at in new[] { floating.Body.Position + pickupVelocity * LargestLead, mine.Body.Position + mineVelocity * LargestLead }) - Require(Mathf.Abs(DrawAhead.Height(zone, at, LargestLead) - zone.GetHeight(at, zone.ExactTime)) > 5 * Tolerance, - $"The fixture's field is flat under a floater: height {DrawAhead.Height(zone, at, LargestLead)} at the drawn time, {zone.GetHeight(at, zone.ExactTime)} at the step, planet at {zone.OrbitPositionAt(planetOrbit, zone.ExactTime)}, floater at {at}."); - - Vector2 baseline = default; - foreach (var leadSeconds in new[] { 0f, .008f, .015f }) - { - ActionGameManager.Clock.Reset(); - if (leadSeconds > 0) ActionGameManager.Clock.Advance(leadSeconds, _ => throw new InvalidOperationException("a step ran")); - var lead = ActionGameManager.Clock.Lead; - Require(Mathf.Abs(lead - leadSeconds) < 1e-6f, $"The clock's lead is {lead}, not {leadSeconds}."); - yield return null; - - var seen = pickup.transform.position; - var want = floating.Body.Position + pickupVelocity * lead; - Require(Mathf.Abs(seen.x - want.x) < Tolerance && Mathf.Abs(seen.z - want.y) < Tolerance, - $"ItemPickup at lead {lead}: drawn x/z {seen.x},{seen.z}, the step plus velocity times lead {want.x},{want.y}."); - - Require(Mathf.Abs(seen.y - DrawAhead.FloaterHeight(zone, settings, new float2(want.x, want.y), lead)) < Tolerance, - $"ItemPickup y {seen.y} is not on the floater layer."); - - seen = mineInstance.transform.position; - want = mine.Body.Position + mineVelocity * lead; - Require(Mathf.Abs(seen.x - want.x) < Tolerance && Mathf.Abs(seen.z - want.y) < Tolerance, - $"MineInstance at lead {lead}: drawn x/z {seen.x},{seen.z}, the step plus velocity times lead {want.x},{want.y}."); - Require(Mathf.Abs(seen.y - DrawAhead.FloaterHeight(zone, settings, new float2(want.x, want.y), lead)) < Tolerance, - $"MineInstance y {seen.y} is not on the floater layer."); - - // The round's line is a function of the drawn time: it moves RoundSpeed * lead along its direction between leads. - seen = projectile.transform.position; - if (leadSeconds == 0f) baseline = new Vector2(seen.x, seen.z); - var moved = new Vector2(seen.x, seen.z) - baseline; - Require(Mathf.Abs(moved.x - RoundSpeed * lead) < Tolerance && Mathf.Abs(moved.y) < Tolerance, - $"Projectile at lead {lead}: drawn {moved.x},{moved.y} past its lead-0 pose, expected {RoundSpeed * lead},0."); - } - ActionGameManager.Clock.Reset(); - Debug.Log($"{Tag} ok: ItemPickup, MineInstance and Projectile draw at the clock's lead (0, 0.008, 0.015 s)"); - } - - // What ARPG.unity's ZoneRenderer names in the pickup and mine fields, read from the saved scene before the play session - // (a scene cannot be opened inside one) and carried across the domain reload as asset paths. - private static string ReadWiring() - { - var scene = EditorSceneManager.OpenScene("Assets/Scenes/ARPG.unity", OpenSceneMode.Additive); - try - { - var found = UnityEngine.Object.FindObjectsByType(FindObjectsInactive.Include, FindObjectsSortMode.None) - .Where(r => r.gameObject.scene == scene).ToArray(); - Require(found.Length == 1, $"ARPG.unity has {found.Length} ZoneRenderers."); - var wired = found[0]; - return string.Join("|", new (string, UnityEngine.Object)[] - { - ("SimpleCommodityPickup", wired.SimpleCommodityPickup), ("MinePrefab", wired.MinePrefab) - }.Select(f => f.Item1 + "=" + (f.Item2 == null ? "" : AssetDatabase.GetAssetPath(f.Item2)))); - } - finally { EditorSceneManager.CloseScene(scene, true); } - } - } -} diff --git a/Assets/Scripts/Editor/DrawnPoseWiringVerify.cs.meta b/Assets/Scripts/Editor/DrawnPoseWiringVerify.cs.meta deleted file mode 100644 index 534bebdb6..000000000 --- a/Assets/Scripts/Editor/DrawnPoseWiringVerify.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: c2270cf68a4af384eb715c8b5a55f5e8 \ No newline at end of file diff --git a/Assets/Scripts/Editor/EmojiCheck.cs b/Assets/Scripts/Editor/EmojiCheck.cs deleted file mode 100644 index 1f464fd9f..000000000 --- a/Assets/Scripts/Editor/EmojiCheck.cs +++ /dev/null @@ -1,222 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using TMPro; -using UnityEditor; -using UnityEngine; - -// Every single-code-point emoji of the pinned Unicode Emoji version that Twemoji draws, and the Pirates product -// names read from the shipped catalog, render through an ordinary TMP text on the game's body font with no -// missing code point, no blank glyph, ink in the emoji atlas, and each glyph served by the emoji asset or by the -// body font itself, never by a third font. TMP Settings must route emoji by two named routes (operator ruling -// emoji-fallback-route): the global fallback names Emoji.asset and the emoji fallback list is exactly Emoji.asset, -// so dropping either fails. -// Run as -executeMethod EmojiCheck.Run (exit 1 on failure in batchmode, as EngineAssetCheck). Corpus: -// tools/emoji/emoji-singles.txt (from emoji-test.txt); the emoji Twemoji lacks are listed in -// tools/emoji/emoji-unsupported.txt and reported, not rendered; -emojiLimit N spreads N entries evenly for a spike. -// Every fully-qualified multi-code-point sequence (tools/emoji/emoji-sequences.txt: ZWJ, skin tone, flag, keycap, -// tag) must also render as exactly one visible character, which needs `liga` on the rendering component: every -// TMP text in every prefab and scene must have it, and so must one added at runtime (as ActionGameManager's -// FACE AIM mark is), or a family or flag would show as its pieces. -public static class EmojiCheck -{ - const string BodyFontPath = "Assets/Fonts/Ubuntu/Ubuntu-L Small SDF.asset"; - const string PiratesFaction = "Pirates"; - const int Chunk = 64; - - [MenuItem("Aetheria/Text/Check Emoji Rendering")] - public static void Run() - { - var failures = new List(); - var summary = RunCheck(failures); - foreach (var failure in failures.Take(20)) Debug.LogError(failure); - Debug.Log($"EmojiCheck: {summary}; {failures.Count} failure(s)."); - if (Application.isBatchMode) EditorApplication.Exit(failures.Count == 0 ? 0 : 1); - } - - // Public so a scratch driver can mutate TMP Settings in memory and watch this fail; adds to failures. - public static string RunCheck(List failures) - { - var emoji = AssetDatabase.LoadAssetAtPath(EmojiFont.AssetPath); - var body = AssetDatabase.LoadAssetAtPath(BodyFontPath); - if (emoji == null || body == null) - { - failures.Add("EmojiCheck: Emoji.asset or the body font is missing; run EmojiFont.Build first."); - return "nothing checked"; - } - - // Two routes (operator ruling emoji-fallback-route): the emoji fallback list is exactly Emoji.asset, and the global list below names it. - if (TMP_Settings.emojiFallbackTextAssets == null || TMP_Settings.emojiFallbackTextAssets.Count != 1 || TMP_Settings.emojiFallbackTextAssets[0] != emoji) - failures.Add("TMP Settings' emoji fallback list is not exactly Emoji.asset: FE0F-followed bases the body font draws will not reach Twemoji."); - if (TMP_Settings.fallbackFontAssets == null || !TMP_Settings.fallbackFontAssets.Contains(emoji)) - failures.Add("TMP Settings' global fallback list does not name Emoji.asset: the route for every single code point is gone."); - - var unsupported = new HashSet(LoadCodePoints("emoji-unsupported.txt")); - var corpus = LoadSingles().Where(cp => !unsupported.Contains(cp)).ToList(); - var sequences = LoadSequences(); - var missing = new HashSet(); - TMP_Text.MissingCharacterEventCallback onMissing = (unicode, index, source, asset, component) => missing.Add(unicode); - TMP_Text.OnMissingCharacter += onMissing; - - var canvas = new GameObject("EmojiCheck", typeof(Canvas)); - var text = new GameObject("Text", typeof(RectTransform)).AddComponent(); - text.transform.SetParent(canvas.transform, false); - text.font = body; - text.textWrappingMode = TextWrappingModes.NoWrap; - text.rectTransform.sizeDelta = new Vector2(100000, 100000); - - int viaEmoji = 0, viaBody = 0, blank = 0, pirateNames = 0, notOne = 0, runtimeLiga = 0; - var strays = new HashSet(); - try - { - void Render(string content, string label) - { - text.text = content; - text.ForceMeshUpdate(); - for (var i = 0; i < text.textInfo.characterCount; i++) - { - var info = text.textInfo.characterInfo[i]; - if (info.character == ' ' || info.elementType != TMP_TextElementType.Character) continue; - if (info.fontAsset == emoji) viaEmoji++; - else if (info.fontAsset == body) viaBody++; - else if (strays.Add($"{info.fontAsset.name}:{(int)info.character:X}")) - failures.Add($"U+{(int)info.character:X4} in {label} was served by {info.fontAsset.name}, not Emoji.asset or the body font"); - if (info.fontAsset == emoji && info.textElement.glyph.glyphRect.width <= 0) - { - blank++; - failures.Add($"blank glyph U+{(int)info.character:X4} in {label}"); - } - } - } - - for (var i = 0; i < corpus.Count; i += Chunk) - { - var slice = corpus.Skip(i).Take(Chunk).ToList(); - Render(string.Join(" ", slice.Select(char.ConvertFromUtf32)), $"chunk {i}"); - } - - // A text created at runtime inherits liga from TMP Settings, with no wiring of its own. - var runtime = new GameObject("Runtime", typeof(RectTransform)); - runtime.transform.SetParent(canvas.transform, false); - runtimeLiga = runtime.AddComponent().fontFeatures - .Contains(UnityEngine.TextCore.OTL_FeatureTag.liga) ? 1 : 0; - if (runtimeLiga == 0) failures.Add("a TextMeshProUGUI added at runtime does not have liga: TMP Settings' features are not inherited"); - - // Sequences: space-separated groups, each of which must end as one visible character. - for (var i = 0; i < sequences.Count; i += Chunk) - { - var slice = sequences.Skip(i).Take(Chunk).ToList(); - text.text = string.Join(" ", slice.Select(ToText)); - text.ForceMeshUpdate(); - var visible = new List { 0 }; - var shown = new List { "" }; - for (var c = 0; c < text.textInfo.characterCount; c++) - { - var info = text.textInfo.characterInfo[c]; - if (info.character == ' ') { visible.Add(0); shown.Add(""); } - else if (info.isVisible) - { - visible[visible.Count - 1]++; - shown[shown.Count - 1] += $" U+{(int)info.character:X}:{info.fontAsset.name}"; - } - } - if (visible.Count != slice.Count) failures.Add($"sequence chunk {i}: {visible.Count} groups rendered for {slice.Count} sequences"); - for (var g = 0; g < Math.Min(visible.Count, slice.Count); g++) - if (visible[g] != 1) - { - notOne++; - failures.Add($"sequence {slice[g]} rendered {visible[g]} visible characters, not one:{shown[g]}"); - } - } - - // The Pirates names as the shipped catalog stores them, through the game's own catalog reader. - var catalogPath = Path.Combine(Directory.GetParent(Application.dataPath).FullName, "GameData", "Aetheria.cc"); - using (var catalog = AetheriaStores.Open(catalogPath)) - { - var pirates = catalog.GetAll().SingleOrDefault(faction => faction.Name == PiratesFaction); - if (pirates == null) failures.Add($"the catalog has no {PiratesFaction} faction"); - else - { - var key = catalog.RefOf(pirates); - foreach (var product in catalog.GetAll().Where(product => product.Manufacturer.Equals(key))) - { - pirateNames++; - Render(product.Name, $"Pirates product name \"{product.Name}\""); - } - if (pirateNames == 0) failures.Add($"the catalog has no {PiratesFaction} products"); - } - } - } - finally - { - TMP_Text.OnMissingCharacter -= onMissing; - UnityEngine.Object.DestroyImmediate(canvas); - } - - foreach (var cp in missing.OrderBy(c => c)) failures.Add($"missing code point U+{cp:X4}"); - - // Every serialized TMP text has liga (an instance inherits it from its prefab, so this reads the effective value). - int texts = 0, withoutLiga = 0; - EmojiFont.VisitSerializedTexts(component => - { - texts++; - if (!component.fontFeatures.Contains(UnityEngine.TextCore.OTL_FeatureTag.liga)) - { - withoutLiga++; - failures.Add($"TMP text {component.name} has no liga: {GetPath(component)}"); - } - return false; - }); - - // TMP over-allocates atlasTextures by doubling its capacity when a page is added, so entries past - // atlasTextureCount are null by design (3 pages in a 4-slot array). Only the used pages count. - long ink = 0, colour = 0; - for (var i = 0; i < emoji.atlasTextureCount; i++) - { - var page = emoji.atlasTextures[i]; - if (page == null) { failures.Add($"emoji atlas page {i} of {emoji.atlasTextureCount} is null"); continue; } - var pixels = page.GetPixels32(); - ink += pixels.LongCount(p => p.a != 0); - colour += pixels.LongCount(p => p.a != 0 && (p.r != p.g || p.g != p.b)); - } - if (ink == 0) failures.Add("the emoji atlas holds no ink after rendering"); - else if (colour == 0) failures.Add("the emoji atlas holds no coloured pixel: the glyphs rendered monochrome"); - - var pages = emoji.atlasTextureCount; - // Dynamic atlas content is cache: drop it so this check leaves the asset as Build wrote it. - emoji.ClearFontAssetData(true); - if (unsupported.Count > 0) - Debug.LogWarning($"EmojiCheck: Twemoji lacks {unsupported.Count} single-code-point emoji of the Emoji version: " + - string.Join(" ", unsupported.OrderBy(c => c).Select(c => $"U+{c:X4}"))); - return $"{sequences.Count} sequences ({notOne} not one visible character), {texts} serialized TMP texts ({withoutLiga} without liga), runtime text liga {runtimeLiga}; " + - $"checked {corpus.Count} single code points ({unsupported.Count} not drawn by Twemoji, listed in the warning) + {pirateNames} Pirates product names, " + - $"{missing.Count} missing, {viaEmoji} glyphs via the emoji asset, {viaBody} via the body font, {strays.Count} via other fonts, {blank} blank, " + - $"{ink} atlas ink pixels of which {colour} coloured, {pages} atlas pages"; - } - - static string GetPath(Component component) => - component.gameObject.scene.IsValid() ? component.gameObject.scene.path : AssetDatabase.GetAssetPath(component); - - static string ToText(string sequence) => string.Concat(sequence.Split(' ').Select(cp => char.ConvertFromUtf32(Convert.ToInt32(cp, 16)))); - - static List LoadSequences() => - File.ReadAllLines(Path.Combine(Directory.GetParent(Application.dataPath).FullName, "tools", "emoji", "emoji-sequences.txt")) - .Where(l => l.Length > 0).ToList(); - - static List LoadSingles() - { - var all = LoadCodePoints("emoji-singles.txt"); - var args = Environment.GetCommandLineArgs(); - var at = Array.IndexOf(args, "-emojiLimit"); - if (at < 0 || at + 1 >= args.Length) return all; - var limit = int.Parse(args[at + 1]); - return Enumerable.Range(0, limit).Select(i => all[i * all.Count / limit]).ToList(); - } - - static List LoadCodePoints(string file) - { - var path = Path.Combine(Directory.GetParent(Application.dataPath).FullName, "tools", "emoji", file); - return File.ReadAllLines(path).Where(l => l.Length > 0).Select(l => Convert.ToInt32(l, 16)).ToList(); - } -} diff --git a/Assets/Scripts/Editor/EmojiCheck.cs.meta b/Assets/Scripts/Editor/EmojiCheck.cs.meta deleted file mode 100644 index 945280e85..000000000 --- a/Assets/Scripts/Editor/EmojiCheck.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: c6f940add256a754daac8460fc79480d \ No newline at end of file diff --git a/Assets/Scripts/Editor/EmojiFont.cs b/Assets/Scripts/Editor/EmojiFont.cs deleted file mode 100644 index 9d50b95c1..000000000 --- a/Assets/Scripts/Editor/EmojiFont.cs +++ /dev/null @@ -1,167 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using TMPro; -using UnityEditor; -using UnityEditor.SceneManagement; -using UnityEngine; -using UnityEngine.TextCore; -using UnityEngine.TextCore.LowLevel; - -// The one writer of the emoji font asset and of TMP Settings' emoji routing. The font file is the -// output of tools/emoji/fetch_emoji_font.py; the asset is a dynamic COLOR font asset whose atlas pages -// are cache, filled on first use at runtime and cleared here. Every TMP text reaches emoji through TMP -// Settings alone (no component names an emoji font), by two routes that both name only Emoji.asset (operator ruling -// emoji-fallback-route): the global fallback serves every code point, including the 200 text-presentation emoji the -// emoji list alone leaves unresolved; the emoji fallback list is what TMP tries first when FE0F follows, so a keycap -// or FE0F/ZWJ sequence whose first code point the body font also draws reaches Twemoji, whose ligatures collapse it. -// Sequences (ZWJ, skin tone, flag, keycap) resolve only through the emoji font's GSUB ligatures, and TMP applies -// them per component, gated by that component's font features: EnableLigatures writes `liga` into every -// serialized TMP text and into TMP Settings (so a text created later inherits it); there is no global switch. -public static class EmojiFont -{ - public const string FontPath = "Assets/Fonts/Emoji/Twemoji.ttf"; - public const string AssetPath = "Assets/Fonts/Emoji/Emoji.asset"; - - // Colour outlines (COLRv0) are rasterised at one size; 109 is the strike size a CBDT set needs. - const int SamplingPointSize = 64; - const int AtlasPadding = 4; - const int AtlasSize = 2048; - - // Menu entry for interactive use; -executeMethod EmojiFont.Build for batchmode, exit 1 on failure. - [MenuItem("Aetheria/Text/Build Emoji Font")] - public static void Build() - { - var ok = TryBuild(out var message); - if (ok) Debug.Log(message); else Debug.LogError(message); - if (Application.isBatchMode) EditorApplication.Exit(ok ? 0 : 1); - } - - static bool TryBuild(out string message) - { - var font = AssetDatabase.LoadAssetAtPath(FontPath); - if (font == null) - { - message = $"EmojiFont: {FontPath} is missing; run tools/emoji/fetch_emoji_font.py."; - return false; - } - - // An existing asset keeps its GUID, so a second Build changes nothing the settings point at. - var asset = AssetDatabase.LoadAssetAtPath(AssetPath); - if (asset == null) - { - asset = TMP_FontAsset.CreateFontAsset(font, SamplingPointSize, AtlasPadding, GlyphRenderMode.COLOR, - AtlasSize, AtlasSize, AtlasPopulationMode.Dynamic, enableMultiAtlasSupport: true); - if (asset == null) - { - message = $"EmojiFont: TMP could not create a font asset from {FontPath}."; - return false; - } - asset.name = "Emoji"; - AssetDatabase.CreateAsset(asset, AssetPath); - foreach (var page in asset.atlasTextures) - { - page.name = "Emoji Atlas"; - AssetDatabase.AddObjectToAsset(page, asset); - } - asset.material.name = "Emoji Atlas Material"; - AssetDatabase.AddObjectToAsset(asset.material, asset); - } - - // The atlas pages are cache: Build leaves them empty, the same state EmojiCheck restores. - asset.ClearFontAssetData(true); - - // Two routes: the global fallback serves every code point (text-presentation emoji too, U+263A without FE0F); - // the emoji list is tried first when FE0F follows. - TMP_Settings.emojiFallbackTextAssets = new List { asset }; - TMP_Settings.fallbackFontAssets = new List { asset }; - TMP_Settings.defaultSpriteAsset = null; - - EditorUtility.SetDirty(asset); - EditorUtility.SetDirty(TMP_Settings.instance); - AssetDatabase.SaveAssets(); - message = "EmojiFont: built " + AssetPath + " and named it in both of TMP Settings' emoji routes (the global fallback and the emoji fallback list)."; - return true; - } - - // Menu entry for interactive use; -executeMethod EmojiFont.EnableLigatures for batchmode, exit 1 on failure. - // Idempotent: a second run changes nothing and saves nothing. - [MenuItem("Aetheria/Text/Enable Ligatures")] - public static void EnableLigatures() - { - try - { - var settings = TMP_Settings.fontFeatures; - var settingsChanged = Enable(settings); - if (settingsChanged) EditorUtility.SetDirty(TMP_Settings.instance); - var (files, components) = VisitSerializedTexts(text => - { - var features = text.fontFeatures.ToList(); - if (!Enable(features, new SerializedObject(text).FindProperty("m_enableKerning").boolValue)) return false; - text.fontFeatures = features; - EditorUtility.SetDirty(text); - return true; - }); - AssetDatabase.SaveAssets(); - Debug.Log($"EmojiFont: liga added to {components} TMP component(s) in {files} file(s)" + - (settingsChanged ? " and to TMP Settings." : "; TMP Settings already had it.")); - if (Application.isBatchMode) EditorApplication.Exit(0); - } - catch (Exception e) - { - Debug.LogError("EmojiFont.EnableLigatures failed: " + e); - if (Application.isBatchMode) EditorApplication.Exit(1); - } - } - - // A legacy list ([0], no feature serialized) is first converted to [kern] when kerning is on, as TMP does on load. - static bool Enable(List features, bool kerning = true) - { - if (features.Contains(OTL_FeatureTag.liga)) return false; - features.RemoveAll(tag => tag == 0); - if (kerning && !features.Contains(OTL_FeatureTag.kern)) features.Add(OTL_FeatureTag.kern); - features.Add(OTL_FeatureTag.liga); - return true; - } - - // The one walk over every TMP text a serialized asset owns: each prefab and each scene under Assets/, skipping a - // component that belongs to a prefab instance unless that instance overrides its font features (otherwise it - // inherits from its source prefab, which is walked itself). `visit` returns whether it changed the component; - // an asset that changed is saved. Returns the files and components changed. - public static (int files, int components) VisitSerializedTexts(Func visit) - { - int files = 0, components = 0; - bool Owns(TMP_Text text) => - !PrefabUtility.IsPartOfPrefabInstance(text) || - new SerializedObject(text).FindProperty("m_ActiveFontFeatures")?.prefabOverride == true; - int Visit(IEnumerable texts) => texts.Where(Owns).Count(visit); - - foreach (var path in AssetDatabase.FindAssets("t:Prefab", new[] { "Assets" }).Select(AssetDatabase.GUIDToAssetPath)) - { - var root = PrefabUtility.LoadPrefabContents(path); - try - { - var changed = Visit(root.GetComponentsInChildren(true)); - if (changed == 0) continue; - PrefabUtility.SaveAsPrefabAsset(root, path); - files++; - components += changed; - } - finally { PrefabUtility.UnloadPrefabContents(root); } - } - foreach (var path in AssetDatabase.FindAssets("t:Scene", new[] { "Assets" }).Select(AssetDatabase.GUIDToAssetPath)) - { - var scene = EditorSceneManager.OpenScene(path, OpenSceneMode.Additive); - try - { - var changed = Visit(scene.GetRootGameObjects().SelectMany(root => root.GetComponentsInChildren(true))); - if (changed == 0) continue; - EditorSceneManager.SaveScene(scene); - files++; - components += changed; - } - finally { EditorSceneManager.CloseScene(scene, true); } - } - return (files, components); - } -} diff --git a/Assets/Scripts/Editor/EmojiFont.cs.meta b/Assets/Scripts/Editor/EmojiFont.cs.meta deleted file mode 100644 index 5888665c0..000000000 --- a/Assets/Scripts/Editor/EmojiFont.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: bd3a902defe23f14fbe821ca9fb26a08 \ No newline at end of file diff --git a/Assets/Scripts/Editor/FloatingItemsDrawnSmoke.cs b/Assets/Scripts/Editor/FloatingItemsDrawnSmoke.cs deleted file mode 100644 index 742e8aa9d..000000000 --- a/Assets/Scripts/Editor/FloatingItemsDrawnSmoke.cs +++ /dev/null @@ -1,262 +0,0 @@ -using System; -using System.Collections; -using System.IO; -using System.Linq; -using GameCult.Caching; -using UnityEditor; -using UnityEditor.SceneManagement; -using UnityEngine; -using float2 = CultMath.float2; - -// Batch proof that ZoneRenderer draws Zone.FloatingItems and nothing else, in a play session with no scene of its own: -// the pickup prefabs are the ones ARPG.unity's ZoneRenderer names (so the wiring is read here too), a zone is loaded -// into a fresh ZoneRenderer, and the zone's own Release, step, expiry and TryPickUp are what move and remove the -// pickups. Zone.Release adds exactly one ItemPickup, placed at the body's position; stepping the zone moves it with the -// body; expiry and TryPickUp each destroy it; an item already in the zone when the renderer loads it is drawn too. -// -// Unity -batchmode -nographics -projectPath -executeMethod FloatingItemsDrawnSmoke.Run -logFile -// -// Do not pass -quit: Run enters play mode (a domain reload), the check runs there, and the Editor exits itself, 0 on -// success and 1 on any failure. Destroy only takes effect in a play session, which is why this is not an edit-mode check. -[InitializeOnLoad] -public static class FloatingItemsDrawnSmoke -{ - private const string Flag = "FloatingItemsDrawnSmoke.running"; - private const string Wiring = "FloatingItemsDrawnSmoke.wiring"; - private static IEnumerator _check; - private const double Budget = 300; // real seconds: batch frames can be far shorter than a game second - private static double _started; - private static string _work; - - static FloatingItemsDrawnSmoke() - { - if (SessionState.GetBool(Flag, false)) EditorApplication.playModeStateChanged += OnPlayMode; - } - - public static void Run() - { - try - { - SessionState.SetString(Wiring, ReadWiring()); - SessionState.SetBool(Flag, true); - EditorApplication.EnterPlaymode(); - } - catch (Exception exception) - { - Debug.LogException(exception); - EditorApplication.Exit(1); - } - } - - private static void OnPlayMode(PlayModeStateChange change) - { - if (change != PlayModeStateChange.EnteredPlayMode) return; - _work = Path.Combine(Path.GetTempPath(), $"floating-items-smoke-{Guid.NewGuid():N}"); - Directory.CreateDirectory(_work); - _started = Time.realtimeSinceStartupAsDouble; - _check = Check(); - EditorApplication.update += Step; - } - - private static void Step() - { - try - { - if (Time.realtimeSinceStartupAsDouble - _started > Budget) throw new InvalidOperationException($"The check did not finish in {Budget} seconds."); - if (_check.MoveNext()) return; - Finish(0); - } - catch (Exception exception) - { - Debug.LogException(exception); - Finish(1); - } - } - - private static void Finish(int code) - { - EditorApplication.update -= Step; - SessionState.SetBool(Flag, false); - try { if (Directory.Exists(_work)) Directory.Delete(_work, true); } catch (Exception) { /* a temp directory */ } - EditorApplication.Exit(code); - } - - private static void Require(bool condition, string what) - { - if (!condition) throw new InvalidOperationException(what); - } - - private static IEnumerator Check() - { - var settings = AssetDatabase.LoadAssetAtPath("Assets/Resources/Settings.asset")?.GameplaySettings - ?? throw new InvalidOperationException("No Settings.asset."); - // A floater rides its own layer: a nonzero one (never saved back to the asset), so a presenter that drops it fails. - settings.FloaterLayerHeight = -1.5f; - - // The wiring: the scene's ZoneRenderer names an ItemPickup prefab in each of the four fields, and none of those - // prefabs keeps a script that no longer exists. - var wired = SessionState.GetString(Wiring, "").Split('|').Select(entry => entry.Split('=')).Select(pair => - (Field: pair[0], Pickup: pair[1] == "" ? null : AssetDatabase.LoadAssetAtPath(pair[1])?.GetComponent())).ToArray(); - Require(wired.Length == 4, "The wiring was not carried into the play session."); - foreach (var (name, pickup) in wired) - { - Require(pickup != null, $"ZoneRenderer.{name} is not an ItemPickup in ARPG.unity."); - Require(pickup.ScanLabel != null && pickup.ScanLabelContainer != null, $"{name}'s prefab has no scan label."); - Require(!pickup.GetComponentsInChildren(true).Any(c => c == null), $"{name}'s prefab has a missing script."); - } - - var shape = new Shape(5, 5); - foreach (var cell in shape.AllCoordinates) shape[cell] = true; - var cargoShape = new Shape(4, 4); - foreach (var cell in cargoShape.AllCoordinates) cargoShape[cell] = true; - var oneCell = new Shape(1, 1); - oneCell[new CultMath.int2(0, 0)] = true; - var cache = AetheriaStores.Open(Path.Combine(_work, "smoke.cc"), catalogWritable: true); - cache.Upsert(new VerseGrammar { Revision = 1 }); - cache.Upsert(new HullData { Name = "Smoke Hub", HullType = HullType.Station, Shape = shape, Durability = 1000, Mass = 1000 }); - cache.Upsert(new CargoBayData { Name = "Smoke Crate", Shape = new Shape(), InteriorShape = cargoShape, Durability = 4 }); - cache.Upsert(new GearData - { - Name = "Smoke Spare", Hardpoint = HardpointType.Tool, Shape = oneCell, Durability = 1, - MinimumTemperature = -1000, MaximumTemperature = 1000, OptimalTemperature = 0, PlateauWidth = 2000 - }); - cache.Upsert(new SimpleCommodityData { Name = "Smoke Ore", Shape = oneCell, MaxStack = 100 }); - cache.FlushAsync().Wait(); - var ledger = new ProvenanceLedger(); - for (var i = 1; i <= 8; i++) ledger.Lots[i] = new Lot { Origin = new Attributed(), Quality = 1 }; - var items = new ItemManager(1u, cache, ledger, settings, _ => { }); - var zone = new Zone(items, new PlanetSettings(), new ZonePack(), null, null); - EquippableItem Make(string name, int lot) => new EquippableItem - { - Data = items.ItemData.RefOf(items.ItemData.GetByName(name)), Durability = 1, Lot = lot - }; - - // A station with a crate takes the picked-up stack. It is not admitted: the zone holds no entity for the renderer to draw. - var hubRef = items.ItemData.RefOf(items.ItemData.GetByName("Smoke Hub")); - var taker = new OrbitalEntity(items, zone, new EquippableItem { Data = hubRef, Durability = 1000, Lot = 1 }, default, new EntitySettings()); - Require(taker.TryEquip(Make("Smoke Crate", 2), new CultMath.int2(1, 1)), "The smoke station took no crate."); - - // An item already in the zone when the renderer loads it: drawn from the load, not only from the add. - var early = zone.Release(Make("Smoke Spare", 3), new float2(5, 6), float2.zero); - - // The renderer's side. Inactive while it is configured, so it runs no Awake or Start of the scene's own. - var rootObject = new GameObject("Smoke Zone Root"); - var rendererObject = new GameObject("Smoke Zone Renderer"); - rendererObject.SetActive(false); - var renderer = rendererObject.AddComponent(); - renderer.ZoneRoot = rootObject.transform; - foreach (var (name, pickup) in wired) - typeof(ZoneRenderer).GetField(name).SetValue(renderer, pickup); - renderer.ItemManager = items; - renderer.SectorBrushes = new GameObject("Smoke Brushes").transform; - renderer.AmbientLight = Aetheria.EditorTools.AmbientEdgeVerify.NewAmbientLight(); - renderer.SlimeGravityCamera = new GameObject("Smoke Gravity Camera").AddComponent(); - var slimeObject = new GameObject("Smoke Slime"); - slimeObject.SetActive(false); // the real Slime needs its compute shader; LoadZone only sets its radius - renderer.SlimeRenderer = slimeObject.AddComponent(); - renderer.LoadZone(zone); - yield return null; - - ItemPickup[] Pickups() => rootObject.GetComponentsInChildren(true).Where(p => p != null).ToArray(); - void At(ItemPickup pickup, FloatingItem floating, string what) - { - var lead = ActionGameManager.Clock.Lead; - var at = DrawAhead.Position(floating.Body, lead); - var want = new Vector3(at.x, DrawAhead.FloaterHeight(zone, settings, at, lead), at.y); - Require(Vector3.Distance(pickup.transform.position, want) < 1e-3f, - $"{what}: the pickup is at {pickup.transform.position}, the body at {want}."); - } - - Require(Pickups().Length == 1, $"load: {Pickups().Length} pickups for one existing floating item."); - At(Pickups()[0], early, "load"); - - // Release adds exactly one pickup, at the body's position, bound to its item. - var ore = new SimpleCommodity { Data = items.ItemData.RefOf(items.ItemData.GetByName("Smoke Ore")), Quantity = 7 }; - var released = zone.Release(ore, new float2(3, 4), new float2(10, 0)); - yield return null; - Require(Pickups().Length == 2, $"release: {Pickups().Length} pickups for two floating items."); - var drawn = Pickups().Single(p => p.Item == ore); - At(drawn, released, "release"); - - // Stepping the zone moves the sim body; the pickup follows it on its next update, with nothing of its own. - var before = drawn.transform.position; - zone.Update(.5f); - yield return null; - Require(released.Body.Position.x > 3.5f, "the sim body did not drift."); - At(drawn, released, "step"); - Require(drawn.transform.position != before, "the pickup did not move with the body."); - - // A held item keeps its label lit, so a pull is read as it happens. The label is let go dark first (nothing views - // it), then the zone holds the item through its own TryHold and the label must come up. - var earlyPickup = Pickups().Single(p => p.Item == early.Item); - earlyPickup.LabelPersistDuration = 1; - earlyPickup.LabelFadeDuration = .2f; - // Game time, not frames: batch frames can be far shorter than a game second, so a frame count can run out before the fade. - var labelUntil = Time.time + earlyPickup.LabelPersistDuration + earlyPickup.LabelFadeDuration + 1f; - while (Time.time < labelUntil && earlyPickup.ScanLabel.color.a > .05f) yield return null; - Require(earlyPickup.ScanLabel.color.a <= .05f, "label: an unviewed, unheld label did not go dark."); - Require(zone.TryHold(taker, early.Id), "label: the zone refused to hold the item."); - labelUntil = Time.time + earlyPickup.LabelPersistDuration + earlyPickup.LabelFadeDuration + 1f; - while (Time.time < labelUntil && earlyPickup.ScanLabel.color.a < .95f) yield return null; - Require(earlyPickup.ScanLabel.color.a >= .95f, "label: a held item's label is not lit."); - - // The test scene's stand-in sim and tendril ride the zone's own held-pose curve: its pose at each point of a grab - // is where the zone puts a held item at the same progress. - var (extend, envelop, pull) = (1.5f, .75f, 1.5f); - var holderAt = new CultMath.float3(taker.Position.x, 0f, taker.Position.z); - var claimedAt = new CultMath.float3(early.HeldFrom.x, 0f, early.HeldFrom.y); - foreach (var elapsed in new[] { 0f, extend + envelop - .01f, extend + envelop + .3f, extend + envelop + .75f, extend + envelop + pull }) - { - zone.SetHeldProgress(early.Id, Mathf.Clamp01((elapsed - extend - envelop) / pull)); // the pull starts after Extend and Envelop - zone.Update(.01f); - var want = FieldTester.PulledPosition(claimedAt, holderAt, elapsed, extend, envelop, pull); - Require(Mathf.Abs(early.Body.Position.x - want.x) < 1e-3f && Mathf.Abs(early.Body.Position.y - want.z) < 1e-3f, - $"stand-in pose at {elapsed}s is {want}, the zone holds the item at {early.Body.Position}."); - } - zone.Free(early.Id); - - // Pickup destroys exactly the picked-up item's pickup. - Require(zone.TryPickUp(taker, released.Id), "the station refused a one-cell stack."); - yield return null; - yield return null; - Require(drawn == null, "pickup: the pickup is still there."); - Require(Pickups().Length == 1 && Pickups()[0].Item == early.Item, "pickup: the wrong pickup went."); - - // Expiry destroys the pickup of an item nobody took. - zone.Update(3600f); // far past any lifetime - yield return null; - yield return null; - Require(zone.FloatingItems.Count == 0, "expiry: the item did not expire."); - Require(Pickups().Length == 0, $"expiry: {Pickups().Length} pickups left."); - - // A later release is drawn again, and clearing the renderer takes what is left. - zone.Release(Make("Smoke Spare", 4), new float2(1, 1), float2.zero); - yield return null; - Require(Pickups().Length == 1, "re-release: not drawn."); - renderer.ClearZone(); - yield return null; - yield return null; - Require(Pickups().Length == 0, "clear: pickups left after ClearZone."); - Debug.Log("FLOATING_ITEMS_SMOKE ok"); - } - - // What ARPG.unity's ZoneRenderer names in each pickup field, read from the saved scene before the play session (a - // scene cannot be opened inside one) and carried across the domain reload as the prefabs' asset paths. - private static string ReadWiring() - { - var scene = EditorSceneManager.OpenScene("Assets/Scenes/ARPG.unity", OpenSceneMode.Additive); - try - { - var found = UnityEngine.Object.FindObjectsByType(FindObjectsInactive.Include, FindObjectsSortMode.None) - .Where(r => r.gameObject.scene == scene).ToArray(); - Require(found.Length == 1, $"ARPG.unity has {found.Length} ZoneRenderers."); - var wired = found[0]; - return string.Join("|", new[] - { - ("SimpleCommodityPickup", wired.SimpleCommodityPickup), ("CompoundCommodityPickup", wired.CompoundCommodityPickup), - ("GearPickup", wired.GearPickup), ("WeaponPickup", wired.WeaponPickup) - }.Select(f => f.Item1 + "=" + (f.Item2 == null ? "" : AssetDatabase.GetAssetPath(f.Item2)))); - } - finally { EditorSceneManager.CloseScene(scene, true); } - } -} diff --git a/Assets/Scripts/Editor/FloatingItemsDrawnSmoke.cs.meta b/Assets/Scripts/Editor/FloatingItemsDrawnSmoke.cs.meta deleted file mode 100644 index 51e4b34a7..000000000 --- a/Assets/Scripts/Editor/FloatingItemsDrawnSmoke.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 67544a932f794a2458741c731ef04d11 \ No newline at end of file diff --git a/Assets/Scripts/Editor/FlowFieldParityVerify.cs b/Assets/Scripts/Editor/FlowFieldParityVerify.cs deleted file mode 100644 index 2fa3e5fda..000000000 --- a/Assets/Scripts/Editor/FlowFieldParityVerify.cs +++ /dev/null @@ -1,302 +0,0 @@ -using System; -using System.IO; -using GameCult.Caching; -using UnityEditor; -using UnityEngine; - -namespace Aetheria.EditorTools -{ - /// - /// Batchmode check for flow-shader-parity (campaign aetheria-fauna, cut fauna-flow-field): the HLSL globalFlow and - /// slopeFlow of Assets/Shaders/Volumetric.cginc give the values of FlowField (ServerShared) for the same position, - /// scroll, settings and gradient. It drives the real lowering: a Zone is stepped, VolumeSampling.LowerFlow sets the - /// shader globals from the zone's Settings.Flow and FlowScroll, FlowParity.compute reads those globals, and the - /// results are compared with FlowField. It also checks that Settings.asset carries the authored flow under - /// PlanetSettings and that the shader got the zone's scroll (speed times zone time). - /// - /// Dispatches a compute kernel, so it needs a graphics device: run WITHOUT -nographics (as ShieldPanelCut3Verify). - /// Unity -batchmode -projectPath <repo> -executeMethod Aetheria.EditorTools.FlowFieldParityVerify.Run -logFile <path> - /// Do not pass -quit: Run exits the Editor itself, 0 on success and 1 on any failure. - /// - public static class FlowFieldParityVerify - { - const string Tag = "[FlowFieldParityVerify]"; - // Measured disagreement between the HLSL and the C# on this tree (float32 on both sides, positions to 10000, - // scrolls to 100, through the keyword-gated flow()): max 2.9e-5 of amplitude (the "max error" line this run - // prints). The tolerance is 5x that noise, so constant errors of 0.05% (y factor .501, swirl or amplitude - // x1.0005: 4e-4 to 8e-4) fail; a 0.01% error is at the noise floor and unresolvable. - const float RelativeTolerance = 1.5e-4f; - static float _maxError; - static bool _ok = true; - - static void OnLog(string message, string stack, LogType type) - { - if ((type == LogType.Error || type == LogType.Exception || type == LogType.Assert) && !message.StartsWith(Tag)) - Fail("logged-error", message.Split('\n')[0]); - } - - static void Fail(string check, string detail) - { - Debug.LogError($"{Tag} FAIL {check}: {detail}"); - _ok = false; - } - - public static void Run() - { - if (SystemInfo.graphicsDeviceType == UnityEngine.Rendering.GraphicsDeviceType.Null) - { - Debug.LogError($"{Tag} FAIL: no graphics device in this session; rerun batchmode without -nographics."); - EditorApplication.Exit(1); - return; - } - - // The flow's error lines (a shader keyword that does not exist, a missing property) fail the check. - Application.logMessageReceived += OnLog; - var work = Path.Combine(Path.GetTempPath(), "flow-parity-" + Guid.NewGuid().ToString("N")); - Directory.CreateDirectory(work); - try - { - var settings = AssetDatabase.LoadAssetAtPath("Assets/Resources/Settings.asset") - ?? throw new InvalidOperationException("No Settings.asset."); - var compute = AssetDatabase.LoadAssetAtPath("Assets/Shaders/Compute/FlowParity.compute") - ?? throw new InvalidOperationException("No FlowParity.compute."); - - CheckAuthoredFlow(settings.PlanetSettings.Flow); - - // The authored flow (global term only: its slope amplitudes are authored zero), then a flow with every - // term live and a scroll speed that reaches scrolls up to 100. - var authored = settings.PlanetSettings.Flow; - CheckParity("authored", settings, work, compute, authored, new[] { 0.0, 3.1, 40.0, 100.0 }); - var wide = new FlowSettings - { - GlobalScale = authored.GlobalScale, GlobalAmplitude = authored.GlobalAmplitude, Period = authored.Period, - GlobalScrollSpeed = 1f, SlopeAmplitude = 3f, SwirlAmplitude = 5f - }; - CheckParity("wide", settings, work, compute, wide, new[] { 0.0, 1.0, 17.0, 60.0, 100.0 }); - CheckNoiseClock(compute); - - Debug.Log($"{Tag} max error {_maxError:G4} of amplitude (tolerance {RelativeTolerance:G4})"); - Debug.Log(_ok ? $"{Tag} PASS" : $"{Tag} FAIL: see errors above"); - } - catch (Exception e) - { - Debug.LogError($"{Tag} FAIL exception: {e}"); - _ok = false; - } - finally - { - Application.logMessageReceived -= OnLog; - try { Directory.Delete(work, true); } catch { } - } - EditorApplication.Exit(_ok ? 0 : 1); - } - - // Settings.asset carries the authored flow under PlanetSettings (it moved from DefaultEnvironment unchanged). - static void CheckAuthoredFlow(FlowSettings flow) - { - if (flow == null) { Fail("authored-flow", "PlanetSettings.Flow is null"); return; } - if (flow.GlobalScale != 512f || flow.GlobalAmplitude != 15f || flow.GlobalScrollSpeed != .025f || - flow.Period != 8f || flow.SlopeAmplitude != 0f || flow.SwirlAmplitude != 0f) - Fail("authored-flow", $"PlanetSettings.Flow is {flow.GlobalScale}/{flow.GlobalAmplitude}/{flow.GlobalScrollSpeed}/" + - $"{flow.Period}/{flow.SlopeAmplitude}/{flow.SwirlAmplitude}, authored 512/15/0.025/8/0/0"); - } - - internal static Zone BuildZone(GameSettings settings, string work, FlowSettings flow, double time = 0) - { - var cache = AetheriaStores.Open(Path.Combine(work, Guid.NewGuid().ToString("N") + ".cc"), catalogWritable: true); - cache.Upsert(new VerseGrammar { Revision = 1 }); - cache.FlushAsync().Wait(); - var items = new ItemManager(1u, cache, new ProvenanceLedger(), settings.GameplaySettings, _ => { }); - return new Zone(items, new PlanetSettings { Flow = flow }, new ZonePack { Time = time }, new GalaxyZone { Name = "Parity", Owner = null }, null); - } - - static void CheckParity(string label, GameSettings settings, string work, ComputeShader compute, FlowSettings flow, - double[] zoneTimes) - { - var zone = BuildZone(settings, work, flow); - var kernel = compute.FindKernel("Evaluate"); - var rng = new System.Random(label.Length * 7919); - const int positionCount = 256, gradientCount = 64; - const int count = positionCount; - - var positions = new Vector3[count]; - for (var i = 0; i < positionCount; i++) - positions[i] = new Vector3((float) (rng.NextDouble() * 20000 - 10000), (float) (rng.NextDouble() * 200 - 100), - (float) (rng.NextDouble() * 20000 - 10000)); - // Gradients of any direction and magnitude, plus one zero gradient. - var gradients = new Vector2[count]; - for (var i = 1; i < gradientCount; i++) - { - var angle = rng.NextDouble() * Math.PI * 2; - var magnitude = (float) Math.Exp(rng.NextDouble() * 8 - 4); - gradients[i] = new Vector2((float) Math.Cos(angle) * magnitude, (float) Math.Sin(angle) * magnitude); - } - gradients[0] = Vector2.zero; - - var positionBuffer = new ComputeBuffer(count, 12); - var gradientBuffer = new ComputeBuffer(count, 8); - var globalBuffer = new ComputeBuffer(count, 12); - var slopeBuffer = new ComputeBuffer(count, 12); - var gatedBuffer = new ComputeBuffer(count, 12); - ComputeBuffer noiseBuffer = null; - // flow() reads the nebula's gravity height under FLOW_SLOPE. A ramp rising along the texture's x gives every - // position inside the grid the gradient direction (1, 0), so the slope term is live where a flat height - // would zero it (and the FLOW_SLOPE keyword and its pragma would not matter). - const int rampSize = 64; - var height = new Texture2D(rampSize, rampSize, TextureFormat.RFloat, false) - { filterMode = FilterMode.Point, wrapMode = TextureWrapMode.Clamp }; - var ramp = new float[rampSize * rampSize]; - for (var i = 0; i < ramp.Length; i++) ramp[i] = (i % rampSize) / (float) (rampSize - 1); - height.SetPixelData(ramp, 0); - height.Apply(); - var rampGradient = new CultMath.float2(1f, 0f); - try - { - positionBuffer.SetData(positions); - gradientBuffer.SetData(gradients); - compute.SetBuffer(kernel, "positions", positionBuffer); - compute.SetBuffer(kernel, "gradients", gradientBuffer); - compute.SetBuffer(kernel, "globalOut", globalBuffer); - compute.SetBuffer(kernel, "slopeOut", slopeBuffer); - compute.SetBuffer(kernel, "gatedOut", gatedBuffer); - compute.SetTexture(kernel, "_NebulaSurfaceHeight", height); - compute.SetVector("_NebulaSurfaceHeight_TexelSize", new Vector4(1f / rampSize, 1f / rampSize, rampSize, rampSize)); - // The grid spans 40000: every sampled position (|xz| to 10000) is inside the ramp's uv range. - Shader.SetGlobalVector("_GridTransform", new Vector4(0f, 0f, 40000f, 0f)); - noiseBuffer = new ComputeBuffer(count, 4); - compute.SetBuffer(kernel, "noiseOut", noiseBuffer); - compute.SetInt("count", count); - - var elapsed = 0.0; - foreach (var target in zoneTimes) - { - // Step the zone to the target by an awkward step; the sum is the zone's time. - while (elapsed < target - 1e-9) - { - var dt = (float) Math.Min(0.37, target - elapsed); - zone.Update(dt); - elapsed += dt; - } - VolumeSampling.LowerFlow(zone.Settings.Flow, zone.ExactTime); - - // The shader got the zone's scroll and cycle: the same zone time Zone.Flow evaluates at. - var zoneScroll = zone.FlowScroll; - var lowered = Shader.GetGlobalVector("_FlowScroll"); - if (Math.Abs(lowered.x - zoneScroll.x) > 1e-6 || Math.Abs(lowered.y - zoneScroll.y) > 1e-6) - Fail($"{label}-lowered-scroll", $"at zone time {elapsed:F3} the shader got _FlowScroll ({lowered.x}, {lowered.y}), the zone's is ({zoneScroll.x}, {zoneScroll.y})"); - if (Math.Abs(Shader.GetGlobalFloat("_FlowCycle") - zone.CyclePhase(flow.Period)) > 1e-6) - Fail($"{label}-lowered-cycle", $"at zone time {elapsed:F3} the shader got _FlowCycle {Shader.GetGlobalFloat("_FlowCycle")}, the zone's phase is {zone.CyclePhase(flow.Period)}"); - if (Shader.GetGlobalFloat("_FlowScale") != flow.GlobalScale || Shader.GetGlobalFloat("_FlowAmplitude") != flow.GlobalAmplitude || - Shader.GetGlobalFloat("_FlowSlopeAmplitude") != flow.SlopeAmplitude || - Shader.GetGlobalFloat("_FlowSwirlAmplitude") != flow.SwirlAmplitude || Shader.GetGlobalFloat("_FlowPeriod") != flow.Period) - Fail($"{label}-lowered-settings", "a flow uniform does not equal the zone's FlowSettings"); - - compute.Dispatch(kernel, (count + 63) / 64, 1, 1); - var globalOut = new Vector3[count]; - var slopeOut = new Vector3[count]; - var gatedOut = new Vector3[count]; - globalBuffer.GetData(globalOut); - slopeBuffer.GetData(slopeOut); - gatedBuffer.GetData(gatedOut); - - var at = $"{label} zone time {elapsed:F2} scroll {zoneScroll.x:F4}"; - for (var i = 0; i < positionCount; i++) - { - var p = positions[i]; - var expected = FlowField.Global(flow, new CultMath.float3(p.x, p.y, p.z), zoneScroll); - Compare($"{label}-global", at, i, new Vector3(expected.x, expected.y, expected.z), globalOut[i], flow.GlobalAmplitude); - } - // flow() is the keyword-gated function the nebula and stardust call: the global term plus, under - // FLOW_SLOPE, the slope term of the ramp's gradient. A flow that is live must not read zero. - var live = 0; - var gatedScale = Math.Max(Math.Abs(flow.GlobalAmplitude), Math.Max(Math.Abs(flow.SlopeAmplitude), Math.Abs(flow.SwirlAmplitude))); - for (var i = 0; i < positionCount; i++) - { - var p = positions[i]; - var expected = FlowField.At(flow, new CultMath.float3(p.x, p.y, p.z), zoneScroll, rampGradient); - var e = new Vector3(expected.x, expected.y, expected.z); - if (e.magnitude > .1f * gatedScale) live++; - Compare($"{label}-flow-keywords", at, i, e, gatedOut[i], gatedScale); - } - if (gatedScale != 0f && live < positionCount / 4) - Fail($"{label}-flow-keywords", $"{at}: only {live} of {positionCount} zone flows are live; the check is vacuous"); - var slopeScale = Math.Max(Math.Abs(flow.SlopeAmplitude), Math.Abs(flow.SwirlAmplitude)); - for (var i = 0; i < gradientCount; i++) - { - var g = gradients[i]; - var expected = FlowField.Slope(flow, new CultMath.float2(g.x, g.y)); - Compare($"{label}-slope", at, i, new Vector3(expected.x, expected.y, expected.z), slopeOut[i], slopeScale); - } - } - } - finally - { - positionBuffer.Release(); gradientBuffer.Release(); globalBuffer.Release(); slopeBuffer.Release(); gatedBuffer.Release(); noiseBuffer?.Release(); UnityEngine.Object.DestroyImmediate(height); - } - } - - // The nebula noise the flow advects evolves on the flow clock VolumeSampling lowers as _NebulaNoiseTime, never on - // _Time: with the speed non-zero, the noise changes when _NebulaNoiseTime does and not otherwise (a frame clock - // would not follow the global set here). - static void CheckNoiseClock(ComputeShader compute) - { - const int count = 64; - var kernel = compute.FindKernel("Evaluate"); - var rng = new System.Random(4217); - var positions = new Vector3[count]; - for (var i = 0; i < count; i++) - positions[i] = new Vector3((float) (rng.NextDouble() * 4000 - 2000), (float) (rng.NextDouble() * 100 - 50), (float) (rng.NextDouble() * 4000 - 2000)); - var buffers = new[] { new ComputeBuffer(count, 12), new ComputeBuffer(count, 8), new ComputeBuffer(count, 12), new ComputeBuffer(count, 12), new ComputeBuffer(count, 12), new ComputeBuffer(count, 4) }; - var height = new Texture2D(1, 1, TextureFormat.RFloat, false); - try - { - buffers[0].SetData(positions); - buffers[1].SetData(new Vector2[count]); - compute.SetBuffer(kernel, "positions", buffers[0]); - compute.SetBuffer(kernel, "gradients", buffers[1]); - compute.SetBuffer(kernel, "globalOut", buffers[2]); - compute.SetBuffer(kernel, "slopeOut", buffers[3]); - compute.SetBuffer(kernel, "gatedOut", buffers[4]); - compute.SetBuffer(kernel, "noiseOut", buffers[5]); - compute.SetTexture(kernel, "_NebulaSurfaceHeight", height); - compute.SetInt("count", count); - Shader.SetGlobalFloat("_NebulaNoiseSpeed", 1f); - float[] Noise(float noiseTime) - { - Shader.SetGlobalFloat("_NebulaNoiseTime", noiseTime); - compute.Dispatch(kernel, 1, 1, 1); - var result = new float[count]; - buffers[5].GetData(result); - return result; - } - var a = Noise(0f); - var b = Noise(3f); - var again = Noise(3f); - int moved = 0, repeated = 0; - for (var i = 0; i < count; i++) - { - if (Math.Abs(a[i] - b[i]) > 1e-4f) moved++; - if (b[i] == again[i]) repeated++; - } - if (moved < count / 2) Fail("nebula-noise-clock", $"only {moved} of {count} noise samples follow _NebulaNoiseTime"); - if (repeated != count) Fail("nebula-noise-clock", $"{count - repeated} of {count} noise samples changed with _NebulaNoiseTime held"); - } - finally - { - foreach (var buffer in buffers) buffer.Release(); - UnityEngine.Object.DestroyImmediate(height); - } - } - - // Error is measured against the term's amplitude; a term with no amplitude must be exactly zero and never NaN. - static void Compare(string check, string at, int index, Vector3 expected, Vector3 actual, float amplitude) - { - var error = (expected - actual).magnitude; - if (float.IsNaN(error)) { Fail(check, $"{at} sample {index}: NaN (expected {expected}, shader {actual})"); return; } - if (amplitude != 0f) _maxError = Math.Max(_maxError, error / Math.Abs(amplitude)); - var tolerance = RelativeTolerance * Math.Abs(amplitude); - if (error > tolerance) - Fail(check, $"{at} sample {index}: expected {expected}, shader {actual}, error {error:G4} > {tolerance:G4}"); - } - } -} diff --git a/Assets/Scripts/Editor/FlowFieldParityVerify.cs.meta b/Assets/Scripts/Editor/FlowFieldParityVerify.cs.meta deleted file mode 100644 index 50248c5f3..000000000 --- a/Assets/Scripts/Editor/FlowFieldParityVerify.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 8fae18f5f32f10f43ba892a097f18caa \ No newline at end of file diff --git a/Assets/Scripts/Editor/FlowFieldSceneVerify.cs b/Assets/Scripts/Editor/FlowFieldSceneVerify.cs deleted file mode 100644 index d39874f33..000000000 --- a/Assets/Scripts/Editor/FlowFieldSceneVerify.cs +++ /dev/null @@ -1,392 +0,0 @@ -using System; -using System.IO; -using System.Linq; -using System.Reflection; -using UnityEditor; -using UnityEditor.SceneManagement; -using UnityEngine; -using UnityEngine.Rendering; - -namespace Aetheria.EditorTools -{ - /// - /// Batchmode check for the flow as the scene runs it (campaign aetheria-fauna, cut fauna-flow-field; target - /// invariants flow-one-owner and flow-shader-parity). FlowFieldParityVerify proves the HLSL against FlowField with - /// no scene loaded; this opens ARPG.unity, lets VolumeSampling and Stardust initialise as the game does, drives - /// their own Start and Update with a zone attached, and asserts what the presenters did: - /// - nothing threw and nothing logged an error (a type that cannot initialise in a scene, as VolumeSampling once - /// could when it created its keywords in a static field initializer, throws on its first use); - /// - FLOW_GLOBAL and FLOW_SLOPE are enabled, _FlowAmplitude is the zone's, and the nebula noise clock is the zone's; - /// - the stardust particle buffer changes with the flow and freezes when the zone pauses; - /// - CloudShader pass 0 carries the FLOW_* keywords. - /// The scene is opened before any Aetheria type is touched: run this method alone in its own Unity session, never - /// after FlowFieldParityVerify (which would initialise VolumeSampling outside a MonoBehaviour constructor). - /// Dispatches compute and renders, so it needs a graphics device: run WITHOUT -nographics. - /// Unity -batchmode -projectPath <repo> -executeMethod Aetheria.EditorTools.FlowFieldSceneVerify.Run -logFile <path> - /// Do not pass -quit: Run exits the Editor itself, 0 on success and 1 on any failure. - /// - public static class FlowFieldSceneVerify - { - const string Tag = "[FlowFieldSceneVerify]"; - static bool _ok = true; - - static void OnLog(string message, string stack, LogType type) - { - if ((type == LogType.Error || type == LogType.Exception || type == LogType.Assert) && !message.StartsWith(Tag)) - Fail("logged-error", message.Split('\n')[0]); - } - - static void Fail(string check, string detail) - { - Debug.LogError($"{Tag} FAIL {check}: {detail}"); - _ok = false; - } - - public static void Run() - { - if (SystemInfo.graphicsDeviceType == GraphicsDeviceType.Null) - { - Debug.LogError($"{Tag} FAIL: no graphics device in this session; rerun batchmode without -nographics."); - EditorApplication.Exit(1); - return; - } - - Application.logMessageReceived += OnLog; - try - { - // Before anything else touches the project's types: the scene constructs its MonoBehaviours here. - EditorSceneManager.OpenScene("Assets/Scenes/ARPG.unity", OpenSceneMode.Single); - Check(); - Debug.Log(_ok ? $"{Tag} PASS" : $"{Tag} FAIL: see errors above"); - } - catch (Exception e) - { - Debug.LogError($"{Tag} FAIL exception: {e}"); - _ok = false; - } - finally - { - Application.logMessageReceived -= OnLog; - } - EditorApplication.Exit(_ok ? 0 : 1); - } - - static void Check() - { - var settings = AssetDatabase.LoadAssetAtPath("Assets/Resources/Settings.asset") - ?? throw new InvalidOperationException("No Settings.asset."); - var agm = UnityEngine.Object.FindObjectsByType(FindObjectsInactive.Include, FindObjectsSortMode.None).FirstOrDefault(); - var volume = UnityEngine.Object.FindObjectsByType(FindObjectsInactive.Include, FindObjectsSortMode.None).FirstOrDefault(); - var dust = UnityEngine.Object.FindObjectsByType(FindObjectsInactive.Include, FindObjectsSortMode.None).FirstOrDefault(); - if (agm == null || volume == null || dust == null) - { - Fail("scene-objects", $"ARPG.unity has ActionGameManager={agm != null}, VolumeSampling={volume != null}, Stardust={dust != null}"); - return; - } - - // Every flow term live, so FLOW_SLOPE is on; and the same flow with every amplitude zero. - var on = new FlowSettings - { - GlobalScale = 512f, GlobalAmplitude = 15f, GlobalScrollSpeed = .025f, Period = 8f, SlopeAmplitude = 3f, SwirlAmplitude = 5f - }; - var off = new FlowSettings { GlobalScale = on.GlobalScale, GlobalScrollSpeed = on.GlobalScrollSpeed, Period = on.Period }; - var work = Path.Combine(Path.GetTempPath(), "flow-scene-" + Guid.NewGuid().ToString("N")); - Directory.CreateDirectory(work); - try - { - var zone = FlowFieldParityVerify.BuildZone(settings, work, on, 86400.0 * 3 + 12.3); - typeof(ActionGameManager).GetProperty("Instance").GetSetMethod(true).Invoke(null, new object[] { agm }); - typeof(ActionGameManager).GetProperty("Zone").GetSetMethod(true).Invoke(agm, new object[] { zone }); - if (agm.Settings == null) agm.Settings = settings; - - Call(volume, "Start"); - Call(volume, "Update"); - if (!Shader.IsKeywordEnabled("FLOW_GLOBAL")) Fail("scene-keywords", "FLOW_GLOBAL is not enabled after VolumeSampling.Update"); - if (!Shader.IsKeywordEnabled("FLOW_SLOPE")) Fail("scene-keywords", "FLOW_SLOPE is not enabled after VolumeSampling.Update"); - if (Shader.GetGlobalFloat("_FlowAmplitude") != on.GlobalAmplitude) - Fail("scene-amplitude", $"_FlowAmplitude is {Shader.GetGlobalFloat("_FlowAmplitude")}, the zone's flow has {on.GlobalAmplitude}"); - var scroll = Shader.GetGlobalVector("_FlowScroll"); - if (scroll.x != zone.FlowScroll.x || scroll.y != zone.FlowScroll.y) - Fail("scene-scroll", $"_FlowScroll ({scroll.x}, {scroll.y}) is not the zone's ({zone.FlowScroll.x}, {zone.FlowScroll.y})"); - var noiseTime = Shader.GetGlobalFloat("_NebulaNoiseTime"); - if (noiseTime != (float) zone.ExactTime) - Fail("scene-noise-clock", $"_NebulaNoiseTime is {noiseTime}, the zone's time is {(float) zone.ExactTime}"); - - CheckCloudKeywords(); - - // Stardust follows the flow through its own dispatch: the particle buffer read back each frame. - Call(dust, "Start"); - var bufferField = typeof(Stardust).GetField("_particlesBuffer", BindingFlags.NonPublic | BindingFlags.Instance); - float[] Frame() - { - Call(dust, "Update"); - var buffer = (ComputeBuffer) bufferField.GetValue(dust); - var data = new float[buffer.count * 7]; - buffer.GetData(data); - return data; - } - var flowing = Frame(); - VolumeSampling.LowerFlow(off, VolumeSampling.FlowClock); - var still = Frame(); - if (Differing(flowing, still) == 0) Fail("scene-stardust", "the particle buffer is the same with the zone's flow and with no flow"); - - // A paused zone freezes the particles and the nebula noise clock; a running one moves both. - Call(volume, "Update"); - zone.Update(0f); - Call(volume, "Update"); - if (Differing(flowing, Frame()) != 0) Fail("scene-stardust-pause", "the particle buffer moved while the zone was paused"); - if (Shader.GetGlobalFloat("_NebulaNoiseTime") != noiseTime) Fail("scene-noise-clock", "_NebulaNoiseTime moved while the zone was paused"); - zone.Update(.05f); - Call(volume, "Update"); - if (Differing(flowing, Frame()) == 0) Fail("scene-stardust-run", "the particle buffer did not move while the zone ran"); - if (Shader.GetGlobalFloat("_NebulaNoiseTime") == noiseTime) Fail("scene-noise-clock", "_NebulaNoiseTime did not move while the zone ran"); - - CheckStardustUncullable(dust, bufferField); - CheckStardustUnderFog(dust, bufferField); - } - finally - { - try { Directory.Delete(work, true); } catch { } - } - } - - // The event Stardust itself attaches its draw at, read from the class so the verifier cannot agree with a copy of it. - static CameraEvent DrawEvent() => - (CameraEvent) typeof(Stardust).GetField("DrawEvent", BindingFlags.NonPublic | BindingFlags.Static).GetRawConstantValue(); - - // The dust is a command buffer on the target camera, which no culling sees: with every particle 10000 below the - // camera (far past any box a hand could inflate round it) a render still shows dust, and shows none when the - // same particles have no size. - static void CheckStardustUncullable(Stardust dust, FieldInfo bufferField) - { - var camera = dust.TargetCamera; - if (camera == null) { Fail("scene-stardust-uncullable", "Stardust has no TargetCamera"); return; } - var drawEvent = DrawEvent(); - var attached = camera.GetCommandBuffers(drawEvent).Count(buffer => buffer.name == "Stardust"); - if (attached != 1) Fail("scene-stardust-uncullable", $"{attached} Stardust command buffers at {drawEvent} on the target camera, expected 1"); - foreach (var other in Enum.GetValues(typeof(CameraEvent)).Cast().Where(other => other != drawEvent)) - { - var stray = camera.GetCommandBuffers(other).Count(buffer => buffer.name == "Stardust"); - if (stray != 0) Fail("scene-stardust-uncullable", $"{stray} Stardust command buffers at {other}, expected 0"); - } - - var particles = (ComputeBuffer) bufferField.GetValue(dust); - float[] Layout(float size, Vector3 centre, float below) => DustLayout(particles.count, size, centre, below); - - var transform = camera.transform; - var (position, rotation) = (transform.position, transform.rotation); - var (far, flags, background, mask, target) = (camera.farClipPlane, camera.clearFlags, camera.backgroundColor, camera.cullingMask, camera.targetTexture); - var texture = RenderTexture.GetTemporary(64, 64, 24, RenderTextureFormat.ARGB32); - var readback = new Texture2D(64, 64, TextureFormat.RGBA32, false); - var previous = RenderTexture.active; - // Image effects on the camera would write their own frame over the dust; only the dust draw is under test. - var effects = camera.GetComponents().Where(behaviour => behaviour.enabled).ToArray(); - Color32[] Render(float size, Vector3 centre, float below) - { - Call(dust, "Update"); // on a bounded draw this queues the draw for the camera; here it dispatches the compute - particles.SetData(Layout(size, centre, below)); - camera.Render(); - RenderTexture.active = texture; - readback.ReadPixels(new Rect(0, 0, 64, 64), 0, 0); - readback.Apply(); - return readback.GetPixels32(); - } - try - { - foreach (var effect in effects) effect.enabled = false; - camera.clearFlags = CameraClearFlags.SolidColor; - camera.backgroundColor = Color.black; - camera.cullingMask = 1; - camera.targetTexture = texture; - // control: the camera where the scene put it, dust 100 below, inside any box a hand-set extent would give - transform.SetPositionAndRotation(position, Quaternion.Euler(90f, 0f, 0f)); - camera.farClipPlane = 1000f; - var nearWith = Render(5f, position, 100f); var nearWithout = Render(0f, position, 100f); - var nearDiff = 0; for (var i = 0; i < nearWith.Length; i++) if (!nearWith[i].Equals(nearWithout[i])) nearDiff++; - Debug.Log($"{Tag} stardust near-control differing pixels={nearDiff}"); - if (nearDiff == 0) Fail("scene-stardust-uncullable", "control: dust 100 below the camera drew no pixels"); - transform.SetPositionAndRotation(new Vector3(0f, -40000f, 0f), Quaternion.Euler(90f, 0f, 0f)); - camera.farClipPlane = 30000f; - var withDust = Render(400f, transform.position, 10000f); // the material scales a quad by distance^.33, so at this range it needs this size to cover pixels - var without = Render(0f, transform.position, 10000f); - var differing = 0; - for (var i = 0; i < withDust.Length; i++) - if (!withDust[i].Equals(without[i])) differing++; - if (differing == 0) Fail("scene-stardust-uncullable", "the dust 10000 below the camera drew no pixels"); - } - finally - { - RenderTexture.active = previous; - foreach (var effect in effects) effect.enabled = true; - camera.targetTexture = target; - camera.cullingMask = mask; - camera.backgroundColor = background; - camera.clearFlags = flags; - camera.farClipPlane = far; - transform.SetPositionAndRotation(position, rotation); - RenderTexture.ReleaseTemporary(texture); - UnityEngine.Object.DestroyImmediate(readback); - } - } - - // The nebula is an [ImageEffectOpaque] that fogs the whole ray to a depth the dust never writes (B49): dust drawn - // before it is attenuated by the fog, dust drawn after it sits on top at full strength. The dust's contribution to a - // pixel (render with dust minus render without) is read with the cloud renderer off and on, in an HDR target. - static void CheckStardustUnderFog(Stardust dust, FieldInfo bufferField) - { - const int Size = 128; - var camera = dust.TargetCamera; - var cloud = camera == null ? null : camera.GetComponent(); - if (cloud == null) { Fail("scene-stardust-under-fog", "the target camera has no VolumeCloudRenderer"); return; } - var particles = (ComputeBuffer) bufferField.GetValue(dust); - - var transform = camera.transform; - var (position, rotation) = (transform.position, transform.rotation); - var (far, flags, background, mask, target, hdr) = (camera.farClipPlane, camera.clearFlags, camera.backgroundColor, camera.cullingMask, camera.targetTexture, camera.allowHDR); - var texture = RenderTexture.GetTemporary(Size, Size, 24, RenderTextureFormat.ARGBHalf); - var readback = new Texture2D(Size, Size, TextureFormat.RGBAHalf, false); - var previous = RenderTexture.active; - var effects = camera.GetComponents().Where(behaviour => behaviour.enabled).ToArray(); - var fields = new System.Collections.Generic.List(); - GameObject floor = null; - float[] Render(bool fog, float size) - { - cloud.enabled = fog; - for (var frame = 0; frame < 2; frame++) // the cloud's first frame forces ULTRA and fills its history; the second is the settled one - { - Call(dust, "Update"); - particles.SetData(DustLayout(particles.count, size, position, 100f)); - camera.Render(); - } - RenderTexture.active = texture; - readback.ReadPixels(new Rect(0, 0, Size, Size), 0, 0); - readback.Apply(); - return readback.GetPixels().Select(pixel => pixel.r * .2126f + pixel.g * .7152f + pixel.b * .0722f).ToArray(); - } - try - { - foreach (var effect in effects) effect.enabled = false; - camera.allowHDR = true; - camera.clearFlags = CameraClearFlags.SolidColor; - camera.backgroundColor = Color.black; - camera.cullingMask = 1; - camera.targetTexture = texture; - camera.farClipPlane = 1000f; - transform.SetPositionAndRotation(position, Quaternion.Euler(90f, 0f, 0f)); - // The fog only measures a partial density where depth is written: a pixel with no depth is fogged whole (CloudShader sets - // density 1 past the far plane). A floor under the dust gives the march a finite ray. - floor = GameObject.CreatePrimitive(PrimitiveType.Plane); - floor.transform.position = position + Vector3.down * 200f; - floor.transform.localScale = Vector3.one * 100f; - UnityEngine.Object.DestroyImmediate(floor.GetComponent()); - - // The scene's own nebula fields are textures the game renders; here a uniform fill of white fog stands in for them. - foreach (var (name, format) in new[] { ("_NebulaSurfaceHeight", TextureFormat.RFloat), ("_NebulaPatchHeight", TextureFormat.RHalf), ("_NebulaPatch", TextureFormat.RHalf) }) - Shader.SetGlobalTexture(name, Uniform(format, Color.black, fields)); - Shader.SetGlobalTexture("_NebulaTint", Uniform(TextureFormat.RGBA32, Color.white, fields)); - Shader.DisableKeyword("NOISE_SLOPE"); - Shader.SetGlobalFloat("_NebulaFillDensity", .01f); - Shader.SetGlobalFloat("_NebulaFillDistance", 120f); - Shader.SetGlobalFloat("_NebulaFillExponent", 0f); - Shader.SetGlobalFloat("_NebulaFillOffset", 0f); - Shader.SetGlobalFloat("_NebulaPatchDensity", 0f); - Shader.SetGlobalFloat("_NebulaLuminance", .01f); // a fog dimmer than the dust: dust drawn over it would otherwise read as a negative contribution - Shader.SetGlobalFloat("_ExtinctionCoefficient", .25f); // with the fill density, about 40% of the light to the floor is fogged away - Shader.SetGlobalFloat("_SafetyDistance", -1e6f); // below every sample: only the uniform fill, none of the zone's noise - Shader.SetGlobalFloat("_TintLodExponent", 0f); - - var clearBare = Render(false, 0f); - var clearDust = Render(false, 5f); - var fogBare = Render(true, 0f); - var fogDust = Render(true, 5f); - - var fogShown = 0f; - var (clearSum, fogSum, drawn) = (0f, 0f, 0); - for (var i = 0; i < clearBare.Length; i++) - { - fogShown += Mathf.Abs(fogBare[i] - clearBare[i]) / clearBare.Length; - if (clearDust[i] == clearBare[i]) continue; - drawn++; clearSum += clearDust[i] - clearBare[i]; fogSum += fogDust[i] - fogBare[i]; - } - var (clearMean, fogMean) = (drawn == 0 ? 0f : clearSum / drawn, drawn == 0 ? 0f : fogSum / drawn); - Debug.Log($"{Tag} stardust under fog: fog control mean |difference|={fogShown}, dust pixels={drawn}, dust contribution cloud off={clearMean}, cloud on={fogMean}, ratio={(clearMean == 0f ? 0f : fogMean / clearMean)}"); - if (drawn == 0 || clearMean <= 0f) Fail("scene-stardust-under-fog", "control: the dust drew no pixels with the cloud renderer off"); - else if (fogShown < 1e-3f) Fail("scene-stardust-under-fog", "control: the cloud renderer changed no pixels, so no fog is in view"); - else if (fogMean > .9f * clearMean) Fail("scene-stardust-under-fog", "the dust is not attenuated by the fog in front of it: it was drawn after the nebula composites"); - else if (fogMean < .1f * clearMean) Fail("scene-stardust-under-fog", "the dust is erased, not dimmed, by a partial fog"); - } - finally - { - RenderTexture.active = previous; - foreach (var effect in effects) effect.enabled = true; - camera.allowHDR = hdr; - camera.targetTexture = target; - camera.cullingMask = mask; - camera.backgroundColor = background; - camera.clearFlags = flags; - camera.farClipPlane = far; - transform.SetPositionAndRotation(position, rotation); - RenderTexture.ReleaseTemporary(texture); - UnityEngine.Object.DestroyImmediate(readback); - foreach (var field in fields) UnityEngine.Object.DestroyImmediate(field); - if (floor != null) UnityEngine.Object.DestroyImmediate(floor); - } - } - - static Texture2D Uniform(TextureFormat format, Color colour, System.Collections.Generic.List owner) - { - var texture = new Texture2D(1, 1, format, false) { wrapMode = TextureWrapMode.Clamp }; - texture.SetPixel(0, 0, colour); - texture.Apply(); - owner.Add(texture); - return texture; - } - - // A square patch of particles 4 apart, `below` under `centre`. - static float[] DustLayout(int count, float size, Vector3 centre, float below) - { - var side = Mathf.RoundToInt(Mathf.Sqrt(count)); - var data = new float[count * 7]; - for (var i = 0; i < count; i++) - { - data[i * 7 + 0] = centre.x + ((i % side) - side / 2f) * 4f; - data[i * 7 + 1] = centre.y - below; - data[i * 7 + 2] = centre.z + ((i / side) - side / 2f) * 4f; - data[i * 7 + 3] = data[i * 7 + 4] = data[i * 7 + 5] = 1f; - data[i * 7 + 6] = size; - } - return data; - } - - // CloudShader's pass 0 compiles with the flow keywords (it must #include_with_pragmas the shared include). - static void CheckCloudKeywords() - { - var shader = AssetDatabase.LoadAssetAtPath("Assets/Shaders/Raymarching/CloudShader.shader"); - if (shader == null) { Fail("scene-cloud-keywords", "No CloudShader.shader."); return; } - var keywords = ShaderUtil.GetPassKeywords(shader, new PassIdentifier(0, 0), UnityEditor.Rendering.ShaderType.Fragment) - .Select(keyword => keyword.name).ToArray(); - foreach (var name in new[] { "FLOW_GLOBAL", "FLOW_SLOPE" }) - if (!keywords.Contains(name)) Fail("scene-cloud-keywords", $"CloudShader pass 0 does not carry {name}"); - } - - static int Differing(float[] a, float[] b) - { - var count = 0; - for (var i = 0; i < a.Length; i++) - if (Math.Abs(a[i] - b[i]) > 1e-4f) count++; - return count; - } - - // The presenters' own Start and Update, as the game calls them; an exception is a failure that names the type. - static void Call(object target, string method) - { - var info = target.GetType().GetMethod(method, BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance); - if (info == null) { Fail("scene-presenter-exception", $"{target.GetType().Name}.{method} not found"); return; } - try { info.Invoke(target, null); } - catch (TargetInvocationException e) - { - Fail("scene-presenter-exception", $"{target.GetType().Name}.{method} threw {e.InnerException?.GetType().Name}"); - } - } - } -} diff --git a/Assets/Scripts/Editor/FlowFieldSceneVerify.cs.meta b/Assets/Scripts/Editor/FlowFieldSceneVerify.cs.meta deleted file mode 100644 index 77339880b..000000000 --- a/Assets/Scripts/Editor/FlowFieldSceneVerify.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 25fbd79fca1de49498c3bebf9f63243b \ No newline at end of file diff --git a/Assets/Scripts/Editor/GravityFieldParityVerify.cs b/Assets/Scripts/Editor/GravityFieldParityVerify.cs deleted file mode 100644 index d996d3227..000000000 --- a/Assets/Scripts/Editor/GravityFieldParityVerify.cs +++ /dev/null @@ -1,428 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using GameCult.Caching; -using UnityEditor; -using UnityEditor.SceneManagement; -using UnityEngine; -using UnityEngine.Rendering; -using CultMath; - -namespace Aetheria.EditorTools -{ - /// - /// Batchmode check for campaign aetheria-gravity, cut grid-lowering: what the Gravity Field pass draws is the sim's - /// height. It builds a zone from Settings.asset's PlanetSettings with three bodies, runs the real lowering - /// (GravityLowering.Lower and CreateField), renders the field through an orthographic camera that culls layer 9 into - /// a float target, and compares every texel with -Zone.GetHeight at the texel centre's world position. It then checks - /// that the texture's gradient points where Zone.GetForce does, and that ARPG.unity and the body prefabs are wired - /// the way the cut leaves them (the gravity cameras cull layer 9 alone, nothing but the run-time field sits on it). - /// - /// Renders, so it needs a graphics device: run WITHOUT -nographics (as FlowFieldParityVerify). - /// Unity -batchmode -projectPath <repo> -executeMethod Aetheria.EditorTools.GravityFieldParityVerify.Run -logFile <path> - /// Do not pass -quit: Run exits the Editor itself, 0 on success and 1 on any failure. - /// - public static class GravityFieldParityVerify - { - const string Tag = "[GravityFieldParityVerify]"; - const int Size = 256; - // Measured on this tree (the "max error" line this run prints): the largest |texel + GetHeight| over the windows of the three - // frames is 0.0103 u, in the moved-again frame's sun window (float32 on both sides, the GPU's log and the closed form's - // single-precision floor of 1.5e-5 per unit strength against the CPU's, the quad's interpolated world position). The - // tolerance is 2.9x that. A band whose terms were drawn from the wrong edge (reference, inner or outer) moves the - // drawn height by whole units. - const float Tolerance = 0.03f; - // The worst angle between the texture's central difference and GetForce (B28: 1.0 degrees median zone, 2.9 worst). - const float GradientDegrees = 3f; - // Below this force (u/s^2) the drawn height differs between neighbouring texels by less than float32 resolves. - const float FlatForce = 1e-3f; - static float _maxError, _maxAngle, _maxTau; - static bool _ok = true; - - static void OnLog(string message, string stack, LogType type) - { - if ((type == LogType.Error || type == LogType.Exception || type == LogType.Assert) && !message.StartsWith(Tag)) - Fail("logged-error", message.Split('\n')[0]); - } - - static void Fail(string check, string detail) - { - Debug.LogError($"{Tag} FAIL {check}: {detail}"); - _ok = false; - } - - public static void Run() - { - if (SystemInfo.graphicsDeviceType == GraphicsDeviceType.Null) - { - Debug.LogError($"{Tag} FAIL: no graphics device in this session; rerun batchmode without -nographics."); - EditorApplication.Exit(1); - return; - } - - Application.logMessageReceived += OnLog; - var work = Path.Combine(Path.GetTempPath(), "gravity-parity-" + Guid.NewGuid().ToString("N")); - Directory.CreateDirectory(work); - ComputeBuffer wells = null; - GameObject field = null; - try - { - var settings = AssetDatabase.LoadAssetAtPath("Assets/Resources/Settings.asset") - ?? throw new InvalidOperationException("No Settings.asset."); - var material = AssetDatabase.LoadAssetAtPath("Assets/Materials/Brushes/Gravity Field.mat") - ?? throw new InvalidOperationException("No Gravity Field.mat."); - - var zone = BuildZone(settings, work, out var orbits, multiRoot: true); - GravityLowering.Lower(zone, 0f, ref wells); - field = GravityLowering.CreateField(material); - - // Three frames through the one buffer, as ZoneRenderer.Update runs it: the bodies as built, then two moves (an - // orbit's Position is what Zone.GetHeight reads). A move keeps the tree's geometry, since a rail never leaves - // its parent's distance and the walk skips a subtree outside its reach: the sun is the root, the planet is - // its Distance from the sun, the planetoid its Distance from the planet. A lowering that mirrors an axis or - // stops refreshing the upload agrees with the sim in the first frame only where it is symmetric. - CheckFrame("built", zone, orbits); - orbits[1].Position = Around(orbits[0], orbits[1], .31f); - orbits[2].Position = Around(orbits[1], orbits[2], .77f); - orbits[5].Position = Around(orbits[1], orbits[5], .41f); - GravityLowering.Lower(zone, 0f, ref wells); - CheckFrame("moved", zone, orbits); - orbits[0].Position = new float2(210f, -95f); - orbits[1].Position = Around(orbits[0], orbits[1], .52f); - orbits[2].Position = Around(orbits[1], orbits[2], .05f); - orbits[5].Position = Around(orbits[1], orbits[5], .93f); - GravityLowering.Lower(zone, 0f, ref wells); - CheckFrame("moved-again", zone, orbits); - if (_maxTau <= 1f) Fail("series-branch", $"the largest tau over the drawn bounded terms is {_maxTau:G4}; no window draws the series branch"); - Debug.Log($"{Tag} largest drawn tau {_maxTau:G4}"); - Debug.Log($"{Tag} max error {_maxError:G4} u (tolerance {Tolerance:G4}); max gradient angle {_maxAngle:F2} degrees (limit {GradientDegrees:F0})"); - - CheckWiring(settings); - Debug.Log(_ok ? $"{Tag} PASS" : $"{Tag} FAIL: see errors above"); - } - catch (Exception e) - { - Debug.LogError($"{Tag} FAIL exception: {e}"); - _ok = false; - } - finally - { - Application.logMessageReceived -= OnLog; - if (field != null) UnityEngine.Object.DestroyImmediate(field); - wells?.Release(); - try { Directory.Delete(work, true); } catch { } - } - EditorApplication.Exit(_ok ? 0 : 1); - } - - static float Core(Zone zone, float mass) => zone.Settings.RocheLimit.Evaluate(mass); - - // Where an orbit lies when it stands `turns` round its parent at its Distance. - static float2 Around(Orbit parent, Orbit child, float turns) => parent.Position + child.Data.Distance * OrbitData.Evaluate(turns); - - static Vector2 At(Orbit orbit) => new Vector2(orbit.Position.x, orbit.Position.y); - - // Orbits 0-2 are the sun, the planet and the planetoid, each window centred where the body is now; orbit 3 is the - // body of no strength, orbit 4 the second sun and orbit 5 the planet's moon inside its Roche limit (whose band has - // tau above 1: the series branch of the shader). The zone window holds all of them; the far window is centred on the - // zone node, so its band (nothing inside A, the zone's mass beyond Beta A) is drawn. A window draws a term when - // the term's disc reaches it; the largest tau over the drawn terms must exceed 1 or the series branch went unchecked. - static void CheckFrame(string frame, Zone zone, Orbit[] orbits) - { - CheckTexels(frame + "-planetoid", zone, At(orbits[2]), 4f * Core(zone, 29.2f)); - CheckTexels(frame + "-planet", zone, At(orbits[1]), 4f * Core(zone, 273.9f)); - CheckTexels(frame + "-sun", zone, At(orbits[0]), 4f * Core(zone, 14152f)); - CheckTexels(frame + "-zone", zone, Vector2.zero, 1.05f * zone.Pack.Radius); - var centre = new Vector2(zone.Wells.Centre.x, zone.Wells.Centre.y); - var span = 0f; - foreach (var root in new[] { orbits[0], orbits[4] }) - span = Math.Max(span, (At(root) - centre).magnitude + zone.Wells.Reach(zone.Orbits.First(o => o.Value == root).Key)); - // The wells have their own windows: out here a texel is 40 u wide, so only the ring from 0.9 A outward, where the - // zone node's band rises and the zone becomes one body, is measured. - CheckTexels(frame + "-far", zone, centre, 1.6f * span, .9f * span); - CheckGradient(zone, orbits.Select(At).ToArray()); - } - - // A sun (14152 at (-130, 85)), its planet (273.9, placed at (610, -240) at the pack's time), the planet's planetoid - // (29.2, placed at (670, -270)) and a body of mass 0, whose well has no strength (a legal body; its curves give - // c = 0 and R = 0), at (1700, 300): a family, so the band terms are drawn (the planet's and the sun's cusps and - // fades), off both axes and asymmetric, so the zone's wells sit where the verify says before any Update and a - // mirrored or swapped axis cannot agree with the sim. The sun and the zero-mass body are fixed roots. - internal static Zone BuildZone(GameSettings settings, string work, out Orbit[] orbits, float radius = 4182f, bool multiRoot = false) - { - var cache = AetheriaStores.Open(Path.Combine(work, "catalog.cc"), Path.Combine(work, "run.cc"), catalogWritable: true); - cache.Upsert(new VerseGrammar { Revision = 1 }); - cache.FlushAsync().Wait(); - var items = new ItemManager(1u, cache, new ProvenanceLedger(), settings.GameplaySettings, _ => { }); - var positions = new List { new Vector2(-130f, 85f), new Vector2(610f, -240f), new Vector2(670f, -270f), new Vector2(1700f, 300f) }; - var masses = new List { 14152f, 273.9f, 29.2f, 0f }; - var parents = new List { -1, 0, 1, -1 }; - if (multiRoot) - { - // A second sun (a second subzone, so the zone node exists) and a moon of the planet 0.6 of its Roche limit away. - positions.Add(new Vector2(-2400f, -1900f)); - masses.Add(3000f); - parents.Add(-1); - positions.Add(positions[1] + new Vector2(-.6f * settings.PlanetSettings.RocheLimit.Evaluate(273.9f), 0f)); - masses.Add(1f); - parents.Add(1); - } - var keys = new CultRecordKey[positions.Count]; - var pack = new ZonePack { Radius = radius }; - for (var i = 0; i < positions.Count; i++) - { - var data = new OrbitData { FixedPosition = new float2(positions[i].x, positions[i].y) }; - if (parents[i] >= 0) - { - var offset = positions[i] - positions[parents[i]]; - data.Parent = new CultRecordRef(keys[parents[i]]); - data.Distance = offset.magnitude; - data.Phase = Mathf.Atan2(offset.y, offset.x) / (2f * Mathf.PI); - } - var orbit = keys[i] = cache.Upsert(data).Key; - var body = cache.Upsert(new PlanetData - { Name = "Body " + i, Orbit = new CultRecordRef(orbit), Mass = masses[i] }).Key; - pack.Orbits.Add(new CultRecordRef(orbit)); - pack.Planets.Add(new CultRecordRef(body)); - } - var zone = new Zone(items, settings.PlanetSettings, pack, new GalaxyZone { Name = "Gravity Parity", Owner = null }, null); - orbits = keys.Select(k => zone.Orbits[k]).ToArray(); - return zone; - } - - // Renders the field through a downward orthographic camera that culls layer 9 only, centred on `centre` with - // half-size `half`, and returns the depth of every texel with the world xz of the texel's centre, which is asked - // of the camera rather than assumed. - static void Render(Vector2 centre, float half, out float[] depth, out Vector2[] world) - { - var rt = new RenderTexture(Size, Size, 0, RenderTextureFormat.RFloat) { filterMode = FilterMode.Point }; - var cameraObject = new GameObject("Gravity Parity Camera"); - var read = new Texture2D(Size, Size, TextureFormat.RFloat, false); - var previous = RenderTexture.active; - try - { - var camera = cameraObject.AddComponent(); - camera.orthographic = true; - camera.orthographicSize = half; - camera.aspect = 1f; - camera.nearClipPlane = .3f; - camera.farClipPlane = 1000f; - camera.cullingMask = 1 << GravityLowering.FieldLayer; - camera.clearFlags = CameraClearFlags.SolidColor; - camera.backgroundColor = Color.black; - camera.allowHDR = false; - camera.allowMSAA = false; - camera.targetTexture = rt; - cameraObject.transform.SetPositionAndRotation(new Vector3(centre.x, 100f, centre.y), Quaternion.Euler(90f, 0f, 0f)); - camera.Render(); - - RenderTexture.active = rt; - read.ReadPixels(new Rect(0, 0, Size, Size), 0, 0); - read.Apply(); - depth = read.GetPixelData(0).ToArray(); - world = new Vector2[Size * Size]; - for (var y = 0; y < Size; y++) - for (var x = 0; x < Size; x++) - { - var p = camera.ViewportToWorldPoint(new Vector3((x + .5f) / Size, (y + .5f) / Size, 100f)); - world[y * Size + x] = new Vector2(p.x, p.z); - } - } - finally - { - RenderTexture.active = previous; - UnityEngine.Object.DestroyImmediate(cameraObject); - UnityEngine.Object.DestroyImmediate(read); - rt.Release(); - UnityEngine.Object.DestroyImmediate(rt); - } - } - - // The largest tau = (a^2 + eps^2) / (b^2 - a^2) over the bounded terms whose disc reaches the window's square. - static void NoteTau(Zone zone, Vector2 centre, float half) - { - foreach (var term in zone.Wells.Terms) - { - if (float.IsPositiveInfinity(term.Outer)) continue; - var at = term.Node.IsSet() ? zone.Orbits[term.Node].Position : zone.Wells.Centre; - if (Math.Abs(at.x - centre.x) > half + term.Outer || Math.Abs(at.y - centre.y) > half + term.Outer) continue; - _maxTau = Math.Max(_maxTau, (term.Inner * term.Inner + term.Softening * term.Softening) / (term.Outer * term.Outer - term.Inner * term.Inner)); - } - } - - static void CheckTexels(string window, Zone zone, Vector2 centre, float half, float ringFrom = 0f) - { - Render(centre, half, out var depth, out var world); - NoteTau(zone, centre, half); - var worst = 0f; - var live = 0; - var measured = 0; - for (var i = 0; i < depth.Length; i++) - { - if ((world[i] - centre).magnitude < ringFrom) continue; - measured++; - var expected = -zone.GetHeight(new float2(world[i].x, world[i].y)); - if (float.IsNaN(depth[i])) { Fail($"{window}-texels", $"texel {i}: NaN"); return; } - var error = Math.Abs(depth[i] - expected); - worst = Math.Max(worst, error); - if (Math.Abs(expected) > 1f) live++; - if (error > Tolerance) - { - Fail($"{window}-texels", $"texel {i} at ({world[i].x:F2}, {world[i].y:F2}): expected {expected:G6}, drawn {depth[i]:G6}, error {error:G4} > {Tolerance:G4}"); - return; - } - } - _maxError = Math.Max(_maxError, worst); - // A window that draws nothing agrees with a zone that is flat: the check must be live. - if (live < measured / 2) Fail($"{window}-texels", $"only {live} of {measured} texels are deeper than 1 u; the check is vacuous"); - Debug.Log($"{Tag} {window}: {depth.Length} texels, max error {worst:G4} u"); - } - - // The texture's central difference (over two 4 u texels, mid-zone) points where GetForce does: depth = -h, so its - // gradient is the force over the exaggeration. This is what the slope readers (the shader's slopeFlow, the nebula - // surface normal, the drawn grid) take from the texture. - static void CheckGradient(Zone zone, Vector2[] bodies) - { - Render(new Vector2(1500f, 0f), 512f, out var depth, out var world); - var compared = 0; - for (var y = 1; y < Size - 1; y++) - for (var x = 1; x < Size - 1; x++) - { - var here = world[y * Size + x]; - if (bodies.Any(b => (b - here).magnitude < 16f)) continue; - // The world step of each texel axis is read from the camera, so a flipped or rotated target is still measured. - var au = world[y * Size + x + 1] - world[y * Size + x - 1]; - var av = world[(y + 1) * Size + x] - world[(y - 1) * Size + x]; - var du = depth[y * Size + x + 1] - depth[y * Size + x - 1]; - var dv = depth[(y + 1) * Size + x] - depth[(y - 1) * Size + x]; - var det = au.x * av.y - au.y * av.x; - var g = new Vector2((du * av.y - dv * au.y) / det, (dv * au.x - du * av.x) / det); - var f = zone.GetForce(new float2(here.x, here.y)); - if (CultMath.math.length(f) < FlatForce) continue; // between the subzones the ground is flat: no direction to compare - var angle = Vector2.Angle(g, new Vector2(f.x, f.y)); - if (float.IsNaN(angle) || angle > GradientDegrees) - { - Fail("gradient", $"at ({here.x:F1}, {here.y:F1}) the drawn slope points {angle:F2} degrees from the force (limit {GradientDegrees:F0})"); - return; - } - _maxAngle = Math.Max(_maxAngle, angle); - compared++; - } - if (compared < Size * Size / 2) Fail("gradient", $"only {compared} texels were compared"); - } - - // Main Menu.unity has no ZoneRenderer, so no Gravity Field and no lowered potential: its gravity cameras draw the - // menu's own brush objects (Boundary on layer 9, the Waves on layer 10) and are presentation by spec (follow-up - // menu-grid-brushes), not a reader of the potential. This pins that: a ZoneRenderer in the menu would make its - // cameras readers of the field, and they would have to cull layer 9 alone like ARPG's. - static void CheckTestSceneWiring() - { - EditorSceneManager.OpenScene("Assets/Scenes/TestScene.unity", OpenSceneMode.Single); - try - { - if (CheckPatchCameras("TestScene.unity") < 1) Fail("wiring", "no Fog Patch Displacement camera in TestScene.unity"); - } - finally - { - EditorSceneManager.NewScene(NewSceneSetup.EmptyScene, NewSceneMode.Single); - } - } - - static void CheckMenuWiring() - { - var scene = EditorSceneManager.OpenScene("Assets/Scenes/Main Menu.unity", OpenSceneMode.Single); - try - { - if (UnityEngine.Object.FindFirstObjectByType(FindObjectsInactive.Include) != null) - Fail("wiring", "Main Menu.unity has a ZoneRenderer: its gravity cameras now read the Gravity Field and must cull layer 9 alone"); - var seen = 0; - foreach (var camera in UnityEngine.Object.FindObjectsByType(FindObjectsInactive.Include, FindObjectsSortMode.None)) - { - if (camera.targetTexture == null || camera.targetTexture.name != "Fog Surface Displacement") continue; - seen++; - const int menuBrushLayers = (1 << 9) | (1 << 10); - if (camera.cullingMask != menuBrushLayers) - Fail("wiring", $"Main Menu camera {camera.name} culls mask {camera.cullingMask}, not the menu brush layers 9 and 10"); - } - if (seen != 1) Fail("wiring", $"{seen} Fog Surface Displacement cameras in Main Menu.unity, expected 1"); - if (CheckPatchCameras("Main Menu.unity") < 1) Fail("wiring", "no Fog Patch Displacement camera in Main Menu.unity"); - } - finally - { - EditorSceneManager.NewScene(NewSceneSetup.EmptyScene, NewSceneMode.Single); - } - } - - // Every scene's Fog Patch Displacement camera: cloudDensity adds the R32 gravity height to the patch texture, so - // a patch camera that culls the gravity layer counts the field twice. Returns how many it found in the open scene. - static int CheckPatchCameras(string sceneName) - { - var found = 0; - foreach (var camera in UnityEngine.Object.FindObjectsByType(FindObjectsInactive.Include, FindObjectsSortMode.None)) - { - if (camera.targetTexture == null || camera.targetTexture.name != "Fog Patch Displacement") continue; - found++; - if ((camera.cullingMask & 1 << GravityLowering.FieldLayer) != 0) - Fail("wiring", $"camera {camera.name} (target Fog Patch Displacement) in {sceneName} culls layer {GravityLowering.FieldLayer}, the gravity layer"); - } - return found; - } - - static void CheckWiring(GameSettings settings) - { - var scene = EditorSceneManager.OpenScene("Assets/Scenes/ARPG.unity", OpenSceneMode.Single); - try - { - var gravityTargets = new[] { "Fog Surface Displacement", "Slime Gravity", "MinimapGravity" }; - var seen = 0; - foreach (var camera in UnityEngine.Object.FindObjectsByType(FindObjectsInactive.Include, FindObjectsSortMode.None)) - { - if (camera.targetTexture == null || !gravityTargets.Contains(camera.targetTexture.name)) continue; - seen++; - if (camera.cullingMask != 1 << GravityLowering.FieldLayer) - Fail("wiring", $"camera {camera.name} (target {camera.targetTexture.name}) culls mask {camera.cullingMask}, not layer {GravityLowering.FieldLayer} alone"); - } - if (seen < gravityTargets.Length) Fail("wiring", $"only {seen} gravity cameras found in ARPG.unity"); - - // The patch texture is half-float: it holds the patch layers only, the nebula reads gravity from the R32 surface. - if (CheckPatchCameras("ARPG.unity") != 1) Fail("wiring", "ARPG.unity does not have exactly 1 Fog Patch Displacement camera"); - - // The map screen's gravity camera has no target until MapRenderer gives it one at run time. - var map = UnityEngine.Object.FindFirstObjectByType(FindObjectsInactive.Include); - if (map == null || map.GravityCamera == null) Fail("wiring", "no MapRenderer.GravityCamera in ARPG.unity"); - else if (map.GravityCamera.cullingMask != 1 << GravityLowering.FieldLayer) - Fail("wiring", $"MapRenderer.GravityCamera culls mask {map.GravityCamera.cullingMask}, not layer {GravityLowering.FieldLayer} alone"); - - var renderer = UnityEngine.Object.FindFirstObjectByType(FindObjectsInactive.Include); - if (renderer == null) Fail("wiring", "no ZoneRenderer in ARPG.unity"); - else if (renderer.GravityField == null || renderer.GravityField.shader.name != "Brushes/Gravity Field") - Fail("wiring", "ZoneRenderer.GravityField is not a Brushes/Gravity Field material"); - - foreach (var r in UnityEngine.Object.FindObjectsByType(FindObjectsInactive.Include, FindObjectsSortMode.None)) - if (r.gameObject.layer == GravityLowering.FieldLayer) - Fail("wiring", $"renderer {r.name} in ARPG.unity sits on layer {GravityLowering.FieldLayer}"); - } - finally - { - EditorSceneManager.NewScene(NewSceneSetup.EmptyScene, NewSceneMode.Single); - } - - CheckMenuWiring(); - CheckTestSceneWiring(); - - foreach (var path in new[] - { - "Assets/Prefabs/RPG/Planets/Planet.prefab", "Assets/Prefabs/RPG/Planets/Gas Giant.prefab", - "Assets/Prefabs/RPG/Planets/Sun.prefab", "Assets/Prefabs/RPG/Wormhole 1.prefab" - }) - { - var prefab = AssetDatabase.LoadAssetAtPath(path); - if (prefab == null) { Fail("wiring", $"no prefab at {path}"); continue; } - foreach (var r in prefab.GetComponentsInChildren(true)) - if (r.gameObject.layer == GravityLowering.FieldLayer) - Fail("wiring", $"renderer {r.name} in {path} sits on layer {GravityLowering.FieldLayer}"); - } - } - } -} diff --git a/Assets/Scripts/Editor/MapBeltPerf.cs b/Assets/Scripts/Editor/MapBeltPerf.cs deleted file mode 100644 index ea3eac5c0..000000000 --- a/Assets/Scripts/Editor/MapBeltPerf.cs +++ /dev/null @@ -1,116 +0,0 @@ -using System; -using System.Diagnostics; -using System.IO; -using System.Linq; -using GameCult.Caching; -using UnityEditor; -using CultMath; -using UnityEngine; -using float4 = CultMath.float4; -using Debug = UnityEngine.Debug; - -// The map's belt cost per frame, CPU milliseconds and managed allocation, for belts of 1000, 2250 (the generated -// maximum, Settings.asset) and 4000 asteroids: the base revision's AsteroidBeltUI.Update (MapBeltPerfBase, a verbatim copy) -// and MapPresenter's belt upload and draw, each as the median and interquartile range of 21 runs of 300 frames after -// a warm-up, in this one Unity job. CPU time only: GPU cost is not covered. Needs a GPU device. -// -// Unity -batchmode -projectPath -executeMethod MapBeltPerf.Run -logFile -public static class MapBeltPerf -{ - private const int Warmup = 60, Frames = 300, RunCount = 21; - - public static void Run() - { - var work = Path.Combine(Path.GetTempPath(), $"map-belt-perf-{Guid.NewGuid():N}"); - try - { - Directory.CreateDirectory(work); - foreach (var count in new[] { 1000, 2250, 4000 }) Measure(work, count); - EditorApplication.Exit(0); - } - catch (Exception exception) - { - Debug.LogException(exception); - EditorApplication.Exit(1); - } - } - - private static void Measure(string work, int count) - { - var settings = AssetDatabase.LoadAssetAtPath("Assets/Resources/Settings.asset"); - var cache = AetheriaStores.Open(Path.Combine(work, $"c{count}.cc"), Path.Combine(work, $"r{count}.cc"), catalogWritable: true); - cache.Upsert(new VerseGrammar { Revision = 1 }); - var sunOrbit = cache.Upsert(new OrbitData()).Key; - var sunKey = cache.Upsert(new PlanetData { Name = "Sun", Orbit = new CultRecordRef(sunOrbit), Mass = 400f }).Key; - var beltOrbit = cache.Upsert(new OrbitData { Parent = new CultRecordRef(sunOrbit), Distance = 900f, Phase = .42f }).Key; - var asteroids = Enumerable.Range(0, count).Select(i => new Asteroid - { Distance = 120f + i * .01f, Phase = CultMath.math.frac(i * .618f), Size = CultMath.math.frac(i * .37f + .1f), RotationSpeed = .15f + i * 1e-4f }).ToArray(); - var beltKey = cache.Upsert(new AsteroidBeltData { Orbit = new CultRecordRef(beltOrbit), Asteroids = asteroids }).Key; - var pack = new ZonePack - { - Orbits = { new CultRecordRef(sunOrbit), new CultRecordRef(beltOrbit) }, - Planets = { new CultRecordRef(sunKey), new CultRecordRef(beltKey) }, - Radius = 5000f, Mass = 10000f, Time = 0 - }; - var items = new ItemManager(1u, cache, new ProvenanceLedger(), settings.GameplaySettings, _ => { }); - var zone = new Zone(items, new PlanetSettings - { - BodyRadius = new ExponentialCurve(), WellStrength = new ExponentialCurve { Multiplier = 1f, Exponent = 1f }, - RocheLimit = new ExponentialCurve { Constant = 2f }, - AsteroidSize = new ExponentialLerp { Minimum = 2f, Maximum = 9f, Exponent = 1.7f }, - AsteroidHitpoints = new ExponentialLerp { Minimum = 10f, Maximum = 300f, Exponent = 2f }, - AsteroidRespawnTime = new ExponentialLerp { Minimum = 5f, Maximum = 60f, Exponent = 1f } - }, pack, new GalaxyZone { Name = "Perf", Owner = null }, null); - - var transforms = new float4[count]; - var presenter = new MapPresenter(new Material[0], AssetDatabase.LoadAssetAtPath("Assets/Materials/UI/MapAsteroid.mat"), 4, 4, 3f); - presenter.RegisterBelt(beltKey, transforms); - var baseBelt = new MapBeltPerfBase(zone, zone.AsteroidBelts[beltKey], 4, 4, 3f); - - Report("base", count, Runs(zone, beltKey, transforms, () => baseBelt.Update(transforms, 0f))); - Report("head", count, Runs(zone, beltKey, transforms, () => presenter.Draw(zone, 0))); - presenter.Clear(); - } - - // Each run is Frames frames after Warmup frames; the figure is one run's CPU ms per frame and managed bytes per frame. - private static (double ms, long bytes)[] Runs(Zone zone, CultRecordKey beltKey, float4[] transforms, Action frame) - { - var results = new (double, long)[RunCount]; - var stopwatch = new Stopwatch(); - var time = 0.0; - for (var run = -1; run < RunCount; run++) - { - stopwatch.Reset(); - long allocated = 0; - for (var i = 0; i < Warmup + Frames; i++) - { - zone.EvaluateBelt(beltKey, transforms, time += 0.016); - var bytes = GC.GetAllocatedBytesForCurrentThread(); - if (i >= Warmup) stopwatch.Start(); - frame(); - if (i >= Warmup) stopwatch.Stop(); - if (i >= Warmup) allocated += GC.GetAllocatedBytesForCurrentThread() - bytes; - } - if (run >= 0) results[run] = (stopwatch.Elapsed.TotalMilliseconds / Frames, allocated / Frames); - } - return results; - } - - private static double Quantile(double[] sorted, double q) - { - var at = q * (sorted.Length - 1); - var low = (int)Math.Floor(at); - var high = Math.Min(low + 1, sorted.Length - 1); - return sorted[low] + (sorted[high] - sorted[low]) * (at - low); - } - - private static void Report(string revision, int count, (double ms, long bytes)[] runs) - { - var ms = runs.Select(r => r.ms).OrderBy(v => v).ToArray(); - var bytes = runs.Select(r => (double)r.bytes).OrderBy(v => v).ToArray(); - var units = Process.GetProcessesByName("Unity").Length; - Debug.Log($"[MapBeltPerf] revision={revision} asteroids={count} runs={runs.Length} frames_per_run={Frames} " + - $"cpu_ms_median={Quantile(ms, .5):F4} iqr={Quantile(ms, .25):F4}-{Quantile(ms, .75):F4} " + - $"gc_bytes_median={Quantile(bytes, .5):F0} unity_processes={units} cpus={Environment.ProcessorCount}"); - } -} diff --git a/Assets/Scripts/Editor/MapBeltPerf.cs.meta b/Assets/Scripts/Editor/MapBeltPerf.cs.meta deleted file mode 100644 index 5a06251b4..000000000 --- a/Assets/Scripts/Editor/MapBeltPerf.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 2bf3d3dcd7e3dd940add2640db93e3fe \ No newline at end of file diff --git a/Assets/Scripts/Editor/MapBeltPerfBase.cs b/Assets/Scripts/Editor/MapBeltPerfBase.cs deleted file mode 100644 index 6470b9c9a..000000000 --- a/Assets/Scripts/Editor/MapBeltPerfBase.cs +++ /dev/null @@ -1,88 +0,0 @@ -using GameCult.Caching; -using CultMath; -using UnityEngine; -using static CultMath.math; -using float2 = CultMath.float2; -using float4 = CultMath.float4; -using Random = UnityEngine.Random; - -// The base revision's per-frame belt map path, copied from ZoneRenderer.cs at da6fe033 (class AsteroidBeltUI) so that -// MapBeltPerf can measure it beside MapPresenter in one job. Only the lead it read from ActionGameManager.Clock is -// fixed at zero. Not used by the game. -public class MapBeltPerfBase -{ - private Vector3[] _vertices; - private Vector3[] _normals; - private Vector2[] _uvs; - private int[] _indices; - private CultRecordKey _orbitParent; - private Mesh _mesh; - private float _size; - private Zone _zone; - private AsteroidBelt _belt; - private float _scale; - - public MapBeltPerfBase(Zone zone, AsteroidBelt belt, int spritesheetWidth, int spritesheetHeight, float scale) - { - _belt = belt; - _zone = zone; - var orbit = zone.Orbits[belt.Data.Orbit.Key]; - _orbitParent = orbit.Data.Parent.Key; - _vertices = new Vector3[_belt.Data.Asteroids.Length * 4]; - _normals = new Vector3[_belt.Data.Asteroids.Length * 4]; - _uvs = new Vector2[_belt.Data.Asteroids.Length * 4]; - _indices = new int[_belt.Data.Asteroids.Length * 6]; - _scale = scale; - - var maxDist = 0f; - var spriteSize = float2(1f / spritesheetWidth, 1f / spritesheetHeight); - // vertex order: bottom left, top left, top right, bottom right - for (var i = 0; i < belt.Data.Asteroids.Length; i++) - { - if (belt.Data.Asteroids[i].Distance > maxDist) - maxDist = belt.Data.Asteroids[i].Distance; - var spriteX = Random.Range(0, spritesheetWidth); - var spriteY = Random.Range(0, spritesheetHeight); - - _uvs[i * 4] = new Vector2(spriteX * spriteSize.x, spriteY * spriteSize.y); - _uvs[i * 4 + 1] = new Vector2(spriteX * spriteSize.x, spriteY * spriteSize.y + spriteSize.y); - _uvs[i * 4 + 2] = new Vector2(spriteX * spriteSize.x + spriteSize.x, spriteY * spriteSize.y + spriteSize.y); - _uvs[i * 4 + 3] = new Vector2(spriteX * spriteSize.x + spriteSize.x, spriteY * spriteSize.y); - - _indices[i * 6] = i * 4; - _indices[i * 6 + 1] = i * 4 + 1; - _indices[i * 6 + 2] = i * 4 + 3; - _indices[i * 6 + 3] = i * 4 + 3; - _indices[i * 6 + 4] = i * 4 + 1; - _indices[i * 6 + 5] = i * 4 + 2; - } - - for (var i = 0; i < _normals.Length; i++) _normals[i] = -Vector3.forward; - - _mesh = new Mesh(); - _mesh.vertices = _vertices; - _mesh.uv = _uvs; - _mesh.triangles = _indices; - _mesh.normals = _normals; - _mesh.bounds = new Bounds(Vector3.zero, Vector3.one * maxDist); - _size = maxDist; - } - - public void Update(float4[] transforms, float height) - { - var parentPosition = DrawAhead.Orbit(_zone, _orbitParent, 0f); - for (var i = 0; i < transforms.Length; i++) - { - var transform = transforms[i]; - var rotation = Quaternion.Euler(90, transform.z, 0); - var position = new Vector3(transform.x, height, transform.y); - _vertices[i * 4] = rotation * new Vector3(-transform.w * _scale, -transform.w * _scale, 0) + position; - _vertices[i * 4 + 1] = rotation * new Vector3(-transform.w * _scale, transform.w * _scale, 0) + position; - _vertices[i * 4 + 2] = rotation * new Vector3(transform.w * _scale, transform.w * _scale, 0) + position; - _vertices[i * 4 + 3] = rotation * new Vector3(transform.w * _scale, -transform.w * _scale, 0) + position; - } - - _mesh.bounds = new Bounds(new Vector3(parentPosition.x, 0, parentPosition.y), Vector3.one * (_size * 2)); - _mesh.vertices = _vertices; - } -} diff --git a/Assets/Scripts/Editor/MapBeltPerfBase.cs.meta b/Assets/Scripts/Editor/MapBeltPerfBase.cs.meta deleted file mode 100644 index 662341fb1..000000000 --- a/Assets/Scripts/Editor/MapBeltPerfBase.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: c3e6b631c94f2384c87cf1906907af9f \ No newline at end of file diff --git a/Assets/Scripts/Editor/MapPresenterCapture.cs b/Assets/Scripts/Editor/MapPresenterCapture.cs deleted file mode 100644 index 1e0a727f0..000000000 --- a/Assets/Scripts/Editor/MapPresenterCapture.cs +++ /dev/null @@ -1,119 +0,0 @@ -using System; -using System.IO; -using UnityEditor; -using UnityEditor.SceneManagement; -using UnityEngine; - -// Proof that a planet icon and a ping tint reach the pixels of the real map cameras when the planet's well is deeper -// than 1000 below the camera. The ARPG scene's own "Map Overlays" and "Map Tint" cameras (position, orthographic size, -// clip planes and culling mask as authored) render into a render texture on a solid black background. For each, in -// order: a control render with nothing drawn; a render with the thing placed 1100 below the camera (a plain quad, and the -// PingEffect prefab), which must equal the control because the far plane clips it; then MapPresenter's draw of the sun -// (well deeper than 2000) or the PingEffect prefab placed where EntityInstance places it, which must differ from the -// control at its pixel. A capture that draws nothing fails the last check, and one that cannot tell drawn from clipped -// fails the middle one. -// -// Unity -batchmode -projectPath -executeMethod MapPresenterCapture.Run -logFile -// -// Needs a GPU device; do not pass -nographics or -quit: Run exits the Editor itself, 0 on success and 1 on any failure. -public static class MapPresenterCapture -{ - private const int Size = 64; - - public static void Run() - { - var work = Path.Combine(Path.GetTempPath(), $"map-presenter-capture-{Guid.NewGuid():N}"); - try - { - Directory.CreateDirectory(work); - Check(work); - Debug.Log("[MapPresenterCapture] ok"); - EditorApplication.Exit(0); - } - catch (Exception exception) - { - Debug.LogException(exception); - EditorApplication.Exit(1); - } - } - - private static void Require(bool condition, string what) - { - if (!condition) throw new InvalidOperationException(what); - } - - private static Camera SceneCamera(string name) - { - foreach (var camera in UnityEngine.Object.FindObjectsByType(FindObjectsInactive.Include, FindObjectsSortMode.None)) - if (camera.name == name) return camera; - throw new InvalidOperationException($"No camera named {name} in the scene."); - } - - private static Color Render(Camera camera, RenderTexture target, Vector3 at) - { - camera.targetTexture = target; - camera.clearFlags = CameraClearFlags.SolidColor; - camera.backgroundColor = Color.black; - camera.Render(); - var viewport = camera.WorldToViewportPoint(new Vector3(at.x, 0, at.z)); - var previous = RenderTexture.active; - RenderTexture.active = target; - var read = new Texture2D(Size, Size, TextureFormat.RGBA32, false); - read.ReadPixels(new Rect(0, 0, Size, Size), 0, 0); - RenderTexture.active = previous; - var pixel = read.GetPixel(Mathf.Clamp((int)(viewport.x * Size), 0, Size - 1), Mathf.Clamp((int)(viewport.y * Size), 0, Size - 1)); - UnityEngine.Object.DestroyImmediate(read); - return pixel; - } - - private static float Distance(Color a, Color b) => Mathf.Abs(a.r - b.r) + Mathf.Abs(a.g - b.g) + Mathf.Abs(a.b - b.b); - - private static void Check(string work) - { - EditorSceneManager.OpenScene("Assets/Scenes/ARPG.unity", OpenSceneMode.Single); - var f = MapPresenterSmoke.Build(work, flatIcons: true); - f.Map.SetMinimapScale(300f); - var target = new RenderTexture(Size, Size, 24, RenderTextureFormat.ARGB32); - var layer = LayerMask.NameToLayer("Minimap"); - - // Planet: the sun's icon through the map overlays camera. - var overlays = SceneCamera("Map Overlays"); - Require((overlays.cullingMask & (1 << layer)) != 0, "The Map Overlays camera does not see the Minimap layer."); - var well = f.Zone.GetHeight(DrawAhead.Orbit(f.Zone, f.Zone.PlanetInstances[f.SunKey].BodyData.Orbit.Key, 0), 0); - Require(well < -1000f, $"The fixture sun's well is {well}, not deeper than 1000."); - Require(f.Map.TryDrawn(f.SunKey, out var sun), "The sun registered no icon."); - var sunAt = sun.GetPosition(); - // Control: the pixel with nothing queued. Then a quad 1100 below the camera, deeper than the far plane, which must - // leave the pixel as it was. Then the presenter's draw, which must change it. Draws queue for the cameras that - // render after them, so the order is empty, deep, drawn. - var empty = Render(overlays, target, sunAt); - var quad = GameObject.CreatePrimitive(PrimitiveType.Quad); - var deepMesh = quad.GetComponent().sharedMesh; - var deepMaterial = new Material(Shader.Find("Unlit/Color")) { color = Color.white }; - UnityEngine.Object.DestroyImmediate(quad); - Graphics.RenderMesh(new RenderParams(deepMaterial) { layer = layer }, deepMesh, 0, - Matrix4x4.TRS(new Vector3(sunAt.x, -1100f, sunAt.z), Quaternion.Euler(90, 0, 0), Vector3.one * 300f)); - var deep = Render(overlays, target, sunAt); - Require(Distance(deep, empty) < .01f, $"A mesh 1100 below the camera drew: {deep} against {empty}."); - f.Map.Draw(f.Zone, 0); - var drawn = Render(overlays, target, sunAt); - Require(Distance(drawn, empty) > .3f, $"The sun's icon is not in the pixels: drawn {drawn}, empty {empty}."); - - // Ping tint: the PingEffect prefab where EntityInstance places it, through the map tint camera. - var tint = SceneCamera("Map Tint"); - var ping = (GameObject)PrefabUtility.InstantiatePrefab(AssetDatabase.LoadAssetAtPath("Assets/Content/Prefabs/PingEffect.prefab")); - ping.transform.localScale = Vector3.one * 300f; - var pingAt = new Vector3(sunAt.x, MapPresenter.PlaneY, sunAt.z); - ping.transform.position = pingAt; - ping.SetActive(false); - var untinted = Render(tint, target, pingAt); - ping.SetActive(true); - ping.transform.position = new Vector3(sunAt.x, -1100f, sunAt.z); - var deepPing = Render(tint, target, pingAt); - Require(Distance(deepPing, untinted) < .01f, $"A ping 1100 below the camera drew: {deepPing} against {untinted}."); - ping.transform.position = pingAt; - var tinted = Render(tint, target, pingAt); - Require(Distance(tinted, untinted) > .02f, $"The ping tint is not in the pixels: with {tinted}, without {untinted}."); - Debug.Log($"[MapPresenterCapture] well={well} sun drawn={drawn} empty={empty} deep={deep}; ping tinted={tinted} untinted={untinted} deep={deepPing}"); - } -} diff --git a/Assets/Scripts/Editor/MapPresenterCapture.cs.meta b/Assets/Scripts/Editor/MapPresenterCapture.cs.meta deleted file mode 100644 index 53caa5ee1..000000000 --- a/Assets/Scripts/Editor/MapPresenterCapture.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: cfa012aaae63b5044bdfd1b6b44ca9da \ No newline at end of file diff --git a/Assets/Scripts/Editor/MapPresenterSmoke.cs b/Assets/Scripts/Editor/MapPresenterSmoke.cs deleted file mode 100644 index cccc4883c..000000000 --- a/Assets/Scripts/Editor/MapPresenterSmoke.cs +++ /dev/null @@ -1,233 +0,0 @@ -using System; -using System.IO; -using System.Linq; -using System.Reflection; -using GameCult.Caching; -using UnityEditor; -using UnityEngine; -using CultMath; -using CultMath.UnityBridge; -using static CultMath.math; -using float2 = CultMath.float2; -using float3 = CultMath.float3; -using float4 = CultMath.float4; - -// Batch proof of MapPresenter's contract on a real Zone, without a scene: a sun with a very deep well, a belt, and ships -// registered through EntityInstance.SetEntity as the game does. Planet icons draw at the map plane inside both map -// cameras' clip range however deep the well, a rolled and pitched hull's icon turns by yaw alone, every kind registers one -// draw and leaves no icon child behind, a belt is one instanced draw of every asteroid, and an entity's fade reaches its -// icon the frame it is set. Not reached: prefab, mod ship, station and turret instances (they register through the same -// call), and the rendered pixels (a GPU capture). -// -// Unity -batchmode -projectPath -executeMethod MapPresenterSmoke.Run -logFile -// -// Do not pass -quit: Run exits the Editor itself, 0 on success and 1 on any failure. -public static class MapPresenterSmoke -{ - private const BindingFlags Any = BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic; - private const int Asteroids = 24; - - public static void Run() - { - var work = Path.Combine(Path.GetTempPath(), $"map-presenter-smoke-{Guid.NewGuid():N}"); - try - { - Directory.CreateDirectory(work); - Check(work); - Debug.Log("[MapPresenterSmoke] ok"); - EditorApplication.Exit(0); - } - catch (Exception exception) - { - Debug.LogException(exception); - EditorApplication.Exit(1); - } - } - - private static void Require(bool condition, string what) - { - if (!condition) throw new InvalidOperationException(what); - } - - private static void Awaken(Component component) => component.GetType().GetMethod("Awake", Any)?.Invoke(component, null); - - // flat: authored lying on the map plane (facing up), as a real icon is; the smoke's own icons are authored upright - // so that their rotation is exactly the yaw. - private static MeshRenderer NewIcon(Transform parent, bool flat) - { - var icon = GameObject.CreatePrimitive(PrimitiveType.Quad); - icon.layer = LayerMask.NameToLayer("Minimap"); - icon.transform.SetParent(parent, false); - if (flat) icon.transform.localRotation = Quaternion.Euler(90, 0, 0); - var renderer = icon.GetComponent(); - renderer.sharedMaterial = new Material(Shader.Find("Unlit/Color")) { color = new Color(1, 1, 1, .8f) }; - return renderer; - } - - // What Build leaves registered with a presenter, for the checks here and for MapPresenterCapture. - internal sealed class Fixture - { - public Zone Zone; - public MapPresenter Map; - public Ship Ship, Other; - public EntityInstance ShipInstance, OtherInstance; - public CultRecordKey SunKey, BeltKey; - public float4[] Belt; - public Transform Roots; - } - - private static void Check(string work) - { - var f = Build(work, flatIcons: false); - Checks(f); - } - - internal static Fixture Build(string work, bool flatIcons) - { - var settings = AssetDatabase.LoadAssetAtPath("Assets/Resources/Settings.asset") - ?? throw new InvalidOperationException("No Settings.asset."); - var planetSettings = new PlanetSettings - { - BodyRadius = new ExponentialCurve(), - WellStrength = new ExponentialCurve { Multiplier = 1f, Exponent = 1f }, - RocheLimit = new ExponentialCurve { Constant = 2f }, - AsteroidSize = new ExponentialLerp { Minimum = 2f, Maximum = 9f, Exponent = 1.7f }, - AsteroidHitpoints = new ExponentialLerp { Minimum = 10f, Maximum = 300f, Exponent = 2f }, - AsteroidRespawnTime = new ExponentialLerp { Minimum = 5f, Maximum = 60f, Exponent = 1f } - }; - var cache = AetheriaStores.Open(Path.Combine(work, "c.cc"), Path.Combine(work, "r.cc"), catalogWritable: true); - cache.Upsert(new VerseGrammar { Revision = 1 }); - var shape = new Shape(5, 4); - foreach (var cell in shape.AllCoordinates) shape[cell] = true; - cache.Upsert(new HullData { Name = "Smoke Hull", HullType = HullType.Ship, Shape = shape, Durability = 1000, Mass = 1000, Armor = 0 }); - var sunOrbit = cache.Upsert(new OrbitData()).Key; - var sunKey = cache.Upsert(new PlanetData { Name = "Sun", Orbit = new CultRecordRef(sunOrbit), Mass = 1e6f }).Key; - var rootOrbit = cache.Upsert(new OrbitData { Parent = new CultRecordRef(sunOrbit), Distance = 4000f, Phase = .17f }).Key; - var beltOrbit = cache.Upsert(new OrbitData { Parent = new CultRecordRef(rootOrbit), Distance = 900f, Phase = .42f }).Key; - var asteroids = Enumerable.Range(0, Asteroids).Select(i => new Asteroid - { Distance = 120f + i * 11.3f, Phase = frac(i * .618f), Size = frac(i * .37f + .1f), RotationSpeed = .15f + i * .037f }).ToArray(); - var beltKey = cache.Upsert(new AsteroidBeltData { Orbit = new CultRecordRef(beltOrbit), Asteroids = asteroids }).Key; - var pack = new ZonePack - { - Orbits = { new CultRecordRef(sunOrbit), new CultRecordRef(rootOrbit), new CultRecordRef(beltOrbit) }, - Planets = { new CultRecordRef(sunKey), new CultRecordRef(beltKey) }, - Radius = 5000f, Mass = 10000f, Time = 0 - }; - var ledger = new ProvenanceLedger(); - for (var i = 1; i <= 8; i++) ledger.Lots[i] = new Lot { Origin = new Attributed(), Quality = 1 }; - var items = new ItemManager(1u, cache, ledger, settings.GameplaySettings, _ => { }); - var zone = new Zone(items, planetSettings, pack, new GalaxyZone { Name = "Smoke", Owner = null }, null); - var hullRef = items.ItemData.RefOf(items.ItemData.GetByName("Smoke Hull")); - var ship = new Ship(items, zone, new EquippableItem { Data = hullRef, Durability = 1000, Lot = 1 }, new EntitySettings()); - var other = new Ship(items, zone, new EquippableItem { Data = hullRef, Durability = 1000, Lot = 2 }, new EntitySettings()); - ship.Position = float3(300, 50, 200); - other.Position = float3(-300, -90, 100); - zone.Admit(ship, piloted: false); - zone.Admit(other, piloted: false); - - // A hull heading 40 degrees from +z, pitched up 89.9 and rolled 30: its forward is almost vertical, where the pose's - // eulerAngles.y is the gimbal decomposition (yaw and roll folded together), not the heading. The heading is the - // forward projected onto the map plane, 40. The fixture asserts the two differ, so a yaw read from eulerAngles - // cannot pass. - var pose = Quaternion.Euler(0, 40, 0) * Quaternion.Euler(-89.9f, 0, 30); - var flatForward = pose * Vector3.forward; - Require(Mathf.Abs(Mathf.DeltaAngle(Mathf.Atan2(flatForward.x, flatForward.z) * Mathf.Rad2Deg, 40f)) < .5f, "The fixture's forward does not head 40."); - Require(Mathf.Abs(Mathf.DeltaAngle(pose.eulerAngles.y, 40f)) > 10f, $"The fixture's eulerAngles.y {pose.eulerAngles.y} is aligned with its heading."); - ship.Direction = float2(Mathf.Sin(40 * Mathf.Deg2Rad), Mathf.Cos(40 * Mathf.Deg2Rad)); - typeof(Ship).GetProperty("Rotation", Any).GetSetMethod(true).Invoke(ship, new object[] { new CultMath.quaternion(pose.x, pose.y, pose.z, pose.w) }); - - var map = new MapPresenter(new Material[0], AssetDatabase.LoadAssetAtPath("Assets/Materials/UI/MapAsteroid.mat"), 4, 4, 3f); - var roots = new GameObject("Smoke Roots").transform; - EntityInstance Bound(Entity entity) - { - var body = new GameObject(entity.Name); - body.transform.SetParent(roots); - var instance = body.AddComponent(); - Awaken(instance); - instance.HullColliders = new HullCollider[0]; - instance.RadiatorHardpoints = new RadiatorHardpoint[0]; - instance.ThrusterHardpoints = new ThrusterHardpoint[0]; - instance.WeaponHardpoints = new WeaponHardpoint[0]; - instance.ArticulationPoints = new ArticulationPoint[0]; - instance.MapIcon = NewIcon(body.transform, flatIcons); - var zoneRenderer = new GameObject("Smoke Zone Renderer").AddComponent(); - zoneRenderer.Settings = settings; - zoneRenderer.MapGravityMaterials = new Material[0]; - Awaken(zoneRenderer); - typeof(ZoneRenderer).GetProperty("Map").GetSetMethod(true).Invoke(zoneRenderer, new object[] { map }); - instance.SetEntity(zoneRenderer, entity); - return instance; - } - var shipInstance = Bound(ship); - var otherInstance = Bound(other); - var sunRoot = new GameObject("Smoke Sun").transform; - sunRoot.SetParent(roots); - map.RegisterPlanet(sunKey, NewIcon(sunRoot, flatIcons), sunRoot); - var belt = new float4[Asteroids]; - map.RegisterBelt(beltKey, belt); - zone.EvaluateBelt(beltKey, belt, DrawAhead.Time(zone, 0)); - map.SetFade(ship, 1f); - map.SetFade(other, 1f); - map.SetMinimapScale(2f); - map.Draw(zone, 0); - return new Fixture { Zone = zone, Map = map, Ship = ship, Other = other, ShipInstance = shipInstance, - OtherInstance = otherInstance, SunKey = sunKey, BeltKey = beltKey, Belt = belt, Roots = roots }; - } - - private static void Checks(Fixture f) - { - var (zone, map, ship, other, sunKey, beltKey, belt, roots) = (f.Zone, f.Map, f.Ship, f.Other, f.SunKey, f.BeltKey, f.Belt, f.Roots); - // Deep planet: the sun's field is deeper than 2000 below the plane, and its icon sits on the map plane inside both - // map cameras' clip range (minimap at y 10, map screen at y 1; near 0.3, far 1000, looking down). - var well = zone.GetHeight(DrawAhead.Orbit(zone, zone.PlanetInstances[sunKey].BodyData.Orbit.Key, 0), 0); - Require(well < -2000f, $"The fixture sun's well is {well}, not below -2000."); - Require(map.TryDrawn(sunKey, out var sunIcon), "The sun registered no icon."); - var y = sunIcon.GetPosition().y; - Require(y < 1f - .3f && y > 10f - 1000f && Mathf.Abs(y - MapPresenter.PlaneY) < .5f, $"The sun's icon is drawn at y {y}, not on the map plane."); - - // Axes: each icon sits at its sim position's planar x and z (a ship at (300, 200), the other at (-300, 100), the sun at - // its orbit), never swapped, and never at the 3D height (the ships ride at y 50 and -90, the sun's well is below -2000). - var shipAt = DrawAhead.Position(ship, 0); - Require(Mathf.Abs(shipAt.x - 300f) < 1e-3f && Mathf.Abs(shipAt.z - 200f) < 1e-3f, $"The ship's sim position is ({shipAt.x}, {shipAt.z}), not (300, 200)."); - var sunAt = DrawAhead.Orbit(zone, zone.PlanetInstances[sunKey].BodyData.Orbit.Key, 0); - Require(map.TryDrawn(ship, out var shipIcon, out _), "The ship registered no icon."); - Require(Mathf.Abs(shipIcon.GetPosition().x - 300f) < 1e-3f && Mathf.Abs(shipIcon.GetPosition().z - 200f) < 1e-3f, - $"The ship's icon is at ({shipIcon.GetPosition().x}, {shipIcon.GetPosition().z}), not its sim position (300, 200)."); - Require(map.TryDrawn(other, out var otherIcon, out _), "The second ship registered no icon."); - Require(Mathf.Abs(otherIcon.GetPosition().x + 300f) < 1e-3f && Mathf.Abs(otherIcon.GetPosition().z - 100f) < 1e-3f, - $"The second ship's icon is at ({otherIcon.GetPosition().x}, {otherIcon.GetPosition().z}), not (-300, 100)."); - Require(Mathf.Abs(sunIcon.GetPosition().x - sunAt.x) < 1e-3f && Mathf.Abs(sunIcon.GetPosition().z - sunAt.y) < 1e-3f, - $"The sun's icon is at ({sunIcon.GetPosition().x}, {sunIcon.GetPosition().z}), not its orbit ({sunAt.x}, {sunAt.y})."); - Require(Mathf.Abs(otherIcon.GetPosition().y - (MapPresenter.PlaneY + MapPresenter.ShipOffset)) < 1e-4f, "The second ship's icon took the 3D height."); - - // Tilted hull: the icon turns by the heading projected onto the map plane (40) times its authored rotation (identity here), with no roll or pitch. - var want = Quaternion.Euler(0, 40, 0); - Require(Quaternion.Angle(shipIcon.rotation, want) < .1f, $"The icon is rotated {shipIcon.rotation.eulerAngles}, not yaw 40 alone."); - Require(Vector3.Angle(shipIcon.rotation * Vector3.up, Vector3.up) < .1f, "The icon's up axis tilted with the hull."); - Require(Mathf.Abs(shipIcon.GetPosition().y - (MapPresenter.PlaneY + MapPresenter.ShipOffset)) < 1e-4f, "The ship's icon left the map plane."); - - // Every kind registers once: three icons drew, and no icon child remains under any registered transform. - Require(map.IconCount == 3 && map.IconDraws == 3, $"{map.IconCount} icons, {map.IconDraws} drawn; expected 3 and 3."); - Require(roots.GetComponentsInChildren(true).Length == 0, "An icon child remains under an entity or planet transform."); - - // A belt is one instanced draw of every asteroid, and its buffer holds this frame's floats. - Require(map.BeltDraws == 1 && map.LastBeltInstances == belt.Length, $"{map.BeltDraws} belt draws of {map.LastBeltInstances} instances; expected 1 of {belt.Length}."); - var read = new float4[belt.Length]; - map.ReadBelt(beltKey, read); - for (var i = 0; i < belt.Length; i++) - Require(read[i].x == belt[i].x && read[i].y == belt[i].y && read[i].z == belt[i].z && read[i].w == belt[i].w, $"Belt buffer differs from the frame's floats at {i}."); - - // Belts draw on the minimap with the map screen closed. - map.OpenMapScreen(false); - map.Draw(zone, 0); - Require(map.BeltDraws == 1, "A belt did not draw on the minimap with the map screen closed."); - - // Fade: half faded reaches the icon's colour alpha on the next draw; faded out draws nothing. - map.SetFade(ship, .5f); - map.Draw(zone, 0); - Require(map.TryDrawn(ship, out _, out var alpha) && Mathf.Abs(alpha - .4f) < 1e-3f, $"Icon alpha {alpha}, expected 0.8 * 0.5."); - map.SetFade(ship, 0f); - map.Draw(zone, 0); - Require(map.IconDraws == 2, $"{map.IconDraws} icons drew with one fully faded out; expected 2."); - } -} diff --git a/Assets/Scripts/Editor/MapPresenterSmoke.cs.meta b/Assets/Scripts/Editor/MapPresenterSmoke.cs.meta deleted file mode 100644 index 2fff0ea86..000000000 --- a/Assets/Scripts/Editor/MapPresenterSmoke.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 58982a1c397cc2f4d9706fd103af6654 \ No newline at end of file diff --git a/Assets/Scripts/Editor/NameTools.cs b/Assets/Scripts/Editor/NameTools.cs new file mode 100644 index 000000000..a048dce89 --- /dev/null +++ b/Assets/Scripts/Editor/NameTools.cs @@ -0,0 +1,93 @@ +using System.Buffers.Text; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text.RegularExpressions; +using MessagePack; +using CultMath; +using UnityEngine; +using UnityEditor; +using Random = CultMath.Random; + +public class NameTools : EditorWindow +{ + public int NameGeneratorMinLength = 5; + public int NameGeneratorMaxLength = 10; + public int NameGeneratorOrder = 4; + private int minWordLength = 4; + private TextAsset nameFile; + private MarkovNameGenerator _nameGenerator; + private bool _stripNumberTokens; + + + // Add menu named "My Window" to the Window menu + [MenuItem("Window/Aetheria/Name Tools")] + static void Init() + { + // Get existing open window or if none, make a new one: + NameTools window = (NameTools)EditorWindow.GetWindow(typeof(NameTools)); + window.Show(); + } + + bool HasNonASCIIChars(string str) + { + return (System.Text.Encoding.UTF8.GetByteCount(str) != str.Length); + } + + void OnGUI() + { + + nameFile = (TextAsset) EditorGUILayout.ObjectField("Name File", nameFile, typeof(TextAsset), false); + minWordLength = EditorGUILayout.IntField("Minimum File Word Length", minWordLength); + NameGeneratorMinLength = EditorGUILayout.IntField("Generated Minimum Word Length", NameGeneratorMinLength); + NameGeneratorMaxLength = EditorGUILayout.IntField("Generated Maximum Word Length", NameGeneratorMaxLength); + NameGeneratorOrder = EditorGUILayout.IntField("Generator Order", NameGeneratorOrder); + _stripNumberTokens = GUILayout.Toggle(_stripNumberTokens, "Strip Number Tokens"); + + if (GUILayout.Button("Clean Name File")) + { + var lines = nameFile.text.Split('\n'); + using StreamWriter outputFile = new StreamWriter(Path.Combine(Application.dataPath, nameFile.name + ".csv")); + var names = new HashSet(); + foreach (var line in lines) + { + var tokens = line.Split(',', ' '); + foreach (var t in tokens) + { + if (!HasNonASCIIChars(t)) + { + var s = new string(t.Where(c => char.IsLetter(c) || c == '-' || c == '`' || c == '\'').ToArray()).Trim().Trim('`','-'); + if(s.Length >= minWordLength && !names.Contains(s)) + { + names.Add(s); + outputFile.WriteLine(s); + } + } + } + } + } + + if (GUILayout.Button("Process Name File") && nameFile != null) + { + var names = new HashSet(); + var lines = nameFile.text.Split('\n'); + foreach (var line in lines) + { + foreach(var word in line.ToUpperInvariant().Split(' ', ',', '.', '"')) + if (word.Length >= minWordLength && !names.Contains(word)) + names.Add(word); + } + Debug.Log($"Found {lines.Length} lines, with {names.Count} unique names!"); + var random = new Random(1337); + _nameGenerator = new MarkovNameGenerator(ref random, names, NameGeneratorOrder, NameGeneratorMinLength, NameGeneratorMaxLength); + } + + if (_nameGenerator != null) + { + if (GUILayout.Button("Generate Name")) + { + Debug.Log(_nameGenerator.NextName); + } + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Editor/GravityFieldParityVerify.cs.meta b/Assets/Scripts/Editor/NameTools.cs.meta similarity index 83% rename from Assets/Scripts/Editor/GravityFieldParityVerify.cs.meta rename to Assets/Scripts/Editor/NameTools.cs.meta index 50646bcbb..e0022b308 100644 --- a/Assets/Scripts/Editor/GravityFieldParityVerify.cs.meta +++ b/Assets/Scripts/Editor/NameTools.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 1ceb2bdab0804463b1998471d47e82fa +guid: 88b5f578fe63a904b997331630e61416 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/Scripts/Editor/RockMeshRadius.cs b/Assets/Scripts/Editor/RockMeshRadius.cs deleted file mode 100644 index 971284924..000000000 --- a/Assets/Scripts/Editor/RockMeshRadius.cs +++ /dev/null @@ -1,112 +0,0 @@ -using System; -using System.Linq; -using UnityEditor; -using UnityEditor.Build; -using UnityEditor.Build.Reporting; -using UnityEditor.SceneManagement; -using UnityEngine; - -// The radius of each rock mesh ZoneRenderer draws (ruling rock-meshes-by-size): the farthest vertex from the mesh origin, which bounds the -// mesh's top under any rotation. DrawAhead.RockScale divides the gameplay radius by it, so the drawn rock is the gameplay rock. It is stored on -// InstancedMesh.Radius in ARPG.unity, because a build cannot read vertices of a mesh without Read/Write import. -// -// Unity -batchmode -nographics -projectPath -executeMethod Aetheria.EditorTools.RockMeshRadius.Fill -logFile -// Unity -batchmode -nographics -projectPath -executeMethod Aetheria.EditorTools.RockMeshRadius.Verify -logFile -// -// Fill measures every AsteroidMeshes entry and saves the scene; Verify fails (exit 1) when any stored radius is not the measured one. -// RockMeshRadiusBuildGate runs the same check before every player build and fails the build, so a mesh with no filled radius cannot ship; -// Gate runs that gate in batch mode. -// Unity -batchmode -nographics -projectPath -executeMethod Aetheria.EditorTools.RockMeshRadius.Gate -logFile -namespace Aetheria.EditorTools -{ - public static class RockMeshRadius - { - private const string Scene = "Assets/Scenes/ARPG.unity"; - private const float Tolerance = 1e-4f; - - public static float Measure(Mesh mesh) => Mathf.Sqrt(mesh.vertices.Max(v => v.sqrMagnitude)); - - public static void Fill() => Batch(() => - { - var scene = EditorSceneManager.OpenScene(Scene, OpenSceneMode.Single); - var (renderer, meshes, measured) = Load(scene); - for (var i = 0; i < meshes.Length; i++) meshes[i].Radius = measured[i]; - EditorUtility.SetDirty(renderer); - EditorSceneManager.MarkSceneDirty(scene); - if (!EditorSceneManager.SaveScene(scene)) throw new InvalidOperationException("The scene did not save."); - return Summary("filled", measured); - }); - - public static void Verify() => Batch(() => Check(OpenSceneMode.Single)); - - // The build gate's own entry in batch mode: exit 1 exactly when a build would fail (RockMeshRadiusBuildGate). - public static void Gate() => Batch(() => - { - try { new RockMeshRadiusBuildGate().OnPreprocessBuild(null); } - catch (BuildFailedException failure) { throw new InvalidOperationException(failure.Message); } - return "the build gate passes"; - }); - - // Throws unless every AsteroidMeshes entry of ARPG.unity has a stored radius equal to its mesh's measured one (a zero radius never does). - public static string Check(OpenSceneMode mode) - { - var scene = EditorSceneManager.OpenScene(Scene, mode); - try - { - var (_, meshes, measured) = Load(scene); - var failures = meshes.Select((m, i) => (m, i)).Where(p => !(measured[p.i] > 0f) || Mathf.Abs(p.m.Radius - measured[p.i]) > Tolerance).ToArray(); - if (failures.Length > 0) - throw new InvalidOperationException("InstancedMesh.Radius differs from the measured one, or is unset, on mesh (run RockMeshRadius.Fill): " + string.Join(", ", - failures.Select(f => f.m.Mesh.name))); - return Summary("ok", measured); - } - finally - { - if (mode == OpenSceneMode.Additive) EditorSceneManager.CloseScene(scene, true); - } - } - - private static (ZoneRenderer renderer, InstancedMesh[] meshes, float[] measured) Load(UnityEngine.SceneManagement.Scene scene) - { - var renderer = UnityEngine.Object.FindObjectsByType(FindObjectsInactive.Include, FindObjectsSortMode.None) - .Single(r => r.gameObject.scene == scene); - var meshes = renderer.AsteroidMeshes; - if (meshes == null || meshes.Length == 0) throw new InvalidOperationException("ARPG.unity's ZoneRenderer has no AsteroidMeshes."); - var bad = meshes.Where(m => m.Mesh == null).ToArray(); - if (bad.Length > 0) throw new InvalidOperationException($"{bad.Length} AsteroidMeshes entries have no mesh."); - return (renderer, meshes, meshes.Select(m => Measure(m.Mesh)).ToArray()); - } - - private static string Summary(string what, float[] measured) - { - var sorted = measured.OrderBy(r => r).ToArray(); - return $"{what}: {sorted.Length} meshes, radius min {sorted[0]:F3} median {sorted[sorted.Length / 2]:F3} max {sorted[^1]:F3}"; - } - - private static void Batch(Func run) - { - try - { - Debug.Log($"[RockMeshRadius] {run()}"); - EditorApplication.Exit(0); - } - catch (Exception exception) - { - Debug.LogException(exception); - EditorApplication.Exit(1); - } - } - } - - // A mesh in AsteroidMeshes with no filled radius must not ship: the build fails, naming the field. - public class RockMeshRadiusBuildGate : IPreprocessBuildWithReport - { - public int callbackOrder => 0; - - public void OnPreprocessBuild(BuildReport report) - { - try { RockMeshRadius.Check(OpenSceneMode.Additive); } - catch (InvalidOperationException failure) { throw new BuildFailedException(failure.Message); } - } - } -} diff --git a/Assets/Scripts/Editor/RockMeshRadius.cs.meta b/Assets/Scripts/Editor/RockMeshRadius.cs.meta deleted file mode 100644 index f95fec963..000000000 --- a/Assets/Scripts/Editor/RockMeshRadius.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 9ea93f3d164825c4b99a0d07f24d5cf6 \ No newline at end of file diff --git a/Assets/Scripts/Editor/ScenarioPickerCapture.cs b/Assets/Scripts/Editor/ScenarioPickerCapture.cs deleted file mode 100644 index b39dd7a1b..000000000 --- a/Assets/Scripts/Editor/ScenarioPickerCapture.cs +++ /dev/null @@ -1,108 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using UnityEditor; -using UnityEditor.SceneManagement; -using UnityEngine; -using UnityEngine.UI; - -// A render of the New Game screen as the game builds it: the real Main Menu scene's panel prototype, docked and filled -// by ScenarioPicker.Dock and ScenarioPicker.Show with every scenario group, on a plain dark background (the cloud -// backdrop is a play-mode renderer). Writes /Temp/scenario-picker.png at 1920x1080, or the path after -pngOut (Unity empties Temp on exit). -// -// Unity -batchmode -projectPath -executeMethod ScenarioPickerCapture.Run [-pngOut ] -logFile -// -// Needs a GPU device; do not pass -nographics or -quit: Run exits the Editor itself, 0 on success and 1 on any failure. -public static class ScenarioPickerCapture -{ - private const int Width = 1920, Height = 1080; - - public static void Run() - { - try - { - Capture(); - EditorApplication.Exit(0); - } - catch (Exception exception) - { - Debug.LogException(exception); - EditorApplication.Exit(1); - } - } - - // The menu's two panes built the way MainMenu.Start builds them, against the Main Menu scene. - internal static (MainMenu menu, PropertiesPanel list, PropertiesPanel detail) Build() - { - EditorSceneManager.OpenScene("Assets/Scenes/Main Menu.unity", OpenSceneMode.Single); - var menu = UnityEngine.Object.FindObjectsByType(FindObjectsInactive.Include, FindObjectsSortMode.None)[0]; - menu.PanelPrototype.gameObject.SetActive(false); - var list = menu.PanelPrototype.Instantiate(); - var detail = menu.PanelPrototype.Instantiate(); - // Edit mode runs no Awake, which is what activates each row a panel adds. - list.Awake(); - detail.Awake(); - ScenarioPicker.Dock(detail, list); - return (menu, list, detail); - } - - internal static List<(string label, Scenario[] scenarios)> AllGroups() => new List<(string label, Scenario[] scenarios)> - { - ("modes", Scenarios.Modes), ("development", Scenarios.Development), ("test arenas", Scenarios.Tests) - }; - - private static void Capture() - { - var (menu, list, detail) = Build(); - menu.Dialog.gameObject.SetActive(false); - list.Title.text = MainMenu.TitleSubtitle("new game", "scenarios"); - ScenarioPicker.Show(list, detail, AllGroups(), _ => { }, () => { }, menu.Dialog.Confirm); - list.RefreshValues(); - detail.RefreshValues(); - - var canvas = menu.GetComponentInParent(true).rootCanvas; - var target = new RenderTexture(Width, Height, 24, RenderTextureFormat.ARGB32); - var cameraObject = new GameObject("ScenarioPickerCapture camera"); - var camera = cameraObject.AddComponent(); - camera.orthographic = true; - camera.orthographicSize = 5; - camera.clearFlags = CameraClearFlags.SolidColor; - camera.backgroundColor = new Color(.04f, .05f, .08f); - camera.cullingMask = 1 << LayerMask.NameToLayer("UI"); - camera.targetTexture = target; - canvas.renderMode = RenderMode.ScreenSpaceCamera; - canvas.worldCamera = camera; - canvas.planeDistance = 10; - canvas.gameObject.SetActive(true); - Canvas.ForceUpdateCanvases(); - LayoutRebuilder.ForceRebuildLayoutImmediate((RectTransform) list.transform); - LayoutRebuilder.ForceRebuildLayoutImmediate((RectTransform) detail.transform); - foreach (var text in list.transform.GetComponentsInChildren()) - text.ForceMeshUpdate(); - Canvas.ForceUpdateCanvases(); - list.Content.GetComponentInParent().onValueChanged.Invoke(Vector2.zero); - camera.Render(); - - var previous = RenderTexture.active; - RenderTexture.active = target; - var read = new Texture2D(Width, Height, TextureFormat.RGBA32, false); - read.ReadPixels(new Rect(0, 0, Width, Height), 0, 0); - RenderTexture.active = previous; - - var background = read.GetPixel(0, 0); - var differing = 0; - foreach (var pixel in read.GetPixels32()) - if (Mathf.Abs(pixel.r / 255f - background.r) + Mathf.Abs(pixel.g / 255f - background.g) + Mathf.Abs(pixel.b / 255f - background.b) > .05f) - differing++; - if (differing < Width * Height / 100) - throw new InvalidOperationException($"The capture is uniform: only {differing} pixels differ from the background."); - - var path = Path.GetFullPath(Path.Combine(Application.dataPath, "..", "Temp", "scenario-picker.png")); - var args = Environment.GetCommandLineArgs(); - var outIndex = Array.IndexOf(args, "-pngOut"); - if (outIndex >= 0) path = Path.GetFullPath(args[outIndex + 1]); - Directory.CreateDirectory(Path.GetDirectoryName(path)); - File.WriteAllBytes(path, read.EncodeToPNG()); - Debug.Log($"[ScenarioPickerCapture] {path} ({differing} of {Width * Height} pixels differ from the background)"); - } -} diff --git a/Assets/Scripts/Editor/ScenarioPickerCapture.cs.meta b/Assets/Scripts/Editor/ScenarioPickerCapture.cs.meta deleted file mode 100644 index ebeb742e8..000000000 --- a/Assets/Scripts/Editor/ScenarioPickerCapture.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 2e79f280179150e4080250c45e07cd69 \ No newline at end of file diff --git a/Assets/Scripts/Editor/ScenarioPickerVerify.cs b/Assets/Scripts/Editor/ScenarioPickerVerify.cs deleted file mode 100644 index 6816cafc9..000000000 --- a/Assets/Scripts/Editor/ScenarioPickerVerify.cs +++ /dev/null @@ -1,265 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using TMPro; -using UnityEditor; -using UnityEngine; -using UnityEngine.EventSystems; -using UnityEngine.UI; - -// The picker's selection and keyboard rules, driven through the events the game delivers: Move and Cancel reach the -// focused Launch button through ExecuteEvents, as the Input System UI module sends them, and a click is Button.onClick. -// -// Unity -batchmode -projectPath -executeMethod ScenarioPickerVerify.Run -logFile -// -// Exits the Editor itself, 0 when every rule holds and 1 on the first that does not. -public static class ScenarioPickerVerify -{ - private sealed class Fake : Scenario - { - private readonly uint _seed; - private readonly bool _ambient; - public Fake(string name, uint seed = 0, bool ambient = true) { Name = name; _seed = seed; _ambient = ambient; } - public override string Name { get; } - public override string Id => Name.ToLowerInvariant(); - public override string Brief => $"brief of {Name}"; - public override uint Seed => _seed; - public override bool Ambient => _ambient; - public override Galaxy Generate(GalaxyStage stage) => throw new NotSupportedException(); - public override void Stage(ScenarioStage stage) => throw new NotSupportedException(); - } - - private sealed class Screen - { - public ScenarioPicker Picker; - public PropertiesPanel List, Detail; - public Button[] Rows; - public Button Back, Launch; - public readonly List Launched = new List(); - public int Backs; - public Scenario[] A, B, C; - } - - public static void Run() - { - try - { - SelectionFollowsClicksAndArrows(); - ArrowsStopAtTheEnds(); - LeftAndRightAreIgnored(); - LaunchIsOnePathAndFocusClears(); - CancelAndBackAreOnePath(); - DetailPaneFollowsSelection(); - OneGroupHasNoSectionLabel(); - LaunchesOnceHoweverItIsReached(); - ArrowingThroughTheRealListKeepsTheSelectionVisible(); - Debug.Log("[ScenarioPickerVerify] ok"); - EditorApplication.Exit(0); - } - catch (Exception exception) - { - Debug.LogException(exception); - EditorApplication.Exit(1); - } - } - - private static void Require(bool condition, string what) - { - if (!condition) throw new InvalidOperationException(what); - } - - private static Screen Build(bool oneGroup = false, bool real = false) - { - var (menu, list, detail) = ScenarioPickerCapture.Build(); - // Build opens the scene afresh, which destroys the previous EventSystem. - var events = new GameObject("verify EventSystem").AddComponent(); - // Edit mode never calls OnEnable, which is what registers an EventSystem as current. - typeof(EventSystem).GetMethod("OnEnable", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance).Invoke(events, null); - var screen = new Screen - { - List = list, Detail = detail, - A = new Scenario[] { new Fake("Alpha", 7), new Fake("Beta") }, - B = new Scenario[] { new Fake("Gamma", ambient: false) }, - C = new Scenario[] { new Fake("Delta"), new Fake("Echo") } - }; - var groups = real ? ScenarioPickerCapture.AllGroups() : oneGroup - ? new List<(string label, Scenario[] scenarios)> { ("modes", screen.A) } - : new List<(string label, Scenario[] scenarios)> { ("modes", screen.A), ("development", screen.B), ("test arenas", screen.C) }; - // The menu builds a panel while it is inactive and shows it afterwards; the picker must find its scroll all the same. - if (real) list.gameObject.SetActive(false); - screen.Picker = ScenarioPicker.Show(list, detail, groups, screen.Launched.Add, () => screen.Backs++, menu.Dialog.Confirm); - var buttons = list.GetComponentsInChildren(false).Where(button => !button.transform.IsChildOf(detail.transform)).Select(button => button.Button).ToArray(); - screen.Rows = buttons.Take(buttons.Length - 1).ToArray(); - screen.Back = buttons.Last(); - screen.Launch = detail.GetComponentsInChildren + private readonly IVertex[] Vertices; + /// + /// The positions + /// + private float[] Positions; + /// + /// The vertex marks + /// + private readonly bool[] VertexVisited; + + private readonly int NumberOfVertices; + + /* + * The triangulation faces are represented in a single pool for objects that are being reused. + * This allows for represent the faces as integers and significantly speeds up many computations. + * - AffectedFaceFlags are used to mark affected faces/ + */ + /// + /// The face pool + /// + internal ConvexFaceInternal[] FacePool; + /// + /// The affected face flags + /// + internal bool[] AffectedFaceFlags; + + /// + /// Used to track the size of the current hull in the Update/RollbackCenter functions. + /// + private int ConvexHullSize; + + /// + /// A list of faces that that are not a part of the final convex hull and still need to be processed. + /// + private readonly FaceList UnprocessedFaces; + + /// + /// A list of faces that form the convex hull. + /// + private readonly IndexBuffer ConvexFaces; + + /// + /// The vertex that is currently being processed. + /// + private int CurrentVertex; + + /// + /// A helper variable to determine the furthest vertex for a particular convex face. + /// + private double MaxDistance; + + /// + /// A helper variable to help determine the index of the vertex that is furthest from the face that is currently being + /// processed. + /// + private int FurthestVertex; + + /// + /// The centroid of the currently computed hull. + /// + private readonly float[] Center; + + /* + * Helper arrays to store faces for adjacency update. + * This is just to prevent unnecessary allocations. + */ + /// + /// The update buffer + /// + private readonly int[] UpdateBuffer; + /// + /// The update indices + /// + private readonly int[] UpdateIndices; + + /// + /// Used to determine which faces need to be updated at each step of the algorithm. + /// + private readonly IndexBuffer TraverseStack; + + /// + /// Used for VerticesBeyond for faces that are on the convex hull. + /// + private readonly IndexBuffer EmptyBuffer; + + /// + /// Used to determine which vertices are "above" (or "beyond") a face + /// + private IndexBuffer BeyondBuffer; + + /// + /// Stores faces that are visible from the current vertex. + /// + private readonly IndexBuffer AffectedFaceBuffer; + + /// + /// Stores faces that form a "cone" created by adding new vertex. + /// + private readonly SimpleList ConeFaceBuffer; + + /// + /// Stores a list of "singular" (or "generate", "planar", etc.) vertices that cannot be part of the hull. + /// + private readonly HashSet SingularVertices; + + /// + /// The connector table helps to determine the adjacency of convex faces. + /// Hashing is used instead of pairwise comparison. This significantly speeds up the computations, + /// especially for higher dimensions. + /// + private readonly ConnectorList[] ConnectorTable; + + /// + /// Manages the memory allocations and storage of unused objects. + /// Saves the garbage collector a lot of work. + /// + private readonly ObjectManager ObjectManager; + + /// + /// Helper class for handling math related stuff. + /// + private readonly MathHelper mathHelper; + private readonly List[] boundingBoxPoints; + private int indexOfDimensionWithLeastExtremes; + private readonly float[] minima; + private readonly float[] maxima; + #endregion + } +} \ No newline at end of file diff --git a/Assets/Scripts/ServerShared/NIH/MIConvexHull/ConvexHull/ConvexHullAlgorithm.Initialize.cs.meta b/Assets/Scripts/ServerShared/NIH/MIConvexHull/ConvexHull/ConvexHullAlgorithm.Initialize.cs.meta new file mode 100644 index 000000000..35319f3c2 --- /dev/null +++ b/Assets/Scripts/ServerShared/NIH/MIConvexHull/ConvexHull/ConvexHullAlgorithm.Initialize.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 48bd00cb6ec8d244f90e1c1608f39074 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/ServerShared/NIH/MIConvexHull/ConvexHull/ConvexHullAlgorithm.MainLoop.cs b/Assets/Scripts/ServerShared/NIH/MIConvexHull/ConvexHull/ConvexHullAlgorithm.MainLoop.cs new file mode 100644 index 000000000..058b82640 --- /dev/null +++ b/Assets/Scripts/ServerShared/NIH/MIConvexHull/ConvexHull/ConvexHullAlgorithm.MainLoop.cs @@ -0,0 +1,635 @@ +/****************************************************************************** + * + * The MIT License (MIT) + * + * MIConvexHull, Copyright (c) 2015 David Sehnal, Matthew Campbell + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + *****************************************************************************/ + +using System.Collections.Generic; + +namespace MIConvexHull +{ + /* + * Main part of the algorithm + * Basic idea: + * - Create the initial hull (done in Initialize.cs) + * + * For each face there are "vertices beyond" which are "visible" from it. + * If there are no such vertices, the face is on the hull. + * + * - While there is at least one face with at least one "vertex beyond": + * * Pick the furthest beyond vertex + * * For this vertex: + * > find all faces that are visible from it (TagAffectedFaces) + * > remove them and replace them with a "cone" created by the vertex and the boundary + * of the affected faces, and for each new face, compute "beyond vertices" + * (CreateCone + CommitCone) + * + * + Implement it in way that is fast, but hard to understand and maintain. + */ + + /// + /// Class ConvexHullAlgorithm. + /// + internal partial class ConvexHullAlgorithm + { + /// + /// Tags all faces seen from the current vertex with 1. + /// + /// The current face. + private void TagAffectedFaces(ConvexFaceInternal currentFace) + { + AffectedFaceBuffer.Clear(); + AffectedFaceBuffer.Add(currentFace.Index); + TraverseAffectedFaces(currentFace.Index); + } + + /// + /// Recursively traverse all the relevant faces. + /// + /// The current face. + private void TraverseAffectedFaces(int currentFace) + { + TraverseStack.Clear(); + TraverseStack.Push(currentFace); + AffectedFaceFlags[currentFace] = true; + + while (TraverseStack.Count > 0) + { + var top = FacePool[TraverseStack.Pop()]; + for (var i = 0; i < NumOfDimensions; i++) + { + var adjFace = top.AdjacentFaces[i]; + + if (!AffectedFaceFlags[adjFace] && + mathHelper.GetVertexDistance(CurrentVertex, FacePool[adjFace]) >= PlaneDistanceTolerance) + { + AffectedFaceBuffer.Add(adjFace); + AffectedFaceFlags[adjFace] = true; + TraverseStack.Push(adjFace); + } + } + } + } + + /// + /// Creates a new deferred face. + /// + /// The face. + /// Index of the face. + /// The pivot. + /// Index of the pivot. + /// The old face. + /// DeferredFace. + private DeferredFace MakeDeferredFace(ConvexFaceInternal face, int faceIndex, ConvexFaceInternal pivot, + int pivotIndex, ConvexFaceInternal oldFace) + { + var ret = ObjectManager.GetDeferredFace(); + + ret.Face = face; + ret.FaceIndex = faceIndex; + ret.Pivot = pivot; + ret.PivotIndex = pivotIndex; + ret.OldFace = oldFace; + + return ret; + } + + /// + /// Connect faces using a connector. + /// + /// The connector. + private void ConnectFace(FaceConnector connector) + { + var index = connector.HashCode % Constants.ConnectorTableSize; + var list = ConnectorTable[index]; + + for (var current = list.First; current != null; current = current.Next) + { + if (FaceConnector.AreConnectable(connector, current, NumOfDimensions)) + { + list.Remove(current); + FaceConnector.Connect(current, connector); + current.Face = null; + connector.Face = null; + ObjectManager.DepositConnector(current); + ObjectManager.DepositConnector(connector); + return; + } + } + + list.Add(connector); + } + + /// + /// Removes the faces "covered" by the current vertex and adds the newly created ones. + /// + /// true if XXXX, false otherwise. + private bool CreateCone() + { + var currentVertexIndex = CurrentVertex; + ConeFaceBuffer.Clear(); + + for (var fIndex = 0; fIndex < AffectedFaceBuffer.Count; fIndex++) + { + var oldFaceIndex = AffectedFaceBuffer[fIndex]; + var oldFace = FacePool[oldFaceIndex]; + + // Find the faces that need to be updated + var updateCount = 0; + for (var i = 0; i < NumOfDimensions; i++) + { + var af = oldFace.AdjacentFaces[i]; + if (!AffectedFaceFlags[af]) // Tag == false when oldFaces does not contain af + { + UpdateBuffer[updateCount] = af; + UpdateIndices[updateCount] = i; + ++updateCount; + } + } + + for (var i = 0; i < updateCount; i++) + { + var adjacentFace = FacePool[UpdateBuffer[i]]; + + var oldFaceAdjacentIndex = 0; + var adjFaceAdjacency = adjacentFace.AdjacentFaces; + for (var j = 0; j < adjFaceAdjacency.Length; j++) + { + if (oldFaceIndex == adjFaceAdjacency[j]) + { + oldFaceAdjacentIndex = j; + break; + } + } + + var forbidden = UpdateIndices[i]; // Index of the face that corresponds to this adjacent face + + int oldVertexIndex; + int[] vertices; + + var newFaceIndex = ObjectManager.GetFace(); + var newFace = FacePool[newFaceIndex]; + vertices = newFace.Vertices; + for (var j = 0; j < NumOfDimensions; j++) vertices[j] = oldFace.Vertices[j]; + oldVertexIndex = vertices[forbidden]; + + int orderedPivotIndex; + + // correct the ordering + if (currentVertexIndex < oldVertexIndex) + { + orderedPivotIndex = 0; + for (var j = forbidden - 1; j >= 0; j--) + { + if (vertices[j] > currentVertexIndex) vertices[j + 1] = vertices[j]; + else + { + orderedPivotIndex = j + 1; + break; + } + } + } + else + { + orderedPivotIndex = NumOfDimensions - 1; + for (var j = forbidden + 1; j < NumOfDimensions; j++) + { + if (vertices[j] < currentVertexIndex) vertices[j - 1] = vertices[j]; + else + { + orderedPivotIndex = j - 1; + break; + } + } + } + + vertices[orderedPivotIndex] = CurrentVertex; + + if (!mathHelper.CalculateFacePlane(newFace, Center)) + { + return false; + } + + ConeFaceBuffer.Add(MakeDeferredFace(newFace, orderedPivotIndex, adjacentFace, oldFaceAdjacentIndex, + oldFace)); + } + } + + return true; + } + + /// + /// Commits a cone and adds a vertex to the convex hull. + /// + private void CommitCone() + { + // Fill the adjacency. + for (var i = 0; i < ConeFaceBuffer.Count; i++) + { + var face = ConeFaceBuffer[i]; + + var newFace = face.Face; + var adjacentFace = face.Pivot; + var oldFace = face.OldFace; + var orderedPivotIndex = face.FaceIndex; + + newFace.AdjacentFaces[orderedPivotIndex] = adjacentFace.Index; + adjacentFace.AdjacentFaces[face.PivotIndex] = newFace.Index; + + // let there be a connection. + for (var j = 0; j < NumOfDimensions; j++) + { + if (j == orderedPivotIndex) continue; + var connector = ObjectManager.GetConnector(); + connector.Update(newFace, j, NumOfDimensions); + ConnectFace(connector); + } + + // the id adjacent face on the hull? If so, we can use simple method to find beyond vertices. + if (adjacentFace.VerticesBeyond.Count == 0) + FindBeyondVertices(newFace, oldFace.VerticesBeyond); + // it is slightly more effective if the face with the lower number of beyond vertices comes first. + else if (adjacentFace.VerticesBeyond.Count < oldFace.VerticesBeyond.Count) + FindBeyondVertices(newFace, adjacentFace.VerticesBeyond, oldFace.VerticesBeyond); + else + FindBeyondVertices(newFace, oldFace.VerticesBeyond, adjacentFace.VerticesBeyond); + + // This face will definitely lie on the hull + if (newFace.VerticesBeyond.Count == 0) + { + ConvexFaces.Add(newFace.Index); + UnprocessedFaces.Remove(newFace); + ObjectManager.DepositVertexBuffer(newFace.VerticesBeyond); + newFace.VerticesBeyond = EmptyBuffer; + } + else // Add the face to the list + { + UnprocessedFaces.Add(newFace); + } + + // recycle the object. + ObjectManager.DepositDeferredFace(face); + } + + // Recycle the affected faces. + for (var fIndex = 0; fIndex < AffectedFaceBuffer.Count; fIndex++) + { + var face = AffectedFaceBuffer[fIndex]; + UnprocessedFaces.Remove(FacePool[face]); + ObjectManager.DepositFace(face); + } + } + + /// + /// Check whether the vertex v is beyond the given face. If so, add it to beyondVertices. + /// + /// The face. + /// The beyond vertices. + /// The v. + private void IsBeyond(ConvexFaceInternal face, IndexBuffer beyondVertices, int v) + { + var distance = mathHelper.GetVertexDistance(v, face); + if (distance >= PlaneDistanceTolerance) + { + if (distance > MaxDistance) + { + // If it's within the tolerance distance, use the lex. larger point + if (distance - MaxDistance < PlaneDistanceTolerance) + { // todo: why is this LexCompare necessary. Would seem to favor x over y over z (etc.)? + if (LexCompare(v, FurthestVertex) > 0) + { + MaxDistance = distance; + FurthestVertex = v; + } + } + else + { + MaxDistance = distance; + FurthestVertex = v; + } + } + beyondVertices.Add(v); + } + } + + + /// + /// Compares the values of two vertices. The return value (-1, 0 or +1) are found + /// by first checking the first coordinate and then progressing through the rest. + /// In this way {2, 8} will be a "-1" (less than) {3, 1}. + /// + /// The base vertex index, u. + /// The compared vertex index, v. + /// System.Int32. + private int LexCompare(int u, int v) + { + int uOffset = u * NumOfDimensions, vOffset = v * NumOfDimensions; + for (var i = 0; i < NumOfDimensions; i++) + { + double x = Positions[uOffset + i], y = Positions[vOffset + i]; + var comp = x.CompareTo(y); + if (comp != 0) return comp; + } + return 0; + } + + + /// + /// Used by update faces. + /// + /// The face. + /// The beyond. + /// The beyond1. + private void FindBeyondVertices(ConvexFaceInternal face, IndexBuffer beyond, IndexBuffer beyond1) + { + var beyondVertices = BeyondBuffer; + + MaxDistance = double.NegativeInfinity; + FurthestVertex = 0; + int v; + + for (var i = 0; i < beyond1.Count; i++) VertexVisited[beyond1[i]] = true; + VertexVisited[CurrentVertex] = false; + for (var i = 0; i < beyond.Count; i++) + { + v = beyond[i]; + if (v == CurrentVertex) continue; + VertexVisited[v] = false; + IsBeyond(face, beyondVertices, v); + } + + for (var i = 0; i < beyond1.Count; i++) + { + v = beyond1[i]; + if (VertexVisited[v]) IsBeyond(face, beyondVertices, v); + } + + face.FurthestVertex = FurthestVertex; + + // Pull the old switch a roo (switch the face beyond buffers) + var temp = face.VerticesBeyond; + face.VerticesBeyond = beyondVertices; + if (temp.Count > 0) temp.Clear(); + BeyondBuffer = temp; + } + + /// + /// Finds the beyond vertices. + /// + /// The face. + /// The beyond. + private void FindBeyondVertices(ConvexFaceInternal face, IndexBuffer beyond) + { + var beyondVertices = BeyondBuffer; + + MaxDistance = double.NegativeInfinity; + FurthestVertex = 0; + int v; + + for (var i = 0; i < beyond.Count; i++) + { + v = beyond[i]; + if (v == CurrentVertex) continue; + IsBeyond(face, beyondVertices, v); + } + + face.FurthestVertex = FurthestVertex; + + // Pull the old switch a roo (switch the face beyond buffers) + var temp = face.VerticesBeyond; + face.VerticesBeyond = beyondVertices; + if (temp.Count > 0) temp.Clear(); + BeyondBuffer = temp; + } + + /// + /// Recalculates the centroid of the current hull. + /// + private void UpdateCenter() + { + for (var i = 0; i < NumOfDimensions; i++) Center[i] *= ConvexHullSize; + ConvexHullSize += 1; + var f = 1.0f / ConvexHullSize; + var co = CurrentVertex * NumOfDimensions; + for (var i = 0; i < NumOfDimensions; i++) Center[i] = f * (Center[i] + Positions[co + i]); + } + + /// + /// Removes the last vertex from the center. + /// + private void RollbackCenter() + { + for (var i = 0; i < NumOfDimensions; i++) Center[i] *= ConvexHullSize; + ConvexHullSize -= 1; + var f = ConvexHullSize > 0 ? 1.0f / ConvexHullSize : 0.0f; + var co = CurrentVertex * NumOfDimensions; + for (var i = 0; i < NumOfDimensions; i++) Center[i] = f * (Center[i] - Positions[co + i]); + } + + /// + /// Handles singular vertex. + /// + private void HandleSingular() + { + RollbackCenter(); + SingularVertices.Add(CurrentVertex); + + // This means that all the affected faces must be on the hull and that all their "vertices beyond" are singular. + for (var fIndex = 0; fIndex < AffectedFaceBuffer.Count; fIndex++) + { + var face = FacePool[AffectedFaceBuffer[fIndex]]; + var vb = face.VerticesBeyond; + for (var i = 0; i < vb.Count; i++) + { + SingularVertices.Add(vb[i]); + } + + ConvexFaces.Add(face.Index); + UnprocessedFaces.Remove(face); + ObjectManager.DepositVertexBuffer(face.VerticesBeyond); + face.VerticesBeyond = EmptyBuffer; + } + } + + /// + /// Get a vertex coordinate. In order to reduce speed, all vertex coordinates + /// have been placed in a single array. + /// + /// The vertex index. + /// The index of the dimension. + /// System.Double. + private float GetCoordinate(int vIndex, int dimension) + { + return Positions[vIndex * NumOfDimensions + dimension]; + } + + #region Returning the Results in the proper format + + /// + /// Gets the hull vertices. + /// + /// The type of the t vertex. + /// The data. + /// TVertex[]. + private TVertex[] GetHullVertices(IList data) + { + var cellCount = ConvexFaces.Count; + var hullVertexCount = 0; + + for (var i = 0; i < NumberOfVertices; i++) VertexVisited[i] = false; + + for (var i = 0; i < cellCount; i++) + { + var vs = FacePool[ConvexFaces[i]].Vertices; + for (var j = 0; j < vs.Length; j++) + { + var v = vs[j]; + if (!VertexVisited[v]) + { + VertexVisited[v] = true; + hullVertexCount++; + } + } + } + + var result = new TVertex[hullVertexCount]; + for (var i = 0; i < NumberOfVertices; i++) + { + if (VertexVisited[i]) result[--hullVertexCount] = data[i]; + } + + return result; + } + + /// + /// Finds the convex hull and creates the TFace objects. + /// + /// The type of the t face. + /// The type of the t vertex. + /// TFace[]. + private TFace[] GetConvexFaces() + where TFace : ConvexFace, new() + where TVertex : IVertex + { + var faces = ConvexFaces; + var cellCount = faces.Count; + var cells = new TFace[cellCount]; + + for (var i = 0; i < cellCount; i++) + { + var face = FacePool[faces[i]]; + var vertices = new TVertex[NumOfDimensions]; + for (var j = 0; j < NumOfDimensions; j++) + { + vertices[j] = (TVertex)Vertices[face.Vertices[j]]; + } + + cells[i] = new TFace + { + Vertices = vertices, + Adjacency = new TFace[NumOfDimensions], + Normal = IsLifted ? null : face.Normal + }; + face.Tag = i; + } + + for (var i = 0; i < cellCount; i++) + { + var face = FacePool[faces[i]]; + var cell = cells[i]; + for (var j = 0; j < NumOfDimensions; j++) + { + if (face.AdjacentFaces[j] < 0) continue; + cell.Adjacency[j] = cells[FacePool[face.AdjacentFaces[j]].Tag]; + } + + // Fix the vertex orientation. + if (face.IsNormalFlipped) + { + var tempVert = cell.Vertices[0]; + cell.Vertices[0] = cell.Vertices[NumOfDimensions - 1]; + cell.Vertices[NumOfDimensions - 1] = tempVert; + + var tempAdj = cell.Adjacency[0]; + cell.Adjacency[0] = cell.Adjacency[NumOfDimensions - 1]; + cell.Adjacency[NumOfDimensions - 1] = tempAdj; + } + } + + return cells; + } + + /// + /// For 2D only: Returns the result in counter-clockwise order starting with the element with the lowest X value. + /// If there are multiple vertices with the same minimum X, then the one with the lowest Y is chosen. + /// + /// The type of the vertex. + /// The type of the face. + /// The data. + /// + private ConvexHull Return2DResultInOrder(IList data) + where TVertex : IVertex + where TFace : ConvexFace, new() + { + TFace[] faces = GetConvexFaces(); + var numPoints = faces.Length; + var orderDictionary = new Dictionary(); + foreach (var face in faces) + orderDictionary.Add(face.Vertices[1], face); + var firstPoint = faces[0].Vertices[1]; + var nextPoint = faces[0].Vertices[0]; + var orderedPointList = new List(); + orderedPointList.Add(firstPoint); + var orderedFaceList = new List(); + orderedFaceList.Add(faces[1]); + var lowestXMinIndex = 0; + var k = 0; + while (!nextPoint.Equals(firstPoint)) + { + orderedPointList.Add(nextPoint); + var nextFace = orderDictionary[nextPoint]; + orderedFaceList.Add(nextFace); + if (nextPoint.Position[0] < orderedPointList[lowestXMinIndex].Position[0] + || (nextPoint.Position[0] == orderedPointList[lowestXMinIndex].Position[0] + && nextPoint.Position[1] <= orderedPointList[lowestXMinIndex].Position[1])) + lowestXMinIndex = k; + k++; + nextPoint = nextFace.Vertices[0]; + } + TVertex[] points = new TVertex[numPoints]; + for (int i = 0; i < numPoints; i++) + { + var j = (i + lowestXMinIndex) % numPoints; + points[i] = orderedPointList[j]; + faces[i] = orderedFaceList[j]; + } + return new ConvexHull + { + Points = points, + Faces = faces + }; + } + + #endregion + } +} \ No newline at end of file diff --git a/Assets/Scripts/ServerShared/NIH/MIConvexHull/ConvexHull/ConvexHullAlgorithm.MainLoop.cs.meta b/Assets/Scripts/ServerShared/NIH/MIConvexHull/ConvexHull/ConvexHullAlgorithm.MainLoop.cs.meta new file mode 100644 index 000000000..8eb122b5b --- /dev/null +++ b/Assets/Scripts/ServerShared/NIH/MIConvexHull/ConvexHull/ConvexHullAlgorithm.MainLoop.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f7f265217d00ea340b87645242a45181 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/ServerShared/NIH/MIConvexHull/ConvexHull/DataModel.cs b/Assets/Scripts/ServerShared/NIH/MIConvexHull/ConvexHull/DataModel.cs new file mode 100644 index 000000000..761dd1ccf --- /dev/null +++ b/Assets/Scripts/ServerShared/NIH/MIConvexHull/ConvexHull/DataModel.cs @@ -0,0 +1,237 @@ +/****************************************************************************** + * + * The MIT License (MIT) + * + * MIConvexHull, Copyright (c) 2015 David Sehnal, Matthew Campbell + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + *****************************************************************************/ + +namespace MIConvexHull +{ + /// + /// For deferred face addition. + /// + internal sealed class DeferredFace + { + /// + /// The faces. + /// + public ConvexFaceInternal Face, Pivot, OldFace; + + /// + /// The indices. + /// + public int FaceIndex, PivotIndex; + } + + /// + /// A helper class used to connect faces. + /// + internal sealed class FaceConnector + { + /// + /// The edge to be connected. + /// + public int EdgeIndex; + + /// + /// The face. + /// + public ConvexFaceInternal Face; + + /// + /// The hash code computed from indices. + /// + public uint HashCode; + + /// + /// Next node in the list. + /// + public FaceConnector Next; + + /// + /// Prev node in the list. + /// + public FaceConnector Previous; + + /// + /// The vertex indices. + /// + public int[] Vertices; + + /// + /// Ctor. + /// + /// The dimension. + public FaceConnector(int dimension) + { + Vertices = new int[dimension - 1]; + } + + /// + /// Updates the connector. + /// + /// The face. + /// Index of the edge. + /// The dim. + public void Update(ConvexFaceInternal face, int edgeIndex, int dim) + { + Face = face; + EdgeIndex = edgeIndex; + + uint hashCode = 23; + + unchecked + { + var vs = face.Vertices; + int i, c = 0; + for (i = 0; i < edgeIndex; i++) + { + Vertices[c++] = vs[i]; + hashCode += 31*hashCode + (uint) vs[i]; + } + for (i = edgeIndex + 1; i < vs.Length; i++) + { + Vertices[c++] = vs[i]; + hashCode += 31*hashCode + (uint) vs[i]; + } + } + + HashCode = hashCode; + } + + /// + /// Can two faces be connected. + /// + /// a. + /// The b. + /// The dim. + /// true if XXXX, false otherwise. + public static bool AreConnectable(FaceConnector a, FaceConnector b, int dim) + { + if (a.HashCode != b.HashCode) return false; + + var av = a.Vertices; + var bv = b.Vertices; + for (var i = 0; i < av.Length; i++) + { + if (av[i] != bv[i]) return false; + } + + return true; + } + + /// + /// Connect two faces. + /// + /// a. + /// The b. + public static void Connect(FaceConnector a, FaceConnector b) + { + a.Face.AdjacentFaces[a.EdgeIndex] = b.Face.Index; + b.Face.AdjacentFaces[b.EdgeIndex] = a.Face.Index; + } + } + + /// + /// This internal class manages the faces of the convex hull. It is a + /// separate class from the desired user class. + /// + internal sealed class ConvexFaceInternal + { + /// + /// Gets or sets the adjacent face data. + /// + public int[] AdjacentFaces; + + /// + /// The furthest vertex. + /// + public int FurthestVertex; + + /// + /// Index of the face inside the pool. + /// + public int Index; + + /// + /// Is it present in the list. + /// + public bool InList; + + /// + /// Is the normal flipped? + /// + public bool IsNormalFlipped; + + /// + /// Next node in the list. + /// + public ConvexFaceInternal Next; + + /// + /// Gets or sets the normal vector. + /// + public float[] Normal; + + /// + /// Face plane constant element. + /// + public float Offset; + + //public int UnprocessedIndex; + + /// + /// Prev node in the list. + /// + public ConvexFaceInternal Previous; + + /// + /// Used to traverse affected faces and create the Delaunay representation. + /// + public int Tag; + + /// + /// Gets or sets the vertices. + /// + public int[] Vertices; + + /// + /// Gets or sets the vertices beyond. + /// + public IndexBuffer VerticesBeyond; + + /// + /// Initializes a new instance of the class. + /// + /// The dimension. + /// The index. + /// The beyond list. + public ConvexFaceInternal(int dimension, int index, IndexBuffer beyondList) + { + Index = index; + AdjacentFaces = new int[dimension]; + VerticesBeyond = beyondList; + Normal = new float[dimension]; + Vertices = new int[dimension]; + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/ServerShared/NIH/MIConvexHull/ConvexHull/DataModel.cs.meta b/Assets/Scripts/ServerShared/NIH/MIConvexHull/ConvexHull/DataModel.cs.meta new file mode 100644 index 000000000..411bcb0d5 --- /dev/null +++ b/Assets/Scripts/ServerShared/NIH/MIConvexHull/ConvexHull/DataModel.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 58c58e163f4c86e48a6df3ee6c5056c0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/ServerShared/NIH/MIConvexHull/ConvexHull/MathHelper.cs b/Assets/Scripts/ServerShared/NIH/MIConvexHull/ConvexHull/MathHelper.cs new file mode 100644 index 000000000..0f030c59d --- /dev/null +++ b/Assets/Scripts/ServerShared/NIH/MIConvexHull/ConvexHull/MathHelper.cs @@ -0,0 +1,480 @@ +/****************************************************************************** + * + * The MIT License (MIT) + * + * MIConvexHull, Copyright (c) 2015 David Sehnal, Matthew Campbell + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + *****************************************************************************/ + +using System; +using System.Collections.Generic; +using CultMath; +using static CultMath.math; +using Random = CultMath.Random; + +namespace MIConvexHull +{ + /// + /// A helper class mostly for normal computation. If convex hulls are computed + /// in higher dimensions, it might be a good idea to add a specific + /// FindNormalVectorND function. + /// + internal class MathHelper + { + /// + /// The dimension + /// + private readonly int Dimension; + /// + /// The matrix pivots + /// + private readonly int[] matrixPivots; + /// + /// The n d matrix + /// + private readonly float[] nDMatrix; + /// + /// The n d normal helper vector + /// + private readonly float[] nDNormalHelperVector; + + /// + /// The nt x + /// + private readonly float[] ntX; + /// + /// The nt y + /// + private readonly float[] ntY; + /// + /// The nt z + /// + private readonly float[] ntZ; + + /// + /// The position data + /// + private readonly float[] PositionData; + + private static Random _random = new Random((uint) (DateTime.Now.Ticks % uint.MaxValue)); + + /// + /// Initializes a new instance of the class. + /// + /// The dimension. + /// The positions. + internal MathHelper(int dimension, float[] positions) + { + PositionData = positions; + Dimension = dimension; + + ntX = new float[Dimension]; + ntY = new float[Dimension]; + ntZ = new float[Dimension]; + + nDNormalHelperVector = new float[Dimension]; + nDMatrix = new float[Dimension * Dimension]; + matrixPivots = new int[Dimension]; + } + + /// + /// Calculates the normal and offset of the hyper-plane given by the face's vertices. + /// + /// The face. + /// The center. + /// true if XXXX, false otherwise. + internal bool CalculateFacePlane(ConvexFaceInternal face, float[] center) + { + var vertices = face.Vertices; + var normal = face.Normal; + FindNormalVector(vertices, normal); + + if (float.IsNaN(normal[0])) + { + return false; + } + + var offset = 0.0f; + var centerDistance = 0.0f; + var fi = vertices[0] * Dimension; + for (var i = 0; i < Dimension; i++) + { + var n = normal[i]; + offset += n * PositionData[fi + i]; + centerDistance += n * center[i]; + } + face.Offset = -offset; + centerDistance -= offset; + + if (centerDistance > 0) + { + for (var i = 0; i < Dimension; i++) normal[i] = -normal[i]; + face.Offset = offset; + face.IsNormalFlipped = true; + } + else face.IsNormalFlipped = false; + + return true; + } + + /// + /// Check if the vertex is "visible" from the face. + /// The vertex is "over face" if the return value is > Constants.PlaneDistanceTolerance. + /// + /// The v. + /// The f. + /// The vertex is "over face" if the result is positive. + internal double GetVertexDistance(int v, ConvexFaceInternal f) + { + var normal = f.Normal; + var x = v * Dimension; + var distance = f.Offset; + for (var i = 0; i < normal.Length; i++) distance += normal[i] * PositionData[x + i]; + return distance; + } + + /// + /// Returns the vector the between vertices. + /// + /// To index. + /// From index. + /// System.Double[]. + internal float[] VectorBetweenVertices(int toIndex, int fromIndex) + { + var target = new float[Dimension]; + VectorBetweenVertices(toIndex, fromIndex, target); + return target; + } + /// + /// Returns the vector the between vertices. + /// + /// From index. + /// To index. + /// The target. + /// + private void VectorBetweenVertices(int toIndex, int fromIndex, float[] target) + { + int u = toIndex * Dimension, v = fromIndex * Dimension; + for (var i = 0; i < Dimension; i++) + { + target[i] = PositionData[u + i] - PositionData[v + i]; + } + } + + internal void RandomOffsetToLift(int index, float maxHeight) + { + var liftIndex = (index * Dimension) + Dimension - 1; + PositionData[liftIndex] += 0.0001f * maxHeight * (_random.NextFloat() - 0.5f); + } + #region Find the normal vector of the face + /// + /// Finds normal vector of a hyper-plane given by vertices. + /// Stores the results to normalData. + /// + /// The vertices. + /// The normal data. + private void FindNormalVector(int[] vertices, float[] normalData) + { + switch (Dimension) + { + case 2: + FindNormalVector2D(vertices, normalData); + break; + case 3: + FindNormalVector3D(vertices, normalData); + break; + case 4: + FindNormalVector4D(vertices, normalData); + break; + default: + FindNormalVectorND(vertices, normalData); + break; + } + } + /// + /// Finds 2D normal vector. + /// + /// The vertices. + /// The normal. + private void FindNormalVector2D(int[] vertices, float[] normal) + { + VectorBetweenVertices(vertices[1], vertices[0], ntX); + + var nx = -ntX[1]; + var ny = ntX[0]; + + var norm = sqrt(nx * nx + ny * ny); + + var f = 1.0f / norm; + normal[0] = f * nx; + normal[1] = f * ny; + } + /// + /// Finds 3D normal vector. + /// + /// The vertices. + /// The normal. + private void FindNormalVector3D(int[] vertices, float[] normal) + { + VectorBetweenVertices(vertices[1], vertices[0], ntX); + VectorBetweenVertices(vertices[2], vertices[1], ntY); + + var nx = ntX[1] * ntY[2] - ntX[2] * ntY[1]; + var ny = ntX[2] * ntY[0] - ntX[0] * ntY[2]; + var nz = ntX[0] * ntY[1] - ntX[1] * ntY[0]; + + var norm = sqrt(nx * nx + ny * ny + nz * nz); + + var f = 1.0f / norm; + normal[0] = f * nx; + normal[1] = f * ny; + normal[2] = f * nz; + } + /// + /// Finds 4D normal vector. + /// + /// The vertices. + /// The normal. + private void FindNormalVector4D(int[] vertices, float[] normal) + { + VectorBetweenVertices(vertices[1], vertices[0], ntX); + VectorBetweenVertices(vertices[2], vertices[1], ntY); + VectorBetweenVertices(vertices[3], vertices[2], ntZ); + + var x = ntX; + var y = ntY; + var z = ntZ; + + // This was generated using Mathematica + var nx = x[3] * (y[2] * z[1] - y[1] * z[2]) + + x[2] * (y[1] * z[3] - y[3] * z[1]) + + x[1] * (y[3] * z[2] - y[2] * z[3]); + var ny = x[3] * (y[0] * z[2] - y[2] * z[0]) + + x[2] * (y[3] * z[0] - y[0] * z[3]) + + x[0] * (y[2] * z[3] - y[3] * z[2]); + var nz = x[3] * (y[1] * z[0] - y[0] * z[1]) + + x[1] * (y[0] * z[3] - y[3] * z[0]) + + x[0] * (y[3] * z[1] - y[1] * z[3]); + var nw = x[2] * (y[0] * z[1] - y[1] * z[0]) + + x[1] * (y[2] * z[0] - y[0] * z[2]) + + x[0] * (y[1] * z[2] - y[2] * z[1]); + + var norm = sqrt(nx * nx + ny * ny + nz * nz + nw * nw); + + var f = 1.0f / norm; + normal[0] = f * nx; + normal[1] = f * ny; + normal[2] = f * nz; + normal[3] = f * nw; + } + + /// + /// Finds the normal vector nd. + /// + /// The vertices. + /// The normal. + private void FindNormalVectorND(int[] vertices, float[] normal) + { + /* We need to solve the matrix A n = B where + * - A contains coordinates of vertices as columns + * - B is vector with all 1's. Really, it should be the distance of + * the plane from the origin, but - since we're not worried about that + * here and we will normalize the normal anyway - all 1's suffices. + */ + var iPiv = matrixPivots; + var data = nDMatrix; + var norm = 0.0f; + + // Solve determinants by replacing x-th column by all 1. + for (var x = 0; x < Dimension; x++) + { + for (var i = 0; i < Dimension; i++) + { + var offset = vertices[i] * Dimension; + for (var j = 0; j < Dimension; j++) + { + // maybe I got the i/j mixed up here regarding the representation Math.net uses... + // ...but it does not matter since Det(A) = Det(Transpose(A)). + data[Dimension * i + j] = j == x ? 1.0f : PositionData[offset + j]; + } + } + LUFactor(data, Dimension, iPiv, nDNormalHelperVector); + var coord = 1.0f; + for (var i = 0; i < Dimension; i++) + { + if (iPiv[i] != i) coord *= -data[Dimension * i + i]; // the determinant sign changes on row swap. + else coord *= data[Dimension * i + i]; + } + normal[x] = coord; + norm += coord * coord; + } + + // Normalize the result + var f = 1.0f / sqrt(norm); + for (var i = 0; i < normal.Length; i++) normal[i] *= f; + } + #endregion + + #region Simplex Volume + /// + /// Gets the simplex volume. Prior to having enough edge vectors, the method pads the remaining with all + /// "other numbers". So, yes, this method is not really finding the volume. But a relative volume-like measure. It + /// uses the magnitude of the determinant as the volume stand-in following the Cayley-Menger theorem. + /// + /// The edge vectors. + /// The last index. + /// The big number. + /// System.Double. + internal float GetSimplexVolume(float[][] edgeVectors, int lastIndex, float bigNumber) + { + var A = new float[Dimension * Dimension]; + var index = 0; + for (int i = 0; i < Dimension; i++) + for (int j = 0; j < Dimension; j++) + if (i <= lastIndex) + A[index++] = edgeVectors[i][j]; + else A[index] = (pow(-1, index) * index++) / bigNumber; + // this last term is used for all the vertices in the comparison for the yet determined vertices + // the idea is to come up with sets of numbers that are orthogonal so that an non-zero value will result + // and to choose smallish numbers since the choice of vectors will affect what the end volume is. + // A better way (todo?) is to solve a smaller matrix. However, cases were found in which the obvious smaller vector + // (the upper left) had too many zeros. So, one would need to find the right subset. Indeed choosing a subset + // biases the first dimensions of the others. Perhaps a larger volume would be created from a different vertex + // if another subset of dimensions were used. + return abs(DeterminantDestructive(A)); + } + + /// + /// Determinants the destructive. + /// + /// a. + /// System.Double. + private float DeterminantDestructive(float[] A) + { + switch (Dimension) + { + case 0: + return 0.0f; + case 1: + return A[0]; + case 2: + return A[0] * A[3] - A[1] * A[2]; + case 3: + return A[0] * A[4] * A[8] + A[1] * A[5] * A[6] + A[2] * A[3] * A[7] + - A[0] * A[5] * A[7] - A[1] * A[3] * A[8] - A[2] * A[4] * A[6]; + default: + { + var iPiv = new int[Dimension]; + var helper = new float[Dimension]; + LUFactor(A, Dimension, iPiv, helper); + var det = 1.0f; + for (var i = 0; i < iPiv.Length; i++) + { + det *= A[Dimension * i + i]; + if (iPiv[i] != i) det *= -1; // the determinant sign changes on row swap. + } + return det; + } + } + } + #endregion + + + // Modified from Math.NET + // Copyright (c) 2009-2013 Math.NET + /// + /// Lus the factor. + /// + /// The data. + /// The order. + /// The ipiv. + /// The vec l ucolj. + private static void LUFactor(float[] data, int order, int[] ipiv, float[] vecLUcolj) + { + // Initialize the pivot matrix to the identity permutation. + for (var i = 0; i < order; i++) + { + ipiv[i] = i; + } + + // Outer loop. + for (var j = 0; j < order; j++) + { + var indexj = j * order; + var indexjj = indexj + j; + + // Make a copy of the j-th column to localize references. + for (var i = 0; i < order; i++) + { + vecLUcolj[i] = data[indexj + i]; + } + + // Apply previous transformations. + for (var i = 0; i < order; i++) + { + // Most of the time is spent in the following dot product. + var kmax = Math.Min(i, j); + var s = 0.0f; + for (var k = 0; k < kmax; k++) + { + s += data[k * order + i] * vecLUcolj[k]; + } + + data[indexj + i] = vecLUcolj[i] -= s; + } + + // Find pivot and exchange if necessary. + var p = j; + for (var i = j + 1; i < order; i++) + { + if (abs(vecLUcolj[i]) > abs(vecLUcolj[p])) + { + p = i; + } + } + + if (p != j) + { + for (var k = 0; k < order; k++) + { + var indexk = k * order; + var indexkp = indexk + p; + var indexkj = indexk + j; + var temp = data[indexkp]; + data[indexkp] = data[indexkj]; + data[indexkj] = temp; + } + + ipiv[j] = p; + } + + // Compute multipliers. + if (j < order & data[indexjj] != 0.0f) + { + for (var i = j + 1; i < order; i++) + { + data[indexj + i] /= data[indexjj]; + } + } + } + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/ServerShared/NIH/MIConvexHull/ConvexHull/MathHelper.cs.meta b/Assets/Scripts/ServerShared/NIH/MIConvexHull/ConvexHull/MathHelper.cs.meta new file mode 100644 index 000000000..920a8673d --- /dev/null +++ b/Assets/Scripts/ServerShared/NIH/MIConvexHull/ConvexHull/MathHelper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8bb3327041efa18479319ec117493f8c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/ServerShared/NIH/MIConvexHull/ConvexHull/ObjectManager.cs b/Assets/Scripts/ServerShared/NIH/MIConvexHull/ConvexHull/ObjectManager.cs new file mode 100644 index 000000000..66333b74f --- /dev/null +++ b/Assets/Scripts/ServerShared/NIH/MIConvexHull/ConvexHull/ObjectManager.cs @@ -0,0 +1,218 @@ +/****************************************************************************** + * + * The MIT License (MIT) + * + * MIConvexHull, Copyright (c) 2015 David Sehnal, Matthew Campbell + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + *****************************************************************************/ + +using System; + +namespace MIConvexHull +{ + /// + /// A helper class for object allocation/storage. + /// This helps the GC a lot as it prevents the creation of about 75% of + /// new face objects (in the case of ConvexFaceInternal). In the case of + /// FaceConnectors and DefferedFaces, the difference is even higher (in most + /// cases O(1) vs O(number of created faces)). + /// + internal class ObjectManager + { + /// + /// The dimension + /// + private readonly int Dimension; + /// + /// The connector stack + /// + private FaceConnector ConnectorStack; + /// + /// The deferred face stack + /// + private readonly SimpleList DeferredFaceStack; + /// + /// The empty buffer stack + /// + private readonly SimpleList EmptyBufferStack; + /// + /// The face pool + /// + private ConvexFaceInternal[] FacePool; + /// + /// The face pool size + /// + private int FacePoolSize; + /// + /// The face pool capacity + /// + private int FacePoolCapacity; + /// + /// The free face indices + /// + private readonly IndexBuffer FreeFaceIndices; + + /// + /// The hull + /// + private readonly ConvexHullAlgorithm Hull; + + /// + /// Create the manager. + /// + /// The hull. + public ObjectManager(ConvexHullAlgorithm hull) + { + Dimension = hull.NumOfDimensions; + Hull = hull; + FacePool = hull.FacePool; + FacePoolSize = 0; + FacePoolCapacity = hull.FacePool.Length; + FreeFaceIndices = new IndexBuffer(); + + EmptyBufferStack = new SimpleList(); + DeferredFaceStack = new SimpleList(); + } + + /// + /// Return the face to the pool for later use. + /// + /// Index of the face. + public void DepositFace(int faceIndex) + { + var face = FacePool[faceIndex]; + var af = face.AdjacentFaces; + for (var i = 0; i < af.Length; i++) + { + af[i] = -1; + } + FreeFaceIndices.Push(faceIndex); + } + + /// + /// Reallocate the face pool, including the AffectedFaceFlags + /// + private void ReallocateFacePool() + { + var newPool = new ConvexFaceInternal[2*FacePoolCapacity]; + var newTags = new bool[2*FacePoolCapacity]; + Array.Copy(FacePool, newPool, FacePoolCapacity); + Buffer.BlockCopy(Hull.AffectedFaceFlags, 0, newTags, 0, FacePoolCapacity*sizeof (bool)); + FacePoolCapacity = 2*FacePoolCapacity; + Hull.FacePool = newPool; + FacePool = newPool; + Hull.AffectedFaceFlags = newTags; + } + + /// + /// Create a new face and put it in the pool. + /// + /// System.Int32. + private int CreateFace() + { + var index = FacePoolSize; + var face = new ConvexFaceInternal(Dimension, index, GetVertexBuffer()); + FacePoolSize++; + if (FacePoolSize > FacePoolCapacity) ReallocateFacePool(); + FacePool[index] = face; + return index; + } + + /// + /// Return index of an unused face or creates a new one. + /// + /// System.Int32. + public int GetFace() + { + if (FreeFaceIndices.Count > 0) return FreeFaceIndices.Pop(); + return CreateFace(); + } + + /// + /// Store a face connector in the "embedded" linked list. + /// + /// The connector. + public void DepositConnector(FaceConnector connector) + { + if (ConnectorStack == null) + { + connector.Next = null; + ConnectorStack = connector; + } + else + { + connector.Next = ConnectorStack; + ConnectorStack = connector; + } + } + + /// + /// Get an unused face connector. If none is available, create it. + /// + /// FaceConnector. + public FaceConnector GetConnector() + { + if (ConnectorStack == null) return new FaceConnector(Dimension); + + var ret = ConnectorStack; + ConnectorStack = ConnectorStack.Next; + ret.Next = null; + return ret; + } + + /// + /// Deposit the index buffer. + /// + /// The buffer. + public void DepositVertexBuffer(IndexBuffer buffer) + { + buffer.Clear(); + EmptyBufferStack.Push(buffer); + } + + /// + /// Get a store index buffer or create a new instance. + /// + /// IndexBuffer. + public IndexBuffer GetVertexBuffer() + { + return EmptyBufferStack.Count != 0 ? EmptyBufferStack.Pop() : new IndexBuffer(); + } + + /// + /// Deposit the deferred face. + /// + /// The face. + public void DepositDeferredFace(DeferredFace face) + { + DeferredFaceStack.Push(face); + } + + /// + /// Get the deferred face. + /// + /// DeferredFace. + public DeferredFace GetDeferredFace() + { + return DeferredFaceStack.Count != 0 ? DeferredFaceStack.Pop() : new DeferredFace(); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/ServerShared/NIH/MIConvexHull/ConvexHull/ObjectManager.cs.meta b/Assets/Scripts/ServerShared/NIH/MIConvexHull/ConvexHull/ObjectManager.cs.meta new file mode 100644 index 000000000..cb1cf125b --- /dev/null +++ b/Assets/Scripts/ServerShared/NIH/MIConvexHull/ConvexHull/ObjectManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e8d582e97c6824740ba9e1a41641b372 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/ServerShared/NIH/MIConvexHull/Face3.cs b/Assets/Scripts/ServerShared/NIH/MIConvexHull/Face3.cs new file mode 100644 index 000000000..980e442d0 --- /dev/null +++ b/Assets/Scripts/ServerShared/NIH/MIConvexHull/Face3.cs @@ -0,0 +1,8 @@ +using System.Collections; +using MIConvexHull; + +public class Face3 : ConvexFace +{ + + +} diff --git a/Assets/Scripts/ServerShared/NIH/MIConvexHull/Face3.cs.meta b/Assets/Scripts/ServerShared/NIH/MIConvexHull/Face3.cs.meta new file mode 100644 index 000000000..ab550e9ac --- /dev/null +++ b/Assets/Scripts/ServerShared/NIH/MIConvexHull/Face3.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 30a2635ffe51545499499ce392b234c8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/ServerShared/NIH/MIConvexHull/IVertex.cs b/Assets/Scripts/ServerShared/NIH/MIConvexHull/IVertex.cs new file mode 100644 index 000000000..b7217c074 --- /dev/null +++ b/Assets/Scripts/ServerShared/NIH/MIConvexHull/IVertex.cs @@ -0,0 +1,53 @@ +/****************************************************************************** + * + * The MIT License (MIT) + * + * MIConvexHull, Copyright (c) 2015 David Sehnal, Matthew Campbell + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + *****************************************************************************/ + +namespace MIConvexHull +{ + /// + /// An interface for a structure with nD position. + /// + public interface IVertex + { + /// + /// Position of the vertex. + /// + /// The position. + float[] Position { get; } + } + + /// + /// "Default" vertex. + /// + /// + public class DefaultVertex : IVertex + { + /// + /// Position of the vertex. + /// + /// The position. + public float[] Position { get; set; } + } +} \ No newline at end of file diff --git a/Assets/Scripts/ServerShared/NIH/MIConvexHull/IVertex.cs.meta b/Assets/Scripts/ServerShared/NIH/MIConvexHull/IVertex.cs.meta new file mode 100644 index 000000000..06195b473 --- /dev/null +++ b/Assets/Scripts/ServerShared/NIH/MIConvexHull/IVertex.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a55f713690988bb48aef7cbd4f01ebc7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/ServerShared/NIH/MIConvexHull/Triangulation.cs b/Assets/Scripts/ServerShared/NIH/MIConvexHull/Triangulation.cs new file mode 100644 index 000000000..690071bec --- /dev/null +++ b/Assets/Scripts/ServerShared/NIH/MIConvexHull/Triangulation.cs @@ -0,0 +1,181 @@ +/****************************************************************************** + * + * The MIT License (MIT) + * + * MIConvexHull, Copyright (c) 2015 David Sehnal, Matthew Campbell + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + *****************************************************************************/ + +using System.Collections.Generic; +using System.Linq; + +namespace MIConvexHull +{ + /// + /// Simple interface to unify different types of triangulations in the future. + /// + /// The type of the t vertex. + /// The type of the t cell. + public interface ITriangulation + where TCell : TriangulationCell, new() + where TVertex : IVertex + { + /// + /// Triangulation simplexes. For 2D - triangles, 3D - tetrahedrons, etc ... + /// + /// The cells. + IEnumerable Cells { get; } + } + + /// + /// Factory class for creating triangulations. + /// + public static class Triangulation + { + /// + /// Creates the Delaunay triangulation of the input data. + /// + /// The type of the t vertex. + /// The data. + /// The plane distance tolerance (default is 1e-10). If too high, points + /// will be missed. If too low, the algorithm may break. Only adjust if you notice problems. + /// ITriangulation<TVertex, DefaultTriangulationCell<TVertex>>. + public static ITriangulation> CreateDelaunay( + IList data, + float PlaneDistanceTolerance = Constants.DefaultPlaneDistanceTolerance) + where TVertex : IVertex + { + return DelaunayTriangulation>.Create(data, PlaneDistanceTolerance); + } + + /// + /// Creates the Delaunay triangulation of the input data. + /// + /// The data. + /// The plane distance tolerance (default is 1e-10). If too high, points + /// will be missed. If too low, the algorithm may break. Only adjust if you notice problems. + /// ITriangulation<DefaultVertex, DefaultTriangulationCell<DefaultVertex>>. + public static ITriangulation> CreateDelaunay( + IList data, + float PlaneDistanceTolerance = Constants.DefaultPlaneDistanceTolerance) + { + var points = data.Select(p => new DefaultVertex { Position = p }).ToList(); + return DelaunayTriangulation>.Create(points, PlaneDistanceTolerance); + } + + /// + /// Creates the Delaunay triangulation of the input data. + /// + /// The type of the t vertex. + /// The type of the t face. + /// The data. + /// The plane distance tolerance (default is 1e-10). If too high, points + /// will be missed. If too low, the algorithm may break. Only adjust if you notice problems. + /// ITriangulation<TVertex, TFace>. + public static ITriangulation CreateDelaunay(IList data, + float PlaneDistanceTolerance = Constants.DefaultPlaneDistanceTolerance) + where TVertex : IVertex + where TFace : TriangulationCell, new() + { + return DelaunayTriangulation.Create(data, PlaneDistanceTolerance); + } + + + /// + /// Create the voronoi mesh. + /// + /// The type of the t vertex. + /// The type of the t cell. + /// The type of the t edge. + /// The data. + /// The plane distance tolerance (default is 1e-10). If too high, points + /// will be missed. If too low, the algorithm may break. Only adjust if you notice problems. + /// VoronoiMesh<TVertex, TCell, TEdge>. + public static VoronoiMesh CreateVoronoi(IList data, + float PlaneDistanceTolerance = Constants.DefaultPlaneDistanceTolerance) + where TCell : TriangulationCell, new() + where TVertex : IVertex + where TEdge : VoronoiEdge, new() + { + return VoronoiMesh.Create(data, PlaneDistanceTolerance); + } + + /// + /// Create the voronoi mesh. + /// + /// The type of the t vertex. + /// The data. + /// The plane distance tolerance (default is 1e-10). If too high, points + /// will be missed. If too low, the algorithm may break. Only adjust if you notice problems. + /// VoronoiMesh<TVertex, DefaultTriangulationCell<TVertex>, VoronoiEdge<TVertex, DefaultTriangulationCell<TVertex>>>. + public static + VoronoiMesh + , VoronoiEdge>> + CreateVoronoi(IList data, + float PlaneDistanceTolerance = Constants.DefaultPlaneDistanceTolerance) + where TVertex : IVertex + { + return + VoronoiMesh + , VoronoiEdge> + >.Create(data, PlaneDistanceTolerance); + } + + /// + /// Create the voronoi mesh. + /// + /// The data. + /// The plane distance tolerance (default is 1e-10). If too high, points + /// will be missed. If too low, the algorithm may break. Only adjust if you notice problems. + /// VoronoiMesh<DefaultVertex, DefaultTriangulationCell<DefaultVertex>, VoronoiEdge<DefaultVertex, DefaultTriangulationCell<DefaultVertex>>>. + public static + VoronoiMesh + , + VoronoiEdge>> + CreateVoronoi(IList data, + float PlaneDistanceTolerance = Constants.DefaultPlaneDistanceTolerance) + { + var points = data.Select(p => new DefaultVertex { Position = p.ToArray() }).ToList(); + return + VoronoiMesh + , + VoronoiEdge>>.Create(points, PlaneDistanceTolerance); + } + + /// + /// Create the voronoi mesh. + /// + /// The type of the t vertex. + /// The type of the t cell. + /// The data. + /// The plane distance tolerance (default is 1e-10). If too high, points + /// will be missed. If too low, the algorithm may break. Only adjust if you notice problems. + /// VoronoiMesh<TVertex, TCell, VoronoiEdge<TVertex, TCell>>. + public static VoronoiMesh> CreateVoronoi( + IList data, + float PlaneDistanceTolerance = Constants.DefaultPlaneDistanceTolerance) + where TVertex : IVertex + where TCell : TriangulationCell, new() + { + return VoronoiMesh>.Create(data, PlaneDistanceTolerance); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/ServerShared/NIH/MIConvexHull/Triangulation.cs.meta b/Assets/Scripts/ServerShared/NIH/MIConvexHull/Triangulation.cs.meta new file mode 100644 index 000000000..2f8f75a85 --- /dev/null +++ b/Assets/Scripts/ServerShared/NIH/MIConvexHull/Triangulation.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0762bfe861ed97749a222fb1c217788a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Carbon_Fibre.meta b/Assets/Scripts/ServerShared/NIH/MIConvexHull/Triangulation.meta similarity index 77% rename from Assets/Materials/PBR/Carbon_Fibre.meta rename to Assets/Scripts/ServerShared/NIH/MIConvexHull/Triangulation.meta index c4c6f51e4..346f5fafe 100644 --- a/Assets/Materials/PBR/Carbon_Fibre.meta +++ b/Assets/Scripts/ServerShared/NIH/MIConvexHull/Triangulation.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 636104c9ca48436da05c3f6003fd3eae +guid: 5bf99a94223c6e1458c243cb68091852 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Assets/Scripts/ServerShared/NIH/MIConvexHull/Triangulation/DelaunayTrianglationInternal.cs b/Assets/Scripts/ServerShared/NIH/MIConvexHull/Triangulation/DelaunayTrianglationInternal.cs new file mode 100644 index 000000000..7209c0ccc --- /dev/null +++ b/Assets/Scripts/ServerShared/NIH/MIConvexHull/Triangulation/DelaunayTrianglationInternal.cs @@ -0,0 +1,96 @@ +/****************************************************************************** + * + * The MIT License (MIT) + * + * MIConvexHull, Copyright (c) 2015 David Sehnal, Matthew Campbell + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + *****************************************************************************/ + +using System.Collections.Generic; +using System.Linq; + +namespace MIConvexHull +{ + /* + * Code here handles triangulation related stuff. + */ + + /// + /// Class ConvexHullAlgorithm. + /// + internal partial class ConvexHullAlgorithm + { + /// + /// Computes the Delaunay triangulation. + /// + /// The type of the t vertex. + /// The type of the t cell. + /// The data. + /// The plane distance tolerance. + /// TCell[]. + internal static TCell[] GetDelaunayTriangulation(IList data, + float PlaneDistanceTolerance ) + where TCell : TriangulationCell, new() + where TVertex : IVertex + { + var ch = new ConvexHullAlgorithm(data.Cast().ToArray(), true, PlaneDistanceTolerance); + ch.GetConvexHull(); + ch.RemoveUpperFaces(); + return ch.GetConvexFaces(); + } + + /// + /// Removes up facing Tetrahedrons from the triangulation. + /// + private void RemoveUpperFaces() + { + var delaunayFaces = ConvexFaces; + var dimension = NumOfDimensions - 1; + + // Remove the "upper" faces + for (var i = delaunayFaces.Count - 1; i >= 0; i--) + { + var candidateIndex = delaunayFaces[i]; + var candidate = FacePool[candidateIndex]; + if (candidate.Normal[dimension] >= 0.0) + { + for (var fi = 0; fi < candidate.AdjacentFaces.Length; fi++) + { + var af = candidate.AdjacentFaces[fi]; + if (af >= 0) + { + var face = FacePool[af]; + for (var j = 0; j < face.AdjacentFaces.Length; j++) + { + if (face.AdjacentFaces[j] == candidateIndex) + { + face.AdjacentFaces[j] = -1; + } + } + } + } + delaunayFaces[i] = delaunayFaces[delaunayFaces.Count - 1]; + delaunayFaces.Pop(); + } + } + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/ServerShared/NIH/MIConvexHull/Triangulation/DelaunayTrianglationInternal.cs.meta b/Assets/Scripts/ServerShared/NIH/MIConvexHull/Triangulation/DelaunayTrianglationInternal.cs.meta new file mode 100644 index 000000000..d78b006e2 --- /dev/null +++ b/Assets/Scripts/ServerShared/NIH/MIConvexHull/Triangulation/DelaunayTrianglationInternal.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: de8661d86f2667647b9dca59c1c97e9a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/ServerShared/NIH/MIConvexHull/Triangulation/DelaunayTriangulation.cs b/Assets/Scripts/ServerShared/NIH/MIConvexHull/Triangulation/DelaunayTriangulation.cs new file mode 100644 index 000000000..a22962b23 --- /dev/null +++ b/Assets/Scripts/ServerShared/NIH/MIConvexHull/Triangulation/DelaunayTriangulation.cs @@ -0,0 +1,75 @@ +/****************************************************************************** + * + * The MIT License (MIT) + * + * MIConvexHull, Copyright (c) 2015 David Sehnal, Matthew Campbell + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + *****************************************************************************/ + +using System; +using System.Collections.Generic; + +namespace MIConvexHull +{ + /// + /// Calculation and representation of Delaunay triangulation. + /// + /// The type of the t vertex. + /// The type of the t cell. + /// + public class DelaunayTriangulation : ITriangulation + where TCell : TriangulationCell, new() + where TVertex : IVertex + { + /// + /// Can only be created using a factory method. + /// + private DelaunayTriangulation() + { + } + + /// + /// Cells of the triangulation. + /// + /// The cells. + public IEnumerable Cells { get; private set; } + + /// + /// Creates the Delaunay triangulation of the input data. + /// + /// The data. + /// The plane distance tolerance (default is 1e-10). If too high, points + /// will be missed. If too low, the algorithm may break. Only adjust if you notice problems. + /// DelaunayTriangulation<TVertex, TCell>. + /// data + /// data + public static DelaunayTriangulation Create(IList data, + float PlaneDistanceTolerance)// = Constants.DefaultPlaneDistanceTolerance) + { + if (data == null) throw new ArgumentNullException("data"); + if (data.Count == 0) return new DelaunayTriangulation { Cells = new TCell[0] }; + + var cells = ConvexHullAlgorithm.GetDelaunayTriangulation(data, PlaneDistanceTolerance); + + return new DelaunayTriangulation { Cells = cells }; + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/ServerShared/NIH/MIConvexHull/Triangulation/DelaunayTriangulation.cs.meta b/Assets/Scripts/ServerShared/NIH/MIConvexHull/Triangulation/DelaunayTriangulation.cs.meta new file mode 100644 index 000000000..fc2ba273c --- /dev/null +++ b/Assets/Scripts/ServerShared/NIH/MIConvexHull/Triangulation/DelaunayTriangulation.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4b0e872e78d2ab8428b446cfa5c06580 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/ServerShared/NIH/MIConvexHull/Triangulation/TriangulationCell.cs b/Assets/Scripts/ServerShared/NIH/MIConvexHull/Triangulation/TriangulationCell.cs new file mode 100644 index 000000000..63e9d1f5a --- /dev/null +++ b/Assets/Scripts/ServerShared/NIH/MIConvexHull/Triangulation/TriangulationCell.cs @@ -0,0 +1,51 @@ +/****************************************************************************** + * + * The MIT License (MIT) + * + * MIConvexHull, Copyright (c) 2015 David Sehnal, Matthew Campbell + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + *****************************************************************************/ + +namespace MIConvexHull +{ + /// + /// Representation of the triangulation cell. Pretty much the same as ConvexFace, + /// just wanted to distinguish the two. + /// To declare your own face type, use class Face : DelaunayFace(of Vertex, of Face) + /// + /// The type of the t vertex. + /// The type of the t cell. + /// + public abstract class TriangulationCell : ConvexFace + where TVertex : IVertex + where TCell : ConvexFace + { + } + + /// + /// Default triangulation cell. + /// + /// The type of the t vertex. + public class DefaultTriangulationCell : TriangulationCell> + where TVertex : IVertex + { + } +} \ No newline at end of file diff --git a/Assets/Scripts/ServerShared/NIH/MIConvexHull/Triangulation/TriangulationCell.cs.meta b/Assets/Scripts/ServerShared/NIH/MIConvexHull/Triangulation/TriangulationCell.cs.meta new file mode 100644 index 000000000..29dcef792 --- /dev/null +++ b/Assets/Scripts/ServerShared/NIH/MIConvexHull/Triangulation/TriangulationCell.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 808182249e0e66143b65945d9aeb37fe +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/ServerShared/NIH/MIConvexHull/Triangulation/VoronoiEdge.cs b/Assets/Scripts/ServerShared/NIH/MIConvexHull/Triangulation/VoronoiEdge.cs new file mode 100644 index 000000000..1557352d6 --- /dev/null +++ b/Assets/Scripts/ServerShared/NIH/MIConvexHull/Triangulation/VoronoiEdge.cs @@ -0,0 +1,93 @@ +/****************************************************************************** + * + * The MIT License (MIT) + * + * MIConvexHull, Copyright (c) 2015 David Sehnal, Matthew Campbell + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + *****************************************************************************/ + +namespace MIConvexHull +{ + /// + /// A class representing an (undirected) edge of the Voronoi graph. + /// + /// The type of the t vertex. + /// The type of the t cell. + public class VoronoiEdge + where TVertex : IVertex + where TCell : TriangulationCell + { + /// + /// Create an instance of the edge. + /// + public VoronoiEdge() + { + } + + /// + /// Create an instance of the edge. + /// + /// The source. + /// The target. + public VoronoiEdge(TCell source, TCell target) + { + Source = source; + Target = target; + } + + /// + /// Source of the edge. + /// + /// The source. + public TCell Source { get; internal set; } + + /// + /// Target of the edge. + /// + /// The target. + public TCell Target { get; internal set; } + + /// + /// ... + /// + /// The object to compare with the current object. + /// true if the specified is equal to this instance; otherwise, false. + public override bool Equals(object obj) + { + var other = obj as VoronoiEdge; + if (other == null) return false; + if (ReferenceEquals(this, other)) return true; + return (Source == other.Source && Target == other.Target) + || (Source == other.Target && Target == other.Source); + } + + /// + /// ... + /// + /// A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + public override int GetHashCode() + { + var hash = 23; + hash = hash*31 + Source.GetHashCode(); + return hash*31 + Target.GetHashCode(); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/ServerShared/NIH/MIConvexHull/Triangulation/VoronoiEdge.cs.meta b/Assets/Scripts/ServerShared/NIH/MIConvexHull/Triangulation/VoronoiEdge.cs.meta new file mode 100644 index 000000000..71c57ddb7 --- /dev/null +++ b/Assets/Scripts/ServerShared/NIH/MIConvexHull/Triangulation/VoronoiEdge.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2f5c388c78c121a47b14c2f4ed26af38 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/ServerShared/NIH/MIConvexHull/Triangulation/VoronoiMesh.cs b/Assets/Scripts/ServerShared/NIH/MIConvexHull/Triangulation/VoronoiMesh.cs new file mode 100644 index 000000000..3142af854 --- /dev/null +++ b/Assets/Scripts/ServerShared/NIH/MIConvexHull/Triangulation/VoronoiMesh.cs @@ -0,0 +1,203 @@ +/****************************************************************************** + * + * The MIT License (MIT) + * + * MIConvexHull, Copyright (c) 2015 David Sehnal, Matthew Campbell + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + *****************************************************************************/ + +using System; +using System.Collections.Generic; +using System.Linq; + +namespace MIConvexHull +{ + /// + /// A factory class for creating a Voronoi mesh. + /// + public static class VoronoiMesh + { + /// + /// Create the voronoi mesh. + /// + /// The type of the t vertex. + /// The type of the t cell. + /// The type of the t edge. + /// The data. + /// VoronoiMesh<TVertex, TCell, TEdge>. + public static VoronoiMesh Create(IList data, + float PlaneDistanceTolerance = Constants.DefaultPlaneDistanceTolerance) + where TCell : TriangulationCell, new() + where TVertex : IVertex + where TEdge : VoronoiEdge, new() + { + return VoronoiMesh.Create(data, PlaneDistanceTolerance); + } + + /// + /// Create the voronoi mesh. + /// + /// The type of the t vertex. + /// The data. + /// VoronoiMesh<TVertex, DefaultTriangulationCell<TVertex>, VoronoiEdge<TVertex, DefaultTriangulationCell<TVertex>>>. + public static + VoronoiMesh + , VoronoiEdge>> + Create(IList data, + float PlaneDistanceTolerance = Constants.DefaultPlaneDistanceTolerance) + where TVertex : IVertex + { + return + VoronoiMesh + , VoronoiEdge> + >.Create(data, PlaneDistanceTolerance); + } + + /// + /// Create the voronoi mesh. + /// + /// The data. + /// VoronoiMesh<DefaultVertex, DefaultTriangulationCell<DefaultVertex>, VoronoiEdge<DefaultVertex, DefaultTriangulationCell<DefaultVertex>>>. + public static + VoronoiMesh + , + VoronoiEdge>> + Create(IList data, + float PlaneDistanceTolerance = Constants.DefaultPlaneDistanceTolerance) + { + var points = data.Select(p => new DefaultVertex { Position = p.ToArray() }).ToList(); + return + VoronoiMesh + , + VoronoiEdge>>.Create(points, PlaneDistanceTolerance); + } + + /// + /// Create the voronoi mesh. + /// + /// The type of the t vertex. + /// The type of the t cell. + /// The data. + /// VoronoiMesh<TVertex, TCell, VoronoiEdge<TVertex, TCell>>. + public static VoronoiMesh> Create( + IList data, + float PlaneDistanceTolerance = Constants.DefaultPlaneDistanceTolerance) + where TVertex : IVertex + where TCell : TriangulationCell, new() + { + return VoronoiMesh>.Create(data, PlaneDistanceTolerance); + } + } + + /// + /// A representation of a voronoi mesh. + /// + /// The type of the t edge. + /// The type of the t vertex. + /// The type of the t cell. + public class VoronoiMesh + where TCell : TriangulationCell, new() + where TVertex : IVertex + where TEdge : VoronoiEdge, new() + { + /// + /// Can only be created using a factory method. + /// + private VoronoiMesh() + { + } + + /// + /// Vertices of the diagram. + /// + /// The vertices. + public IEnumerable Vertices { get; private set; } + + /// + /// Edges connecting the cells. + /// The same information can be retrieved Cells' Adjacency. + /// + /// The edges. + public IEnumerable Edges { get; private set; } + + /// + /// Create a Voronoi diagram of the input data. + /// + /// The data. + /// The plane distance tolerance (default is 1e-10). If too high, points + /// will be missed. If too low, the algorithm may break. Only adjust if you notice problems. + /// VoronoiMesh<TVertex, TCell, TEdge>. + /// data + /// data + public static VoronoiMesh Create(IList data, + float PlaneDistanceTolerance = Constants.DefaultPlaneDistanceTolerance) + { + if (data == null) throw new ArgumentNullException("data"); + + var t = DelaunayTriangulation.Create(data, PlaneDistanceTolerance); + var vertices = t.Cells.ToList(); + var edges = new HashSet(new EdgeComparer()); + + foreach (var f in vertices) + { + for (var i = 0; i < f.Adjacency.Length; i++) + { + var af = f.Adjacency[i]; + if (af != null) edges.Add(new TEdge { Source = f, Target = af }); + } + } + + return new VoronoiMesh + { + Vertices = vertices, + Edges = edges.ToList() + }; + } + + /// + /// This is probably not needed, but might make things a tiny bit faster. + /// + /// + private class EdgeComparer : IEqualityComparer + { + /// + /// Equals the specified x. + /// + /// The x. + /// The y. + /// System.Boolean. + public bool Equals(TEdge x, TEdge y) + { + return (x.Source == y.Source && x.Target == y.Target) || (x.Source == y.Target && x.Target == y.Source); + } + + /// + /// Returns a hash code for this instance. + /// + /// The for which a hash code is to be returned. + /// A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + public int GetHashCode(TEdge obj) + { + return obj.Source.GetHashCode() ^ obj.Target.GetHashCode(); + } + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/ServerShared/NIH/MIConvexHull/Triangulation/VoronoiMesh.cs.meta b/Assets/Scripts/ServerShared/NIH/MIConvexHull/Triangulation/VoronoiMesh.cs.meta new file mode 100644 index 000000000..c87b2415b --- /dev/null +++ b/Assets/Scripts/ServerShared/NIH/MIConvexHull/Triangulation/VoronoiMesh.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fbb5750f20479844eb4e504302755db9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/ServerShared/NIH/MIConvexHull/Vertex2.cs b/Assets/Scripts/ServerShared/NIH/MIConvexHull/Vertex2.cs new file mode 100644 index 000000000..e00c7deef --- /dev/null +++ b/Assets/Scripts/ServerShared/NIH/MIConvexHull/Vertex2.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections; +using MIConvexHull; +using CultMath; +using static CultMath.math; + +public class Vertex2 : IVertex +{ + public float[] Position => new[] {StoredPosition.x, StoredPosition.y}; + + public float2 StoredPosition; + + public float x { get { return StoredPosition.x; } } + public float y { get { return StoredPosition.y; } } + + public Vertex2(float x, float y) + { + StoredPosition = float2(x, y); + } + + public Vertex2(float2 pos) + { + StoredPosition = pos; + } + + public float2 ToFloat2() { + return StoredPosition; + } + + public float Distance(Vertex2 v) + { + return length(StoredPosition-v.StoredPosition); + } +} diff --git a/Assets/Scripts/ServerShared/NIH/MIConvexHull/Vertex2.cs.meta b/Assets/Scripts/ServerShared/NIH/MIConvexHull/Vertex2.cs.meta new file mode 100644 index 000000000..a314ce4ec --- /dev/null +++ b/Assets/Scripts/ServerShared/NIH/MIConvexHull/Vertex2.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 67d3ec22ea52a2642a14ff864e3017b0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/ServerShared/NIH/MIConvexHull/Vertex2Object.cs b/Assets/Scripts/ServerShared/NIH/MIConvexHull/Vertex2Object.cs new file mode 100644 index 000000000..a266ddaec --- /dev/null +++ b/Assets/Scripts/ServerShared/NIH/MIConvexHull/Vertex2Object.cs @@ -0,0 +1,16 @@ +using CultMath; + +public class Vertex2 : Vertex2 +{ + public T StoredObject { get; } + + public Vertex2(float x, float y, T obj) : base(x, y) + { + StoredObject = obj; + } + + public Vertex2(float2 pos, T obj) : base(pos) + { + StoredObject = obj; + } +} \ No newline at end of file diff --git a/Assets/Scripts/ServerShared/NIH/MIConvexHull/Vertex2Object.cs.meta b/Assets/Scripts/ServerShared/NIH/MIConvexHull/Vertex2Object.cs.meta new file mode 100644 index 000000000..24639c89b --- /dev/null +++ b/Assets/Scripts/ServerShared/NIH/MIConvexHull/Vertex2Object.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: e42612a273ec490380eaa67bed216a6d +timeCreated: 1615418804 \ No newline at end of file diff --git a/Assets/Scripts/ServerShared/NIH/MIConvexHull/Vertex3.cs b/Assets/Scripts/ServerShared/NIH/MIConvexHull/Vertex3.cs new file mode 100644 index 000000000..a14aea5b1 --- /dev/null +++ b/Assets/Scripts/ServerShared/NIH/MIConvexHull/Vertex3.cs @@ -0,0 +1,30 @@ +using System.Collections; +using MIConvexHull; +using CultMath; +using static CultMath.math; + +public class Vertex3 : IVertex +{ + public float[] Position => new[] {StoredPosition.x, StoredPosition.y}; + + public float3 StoredPosition; + + public Vertex3(float x, float y, float z) + { + StoredPosition = float3(x, y, z); + } + + public Vertex3(float3 pos) + { + StoredPosition = pos; + } + + public float3 ToFloat3() { + return StoredPosition; + } + + public float Distance(Vertex3 v) + { + return length(StoredPosition-v.StoredPosition); + } +} diff --git a/Assets/Scripts/ServerShared/NIH/MIConvexHull/Vertex3.cs.meta b/Assets/Scripts/ServerShared/NIH/MIConvexHull/Vertex3.cs.meta new file mode 100644 index 000000000..fc1115c36 --- /dev/null +++ b/Assets/Scripts/ServerShared/NIH/MIConvexHull/Vertex3.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3553f231414f28347996a803a79425fa +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/ServerShared/OrbitalEntity.cs b/Assets/Scripts/ServerShared/OrbitalEntity.cs index be1bd893c..93f055804 100644 --- a/Assets/Scripts/ServerShared/OrbitalEntity.cs +++ b/Assets/Scripts/ServerShared/OrbitalEntity.cs @@ -17,16 +17,12 @@ public class OrbitalEntity : Entity public float SecurityRadius; public LocationStory Story; public bool CanTow; - // What this station is for (StationKinds): its own fact, which under a stand-in hull differs from the hull's kind. - public CultRecordRef Kind; public OrbitalEntity(ItemManager itemManager, Zone zone, EquippableItem hull, CultRecordKey orbit, EntitySettings settings) : base(itemManager, zone, hull, settings) { OrbitData = orbit; } - public override float LayerHeight => ItemManager.GameplaySettings.OrbitalLayerHeight; - public override void Update(float delta) { if (OrbitData.IsSet()) diff --git a/Assets/Scripts/ServerShared/Pilot.cs b/Assets/Scripts/ServerShared/Pilot.cs deleted file mode 100644 index 0ef20f96c..000000000 --- a/Assets/Scripts/ServerShared/Pilot.cs +++ /dev/null @@ -1,176 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -using System.Collections.Generic; -using CultMath; - -// A turn demand as a pilot commands it: a rate, or a heading resolved against the hull's facing when it is applied, so a -// held heading keeps steering as the hull turns. -public readonly struct TurnCommand -{ - private readonly bool _toward; - private readonly float _rate; - private readonly float2 _heading; - - private TurnCommand(bool toward, float rate, float2 heading) - { - _toward = toward; - _rate = rate; - _heading = heading; - } - - public static TurnCommand OfRate(float rate) => new TurnCommand(false, rate, default); - public static TurnCommand Toward(float2 heading) => new TurnCommand(true, 0, heading); - - public float Resolve(Ship ship) => _toward ? Steering.Toward(ship, _heading) : _rate; -} - -// The player's target presses, each answered by the entity's own chooser (Entity.TargetNext and the rest) when applied. -public enum TargetVerb -{ - None, - UnderReticle, - NearestEnemy, - Next, - Previous -} - -// The one input an entity's pilot gives it (its agent, the player, a scripted pilot): only own-ship vectors and handles the -// pilot was given (ruling observation-sensors-only). Commands are per entity, never per Flight or side: a side may be one -// ship (ruling brain-one-per-side-r2). PilotApplier.Apply is the only writer of the entity's fields from it; the pilot -// also reads back its own pending decisions this step (Designated, Pulls), because the entity still holds last step's. -// Held fields persist until the pilot replaces them, so a pilot deciding below the sim rate keeps flying (ruling -// lower-game-sim-rate); null leaves the field to whoever wrote it last. One-shots apply once, in order, and are cleared. -public sealed class PilotCommand -{ - public TurnCommand? Turn; - public float2? Movement; - public float3? Aim; - public float? Tractor; - - internal readonly List Designations = new List(); - internal readonly List Selections = new List(); - internal readonly List Hails = new List(); - internal readonly List Uses = new List(); - internal readonly List<(ActivatedBehavior Behavior, bool Pull)> Triggers = new List<(ActivatedBehavior, bool)>(); - internal readonly List<(Entity Other, bool? Hostile, bool Toggle)> Iffs = new List<(Entity, bool?, bool)>(); - internal TargetVerb TargetVerb; - // The step's give verb: a Give, or a stop when its Receiver is null. The last one in a step wins. - internal (Entity Receiver, ItemInstance Item, int Quantity)? GiveVerb; - internal int AimCycles; - internal int ShutdownOverrideToggles, HeatsinkToggles, ShieldToggles, Pings; - - public void Designate(TargetRef target) => Designations.Add(target); - public void SelectItem(EquippedItem item) => Selections.Add(item); - public void Hail(string message) => Hails.Add(message); - public void Use(ConsumableItemData consumable) => Uses.Add(consumable); - public void Pull(ActivatedBehavior behavior) => Triggers.Add((behavior, true)); - public void Release(ActivatedBehavior behavior) => Triggers.Add((behavior, false)); - // The last verb in a step wins. - public void Verb(TargetVerb verb) => TargetVerb = verb; - public void CycleAim() => AimCycles++; - public void Iff(Entity other, bool? hostile) => Iffs.Add((other, hostile, false)); - // A press that flips the stance on the entity's target as both stand when applied, after the step's target verbs and in - // order with Iff, so two in a step cancel. With no target then, it does nothing. - public void ToggleStance() => Iffs.Add((null, null, true)); - // The entity's own switches, pressed: each press flips its switch when applied, so two in a step cancel. - public void ToggleOverrideShutdown() => ShutdownOverrideToggles++; - public void ToggleHeatsinks() => HeatsinkToggles++; - public void ToggleShield() => ShieldToggles++; - public void Ping() => Pings++; - // Offers goods from this entity's hold to a ship alongside (ruling transfer-is-give-only): the quantity of a commodity, - // or the one crafted instance. It replaces any give under way. A give of nothing, or of less than one, is ignored, and - // so is one to oneself when applied. The last give or stop in a step wins. - public void Give(Entity receiver, ItemInstance item, int quantity) - { - if (receiver == null || item == null) return; - var count = item is CraftedItemInstance ? 1 : quantity; - if (count < 1) return; - GiveVerb = (receiver, item, count); - } - public void StopGiving() => GiveVerb = (null, null, 0); - - // The pilot's own pending decisions, which it reads back instead of the ship (that is last step's applied state). - public TargetRef? Designated => Designations.Count > 0 ? Designations[Designations.Count - 1] : (TargetRef?) null; - - // Whether this pilot has commanded a trigger, pull or release, for `behavior` this step. - public bool Commands(ActivatedBehavior behavior) - { - foreach (var trigger in Triggers) - if (ReferenceEquals(trigger.Behavior, behavior)) return true; - return false; - } - - // Whether the last trigger this pilot commanded for `behavior` this step is a pull. - public bool Pulls(ActivatedBehavior behavior) - { - for (var i = Triggers.Count - 1; i >= 0; i--) - if (ReferenceEquals(Triggers[i].Behavior, behavior)) return Triggers[i].Pull; - return false; - } - - internal void ClearOneShots() - { - Designations.Clear(); - Selections.Clear(); - Hails.Clear(); - Uses.Clear(); - Triggers.Clear(); - Iffs.Clear(); - TargetVerb = TargetVerb.None; - GiveVerb = null; - AimCycles = 0; - ShutdownOverrideToggles = HeatsinkToggles = ShieldToggles = Pings = 0; - } -} - -// The one writer of an entity's pilot-controlled fields, called only from Zone.Update. The order is a rule: the target -// lands (a designation, then a chooser verb) before its item is selected or the aim cycled, and the aim before the -// triggers, so a pilot fires along the aim it commands this step. -public static class PilotApplier -{ - public static void Apply(Entity entity) - { - var command = entity.Command; - foreach (var target in command.Designations) - if (!entity.Target.Value.Equals(target)) entity.SetTarget(target); - switch (command.TargetVerb) - { - case TargetVerb.UnderReticle: entity.TargetUnderReticle(); break; - case TargetVerb.NearestEnemy: entity.TargetNearestEnemy(); break; - case TargetVerb.Next: entity.TargetNext(); break; - case TargetVerb.Previous: entity.TargetPrevious(); break; - } - foreach (var item in command.Selections) entity.TrySelectTargetItem(item); - for (var i = 0; i < command.AimCycles; i++) entity.CycleAim(); - foreach (var (other, hostile, toggle) in command.Iffs) - { - if (!toggle) entity.SetIff(other, hostile); - else if (entity.Target.Value.Entity is Entity target) entity.SetIff(target, !entity.IsHostileTo(target)); - } - for (var i = 0; i < command.ShutdownOverrideToggles; i++) entity.OverrideShutdown = !entity.OverrideShutdown; - for (var i = 0; i < command.HeatsinkToggles; i++) entity.HeatsinksEnabled = !entity.HeatsinksEnabled; - if (entity.Shield != null) - for (var i = 0; i < command.ShieldToggles; i++) entity.Shield.Item.Enabled.Value = !entity.Shield.Item.Enabled.Value; - for (var i = 0; i < command.Pings; i++) entity.Sensor?.Ping(); - foreach (var hail in command.Hails) entity.SetMessage(hail); - foreach (var consumable in command.Uses) entity.TryActivateConsumable(consumable); - if (command.GiveVerb is { } give) - { - if (give.Receiver == null) CargoTransfer.End(entity, GiveEnd.Stopped); - else if (!ReferenceEquals(give.Receiver, entity)) CargoTransfer.Begin(entity, new GiveOrder(give.Receiver, give.Item, give.Quantity)); - } - if (command.Aim is float3 aim) entity.Aim = aim; - foreach (var (behavior, pull) in command.Triggers) - if (pull) behavior.Activate(); - else behavior.Deactivate(); - if (entity is Ship ship) - { - if (command.Turn is TurnCommand turn) ship.Turn = turn.Resolve(ship); - if (command.Movement is float2 movement) ship.MovementDirection = movement; - } - if (command.Tractor is float tractor) entity.TractorCommand = tractor; - command.ClearOneShots(); - } -} diff --git a/Assets/Scripts/ServerShared/Pilot.cs.meta b/Assets/Scripts/ServerShared/Pilot.cs.meta deleted file mode 100644 index e13004643..000000000 --- a/Assets/Scripts/ServerShared/Pilot.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 0ae6251a7a32402cb7f7db7ff1fc5084 \ No newline at end of file diff --git a/Assets/Scripts/ServerShared/PlayerSettings.cs b/Assets/Scripts/ServerShared/PlayerSettings.cs index 54b8537cd..d3c809fed 100644 --- a/Assets/Scripts/ServerShared/PlayerSettings.cs +++ b/Assets/Scripts/ServerShared/PlayerSettings.cs @@ -10,7 +10,7 @@ using static CultMath.math; public class PlayerSettings { [Key(0)] public string Name = "Anonymous"; - // Keys 1 and 2 are retired; an older player.cc that still carries them loads, and they are dropped. + [Key(2)] public bool TutorialPassed; [Key(3)] public Dictionary HashedStoryFiles = new Dictionary(); [Key(4)] public PlayerGameplaySettings GameplaySettings = new PlayerGameplaySettings(); [Key(5)] public PlayerInputSettings InputSettings = new PlayerInputSettings(); @@ -63,9 +63,7 @@ public class PlayerGameplaySettings public class PlayerGraphicsSettings { [Key(0)] public Quality NebulaQuality = Quality.Normal; - // Key 1, retired: ShowAsteroidsInMinimap (minimap belts always draw) - // How hard the camera shakes when the player's ship takes an impact: 0 off, 1 full (Feedback.Cue). - [Key(2)] public float ScreenShake = 1f; + [Key(1)] public bool ShowAsteroidsInMinimap; } [MessagePackObject] diff --git a/Assets/Scripts/ServerShared/PowerBus.cs b/Assets/Scripts/ServerShared/PowerBus.cs index d0c53b0df..f6fb386ec 100644 --- a/Assets/Scripts/ServerShared/PowerBus.cs +++ b/Assets/Scripts/ServerShared/PowerBus.cs @@ -11,14 +11,9 @@ using static CultMath.math; // Entity.TryConsumeEnergy/CanConsumeEnergy: at HEAD every draw succeeded as long as one reactor was online, and // any shortfall was silently taxed onto the reactor as heat instead of ever being refused (§0.5). The bus makes // the ceiling real: demand beyond what this tick's generation and stored capacitor charge can cover goes unmet. -// -// Cut 5 (docs/stats-and-power-cut.md §1.3) replaces the single shared fraction with priority tiers -// (PowerTiers.cs): the total this tick's supply can cover (TotalGrant, unchanged by tiers -- see below) is -// walked tier by tier, lowest number first. A tier is fed in full before the next tier sees anything left; a -// tier with no demand simply passes its whole share down; within a tier, every consumer's own request is -// rationed by the same fraction, so two requests of unequal size still divide proportionally. This is the death -// of the old "whoever equipped first drains the capacitors first" hidden priority (§0.5), replaced with an -// authored one instead of no priority at all. +// There are no tiers yet (Cut 5 adds them), so a shortfall rations the whole pool by the same fraction for every +// consumer alike -- the death of the old "whoever equipped first drains the capacitors first" hidden priority +// (§0.5), not a replacement for it. // // Bus capacitors are charged and drained only here (§0b): Reactor no longer touches them, and neither does any // IPowerConsumer. The four instant draws the cut map names (a burst, a shot, a ping, a hit taken) are @@ -37,43 +32,16 @@ public class PowerBus public float TotalGeneration { get; private set; } public float TotalDemand { get; private set; } - // Energy actually delivered this tick, summed across every tier: generation first, then whatever stored - // capacitor charge covers the rest, capped at demand. Equal to TotalDemand whenever supply covers it; equal - // to (generation + available charge) otherwise -- never more, which TryConsumeEnergy could never promise (a - // reactor always paid the remainder as heat, so overdraw was invisible at this level). Which consumers that - // total actually reaches is what tiering (below) decides; this figure is unaffected by tiers -- the ceiling - // is a property of supply, not of priority. + // Energy actually delivered this tick: generation first, then whatever stored capacitor charge covers the + // rest, capped at demand. Equal to TotalDemand whenever supply covers it; equal to (generation + available + // charge) otherwise -- never more, which TryConsumeEnergy could never promise (a reactor always paid the + // remainder as heat, so overdraw was invisible at this level). public float TotalGrant { get; private set; } - // Aggregate fraction of all demand granted this tick (TotalGrant / TotalDemand) -- a fleet-wide summary, not - // what any one consumer necessarily received. Still written onto every consuming EquippedItem.PowerSupply - // when every tier in play happens to land on the same ratio (single-tier loadouts, the common case in the - // Cut 3/4 test fixtures), but a multi-tier shortfall gives different tiers different ratios -- read - // TierGrantRatio or the item's own PowerSupply for that. + // Fraction of every consumer's own request actually granted this tick, shared by every consumer alike (no + // tiers yet). Also written onto every consuming EquippedItem.PowerSupply. public float GrantRatio { get; private set; } = 1f; - // F3 (docs/stats-and-power-cut.md, Soul pass 2026-09-19): the sentinel AllocateTiers writes for a tier with no - // consumers equipped in it at all. Distinct from 1f -- an empty tier has not been "fully supplied," there was - // nothing to supply, and reporting it as 1f is exactly the fully-satisfied signal a UI is meant to read as - // "this tier is fine," on a ship that may be fully blacked out. A reader must treat NaN as "nothing to report - // here," not as satisfied or starved. - public const float NoDemand = float.NaN; - - // Cut 5: this tick's within-tier grant ratio, indexed by PowerTiers.Critical..Utility. 1f means that tier's - // demand was fully met; NoDemand (NaN) means the tier has no consumers at all (see NoDemand above); anything - // else below 1f is exactly the "starved" state a future UI (Cut 8) reads instead of reconstructing it from - // per-item PowerSupply. A tier below a starved one is always 0f -- §1.3's "a tier boundary does not leak". - public float[] TierGrantRatio { get; } = InitFullTiers(); - - // Before the bus has ever run a Step, there is no grant information at all yet -- not "fully supplied," - // "nothing to report" (NoDemand), same as an empty tier reads once Step does run. - private static float[] InitFullTiers() - { - var ratios = new float[PowerTiers.Count]; - for (var i = 0; i < ratios.Length; i++) ratios[i] = NoDemand; - return ratios; - } - // What Reactor.Execute reads to run its own heat/throttle arithmetic (Cut 3: "the arithmetic survives, moved // under the bus's numbers"). Positive: demand left unmet after generation AND stored charge, split evenly // across online reactors for overload heat. Negative: generation left over after demand and after topping up @@ -81,71 +49,29 @@ public class PowerBus // a reported total, not a sink (§1.2). public float NetDraw { get; private set; } - // One equipped item's power request for this tick, captured once so PowerRequest -- which some behaviours - // (Shield, InstantWeapon, Sensor) implement by refreshing their own cached stats -- is never called twice in - // one Step. - private readonly struct Draw - { - public readonly EquippedItem Item; - public readonly int Tier; - public readonly float Request; - public Draw(EquippedItem item, int tier, float request) { Item = item; Tier = tier; Request = request; } - } - - private static bool ClosedByThermostat(EquippedItem item, Behavior consumer) - { - foreach (var behavior in item.BehaviorGroups[consumer.Data.Group].Behaviors) - { - if (behavior == consumer) return false; - if (behavior is Thermotoggle { Open: false }) return true; - } - return false; - } - public void Step(float dt) { var reactors = new List(); var capacitors = new List(); - var draws = new List(); + var consumers = new List(); foreach (var item in _entity.Equipment) foreach (var behavior in item.Behaviors) { switch (behavior) { - // F2 (docs/stats-and-power-cut.md, Soul pass 2026-09-19): this must agree with the one predicate - // Entity.Update actually gates Execute on (Active.Value, Entity.cs -- Enabled && Online), in both - // directions. Gating on Online alone let a reactor the player switched off (Enabled = false, so - // Active is false but Online stays true) keep generating here even though Reactor.Execute -- the - // behaviour that produces the heat receipt -- never runs for it: free, heat-free power. Capacitor - // has no IPowerConsumer/generation role and is unconditionally a store regardless of its own - // item's state (mirrors pre-existing behaviour; nothing in the ruling asks for that to change). - case Reactor reactor when item.Active.Value: + case Reactor reactor when reactor.Item.Online.Value: reactors.Add(reactor); break; case Capacitor capacitor: capacitors.Add(capacitor); break; } - // The other direction of the same rule: a consumer switched off or shut down (Active.Value false) - // never runs its Execute, so it must never be billed either -- otherwise a disabled item's demand - // starves every live consumer and drains the capacitors for energy nobody spends. - // And a consumer whose group a thermostat has closed ahead of it does not run this tick either, so it is - // not billed: a heater above its target draws nothing. - if (behavior is IPowerConsumer consumer && item.Active.Value && !ClosedByThermostat(item, behavior)) - { - // Cut 5 (docs/stats-and-power-cut.md §1.3): the item's own stored choice wins once it has one; - // PowerTiers.Unassigned only survives past EquippedItem's constructor for a consumer added to - // the game after this unit was minted, which the constructor never saw -- fall back to the - // behaviour's own default rather than stranding it at an invalid tier. - var tier = item.EquippableItem.PowerTier; - if (tier == PowerTiers.Unassigned) tier = consumer.DefaultPowerTier; - tier = clamp(tier, 0, PowerTiers.Count - 1); - draws.Add(new Draw(item, tier, max(0f, consumer.PowerRequest(dt)))); - } + if (behavior is IPowerConsumer consumer) + consumers.Add(consumer); } TotalGeneration = reactors.Sum(r => r.Generation(dt)); - TotalDemand = draws.Sum(d => d.Request); + TotalDemand = consumers.Sum(c => max(0f, c.PowerRequest(dt))); var availableCharge = capacitors.Sum(c => c.Charge); var preCapacitorNet = TotalDemand - TotalGeneration; @@ -166,56 +92,9 @@ public class PowerBus TotalGrant = TotalDemand - overload; GrantRatio = TotalDemand <= 1e-4f ? 1f : saturate(TotalGrant / TotalDemand); - AllocateTiers(draws); - } - - // Cut 5 (docs/stats-and-power-cut.md §1.3): walks tiers lowest-number-first, feeding each in full before the - // next sees anything. remaining only ever shrinks, and once it hits 0 every later tier's ratio is 0 by the - // same division -- a lower tier can never take from a higher one (§1.3 "a tier boundary does not leak"), - // because a higher tier's share is committed (remaining -= grant) before a lower tier is even considered. - // Within a tier every consumer shares that tier's one ratio against its own request, so two unequal requests - // still divide proportionally -- the same property Cut 3 proved for the whole ship, now proved per tier. - private void AllocateTiers(List draws) - { - var tierDemand = new float[PowerTiers.Count]; - // F3 (docs/stats-and-power-cut.md, Soul pass 2026-09-19): demand alone cannot tell "no consumer is - // equipped in this tier" from "a real consumer is equipped here and its own request happens to be 0 (or - // effectively 0) this tick" -- both sum to the same tierDemand. Only the first is actually empty; the - // second still has an item reading this tier's ratio back as its own PowerSupply, and that item is owed - // a real answer (trivially 1: it asked for nothing, so nothing it could be short of), not NoDemand. - var tierHasConsumer = new bool[PowerTiers.Count]; - foreach (var draw in draws) { tierDemand[draw.Tier] += draw.Request; tierHasConsumer[draw.Tier] = true; } - - var remaining = TotalGrant; - var ratios = TierGrantRatio; - for (var tier = 0; tier < PowerTiers.Count; tier++) - { - // A tier with genuinely no consumers is not satisfied, it is empty: report NoDemand, not the "fully - // supplied" signal 1f. Nothing to subtract from `remaining` either way. - if (!tierHasConsumer[tier]) { ratios[tier] = NoDemand; continue; } - var demand = tierDemand[tier]; - // This used to short-circuit ANY demand at or below 1e-4 the same way as a genuinely empty tier, - // which both reported a grant nobody made (an item reading ratio 1 while the ship generates nothing, - // down to Soul's own probe at 5e-5) and leaked that tier's unsubtracted share to every lower one. A - // consumer requesting truly nothing (demand <= 0f exactly) is trivially fully met; anything above - // that, however tiny, is rationed like any other tier. - if (demand <= 0f) { ratios[tier] = 1f; continue; } - var grant = min(demand, remaining); - ratios[tier] = saturate(grant / demand); - remaining -= grant; - } - - foreach (var draw in draws) - { - draw.Item.PowerSupply = ratios[draw.Tier]; - // Cut 6 (docs/stats-and-power-cut.md): the missing half of the wiring -- a stat with a PowerSupply - // term must recompute when the grant actually moves. Called unconditionally, once per draw per tick, - // the same shape as EquippedItem.UpdatePerformance's own Heat/Durability invalidation: "recomputes at - // most once per tick per (item, stat)," not "only when the value moved." An item with no PowerSupply - // term pays nothing extra -- the resolver's per-source generation bookkeeping (StatResolver.Resolve) - // only ever looks at sources a stat's own Terms declared. - _entity.Resolver.InvalidateSource(draw.Item, StatSource.PowerSupply); - } + foreach (var item in _entity.Equipment) + if (item.Behaviors.Any(b => b is IPowerConsumer)) + item.PowerSupply = GrantRatio; } // Mirrors Entity.TryConsumeEnergy's old do/while exactly (draw evenly across every capacitor that still has diff --git a/Assets/Scripts/ServerShared/PowerTiers.cs b/Assets/Scripts/ServerShared/PowerTiers.cs deleted file mode 100644 index c7c88233b..000000000 --- a/Assets/Scripts/ServerShared/PowerTiers.cs +++ /dev/null @@ -1,39 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -// Cut 5 (docs/stats-and-power-cut.md §1.3, Q5: "four or five tiers, defaulted per behaviour kind"). Five tiers, -// numbered so the lowest number is fed first -- PowerBus's allocation pass walks 0..Count-1 in order. Naming -// them here, once, means IPowerConsumer.DefaultPowerTier implementations read as a sentence ("Radiator is -// Critical") instead of a bare integer repeated eight times. -// -// Assignment, per behaviour kind, and why: -// - Critical: Radiator. This game has no dedicated life-support behaviour, and heat is the closest thing to -// one -- a starved radiator does not just fail itself, it cascades into wear and eventual shutdown across -// every other item on the hull (EquippedItem.UpdatePerformance). Feed it first or lose the rest anyway. -// - High: Shield. Hull survival the player is actively trading power for; not a life-support constant, so it -// sits below Radiator rather than beside it. -// - Medium: Thruster. Mobility -- needed to hold position, evade, or disengage, but a ship that -// loses thrust for a tick under brownout is inconvenienced, not dead the way an overheating hull is. -// - Low: ConstantWeapon, InstantWeapon. Offense. The ruling's own framing ("low-priority subsystems starve -// first") names weapons as the default example of what a reactor throttle should sacrifice first. -// - Utility: Sensor, EnergyDraw. Everything else, including the generic/unclassified draw -- an item that -// declares power use without asking for a specific tier should not accidentally outrank a named priority. -// -// A tier is a stored player choice once assigned (EquippableItem.PowerTier), not a derivation the bus repeats -// every tick (§1.3 "Derived state: nothing"). These defaults are read exactly once, in EquippedItem's -// constructor, to seed that stored field the first time an item without a chosen tier gets equipped. -public static class PowerTiers -{ - public const int Critical = 0; - public const int High = 1; - public const int Medium = 2; - public const int Low = 3; - public const int Utility = 4; - - public const int Count = 5; - - // EquippableItem.PowerTier's sentinel for "the player has not chosen one and this item has never been - // equipped yet" -- distinct from 0 (Critical), which is a real, meaningful choice. - public const int Unassigned = -1; -} diff --git a/Assets/Scripts/ServerShared/PowerTiers.cs.meta b/Assets/Scripts/ServerShared/PowerTiers.cs.meta deleted file mode 100644 index b3d61cc80..000000000 --- a/Assets/Scripts/ServerShared/PowerTiers.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: bd20d57dee4a44fa84660631a9c4f5c1 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/ServerShared/Provenance.cs b/Assets/Scripts/ServerShared/Provenance.cs index 4121332d6..b04a4aeeb 100644 --- a/Assets/Scripts/ServerShared/Provenance.cs +++ b/Assets/Scripts/ServerShared/Provenance.cs @@ -58,8 +58,8 @@ public class ProvenanceLedger } } -// One lot: the design it built, who made it and from what, its final assembly quality, how well each design role -// was filled, and the branded product it was made as. Immutable once minted; instances carry a LotId, never a copy. +// One lot: the design it built, who made it and from what, its rolled workmanship, and how well each design role +// was filled. Immutable once minted; instances carry a LotId, never a copy. [MessagePackObject] public class Lot { @@ -68,34 +68,18 @@ public class Lot [Key(2)] public float Quality; [Key(3)] public List Roles; - // The product the lot was made as: the one owner of which product names its units. Unset for unbranded lots - // (console give, presets, extracted), which brand their maker only. - [Key(4)] public CultRecordRef Product; - - // The quality a stat reads for one of the design's roles: the part's, capped by the lot's own final assembly - // (quality-lean-assembly-hard-ceiling), so a part better than its assembly is worth the assembly. An unnamed role, a - // design without roles, and a role without a fill read the item's effective quality. + // The quality a stat reads for one of the design's roles. An unnamed role, a design without roles, and a lot + // minted before roles existed all fall back to the lot's own workmanship. public float QualityForRole(string role) { - if (string.IsNullOrEmpty(role) || Roles == null) return EffectiveQuality(); + if (string.IsNullOrEmpty(role) || Roles == null) return Quality; foreach (var fill in Roles) - if (fill.Role == role) return Math.Min(fill.Quality, Quality); - return EffectiveQuality(); - } - - // The item's one quality (effective-quality-mean-of-roles): the mean over its role fills of the part capped by the final - // assembly. Price, tier, heat, durability and wear all read it; a roleless lot reads its assembly. - public float EffectiveQuality() - { - if (Roles == null || Roles.Count == 0) return Quality; - var sum = 0f; - foreach (var fill in Roles) sum += Math.Min(fill.Quality, Quality); - return sum / Roles.Count; + if (fill.Role == role) return fill.Quality; + return Quality; } } -// One filled slot: the design's role name and how good the part that went into it turned out to be. Stats read it through -// Lot.QualityForRole and Lot.EffectiveQuality, capped by the lot's assembly; the raw value is kept for disassembly (named-components-after-demo). +// One filled slot: the design's role name and how good the part that went into it turned out to be. [MessagePackObject] public class RoleFill { diff --git a/Assets/Scripts/ServerShared/Recipes.cs b/Assets/Scripts/ServerShared/Recipes.cs deleted file mode 100644 index e434a84a5..000000000 --- a/Assets/Scripts/ServerShared/Recipes.cs +++ /dev/null @@ -1,138 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using GameCult.Caching; -using MessagePack; -using Newtonsoft.Json; - -// How a good is made: one authored record per output, keyed recipe:, so a second recipe for one output replaces the -// first. A commodity's recipe takes named commodities (Inputs) and roles (RoleInputs), each role filled by any commodity whose -// recipe Fills it, and says which roles it can fill. A role recipe (the output is a design with roles, a ship hull, a piece of -// gear, a consumer good) restates nothing of the design: its role inputs are the design's Roles and their counts. Station and -// Turret hulls take no recipe. -[CultDocument("aetheria.recipedata", "1"), MessagePackObject, JsonObject(MemberSerialization.OptIn)] -public class RecipeData -{ - [JsonProperty("output"), Key(0)] - public CultRecordRef Output; - - [JsonProperty("outputCount"), Key(1)] - public int OutputCount = 1; - - // Commodities one cycle consumes. Empty on a raw good and on a role recipe. - [JsonProperty("inputs"), Key(2)] - public List Inputs = new List(); - - // Seconds of sim time for one cycle. - [JsonProperty("cycle"), Key(3)] - public float Cycle = 1; - - // Crew per running facility; no kind until workforce kinds exist. - [JsonProperty("workforce"), Key(4)] - public int Workforce; - - // Commodities one cycle uses up on the side (power, coolant), per cycle. - [JsonProperty("upkeep"), Key(5)] - public List Upkeep = new List(); - - // The kind of station that runs this recipe. - [JsonProperty("stationKind"), Key(6)] - public CultRecordRef StationKind; - - // Why this good exists in the world, in the operator's reading. Presence is checked, never its meaning. - [JsonProperty("loreHook"), Key(7)] - public string LoreHook; - - // The roles of a design this commodity can fill. Only a commodity's recipe has any. - [JsonProperty("fills"), Key(8)] - public List Fills = new List(); - - // Roles one cycle consumes, any filler will do and the facility picks (ruling ores-fill-metal-roles). Empty on a role recipe; - // records written before key 9 read it as empty. - [JsonProperty("roleInputs"), Key(9)] - public List RoleInputs = new List(); - - public static CultRecordKey KeyOf(CultRecordKey outputKey) => new CultRecordKey("recipe:" + outputKey.Value); -} - -[MessagePackObject, JsonObject(MemberSerialization.OptIn)] -public class CommodityCount -{ - [JsonProperty("commodity"), Key(0)] - public CultRecordRef Commodity; - - [JsonProperty("count"), Key(1)] - public int Count = 1; -} - -// A region gate's trade with the world beyond it: what the outside buys and sells, at what price and at most how fast. -// The union of all records is the outside; keyed outside-market:. -[CultDocument("aetheria.outsidemarketdata", "1"), MessagePackObject, JsonObject(MemberSerialization.OptIn)] -public class OutsideMarketData -{ - [CultName, JsonProperty("name"), Key(0)] - public string Name; - - [JsonProperty("rows"), Key(1)] - public List Rows = new List(); - - public static CultRecordKey KeyOf(string id) => new CultRecordKey("outside-market:" + id); -} - -[MessagePackObject, JsonObject(MemberSerialization.OptIn)] -public class OutsideMarketRow -{ - [JsonProperty("commodity"), Key(0)] - public CultRecordRef Commodity; - - [JsonProperty("price"), Key(1)] - public int Price; - - [JsonProperty("buys"), Key(2)] - public bool Buys; - - [JsonProperty("sells"), Key(3)] - public bool Sells; - - [JsonProperty("ratePerHour"), Key(4)] - public float RatePerHour; -} - -// The one reader of recipes: which recipe makes a good, a recipe's role slots (RoleInputsOf), which commodities fill a role, and -// what a good is by its recipe. -public static class Recipes -{ - public static RecipeData RecipeOf(CultCache catalog, ItemData item) => - item == null ? null : catalog.Get(RecipeData.KeyOf(catalog.RefOf(item).Key)); - - public static bool IsCommodity(ItemData item) => item is SimpleCommodityData || item is CompoundCommodityData; - - public static IReadOnlyList RolesOf(ItemData item) => - (item as CraftedItemData)?.Roles ?? new List(); - - // A recipe whose output is a design with roles: a part list rather than a list of inputs. - public static bool IsRoleRecipe(CultCache catalog, RecipeData recipe) - { - var output = catalog.Get(recipe.Output); - return output is CraftedItemData && RolesOf(output).Count > 0; - } - - // The one reader of a recipe's role slots: the design's Roles for a role recipe, else the recipe's RoleInputs. - public static IReadOnlyList RoleInputsOf(CultCache catalog, RecipeData recipe) => - IsRoleRecipe(catalog, recipe) ? RolesOf(catalog.Get(recipe.Output)) : (IReadOnlyList) recipe.RoleInputs ?? new List(); - - // Raw: takes no commodity and no role. Everything else is processed. Derived, never stored. - public static bool IsRaw(CultCache catalog, RecipeData recipe) => recipe.Inputs.Count == 0 && RoleInputsOf(catalog, recipe).Count == 0; - - // A commodity made by a role recipe: it is assembled from the same components gear is. - public static bool IsConsumerGood(CultCache catalog, RecipeData recipe) => - IsCommodity(catalog.Get(recipe.Output)) && IsRoleRecipe(catalog, recipe); - - // The commodities whose recipes Fill the role, ordered by key so a choice never depends on store order. - public static CultRecordKey[] Fillers(CultCache catalog, string role) => - catalog.GetAll() - .Where(recipe => recipe.Fills != null && recipe.Fills.Contains(role) && IsCommodity(catalog.Get(recipe.Output))) - .Select(recipe => recipe.Output.Key) - .OrderBy(key => key.Value, StringComparer.Ordinal) - .ToArray(); -} diff --git a/Assets/Scripts/ServerShared/Recipes.cs.meta b/Assets/Scripts/ServerShared/Recipes.cs.meta deleted file mode 100644 index f98aa618a..000000000 --- a/Assets/Scripts/ServerShared/Recipes.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 3c9a51d7e0b24f68a1e47d92b5c08f31 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/ServerShared/RunGoal.cs b/Assets/Scripts/ServerShared/RunGoal.cs deleted file mode 100644 index 454cc5cd2..000000000 --- a/Assets/Scripts/ServerShared/RunGoal.cs +++ /dev/null @@ -1,44 +0,0 @@ -using System.Linq; -using CultMath; -using static CultMath.math; - -// The run's goal: whether a zone's boss lives, and so whether the exit gate is open. Engine-free and stateless; the -// answer is derived from Zone.Entities (the death path removes the dead, Zone.cs), so no "boss defeated" flag exists to -// disagree with it, and no presentation decides it. -public static class RunGoal -{ - public static Entity Boss(Zone zone) => zone.Entities.FirstOrDefault(entity => entity.IsBoss); - - public static bool BossAlive(Zone zone) => Boss(zone) != null; - - // The exit gate fails closed: it is open only in the galaxy's exit zone, once a boss was spawned there and no living - // boss remains. An exit zone that never got a boss stays sealed, so a missing boss can never read as a dead one. - public static bool ExitOpen(Zone zone) => - zone.Galaxy?.Exit != null && zone.GalaxyZone == zone.Galaxy.Exit && zone.Pack.BossSpawned && !BossAlive(zone); - - // Where the exit gate sits: at the adjacency wormholes' radius (the zone's radius times the ratio), in the middle of - // the widest angular gap between them, so it shares a point with none. Of exactly equal gaps the first in ascending angle - // wins (the <= below): placement is not saved, so this rule is what keeps the gate still between builds. A zone with no - // neighbours gets the +x axis. - public static float2 ExitGatePosition(Zone zone, float wormholeDistanceRatio) - { - var radius = zone.Pack.Radius * wormholeDistanceRatio; - var angles = zone.GalaxyZone.AdjacentZones - .Select(adjacent => normalize(adjacent.Position - zone.GalaxyZone.Position)) - .Select(direction => atan2(direction.y, direction.x)) - .OrderBy(angle => angle) - .ToArray(); - if (angles.Length == 0) return float2(radius, 0); - - var bestAngle = 0f; - var bestGap = -1f; - for (var i = 0; i < angles.Length; i++) - { - var next = i + 1 < angles.Length ? angles[i + 1] : angles[0] + 2 * PI; - if (next - angles[i] <= bestGap) continue; - bestGap = next - angles[i]; - bestAngle = angles[i] + bestGap / 2; - } - return float2(cos(bestAngle), sin(bestAngle)) * radius; - } -} diff --git a/Assets/Scripts/ServerShared/RunGoal.cs.meta b/Assets/Scripts/ServerShared/RunGoal.cs.meta deleted file mode 100644 index 2e3839fad..000000000 --- a/Assets/Scripts/ServerShared/RunGoal.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: de03c3545cb04ce38bf85b713dc5df74 diff --git a/Assets/Scripts/ServerShared/RunStart.cs b/Assets/Scripts/ServerShared/RunStart.cs deleted file mode 100644 index 20269e84c..000000000 --- a/Assets/Scripts/ServerShared/RunStart.cs +++ /dev/null @@ -1,89 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using Random = CultMath.Random; - -// The owner of a new run (docs/scenarios-cut.md, R.4). Every new run is a scenario: RunStart generates its galaxy, -// generates its arena (the galaxy's entrance zone) under the scenario's Ambient rule, and admits what the scenario -// stages through Zone.Admit, all of it or none of it. A scenario only declares; nothing else generates a new run's -// galaxy, generates or admits its player, or chooses its hull or faction. It holds no Unity type. -public static class RunStart -{ - public sealed class Staged - { - public Ship Player; - public int Credits; // the run's starting credits, as the scenario left them - public List Entities; // what the scenario placed besides the player, in its order - } - - // The scenario's galaxy, at the scenario's seed or, when that is zero, the clock's. - public static Galaxy Generate(Scenario scenario, GalaxyStage stage) - { - stage.SeedFrom(scenario); - return scenario.Generate(stage) ?? throw new InvalidOperationException($"Scenario {scenario.Name} generated no galaxy."); - } - - public static ZonePack GenerateArena(ItemManager itemManager, ZoneGenerationSettings zoneSettings, PlanetSettings planetSettings, Galaxy galaxy, Scenario scenario) - { - SeedItems(itemManager, galaxy, ArenaStep); - return galaxy.Entrance.PackedContents = ZoneGenerator.GenerateZone( - itemManager, zoneSettings, planetSettings, galaxy, galaxy.Entrance, galaxy.IsPrelude, scenario.Ambient); - } - - // Runs the scenario's Stage, then admits its player and everything it placed: each entity's stance set both ways - // with the player, a pilot for each piloted one. Returns null, with every failure listed and the arena unchanged, - // unless the whole scenario staged. - public static Staged Stage(ItemManager itemManager, Zone arena, Scenario scenario, string startingHull, - TutorialGenerationSettings tutorialGenerationSettings, List failures) - { - SeedItems(itemManager, arena.Galaxy, StageStep); - var stage = new ScenarioStage(itemManager, arena, startingHull, tutorialGenerationSettings); - scenario.Stage(stage); - var reported = failures.Count; - failures.AddRange(stage.Failures); - if (!stage.PlayerPlaced) - failures.Add("player: the scenario places no player"); - if (failures.Count > reported) return null; - - var player = stage.PlayerShip; - player.IsPlayerShip = true; - arena.Admit(player, piloted: false); - foreach (var placed in stage.Placed) - { - var hostile = placed.Stance == ScenarioStance.Hostile; - placed.Entity.SetIff(player, hostile); - player.SetIff(placed.Entity, hostile); - arena.Admit(placed.Entity, placed.Piloted, placed.Task); - } - - // A start state includes what a pilot knows (ruling stage-states-pilot-knowledge): its anchor is tracked from the first - // step, by the sensors' own path (info gathered past the detection threshold), so they can lose it like any track. - foreach (var placed in stage.Placed) - if (placed.Knows != null && placed.Piloted) - placed.Entity.EntityInfoGathered[placed.Knows] = (itemManager.GameplaySettings.TargetDetectionInfoThreshold + 1f) / 2f; - return new Staged { Player = player, Credits = stage.Credits, Entities = stage.Placed.Select(placed => placed.Entity).ToList() }; - } - - // A new run's item draws (each lot's quality, each generated fit) come from its galaxy's seed, not the process clock, - // so a fixed seed fixes the arena's gear and the player's fit. Each step draws its own stream, so whatever runs - // between them (populating the level) cannot shift it. - private static void SeedItems(ItemManager itemManager, Galaxy galaxy, uint step) => - itemManager.Random = new Random(ItemSeed(galaxy, step)); - - // The steps of a run that draw items: generating its arena, staging its scenario, and continuing a saved run. - public const uint ArenaStep = 1; - public const uint StageStep = 2; - public const uint ContinueStep = 3; - - // The item seed of an ActionGameManager scene opened with no galaxy. No run is loaded, so nothing a run decides - // draws from it. - public const uint NoRunSeed = 0x5EED0001u; - - // The item stream's seed for one step of a run: the run's seed and the step. Never zero, which no stream accepts. - public static uint ItemSeed(Galaxy galaxy, uint step) - { - var seed = galaxy.Seed * 0x9E3779B1u + step; - if (seed == 0) throw new InvalidOperationException($"Item seed is zero for galaxy seed {galaxy.Seed} at step {step}."); - return seed; - } -} diff --git a/Assets/Scripts/ServerShared/RunStart.cs.meta b/Assets/Scripts/ServerShared/RunStart.cs.meta deleted file mode 100644 index 2ccf2e506..000000000 --- a/Assets/Scripts/ServerShared/RunStart.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 28412ed9a0fc4f95b157846b0b132c27 diff --git a/Assets/Scripts/ServerShared/SavedGame.cs b/Assets/Scripts/ServerShared/SavedGame.cs index 90ef03566..41cd613ac 100644 --- a/Assets/Scripts/ServerShared/SavedGame.cs +++ b/Assets/Scripts/ServerShared/SavedGame.cs @@ -47,30 +47,6 @@ public class SavedGame [Key(12)] public FactionRelationship[] Relationships; - - [Key(13)] - public int Credits; - - // The run's seed (Galaxy.Seed), minted once by GalaxyStage.SeedFrom. Written only by RunSave.Capture and read only - // by Galaxy's save constructor; 0 in a save written before run-seed, which then rolls name-only drops. - [Key(14)] - public uint Seed; - - // The run's resource provinces (Galaxy.Provinces): each province's seed zone index and its type. Written only by - // RunSave.Capture and read only by Galaxy's save constructor; null in a save written before ore geography, which then - // gets Regions, Partition and Deal from its saved graph, boss zones, Exit and seed. - [Key(15)] - public List Provinces; -} - -[MessagePackObject] -public class SavedProvince -{ - [Key(0)] - public int Seed; - - [Key(1)] - public CultRecordRef Type; } // The run's lifecycle over the run store. Only Commit creates SavedGame, SavedZone and ProvenanceLedger records; @@ -79,7 +55,7 @@ public static class RunSave { // The live run as plain documents. Writes nothing. public static (SavedGame Game, SavedZone[] Zones) Capture(CultCache cache, Galaxy galaxy, Zone currentZone, - Entity currentEntity, SavedActionBarBinding[] actionBar, int credits) + Entity currentEntity, bool isTutorial, SavedActionBarBinding[] actionBar) { var factions = galaxy.HomeZones.Keys.ToArray(); var game = new SavedGame @@ -98,10 +74,8 @@ public static class RunSave CurrentZoneEntity = currentZone.Entities.IndexOf(currentEntity), Entrance = Array.IndexOf(galaxy.Zones, galaxy.Entrance), Exit = Array.IndexOf(galaxy.Zones, galaxy.Exit), - IsTutorial = galaxy.IsPrelude, - ActionBarBindings = actionBar, - Credits = credits, - Seed = galaxy.Seed + IsTutorial = isTutorial, + ActionBarBindings = actionBar }; // A zone generated earlier but not loaded this session has no live Contents; its packed contents carry over. @@ -112,47 +86,11 @@ public static class RunSave AdjacentZones = zone.AdjacentZones.Select(az => Array.IndexOf(galaxy.Zones, az)).ToArray(), Factions = zone.Factions.Select(f => Array.IndexOf(factions, f)).ToArray(), Contents = zone.Contents?.PackZone() ?? zone.PackedContents, - Owner = zone.Owner == null ? -1 : Array.IndexOf(factions, zone.Owner), - Province = Array.IndexOf(galaxy.Zones, zone.Province.Seed) + Owner = zone.Owner == null ? -1 : Array.IndexOf(factions, zone.Owner) }).ToArray(); - game.Provinces = galaxy.Provinces.Select(province => new SavedProvince - {Seed = Array.IndexOf(galaxy.Zones, province.Seed), Type = province.Type}).ToList(); return (game, zones); } - // Continue's gate: every design a saved run names (each zone's items and each minted lot) must be one this catalog - // holds. A run made with a mod that is no longer installed is refused, naming the mod ships, before any scene is - // built; the save is never edited to fit. - public static void RequireDesigns(CultCache cache, SavedGame game) - { - var designs = new List(); - foreach (var zoneRef in game.Zones ?? Array.Empty>()) - { - var where = zoneRef.Key.Value; - var zone = cache.Get(zoneRef) ?? throw MalformedSave($"zone {where} has no record"); - // A zone never visited has no contents: legitimately null. - foreach (var pack in zone.Contents?.Entities ?? new List()) - foreach (var item in EntitySerializer.Items(pack)) - designs.Add((item ?? throw MalformedSave($"an item in {where} is null")).Data.Key); - } - foreach (var (number, lot) in Lots(cache).Lots ?? throw MalformedSave("the lot ledger has no lots")) - designs.Add((lot ?? throw MalformedSave($"lot {number} is null")).Design.Key); - var named = designs.Where(key => key.IsSet()).Distinct() - .Where(key => cache.Get(key) == null) - .Select(key => key.Value).OrderBy(key => key, StringComparer.Ordinal).ToArray(); - if (named.Length == 0) return; - const string modHull = "mod-hull:"; - var mods = named.Where(key => key.StartsWith(modHull, StringComparison.Ordinal)).Select(key => key.Substring(modHull.Length)).ToArray(); - var others = named.Where(key => !key.StartsWith(modHull, StringComparison.Ordinal)).ToArray(); - throw new InvalidOperationException("This run names designs the catalog no longer holds" + - (mods.Length > 0 ? $"; missing mod ships: {string.Join(", ", mods)}" : "") + - (others.Length > 0 ? $"; missing other designs: {string.Join(", ", others)}" : "") + - ". Reinstall them, or start a new game."); - } - - private static InvalidOperationException MalformedSave(string where) => - new InvalidOperationException($"This run's save is malformed: {where}. Start a new game."); - // The stored ledger, or a fresh empty one when the run has minted nothing yet. public static ProvenanceLedger Lots(CultCache cache) => cache.GetGlobal() ?? new ProvenanceLedger(); @@ -184,37 +122,17 @@ public static class RunSave } // Removes every run record (SavedGame, SavedZone, OrbitData, BodyData, ProvenanceLedger) in one Commit. - public static void Clear(CultCache cache) => Remove(cache, Records(cache)); - - // A new run replaces the saved one only once it has started: start runs with the saved run still in the store. - // When it returns a value, the saved run's records go. When it returns null or throws, the records it wrote go and - // the saved run stays as it was. - public static T Replace(CultCache cache, Func start) where T : class + public static void Clear(CultCache cache) { - var saved = Records(cache); - T started = null; - try - { - started = start(); - } - finally - { - Remove(cache, started != null ? saved : Records(cache).Except(saved).ToArray()); - } - return started; - } - - private static CultRecordKey[] Records(CultCache cache) => - cache.AllStoredDocuments + var run = cache.AllStoredDocuments .Where(stored => IsRunRecord(stored.Descriptor.DocumentType)) .Select(stored => stored.Key) .ToArray(); - - private static void Remove(CultCache cache, CultRecordKey[] records) => cache.Commit(batch => { - foreach (var key in records) batch.Remove(key); + foreach (var key in run) batch.Remove(key); }); + } public static bool IsRunRecord(Type documentType) => AetheriaStores.RunTypes.Any(home => home.IsAssignableFrom(documentType)); @@ -240,11 +158,6 @@ public class SavedZone [Key(5)] public ZonePack Contents; - - // The seed zone index of the zone's province. Written only by RunSave.Capture and read only by Galaxy's save - // constructor; meaningful only when SavedGame.Provinces is present. - [Key(6)] - public int Province; } [MessagePackObject, diff --git a/Assets/Scripts/ServerShared/Scenario.cs b/Assets/Scripts/ServerShared/Scenario.cs deleted file mode 100644 index 72b084866..000000000 --- a/Assets/Scripts/ServerShared/Scenario.cs +++ /dev/null @@ -1,36 +0,0 @@ -// A scenario is one way to set up a new run (docs/scenarios-cut.md, R): a script, compiled with the game, that says -// which galaxy to generate and what the run starts with. New Game lists them (Scenarios). RunStart runs one: it -// generates the galaxy through GalaxyStage, the arena under Ambient, and admits what Stage placed through a -// ScenarioStage. A scenario only declares; once staged, everything it placed is ordinary run state. -public abstract class Scenario -{ - public abstract string Name { get; } - - // The scenario's stable identity: kebab-case, unique across Scenarios, never shown to the player, recorded by - // matches and replays. Name is display only. - public abstract string Id { get; } - - // The conditions and what to verify in them, shown under the scenario's button. - public abstract string Brief { get; } - - // Zero draws the seed from the clock, so each launch is a new galaxy. Anything else fixes the galaxy, its - // background, its arena and every fit, each item's maker and workmanship included, so every launch has the same - // layout. - public virtual uint Seed => 0; - - // False: the arena keeps its planets, orbits and stations but generates no ship or turret, so nothing wanders into - // the scenario's conditions. - public virtual bool Ambient => true; - - // Which galaxy the run is in: stage.Main() or stage.Prelude(). - public abstract Galaxy Generate(GalaxyStage stage); - - // What the run starts with: exactly one stage.Player, and anything else the scenario places. - public abstract void Stage(ScenarioStage stage); -} - -public enum ScenarioStance -{ - Neutral, - Hostile -} diff --git a/Assets/Scripts/ServerShared/Scenario.cs.meta b/Assets/Scripts/ServerShared/Scenario.cs.meta deleted file mode 100644 index bea3a0eb2..000000000 --- a/Assets/Scripts/ServerShared/Scenario.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: da26f6b6c5f34deaa1057177e2dd3262 diff --git a/Assets/Scripts/ServerShared/ScenarioStage.cs b/Assets/Scripts/ServerShared/ScenarioStage.cs deleted file mode 100644 index 453ede8ec..000000000 --- a/Assets/Scripts/ServerShared/ScenarioStage.cs +++ /dev/null @@ -1,231 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using CultMath; -using GameCult.Caching; -using static CultMath.math; -using float2 = CultMath.float2; -using float3 = CultMath.float3; - -// The run half of a scenario's vocabulary (docs/scenarios-cut.md, R.4). A scenario's Stage builds its fits and places -// them here; nothing joins the arena until Stage returns with no failure, and then RunStart admits it all at once. -// Every verb names what it could not do instead of throwing, so one bad name in a script lists every bad name. -// Designs, hulls and products are named as the catalog names them. Only RunStart builds a stage. -public sealed class ScenarioStage -{ - private readonly ItemManager _items; - private readonly Func _choose; - private readonly List _failures = new List(); - private readonly List _placed = new List(); - private int _placements; - - internal ScenarioStage(ItemManager items, Zone arena, string startingHull, TutorialGenerationSettings tutorialGenerationSettings) - { - _items = items; - Arena = arena; - StartingHull = startingHull; - TutorialGenerationSettings = tutorialGenerationSettings; - Credits = items.GameplaySettings.StartingCredits; - // A design named without a product is chosen by the generator's ChooseProduct. The stage outfits with no faction, - // so every maker is reachable and the run's seed draws. - _choose = new LoadoutGenerator(ref items.Random, items, arena.Galaxy, arena.GalaxyZone, null, 2).ChooseProduct; - } - - public Galaxy Galaxy => Arena.Galaxy; - public Zone Arena { get; } - public string StartingHull { get; } - public TutorialGenerationSettings TutorialGenerationSettings { get; } - - // What the run starts with: the gameplay settings' starting credits unless the scenario sets another amount. - public int Credits { get; set; } - - internal IReadOnlyList Failures => _failures; - internal bool PlayerPlaced { get; private set; } - internal Ship PlayerShip { get; private set; } - internal IReadOnlyList Placed => _placed; - - internal sealed class Placement - { - public Entity Entity; - public ScenarioStance Stance; - public bool Piloted; - public AgentTask Task; - // What the pilot already knows at the start: an entity its sensors hold a track of (Approach). Seeded through the - // sensors' own state at admission, so they may lose it honestly. - public Entity Knows; - } - - // A hull fitted slot by slot: each slot a design or a product, the hull cell it goes in, and its rotation. A name is - // a design (open: the stage chooses its product) or a product (pinned: that brand). - public ScenarioFit Fit(string hull, params (string design, int2 cell, ItemRotation rotation)[] slots) => - FitAt(hull, null, slots); - - // The same fit with every lot it mints (hull, slots, unbranded) at the stated quality, drawing nothing. A fit a scenario's - // checks rest on states its quality, so the check does not ride the item stream. - public ScenarioFit Fit(string hull, float quality, params (string design, int2 cell, ItemRotation rotation)[] slots) => - FitAt(hull, quality, slots); - - private ScenarioFit FitAt(string hull, float? quality, (string design, int2 cell, ItemRotation rotation)[] slots) - { - var where = $"fit {hull}"; - var (hullData, hullProduct) = NamedOrProduct(hull, where); - var loadout = new Loadout { Name = hull, WeaponGroups = new int[0][] }; - if (hullData != null) loadout.Hull = _items.ItemData.RefOf(hullData); - if (hullProduct != null) loadout.HullProduct = _items.ItemData.RefOf(hullProduct); - foreach (var (design, cell, rotation) in slots) - { - var (data, product) = NamedOrProduct(design, where); - if (data == null) continue; - loadout.Slots.Add(new LoadoutSlot - { - Design = _items.ItemData.RefOf(data), Position = cell, Rotation = rotation, - Product = product == null ? default : _items.ItemData.RefOf(product) - }); - } - return hullData != null && loadout.Slots.Count == slots.Length ? new ScenarioFit(loadout, quality) : null; - } - - // A hull with nothing fitted. - public ScenarioFit Bare(string hull) => Fit(hull); - - // A fit generated as the game generates its ships, for the faction when one is given, from the run's item draws, - // which RunStart seeds from the galaxy's seed. An empty hull means any ship hull. - public ScenarioFit Generated(string hull, Faction faction = null) - { - var generator = new LoadoutGenerator(ref _items.Random, _items, Galaxy, Arena.GalaxyZone, faction, 2); - var pack = generator.GenerateShipLoadout(data => string.IsNullOrEmpty(hull) || data.Name == hull); - if (pack != null) return new ScenarioFit(pack); - _failures.Add($"generated: no ship hull named {hull}"); - return null; - } - - // A loadout preset from the catalog, as capturepreset or Studio wrote it. - public ScenarioFit Preset(string name) - { - var preset = _items.ItemData.GetAll().FirstOrDefault(loadout => loadout.Name == name); - if (preset != null) return new ScenarioFit(preset); - _failures.Add($"preset {name}: no such preset"); - return null; - } - - // The player's ship. A run has exactly one, and it is a ship hull. - public Ship Player(ScenarioFit fit, float2 at, float2 facing = default) - { - if (PlayerPlaced) - { - _failures.Add("player: the scenario places a second player"); - return null; - } - PlayerPlaced = true; - var entity = Build(fit, "player", at, facing); - if (entity == null) return null; - if (entity is Ship ship) return PlayerShip = ship; - _failures.Add($"player: {entity.Name} is not a ship hull"); - return null; - } - - // Anything else in the arena. A stance holds both ways between it and the player. A piloted ship gets the zone's - // pilot; an unpiloted entity has none and goes nowhere on its own unless it is placed moving: velocity is the planar - // velocity it starts with, and the sim carries it from there. A turret hull stays where it is put. - public Entity Place(ScenarioFit fit, float2 at, float2 facing = default, ScenarioStance stance = ScenarioStance.Neutral, bool piloted = false, - float2 velocity = default) - { - var where = $"entity {_placements++}"; - var entity = Build(fit, where, at, facing); - if (entity == null) return null; - entity.Velocity = velocity; - if (piloted && !(entity is Ship)) _failures.Add($"{where}: {entity.Name} is not a ship hull, so it cannot be piloted"); - _placed.Add(new Placement { Entity = entity, Stance = stance, Piloted = piloted }); - return entity; - } - - // The task a piloted entity starts on: it closes on the target and holds there (the flight's follow task, standoff - // nothing), in place of the patrol circuit the zone would draw for it. The pilot starts knowing it (RunStart seeds a sensor track). A check that rests on where a pilot goes states - // it here, so the pilot's course is the scenario's and not a draw. An entity that is not placed and piloted, or a - // target that is not placed, is a failure. - public void Approach(Entity entity, Entity target) - { - var placement = _placed.FirstOrDefault(p => ReferenceEquals(p.Entity, entity)); - if (placement == null || !placement.Piloted) { _failures.Add($"approach: {entity?.Name ?? "no entity"} is not a placed, piloted ship"); return; } - if (target == null) { _failures.Add("approach: no target to close on"); return; } - // The one production handle minted from truth: the stage states the pilot's knowledge of its anchor (ruling - // stage-states-pilot-knowledge), and RunStart seeds the matching sensor track. The view still answers about the - // anchor only while the pilot's sensors hold it. - placement.Task = new FollowTask { Anchor = PilotView.Handle(target), Standoff = 0f }; - placement.Knows = target; - } - - // Items in the entity's first cargo bay, one per name. A name is an equippable or consumable design (open: the stage - // chooses its product) or a product of one (pinned); a name that is neither is a failure. - public void Cargo(Entity entity, params string[] names) - { - if (entity == null) return; - var where = $"cargo of {entity.Name}"; - var bay = entity.CargoBays.FirstOrDefault(); - foreach (var name in names) - { - var (data, product) = NamedOrProduct(name, where, found => found is EquippableItemData || found is ConsumableItemData); - if (data == null) continue; - var build = Loadouts.Resolve(_items, _items.ItemData.RefOf(data), - product == null ? default : _items.ItemData.RefOf(product), _choose, where, _failures); - if (build == null) continue; - if (bay == null || !bay.TryStore(build())) - _failures.Add($"{where}: no room for {name}"); - } - } - - private Entity Build(ScenarioFit fit, string where, float2 at, float2 facing) - { - if (fit == null) return null; // the verb that made it named why - - Entity entity; - if (fit.Pack != null) entity = EntitySerializer.Unpack(_items, Arena, fit.Pack); - else - { - var failures = new List(); - entity = Loadouts.Materialize(_items, Arena, fit.Loadout, _choose, failures, fit.Quality); - _failures.AddRange(failures.Select(failure => $"{where} ({fit.Loadout.Name}): {failure}")); - if (entity == null) return null; - } - - entity.Position = float3(at.x, 0, at.y); - if (lengthsq(facing) > 0) entity.Direction = normalize(facing); - return entity; - } - - // A name is a design, or else exactly one product (names are unique) whose design is a T passing among: the design - // and that product. Neither is Named's failure. - private (T design, FactionProductData product) NamedOrProduct(string name, string where, Func among = null) where T : CraftedItemData - { - var cache = _items.ItemData; - var products = cache.GetAll().Where(p => p.Name == name && cache.Get(p.Design) is T design && (among == null || among(design))).Take(2).ToArray(); - if (products.Length == 1 && !cache.GetAll().Any(data => data.Name == name && (among == null || among(data)))) - return ((T) cache.Get(products[0].Design), products[0]); - return (Named(name, where, among), null); - } - - private T Named(string name, string where, Func among = null) where T : CraftedItemData - { - var named = _items.ItemData.GetAll().Where(data => data.Name == name && (among == null || among(data))).Take(2).ToArray(); - if (named.Length == 1) return named[0]; - _failures.Add(named.Length == 0 ? $"{where}: no design named {name}" : $"{where}: more than one design is named {name}"); - return null; - } -} - -// What a scenario places: a fit built from named designs or a preset, or a ship generated as the game generates them. -// Only ScenarioStage makes one. -public sealed class ScenarioFit -{ - internal readonly Loadout Loadout; - internal readonly EntityPack Pack; - internal readonly float? Quality; - - internal ScenarioFit(Loadout loadout, float? quality = null) - { - Loadout = loadout; - Quality = quality; - } - - internal ScenarioFit(EntityPack pack) => Pack = pack; -} diff --git a/Assets/Scripts/ServerShared/ScenarioStage.cs.meta b/Assets/Scripts/ServerShared/ScenarioStage.cs.meta deleted file mode 100644 index 91b73afb6..000000000 --- a/Assets/Scripts/ServerShared/ScenarioStage.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: d8cd00dc23604dfb91e128e1a9a4a3d5 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/ServerShared/Scenarios.meta b/Assets/Scripts/ServerShared/Scenarios.meta deleted file mode 100644 index d6472c75c..000000000 --- a/Assets/Scripts/ServerShared/Scenarios.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 35866d82219241ae9fdb0030039afbed -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/ServerShared/Scenarios/AiFusedDiscipline.cs b/Assets/Scripts/ServerShared/Scenarios/AiFusedDiscipline.cs deleted file mode 100644 index beb4235da..000000000 --- a/Assets/Scripts/ServerShared/Scenarios/AiFusedDiscipline.cs +++ /dev/null @@ -1,37 +0,0 @@ -using static CultMath.math; -using static ItemRotation; - -public sealed class AiFusedDiscipline : Scenario -{ - public override string Name => "AI Fused Discipline"; - public override string Id => "ai-fused-discipline"; - public override string Brief => "A Djinni; a piloted neutral Longinus carrying a Smoke Proximity and a piloted hostile Longinus whose only weapon is " + - "Smoke Refused. Verify: the hostile closes on you and never fires its refused weapon; the neutral never fires its " + - "fused one."; - public override uint Seed => 110; - public override bool Ambient => false; - - public static readonly CultMath.float2 Hostile = float2(0, 700), Neutral = float2(500, 300); - - public override Galaxy Generate(GalaxyStage stage) => stage.Prelude(DemoTerminus.Cast); - - public override void Stage(ScenarioStage stage) - { - ScenarioFit Armed(string weapon) => stage.Fit("Longinus", - ("Cockpit 2x2", int2(2, 6), None), - ("Large Drive", int2(1, 0), Reversed), - ("Large Drive", int2(3, 0), Reversed), - ("Rugged Drive", int2(2, 14), CounterClockwise), - ("Rugged Drive", int2(3, 14), Clockwise), - ("Compact Reactor", int2(2, 4), None), - (weapon, int2(1, 8), None), - ("Radiator", int2(2, 2), CounterClockwise), - ("Radiator", int2(3, 2), Clockwise), - ("not if i see you first", int2(3, 10), None), // Compact Sensor - ("Panopticon Prime", int2(1, 6), Clockwise)); // Fire Control Array - - stage.Player(stage.Generated("Djinni"), float2(0, 0)); - stage.Place(Armed("Smoke Refused"), Hostile, facing: float2(0, -1), stance: ScenarioStance.Hostile, piloted: true); - stage.Place(Armed("Smoke Proximity"), Neutral, facing: float2(-1, 0), piloted: true); - } -} diff --git a/Assets/Scripts/ServerShared/Scenarios/AiFusedDiscipline.cs.meta b/Assets/Scripts/ServerShared/Scenarios/AiFusedDiscipline.cs.meta deleted file mode 100644 index 5994a43a7..000000000 --- a/Assets/Scripts/ServerShared/Scenarios/AiFusedDiscipline.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 0d71dbf0ab5847a6ab58f96a50678ac7 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/ServerShared/Scenarios/Arcs.cs b/Assets/Scripts/ServerShared/Scenarios/Arcs.cs deleted file mode 100644 index f0c3f5553..000000000 --- a/Assets/Scripts/ServerShared/Scenarios/Arcs.cs +++ /dev/null @@ -1,61 +0,0 @@ -using static CultMath.math; -using static ItemRotation; - -public sealed class Arcs : Scenario -{ - public override string Name => "Arcs"; - public override string Id => "arcs"; - public override string Brief => "The Smoke Test Hull with forward mounts and a side mount on each flank; a bare hull off the bow, one off " + - "the stern, one abeam to port, one abeam to starboard, and a hostile turret. Verify: the hull keeps its " + - "heading while you aim at the stern hull, and the forward guns hold. Designate the bow hull and fire with the " + - "aim anywhere: the forward guns fire on it and hit. The side guns fire at their beam hull and never through " + - "the hull. Designate the starboard hull, aim ahead and fire its group: it fires on the hull without the aim " + - "and the port group holds; undesignate and aim to port: the port group fires free. The turret tracks you " + - "all the way round."; - public override uint Seed => 103; - public override bool Ambient => false; - - // Where the targets sit: the player is at the origin facing +z. The forward mounts fire forward, the starboard mount - // (Clockwise) along +x and the port mount (CounterClockwise) along -x. - public static readonly CultMath.float2 Bow = float2(0, 400), Stern = float2(0, -400), Turret = float2(600, 300), - Port = float2(-400, 0), Starboard = float2(400, 0); - - public override Galaxy Generate(GalaxyStage stage) => stage.Prelude(); - - public override void Stage(ScenarioStage stage) - { - var fighter = stage.Fit("Smoke Test Hull", - ("Cockpit 2x2", int2(4, 6), None), - ("Large Drive", int2(3, 0), Reversed), - ("Large Drive", int2(5, 0), Reversed), - ("Rugged Drive", int2(4, 14), CounterClockwise), - ("Rugged Drive", int2(5, 14), Clockwise), - ("Compact Reactor", int2(4, 4), None), - ("GT 3K", int2(2, 5), None), // Guided Missile Launcher - ("GT 3K", int2(7, 5), None), // Guided Missile Launcher - ("FastBlast+-", int2(3, 8), None), // Cell Blaster - ("FastBlast+-", int2(6, 8), None), // Cell Blaster - ("Radiator", int2(4, 2), CounterClockwise), - ("Radiator", int2(5, 2), Clockwise), - ("not if i see you first", int2(5, 10), None), // Compact Sensor - ("Panopticon Prime", int2(3, 6), Clockwise), // Fire Control Array - ("🫳🔫", int2(8, 4), Clockwise), // Autocannon - ("ChargeBlast SG", int2(0, 4), CounterClockwise)); // Charged Scatter Blaster - var turret = stage.Fit("Turret", - ("ClearPath", int2(1, 2), None), // Light Machine Gun - ("ClearPath", int2(5, 2), None), // Light Machine Gun - ("Long Radiator", int2(0, 2), CounterClockwise), - ("Long Radiator", int2(7, 2), Clockwise), - ("Compact Reactor", int2(3, 3), None), - ("Turret Control Module", int2(3, 5), None), - ("not if i see you first", int2(4, 5), None), // Compact Sensor - ("Panopticon Prime", int2(3, 6), None)); // Fire Control Array - - stage.Player(fighter, float2(0, 0), facing: float2(0, 1)); - stage.Place(stage.Bare("Longinus"), Bow); - stage.Place(stage.Bare("Longinus"), Stern); - stage.Place(turret, Turret, stance: ScenarioStance.Hostile); - stage.Place(stage.Bare("Longinus"), Port); - stage.Place(stage.Bare("Longinus"), Starboard); - } -} diff --git a/Assets/Scripts/ServerShared/Scenarios/Arcs.cs.meta b/Assets/Scripts/ServerShared/Scenarios/Arcs.cs.meta deleted file mode 100644 index 70bff8250..000000000 --- a/Assets/Scripts/ServerShared/Scenarios/Arcs.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 724a07b881f34e8c9b32b3f2f338ac78 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/ServerShared/Scenarios/Belt.cs b/Assets/Scripts/ServerShared/Scenarios/Belt.cs deleted file mode 100644 index 50c815f6d..000000000 --- a/Assets/Scripts/ServerShared/Scenarios/Belt.cs +++ /dev/null @@ -1,50 +0,0 @@ -using System.Linq; -using static CultMath.math; -using static ItemRotation; - -public sealed class Belt : Scenario -{ - public override string Name => "Belt"; - public override string Id => "belt"; - public override string Brief => "The biggest asteroid belt the generator made, with the Longinus parked 100 m outside its ring, facing along it, " + - "and nothing else in the arena. Verify: next and previous target step through the rocks and the reticle sweeps " + - "across the belt without a hitch; Previous with nothing targeted takes the farthest rock; the target indicator " + - "sits on the rock it names."; - - // Seeds 1-90 scanned for the arena whose entrance zone holds the belt with the most asteroids once the generator - // placed belts by their parent's window (children-within-reach): seed 86, a belt of 484 rocks. The next four: - // 55 (478), 83 (402), 64 (383), 63 (323). 37 of the 90 arenas hold no belt. - public override uint Seed => 86; - public override bool Ambient => false; - - public override Galaxy Generate(GalaxyStage stage) => stage.Prelude(DemoTerminus.Cast); - - public override void Stage(ScenarioStage stage) - { - var fighter = stage.Fit("Longinus", - ("Cockpit 2x2", int2(2, 6), None), - ("Large Drive", int2(1, 0), Reversed), - ("Large Drive", int2(3, 0), Reversed), - ("Rugged Drive", int2(2, 14), CounterClockwise), - ("Rugged Drive", int2(3, 14), Clockwise), - ("Compact Reactor", int2(2, 4), None), - ("GT 3K", int2(0, 5), None), // Guided Missile Launcher - ("GT 3K", int2(5, 5), None), // Guided Missile Launcher - ("DragOnBreath", int2(1, 8), None), // Lightning Projector - ("FastBlast+-", int2(4, 8), None), // Cell Blaster - ("Radiator", int2(2, 2), CounterClockwise), - ("Radiator", int2(3, 2), Clockwise), - ("not if i see you first", int2(3, 10), None), // Compact Sensor - ("Panopticon Prime", int2(1, 6), Clockwise)); // Fire Control Array - - // The belt is a ring about its parent's position at the belt orbit's distance. The player stands 100 m outside - // it, at the point nearest the origin, facing along the ring. - var arena = stage.Arena; - var belt = arena.Planets.Values.OfType().OrderByDescending(candidate => candidate.Asteroids.Length).First(); - var orbit = arena.Orbits[belt.Orbit.Key].Data; - var centre = arena.GetOrbitPosition(orbit.Parent.Key); - var outward = lengthsq(centre) > 0f ? normalize(-centre) : float2(1, 0); - var at = centre + outward * (orbit.Distance + 100f); - stage.Player(fighter, at, facing: float2(-outward.y, outward.x)); - } -} diff --git a/Assets/Scripts/ServerShared/Scenarios/Belt.cs.meta b/Assets/Scripts/ServerShared/Scenarios/Belt.cs.meta deleted file mode 100644 index 375ec1cb9..000000000 --- a/Assets/Scripts/ServerShared/Scenarios/Belt.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 6177c598b87544d6bb0cefdfb4f01acc -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/ServerShared/Scenarios/Crossing.cs b/Assets/Scripts/ServerShared/Scenarios/Crossing.cs deleted file mode 100644 index 61529d6d9..000000000 --- a/Assets/Scripts/ServerShared/Scenarios/Crossing.cs +++ /dev/null @@ -1,58 +0,0 @@ -using static CultMath.math; -using static ItemRotation; - -public sealed class Crossing : Scenario -{ - public override string Name => "Crossing"; - public override string Id => "crossing"; - public override string Brief => "A Lightning Projector at the starboard gun and a Cell Blaster at the port gun, an unpiloted Djinni coasting across the bow " + - "close ahead and an unpiloted one waiting at range. The crosser is launched to port at 50 m/s and only coasts: nothing steers it, " + - "its hull drag slows it to about 25 m/s at the bow line, and it does not shoot back. Make the pass coasting: give no throttle until the Djinni has crossed the bow, then fly freely " + - "(thrusting from the start carries you past it). Verify: as the Djinni crosses close, FastBlast lands some and projector " + - "almost none; against the Djinni at range both land. Fly it again without the Fire Control Array: " + - "with it the small gun lands more."; - public override uint Seed => 112; - public override bool Ambient => false; - - // Where the Djinni sit: the player is at Origin facing +z. Origin is 250 m or more from every body, where the zone's - // pull is weakest (about 1.4 u/s^2; the sum of the wells never drops to nothing, and at the old origin the player sat on the star). - // The crosser is unpiloted and placed moving at the Djinni's 50 m/s cap, so its pass is ballistic: bent by the field and slowed - // by hull drag (it reaches the bow line at about 25 m/s relative to the player, 3.6 s in), and nothing steers it. - // CrosserAt is the centre of the start window in which the pass holds: shifting it by 10 m along either axis keeps the pass - // inside the test's time and distance windows (CrossingHoldsAcrossTheStartWindow). - // The waiting Djinni sits inside the Lightning Projector's arc at 80% of its Range. - public static readonly CultMath.float2 Origin = float2(724, 124); - public static readonly CultMath.float2 CrosserAt = Origin + float2(-128, 45), CrosserFacing = float2(1, 0), CrosserVelocity = float2(50, 0); - // The fighter is staged at this quality, so its gear and the range below do not ride the item stream. - public const float StagedQuality = .6f; - // The Lightning Projector's Range in metres at the staged fit: 996.99 after the three seconds the test settles for - // (EvSettle); it falls toward 864 m as the projector heats. The fit as it stood at 0f5def17 (unstaged, its draws on the - // item stream) measured 1216.4. - public const float ProjectorRange = 997f; - public static readonly CultMath.float2 Waiting = Origin + float2(0, ProjectorRange * .8f); - - public override Galaxy Generate(GalaxyStage stage) => stage.Prelude(DemoTerminus.Cast); - - public override void Stage(ScenarioStage stage) - { - var fighter = stage.Fit("Longinus", StagedQuality, - ("Cockpit 2x2", int2(2, 6), None), - ("Large Drive", int2(1, 0), Reversed), - ("Large Drive", int2(3, 0), Reversed), - ("Rugged Drive", int2(2, 14), CounterClockwise), - ("Rugged Drive", int2(3, 14), Clockwise), - ("Compact Reactor", int2(2, 4), None), - ("GT 3K", int2(0, 5), None), // Guided Missile Launcher - ("GT 3K", int2(5, 5), None), // Guided Missile Launcher - ("DragOnBreath", int2(1, 8), None), // Lightning Projector - ("FastBlast+-", int2(4, 8), None), // Cell Blaster - ("Radiator", int2(2, 2), CounterClockwise), - ("Radiator", int2(3, 2), Clockwise), - ("not if i see you first", int2(3, 10), None), // Compact Sensor - ("Panopticon Prime", int2(1, 6), Clockwise)); // Fire Control Array - - stage.Player(fighter, Origin, facing: float2(0, 1)); - stage.Place(stage.Generated("Djinni"), CrosserAt, facing: CrosserFacing, stance: ScenarioStance.Hostile, velocity: CrosserVelocity); - stage.Place(stage.Bare("Djinni"), Waiting); - } -} diff --git a/Assets/Scripts/ServerShared/Scenarios/Crossing.cs.meta b/Assets/Scripts/ServerShared/Scenarios/Crossing.cs.meta deleted file mode 100644 index 2787758ab..000000000 --- a/Assets/Scripts/ServerShared/Scenarios/Crossing.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 0cc3edfb4b0e4ea485cce71354f41748 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/ServerShared/Scenarios/DemoTerminus.cs b/Assets/Scripts/ServerShared/Scenarios/DemoTerminus.cs deleted file mode 100644 index f4dce7be7..000000000 --- a/Assets/Scripts/ServerShared/Scenarios/DemoTerminus.cs +++ /dev/null @@ -1,42 +0,0 @@ -using float2 = CultMath.float2; - -// The demo: one gate, one region and one boss, with a fixed cast. The Pirates are the protagonist's ostensible -// employer, Zhestokost the antagonist whose home is the boss zone and the exit, Lucent Media and Aeronautics Unlimited -// the neutrals. A prelude galaxy of that cast; the player, who is not a Pirate, flies the base Longinus. -public sealed class DemoTerminus : Scenario -{ - public static readonly TutorialGenerationSettings Cast = new TutorialGenerationSettings - { - ProtagonistFaction = "Pirates", - AntagonistFaction = "Zhe", - BufferFaction = "Luc", - NeutralFactions = new[] { "Aero" }, - QuestFaction = null, - ZoneCount = 64, - LinkDensity = .5f - }; - - public override string Name => "Terminus (Demo)"; - public override string Id => "demo-terminus"; - public override string Brief => "One gate, one region, one boss. Allied: the Pirates. Opposed: Zhestokost. " + - "Neutral: Lucent Media and Aeronautics Unlimited."; - - public override Galaxy Generate(GalaxyStage stage) - { - var galaxy = stage.Prelude(Cast); - galaxy.PlaceGate(galaxy.ResolveFaction(Cast.AntagonistFaction)); - return galaxy; - } - - public override void Stage(ScenarioStage stage) - { - var galaxy = stage.Galaxy; - var pirates = galaxy.ResolveFaction(Cast.ProtagonistFaction); - galaxy.FactionRelationships[pirates] = FactionRelationship.Friendly; - galaxy.FactionRelationships[galaxy.ResolveFaction(Cast.AntagonistFaction)] = FactionRelationship.Hated; - galaxy.FactionRelationships[galaxy.ResolveFaction(Cast.BufferFaction)] = FactionRelationship.Neutral; - foreach (var neutral in Cast.NeutralFactions) - galaxy.FactionRelationships[galaxy.ResolveFaction(neutral)] = FactionRelationship.Neutral; - stage.Player(stage.Generated("Longinus"), float2.zero); - } -} diff --git a/Assets/Scripts/ServerShared/Scenarios/DemoTerminus.cs.meta b/Assets/Scripts/ServerShared/Scenarios/DemoTerminus.cs.meta deleted file mode 100644 index 706f1bf0e..000000000 --- a/Assets/Scripts/ServerShared/Scenarios/DemoTerminus.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 5ba7152d3c8b46a98924a4148be550db -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/ServerShared/Scenarios/DjinniShakedown.cs b/Assets/Scripts/ServerShared/Scenarios/DjinniShakedown.cs deleted file mode 100644 index 43d23d0b3..000000000 --- a/Assets/Scripts/ServerShared/Scenarios/DjinniShakedown.cs +++ /dev/null @@ -1,25 +0,0 @@ -using float2 = CultMath.float2; - -public sealed class DjinniShakedown : Scenario -{ - public override string Name => "Djinni Shakedown"; - public override string Id => "djinni-shakedown"; - public override string Brief => "A fitted Djinni in empty space, facing +z, with a bare hull dead ahead and one abeam. Verify: its thrusters " + - "move and turn it; with the hull offline and thrusters firing, its speed does not run away. Its " + - "articulated ballistic barrel points at the hull ahead when it bears, and rests at the arc edge while you " + - "aim at the hull abeam."; - public override uint Seed => 101; - public override bool Ambient => false; - - // Where the targets sit: the ballistic mount faces +z, so Ahead is inside its arc and Abeam outside it. - public static readonly float2 Ahead = new float2(0, 400), Abeam = new float2(400, 0); - - public override Galaxy Generate(GalaxyStage stage) => stage.Prelude(); - - public override void Stage(ScenarioStage stage) - { - stage.Player(stage.Generated("Djinni"), float2.zero); - stage.Place(stage.Bare("Longinus"), Ahead); - stage.Place(stage.Bare("Longinus"), Abeam); - } -} diff --git a/Assets/Scripts/ServerShared/Scenarios/DjinniShakedown.cs.meta b/Assets/Scripts/ServerShared/Scenarios/DjinniShakedown.cs.meta deleted file mode 100644 index 4f25ab345..000000000 --- a/Assets/Scripts/ServerShared/Scenarios/DjinniShakedown.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 1afb559630c241ed813ddd3c444c618b -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/ServerShared/Scenarios/Duel.cs b/Assets/Scripts/ServerShared/Scenarios/Duel.cs deleted file mode 100644 index 67bca118d..000000000 --- a/Assets/Scripts/ServerShared/Scenarios/Duel.cs +++ /dev/null @@ -1,39 +0,0 @@ -using static CultMath.math; -using static ItemRotation; - -public sealed class Duel : Scenario -{ - public override string Name => "Duel"; - public override string Id => "duel"; - public override string Brief => "One piloted, hostile Longinus with slow guided missiles and a Light Laser in its hold. Verify: rolled " + - "hits and near-misses, subsystem aim, beam reads above bow, armour takes the missile, loot keeps its brand."; - public override uint Seed => 104; - public override bool Ambient => false; - - public override Galaxy Generate(GalaxyStage stage) => stage.Prelude(); - - public override void Stage(ScenarioStage stage) - { - var fighter = stage.Fit("Longinus", - ("Cockpit 2x2", int2(2, 6), None), - ("Large Drive", int2(1, 0), Reversed), - ("Large Drive", int2(3, 0), Reversed), - ("Rugged Drive", int2(2, 14), CounterClockwise), - ("Rugged Drive", int2(3, 14), Clockwise), - ("Compact Reactor", int2(2, 4), None), - ("GT 3K", int2(0, 5), None), // Guided Missile Launcher - ("GT 3K", int2(5, 5), None), // Guided Missile Launcher - ("FastBlast+-", int2(1, 8), None), // Cell Blaster - ("FastBlast+-", int2(4, 8), None), // Cell Blaster - ("Radiator", int2(2, 2), CounterClockwise), - ("Radiator", int2(3, 2), Clockwise), - ("not if i see you first", int2(3, 10), None), // Compact Sensor - ("Capacitor", int2(1, 5), None), - ("Panopticon Prime", int2(1, 6), Clockwise), // Fire Control Array - ("Store-All Plus", int2(2, 8), None)); // Cargo Bay - - stage.Player(fighter, float2(0, 0)); - var rival = stage.Place(fighter, float2(0, 900), facing: float2(0, -1), stance: ScenarioStance.Hostile, piloted: true); - stage.Cargo(rival, "Spectra"); - } -} diff --git a/Assets/Scripts/ServerShared/Scenarios/Duel.cs.meta b/Assets/Scripts/ServerShared/Scenarios/Duel.cs.meta deleted file mode 100644 index 4acea5ed7..000000000 --- a/Assets/Scripts/ServerShared/Scenarios/Duel.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: f6ba813d4a9447c89e1bbb6997b7ac35 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/ServerShared/Scenarios/FusedRounds.cs b/Assets/Scripts/ServerShared/Scenarios/FusedRounds.cs deleted file mode 100644 index 7498465c3..000000000 --- a/Assets/Scripts/ServerShared/Scenarios/FusedRounds.cs +++ /dev/null @@ -1,55 +0,0 @@ -using static CultMath.math; -using static ItemRotation; - -public sealed class FusedRounds : Scenario -{ - public override string Name => "Fused Rounds"; - public override string Id => "fused-rounds"; - public override string Brief => "The Smoke Test Hull with Smoke Proximity, Smoke Delayed and a Cluster Cannon; a hostile bare Longinus at mid range, a bare " + - "hull dead ahead, a fragile one to starboard, a close one inside the proximity blast radius, and one astern. " + - "Verify with nothing selected: aim past every hull and the round bursts at max range along the aim; aim at the hull " + - "ahead and it stops and bursts on it; fire the Cluster Cannon at the fragile hull and, once it is hurt, a Smoke " + - "Proximity round at it: the hull dies before the round lands, no burst. Select the astern hull: the round fires and bursts at its range along the arc edge. Select the " + - "close hull: the burst is pushed out to the blast radius from your centre. A Smoke Proximity burst beside the " + - "Longinus damages where the model shows the blast; a Smoke Delayed round into its nose bursts inside. The HUD " + - "reads Direct, Burst at N m or Refused for the fused weapons and a percentage for the Cluster Cannon, and the " + - "smoke weapons show no Manufacturer row."; - public override uint Seed => 108; - public override bool Ambient => false; - - // Where everything sits: the player is at the origin facing +z. Ahead lies on the initial aim line, inside every forward - // mount's arc. Fragile is a bare Longinus inside the Cluster Cannon's effective range (full damage; the scenario test reads the bound from the weapon); Close is inside Smoke Proximity's blast radius - // (8 m from the ship's centre) and beside the aim line, not across it; Stern is outside every mount's arc. - public static readonly CultMath.float2 Mid = float2(-200, 600), Ahead = float2(0, 300), Fragile = float2(80, 240), - Close = float2(6.4f, 4f), Stern = float2(0, -400); - - // The shooter is staged at this quality, so the damage its Cluster Cannon deals does not ride the item stream. - public const float StagedQuality = .6f; - - public override Galaxy Generate(GalaxyStage stage) => stage.Prelude(DemoTerminus.Cast); - - public override void Stage(ScenarioStage stage) - { - var shooter = stage.Fit("Smoke Test Hull", StagedQuality, - ("Cockpit 2x2", int2(4, 6), None), - ("Large Drive", int2(3, 0), Reversed), - ("Large Drive", int2(5, 0), Reversed), - ("Rugged Drive", int2(4, 14), CounterClockwise), - ("Rugged Drive", int2(5, 14), Clockwise), - ("Compact Reactor", int2(4, 4), None), - ("Smoke Proximity", int2(3, 8), None), - ("Smoke Delayed", int2(6, 8), None), - ("DeathCluster", int2(5, 17), None), // Cluster Cannon - ("Radiator", int2(4, 2), CounterClockwise), - ("Radiator", int2(5, 2), Clockwise), - ("not if i see you first", int2(5, 10), None), // Compact Sensor - ("Panopticon Prime", int2(3, 6), Clockwise)); // Fire Control Array - - stage.Player(shooter, float2(0, 0), facing: float2(0, 1)); - stage.Place(stage.Bare("Longinus"), Mid, stance: ScenarioStance.Hostile); - stage.Place(stage.Bare("Longinus"), Ahead); - stage.Place(stage.Bare("Longinus"), Fragile); - stage.Place(stage.Bare("Longinus"), Close); - stage.Place(stage.Bare("Longinus"), Stern); - } -} diff --git a/Assets/Scripts/ServerShared/Scenarios/FusedRounds.cs.meta b/Assets/Scripts/ServerShared/Scenarios/FusedRounds.cs.meta deleted file mode 100644 index 0e96bab70..000000000 --- a/Assets/Scripts/ServerShared/Scenarios/FusedRounds.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 4afe22415e8546849f2366c39a40fd8f -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/ServerShared/Scenarios/LauncherAngles.cs b/Assets/Scripts/ServerShared/Scenarios/LauncherAngles.cs deleted file mode 100644 index 61a798b1c..000000000 --- a/Assets/Scripts/ServerShared/Scenarios/LauncherAngles.cs +++ /dev/null @@ -1,37 +0,0 @@ -using static CultMath.math; -using static ItemRotation; - -public sealed class LauncherAngles : Scenario -{ - public override string Name => "Launcher Angles"; - public override string Id => "launcher-angles"; - public override string Brief => "A Guided Missile Launcher, a Swarm Rocket Pod and two Cell Blasters; a hostile bare Longinus broadside on, another beside it. " + - "Verify: hits pulse only the facing edge; a Swarm Rocket Pod round whose target dies fades unexploded."; - public override uint Seed => 105; - public override bool Ambient => false; - - public override Galaxy Generate(GalaxyStage stage) => stage.Prelude(); - - public override void Stage(ScenarioStage stage) - { - var launcher = stage.Fit("Longinus", - ("Cockpit 2x2", int2(2, 6), None), - ("Large Drive", int2(1, 0), Reversed), - ("Large Drive", int2(3, 0), Reversed), - ("Rugged Drive", int2(2, 14), CounterClockwise), - ("Rugged Drive", int2(3, 14), Clockwise), - ("Compact Reactor", int2(2, 4), None), - ("GT 3K", int2(0, 5), None), // Guided Missile Launcher - ("Leonid", int2(5, 5), None), // Swarm Rocket Pod - ("FastBlast+-", int2(1, 8), None), // Cell Blaster - ("FastBlast+-", int2(4, 8), None), // Cell Blaster - ("Radiator", int2(2, 2), CounterClockwise), - ("Radiator", int2(3, 2), Clockwise), - ("not if i see you first", int2(3, 10), None), // Compact Sensor - ("Panopticon Prime", int2(1, 6), Clockwise)); // Fire Control Array - - stage.Player(launcher, float2(0, 0)); - stage.Place(stage.Bare("Longinus"), float2(0, 900), facing: float2(1, 0), stance: ScenarioStance.Hostile); - stage.Place(stage.Bare("Longinus"), float2(300, 700)); - } -} diff --git a/Assets/Scripts/ServerShared/Scenarios/LauncherAngles.cs.meta b/Assets/Scripts/ServerShared/Scenarios/LauncherAngles.cs.meta deleted file mode 100644 index 82a27fcac..000000000 --- a/Assets/Scripts/ServerShared/Scenarios/LauncherAngles.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 58cfaf062ddf458c99c12f3652243b45 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/ServerShared/Scenarios/LockOn.cs b/Assets/Scripts/ServerShared/Scenarios/LockOn.cs deleted file mode 100644 index 4f8c4dfa9..000000000 --- a/Assets/Scripts/ServerShared/Scenarios/LockOn.cs +++ /dev/null @@ -1,64 +0,0 @@ -using static CultMath.math; -using static ItemRotation; - -public sealed class LockOn : Scenario -{ - public override string Name => "Lock On"; - public override string Id => "lock-on"; - public override string Brief => "A hostile closes from out of sight, finds you and locks. Verify: no warning at first; once it locks, one " + - "indicator appears toward it and tightens as the lock grows; break line of sight or range and it vanishes; " + - "your own ping shows no incoming paint on its side, only the lock does."; - public override uint Seed => 1; - public override bool Ambient => false; - - // The hostile starts about 4000 m off, ahead and to port of the player, facing the player. At that range its passive - // sensors hold no track of the player (the test asks the sim's own PassiveInfo against the detection threshold). The - // hostile is ordered to close on the player, finds it and locks. The zone's pull carries it off the staged line, so the - // warning must point at where the hostile was when the paint was stamped, which the test checks against the poses of - // that tick. At Duel's 900 m (and at 600 m) it sees and locks within a second. - public static readonly CultMath.float2 HostileAt = float2(-2000, 3450); - - // The fit's lots are minted at this quality, the one Crossing and the other RunStart scenarios stage (the brief states no - // other), and the hostile's order is to close on the player, so the lock follows from the staged situation and not - // from item draws or the pilot's drawn circuit (ruling scenario-stages-hostile-task). - const float StagedQuality = .6f; - - private readonly CultMath.float2 _hostileAt; - private readonly float _quality; - - public LockOn() : this(HostileAt, StagedQuality) { } - - // The staged inputs, open to a test that moves each a little and asks that the scenario still hold. - internal LockOn(CultMath.float2 hostileAt, float quality) - { - _hostileAt = hostileAt; - _quality = quality; - } - - public override Galaxy Generate(GalaxyStage stage) => stage.Prelude(DemoTerminus.Cast); - - public override void Stage(ScenarioStage stage) - { - var fighter = stage.Fit("Longinus", _quality, - ("Cockpit 2x2", int2(2, 6), None), - ("Large Drive", int2(1, 0), Reversed), - ("Large Drive", int2(3, 0), Reversed), - ("Rugged Drive", int2(2, 14), CounterClockwise), - ("Rugged Drive", int2(3, 14), Clockwise), - ("Compact Reactor", int2(2, 4), None), - ("GT 3K", int2(0, 5), None), // Guided Missile Launcher - ("GT 3K", int2(5, 5), None), // Guided Missile Launcher - ("FastBlast+-", int2(1, 8), None), // Cell Blaster - ("FastBlast+-", int2(4, 8), None), // Cell Blaster - ("Radiator", int2(2, 2), CounterClockwise), - ("Radiator", int2(3, 2), Clockwise), - ("not if i see you first", int2(3, 10), None), // Compact Sensor - ("Capacitor", int2(1, 5), None), - ("Panopticon Prime", int2(1, 6), Clockwise), // Fire Control Array - ("Store-All Plus", int2(2, 8), None)); // Cargo Bay - - var player = stage.Player(fighter, float2(0, 0), facing: float2(0, 1)); - var hostile = stage.Place(fighter, _hostileAt, facing: normalize(-_hostileAt), stance: ScenarioStance.Hostile, piloted: true); - stage.Approach(hostile, player); - } -} diff --git a/Assets/Scripts/ServerShared/Scenarios/LockOn.cs.meta b/Assets/Scripts/ServerShared/Scenarios/LockOn.cs.meta deleted file mode 100644 index 1512201c0..000000000 --- a/Assets/Scripts/ServerShared/Scenarios/LockOn.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 3f0b6d2a9c7e4a1b8d5e2c6f7a9b0c14 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/ServerShared/Scenarios/LongHaul.cs b/Assets/Scripts/ServerShared/Scenarios/LongHaul.cs deleted file mode 100644 index 18e158247..000000000 --- a/Assets/Scripts/ServerShared/Scenarios/LongHaul.cs +++ /dev/null @@ -1,15 +0,0 @@ -using float2 = CultMath.float2; - -public sealed class LongHaul : Scenario -{ - public override string Name => "Long Haul"; - public override string Id => "long-haul"; - public override string Brief => "A standard ship in a populated galaxy. Verify: memory stays flat across zones with kills; " + - "warp, quit and Continue keep items, tier and brand; death disables Continue."; - public override uint Seed => 106; - - public override Galaxy Generate(GalaxyStage stage) => stage.Prelude(); - - public override void Stage(ScenarioStage stage) => - stage.Player(stage.Generated(stage.StartingHull), float2.zero); -} diff --git a/Assets/Scripts/ServerShared/Scenarios/LongHaul.cs.meta b/Assets/Scripts/ServerShared/Scenarios/LongHaul.cs.meta deleted file mode 100644 index 984d274d6..000000000 --- a/Assets/Scripts/ServerShared/Scenarios/LongHaul.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 3a7911611f9845709e9ae5ba34d91dfb -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/ServerShared/Scenarios/MainGalaxy.cs b/Assets/Scripts/ServerShared/Scenarios/MainGalaxy.cs deleted file mode 100644 index 3e4482d3c..000000000 --- a/Assets/Scripts/ServerShared/Scenarios/MainGalaxy.cs +++ /dev/null @@ -1,14 +0,0 @@ -using float2 = CultMath.float2; - -// The full galaxy: factions drawn from the catalog, bosses on the road to the exit, entered in the starting hull. -public sealed class MainGalaxy : Scenario -{ - public override string Name => "Main Galaxy"; - public override string Id => "main-galaxy"; - public override string Brief => "The full galaxy: factions drawn at random, bosses guarding the road to the exit."; - - public override Galaxy Generate(GalaxyStage stage) => stage.Main(); - - public override void Stage(ScenarioStage stage) => - stage.Player(stage.Generated(stage.StartingHull), float2.zero); -} diff --git a/Assets/Scripts/ServerShared/Scenarios/MainGalaxy.cs.meta b/Assets/Scripts/ServerShared/Scenarios/MainGalaxy.cs.meta deleted file mode 100644 index 4e862188d..000000000 --- a/Assets/Scripts/ServerShared/Scenarios/MainGalaxy.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: c7f6bdb3ed7b4b1aa137569c7e79bccd -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/ServerShared/Scenarios/Pursuit.cs b/Assets/Scripts/ServerShared/Scenarios/Pursuit.cs deleted file mode 100644 index d6d630a88..000000000 --- a/Assets/Scripts/ServerShared/Scenarios/Pursuit.cs +++ /dev/null @@ -1,61 +0,0 @@ -using static CultMath.math; -using static ItemRotation; - -public sealed class Pursuit : Scenario -{ - // The pursuer starts astern, inside the 400 at which VapourCloudTests.ACloudBreaksALockAtRange shows a fresh vent - // cloud breaking a sensor's lock, and well outside the 40 at which AStrongCloseSensorBurnsThrough shows a close - // sensor burning through. - private const float Astern = 300; - - public override string Name => "Pursuit"; - public override string Id => "pursuit"; - public override string Brief => "A hostile Longinus on your tail; a Mine Launcher fitted, three Coolant Vents and two Thruster " + - "Overdrives aboard. Verify: lay mines in its path, the mine pulses slowly after 2 s, fast when " + - "the hostile is near, explodes 2 s later; vent and coast to lose it; overdrive away."; - public override uint Seed => 111; - public override bool Ambient => false; - - public override Galaxy Generate(GalaxyStage stage) => stage.Prelude(DemoTerminus.Cast); - - public override void Stage(ScenarioStage stage) - { - var layer = stage.Fit("Longinus", - ("Cockpit 2x2", int2(2, 6), None), - ("Large Drive", int2(1, 0), Reversed), - ("Large Drive", int2(3, 0), Reversed), - ("Rugged Drive", int2(2, 14), CounterClockwise), - ("Rugged Drive", int2(3, 14), Clockwise), - ("Compact Reactor", int2(2, 4), None), - ("parting gift", int2(0, 5), None), // Mine Launcher - ("Leonid", int2(5, 5), None), // Swarm Rocket Pod - ("FastBlast+-", int2(1, 8), None), // Cell Blaster - ("FastBlast+-", int2(4, 8), None), // Cell Blaster - ("Radiator", int2(2, 2), CounterClockwise), - ("Radiator", int2(3, 2), Clockwise), - ("not if i see you first", int2(3, 10), None), // Compact Sensor - ("Panopticon Prime", int2(1, 6), Clockwise), // Fire Control Array - ("Store-All Plus", int2(2, 8), None)); // Cargo Bay - var pursuer = stage.Fit("Longinus", - ("Cockpit 2x2", int2(2, 6), None), - ("Large Drive", int2(1, 0), Reversed), - ("Large Drive", int2(3, 0), Reversed), - ("Rugged Drive", int2(2, 14), CounterClockwise), - ("Rugged Drive", int2(3, 14), Clockwise), - ("Compact Reactor", int2(2, 4), None), - ("GT 3K", int2(0, 5), None), // Guided Missile Launcher - ("GT 3K", int2(5, 5), None), // Guided Missile Launcher - ("FastBlast+-", int2(1, 8), None), // Cell Blaster - ("FastBlast+-", int2(4, 8), None), // Cell Blaster - ("Radiator", int2(2, 2), CounterClockwise), - ("Radiator", int2(3, 2), Clockwise), - ("not if i see you first", int2(3, 10), None), // Compact Sensor - ("Capacitor", int2(1, 5), None), - ("Panopticon Prime", int2(1, 6), Clockwise), // Fire Control Array - ("Store-All Plus", int2(2, 8), None)); // Cargo Bay - - var player = stage.Player(layer, float2(0, 0), facing: float2(0, 1)); - stage.Cargo(player, "Morning Fog", "Morning Fog", "Morning Fog", "send it", "send it"); - stage.Place(pursuer, float2(0, -Astern), facing: float2(0, 1), stance: ScenarioStance.Hostile, piloted: true); - } -} diff --git a/Assets/Scripts/ServerShared/Scenarios/Pursuit.cs.meta b/Assets/Scripts/ServerShared/Scenarios/Pursuit.cs.meta deleted file mode 100644 index 375cb139b..000000000 --- a/Assets/Scripts/ServerShared/Scenarios/Pursuit.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 4b0587057e6a4618bf63944364298870 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/ServerShared/Scenarios/RefusedRounds.cs b/Assets/Scripts/ServerShared/Scenarios/RefusedRounds.cs deleted file mode 100644 index 88cdd3fdb..000000000 --- a/Assets/Scripts/ServerShared/Scenarios/RefusedRounds.cs +++ /dev/null @@ -1,41 +0,0 @@ -using static CultMath.math; -using static ItemRotation; - -public sealed class RefusedRounds : Scenario -{ - public override string Name => "Refused Rounds"; - public override string Id => "refused-rounds"; - public override string Brief => "The Smoke Test Hull with Smoke Refused, Smoke Refused Beam, Smoke Refused Charge and an Autocannon; a bare Longinus " + - "dead ahead. Each smoke weapon's blast radius is wider than its range, so it can never be fired. Verify: pull each " + - "trigger and a refused shot costs no ammo, energy, heat, sound, visibility or cooldown, the beam never starts and " + - "the charged weapon never starts charging; the Autocannon fires normally."; - public override uint Seed => 109; - public override bool Ambient => false; - - // The one target, ahead of the nose: inside every forward mount's arc. - public static readonly CultMath.float2 Target = float2(0, 300); - - public override Galaxy Generate(GalaxyStage stage) => stage.Prelude(DemoTerminus.Cast); - - public override void Stage(ScenarioStage stage) - { - var shooter = stage.Fit("Smoke Test Hull", - ("Cockpit 2x2", int2(4, 6), None), - ("Large Drive", int2(3, 0), Reversed), - ("Large Drive", int2(5, 0), Reversed), - ("Rugged Drive", int2(4, 14), CounterClockwise), - ("Rugged Drive", int2(5, 14), Clockwise), - ("Compact Reactor", int2(4, 4), None), - ("Smoke Refused", int2(3, 8), None), - ("Smoke Refused Beam", int2(6, 8), None), - ("Smoke Refused Charge", int2(3, 17), None), - ("🫳🔫", int2(5, 17), None), // Autocannon - ("Radiator", int2(4, 2), CounterClockwise), - ("Radiator", int2(5, 2), Clockwise), - ("not if i see you first", int2(5, 10), None), // Compact Sensor - ("Panopticon Prime", int2(3, 6), Clockwise)); // Fire Control Array - - stage.Player(shooter, float2(0, 0), facing: float2(0, 1)); - stage.Place(stage.Bare("Longinus"), Target); - } -} diff --git a/Assets/Scripts/ServerShared/Scenarios/RefusedRounds.cs.meta b/Assets/Scripts/ServerShared/Scenarios/RefusedRounds.cs.meta deleted file mode 100644 index 45c0cde82..000000000 --- a/Assets/Scripts/ServerShared/Scenarios/RefusedRounds.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: c72528ae3b7144989483462543f2de88 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/ServerShared/Scenarios/Scenarios.cs b/Assets/Scripts/ServerShared/Scenarios/Scenarios.cs deleted file mode 100644 index 752b33e28..000000000 --- a/Assets/Scripts/ServerShared/Scenarios/Scenarios.cs +++ /dev/null @@ -1,14 +0,0 @@ -// Every way to set up a new run, in the order New Game lists them. Modes are what a release build lists; Development -// are the other ways the game sets up a run and Tests are arenas built to check one system each, both listed only in -// editor and development builds. -public static class Scenarios -{ - public static readonly Scenario[] Modes = { new DemoTerminus() }; - - public static readonly Scenario[] Development = { new TutorialGalaxy(), new MainGalaxy() }; - - public static readonly Scenario[] Tests = - { - new DjinniShakedown(), new StarvedReactor(), new Arcs(), new Duel(), new LauncherAngles(), new WeaponFeel(), new FusedRounds(), new RefusedRounds(), new AiFusedDiscipline(), new LongHaul(), new Pursuit(), new Crossing(), new Belt(), new LockOn() - }; -} diff --git a/Assets/Scripts/ServerShared/Scenarios/Scenarios.cs.meta b/Assets/Scripts/ServerShared/Scenarios/Scenarios.cs.meta deleted file mode 100644 index 4c856d4d9..000000000 --- a/Assets/Scripts/ServerShared/Scenarios/Scenarios.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 12f60a9ad25c4aa0a9b8b098d385ea0e -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/ServerShared/Scenarios/StarvedReactor.cs b/Assets/Scripts/ServerShared/Scenarios/StarvedReactor.cs deleted file mode 100644 index 2f3dff97b..000000000 --- a/Assets/Scripts/ServerShared/Scenarios/StarvedReactor.cs +++ /dev/null @@ -1,33 +0,0 @@ -using static CultMath.math; -using static ItemRotation; - -public sealed class StarvedReactor : Scenario -{ - public override string Name => "Starved Reactor"; - public override string Id => "starved-reactor"; - public override string Brief => "Two Light Lasers on a Muon Fusion Reactor, which can fall to a quarter of the Compact Reactor's charge, and a bare hull " + - "to shoot. Verify: starvation reads as starvation, brownout degrades, refills stutter."; - public override uint Seed => 102; - public override bool Ambient => false; - - public override Galaxy Generate(GalaxyStage stage) => stage.Prelude(); - - public override void Stage(ScenarioStage stage) - { - var starved = stage.Fit("Longinus", - ("Cockpit 2x2", int2(2, 6), None), - ("Large Drive", int2(1, 0), Reversed), - ("Large Drive", int2(3, 0), Reversed), - ("Rugged Drive", int2(2, 14), CounterClockwise), - ("Rugged Drive", int2(3, 14), Clockwise), - ("Muon Fusion Reactor", int2(2, 4), None), - ("Spectra", int2(1, 8), None), // Light Laser - ("Spectra", int2(4, 8), None), // Light Laser - ("Radiator", int2(2, 2), CounterClockwise), - ("Radiator", int2(3, 2), Clockwise), - ("not if i see you first", int2(3, 10), None), // Compact Sensor - ("Panopticon Prime", int2(1, 6), Clockwise)); // Fire Control Array - stage.Player(starved, float2(0, 0)); - stage.Place(stage.Bare("Longinus"), float2(0, 400)); - } -} diff --git a/Assets/Scripts/ServerShared/Scenarios/StarvedReactor.cs.meta b/Assets/Scripts/ServerShared/Scenarios/StarvedReactor.cs.meta deleted file mode 100644 index e13077120..000000000 --- a/Assets/Scripts/ServerShared/Scenarios/StarvedReactor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 91a81ac4784c4066969cac11ac1937b0 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/ServerShared/Scenarios/TutorialGalaxy.cs b/Assets/Scripts/ServerShared/Scenarios/TutorialGalaxy.cs deleted file mode 100644 index 1ff521865..000000000 --- a/Assets/Scripts/ServerShared/Scenarios/TutorialGalaxy.cs +++ /dev/null @@ -1,17 +0,0 @@ -using float2 = CultMath.float2; - -// New Game as it has always been: a prelude galaxy, entered in the starting hull of the protagonist faction. -public sealed class TutorialGalaxy : Scenario -{ - public override string Name => "Tutorial Galaxy"; - public override string Id => "tutorial-galaxy"; - public override string Brief => "A small galaxy of fixed factions, entered in a ship of the protagonist faction."; - - public override Galaxy Generate(GalaxyStage stage) => stage.Prelude(); - - public override void Stage(ScenarioStage stage) - { - var protagonist = stage.Galaxy.ResolveFaction(stage.TutorialGenerationSettings.ProtagonistFaction); - stage.Player(stage.Generated(stage.StartingHull, protagonist), float2.zero); - } -} diff --git a/Assets/Scripts/ServerShared/Scenarios/TutorialGalaxy.cs.meta b/Assets/Scripts/ServerShared/Scenarios/TutorialGalaxy.cs.meta deleted file mode 100644 index 3f7c8777a..000000000 --- a/Assets/Scripts/ServerShared/Scenarios/TutorialGalaxy.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 94d688b37c5044dd9b67865c706d8918 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/ServerShared/Scenarios/WeaponFeel.cs b/Assets/Scripts/ServerShared/Scenarios/WeaponFeel.cs deleted file mode 100644 index 0817cfa80..000000000 --- a/Assets/Scripts/ServerShared/Scenarios/WeaponFeel.cs +++ /dev/null @@ -1,39 +0,0 @@ -using static CultMath.math; -using static ItemRotation; - -public sealed class WeaponFeel : Scenario -{ - public override string Name => "Weapon Feel"; - public override string Id => "weapon-feel"; - public override string Brief => "The Smoke Test Hull with a Charged Scatter Blaster, an Autocannon and a Cell Blaster burst weapon; a bare Longinus dead ahead. " + - "Verify: Charged Scatter Blaster and Autocannon fire with effects, particles and action-bar icons; the burst weapon's " + - "cadence is as before; a fast release-and-press on the Charged Scatter Blaster starts no second charge."; - public override uint Seed => 107; - public override bool Ambient => false; - - // The one target, ahead of the nose: inside every forward mount's arc. - public static readonly CultMath.float2 Target = float2(0, 400); - - public override Galaxy Generate(GalaxyStage stage) => stage.Prelude(DemoTerminus.Cast); - - public override void Stage(ScenarioStage stage) - { - var shooter = stage.Fit("Smoke Test Hull", - ("Cockpit 2x2", int2(4, 6), None), - ("Large Drive", int2(3, 0), Reversed), - ("Large Drive", int2(5, 0), Reversed), - ("Rugged Drive", int2(4, 14), CounterClockwise), - ("Rugged Drive", int2(5, 14), Clockwise), - ("Compact Reactor", int2(4, 4), None), - ("ChargeBlast SG", int2(3, 17), None), // Charged Scatter Blaster - ("🫳🔫", int2(5, 17), None), // Autocannon - ("FastBlast+-", int2(3, 8), None), // Cell Blaster - ("Radiator", int2(4, 2), CounterClockwise), - ("Radiator", int2(5, 2), Clockwise), - ("not if i see you first", int2(5, 10), None), // Compact Sensor - ("Panopticon Prime", int2(3, 6), Clockwise)); // Fire Control Array - - stage.Player(shooter, float2(0, 0), facing: float2(0, 1)); - stage.Place(stage.Bare("Longinus"), Target); - } -} diff --git a/Assets/Scripts/ServerShared/Scenarios/WeaponFeel.cs.meta b/Assets/Scripts/ServerShared/Scenarios/WeaponFeel.cs.meta deleted file mode 100644 index 6ea88923e..000000000 --- a/Assets/Scripts/ServerShared/Scenarios/WeaponFeel.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 74c554ab5a6a4ac5ad0334a29135dc7f -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/ServerShared/SchematicUnderlay.cs b/Assets/Scripts/ServerShared/SchematicUnderlay.cs deleted file mode 100644 index 09f3d4118..000000000 --- a/Assets/Scripts/ServerShared/SchematicUnderlay.cs +++ /dev/null @@ -1,36 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -using System.Collections.Generic; -using System.Linq; -using CultMath; - -// A mod hull's line-art schematic laid under its cell grids. The one rule for where the lines land: the line art's -// top-down bounding box is stretched, per axis, onto the hull Shape's cell rect [0, Width] x [0, Height] as the hull -// drawer sets it, never onto the occupied cells (underlay-fits-hull-bounds). Display only: nothing is derived from the -// model into the schematic or back (schematic-and-model-are-separate-spaces). -public static class SchematicUnderlay -{ - // Points are Blender Z-up XYZ in the Ship Root frame, nose toward -Y and starboard toward -X, so the schematic's - // x (starboard right) is -X and its y (forward up) is -Y. Output is in hull cell units, index-aligned with `lines`. - public static float2[][] Fit(IReadOnlyList lines, Shape hull) - { - if (lines == null || lines.Count == 0 || hull == null) return new float2[0][]; - var top = lines.Select(line => Enumerable.Range(0, (line?.Points?.Length ?? 0) / 3) - .Select(i => new float2(-line.Points[i * 3], -line.Points[i * 3 + 1])).ToArray()).ToArray(); - var all = top.SelectMany(line => line).ToArray(); - if (all.Length == 0) return top; - - var minX = all.Min(p => p.x); - var maxX = all.Max(p => p.x); - var minY = all.Min(p => p.y); - var maxY = all.Max(p => p.y); - return top.Select(line => line.Select(p => new float2( - Stretch(p.x, minX, maxX, hull.Width), Stretch(p.y, minY, maxY, hull.Height))).ToArray()).ToArray(); - } - - // min lands on 0 and max on `size`; an axis with no extent sits at the midpoint. - private static float Stretch(float value, float min, float max, int size) => - max > min ? (value - min) / (max - min) * size : size / 2f; -} diff --git a/Assets/Scripts/ServerShared/SchematicUnderlay.cs.meta b/Assets/Scripts/ServerShared/SchematicUnderlay.cs.meta deleted file mode 100644 index d6120a641..000000000 --- a/Assets/Scripts/ServerShared/SchematicUnderlay.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 77b6dfe49272456a9f976d2578732d8a -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/ServerShared/Sensing.cs b/Assets/Scripts/ServerShared/Sensing.cs deleted file mode 100644 index 3a678fde9..000000000 --- a/Assets/Scripts/ServerShared/Sensing.cs +++ /dev/null @@ -1,224 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -using System.Linq; -using CultMath; - -// Light signatures split by channel (ruling visibility-per-capability-reveal): an observer learns what a ship -// is by which channel carries the light. Append-only: values are serialized in VisibilityData. -public enum SignatureChannel -{ - Thermal, - Reflection, - DrivePlume, - LaunchFlash, - Emission -} - -public readonly struct Signature -{ - public readonly SignatureChannel Channel; - public readonly float Strength; - public readonly EquippedItem Item; - // The class this act claims: the true item's Data unless its ship's EW claims otherwise (aetheria-ew, - // classify-from-belief). Stamped by Entity.SetSignature from the ship's claim. - public readonly EquippableItemData Claimed; - - public Signature(SignatureChannel channel, float strength, EquippedItem item, EquippableItemData claimed) - { - Channel = channel; - Strength = strength; - Item = item; - Claimed = claimed; - } - - public Signature WithStrength(float strength) => new Signature(Channel, strength, Item, Claimed); -} - -// What a painted ship learns of a beam on it (ruling sensor-stat-set item 4): a Search paint is a ping sweeping -// it (Strength 0); a Track paint is a lock (Strength is the emitter's own lock progress, 0..1, ruling -// lock-warning-strength). A Scan paint is a held scanner: Strength is its scan progress 0..1 (ruling scan-is-an-act). -// Never summed. -public enum PaintMode -{ - Search, - Track, - Scan -} - -// An ally's ping crossed `Subject` at `IlluminatedRange` through `IlluminatedObscuration`; `MaxRange` is that -// sensor's PingRange. Posted on the crossing tick and read for one tick by the receiving ship's own sensors. -public readonly struct PingReturn -{ - public readonly Entity Subject; - public readonly float IlluminatedRange; - public readonly float IlluminatedObscuration; - public readonly float MaxRange; - - public PingReturn(Entity subject, float illuminatedRange, float illuminatedObscuration, float maxRange) - { - Subject = subject; - IlluminatedRange = illuminatedRange; - IlluminatedObscuration = illuminatedObscuration; - MaxRange = maxRange; - } -} - -// An item's emission this tick, heard by another ship's Sense within `HearRange` x its HearingMultiple x obscuration; -// it decides nothing by itself. -public readonly struct ActiveEmission -{ - public readonly EquippedItem Item; - public readonly float HearRange; - // The class this emission claims (see Signature.Claimed); stamped by Entity.Emit. - public readonly EquippableItemData Claimed; - - public ActiveEmission(EquippedItem item, float hearRange, EquippableItemData claimed) - { - Item = item; - HearRange = hearRange; - Claimed = claimed; - } -} - -public readonly struct PaintWarning -{ - public readonly float2 Bearing; - public readonly EquippableItemData EmitterClass; - public readonly PaintMode Mode; - public readonly float Strength; - - public PaintWarning(float2 bearing, EquippableItemData emitterClass, PaintMode mode, float strength) - { - Bearing = bearing; - EmitterClass = emitterClass; - Mode = mode; - Strength = strength; - } -} - -// What an observer has seen `Item` do (ruling visibility-per-capability-reveal): the channel it showed on, the -// bearing at that act and the zone clock then. Held per (subject, item) in the observer's Entity; the latest act -// replaces the earlier one. Position is never carried: only the track gives it. `Item` stays the true item: it is the -// book's key and what aim reads. `Claimed` is the class the act claimed, and is what every classifying reader reads -// (aetheria-ew, classify-from-belief). A null `Channel` is a reveal by the observer's own scan (Entity.RecordInspection), -// whose `Claimed` is the subject's claim for the item. -public readonly struct Reveal -{ - public readonly EquippedItem Item; - public readonly EquippableItemData Claimed; - public readonly SignatureChannel? Channel; - public readonly float2 Bearing; - public readonly float Time; - - public Reveal(EquippedItem item, SignatureChannel? channel, float2 bearing, float time, EquippableItemData claimed) - { - Item = item; - Claimed = claimed; - Channel = channel; - Bearing = bearing; - Time = time; - } -} - -// What an observer aims at on its target (Entity.AimedAt): exactly one of a revealed item or a mount of the hull the observer -// believes the target to be (Entity.LayoutOf), or nothing. A mount is a believed position, never the true item on it. -public readonly struct AimTarget -{ - public readonly EquippedItem Item; - public readonly HardpointData Mount; - - private AimTarget(EquippedItem item, HardpointData mount) - { - Item = item; - Mount = mount; - } - - public static AimTarget None => default; - public static AimTarget OfItem(EquippedItem item) => new AimTarget(item, null); - public static AimTarget OfMount(HardpointData mount) => new AimTarget(null, mount); -} - -// One weapon or gear row of a ship's schematic as its viewer is entitled to read it (aetheria-ew, classify-from-belief; ruling -// ew-claim-weapon-measure-ruled). Made only by Entity.SchematicRows. `Item` is the true item: the selection mark's key and, -// on the viewer's own ship, the live gear. `Claimed` is the class the row shows. The range label is the live range on -// the viewer's own ship and the claimed design's rated range on any other; a row whose claimed class is not a weapon has -// no range. The viewer never sees a target item's quality, wear or power. A renderer shows these and decides nothing. -// A mount row (`Mount` set, `Item` and `Claimed` null) is a hardpoint of the hull the viewer believes the ship to be, with -// nothing of the ship's claimed on it: where something is, not what. -public readonly struct SchematicRow -{ - public readonly EquippedItem Item; - public readonly EquippableItemData Claimed; - public readonly HardpointData Mount; - private readonly bool _own; - - internal SchematicRow(EquippedItem item, EquippableItemData claimed, bool own) - { - Item = item; - Claimed = claimed; - Mount = null; - _own = own; - } - - internal SchematicRow(HardpointData mount) : this() - { - Mount = mount; - } - - // What a renderer compares to know the rows changed. Range is a reading, not part of the key. - public (EquippedItem, EquippableItemData, HardpointData) Key => (Item, Claimed, Mount); - - // Whether this row is the one `aim` points at: a claimed-item row by its item, a mount row by its mount. - public bool Marks(AimTarget aim) => Item != null ? aim.Item == Item : aim.Mount != null && aim.Mount == Mount; - - public float? Range => _own - ? Item.Behaviors.OfType().First().Range - : Claimed?.Behaviors.OfType().FirstOrDefault()?.RatedRange; -} - -// A subject's removal from a zone as the zone recorded it (death, dock, warp, any removal): where it was and how -// bright its light was (its Visibility at removal). Judged by each observer's Sense under the -// light-act gate; notification only, one tick long, it decides nothing. -public readonly struct Departure -{ - public readonly Entity Subject; - public readonly float2 Position; - public readonly float Signature; - - public Departure(Entity subject, float2 position, float signature) - { - Subject = subject; - Position = position; - Signature = signature; - } -} - -// How much an observer holds of one subject, derived on read by Entity.ContactOf from its track, its reveals and -// the zone clock. Detected: tracked, or a reveal younger than GameplaySettings.BearingMemory. Tracked: exactly -// membership of VisibleEntities. Classified: detected, with any reveal in the book. Identified: the track has reached -// TargetGearInfoThreshold, and holds a hull belief: Profile, the hull class this observer believes the subject is (null -// below Identified; aetheria-ew, classify-from-belief; seen-through arrives with the judge). Bearing is the true -// bearing while tracked, else the freshest reveal's. -public readonly struct Contact -{ - public readonly bool Detected; - public readonly bool Tracked; - public readonly bool Classified; - public readonly bool Identified; - public readonly float2 Bearing; - public readonly float Info; - public readonly HullData Profile; - - public Contact(bool detected, bool tracked, bool classified, bool identified, float2 bearing, float info, HullData profile) - { - Profile = profile; - Detected = detected; - Tracked = tracked; - Classified = classified; - Identified = identified; - Bearing = bearing; - Info = info; - } -} diff --git a/Assets/Scripts/ServerShared/Sensing.cs.meta b/Assets/Scripts/ServerShared/Sensing.cs.meta deleted file mode 100644 index 0cffdf792..000000000 --- a/Assets/Scripts/ServerShared/Sensing.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: a3c91e5d7b2f4086b1d4e9f07c6a2358 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/ServerShared/Settings.cs b/Assets/Scripts/ServerShared/Settings.cs index 8326f76da..ff5980109 100644 --- a/Assets/Scripts/ServerShared/Settings.cs +++ b/Assets/Scripts/ServerShared/Settings.cs @@ -13,27 +13,26 @@ using static CultMath.math; [Serializable, MessagePackObject(keyAsPropertyName:true), JsonObject] public class PlanetSettings { + public float ZoneDepthExponent; + public float ZoneDepth; + public float ZoneBoundaryFog; + public ExponentialCurve GravityDepth; + public ExponentialCurve GravityRadius; + public ExponentialCurve WaveDepth; + public ExponentialCurve WaveRadius; + public ExponentialCurve WaveFrequency; + public ExponentialCurve WaveSpeed; public ExponentialCurve LightRadius; public ExponentialCurve BodyRadius; - - // The closest a child may orbit its parent, in u, by the parent's mass, and the Plummer softening of the parent's - // well (the steepest slope, 0.5 c / eps, sits at the Roche limit). Authored like BodyRadius, never per body. - public ExponentialCurve RocheLimit = new ExponentialCurve(); - - // A body's well strength by its mass (GravityField): c in u^2/s^2. The pull is c d / (d^2 + eps^2) inside a family and - // c(family mass) beyond it (WellTree); eps is the Roche limit. - public ExponentialCurve WellStrength = new ExponentialCurve(); - - // The one global exaggeration of gravity height: height = potential / K, in u/s^2 per unit of height. - public float HeightExaggeration = 1f; + public float AsteroidVerticalOffset = -5f; public ExponentialLerp AsteroidSize; public ExponentialLerp AsteroidHitpoints; public ExponentialLerp AsteroidRespawnTime; + public float GravityStrength; + public float MiningDifficulty = 500f; public float SecureAreaRadiusMultiplier = .45f; - - // The global flow stardust and nebula follow and the sim knows (FlowField). Zero flow by default. - public FlowSettings Flow = new FlowSettings(); + public ExponentialCurve OrbitPeriod; } [Serializable, MessagePackObject(keyAsPropertyName:true), JsonObject] @@ -44,6 +43,14 @@ public class GalaxyShapeSettings public float TwistExponent = 2; } +[Serializable, MessagePackObject(keyAsPropertyName:true), JsonObject] +public class NameGeneratorSettings +{ + public int NameGeneratorMinLength = 5; + public int NameGeneratorMaxLength = 10; + public int NameGeneratorOrder = 4; +} + [Serializable, MessagePackObject(keyAsPropertyName:true), JsonObject] public class SectorBackgroundSettings { @@ -83,8 +90,6 @@ public class SectorGenerationSettings { public float LinkDensity = .5f; public int ZoneCount = 128; - // Zones per resource province (Provinces.Partition): calibration, not a gate. - public int ProvinceZones = Provinces.DefaultZonesPerProvince; public int MegaCount; public int BossCount; } @@ -99,13 +104,12 @@ public class TutorialGenerationSettings public string QuestFaction; public float LinkDensity = .5f; public int ZoneCount = 32; - // Zones per resource province (Provinces.Partition): calibration, not a gate. - public int ProvinceZones = Provinces.DefaultZonesPerProvince; } [Serializable, MessagePackObject(keyAsPropertyName:true), JsonObject] public class ZoneGenerationSettings { + public ExponentialCurve PlanetSafetyRadius; public float MassFloor = 1; public float SunMass = 10000; @@ -130,20 +134,6 @@ public class ZoneGenerationSettings public ExponentialCurve AsteroidCount; public ExponentialLerp AsteroidRotationSpeed; - // Trojan swarms (ruling trojans-ride-host-period-with-stations): the chance a planet or gas giant with a body for a parent - // carries one, each swarm's length along the orbit (turns) and radial half-width (a fraction of the host's distance), and - // the rocks round each of L4 and L5 by host distance. 0 here: a settings object built in code draws none. - public float TrojanProbability = 0f; - public float TrojanArc = .07f; - public float TrojanHalfWidth = .06f; - public ExponentialCurve TrojanCount = new ExponentialCurve { Exponent = 1f, Multiplier = .04f, Constant = 8f }; - - // Laned belts (rulings lanes-two-sided-visual-margin, lane-narrow): the chance a belt candidate that kept its body and has - // room on both sides carries a laned belt, and the lane's half-width in the host's body radii (1.5 by ruling). LaneProbability - // is 0 here: a settings object built in code draws no lane. - public float LaneProbability = 0f; - public float LaneBodyRadii = 1.5f; - public float ResourceDensityMinimum = .1f; public float ResourceDensityMaximum = 1.5f; @@ -151,9 +141,6 @@ public class ZoneGenerationSettings public float SunSecondaryColorDistance = .25f; public float SunLightSaturation = .5f; public float SunFogTintSaturation = .5f; - // The green band no sun colour may take, as fractions of the hue circle (75 to 165 degrees: chartreuse through spring green). - public float SunHueExcludedStart = 75f / 360f; - public float SunHueExcludedEnd = 165f / 360f; public ExponentialLerp GasGiantBandCount; public float GasGiantBandColorSeparation = .25f; @@ -175,11 +162,6 @@ public class GameplaySettings public EntitySettings DefaultEntitySettings; public RarityTier[] Tiers; public ExponentialLerp QualityPriceModifier; - // What a station pays for goods, as a fraction of their price, scaled further by the item's condition. - public float SellFraction = .5f; - // What a station charges to restore worn gear, as a fraction of the price of the wear. - public float RepairFraction = .25f; - public int StartingCredits = 15000000; public float DurabilityQualityExponent = 2; public float DurabilityQualityMin = 2; public float DurabilityQualityMax = .25f; @@ -187,21 +169,6 @@ public class GameplaySettings public float ThermalQualityMin = 2; public float ThermalQualityMax = .25f; public float DefaultShutdownPerformance = .25f; - // Global flight tuning over every thruster's authored push (not its turning) and every hull's authored Drag. Push is a tenth, the - // ratio gravity fell by in the honest-wells cut (aetheria-gravity:field-strength-ruled, 5 to 0.5 u/s^2): most ships - // cannot climb straight out of a well and use orbits instead; an overspecced hull still can. - public float ThrustScale = .1f; - public float DragScale = 1f; - // Free-floating bodies (floating items, mines): drag on a launch velocity, drag on the force-driven drift, and - // how strongly the zone force accelerates it. - public float FloatingBodyDrag = .05f; - public float FloatingBodyLaunchDrag = .2f; - public float FloatingBodyGravity = 1f; - // Loot: the chance each equipped item (the hull excepted) drops when its carrier dies, the launch speed of a - // dropped item, and how many seconds a floating item lasts. - public float LootDropProbability = .25f; - public float LootDropVelocity = 25f; - public float FloatingItemLifetime = 30f; public float SevereHeatstrokeRiskThreshold = .25f; public float WormholeDepth = 1000; public float WormholeExitVelocity = 20; @@ -214,8 +181,6 @@ public class GameplaySettings public int WeaponGroupCount = 6; public float WarpDistance = 25; public float DockingDistance = 25; - // Units per second one pilot gives to a ship within DockingDistance; a commodity unit or one crafted item. - public float TransferRate = 2; public float ProductionPersonalityLerp = .05f; public float MessageDuration = 4f; public float TargetPersistenceDuration = 3; @@ -237,83 +202,20 @@ public class GameplaySettings public float LockIndicatorNoiseAmplitude = 50f; public ExponentialLerp LockIndicatorFrequency; public ExponentialLerp LockSpinSpeed; + public float TorqueFloor; public float TorqueMultiplier; + public float AetherTorqueMultiplier; + public float AetherHeatMultiplier; public float VisibilityDecay; - // Seconds a reveal's bearing keeps a ship Detected after its last act with no track (Entity.ContactOf). - public float BearingMemory = 6; public float TargetInfoDecay; public float TargetDetectionInfoThreshold; - // Also the Identified threshold: the track level at which a ship's hull class, and with it its layout, is known. + public float TargetArmorInfoThreshold; public float TargetGearInfoThreshold; public float ConvergenceMinimumDistance; - public float FiringArc = 120; - // Cut 2 (docs/fire-control-cut.md, Q4): what an entity with no working targeting system fires with -- - // the ceiling FireControl.Accuracy falls back to (Resolution 1, Precision 0 alongside it). Authored low - // on purpose ("really, really bad," operator 2026-09-19): .05 against the two catalog designs' own - // Accuracy ranges (the authoring spec this cut produces proposes .45-.6 for the 1-cell design and - // .65-.85 for the 2-cell one) leaves unaided fire capable of hitting something close, slow and - // unaware, and little else. One authored setting, easy to find and turn -- the operator rules the real - // figure in play. - public float UnaidedAccuracy = .05f; - // Cut 5 (docs/fire-control-cut.md, 5.1, Soul finding 3): the unaided fallback for Tracking, alongside - // UnaidedAccuracy above -- an entity with no working targeting system used to fall back to Tracking 0, - // which Commit turned into a hard wall (any nonzero deviation was an automatic miss). Ten world units of - // fire-time-projection deviation forgiveness is the first guess and the operator's knob, the same shape - // as UnaidedAccuracy: authored deliberately bad, not authored broken. - public float UnaidedTracking = 10f; - // Cut 6d (docs/fire-control-cut.md): the unaided fallback for Precision, alongside UnaidedAccuracy and - // UnaidedTracking above -- FireControl.Precision falls back to this the same way it already falls back to - // UnaidedAccuracy/UnaidedTracking. Precision is now a grouping tightness (FireControl.Sigma = 1/Precision, - // in hull-schematic cell units), not the old coin-flip probability, so the unaided floor has to be - // authored on that scale. .3 -> sigma 3.33 cells: against the live catalog's own hulls (Longinus 6x17, - // Zenith 12x12, Turret 8x8) that puts pOnHull at the hull's own centre of mass around .5-.84 -- broadly - // sprayed across the whole silhouette (sigma is a large fraction of the hull's own width) while still - // landing on the ship more often than not. A tighter floor (e.g. .1, sigma 10) was tried first and - // rejected: it drove pOnHull for the same hulls down to .08-.18, reading as "can't hit the broad side of a - // barn" rather than "sprays the silhouette." First guess, the same deliberately-bad shape as its two - // siblings; the operator rules the real figure in play. - public float UnaidedPrecision = .3f; public float AgentRangeExponent = .25f; public float AgentForwardLerp = .5f; public float AgentMaxForwardDistance = 50; - - // Cut 3 (docs/fire-control-cut.md): first guesses: the headless fixture is the tuning harness, the - // operator smoke is the arbiter (§ Risks). - // - // How long before impact a shot's outcome commits (R4). Deviation counts up to this horizon; after it - // the result is frozen and the rest of the flight is pure choreography. - public float CommitHorizon = .5f; - - // The window of fire control's solution: how far ahead a target's reach counts (Reach, Evasion) and the time - // constant of the manoeuvre track that observes it. A fire-control constant, not a weapon or missile stat. First - // guess; the operator rules the real figure in play. - public float SolutionWindow = .75f; - - // World units per hull-schematic cell, used only by FireControl.HitProbability's angular-size term - // (pSpread) to turn a hull's cell footprint into a real-world silhouette size at range. - public float SchematicCellSize = 2f; - - // Restitution of a hull striking a hull (Contacts.Step): the speed at which a pair separates along the contact - // normal is this times the speed at which it closed. 0 is perfectly inelastic, 1 perfectly elastic. - public float ContactRestitution = .5f; - - // Heights above the field of the ship plane, the orbital layer (stations, turrets: every OrbitalEntity) and the floater - // layer (loot, mines): orbitals above ships and floaters below them, so no ship ever touches either (ruling - // aetheria-gravity:orbitals-above-floaters-below). - public float ShipLayerHeight = 3f; - public float OrbitalLayerHeight = 15f; - public float FloaterLayerHeight = 0f; - - // The floor an AI's own predicted hit probability (FireControl.HitProbability) must clear before it counts - // a firing solution worth taking (Combat.cs, TurretController.cs). Player fire is gated on arc alone - // (Weapon.ArcAllowsFire, Q2) -- this threshold is an AI fire-discipline heuristic, not part of the roll. - public float AgentMinHitProbability = .2f; - - // Cut 4 (docs/fire-control-cut.md): how often a continuous weapon (ConstantWeapon) rolls a discrete - // outcome for Damage * this interval, through the same FireControl.Fire/Step pair a discrete shot uses -- - // a beam is a sequence of rolls, not a continuous truth. First guess; the headless fixture is the tuning - // harness, the operator smoke is the arbiter, same as Cut 3's other first guesses. - public float BeamResolveInterval = .25f; + public float AgentFiringMinDot = .99f; } [Serializable, MessagePackObject(keyAsPropertyName: true), JsonObject] @@ -322,4 +224,5 @@ public class RarityTier public string Name; public float Quality; public float3 Color; + public float Rarity; } \ No newline at end of file diff --git a/Assets/Scripts/ServerShared/Ship.cs b/Assets/Scripts/ServerShared/Ship.cs index 1266f5c90..0190f4f02 100644 --- a/Assets/Scripts/ServerShared/Ship.cs +++ b/Assets/Scripts/ServerShared/Ship.cs @@ -1,4 +1,4 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public +/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ @@ -9,6 +9,7 @@ using System.Linq; using System.Reflection; using MessagePack; using Newtonsoft.Json; +using UniRx; using CultMath; using static CultMath.math; using quaternion = CultMath.quaternion; @@ -16,8 +17,6 @@ using quaternion = CultMath.quaternion; [MessagePackObject] public class Ship : Entity { - public override float LayerHeight => ItemManager.GameplaySettings.ShipLayerHeight; - // [Key("bindings")] public Dictionary Bindings = new Dictionary(); //[IgnoreMember] public int HullHardpointCount; @@ -25,18 +24,19 @@ public class Ship : Entity // [IgnoreMember] public Dictionary Contacts = new Dictionary(); // [IgnoreMember] public Targetable Target; public Entity HomeEntity; - // The pilot-controlled hull fields. PilotApplier, in the zone step, is their pilot-side writer, from the command the - // pilot (player input or the ship's agent) gave the entity; no Unity script can set them. Runtime only, never packed. - public float2 MovementDirection { get; internal set; } - // The one facing command, -1..1, positive clockwise; a heading becomes a demand only through Steering.Toward. - public float Turn { get; internal set; } + public float2 MovementDirection; public bool IsPlayerShip; + private HashSet _thrusterItems; private Thruster[] _allThrusters; - // One column per thruster (its effect per unit throttle, in the body frame) and the throttles the allocator answers with. - private float3[] _columns; - private float[] _throttles; - private readonly ThrustAllocator _allocator = new ThrustAllocator(); + private HashSet _forwardThrusters; + private HashSet _reverseThrusters; + private HashSet _rightThrusters; + private HashSet _leftThrusters; + private HashSet _clockwiseThrusters; + private HashSet _counterClockwiseThrusters; + private HashSet _aetherDriveItems; + private HashSet _aetherDrives; private bool _exitingWormhole = false; private bool _enteringWormhole = false; @@ -47,6 +47,23 @@ public class Ship : Entity private float2 _wormholeExitVelocity; public bool WormholeAnimationInProgress => _enteringWormhole || _exitingWormhole; + public float ForwardThrust { get; private set; } + public float ReverseThrust { get; private set; } + public float LeftStrafeThrust { get; private set; } + public float RightStrafeThrust { get; private set; } + public float ClockwiseTorque { get; private set; } + public float CounterClockwiseTorque { get; private set; } + public float LeftStrafeTotalTorque { get; private set; } + private List LeftStrafeTorqueThrusters = new List(); + public float RightStrafeTotalTorque { get; private set; } + private List RightStrafeTorqueThrusters = new List(); + + public float TurnTime(float2 direction) + { + var angleDiff = Direction.Angle(normalize(direction)); + var clockwise = dot(direction, Direction.Rotate(ItemRotation.Clockwise)) > 0; + return angleDiff / ((clockwise ? ClockwiseTorque : CounterClockwiseTorque) / Mass); + } public event Action OnExitedWormhole; public event Action OnEnteredWormhole; @@ -64,7 +81,7 @@ public class Ship : Entity public void EnterWormhole(float2 wormholePosition) { - SetTarget(TargetRef.None); + Target.Value = null; _wormholeAnimationProgress = 0; _enteringWormhole = true; _wormholeEntryPosition = Position.xz; @@ -76,111 +93,218 @@ public class Ship : Entity { base.Activate(); + _aetherDrives = new HashSet(GetBehaviors()); + _aetherDriveItems = new HashSet(_aetherDrives.Select(x => x.Item)); + _allThrusters = GetBehaviors().ToArray(); - _columns = new float3[_allThrusters.Length]; - _throttles = new float[_allThrusters.Length]; + _thrusterItems = new HashSet(_allThrusters.Select(x=>x.Item)); + + _forwardThrusters = new HashSet(_allThrusters + .Where(x => x.Item.EquippableItem.Rotation == ItemRotation.Reversed)); + + _reverseThrusters = new HashSet(_allThrusters + .Where(x => x.Item.EquippableItem.Rotation == ItemRotation.None)); + + _rightThrusters = new HashSet(_allThrusters + .Where(x => x.Item.EquippableItem.Rotation == ItemRotation.CounterClockwise)); + + _leftThrusters = new HashSet(_allThrusters + .Where(x => x.Item.EquippableItem.Rotation == ItemRotation.Clockwise)); + + _counterClockwiseThrusters = new HashSet(_allThrusters + .Where(x => x.Torque < -ItemManager.GameplaySettings.TorqueFloor)); + + _clockwiseThrusters = new HashSet(_allThrusters + .Where(x => x.Torque > ItemManager.GameplaySettings.TorqueFloor)); } public Ship(ItemManager itemManager, Zone zone, EquippableItem hull, EntitySettings settings) : base(itemManager, zone, hull, settings) { + ItemDestroyed.Where(item=>_thrusterItems.Contains(item)).Subscribe(RemoveThruster); + ItemDestroyed.Where(item=>_aetherDriveItems.Contains(item)).Subscribe(RemoveAetherDrive); + } + + private void RemoveAetherDrive(EquippedItem item) + { + _aetherDriveItems.Remove(item); + _aetherDrives.Remove(item.GetBehavior()); + } + + private void RemoveThruster(EquippedItem item) + { + _thrusterItems.Remove(item); + var thruster = item.GetBehavior(); + if (_forwardThrusters.Contains(thruster)) _forwardThrusters.Remove(thruster); + if (_reverseThrusters.Contains(thruster)) _reverseThrusters.Remove(thruster); + if (_rightThrusters.Contains(thruster)) _rightThrusters.Remove(thruster); + if (_leftThrusters.Contains(thruster)) _leftThrusters.Remove(thruster); + if (_clockwiseThrusters.Contains(thruster)) _clockwiseThrusters.Remove(thruster); + if (_counterClockwiseThrusters.Contains(thruster)) _counterClockwiseThrusters.Remove(thruster); } #region ThrustCalculation - // What this ship can do at this instant (see ManoeuvreEnvelope): the box extremes of the thrusters' columns at their - // live thrust (zero when unpowered or not Active), because it reports what the ship can do now. The allocator solves - // with Column(NominalThrust), the full-grant column, because a column promises what a thruster does at a full grant - // and the allocator must not reshape its answer as the grant moves. Same geometry (Thruster.Column), different thrust. - // Derived each update, never saved. - public ManoeuvreEnvelope Envelope { get; private set; } - - private void RecalculateEnvelope() + private void RecalculateThrust() { - float forward = 0, back = 0, left = 0, right = 0, clockwise = 0, counterClockwise = 0; - foreach (var thruster in _allThrusters) + RecalculateForwardThrust(); + RecalculateReverseThrust(); + RecalculateLeftStrafeThrust(); + RecalculateRightStrafeThrust(); + RecalculateClockwiseTorque(); + RecalculateCounterClockwiseTorque(); + } + + private void RecalculateForwardThrust() + { + ForwardThrust = 0; + foreach (var thruster in _forwardThrusters) + if (thruster.Item.Active.Value) + ForwardThrust += thruster.Thrust; + + foreach (var drive in _aetherDrives) + if (drive.Item.Active.Value) + ForwardThrust += drive.Thrust.x; + } + + private void RecalculateReverseThrust() + { + ReverseThrust = 0; + foreach (var thruster in _reverseThrusters) + if (thruster.Item.Active.Value) + ReverseThrust += thruster.Thrust; + + foreach (var drive in _aetherDrives) + if (drive.Item.Active.Value) + ReverseThrust += drive.Thrust.x; + } + + private void RecalculateLeftStrafeThrust() + { + LeftStrafeThrust = 0; + LeftStrafeTotalTorque = 0; + foreach (var thruster in _leftThrusters) { - var column = thruster.Column(thruster.Item != null && thruster.Item.PowerSupply > 1e-4f ? thruster.Thrust : 0f); - forward += max(column.y, 0f); - back += max(-column.y, 0f); - left += max(-column.x, 0f); - right += max(column.x, 0f); - clockwise += max(column.z, 0f); - counterClockwise += max(-column.z, 0f); + if(thruster.Item.Active.Value) + { + LeftStrafeThrust += thruster.Thrust; + LeftStrafeTotalTorque += thruster.Torque * thruster.Thrust; + } } - Envelope = new ManoeuvreEnvelope(forward, back, left, right, clockwise, counterClockwise); + LeftStrafeTorqueThrusters.Clear(); + foreach(var thruster in _leftThrusters) + if (abs(sign(thruster.Torque) - sign(LeftStrafeTotalTorque)) < .01f) + LeftStrafeTorqueThrusters.Add(thruster); + + foreach (var drive in _aetherDrives) + if (drive.Item.Active.Value) + LeftStrafeThrust += drive.Thrust.y; + } + + private void RecalculateRightStrafeThrust() + { + RightStrafeThrust = 0; + RightStrafeTotalTorque = 0; + foreach (var thruster in _rightThrusters) + { + if(thruster.Item.Active.Value) + { + RightStrafeThrust += thruster.Thrust; + RightStrafeTotalTorque += thruster.Torque * thruster.Thrust; + } + } + RightStrafeTorqueThrusters.Clear(); + foreach(var thruster in _rightThrusters) + if (abs(sign(thruster.Torque) - sign(RightStrafeTotalTorque)) < .01f) + RightStrafeTorqueThrusters.Add(thruster); + + foreach (var drive in _aetherDrives) + if (drive.Item.Active.Value) + RightStrafeThrust += drive.Thrust.y; + } + + private void RecalculateClockwiseTorque() + { + ClockwiseTorque = 0; + foreach (var thruster in _clockwiseThrusters) + if (thruster.Item.Active.Value) + ClockwiseTorque += thruster.Torque; + + foreach (var drive in _aetherDrives) + if (drive.Item.Active.Value) + ClockwiseTorque += drive.Thrust.z; + } + + private void RecalculateCounterClockwiseTorque() + { + CounterClockwiseTorque = 0; + foreach (var thruster in _counterClockwiseThrusters) + if (thruster.Item.Active.Value) + CounterClockwiseTorque -= thruster.Torque; + + foreach (var drive in _aetherDrives) + if (drive.Item.Active.Value) + CounterClockwiseTorque += drive.Thrust.z; } #endregion - // The player's turn axis as a fraction of the hull's yaw extreme, banded so each thruster joins over an equal share of - // the input. The allocator serves a turn by the thrusters with the least translation per unit of yaw first and brings in - // the next as they saturate; here the thrusters yawing the asked way are ranked by that ratio, equal ratios form one band, - // and band i fills over input [i/k, (i+1)/k]. A hull whose best-ratio thrusters hold a small share of its yaw then gets - // half the travel of a two-band turn before its drives join, instead of the first tenth. Full input is still full yaw. - public float BandedTurn(float axis) - { - axis = clamp(axis, -1f, 1f); - if (axis == 0 || _allThrusters == null) return axis; - var direction = axis > 0 ? 1f : -1f; - var thrusters = new List<(float ratio, float yaw)>(); - var total = 0f; - foreach (var thruster in _allThrusters) - { - var column = thruster.Column(thruster.NominalThrust); - var yaw = column.z * direction; - if (!(yaw > 0)) continue; - thrusters.Add((length(float2(column.x, column.y)) / yaw, yaw)); - total += yaw; - } - if (!(total > 0)) return axis; - thrusters.Sort((a, b) => a.ratio.CompareTo(b.ratio)); - var bands = new List(); - var bandRatio = float.NaN; - foreach (var (ratio, yaw) in thrusters) - { - if (bands.Count > 0 && abs(ratio - bandRatio) <= .02f * max(bandRatio, 1e-6f)) bands[bands.Count - 1] += yaw; - else { bands.Add(yaw); bandRatio = ratio; } - } - var travel = abs(axis) * bands.Count; - var band = min((int)travel, bands.Count - 1); - var served = 0f; - for (var i = 0; i < band; i++) served += bands[i]; - served += (travel - band) * bands[band]; - return direction * min(served / total, 1f); - } - - // Called by Entity.Update once the items' performance is current and before the power bus is stepped and the items - // execute: liveness, thrust and the throttles they decide are one phase, the one Execute acts on. The lock is a - // bound on the allocator's solve; intent reaches the allocator here and nowhere else. - protected override void UpdateThrottles() - { - if (_exitingWormhole || _enteringWormhole) return; - RecalculateEnvelope(); - for (var i = 0; i < _allThrusters.Length; i++) - _columns[i] = _allThrusters[i].Column(_allThrusters[i].NominalThrust); - _allocator.Allocate(_columns, MovementDirection, Turn, _throttles, ThrottleLocked); - for (var i = 0; i < _allThrusters.Length; i++) _allThrusters[i].Axis = _throttles[i]; - } - public override void Update(float delta) { - // No drag below top speed: ships coast and orbits do not decay; drag bleeds off only the excess over the hull's top - // speed (aetheria-gravity:ruling:no-drag-below-top-speed). The VelocityLimit clamp still caps it, so the excess is - // what this step's forces added; a soft cap, where surfing the beat is a temporary boost, is the ruling's other half. - // A docked ship has no flight of its own: its parent owns its pose (Entity.Update). - if (Parent == null) + if (_active && !_exitingWormhole && !_enteringWormhole) { - var velocityMagnitude = length(Velocity); - var topSpeed = float.PositiveInfinity; - foreach (var limit in GetBehaviors()) topSpeed = min(topSpeed, limit.Limit); - if (velocityMagnitude > topSpeed) - Velocity = normalize(Velocity) * (topSpeed + decay(velocityMagnitude - topSpeed, HullData.Drag * ItemManager.GameplaySettings.DragScale, delta)); + RecalculateThrust(); + foreach (var thruster in _allThrusters) thruster.Axis = 0; + var rightThrusterTorqueCompensation = abs(RightStrafeTotalTorque) / RightStrafeTorqueThrusters.Count; + foreach (var thruster in _rightThrusters) + { + var thrust = 0f; + thrust += MovementDirection.x; + if (RightStrafeTorqueThrusters.Contains(thruster)) + thrust -= MovementDirection.x * (rightThrusterTorqueCompensation / (abs(thruster.Torque) * thruster.Thrust)); + thruster.Axis = thrust; + } + var leftThrusterTorqueCompensation = abs(LeftStrafeTotalTorque) / LeftStrafeTorqueThrusters.Count; + foreach (var thruster in _leftThrusters) + { + var thrust = 0f; + thrust += -MovementDirection.x; + if (LeftStrafeTorqueThrusters.Contains(thruster)) + thrust += MovementDirection.x * (leftThrusterTorqueCompensation / (abs(thruster.Torque) * thruster.Thrust)); + thruster.Axis = thrust; + } + foreach (var thruster in _forwardThrusters) thruster.Axis += MovementDirection.y; + foreach (var thruster in _reverseThrusters) thruster.Axis += -MovementDirection.y; - Position.xz += Velocity * delta; + var look = normalize(LookDirection.xz); + var deltaRot = dot(look, normalize(Direction).Rotate(ItemRotation.Clockwise)); + if (abs(deltaRot) < .01f) + { + deltaRot = 0; + Direction = lerp(Direction, look, min(delta, 1)); + } + deltaRot = pow(abs(deltaRot), .5f) * sign(deltaRot); + + foreach (var thruster in _clockwiseThrusters) thruster.Axis += deltaRot; + foreach (var thruster in _counterClockwiseThrusters) thruster.Axis += -deltaRot; - Velocity += Zone.GetForce(Position.xz) * delta; + foreach (var drive in _aetherDrives) + drive.Axis = float3(MovementDirection.y, MovementDirection.x, deltaRot); } + + var velocityMagnitude = length(Velocity); + if(velocityMagnitude > .01f) + Velocity = normalize(Velocity) * decay(velocityMagnitude, HullData.Drag, delta); + + Position.xz += Velocity * delta; + var normal = Zone.GetNormal(Position.xz); + var force = new float2(normal.x, normal.z); + var forceMagnitude = lengthsq(force); + if (forceMagnitude > .001f) + { + var fa = 1 / (1 - forceMagnitude) - 1; + Velocity += normalize(force) * Zone.Settings.GravityStrength * fa; + } var shipRight = Direction.Rotate(ItemRotation.Clockwise); var forward = cross(float3(shipRight.x, 0, shipRight.y), normal); Rotation = quaternion.LookRotation(forward, normal); diff --git a/Assets/Scripts/ServerShared/ShipAuthoring.cs b/Assets/Scripts/ServerShared/ShipAuthoring.cs deleted file mode 100644 index 3962fa468..000000000 --- a/Assets/Scripts/ServerShared/ShipAuthoring.cs +++ /dev/null @@ -1,536 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Reflection; -using GameCult.Caching; -using GameCult.Caching.MessagePack; -using MessagePack; - -// A mod ship's visual package: model, anchors, schematic lines. The hull semantics (cells, hardpoints, stats) live in -// the ship's own HullData record beside this one, and HullData.Visual is the only binding between the two. -[CultDocument("aetheria.ship_authoring", "1"), MessagePackObject] -public sealed class ShipAuthoring -{ - [CultName, Key(0)] public string Id; - // Key 1 held the embedded HullData until S1; it is retired and never reused. - [Key(2)] public string ModelAsset; - [Key(3)] public List Anchors = new List(); - [Key(4)] public List SchematicLines = new List(); - // The moving parts of the rig, presentation only (ruling rig-is-presentation): no joint value feeds the simulation. - [Key(5)] public List Joints = new List(); -} - -// A rig joint: a bone of the model's armature. Axes are three floats per degree of freedom, a unit vector in Ship Root -// space at rest (glTF axes, +Y up); Min and Max are that degree of freedom's limits in degrees. -[MessagePackObject] -public sealed class ShipJoint -{ - // The bone's aetheria.id, which is also its GLB node id. - [Key(0)] public string Id; - // The nearest joint above this one in the model, or null for a root joint. - [Key(1)] public string Parent; - [Key(2)] public float[] Axes; - [Key(3)] public float[] Min; - [Key(4)] public float[] Max; -} - -[MessagePackObject] -public sealed class ShipAnchor -{ - // Stable semantic identity. HullData.Hardpoints[].Transform names this ID for mounts. - [Key(0)] public string Id; - // One of: map-icon, hull-collider, shield, tractor, thruster-emitter, weapon-mount, - // weapon-muzzle, or radiator-mesh. - [Key(1)] public string Role; - // Stable node ID in the compiled model, never a Blender display name. - [Key(2)] public string ModelNodeId; - // Only child roles use ParentId; e.g. a muzzle names its weapon hardpoint. - [Key(3)] public string ParentId; - [Key(4)] public int Order; - // On a weapon-mount anchor: the id of the nearest joint above its node in the model; null or empty is a fixed mount. - [Key(5)] public string Joint; -} - -// Evaluated or baked Grease Pencil stroke coordinates in Blender's right-handed Z-up -// space. The runtime renderer owns its coordinate conversion and camera projection. -[MessagePackObject] -public sealed class ShipPolyline -{ - [Key(0)] public string Layer; - [Key(1)] public string Material; - [Key(2)] public float[] Points; - [Key(3)] public float[] Radii; - [Key(4)] public float[] Opacities; - [Key(5)] public bool Cyclic; - [Key(6)] public float[] Color; -} - -public static class ShipAuthoringStore -{ - // ShipAnchor.Role's vocabulary. - private static readonly HashSet Roles = new HashSet(StringComparer.Ordinal) - { - "map-icon", "hull-collider", "shield", "tractor", "thruster-emitter", "weapon-mount", "weapon-muzzle", "radiator-mesh" - }; - - // The anchor role a visible hardpoint's mount plays, or null for an internal hardpoint, which has no anchor. - private static string MountRole(HardpointType type) => - type == HardpointType.Thruster ? "thruster-emitter" : - type == HardpointType.Radiator ? "radiator-mesh" : - IsWeapon(type) ? "weapon-mount" : null; - - public static bool IsWeapon(HardpointType type) => - type == HardpointType.Energy || type == HardpointType.Ballistic || type == HardpointType.Launcher; - - public static CultCache Open(string path, bool writable = false) - { - var cache = new CultCache(); - try - { - cache.AddBackingStore(new SingleFileMessagePackBackingStore(path, !writable), new[] { typeof(HullData), typeof(ShipAuthoring), typeof(FactionProductData) }); - return cache; - } - catch - { - cache.Dispose(); - throw; - } - } - - // Writes one ship's two records under their deterministic keys, the shape Load expects. - public static void Write(CultCache cache, HullData hull, ShipAuthoring visual) - { - cache.UpsertAsync(typeof(HullData), hull, ShipModCatalog.HullKey(visual.Id)).GetAwaiter().GetResult(); - cache.UpsertAsync(typeof(ShipAuthoring), visual, ShipModCatalog.AuthoringKey(visual.Id)).GetAwaiter().GetResult(); - } - - // A package's product by one maker. These two are the only product writers; the key is the ship and the maker, so a - // maker has at most one product of the hull and writing again replaces it. - public static void WriteProduct(CultCache cache, string shipId, FactionProductData product) => - cache.UpsertAsync(typeof(FactionProductData), product, ShipModCatalog.ProductKey(shipId, product.Manufacturer.Key)).GetAwaiter().GetResult(); - - public static bool DeleteProduct(CultCache cache, string shipId, CultRecordKey maker) => - cache.Remove(ShipModCatalog.ProductKey(shipId, maker)); - - // A new mod hull that flies like a shipped one. Every member of the reference is copied through the type's own - // MessagePack round trip, so a member added to HullData later is copied too; then the six that are the shipped ship's - // own body and layout are reset: Name, Shape (one occupied cell, so the record loads), Hardpoints, Prefab, Schematic, - // and Visual, which names this mod's visual record. - public static HullData HullLike(HullData reference, string name, string shipId) - { - var options = CultDocumentMessagePackSerialization.OptionsFor(typeof(HullData).Assembly); - var hull = MessagePackSerializer.Deserialize(MessagePackSerializer.Serialize(reference, options), options); - hull.Name = name; - hull.Shape = new Shape(); - hull.Hardpoints = new List(); - hull.Prefab = null; - hull.Schematic = null; - hull.Visual = new CultRecordRef(ShipModCatalog.AuthoringKey(shipId)); - return hull; - } - - // The structure of a ship file, without judging its content (drafts load): exactly one hull and one visual, each at - // its deterministic key, the hull naming that visual by its typed ref, and the hull's products, each at its maker's key. - public static (HullData Hull, ShipAuthoring Visual, FactionProductData[] Products) Load(string path) - { - RefuseLegacyEmbeddedHull(path); - try { return LoadRecords(path); } - catch (Exception error) when (error is InvalidDataException or MessagePackSerializationException) - { - throw new InvalidOperationException($"{path}: a record does not decode as its schema: {error.Message}", error); - } - catch (NotSupportedException error) - { - throw new InvalidOperationException($"{path}: not a readable ship file: {error.Message}", error); - } - } - - // Key 1 of ShipAuthoring held the whole hull before S1. The type no longer has that member, so a deserialized record - // shows nothing of it, and a file that still carries one would load as a ship silently ignoring its old hull. The - // raw payload is the only place the old shape is visible. - private static void RefuseLegacyEmbeddedHull(string path) - { - if (!File.Exists(path)) return; - var bytes = File.ReadAllBytes(path); - if (bytes.Length == 0) return; - CultPersistedStoreSnapshot snapshot; - try { snapshot = CultDocumentMessagePackSerialization.DeserializeSnapshot(bytes); } - catch (Exception error) when (error is MessagePackSerializationException or NotSupportedException) - { - throw new InvalidOperationException($"{path}: not a readable ship file: {error.Message}", error); - } - var schema = typeof(ShipAuthoring).GetCustomAttribute().SchemaName; - foreach (var record in snapshot.Records) - { - if (snapshot.SchemaCatalog.FirstOrDefault(entry => entry.SchemaId == record.SchemaId)?.SchemaName != schema) continue; - var reader = new MessagePackReader(record.Payload); - if (reader.NextMessagePackType != MessagePackType.Array) continue; - var slots = reader.ReadArrayHeader(); - for (var slot = 0; slot < slots; slot++) - { - if (slot == RetiredHullKey && !reader.TryReadNil()) - throw new InvalidOperationException($"{path}: {record.Key}: legacy embedded hull at retired key {RetiredHullKey} of the ship authoring record. " + - $"Migrate it: write the hull as its own hull record at mod-hull: naming the visual, and rewrite the ship authoring record without key {RetiredHullKey}."); - if (slot != RetiredHullKey) reader.Skip(); - } - } - } - - private const int RetiredHullKey = 1; - - private static (HullData Hull, ShipAuthoring Visual, FactionProductData[] Products) LoadRecords(string path) - { - using var cache = Open(path); - var hulls = cache.GetAll().ToArray(); - var visuals = cache.GetAll().ToArray(); - if (visuals.Length != 1) - throw new InvalidOperationException($"{path} must hold exactly one ship authoring record, found {visuals.Length}."); - if (hulls.Length != 1) - throw new InvalidOperationException($"{path} must hold exactly one hull record, found {hulls.Length}."); - var (hull, visual) = (hulls[0], visuals[0]); - if (!cache.TryGetHandle(hull).Value.Key.Equals(ShipModCatalog.HullKey(visual.Id)) || - !cache.TryGetHandle(visual).Value.Key.Equals(ShipModCatalog.AuthoringKey(visual.Id))) - throw new InvalidOperationException($"{path}: {visual.Id}: records must be stored under {ShipModCatalog.HullKey(visual.Id).Value} and {ShipModCatalog.AuthoringKey(visual.Id).Value}."); - var products = cache.GetAll().ToArray(); - foreach (var product in products) - { - if (!product.Manufacturer.IsSet() || ShipModCatalog.IsModKey(product.Manufacturer.Key)) - throw new InvalidOperationException($"{path}: {visual.Id}: a product needs a manufacturer that is a shipped faction."); - var productKey = ShipModCatalog.ProductKey(visual.Id, product.Manufacturer.Key); - if (!cache.TryGetHandle(product).Value.Key.Equals(productKey)) - throw new InvalidOperationException($"{path}: {visual.Id}: a product must be stored at {productKey.Value}."); - if (!product.Design.IsSet() || !product.Design.Key.Equals(ShipModCatalog.HullKey(visual.Id))) - throw new InvalidOperationException($"{path}: {visual.Id}: a product must name the package hull {ShipModCatalog.HullKey(visual.Id).Value} as its design."); - } - return (hull, visual, products); - } - - public static (HullData Hull, ShipAuthoring Visual, FactionProductData[] Products) Read(string path) - { - var (hull, visual, products) = Load(path); - ValidateLoaded(hull, visual, products); - return (hull, visual, products); - } - - // Every judgement a loaded package's records face, in one place: Read, and validate on a draft with no model yet, call it. - public static void ValidateLoaded(HullData hull, ShipAuthoring visual, FactionProductData[] products) - { - Validate(hull, visual); - ValidateProducts(hull, visual, products); - } - - // What a package may sell: every product named, no name twice, and a price above 0, because generation skips price 0. - private static void ValidateProducts(HullData hull, ShipAuthoring visual, FactionProductData[] products) - { - if (products.Length == 0) return; - if (products.Any(product => string.IsNullOrWhiteSpace(product.Name))) - throw new InvalidOperationException($"{visual.Id}: every product needs a name."); - if (products.Select(product => product.Name).Distinct(StringComparer.Ordinal).Count() != products.Length) - throw new InvalidOperationException($"{visual.Id}: product names must be unique within the package."); - if (hull.Price <= 0) - throw new InvalidOperationException($"{visual.Id}: a hull with products needs a price above 0 (generation skips price 0)."); - } - - // A hull names one body: a Unity prefab (shipped hulls) or a ShipAuthoring record (mod ships), never both, so no - // consumer needs a precedence rule. A whitespace-only Prefab is unset. Every path that validates or composes hulls - // calls this. - public static void RequireOneBody(HullData hull, string label) - { - if (!string.IsNullOrWhiteSpace(hull.Prefab) && hull.Visual.IsSet()) - throw new InvalidOperationException($"{label}: a hull names one body, but this one names both a Unity prefab and a visual record."); - } - - // The one ship-ID rule, shared by Validate and ship-authoring create. The ID becomes a folder name on every platform, so - // Windows device names (alone or before a dot) and a trailing dot are refused too. The messages name the rule, never the value. - public static void RequireShipId(string id) - { - if (string.IsNullOrWhiteSpace(id)) throw new InvalidOperationException("Ship ID is required."); - if (!(id[0] >= 'a' && id[0] <= 'z' || id[0] >= '0' && id[0] <= '9') || id.Any(c => - !(c >= 'a' && c <= 'z' || c >= '0' && c <= '9' || c == '.' || c == '_' || c == '-'))) - throw new InvalidOperationException("Ship ID must use lower-case ASCII letters, digits, dots, underscores, or hyphens."); - if (id[id.Length - 1] == '.') throw new InvalidOperationException("Ship ID must not end with a dot."); - var stem = id.Split('.')[0]; - if (stem is "con" or "prn" or "aux" or "nul" - || stem.Length == 4 && (stem.StartsWith("com") || stem.StartsWith("lpt")) && stem[3] >= '1' && stem[3] <= '9') - throw new InvalidOperationException("Ship ID must not be a Windows device name."); - } - - // The one semantic check every path shares: the hull and its visual, judged together. - public static void Validate(HullData hull, ShipAuthoring ship) - { - if (ship == null) throw new InvalidOperationException("Ship authoring record is null."); - RequireShipId(ship.Id); - if (hull == null) throw new InvalidOperationException($"{ship.Id}: hull data is required."); - if (string.IsNullOrWhiteSpace(hull.Name)) throw new InvalidOperationException($"{ship.Id}: hull name is required."); - if (hull.Shape?.Cells == null || !hull.Shape.Cells.Cast().Any(occupied => occupied)) - throw new InvalidOperationException($"{ship.Id}: schematic must contain at least one cell."); - RequireOneBody(hull, ship.Id); - if (hull.HullType == HullType.Ship && !(hull.Behaviors ?? new List()).Any(behavior => behavior is VelocityLimitData)) - throw new InvalidOperationException($"{ship.Id}: a ship hull needs a top speed (VelocityLimit)."); - if (!hull.Visual.Key.Equals(ShipModCatalog.AuthoringKey(ship.Id))) - throw new InvalidOperationException($"{ship.Id}: the hull must name its visual record {ShipModCatalog.AuthoringKey(ship.Id).Value}."); - if (string.IsNullOrWhiteSpace(ship.ModelAsset) || Path.IsPathRooted(ship.ModelAsset) || - ship.ModelAsset.Replace('\\', '/').Split('/').Any(part => part == "..")) - throw new InvalidOperationException($"{ship.Id}: model asset must be a relative package path."); - - var anchors = ship.Anchors ?? throw new InvalidOperationException($"{ship.Id}: anchors are required."); - var ids = new HashSet(StringComparer.Ordinal); - var nodeIds = new HashSet(StringComparer.Ordinal); - foreach (var anchor in anchors) - { - if (anchor == null || string.IsNullOrWhiteSpace(anchor.Id) || !ids.Add(anchor.Id)) - throw new InvalidOperationException($"{ship.Id}: anchor IDs must be present and unique."); - if (string.IsNullOrWhiteSpace(anchor.ModelNodeId)) - throw new InvalidOperationException($"{ship.Id}: anchor {anchor.Id} needs a model node ID."); - if (!nodeIds.Add(anchor.ModelNodeId)) - throw new InvalidOperationException($"{ship.Id}: model node {anchor.ModelNodeId} is claimed by more than one anchor."); - } - foreach (var anchor in anchors) - if (!Roles.Contains(anchor.Role)) - throw new InvalidOperationException($"{ship.Id}: anchor {anchor.Id} has unknown role '{anchor.Role}'."); - foreach (var role in new[] { "map-icon", "hull-collider", "shield", "tractor" }) - if (anchors.Count(anchor => anchor.Role == role) != 1) - throw new InvalidOperationException($"{ship.Id}: exactly one {role} anchor is required."); - - var mounts = new Dictionary(StringComparer.Ordinal); - var occupiedHardpointCells = new HashSet<(int x, int y)>(); - foreach (var hardpoint in hull.Hardpoints ?? new List()) - { - if (hardpoint == null || string.IsNullOrWhiteSpace(hardpoint.Transform) || mounts.ContainsKey(hardpoint.Transform)) - throw new InvalidOperationException($"{ship.Id}: hardpoint IDs must be present and unique."); - mounts.Add(hardpoint.Transform, hardpoint); - if (!Enum.IsDefined(typeof(HardpointType), hardpoint.Type)) - throw new InvalidOperationException($"{ship.Id}: hardpoint {hardpoint.Transform} has an unknown type {(int)hardpoint.Type}."); - if (!Enum.IsDefined(typeof(ItemRotation), hardpoint.Rotation)) - throw new InvalidOperationException($"{ship.Id}: hardpoint {hardpoint.Transform} has an unknown rotation {(int)hardpoint.Rotation}."); - if (!float.IsFinite(hardpoint.Armor) || hardpoint.Armor < 0 || !float.IsFinite(hardpoint.FiringArc) || hardpoint.FiringArc < 0) - throw new InvalidOperationException($"{ship.Id}: hardpoint {hardpoint.Transform} armor and firing arc must be finite and not negative."); - // A thruster's gimbal range is the judge's alone, a row of one included: no thruster swings further than a turn. - if (hardpoint.Type == HardpointType.Thruster && hardpoint.FiringArc > 360f) - throw new InvalidOperationException($"{ship.Id}: thruster hardpoint {hardpoint.Transform} firing arc may be at most 360 degrees."); - if (!string.IsNullOrEmpty(hardpoint.Row) && hardpoint.Type != HardpointType.Thruster) - throw new InvalidOperationException($"{ship.Id}: hardpoint {hardpoint.Transform} is a {hardpoint.Type} hardpoint, and only a Thruster hardpoint may state a row."); - if (hardpoint.Shape?.Cells == null || !hardpoint.Shape.Cells.Cast().Any(occupied => occupied)) - throw new InvalidOperationException($"{ship.Id}: hardpoint {hardpoint.Transform} has no cells."); - for (var cellX = 0; cellX < hardpoint.Shape.Width; cellX++) - for (var cellY = 0; cellY < hardpoint.Shape.Height; cellY++) - { - if (!hardpoint.Shape.Cells[cellX, cellY]) continue; - var x = hardpoint.Position.x + cellX; - var y = hardpoint.Position.y + cellY; - if (x < 0 || y < 0 || x >= hull.Shape.Width || y >= hull.Shape.Height || !hull.Shape.Cells[x, y]) - throw new InvalidOperationException($"{ship.Id}: hardpoint {hardpoint.Transform} lies outside the hull schematic."); - if (!occupiedHardpointCells.Add((x, y))) - throw new InvalidOperationException($"{ship.Id}: hardpoint {hardpoint.Transform} overlaps another hardpoint."); - } - // Only a hardpoint that shows on the model has a mount anchor, and its type fixes the role that anchor plays. - var mountAnchor = anchors.FirstOrDefault(anchor => anchor.Id == hardpoint.Transform); - var mountRole = MountRole(hardpoint.Type); - if (mountRole == null && mountAnchor != null) - throw new InvalidOperationException($"{ship.Id}: {hardpoint.Type} hardpoint {hardpoint.Transform} is internal, so no anchor may take its id."); - if (mountRole != null && mountAnchor == null) - throw new InvalidOperationException($"{ship.Id}: {hardpoint.Type} hardpoint {hardpoint.Transform} has no model anchor."); - if (mountRole != null && mountAnchor.Role != mountRole) - throw new InvalidOperationException($"{ship.Id}: {hardpoint.Type} hardpoint {hardpoint.Transform} needs a {mountRole} anchor of that id."); - } - foreach (var row in mounts.Values.Where(hardpoint => hardpoint.Type == HardpointType.Thruster && !string.IsNullOrEmpty(hardpoint.Row)) - .GroupBy(hardpoint => hardpoint.Row, StringComparer.Ordinal)) - { - var lead = row.First(); - foreach (var hardpoint in row) - if (hardpoint.Rotation != lead.Rotation || hardpoint.FiringArc != lead.FiringArc) - throw new InvalidOperationException($"{ship.Id}: thruster hardpoints {lead.Transform} and {hardpoint.Transform} are in row {row.Key} and must share Rotation and FiringArc."); - if (!(lead.FiringArc > 0f)) - throw new InvalidOperationException($"{ship.Id}: thruster row {row.Key} must state a gimbal FiringArc above 0."); - } - foreach (var anchor in anchors) - { - if (!string.IsNullOrEmpty(anchor.ParentId) && !mounts.ContainsKey(anchor.ParentId)) - throw new InvalidOperationException($"{ship.Id}: anchor {anchor.Id} has unknown hardpoint parent {anchor.ParentId}."); - // A mount-role anchor is the mount of a hardpoint of its type, never a loose node. The hardpoint loop above has - // already refused one whose id names a hardpoint of another type, so here it only has to name a hardpoint. - if ((RigChains.Actuates(anchor.Role) || anchor.Role == "radiator-mesh") && !mounts.ContainsKey(anchor.Id)) - throw new InvalidOperationException($"{ship.Id}: {anchor.Role} anchor {anchor.Id} must be the mount of a hardpoint of its type."); - if (anchor.Role == "weapon-muzzle" && - (string.IsNullOrEmpty(anchor.ParentId) || !IsWeapon(mounts[anchor.ParentId].Type))) - throw new InvalidOperationException($"{ship.Id}: muzzle {anchor.Id} must be parented to a weapon hardpoint's mount."); - } - foreach (var hardpoint in mounts.Values.Where(hardpoint => IsWeapon(hardpoint.Type))) - if (!anchors.Any(anchor => anchor.Role == "weapon-muzzle" && anchor.ParentId == hardpoint.Transform)) - throw new InvalidOperationException($"{ship.Id}: weapon hardpoint {hardpoint.Transform} needs at least one muzzle anchor."); - ValidateRig(ship, anchors, mounts, nodeIds); - - foreach (var line in ship.SchematicLines ?? new List()) - { - var points = line?.Points; - if (points == null || points.Length < 6 || points.Length % 3 != 0 || - points.Any(value => float.IsNaN(value) || float.IsInfinity(value))) - throw new InvalidOperationException($"{ship.Id}: schematic line needs finite XYZ points."); - var count = points.Length / 3; - if (line.Radii != null && line.Radii.Length != count || - line.Opacities != null && line.Opacities.Length != count) - throw new InvalidOperationException($"{ship.Id}: schematic line point attributes have the wrong length."); - if (line.Radii != null && line.Radii.Any(value => float.IsNaN(value) || float.IsInfinity(value) || value < 0) || - line.Opacities != null && line.Opacities.Any(value => float.IsNaN(value) || value < 0 || value > 1)) - throw new InvalidOperationException($"{ship.Id}: schematic line radius and opacity must be finite and in range."); - if (line.Color != null && (line.Color.Length != 4 || - line.Color.Any(value => float.IsNaN(value) || float.IsInfinity(value)))) - throw new InvalidOperationException($"{ship.Id}: schematic line color must be finite RGBA."); - } - } - - // A degree of freedom counts as yaw when its axis lies within 5 degrees of Ship Root up (glTF +Y). - private static readonly float YawAxisCos = MathF.Cos(5f * MathF.PI / 180f); - - // The joints, which anchors ride them, and whether each driven joint's chain can sweep the arc its guns state. The - // joints are presentation, so this judges only that the rig could point the gun where the hardpoint says it may fire. - private static void ValidateRig(ShipAuthoring ship, List anchors, Dictionary mounts, HashSet nodeIds) - { - var joints = ship.Joints ?? new List(); - var byId = new Dictionary(StringComparer.Ordinal); - foreach (var joint in joints) - { - if (joint == null || string.IsNullOrWhiteSpace(joint.Id) || byId.ContainsKey(joint.Id)) - throw new InvalidOperationException($"{ship.Id}: joint IDs must be present and unique."); - if (nodeIds.Contains(joint.Id)) - throw new InvalidOperationException($"{ship.Id}: joint {joint.Id} is also an anchor's model node."); - byId.Add(joint.Id, joint); - } - foreach (var joint in joints) - { - var dofs = joint.Min?.Length ?? 0; - if (dofs < 1 || joint.Max?.Length != dofs || joint.Axes?.Length != 3 * dofs) - throw new InvalidOperationException($"{ship.Id}: joint {joint.Id} needs one or more degrees of freedom: Axes holds three values each, Min and Max one each."); - for (var dof = 0; dof < dofs; dof++) - { - var (x, y, z) = (joint.Axes[3 * dof], joint.Axes[3 * dof + 1], joint.Axes[3 * dof + 2]); - var (min, max) = (joint.Min[dof], joint.Max[dof]); - if (!float.IsFinite(x) || !float.IsFinite(y) || !float.IsFinite(z) || !float.IsFinite(min) || !float.IsFinite(max)) - throw new InvalidOperationException($"{ship.Id}: joint {joint.Id} axes and limits must be finite."); - if (MathF.Abs(MathF.Sqrt(x * x + y * y + z * z) - 1f) > 1e-3f) - throw new InvalidOperationException($"{ship.Id}: joint {joint.Id} axis {dof} must be a unit vector."); - if (min < -180f || max > 180f || min > max) - throw new InvalidOperationException($"{ship.Id}: joint {joint.Id} limits {dof} must satisfy -180 <= Min <= Max <= 180."); - } - if (!string.IsNullOrEmpty(joint.Parent) && !byId.ContainsKey(joint.Parent)) - throw new InvalidOperationException($"{ship.Id}: joint {joint.Id} has an unknown parent joint."); - } - foreach (var joint in joints) - { - var step = joint; - for (var depth = 0; !string.IsNullOrEmpty(step.Parent); depth++) - { - if (depth >= joints.Count) - throw new InvalidOperationException($"{ship.Id}: joint {joint.Id} is on a parent cycle."); - step = byId[step.Parent]; - } - } - - foreach (var anchor in anchors.Where(anchor => !string.IsNullOrEmpty(anchor.Joint))) - { - if (anchor.Role == "radiator-mesh") - throw new InvalidOperationException($"{ship.Id}: {anchor.Role} anchor {anchor.Id} may not ride a joint."); - if (!RigChains.Actuates(anchor.Role)) - throw new InvalidOperationException($"{ship.Id}: {anchor.Role} anchor {anchor.Id} may not name a joint; only a weapon mount or a thruster emitter rides one."); - if (!byId.ContainsKey(anchor.Joint)) - throw new InvalidOperationException($"{ship.Id}: {anchor.Role} anchor {anchor.Id} names an unknown joint."); - } - - // A joint has one actuator (ruling one-joint-one-actuator), and RigChains.Drives is the only place that says what drives a - // joint: a joint carrying two actuators, or whose reach passes through a joint another actuator drives, is refused here, - // whatever the two actuators are. - var drives = RigChains.Drives(ship).Select(drive => (drive.Joint, Hardpoint: mounts[drive.Anchor.Id])).ToArray(); - foreach (var onJoint in drives.GroupBy(drive => drive.Joint, StringComparer.Ordinal)) - { - var lead = onJoint.First().Hardpoint; - var other = onJoint.Select(drive => drive.Hardpoint).FirstOrDefault(hardpoint => RigChains.Actuator(hardpoint) != RigChains.Actuator(lead)); - if (other != null) - throw new InvalidOperationException($"{ship.Id}: joint {onJoint.Key} carries more than one actuator ({lead.Transform} and {other.Transform}); a joint has one actuator."); - } - var driven = RigChains.Driven(ship); - foreach (var joint in driven) - { - var through = RigChains.Chain(ship, joint).SkipLast(1).FirstOrDefault(driven.Contains); - if (through != null) - throw new InvalidOperationException($"{ship.Id}: joint {joint} reaches through joint {through}, which another actuator drives; a joint has one actuator."); - } - - var ridden = drives.Where(drive => IsWeapon(drive.Hardpoint.Type)).ToArray(); - foreach (var (_, hardpoint) in ridden) - if (!(hardpoint.FiringArc > 0f)) - throw new InvalidOperationException($"{ship.Id}: weapon hardpoint {hardpoint.Transform} rides a joint, so it must state its firing arc above 0."); - foreach (var group in ridden.GroupBy(mount => mount.Joint, StringComparer.Ordinal)) - { - var lead = group.First().Hardpoint; - foreach (var (_, hardpoint) in group) - if (hardpoint.Rotation != lead.Rotation || hardpoint.FiringArc != lead.FiringArc) - throw new InvalidOperationException($"{ship.Id}: weapon hardpoints {lead.Transform} and {hardpoint.Transform} ride joint {group.Key} and must share Rotation and FiringArc."); - var reach = YawReach(ship, group.Key); - if (reach < lead.FiringArc) - throw new InvalidOperationException($"{ship.Id}: joint {group.Key} chain reaches {reach} degrees of yaw, short of the {lead.FiringArc} degree firing arc of {lead.Transform}."); - } - - // A thruster row is a gimbal: its hardpoints' stated FiringArc is how far the row swings, so a row on a joint rides it - // whole, and the joint's chain must be able to sweep that arc. A hardpoint with no Row is a row of one. - var thrusters = mounts.Values.Where(hardpoint => hardpoint.Type == HardpointType.Thruster).ToArray(); - var tilted = drives.Where(drive => drive.Hardpoint.Type == HardpointType.Thruster).ToArray(); - foreach (var (_, hardpoint) in tilted) - if (!(hardpoint.FiringArc > 0f)) - throw new InvalidOperationException($"{ship.Id}: thruster hardpoint {hardpoint.Transform} rides a joint, so it must state its firing arc above 0; a fixed thruster may not ride a joint."); - foreach (var onJoint in tilted.GroupBy(drive => drive.Joint, StringComparer.Ordinal)) - { - var lead = onJoint.First().Hardpoint; - var members = string.IsNullOrEmpty(lead.Row) ? new[] { lead } : thrusters.Where(hardpoint => hardpoint.Row == lead.Row).ToArray(); - foreach (var member in members) - if (!tilted.Any(drive => drive.Hardpoint == member && drive.Joint == onJoint.Key)) - throw new InvalidOperationException($"{ship.Id}: thruster hardpoint {member.Transform} is in the row of {lead.Transform} on joint {onJoint.Key} and must ride it too; a row rides one joint whole."); - var reach = YawReach(ship, onJoint.Key); - if (reach < lead.FiringArc) - throw new InvalidOperationException($"{ship.Id}: joint {onJoint.Key} chain reaches {reach} degrees of yaw, short of the {lead.FiringArc} degree gimbal arc of {lead.Transform}."); - } - } - - // The yaw a driven joint's chain can sweep: the summed range of every degree of freedom whose axis is yaw, capped at a turn. - private static float YawReach(ShipAuthoring ship, string jointId) - { - var joints = ship.Joints.ToDictionary(joint => joint.Id, StringComparer.Ordinal); - var reach = 0f; - foreach (var joint in RigChains.Chain(ship, jointId).Select(id => joints[id])) - for (var dof = 0; dof < joint.Min.Length; dof++) - if (MathF.Abs(joint.Axes[3 * dof + 1]) >= YawAxisCos) - reach += joint.Max[dof] - joint.Min[dof]; - return MathF.Min(reach, 360f); - } -} - -// A rig's actuators and the joints they drive. An actuator is a weapon mount or a thruster emitter that names a joint; a gun -// group (every gun on a joint) or a thruster row is one actuator, and a joint has at most one (ruling one-joint-one-actuator). -// This is the only place that says which anchors are actuators, so the judge, the binder and the plan all follow it. -public static class RigChains -{ - public static bool Actuates(string role) => role == "weapon-mount" || role == "thruster-emitter"; - - // Every actuator anchor that names a joint, with the joint it drives. - public static IEnumerable<(string Joint, ShipAnchor Anchor)> Drives(ShipAuthoring ship) => - ship.Anchors.Where(anchor => Actuates(anchor.Role) && !string.IsNullOrEmpty(anchor.Joint)).Select(anchor => (anchor.Joint, anchor)); - - public static HashSet Driven(ShipAuthoring ship) => - new HashSet(Drives(ship).Select(drive => drive.Joint), StringComparer.Ordinal); - - // The actuator a mount belongs to: all guns on a joint are one, a thruster is its row, and a thruster of no row is its own. - public static string Actuator(HardpointData hardpoint) => - ShipAuthoringStore.IsWeapon(hardpoint.Type) ? "weapon" : string.IsNullOrEmpty(hardpoint.Row) ? "thruster:" + hardpoint.Transform : "row:" + hardpoint.Row; - - // The joint and its ancestors, root-first. The judge refuses a driven joint whose ancestors another actuator drives, - // so for an accepted ship this is the whole chain the actuator's reach is summed over. - public static string[] Chain(ShipAuthoring ship, string jointId) - { - var joints = ship.Joints.ToDictionary(joint => joint.Id, StringComparer.Ordinal); - var chain = new List { jointId }; - for (var parent = joints[jointId].Parent; !string.IsNullOrEmpty(parent); parent = joints[parent].Parent) - chain.Add(parent); - chain.Reverse(); - return chain.ToArray(); - } -} diff --git a/Assets/Scripts/ServerShared/ShipAuthoring.cs.meta b/Assets/Scripts/ServerShared/ShipAuthoring.cs.meta deleted file mode 100644 index b9d7af3b4..000000000 --- a/Assets/Scripts/ServerShared/ShipAuthoring.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 0da6676b1995425fa66187e8e58956e7 diff --git a/Assets/Scripts/ServerShared/ShipModCatalog.cs b/Assets/Scripts/ServerShared/ShipModCatalog.cs deleted file mode 100644 index e9ed613a2..000000000 --- a/Assets/Scripts/ServerShared/ShipModCatalog.cs +++ /dev/null @@ -1,350 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using GameCult.Caching; -using Newtonsoft.Json.Linq; -using System.Text; - -// Builds the one catalog snapshot CultCache needs. Sources remain the shipped catalog and each -// mod-owned ship.cc; this output is disposable and never becomes an authoring surface. -public static class ShipModCatalog -{ - public sealed class Package - { - public HullData Hull; - public ShipAuthoring Visual; - public string ModelPath; - public Dictionary NodeIndices; - // The package's own products, read from its ship.cc; empty for a package taken from the catalog, where gameplay reads products. - public FactionProductData[] Products = Array.Empty(); - } - - public static CultRecordKey HullKey(string id) => new CultRecordKey("mod-hull:" + id); - public static CultRecordKey AuthoringKey(string id) => new CultRecordKey("mod-ship:" + id); - - public static CultRecordKey ProductKey(string id, CultRecordKey maker) => new CultRecordKey("mod-product:" + id + ":" + maker.Value); - - // A key a package owns. Any record may reference one (ruling catalog-is-a-package-stack); one whose package is removed - // fails closed where it is read. - public static bool IsModKey(CultRecordKey key) => - key.IsSet() && (key.Value.StartsWith("mod-hull:", StringComparison.Ordinal) || key.Value.StartsWith("mod-ship:", StringComparison.Ordinal) || key.Value.StartsWith("mod-product:", StringComparison.Ordinal)); - - // A package left out of the composition, named by its directory, with every reason it was left out. - public sealed class Exclusion - { - public string Package; - public string Reason; - public override string ToString() => $"{Package}: {Reason}"; - } - - public sealed class Composition - { - // Ship IDs of the packages composed into the derived catalog, in directory order. - public string[] Included; - // Packages that failed on their own or collided with the catalog or with each other, in directory order. - public Exclusion[] Excluded; - } - - // One bad package never stops the rest. Each package is read and validated on its own; one that fails is excluded and - // named. A collision (with the shipped catalog, or with another package's hull name) excludes every package involved, - // since neither has a claim to the name. The derived catalog holds the shipped catalog plus the included packages. - // Unsafe inputs and outputs (a missing catalog, a derived file that would replace a source) still throw: nothing is composed. - public static Composition Compose(string shippedCatalog, string outputCatalog, string modsRoot, CultDocumentRegistry registry = null) - { - var source = Path.GetFullPath(shippedCatalog); - var output = Path.GetFullPath(outputCatalog); - var root = Path.GetFullPath(modsRoot); - if (!File.Exists(source)) throw new FileNotFoundException("Shipped catalog is missing", source); - if (!Directory.Exists(root)) throw new DirectoryNotFoundException($"Mod root is missing: {root}"); - if (string.Equals(source, output, StringComparison.OrdinalIgnoreCase)) - throw new InvalidOperationException("The derived catalog cannot replace the shipped catalog."); - if (output.StartsWith(root + Path.DirectorySeparatorChar, StringComparison.OrdinalIgnoreCase)) - throw new InvalidOperationException("The derived catalog cannot replace a mod source or asset."); - - var reasons = new SortedDictionary>(StringComparer.Ordinal); - void Exclude(string package, string reason) - { - if (!reasons.TryGetValue(package, out var list)) reasons[package] = list = new List(); - list.Add(reason); - } - var packages = new List<(string Directory, Package Package)>(); - foreach (var directory in Directory.GetDirectories(root).OrderBy(path => path, StringComparer.Ordinal)) - { - var path = Path.Combine(directory, "ship.cc"); - if (!File.Exists(path)) continue; - var name = Path.GetFileName(directory); - // A package can fail in any way a hostile or broken file can, so its failure is quarantined whatever it is. - try { packages.Add((name, ReadPackage(path))); } - catch (Exception error) { Exclude(name, error.Message); } - } - - Directory.CreateDirectory(Path.GetDirectoryName(output)); - // The store keeps a lock file beside every file it opens, so the working copy gets its own directory and the - // whole directory goes away, whatever the store left in it. - var workspace = output + "." + Guid.NewGuid().ToString("N") + ".tmp"; - var temporary = Path.Combine(workspace, "catalog.cc"); - try - { - Directory.CreateDirectory(workspace); - File.Copy(source, temporary); - Composition composition; - using (var cache = AetheriaStores.Open(temporary, catalogWritable: true, registry: registry)) - { - // Collisions are judged against the shipped records alone, before any package is written, so the - // verdict does not depend on directory order. CultCache indexes names per concrete type and lets the - // last writer win, and GetByName over a base type throws on a match across subtypes: a mod hull named - // like any shipped item, or like another mod's hull, would make name lookups wrong or throw. - var keys = new HashSet(cache.AllStoredDocuments.Select(record => record.Key)); - var itemNames = new HashSet(cache.GetAll().Select(item => item.Name), StringComparer.Ordinal); - var shipIds = new HashSet(cache.GetAll().Select(existing => existing.Id), StringComparer.Ordinal); - var factionKeys = new HashSet(cache.GetAll().Select(faction => cache.TryGetHandle(faction).Value.Key)); - var productNames = new HashSet(cache.GetAll().Select(product => product.Name), StringComparer.Ordinal); - foreach (var (directory, package) in packages) - { - var (hull, ship) = (package.Hull, package.Visual); - if (keys.Contains(HullKey(ship.Id)) || keys.Contains(AuthoringKey(ship.Id))) - Exclude(directory, $"a mod key collides with an existing catalog record."); - if (itemNames.Contains(hull.Name)) - Exclude(directory, $"hull name '{hull.Name}' collides with an existing catalog item."); - if (shipIds.Contains(ship.Id)) - Exclude(directory, $"ship ID collides with an existing catalog ship authoring record."); - if (StationKinds.HullKindFault(cache, hull) is { } kindFault) Exclude(directory, kindFault); - foreach (var product in package.Products) - { - if (!factionKeys.Contains(product.Manufacturer.Key)) - Exclude(directory, $"product '{product.Name}' names a manufacturer the shipped catalog holds no faction for."); - if (keys.Contains(ProductKey(ship.Id, product.Manufacturer.Key))) - Exclude(directory, $"a mod product key collides with an existing catalog record."); - if (productNames.Contains(product.Name)) - Exclude(directory, $"product name '{product.Name}' collides with an existing catalog product."); - } - } - foreach (var claim in packages.GroupBy(package => package.Package.Hull.Name, StringComparer.Ordinal).Where(group => group.Count() > 1)) - foreach (var (directory, package) in claim) - Exclude(directory, $"hull name '{claim.Key}' is also claimed by " + - string.Join(", ", claim.Where(other => other.Directory != directory).Select(other => other.Directory)) + "."); - foreach (var claim in packages.SelectMany(package => package.Package.Products.Select(product => (package.Directory, product.Name))) - .GroupBy(entry => entry.Name, StringComparer.Ordinal).Where(group => group.Select(entry => entry.Directory).Distinct().Count() > 1)) - foreach (var directory in claim.Select(entry => entry.Directory).Distinct()) - Exclude(directory, $"product name '{claim.Key}' is also claimed by " + - string.Join(", ", claim.Select(entry => entry.Directory).Where(other => other != directory).Distinct()) + "."); - - var included = packages.Where(package => !reasons.ContainsKey(package.Directory)).Select(package => package.Package).ToArray(); - foreach (var package in included) - { - // Verbatim: the mod store's own records, under the keys it already holds them at. - ShipAuthoringStore.Write(cache, package.Hull, package.Visual); - foreach (var product in package.Products) ShipAuthoringStore.WriteProduct(cache, package.Visual.Id, product); - } - // Shipped hulls too: the derived catalog must not hold a hull that names two bodies. - foreach (var hull in cache.GetAll()) - ShipAuthoringStore.RequireOneBody(hull, hull.Name); - cache.FlushAsync().GetAwaiter().GetResult(); - composition = new Composition - { - Included = included.Select(package => package.Visual.Id).ToArray(), - Excluded = reasons.Select(entry => new Exclusion { Package = entry.Key, Reason = string.Join("; ", entry.Value) }).ToArray() - }; - } - if (File.Exists(output)) File.Replace(temporary, output, null); - else File.Move(temporary, output); - return composition; - } - finally - { - if (Directory.Exists(workspace)) Directory.Delete(workspace, true); - } - } - - public static Package ReadPackage(string shipPath) - { - var path = Path.GetFullPath(shipPath); - var (hull, ship, products) = ShipAuthoringStore.Read(path); - return Bind(hull, ship, products, Path.GetDirectoryName(path), path); - } - - // The package a catalog hull names: its two records come from the catalog, and only the GLB comes from the mod - // directory (//). Gameplay reads a mod ship through this, never through its ship.cc. - public static Package PackageOf(CultCache catalog, HullData hull, string modsRoot) - { - var ship = catalog.Get(hull.Visual) ?? - throw new InvalidOperationException($"{hull.Name}: the catalog holds no visual record {hull.Visual.Key.Value}."); - ShipAuthoringStore.Validate(hull, ship); - var directory = Path.Combine(Path.GetFullPath(modsRoot), ship.Id); - return Bind(hull, ship, Array.Empty(), directory, Path.Combine(directory, "ship.cc")); - } - - // The one game-side choice of catalog: the shipped file when no package is installed or none survives composition, - // otherwise the derived file, composed afresh from the shipped one and the surviving packages. Recomposed every - // call, so the derived file is never stale and never an authority. Excluded packages come back named, for the menu. - public static (string Catalog, Exclusion[] Excluded) ResolveCatalog(string shippedCatalog, string derivedCatalog, string modsRoot, - CultDocumentRegistry registry = null) - { - if (!Directory.Exists(modsRoot) || - !Directory.GetDirectories(modsRoot).Any(directory => File.Exists(Path.Combine(directory, "ship.cc")))) - return (shippedCatalog, Array.Empty()); - Composition composition; - // A failure of the composition itself (an unwritable derived path, say) is still a mod problem, never a reason not to boot. - try { composition = Compose(shippedCatalog, derivedCatalog, modsRoot, registry); } - catch (Exception error) { return (shippedCatalog, new[] { new Exclusion { Package = "(all mods)", Reason = error.Message } }); } - return (composition.Included.Length == 0 ? shippedCatalog : derivedCatalog, composition.Excluded); - } - - // The one uninstall: presence under Mods is the only enablement (MR1), so a package leaves by moving, never by deletion, - // to /RemovedMods/ (' (2)' and on when taken). Moving it back reinstalls it. - // Returns the destination. Compose and ResolveCatalog never read RemovedMods. - public static string RemovePackage(string modsRoot, string package) - { - var root = Path.GetFullPath(modsRoot).TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar); - // Containment, not a blacklist: the package must resolve to a strict child of the mods folder whose final name is - // the name given. A name the filesystem rewrites ('...', 'a.', 'a ', 'CON', 'a:b') resolves to something else. - if (!IsPackageName(package)) throw new ArgumentException("Not a mod package name.", nameof(package)); - var source = ChildOf(root, package) ?? throw new ArgumentException("Not a mod package name.", nameof(package)); - var info = new DirectoryInfo(source); - if (!info.Exists) throw new DirectoryNotFoundException("The package is not a directory under the mods folder."); - if (info.Attributes.HasFlag(FileAttributes.ReparsePoint)) - throw new ArgumentException("A package that is a link is not removed.", nameof(package)); - var removed = RemovedRoot(modsRoot); - Directory.CreateDirectory(removed); - var destination = ChildOf(removed, package); - for (var copy = 2; destination != null && (Directory.Exists(destination) || File.Exists(destination)); copy++) - destination = ChildOf(removed, $"{package} ({copy})"); - if (destination == null) throw new ArgumentException("Not a mod package name.", nameof(package)); - Directory.Move(source, destination); - return destination; - } - - private static readonly string[] ReservedDeviceNames = - { "CON", "PRN", "AUX", "NUL", "COM1", "COM2", "COM3", "COM4", "COM5", "COM6", "COM7", "COM8", "COM9", - "LPT1", "LPT2", "LPT3", "LPT4", "LPT5", "LPT6", "LPT7", "LPT8", "LPT9" }; - - // A name Windows keeps as written: no separator, stream colon or wildcard, no trailing dot or space, and - // not a device name (with or without an extension). Held on every platform so a mod moves the same way everywhere. - private static bool IsPackageName(string name) => - !string.IsNullOrEmpty(name) && name != "(all mods)" && - name.IndexOfAny(Path.GetInvalidFileNameChars()) < 0 && name.IndexOfAny(new[] { ':', '*', '?', '"', '<', '>', '|', '/', '\\' }) < 0 && - name.All(character => character >= ' ') && !name.EndsWith('.') && !name.EndsWith(' ') && - !ReservedDeviceNames.Contains(name.Split('.')[0].TrimEnd(' '), StringComparer.OrdinalIgnoreCase); - - // The full path of `name` directly under `root`, or null when the filesystem would resolve it anywhere else or under - // another name. The comparison is of resolved path segments, never of a string prefix ('Mods2' is not inside 'Mods'). - private static string ChildOf(string root, string name) - { - var full = Path.GetFullPath(Path.Combine(root, name)); - return string.Equals(Path.GetDirectoryName(full), root, StringComparison.Ordinal) && - string.Equals(Path.GetFileName(full), name, StringComparison.Ordinal) ? full : null; - } - - private static string RemovedRoot(string modsRoot) => - Path.Combine(Path.GetDirectoryName(Path.GetFullPath(modsRoot).TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar)), "RemovedMods"); - - private static Package Bind(HullData hull, ShipAuthoring ship, FactionProductData[] products, string directory, string path) - { - if (!string.Equals(Path.GetFileName(directory), ship.Id, StringComparison.Ordinal)) - throw new InvalidOperationException($"{path}: ship ID must match its package directory name."); - var modelPath = Path.GetFullPath(Path.Combine(directory, ship.ModelAsset)); - // Containment is ShipAuthoringStore.Validate's job: it refuses rooted and `..` model paths before this line. - if (!File.Exists(modelPath) || !string.Equals(Path.GetExtension(modelPath), ".glb", StringComparison.Ordinal)) - throw new InvalidOperationException($"{ship.Id}: model asset must name an existing GLB inside its package."); - var modelNodes = ReadNodeIds(modelPath); - foreach (var anchor in ship.Anchors) - if (!modelNodes.ContainsKey(anchor.ModelNodeId)) - throw new InvalidOperationException($"{ship.Id}: model has no node with aetheria.id={anchor.ModelNodeId} for anchor {anchor.Id}."); - // Assemble reads a renderer or collider mesh from these anchors' nodes and refuses without one, and reads the shield - // node's scale as three positive radii (ruling thrusters-radiators-are-meshes). These refusals stand in for Assemble's - // throws, so a package Compose includes is one the importer's assembler can build; the exhaust emission surface and - // the glowing radiator are meshes by that same ruling. A weapon mount and a tractor may be empties. - foreach (var anchor in ship.Anchors) - if ((anchor.Role == "thruster-emitter" || anchor.Role == "radiator-mesh" || anchor.Role == "map-icon" || anchor.Role == "hull-collider") && - !modelNodes[anchor.ModelNodeId].HasMesh) - throw new InvalidOperationException($"{ship.Id}: {anchor.Role} anchor {anchor.Id} needs a mesh, but model node {anchor.ModelNodeId} has none."); - foreach (var anchor in ship.Anchors) - if (anchor.Role == "shield" && !modelNodes[anchor.ModelNodeId].PositiveScale) - throw new InvalidOperationException($"{ship.Id}: shield anchor {anchor.Id} needs three positive scale radii on model node {anchor.ModelNodeId}, with no matrix."); - BindRig(ship, modelNodes); - CultRecordRefs.Validate(hull); - return new Package - { - Hull = hull, Visual = ship, Products = products, ModelPath = modelPath, - NodeIndices = modelNodes.ToDictionary(node => node.Key, node => node.Value.Index, StringComparer.Ordinal) - }; - } - - // The rig the record states must be the rig the model has: every joint is a node, each joint's Parent and each mount's - // Joint is the nearest joint above its node, ancestors without an id being walked through by ReadNodeIds, and a radiator - // mesh sits under no joint. - private static void BindRig(ShipAuthoring ship, Dictionary nodes) - { - var joints = new HashSet((ship.Joints ?? new List()).Select(joint => joint.Id), StringComparer.Ordinal); - var idAt = nodes.ToDictionary(node => (int)node.Value.Index, node => node.Key); - // Parent is already the nearest ancestor that carries an id, so the walk up is the chain of those. - string JointAbove(string nodeId) - { - // glTF forbids cycles; the bound keeps a malformed model from hanging the binder. - var parent = nodes[nodeId].Parent; - for (var steps = 0; parent >= 0 && steps <= nodes.Count; steps++, parent = nodes[idAt[parent]].Parent) - if (joints.Contains(idAt[parent])) return idAt[parent]; - return null; - } - - foreach (var joint in ship.Joints ?? new List()) - { - if (!nodes.ContainsKey(joint.Id)) - throw new InvalidOperationException($"{ship.Id}: model has no node with aetheria.id={joint.Id} for a joint."); - if (!string.Equals(JointAbove(joint.Id) ?? "", joint.Parent ?? "", StringComparison.Ordinal)) - throw new InvalidOperationException($"{ship.Id}: joint {joint.Id} must name the nearest joint above its model node as its Parent."); - } - foreach (var anchor in ship.Anchors.Where(anchor => RigChains.Actuates(anchor.Role) || anchor.Role == "radiator-mesh")) - { - var above = JointAbove(anchor.ModelNodeId); - if (string.Equals(above ?? "", anchor.Joint ?? "", StringComparison.Ordinal)) continue; - throw new InvalidOperationException(anchor.Role == "radiator-mesh" - ? $"{ship.Id}: {anchor.Role} anchor {anchor.Id} sits under a joint in the model." - : $"{ship.Id}: {(anchor.Role == "weapon-mount" ? "weapon mount" : "thruster emitter")} {anchor.Id} must name the nearest joint above its model node as its Joint."); - } - } - - // No matrix, and every scale component (default 1) above zero: what Assemble's shield radii need. - private static bool PositiveScale(JObject node) => - node["matrix"] == null && (node["scale"] == null || node["scale"].Select(component => (double)component).All(component => component > 0)); - - // GLB is the xenos asset boundary. Only its node extras, whether each node names a mesh, and its nearest identified ancestor's node index - // (-1 for none) are read here, plus whether the node's scale is three positive radii with no matrix; geometry belongs to the runtime importer. - public static Dictionary ReadNodeIds(string path) - { - using var stream = File.OpenRead(path); - using var reader = new BinaryReader(stream); - if (stream.Length < 20 || reader.ReadUInt32() != 0x46546C67 || reader.ReadUInt32() != 2 || - reader.ReadUInt32() != stream.Length) - throw new InvalidOperationException($"{path}: invalid GLB 2 header."); - var chunkLength = reader.ReadUInt32(); - if (reader.ReadUInt32() != 0x4E4F534A || chunkLength > stream.Length - stream.Position) - throw new InvalidOperationException($"{path}: missing GLB JSON chunk."); - var json = JObject.Parse(Encoding.UTF8.GetString(reader.ReadBytes((int)chunkLength))); - var ids = new Dictionary(StringComparer.Ordinal); - var nodes = (json["nodes"]?.OfType() ?? Enumerable.Empty()).ToArray(); - var parents = Enumerable.Repeat(-1, nodes.Length).ToArray(); - for (var parent = 0; parent < nodes.Length; parent++) - foreach (var child in nodes[parent]["children"]?.Select(token => (int)token) ?? Enumerable.Empty()) - if (child >= 0 && child < nodes.Length) parents[child] = parent; - uint index = 0; - foreach (var node in nodes) - { - var id = (string)node["extras"]?["aetheria.id"]; - if (string.IsNullOrEmpty(id)) { index++; continue; } - if (!ids.TryAdd(id, (index, node["mesh"] != null && node["mesh"].Type != JTokenType.Null, IdentifiedAncestor(parents, nodes, (int)index), PositiveScale(node)))) - throw new InvalidOperationException($"{path}: duplicate GLB node aetheria.id={id}."); - index++; - } - return ids; - } - - private static int IdentifiedAncestor(int[] parents, JObject[] nodes, int index) - { - var parent = parents[index]; - for (var steps = 0; parent >= 0 && steps <= nodes.Length; steps++, parent = parents[parent]) - if (!string.IsNullOrEmpty((string)nodes[parent]["extras"]?["aetheria.id"])) return parent; - return -1; - } -} diff --git a/Assets/Scripts/ServerShared/ShipModCatalog.cs.meta b/Assets/Scripts/ServerShared/ShipModCatalog.cs.meta deleted file mode 100644 index c81d1965d..000000000 --- a/Assets/Scripts/ServerShared/ShipModCatalog.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 708d45e8a4144a6e89bcf40e96b0975a diff --git a/Assets/Scripts/ServerShared/ShipModPlan.cs b/Assets/Scripts/ServerShared/ShipModPlan.cs deleted file mode 100644 index 6f659edac..000000000 --- a/Assets/Scripts/ServerShared/ShipModPlan.cs +++ /dev/null @@ -1,54 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; - -// Which anchor fills which slot of a ship's component arrays. Pure over (hull, visual) so the Unity assembler only -// follows it: the hull's hardpoint type decides what a mount is, the anchor's role decides which node plays the part. -public sealed class ShipModPlan -{ - public string MapIcon; - public string HullCollider; - public string Shield; - public string Tractor; - // Mount ids whose anchor (role thruster-emitter / radiator-mesh) is the emitter / mesh node itself. - public string[] Thrusters; - public string[] Radiators; - // Each weapon mount (role weapon-mount) and its muzzle anchors, by Order then id. - public (string Mount, string[] Muzzles)[] Weapons; - // One entry per driven joint (one a weapon mount names), by its first weapon in hull order: the joint, its chain - // root-first (RigChains), and the lead mount (the joint's first weapon in hull order) with that mount's first muzzle. - // Presentation only: the assembler rigs these and nothing here reaches the simulation. - public (string Joint, string[] Chain, string LeadMount, string LeadMuzzle)[] Rigs; - - // Maps a pair Validate accepts; every rule about which anchor may play which part is Validate's, so this refuses nothing. - public static ShipModPlan Build(HullData hull, ShipAuthoring visual) - { - ShipAuthoringStore.Validate(hull, visual); - var hardpoints = hull.Hardpoints ?? new List(); - string Only(string wanted) => visual.Anchors.Single(anchor => anchor.Role == wanted).Id; - string[] Mounts(HardpointType type) => hardpoints.Where(hardpoint => hardpoint.Type == type).Select(hardpoint => hardpoint.Transform).ToArray(); - var muzzles = visual.Anchors.Where(anchor => anchor.Role == "weapon-muzzle") - .OrderBy(anchor => anchor.Order).ThenBy(anchor => anchor.Id, StringComparer.Ordinal).ToArray(); - - var weapons = hardpoints.Where(hardpoint => ShipAuthoringStore.IsWeapon(hardpoint.Type)).Select(hardpoint => hardpoint.Transform).ToHashSet(StringComparer.Ordinal); - var jointOf = RigChains.Drives(visual).Where(drive => weapons.Contains(drive.Anchor.Id)) - .ToDictionary(drive => drive.Anchor.Id, drive => drive.Joint, StringComparer.Ordinal); - var leads = hardpoints.Where(hardpoint => jointOf.ContainsKey(hardpoint.Transform)).GroupBy(hardpoint => jointOf[hardpoint.Transform], StringComparer.Ordinal) - .Select(group => (Joint: group.Key, Lead: group.First().Transform)); - - return new ShipModPlan - { - MapIcon = Only("map-icon"), - HullCollider = Only("hull-collider"), - Shield = Only("shield"), - Tractor = Only("tractor"), - Thrusters = Mounts(HardpointType.Thruster), - Radiators = Mounts(HardpointType.Radiator), - Weapons = hardpoints.Where(hardpoint => ShipAuthoringStore.IsWeapon(hardpoint.Type)).Select(hardpoint => ( - hardpoint.Transform, - muzzles.Where(muzzle => muzzle.ParentId == hardpoint.Transform).Select(muzzle => muzzle.Id).ToArray())).ToArray(), - Rigs = leads.Select(rig => (rig.Joint, RigChains.Chain(visual, rig.Joint), rig.Lead, - muzzles.First(muzzle => muzzle.ParentId == rig.Lead).Id)).ToArray() - }; - } -} diff --git a/Assets/Scripts/ServerShared/ShipModPlan.cs.meta b/Assets/Scripts/ServerShared/ShipModPlan.cs.meta deleted file mode 100644 index 6235b5279..000000000 --- a/Assets/Scripts/ServerShared/ShipModPlan.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: b45caa5f5ad9c164b8a295528f1b4951 \ No newline at end of file diff --git a/Assets/Scripts/ServerShared/SimClock.cs b/Assets/Scripts/ServerShared/SimClock.cs deleted file mode 100644 index ee260a50b..000000000 --- a/Assets/Scripts/ServerShared/SimClock.cs +++ /dev/null @@ -1,76 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -using System; - -// The one relation between simulation time and real time. Real seconds go in; whole fixed steps come out, each -// handed to the caller's step action with the same Step. Nothing else in the game converts frame time to sim time, -// and nothing integrates a sim quantity on this clock: presenters read Lead to draw ahead of the latest step -// (DrawAhead) and decide no sim fact. -public sealed class SimClock -{ - // The longest real time one frame may feed. A hitch (a load, a breakpoint) is a slow frame, not a burst of - // catch-up steps. - public const float MaxFrameSeconds = .1f; - - // Game steps per real second at design speed 1, and the sim seconds one step carries. The one owner of the game's - // tick: every driver of a game history steps Zone.Update by GameStep. Design speed (ruling sim-speed-surface) will - // set Step = DesignSpeed / TickRate in ForGame and nowhere else. - public const int TickRate = 30; - public const float GameStep = 1f / TickRate; - - public static SimClock ForGame() => new SimClock(GameStep, TickRate); - - private readonly double _period; - private double _accumulator; - private bool _advancing; - - public SimClock(float step, float stepsPerRealSecond) - { - if (!(step > 0)) throw new ArgumentOutOfRangeException(nameof(step)); - if (!(stepsPerRealSecond > 0)) throw new ArgumentOutOfRangeException(nameof(stepsPerRealSecond)); - Step = step; - StepsPerRealSecond = stepsPerRealSecond; - _period = 1.0 / stepsPerRealSecond; - } - - // Sim seconds per step, fixed for the clock's life. - public float Step { get; } - - public float StepsPerRealSecond { get; } - - public long Steps { get; private set; } - - // Sim seconds since the last step, 0 <= Lead < Step. - public float Lead => (float) (_accumulator * StepsPerRealSecond * Step); - - // Forgets the real time paid toward the next step (a new zone starts between steps). A step cannot do this to the - // clock that is running it. - public void Reset() - { - if (_advancing) throw new InvalidOperationException("A step cannot reset the clock that is running it."); - _accumulator = 0; - } - - // Feeds real seconds (negative counts as none, one frame counts at most MaxFrameSeconds) and runs the whole - // steps they pay for. Returns how many ran. - public int Advance(float realSeconds, Action step) - { - _accumulator += Math.Min(Math.Max(realSeconds, 0f), MaxFrameSeconds); - var ran = 0; - _advancing = true; - try - { - while (_accumulator >= _period) - { - _accumulator -= _period; - step(Step); - Steps++; - ran++; - } - } - finally { _advancing = false; } - return ran; - } -} diff --git a/Assets/Scripts/ServerShared/SimClock.cs.meta b/Assets/Scripts/ServerShared/SimClock.cs.meta deleted file mode 100644 index 30e06c489..000000000 --- a/Assets/Scripts/ServerShared/SimClock.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 7a9e3edac65f4a8e8313bdbfe69ccebd -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/ServerShared/SimulationDice.cs b/Assets/Scripts/ServerShared/SimulationDice.cs deleted file mode 100644 index adc440299..000000000 --- a/Assets/Scripts/ServerShared/SimulationDice.cs +++ /dev/null @@ -1,43 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -using Random = CultMath.Random; - -// Structured simulation seeds: the one place a zone seed, a stream and an ordinal become a generator. Every -// draw is a pure function of its arguments, never of a shared stream, so one roll cannot perturb another. -public static class SimulationDice -{ - public const uint LootStream = 1; - public const uint MineStream = 2; - // A pilot's own decisions, ordinal Agent.Id: its preferred engagement range and its patrol circuit. AI behaviour - // never rides ItemManager.Random, so minting items cannot change how a pilot fights. - public const uint CombatSampleStream = 3; - public const uint PatrolStream = 4; - // Generation placement of an unpacked ship packed at the origin, ordinal its 1-based index in the pack, on the zone's - // seed (CombatSeed): the run seed feeds drops and mines only (ruling run-seed-drops-only), and placement never rides - // ItemManager.Random. - public const uint ScatterStream = 5; - - // 9.1 (docs/fire-control-cut.md): fmix32, MurmurHash3's 32-bit finalizer -- xor-shift, multiply, - // xor-shift, multiply, xor-shift. Diffuses a structured seed (a zone seed XORed with a small, - // low-bits-only id) across every bit before the first xorshift draw reads it, so two seeds that differ - // only in their low bits still land on uncorrelated first outputs. Caller-side mixing only -- - // CultMath.Random itself is unchanged. FireControl.Commit's per-shot seed is built on this verbatim. - public static uint Mix(uint seed) - { - seed ^= seed >> 16; - seed *= 0x85ebca6bu; - seed ^= seed >> 13; - seed *= 0xc2b2ae35u; - seed ^= seed >> 16; - return seed; - } - - // The generator for the `ordinal`th roll of `stream` in the zone identified by `zoneSeed`. - public static Random For(uint zoneSeed, uint stream, uint ordinal) - { - var seed = Mix(Mix(zoneSeed ^ Mix(stream)) ^ ordinal); - return new Random(seed == 0 ? 1u : seed); - } -} diff --git a/Assets/Scripts/ServerShared/SimulationDice.cs.meta b/Assets/Scripts/ServerShared/SimulationDice.cs.meta deleted file mode 100644 index c32cf0aba..000000000 --- a/Assets/Scripts/ServerShared/SimulationDice.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: da428be21afa46a991b55ab9b794d192 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/ServerShared/StatResolver.cs b/Assets/Scripts/ServerShared/StatResolver.cs index 7062fbd9e..bbd3ea542 100644 --- a/Assets/Scripts/ServerShared/StatResolver.cs +++ b/Assets/Scripts/ServerShared/StatResolver.cs @@ -141,9 +141,6 @@ public class StatResolver { set.Scale.Remove(modifierKey); set.Constant.Remove(modifierKey); - // An entry with nothing attached is no entry: a modifier that is gone leaves no trace in the resolver. - if (set.Scale.Count == 0 && set.Constant.Count == 0) - _modifiers.Remove(entry); } _cache.Remove(entry); } diff --git a/Assets/Scripts/ServerShared/StationKinds.cs b/Assets/Scripts/ServerShared/StationKinds.cs deleted file mode 100644 index dad1ce2aa..000000000 --- a/Assets/Scripts/ServerShared/StationKinds.cs +++ /dev/null @@ -1,161 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using GameCult.Caching; -using MessagePack; -using Newtonsoft.Json; - -// What a station is for: one authored catalog record per kind (mining, trade-hub, shipyard...). The catalog's list of -// these records is the one list of station kinds. A kind names no hull: the hull names its kind (HullData.Kind), and -// which hull a faction builds for a kind is derived from the products that faction makes (StationKinds), so a package can -// add a faction's model of a kind without editing any kind record. Records are keyed station-kind:. -[CultDocument("aetheria.stationkinddata", "1"), MessagePackObject, JsonObject(MemberSerialization.OptIn)] -public class StationKindData -{ - [CultName, JsonProperty("name"), Key(0)] - public string Name; - - [JsonProperty("description"), Key(1)] - public string Description; - - // A faction with no model of this kind builds the stand-in's hull and the station stays this kind. Ignored once the - // faction offers a model of this kind. - [JsonProperty("standIns"), Key(2)] - public List StandIns = new List(); - - public static CultRecordKey KeyOf(string id) => new CultRecordKey("station-kind:" + id); -} - -[MessagePackObject, JsonObject(MemberSerialization.OptIn)] -public class StationKindStandIn -{ - [JsonProperty("faction"), Key(0)] - public CultRecordRef Faction; - - // The kind whose model this faction builds in place of the owning kind's. - [JsonProperty("kind"), Key(1)] - public CultRecordRef Kind; -} - -// The one owner of which kinds a faction builds, which kind a station gets, and which hull kind stands in. -public static class StationKinds -{ - // The kinds this faction can place: those of the station hulls its products offer, and those that stand in for it. - // Ordered by key so a choice never depends on store order. Empty for no faction. - public static CultRecordRef[] KindsOf(CultCache catalog, Faction faction) - { - if (faction == null) return Array.Empty>(); - var kinds = new HashSet(OfferedStationHulls(catalog, faction).Select(hull => hull.Kind.Key.Value), StringComparer.Ordinal); - foreach (var kind in catalog.GetAll()) - if (kind.StandIns.Any(standIn => catalog.Get(standIn.Faction) == faction)) - kinds.Add(catalog.RefOf(kind).Key.Value); - return Ordered(kinds); - } - - // The kinds this faction places that a station can be drawn for: those whose hull kind (its own model, else its stand-in's) some - // maker offers. A stand-in whose model has not landed leaves its kind out. - public static CultRecordRef[] FieldableKindsOf(CultCache catalog, Faction faction) => - KindsOf(catalog, faction).Where(kind => HasModel(catalog, faction, kind) || LiveStandIn(catalog, faction, kind).IsSet()).ToArray(); - - // A station's kind: a stable pick among the faction's kinds it can field, by the station's site, which generation names by the - // zone's seed and the station's place in its orbit order (never by a key the cache mints). It draws nothing from any random - // stream, so adding the kind to generation moves no other roll. A kind the faction places but cannot field (neither its own - // model nor a stand-in's hull kind is carried by any offered station hull) is not in the pool; a faction left with no kind to - // field falls back to any kind some offered station hull carries, logged, and the hull draw then falls back to any maker. - // Unset when the catalog has none. - public static CultRecordRef Choose(CultCache catalog, Faction faction, string site, Action log = null) - { - var pool = FieldableKindsOf(catalog, faction); - if (pool.Length == 0) - { - pool = Ordered(OfferedKinds(catalog)); - if (pool.Length == 0) return default; - log?.Invoke($"{faction?.Name ?? "This galaxy"} builds no station kind it can field; placing a station of any kind some maker offers."); - } - return pool[(int) (site.StableHash() % (uint) pool.Length)]; - } - - // The kind of hull a faction builds for a station kind: the kind itself when the faction offers a model of it (a model - // wins over a stale stand-in), else the kind its stand-in names when some maker offers that, else the kind itself (the hull - // draw then falls back to any maker). - public static CultRecordRef HullKindFor(CultCache catalog, Faction faction, CultRecordRef kind) - { - if (!kind.IsSet() || HasModel(catalog, faction, kind)) return kind; - var standIn = LiveStandIn(catalog, faction, kind); - return standIn.IsSet() ? standIn : kind; - } - - private static bool HasModel(CultCache catalog, Faction faction, CultRecordRef kind) => - OfferedStationHulls(catalog, faction).Any(hull => hull.Kind.Key.Equals(kind.Key)); - - // The kind the faction's stand-in names for this kind, when some maker offers a hull of it; else unset. - private static CultRecordRef LiveStandIn(CultCache catalog, Faction faction, CultRecordRef kind) - { - var standIn = catalog.Get(kind)?.StandIns.FirstOrDefault(entry => catalog.Get(entry.Faction) == faction); - return standIn != null && standIn.Kind.IsSet() && OfferedKinds(catalog).Contains(standIn.Kind.Key.Value) ? standIn.Kind : default; - } - - // What is wrong with a hull's kind, or null: a Station hull names a kind the catalog holds, and no other hull names one. - // The one rule, applied to the catalog on Open and to each mod package on Compose. - public static string HullKindFault(CultCache catalog, HullData hull) - { - if (hull.HullType == HullType.Station) - { - if (!hull.Kind.IsSet()) - return $"Station hull '{hull.Name}' has no Kind; a station hull names the station kind it is built to be."; - if (catalog.Get(hull.Kind) == null) - return $"Station hull '{hull.Name}' Kind names no station kind this catalog holds."; - } - else if (hull.Kind.IsSet()) - return $"Hull '{hull.Name}' is a {hull.HullType} and names a Kind; only a station hull has one."; - return null; - } - - // Open refuses a malformed kind catalog, naming the record and field. Every Station hull names a kind the catalog holds - // and no other hull names one; every stand-in names a faction and a kind the catalog holds, is never its own kind, and - // does not stand on another stand-in for the same faction (one hop). A caller that gives kindlessStation is the owner - // of the catalog being repaired: a Station hull with no Kind is reported to it by name instead of refused. - public static void Validate(CultCache catalog, Action kindlessStation = null) - { - foreach (var hull in catalog.GetAll()) - { - var fault = HullKindFault(catalog, hull); - if (fault == null) continue; - if (kindlessStation != null && hull.HullType == HullType.Station && !hull.Kind.IsSet()) kindlessStation(fault); - else throw new InvalidOperationException(fault); - } - foreach (var kind in catalog.GetAll()) - { - var self = catalog.RefOf(kind).Key; - for (var i = 0; i < kind.StandIns.Count; i++) - { - var entry = kind.StandIns[i]; - var at = $"Station kind '{kind.Name}' StandIns[{i}]"; - var faction = catalog.Get(entry.Faction); - if (faction == null) throw new InvalidOperationException($"{at}.Faction names no faction this catalog holds."); - var other = catalog.Get(entry.Kind); - if (other == null) throw new InvalidOperationException($"{at}.Kind names no station kind this catalog holds."); - if (entry.Kind.Key.Equals(self)) throw new InvalidOperationException($"{at}.Kind is the kind itself; a kind cannot stand in for itself."); - if (other.StandIns.Any(next => catalog.Get(next.Faction) == faction)) - throw new InvalidOperationException($"{at}.Kind stands in for the same faction itself; a stand-in is one hop."); - } - } - } - - // The hull kinds some maker offers: the pool a station can always be drawn from. - private static HashSet OfferedKinds(CultCache catalog) => - new HashSet(DrawableStationProducts(catalog).Select(entry => entry.hull.Kind.Key.Value), StringComparer.Ordinal); - - private static IEnumerable OfferedStationHulls(CultCache catalog, Faction faction) => - DrawableStationProducts(catalog).Where(entry => catalog.Get(entry.product.Manufacturer) == faction).Select(entry => entry.hull); - - // The station hulls a hull draw can reach (LoadoutGenerator.IsDrawable, the one definition), with the product that sells each. - private static IEnumerable<(FactionProductData product, HullData hull)> DrawableStationProducts(CultCache catalog) => - catalog.GetAll() - .Select(product => (product, hull: catalog.Get(product.Design) as HullData)) - .Where(entry => entry.hull != null && entry.hull.HullType == HullType.Station && entry.hull.Kind.IsSet() && - LoadoutGenerator.IsDrawable(catalog, entry.product, entry.hull)); - - private static CultRecordRef[] Ordered(IEnumerable keys) => - keys.OrderBy(key => key, StringComparer.Ordinal).Select(key => new CultRecordRef(new CultRecordKey(key))).ToArray(); -} diff --git a/Assets/Scripts/ServerShared/StationKinds.cs.meta b/Assets/Scripts/ServerShared/StationKinds.cs.meta deleted file mode 100644 index 8e29291ad..000000000 --- a/Assets/Scripts/ServerShared/StationKinds.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 7b3e1a94c2d84f6e9a05d1c8e4f27b63 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/ServerShared/StationServices.cs b/Assets/Scripts/ServerShared/StationServices.cs deleted file mode 100644 index 153fc595d..000000000 --- a/Assets/Scripts/ServerShared/StationServices.cs +++ /dev/null @@ -1,156 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; - -// What a station pays for goods and charges to mend gear. The one owner of the sell price, the repair cost, and the -// two commits that move goods or restore durability against the run's credits; TradeMenu shows these numbers and -// decides none of them. It holds no Unity type. Credits are the caller's: a refusal leaves them, the cargo and the -// durabilities exactly as they were. -public static class StationServices -{ - // What the station charges for the item, or for `quantity` units of a commodity (a crafted item is one unit). The - // number TradeMenu shows, checks against the run's credits and charges. - public static int BuyPrice(ItemManager items, ItemInstance item, int quantity = 1) - { - switch (item) - { - case CraftedItemInstance crafted: - return items.GetPrice(crafted); - case SimpleCommodity commodity: - return (int) Math.Min((long) items.GetData(commodity).Price * quantity, int.MaxValue); - default: - throw new ArgumentException($"{item?.GetType().Name ?? "null"} has no buy price.", nameof(item)); - } - } - - // What the station pays for the item: its price, scaled by SellFraction and by its condition. A commodity has no - // wear, so it sells at the fraction alone; a simple commodity's price is per unit. - public static int SellPrice(ItemManager items, ItemInstance item) - { - var fraction = (double) items.GameplaySettings.SellFraction; - switch (item) - { - case CraftedItemInstance crafted: - return SellValue(items.GetPrice(crafted), fraction, Condition(items, crafted)); - case SimpleCommodity commodity: - return (int) Math.Floor((long) items.GetData(commodity).Price * commodity.Quantity * fraction); - default: - throw new ArgumentException($"{item?.GetType().Name ?? "null"} has no sell price.", nameof(item)); - } - } - - // What the station charges to restore the entity's hull armour, hull and every item it carries to design: each - // piece's share of its price in proportion to its wear, scaled by the repair fraction, rounded up. Armour has no - // price of its own, so the worn share of the hull's total armour is charged as that share of the hull's price. - public static int RepairCost(ItemManager items, Entity entity) - { - var fraction = RepairFraction(items); - long total = (long) Math.Ceiling(ArmourWear(entity) * items.GetPrice(entity.Hull) * fraction); - foreach (var gear in Gear(entity)) total += RepairShare(items, gear, fraction); - return (int) Math.Min(total, int.MaxValue); - } - - // What the station charges for each unit of wear it mends: RepairFraction, but never less than SellFraction, so - // mending an item before selling it never pays more than the repair cost. - private static double RepairFraction(ItemManager items) => - Math.Max(items.GameplaySettings.RepairFraction, items.GameplaySettings.SellFraction); - - // The worn share of the entity's armour, 0 when it is whole or has none. - private static double ArmourWear(Entity entity) - { - double max = 0, worn = 0; - for (var x = 0; x < entity.MaxArmor.GetLength(0); x++) - for (var y = 0; y < entity.MaxArmor.GetLength(1); y++) - { - max += entity.MaxArmor[x, y]; - worn += Math.Max(0, entity.MaxArmor[x, y] - entity.Armor[x, y]); - } - return max > 0 ? worn / max : 0; - } - - // The purchase: the station charges BuyPrice, and `deliver` puts the goods where they go. Credits are checked - // and charged here, at the same boundary as TryRepair: a price equal to the credits held is affordable. - public static BuyResult TryBuy(ItemManager items, ItemInstance item, int quantity, ref int credits, Func deliver) - { - var price = BuyPrice(items, item, quantity); - if (price > credits) return BuyResult.ShortOfCredits; - if (!deliver()) return BuyResult.NoRoom; - credits -= price; - return BuyResult.Bought; - } - - // The purchase of `quantity` units of a station stack, delivered as one lot. A bay holds no stack above its - // design's MaxStack, so a stack the station holds is a lot already; a stack above it comes from outside a bay and is - // refused, as is a purchase of more than the stack holds or of a stack that holds nothing. All of that is refused - // before anything moves, so `deliver` moves units the station has and the charge is for the units it delivered. - public static BuyResult TryBuyLots(ItemManager items, SimpleCommodity stock, int quantity, ref int credits, Func deliver) - { - if (quantity < 1 || quantity > stock.Quantity || stock.Quantity > items.GetData(stock).MaxStack) return BuyResult.NoRoom; - return TryBuy(items, stock, quantity, ref credits, () => deliver(quantity)); - } - - // The quantity a Buy Quantity field may hold: what was typed, at most what the credits cover and what the station - // has, and never below one unit (a price the credits do not cover is then refused as short of credits). - public static int BuyableQuantity(ItemManager items, SimpleCommodity stock, int typed, int credits) => - Math.Max(1, Math.Min(Math.Min(typed, credits / BuyPrice(items, stock)), stock.Quantity)); - - // The sale: the item leaves the bay for one of the station's cargo bays and the station pays SellPrice. False, - // with the item in its bay and the credits unchanged, when no station bay can take it. - public static bool TrySell(EquippedCargoBay from, Entity station, ItemInstance item, ref int credits) - { - var price = SellPrice(station.ItemManager, item); - var moved = item is SimpleCommodity commodity - ? station.CargoBays.Any(bay => from.TryTransferItem(bay, commodity, commodity.Quantity)) - : station.CargoBays.Any(bay => from.TryTransferItem(bay, (CraftedItemInstance) item)); - if (!moved) return false; - credits += price; - return true; - } - - // The repair: armour and every durability go back to design and the station charges RepairCost. False, with - // nothing restored, when the credits fall short. - public static bool TryRepair(Entity entity, ref int credits) - { - var items = entity.ItemManager; - var cost = RepairCost(items, entity); - if (cost > credits) return false; - foreach (var gear in Gear(entity)) - if (items.GetData(gear) is EquippableItemData design && design.Durability > 0) - gear.Durability = design.Durability; - Array.Copy(entity.MaxArmor, entity.Armor, entity.MaxArmor.Length); - credits -= cost; - return true; - } - - // Equipment holds the hull itself, so the hull is in the sum once. - private static IEnumerable Gear(Entity entity) => - entity.Equipment.Select(equipped => equipped.EquippableItem) - .Concat(entity.CargoBays.Select(bay => bay.EquippableItem)) - .Concat(entity.DockingBays.Select(bay => bay.EquippableItem)); - - // Instance durability over the design's, for gear that wears; everything else is as good as new. - private static double Condition(ItemManager items, CraftedItemInstance item) - { - if (!(item is EquippableItem gear) || !(items.GetData(gear) is EquippableItemData design) || design.Durability <= 0) - return 1; - return Math.Max(0, Math.Min(1, gear.Durability / (double) design.Durability)); - } - - // The sell value of a price at a condition, rounded down. The one place the sell rounding lives: RepairShare - // prices the sell value a repair adds from the same function, so the two cannot round apart. - private static int SellValue(int price, double fraction, double condition) => - (int) Math.Floor(price * fraction * condition); - - // The share of the repair charge for one piece of gear: its wear at the repair fraction, rounded up, and never - // less than the sell value the repair adds, so mending before selling never nets credits. - private static long RepairShare(ItemManager items, EquippableItem gear, double fraction) - { - var price = items.GetPrice(gear); - var condition = Condition(items, gear); - var sellFraction = (double) items.GameplaySettings.SellFraction; - var added = SellValue(price, sellFraction, 1) - SellValue(price, sellFraction, condition); - return Math.Max(added, (long) Math.Ceiling((1 - condition) * price * fraction)); - } -} - -public enum BuyResult { Bought, ShortOfCredits, NoRoom } diff --git a/Assets/Scripts/ServerShared/StationServices.cs.meta b/Assets/Scripts/ServerShared/StationServices.cs.meta deleted file mode 100644 index c184b64d8..000000000 --- a/Assets/Scripts/ServerShared/StationServices.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: efc90d4ec994710468cd5df6ed2c2739 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/ServerShared/Steering.cs b/Assets/Scripts/ServerShared/Steering.cs deleted file mode 100644 index de477332f..000000000 --- a/Assets/Scripts/ServerShared/Steering.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System; -using CultMath; -using static CultMath.math; - -// The one law that turns a wanted heading into a facing command. Ship.Update reads only Ship.Turn; whoever -// wants the hull to face somewhere (the player's face-the-aim state, an agent state) asks here and writes Turn. -public static class Steering -{ - const float Deadband = .01f; - - // Positive is clockwise. Lateral component of the heading with sqrt shaping and a deadband; a heading - // behind the hull turns at full demand (its lateral component alone would vanish at exactly astern). - // A zero or non-finite heading holds course. - public static float Toward(Ship ship, float2 heading) - { - if (!float.IsFinite(heading.x) || !float.IsFinite(heading.y) || lengthsq(heading) < 1e-12f) return 0f; - var dir = normalize(ship.Direction); - var wanted = normalize(heading); - var d = dot(wanted, dir.Rotate(ItemRotation.Clockwise)); - if (dot(wanted, dir) < 0f) return d < 0f ? -1f : 1f; - if (abs(d) < Deadband) return 0f; - return sqrt(abs(d)) * sign(d); - } -} diff --git a/Assets/Scripts/ServerShared/Steering.cs.meta b/Assets/Scripts/ServerShared/Steering.cs.meta deleted file mode 100644 index bf9a98148..000000000 --- a/Assets/Scripts/ServerShared/Steering.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 8b84ac5db42877d45b7f6286cc2e2b93 \ No newline at end of file diff --git a/Assets/Scripts/ServerShared/Targeting.meta b/Assets/Scripts/ServerShared/Targeting.meta deleted file mode 100644 index 39f43376e..000000000 --- a/Assets/Scripts/ServerShared/Targeting.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 7c083d5830b0418cbf8e34158465d764 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/ServerShared/Targeting/BeltTargets.cs b/Assets/Scripts/ServerShared/Targeting/BeltTargets.cs deleted file mode 100644 index 3e12536c3..000000000 --- a/Assets/Scripts/ServerShared/Targeting/BeltTargets.cs +++ /dev/null @@ -1,300 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -using System; -using System.Collections.Generic; -using GameCult.Caching; -using CultMath; -using static CultMath.math; -using float2 = CultMath.float2; - -// Mining index: one belt's rocks as targets. Derived from the belt's data, the zone's settings and zone time when the -// zone builds the belt, and never saved. -// -// Rocks are grouped into bands of neighbouring orbit distance. Within a band they are sorted by where they stood on -// their orbits (in turns, as AsteroidBelt.Pose measures them) at the band's key time. A rock's turn at a later time is -// its key plus elapsed / period, and a band's periods lie close together, so the rocks near a point lie in one arc of -// keys, widened by elapsed time times the band's rate spread. A band sheared past ShearLimit is re-sorted at the -// current time, at most RekeyBudget bands per search, so no single search pays for the whole belt; one that is not -// re-sorted is still searched correctly through its wider arc. Each band is split into segments of consecutive keys, -// and each segment's part of the arc is a region, bounded by the annular sector it can occupy. -public sealed class BeltTargets : ITargetProvider -{ - private const int RocksPerBand = 256; - private const int RocksPerSegment = 32; - private const double ShearLimit = 1.0 / 64; - private const int RekeyBudget = 8; - - private readonly Zone _zone; - private readonly CultRecordKey _field; - private readonly AsteroidBeltData _data; - private readonly double[] _periods; - private readonly Band[] _bands; - // No rock of the belt, whole or worn, is wider than this (AsteroidSize's bound over every argument). - private readonly float _largestRadius; - - private sealed class Band - { - public float Inner, Outer; // the least and greatest orbit distance among the band's rocks - public double SlowestRate, FastestRate; // turns per second: 1 / period - public double KeyTime; - public int[] Rocks; - public double[] Keys; // each rock's turn at KeyTime, ascending, in [0, 1) - } - - public BeltTargets(Zone zone, CultRecordKey field, AsteroidBeltData data, PlanetSettings settings, double time) - { - _zone = zone; - _field = field; - _data = data; - var size = settings.AsteroidSize; - _largestRadius = size.Exponent > 0 ? max(abs(size.Minimum), abs(size.Maximum)) : float.PositiveInfinity; - - var count = data.Asteroids.Length; - _periods = new double[count]; - var order = new int[count]; - var distances = new float[count]; - for (var i = 0; i < count; i++) - { - order[i] = i; - distances[i] = data.Asteroids[i].Distance; - // The belt's own periods (Zone.PeriodAround), the very floats Pose divides by. - _periods[i] = zone.AsteroidBelts[field].Periods[i]; - } - Array.Sort(distances, order); - _bands = new Band[(count + RocksPerBand - 1) / RocksPerBand]; - for (var b = 0; b < _bands.Length; b++) - { - var start = b * RocksPerBand; - var length = Math.Min(RocksPerBand, count - start); - var band = new Band - { - Inner = distances[start], Outer = distances[start + length - 1], - SlowestRate = double.PositiveInfinity, FastestRate = double.NegativeInfinity, - Rocks = new int[length], Keys = new double[length] - }; - Array.Copy(order, start, band.Rocks, 0, length); - foreach (var rock in band.Rocks) - { - var rate = 1.0 / _periods[rock]; - band.SlowestRate = Math.Min(band.SlowestRate, rate); - band.FastestRate = Math.Max(band.FastestRate, rate); - } - Rekey(band, time); - _bands[b] = band; - } - } - - // Diagnostic only: how many bands have been re-sorted since the belt was built, so a test can pin the budget. - public long Rekeys { get; private set; } - - private void Rekey(Band band, double time) - { - Rekeys++; - band.KeyTime = time; - for (var j = 0; j < band.Rocks.Length; j++) - band.Keys[j] = Turn(time / _periods[band.Rocks[j]] + _data.Asteroids[band.Rocks[j]].Phase); - Array.Sort(band.Keys, band.Rocks); - } - - public void Regions(in TargetSearch search, List into) - { - var time = _zone.ExactTime; - var centre = _zone.GetOrbitPosition(_zone.Orbits[_data.Orbit.Key].Data.Parent.Key); - var offset = search.Position - centre; - var distance = length(offset); - var turn = Turn(atan2(offset.y, offset.x) / (2 * Math.PI)); - // Slack covers float rounding in Pose and in these bounds; it only ever widens a region. - var slack = 1e-4f * (_bands[_bands.Length - 1].Outer + distance) + 1e-3f; - var reach = search.Reach + slack; - var half = distance <= reach ? 1.0 : Math.Asin(reach / distance) / (2 * Math.PI) + 1e-6; - var budget = RekeyBudget; - - // The first band whose outer edge reaches the search. - int lo = 0, hi = _bands.Length; - while (lo < hi) - { - var mid = (lo + hi) / 2; - if (_bands[mid].Outer < distance - reach) lo = mid + 1; - else hi = mid; - } - for (var b = lo; b < _bands.Length && _bands[b].Inner <= distance + reach; b++) - { - var band = _bands[b]; - if (Math.Abs(time - band.KeyTime) * (band.FastestRate - band.SlowestRate) > ShearLimit && budget > 0) - { - Rekey(band, time); - budget--; - } - Drift(band, time, out var leastDrift, out var mostDrift); - var width = 2 * half + (mostDrift - leastDrift); - if (!(width < 1)) - { - AddSegments(search, b, 0, band.Keys.Length, centre, distance, turn, slack, into); - continue; - } - // Keys whose rock can now lie within half a window of the search's own turn. - var from = Turn(turn - half - mostDrift); - var to = from + width; - AddSegments(search, b, LowerBound(band.Keys, from), UpperBound(band.Keys, Math.Min(to, 1.0)), centre, distance, turn, slack, into); - if (to > 1) AddSegments(search, b, 0, UpperBound(band.Keys, to - 1), centre, distance, turn, slack, into); - } - } - - public void Candidates(in TargetSearch search, in TargetRegion region, List into) - { - var band = _bands[region.Group]; - for (var j = region.Start; j < region.End; j++) - { - var chunk = new ChunkId(_field, band.Rocks[j]); - if (_zone.ChunkExists(chunk)) into.Add(new TargetCandidate(chunk, _zone.ChunkPose(_field, chunk.Index).xy)); - } - } - - // The keys [start, end) of one band, one region per segment they cross, each bounded by the sector its rocks can - // occupy now: the band's distances, and the turns of its first and last key widened by the band's drift. - private void AddSegments(in TargetSearch search, int b, int start, int end, float2 centre, float distance, double turn, float slack, List into) - { - var band = _bands[b]; - Drift(band, _zone.ExactTime, out var leastDrift, out var mostDrift); - var crossSection = _zone.FieldCrossSection(_data); - for (var s = start; s < end; s = (s / RocksPerSegment + 1) * RocksPerSegment) - { - var e = Math.Min(end, (s / RocksPerSegment + 1) * RocksPerSegment); - var sector = new Sector - { - Inner = band.Inner, Outer = band.Outer, - From = band.Keys[s] + leastDrift - 1e-6, - Width = band.Keys[e - 1] - band.Keys[s] + (mostDrift - leastDrift) + 2e-6 - }; - sector.Range(distance, turn, out var nearest, out var farthest); - nearest = max(0f, nearest - slack); - sector.Bearing(search.Position - centre, out var bearing, out var bearingHalf); - var light = 0f; - foreach (var sun in _zone.Suns()) - { - var fromSun = sun.Orbit.Position - centre; - sector.Range(length(fromSun), Turn(atan2(fromSun.y, fromSun.x) / (2 * Math.PI)), out var sunNearest, out _); - light += Zone.SunLight(sun, max(0f, sunNearest - slack)); - } - var cells = _largestRadius / _zone.SchematicCellSize; - into.Add(new TargetRegion - { - Provider = this, - Group = b, Start = s, End = e, - Nearest = nearest, - Farthest = farthest + slack, - BearingCentre = bearing, - BearingHalfWidth = min((float) PI, bearingHalf + slack / max(distance, 1e-3f) + 1e-5f), - MaxVisibility = crossSection * PI * cells * cells * light * 1.0001f - }); - } - } - - private static void Drift(Band band, double time, out double least, out double most) - { - var elapsed = time - band.KeyTime; - least = Math.Min(elapsed * band.SlowestRate, elapsed * band.FastestRate); - most = Math.Max(elapsed * band.SlowestRate, elapsed * band.FastestRate); - } - - private static double Turn(double turns) => turns - Math.Floor(turns); - - private static int LowerBound(double[] keys, double value) - { - int lo = 0, hi = keys.Length; - while (lo < hi) - { - var mid = (lo + hi) / 2; - if (keys[mid] < value) lo = mid + 1; - else hi = mid; - } - return lo; - } - - private static int UpperBound(double[] keys, double value) - { - int lo = 0, hi = keys.Length; - while (lo < hi) - { - var mid = (lo + hi) / 2; - if (keys[mid] <= value) lo = mid + 1; - else hi = mid; - } - return lo; - } - - // An annular sector about the belt centre: distances [Inner, Outer], turns [From, From + Width] (a Width of 1 or - // more is the whole annulus). - private struct Sector - { - public float Inner, Outer; - public double From, Width; - - // The nearest and farthest a point `distance` from the centre at `turn` can be from any point of the sector. - public void Range(float distance, double turn, out float nearest, out float farthest) - { - double offAngle, farAngle; - if (Width >= 1) - { - offAngle = 0; - farAngle = Math.PI; - } - else - { - var into = Turn(turn - From); - offAngle = into <= Width ? 0 : Math.Min(into - Width, 1 - into) * 2 * Math.PI; - // The sector point farthest in angle: the antipode if the sector holds it, else the farther end. - farAngle = Turn(turn + .5 - From) <= Width - ? Math.PI - : Math.Max(Separation(turn, From), Separation(turn, From + Width)) * 2 * Math.PI; - } - if (offAngle == 0) - nearest = max(max(Inner - distance, distance - Outer), 0f); - else - { - // On the nearer edge ray: the closest point of the segment [Inner, Outer] along it. - var along = clamp(distance * (float) Math.Cos(offAngle), Inner, Outer); - nearest = Apart(distance, along, offAngle); - } - farthest = max(Apart(distance, Inner, farAngle), Apart(distance, Outer, farAngle)); - } - - // A circle that holds the sector, seen from `from` (relative to the belt centre): the bearing to its centre - // and the half-width of the bearings it covers (pi when `from` is inside it). - public void Bearing(float2 from, out float centre, out float halfWidth) - { - float2 middle; - float radius; - if (Width >= .5) - { - middle = float2.zero; - radius = Outer; - } - else - { - var middleTurn = (From + Width / 2) * 2 * Math.PI; - var halfAngle = Width * Math.PI; - var middleRadius = (Inner + Outer) / 2; - middle = middleRadius * float2((float) Math.Cos(middleTurn), (float) Math.Sin(middleTurn)); - radius = max(Apart(middleRadius, Inner, halfAngle), Apart(middleRadius, Outer, halfAngle)); - } - var toMiddle = middle - from; - var apart = length(toMiddle); - centre = atan2(toMiddle.y, toMiddle.x); - halfWidth = apart <= radius ? (float) PI : asin(radius / apart); - } - - // How far apart two points are at distances a and b from the centre, `angle` radians apart about it. - private static float Apart(float a, float b, double angle) => - (float) Math.Sqrt(Math.Max(0, (double) a * a + (double) b * b - 2.0 * a * b * Math.Cos(angle))); - - // The angle in turns between two turns, in [0, .5]. - private static double Separation(double a, double b) - { - var d = Turn(a - b); - return Math.Min(d, 1 - d); - } - } -} diff --git a/Assets/Scripts/ServerShared/Targeting/BeltTargets.cs.meta b/Assets/Scripts/ServerShared/Targeting/BeltTargets.cs.meta deleted file mode 100644 index 853bba9c2..000000000 --- a/Assets/Scripts/ServerShared/Targeting/BeltTargets.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: d33fc585810446f7b0a9319196c74633 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/ServerShared/Targeting/EntityTargets.cs b/Assets/Scripts/ServerShared/Targeting/EntityTargets.cs deleted file mode 100644 index f4103e6d0..000000000 --- a/Assets/Scripts/ServerShared/Targeting/EntityTargets.cs +++ /dev/null @@ -1,39 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -using System.Collections.Generic; -using static CultMath.math; - -// Mining index: entities as targets. Perception stays Entity's: the only entities a search can be offered are those -// already in its observer's VisibleEntities, so the one region carries no visibility bound (they are already seen). -public sealed class EntityTargets : ITargetProvider -{ - public void Regions(in TargetSearch search, List into) - { - var observer = search.Observer; - if (observer == null || observer.VisibleEntities.Count == 0) return; - var nearest = float.PositiveInfinity; - var farthest = 0f; - foreach (var entity in observer.VisibleEntities) - { - var distance = length(entity.Position.xz - search.Position); - nearest = min(nearest, distance); - farthest = max(farthest, distance); - } - into.Add(new TargetRegion - { - Provider = this, - Nearest = nearest, - Farthest = farthest, - BearingHalfWidth = PI, - MaxVisibility = float.PositiveInfinity - }); - } - - public void Candidates(in TargetSearch search, in TargetRegion region, List into) - { - foreach (var entity in search.Observer.VisibleEntities) - into.Add(new TargetCandidate(entity, entity.Position.xz)); - } -} diff --git a/Assets/Scripts/ServerShared/Targeting/EntityTargets.cs.meta b/Assets/Scripts/ServerShared/Targeting/EntityTargets.cs.meta deleted file mode 100644 index 49bb99318..000000000 --- a/Assets/Scripts/ServerShared/Targeting/EntityTargets.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 1db47cd187504dbb97994e4b8c436ef1 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/ServerShared/Targeting/TargetingIndex.cs b/Assets/Scripts/ServerShared/Targeting/TargetingIndex.cs deleted file mode 100644 index 62f5cf6da..000000000 --- a/Assets/Scripts/ServerShared/Targeting/TargetingIndex.cs +++ /dev/null @@ -1,155 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -using System.Collections.Generic; -using CultMath; -using static CultMath.math; -using float2 = CultMath.float2; - -// Mining index (docs/aetheria-release-map.md, L3-L5; operator 2026-10-01: "don't specialize the indexing too much -// towards asteroid belts"): one targeting index per zone (Zone.Targets), fed by providers. It owns which targetable -// things can lie in a region and an upper bound on how visible they can be. Each provider owns its own things' -// motion and bounds. Whether one target is actually visible stays with Entity (ChunkVisible, VisibleEntities): every -// answer here is a superset the caller filters exactly. Nothing in the index names a belt or a rock. - -// One thing that can be targeted, with where it stands on the plane now. -public readonly struct TargetCandidate -{ - public readonly TargetRef Target; - public readonly float2 Position; - - public TargetCandidate(TargetRef target, float2 position) - { - Target = target; - Position = position; - } -} - -// Who is searching, from where, how far, and how well they can see. A null Observer perceives no entities. -// ReachPerVisibility is Entity.DetectionReachPerVisibility: no target of visibility v farther than v times it can be -// detected. Infinity applies no visibility bound. -public readonly struct TargetSearch -{ - public readonly float2 Position; - public readonly float Reach; - public readonly Entity Observer; - public readonly float ReachPerVisibility; - - public TargetSearch(float2 position, float reach, Entity observer = null, float reachPerVisibility = float.PositiveInfinity) - { - Position = position; - Reach = reach; - Observer = observer; - ReachPerVisibility = reachPerVisibility; - } -} - -// A group of a provider's things, with bounds that hold for every one of them at the time it was made: planar -// distance from the searcher in [Nearest, Farthest], bearing from the searcher (radians, as atan2 measures it) -// within BearingHalfWidth of BearingCentre (pi means any bearing), and visibility at most MaxVisibility. -// Group, Start and End are the provider's own: the index only hands the region back to it. -public struct TargetRegion -{ - public ITargetProvider Provider; - public int Group, Start, End; - public float Nearest, Farthest; - public float BearingCentre, BearingHalfWidth; - public float MaxVisibility; - - // Whether anything in this region can both lie within reach and be detected by the searcher. - public bool CanHold(in TargetSearch search) => - !(Nearest > search.Reach) && !(Nearest > MaxVisibility * search.ReachPerVisibility); -} - -public interface ITargetProvider -{ - // Regions that together hold every one of this provider's things within the search's reach, added to `into`. - void Regions(in TargetSearch search, List into); - - // The things of one region this provider made for this search, with their positions now, added to `into`. - void Candidates(in TargetSearch search, in TargetRegion region, List into); -} - -// A best-first question: the candidate with the least key wins. Bound must never exceed the key of any candidate the -// region holds (positive infinity skips the region). Key returns false for a candidate that is not eligible. -// Precedes breaks a tie between two equal keys. -public interface ITargetKey -{ - float Bound(in TargetRegion region); - bool Key(in TargetCandidate candidate, out float key); - bool Precedes(in TargetCandidate a, in TargetCandidate b); -} - -public sealed class TargetingIndex -{ - private readonly List _providers = new List(); - private readonly List _regions = new List(); - private readonly List _candidates = new List(); - private readonly List<(float bound, int region)> _order = new List<(float, int)>(); - - // Diagnostic only: how many candidates the index has posed and tested, ever. Tests pin a query's cost with it - // rather than with timing. - public long Examined { get; private set; } - - public void Add(ITargetProvider provider) => _providers.Add(provider); - - // Every candidate within the search's reach whose region can be detected, written into `into` (cleared first), - // in no particular order. Reach is exact; detection is only bounded, so the caller still tests it. - public void Within(in TargetSearch search, List into) - { - into.Clear(); - _regions.Clear(); - foreach (var provider in _providers) provider.Regions(search, _regions); - foreach (var region in _regions) - { - if (!region.CanHold(search)) continue; - _candidates.Clear(); - region.Provider.Candidates(search, region, _candidates); - foreach (var candidate in _candidates) - { - Examined++; - if (length(candidate.Position - search.Position) <= search.Reach) into.Add(candidate); - } - } - } - - // The eligible candidate within reach with the least key, or false if there is none. Regions are opened in order - // of their bound, and the search stops at the first region whose bound is greater than the best key found: - // Hjaltason and Samet's best-first browsing over the providers' flat region sets. - public bool Best(in TargetSearch search, TKey query, out TargetCandidate best) where TKey : ITargetKey - { - best = default; - var found = false; - var bestKey = float.PositiveInfinity; - _regions.Clear(); - _order.Clear(); - foreach (var provider in _providers) provider.Regions(search, _regions); - for (var i = 0; i < _regions.Count; i++) - { - if (!_regions[i].CanHold(search)) continue; - var bound = query.Bound(_regions[i]); - if (!float.IsPositiveInfinity(bound)) _order.Add((bound, i)); - } - _order.Sort((a, b) => a.bound.CompareTo(b.bound)); - foreach (var (bound, index) in _order) - { - if (found && bound > bestKey) break; - _candidates.Clear(); - var region = _regions[index]; - region.Provider.Candidates(search, region, _candidates); - foreach (var candidate in _candidates) - { - Examined++; - if (!(length(candidate.Position - search.Position) <= search.Reach) || !query.Key(candidate, out var key)) continue; - if (!found || key < bestKey || key == bestKey && query.Precedes(candidate, best)) - { - best = candidate; - bestKey = key; - found = true; - } - } - } - return found; - } -} diff --git a/Assets/Scripts/ServerShared/Targeting/TargetingIndex.cs.meta b/Assets/Scripts/ServerShared/Targeting/TargetingIndex.cs.meta deleted file mode 100644 index 4b40c10b0..000000000 --- a/Assets/Scripts/ServerShared/Targeting/TargetingIndex.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 9fef7cc648f2498ebd24e1d0ca61b5c3 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/ServerShared/ThrustAllocator.cs b/Assets/Scripts/ServerShared/ThrustAllocator.cs deleted file mode 100644 index 148b98d29..000000000 --- a/Assets/Scripts/ServerShared/ThrustAllocator.cs +++ /dev/null @@ -1,112 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -using System; -using CultMath; - -/// -/// Turns intent (which way to go, which way to turn) into every thruster's throttle, whatever the thrusters' actual -/// strength and position. One per ship. A column is one thruster's effect per unit throttle: x starboard acceleration, -/// y forward acceleration, z clockwise yaw rate in rad/s. Throttles are bounded to [0,1]. -/// -/// One solve per call over the n throttles and four error variables (the unwanted or -/// missing translation on each half-axis, paid for linearly). Yaw is a heavily weighted row, so a hold is exact and a -/// turn is served first; the linear translation cost means the actuator with the least translation per unit of turn -/// serves first and the next joins only as it saturates. Nothing classifies a column as attitude or drive: the onset -/// at which a second actuator joins a turn falls out of the columns. -/// -public sealed class ThrustAllocator -{ - const float TranslationWeight = 100f; - const float YawWeight = 1000f; - const float ErrorCostWeight = .3f; - const float ErrorCostOffset = 10f; - const float Ridge = .1f; - const float ErrorMax = 2f; - const double KktRelativeTolerance = 1e-12; - const int ErrorVariables = 4; - const int FixedRows = 3 + ErrorVariables; - - int _columns = -1; - float[] _a, _b, _lo, _hi, _x, _workspace; - - /// - /// Solves the throttles for the intent. is the throttle lock: every thruster whose - /// column pushes forward is bounded below at full, the stick is ignored (forward is the only translation asked, so - /// nothing fires against the floored drives), and the turn is served by what remains. - /// - public void Allocate(ReadOnlySpan columns, float2 move, float turn, Span throttle, bool forwardFloor = false) - { - var n = columns.Length; - if (n != _columns) Resize(n); - for (var i = 0; i < n; i++) throttle[i] = 0; - if (forwardFloor) move = new float2(0, 1); - for (var i = 0; i < n; i++) _lo[i] = forwardFloor && columns[i].y > 0 ? 1f : 0f; - - // Nothing asked, nothing fired: that is a fact about the intent, decided before the solve. The solver's warm - // start is left as the last solved point, which is where the next non-zero call resumes. - if (Intent(move, turn, 0) == 0 && Intent(move, turn, 1) == 0 && Intent(move, turn, 2) == 0) return; - - var vars = n + ErrorVariables; - var rows = FixedRows + n; - - // Rows 0 and 1 are the translation axes (starboard, forward), row 2 the yaw. - for (var axis = 0; axis < 3; axis++) - { - float plus = 0, minus = 0; - for (var i = 0; i < n; i++) - { - var c = Component(columns[i], axis); - if (c > 0) plus += c; - else if (c < 0) minus -= c; - } - var extreme = Math.Max(plus, minus); - var intent = Intent(move, turn, axis); - var weight = axis == 2 ? YawWeight : TranslationWeight; - // Intent is a fraction of the half-axis extreme it points into. - var demand = intent >= 0 ? intent * plus : intent * minus; - var scale = extreme > 0 ? weight / extreme : 0f; - var row = axis * vars; - for (var i = 0; i < n; i++) _a[row + i] = Component(columns[i], axis) * scale; - _b[axis] = demand * scale; - if (axis < 2) - { - var errorWeight = extreme > 0 ? weight : 0f; - _a[row + n + 2 * axis] = -errorWeight; - _a[row + n + 2 * axis + 1] = errorWeight; - } - } - - // A linear cost on each error variable, as w*e = -w*kappa, and a ridge on each throttle. - for (var k = 0; k < ErrorVariables; k++) - { - _a[(3 + k) * vars + n + k] = ErrorCostWeight; - _b[3 + k] = -ErrorCostWeight * ErrorCostOffset; - } - for (var i = 0; i < n; i++) _a[(FixedRows + i) * vars + i] = Ridge; - - var status = BoundedLeastSquares.Solve(rows, vars, _a, _b, _lo, _hi, _x, _workspace, out _, KktRelativeTolerance); - if (status == BoundedLeastSquaresStatus.InvalidInput) return; - for (var i = 0; i < n; i++) throttle[i] = _x[i]; - } - - static float Intent(float2 move, float turn, int axis) => - Math.Min(Math.Max(axis == 0 ? move.x : axis == 1 ? move.y : turn, -1f), 1f); - - static float Component(float3 c, int axis) => axis == 0 ? c.x : axis == 1 ? c.y : c.z; - - void Resize(int n) - { - _columns = n; - var vars = n + ErrorVariables; - var rows = FixedRows + n; - _a = new float[rows * vars]; - _b = new float[rows]; - _lo = new float[vars]; - _hi = new float[vars]; - _x = new float[vars]; - _workspace = new float[BoundedLeastSquares.WorkspaceLength(vars)]; - for (var i = 0; i < vars; i++) _hi[i] = i < n ? 1f : ErrorMax; - } -} diff --git a/Assets/Scripts/ServerShared/ThrustAllocator.cs.meta b/Assets/Scripts/ServerShared/ThrustAllocator.cs.meta deleted file mode 100644 index d7b82c1b3..000000000 --- a/Assets/Scripts/ServerShared/ThrustAllocator.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 5b0e3f7a9c2d4e61a8f4d3c7b1e90a26 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/ServerShared/VapourClouds.cs b/Assets/Scripts/ServerShared/VapourClouds.cs deleted file mode 100644 index 9f4a44603..000000000 --- a/Assets/Scripts/ServerShared/VapourClouds.cs +++ /dev/null @@ -1,32 +0,0 @@ -using CultMath; -using static CultMath.math; -using float2 = CultMath.float2; - -// A vented vapour cloud: a free-floating disc that thins every sensor sight line through it. Not an Entity, -// never priced or rolled, never saved. Zone.Vent is the only adder and Zone's cloud step the only remover; -// Zone.Obscuration is the one reader detection uses. -public sealed class VapourCloud -{ - public FloatingBodyId Id; - public KinematicBody Body; - public double VentedAt; - public float Lifetime; - public float Radius; - // The opacity at the moment of venting; it fades linearly to nothing over Lifetime. - public float Opacity; - public Entity Venter; - - // A cloud with no lifetime divides by zero; saturate maps the NaN and the infinity to nothing left. - public float OpacityAt(double now) => - saturate(Opacity) * saturate(1f - (float) (now - VentedAt) / Lifetime); - - // Whether the segment a-b reaches the disc: the closest point of the segment to the centre lies within the - // radius. A cloud past either end of the segment touches it only if it is near that end. - public bool Touches(float2 a, float2 b) - { - var ab = b - a; - var length2 = lengthsq(ab); - var t = length2 > 0f ? saturate(dot(Body.Position - a, ab) / length2) : 0f; - return lengthsq(Body.Position - (a + ab * t)) <= Radius * Radius; - } -} diff --git a/Assets/Scripts/ServerShared/VapourClouds.cs.meta b/Assets/Scripts/ServerShared/VapourClouds.cs.meta deleted file mode 100644 index cdaa4b80d..000000000 --- a/Assets/Scripts/ServerShared/VapourClouds.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: ced45a9738974452b0065b57ee527e8a -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/ServerShared/VerseGrammar.cs b/Assets/Scripts/ServerShared/VerseGrammar.cs deleted file mode 100644 index 00e24833d..000000000 --- a/Assets/Scripts/ServerShared/VerseGrammar.cs +++ /dev/null @@ -1,108 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -using System; -using System.Collections.Generic; -using GameCult.Caching; -using MessagePack; - -// The verse grammar (aetheria-release, cut verse-grammar; ghostlight-verse rulings verse-grammar-home-ruled and -// verse-verbs-two-render-paths): the verbs a Ghostlight-simulated Aetheria world may use, each rendering by exactly one -// path the game already has, with typed participant roles. Aetheria owns which verbs exist and how each renders; -// Ghostlight owns what each does to world state. Nothing in the game runtime reads these documents. -[CultDocument("aetheria.verse_grammar", "1"), CultGlobal, MessagePackObject] -public class VerseGrammar -{ - [Key(1)] public int Revision; - [Key(2)] public string Description; -} - -// How a verb is shown: filmed in-engine as a ship action, or presented as an Aetheria conversation. -public enum VerseRenderPath -{ - ShipAction = 1, - Conversation = 2, -} - -// What kind of thing a role binds. -public enum VerseReferentKind -{ - Person = 1, - Faction = 2, - Population = 3, - Place = 4, - Cargo = 5, -} - -[MessagePackObject] -public class VerseRole -{ - [Key(1)] public string Name; - [Key(2)] public VerseReferentKind Binds; -} - -// The actor is the invoking subject and is never a role. -[CultDocument("aetheria.verse_verb", "1"), MessagePackObject] -public class VerseVerb -{ - [CultName, Key(1)] public string Name; - [Key(2)] public VerseRenderPath RenderPath; - [Key(3)] public VerseRole[] Roles = Array.Empty(); - [Key(4)] public string Description; -} - -public static class VerseGrammarValidation -{ - public const int VerbNameMaxLength = 48; - public const int RoleNameMaxLength = 32; - - // The invoking subject, never a role (Ghostlight refuses a world affordance that names it: ReservedRole). - public const string ActorRole = "actor"; - - // Canonical: a lower-case letter, then lower-case letters, digits and underscores, at most maxLength characters. - private static bool Canonical(string name, int maxLength) - { - if (name == null || name.Length == 0 || name.Length > maxLength) return false; - if (name[0] < 'a' || name[0] > 'z') return false; - foreach (var c in name) - if (!((c >= 'a' && c <= 'z') || (c >= '0' && c <= '9') || c == '_')) return false; - return true; - } - - // Every verb valid and no two sharing a name: a verb is found by name (Ghostlight refuses DuplicateAffordanceKind). - public static void ValidateAll(IEnumerable verbs) - { - var seen = new HashSet(StringComparer.Ordinal); - foreach (var verb in verbs) - { - Validate(verb); - if (!seen.Add(verb.Name)) - throw new InvalidOperationException($"VerseVerb \"{verb.Name}\": duplicate verb name."); - } - } - - // Canonical names, unique role names, defined enum values. A failure names the field and the rule, and the verb once - // its name is known canonical; it never prints a value the author wrote that is itself the fault. - public static void Validate(VerseVerb verb) - { - if (!Canonical(verb.Name, VerbNameMaxLength)) - throw new InvalidOperationException($"VerseVerb.Name: not a canonical verb name ([a-z][a-z0-9_], 1 to {VerbNameMaxLength} characters)."); - if (!Enum.IsDefined(typeof(VerseRenderPath), verb.RenderPath)) - throw new InvalidOperationException($"VerseVerb \"{verb.Name}\" RenderPath: not a defined render path."); - if (verb.Roles == null) - throw new InvalidOperationException($"VerseVerb \"{verb.Name}\" Roles: missing."); - var seen = new HashSet(StringComparer.Ordinal); - foreach (var role in verb.Roles) - { - if (role == null || !Canonical(role.Name, RoleNameMaxLength)) - throw new InvalidOperationException($"VerseVerb \"{verb.Name}\" Roles.Name: not a canonical role name ([a-z][a-z0-9_], 1 to {RoleNameMaxLength} characters)."); - if (role.Name == ActorRole) - throw new InvalidOperationException($"VerseVerb \"{verb.Name}\" Roles.Name: reserved for the invoking subject, never a role."); - if (!seen.Add(role.Name)) - throw new InvalidOperationException($"VerseVerb \"{verb.Name}\" Roles.Name: duplicate role name."); - if (!Enum.IsDefined(typeof(VerseReferentKind), role.Binds)) - throw new InvalidOperationException($"VerseVerb \"{verb.Name}\" Roles.Binds: not a defined referent kind."); - } - } -} diff --git a/Assets/Scripts/ServerShared/VerseGrammar.cs.meta b/Assets/Scripts/ServerShared/VerseGrammar.cs.meta deleted file mode 100644 index 084f027cb..000000000 --- a/Assets/Scripts/ServerShared/VerseGrammar.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 3f1a7c52d9e84b6aa0c15e7b2d4f8a91 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/ServerShared/WellTree.cs b/Assets/Scripts/ServerShared/WellTree.cs deleted file mode 100644 index 5f9f408e6..000000000 --- a/Assets/Scripts/ServerShared/WellTree.cs +++ /dev/null @@ -1,435 +0,0 @@ -using System; -using System.Collections.Generic; -using GameCult.Caching; -using CultMath; -using static CultMath.math; -using float2 = CultMath.float2; - -/// -/// An orbit as the well tree reads it: where it hangs on the tree and the mass of the well-bearing body on it (0 for none). -/// Extent is the outermost distance from the parent of anything riding this orbit's rail (a belt orbit: its outermost -/// asteroid; any other orbit: its Distance). Anchor is a parentless orbit's stationary position, ignored with a parent. -/// -public readonly struct WellNode -{ - public readonly CultRecordKey Key, Parent; - public readonly float Distance, Phase, Mass, Extent; - public readonly float2 Anchor; - - public WellNode(CultRecordKey key, CultRecordKey parent, float distance, float phase, float mass, float extent, float2 anchor) - { - Key = key; - Parent = parent; - Distance = distance; - Phase = phase; - Mass = mass; - Extent = extent; - Anchor = anchor; - } -} - -/// -/// The one owner of which gravity terms a zone has: the orbit tree turned into band terms (GravityField is the law of one -/// term). Built once from the pack's orbits and the authored curves, never reading time; the caller passes positions. -/// -/// Every node F (a body, or a bodyless node with its ring group standing in for the body) contributes at its own position -/// c(m_F) U(eps(m_F), L_F, B_F) + c(M_F) [ U(eps(M_F), max(B_F, Gamma Lam_F), Lam_F) - U(eps(M_F), L_F, B_F) ] -/// m_F is the body's mass, M_F the family's, c and eps the WellStrength and RocheLimit curves. L_F is the outermost -/// child's extent: inside it the node pulls exactly as its body alone. B_F, the support, bounds every descendant term: -/// beyond it the family pulls exactly as one body of mass M_F, out to max(B_F, Gamma Lam_F), and is gone at its reach -/// Lam_F. A zone's sole massive root has infinite reach, so its far field is exactly c(M_zone). A zone of several massive -/// roots (subzones) has one zone node, which is not an orbit: at the roots' centre of mass it owns the only global term, -/// c(M_zone) U_global less c(M_zone) U(eps, A, Beta A), nothing inside A and the whole zone as one body beyond Beta A; -/// each root is bounded to its own subzone (SubzoneReach). -/// A body with no massive descendants is one term c(m) U(eps(m), Gamma Lam, Lam). Beyond a node's reach its whole -/// subtree contributes exactly nothing, so Force and Potential skip it: the walk is exact, not an approximation. -/// -public sealed class WellTree -{ - /// Orbits whose distances differ by no more than this are on one ring (a binary, a ring of siblings). - public const float RingWindow = .1f; - - /// A band term of the field: Strength x GravityField's U(Softening, Inner, Outer) at Node's position, less Reference. - public readonly struct Term - { - public readonly CultRecordKey Node; - public readonly float Strength, Softening, Inner, Outer, Reference; - - public Term(CultRecordKey node, float strength, float softening, float inner, float outer, float reference) - { - Node = node; - Strength = strength; - Softening = softening; - Inner = inner; - Outer = outer; - Reference = reference; - } - } - - private readonly Dictionary _index = new Dictionary(); - private CultRecordKey[] _key; - private int[][] _kids; - private int[] _roots; - private int[][] _ring; - private int[] _termStart, _termCount; - private float[] _distance, _phase, _reach, _support, _extent; - private float2[] _anchor; - private int[] _massiveRoots; - private float _packRadius; - private int _zoneStart, _zoneCount; - private Term[] _terms; - - /// Where the zone node's terms sit (the family-mass-weighted mean of the massive roots' anchors); meaningful when it has terms. - public float2 Centre { get; private set; } - - /// Every term of the zone, grouped by node, the zone node's last (its Node is unset: it sits at Centre): what the lowering uploads and the shader sums. - public IReadOnlyList Terms => _terms; - - private WellTree() { } - - /// A node's reach in its parent's field (+inf for a zone's sole massive root; a subzone's radius for a root of several); 0 for an orbit that carries no mass. - public float Reach(CultRecordKey node) => _reach[_index[node]]; - - /// A node's support B: every term of its descendants lies inside it, so beyond it the family is one body. - public float Support(CultRecordKey node) => _support[_index[node]]; - - /// - /// A well's strength and softening at a mass, from the authored curves (the one place they are read and checked). - /// A mass of 0 is no well. - /// - public static (float Strength, float Softening) Curves(PlanetSettings settings, float mass) - { - var strength = settings.WellStrength.Evaluate(mass); - var softening = settings.RocheLimit.Evaluate(mass); - if (!(strength >= 0f) || float.IsInfinity(strength)) - throw new InvalidOperationException("A body's well strength must be finite and not negative (PlanetSettings.WellStrength)."); - if (strength > 0 && !(softening > 0f && !float.IsInfinity(softening))) - throw new InvalidOperationException("A body's Roche limit, which is its softening, must be positive and finite (PlanetSettings.RocheLimit)."); - return (strength, softening); - } - - /// - /// The tree of a zone's orbits. `packRadius` is where the global terms are zero: each carries its own potential there - /// as its Reference (a bounded term is already 0 beyond its outer edge, so it needs none). - /// - public static WellTree Build(IReadOnlyList nodes, PlanetSettings settings, float packRadius) - { - var tree = new WellTree(); - var n = nodes.Count; - tree._key = new CultRecordKey[n]; - tree._distance = new float[n]; - tree._phase = new float[n]; - tree._extent = new float[n]; - tree._anchor = new float2[n]; - tree._packRadius = packRadius; - for (var i = 0; i < n; i++) - { - tree._extent[i] = nodes[i].Extent; - tree._anchor[i] = nodes[i].Anchor; - tree._index[nodes[i].Key] = i; - tree._key[i] = nodes[i].Key; - tree._distance[i] = nodes[i].Distance; - tree._phase[i] = nodes[i].Phase; - } - - var parent = new int[n]; - var kids = new List[n]; - var depth = new int[n]; - for (var i = 0; i < n; i++) kids[i] = new List(); - for (var i = 0; i < n; i++) - { - parent[i] = nodes[i].Parent.IsSet() && tree._index.TryGetValue(nodes[i].Parent, out var p) ? p : -1; - if (parent[i] >= 0) kids[parent[i]].Add(i); - } - for (var i = 0; i < n; i++) - for (var a = parent[i]; a >= 0; a = parent[a]) depth[i]++; - var roots = new List(); - for (var i = 0; i < n; i++) - if (parent[i] < 0) roots.Add(i); - tree._roots = roots.ToArray(); - var deepestFirst = new int[n]; - for (var i = 0; i < n; i++) deepestFirst[i] = i; - Array.Sort(deepestFirst, (x, y) => depth[y] != depth[x] ? depth[y].CompareTo(depth[x]) : x.CompareTo(y)); - - var body = new float[n]; // the body's own mass - var family = new float[n]; // the family's mass M_F - for (var i = 0; i < n; i++) family[i] = body[i] = nodes[i].Mass; - foreach (var i in deepestFirst) - if (parent[i] >= 0) family[parent[i]] += family[i]; - - // Massive roots are the zone's subzones; with two or more, their centre of mass is the zone node's position. - var massive = new List(); - foreach (var r in roots) - if (family[r] > 0) massive.Add(r); - tree._massiveRoots = massive.ToArray(); - var centre = float2.zero; - var total = 0f; - foreach (var r in massive) - { - centre += tree._anchor[r] * family[r]; - total += family[r]; - } - tree.Centre = total > 0f ? centre / total : float2.zero; - - tree._kids = new int[n][]; - var ring = tree._ring = new int[n][]; - for (var i = 0; i < n; i++) - { - tree._kids[i] = kids[i].ToArray(); - ring[i] = RingOf(kids[i], family, tree._distance); - } - - BuildReaches(tree, parent, body, family, ring, deepestFirst, out var lower, out var group); - for (var i = 0; i < n; i++) - if (body[i] > 0) ring[i] = null; // a ring stands in for a body only on a bodyless node - tree.EmitTerms(parent, body, family, ring, lower, group, settings, packRadius); - return tree; - } - - // The massive children of a node at its innermost massive distance, within RingWindow of it; null when there are none. - private static int[] RingOf(List kids, float[] family, float[] distance) - { - var inner = float.PositiveInfinity; - foreach (var k in kids) - if (family[k] > 0) inner = Math.Min(inner, distance[k]); - if (float.IsPositiveInfinity(inner)) return null; - var members = new List(); - foreach (var k in kids) - if (family[k] > 0 && distance[k] - inner <= RingWindow) members.Add(k); - return members.ToArray(); - } - - // The massive children of a bodyless node that stand in for its body: their mass, the ring's distance and its support. - private readonly struct RingGroup - { - public readonly float Mass, Inner, Support; - public RingGroup(float mass, float inner, float support) - { - Mass = mass; - Inner = inner; - Support = support; - } - } - - // Children before parents: a family's support needs its children's reaches. lower = L_F, the outermost child's extent. - private static void BuildReaches(WellTree t, int[] parent, float[] body, float[] family, int[][] ring, int[] order, - out float[] lower, out RingGroup[] group) - { - var n = parent.Length; - var d = t._distance; - lower = new float[n]; - group = new RingGroup[n]; - t._support = new float[n]; - t._reach = new float[n]; - foreach (var i in order) - { - var low = 0f; - foreach (var k in t._kids[i]) low = Math.Max(low, t._extent[k]); - var support = GravityField.Beta * low; - foreach (var k in t._kids[i]) support = Math.Max(support, t._extent[k] + t._reach[k]); - if (family[i] > 0 && body[i] <= 0) - { - // Bodyless: its ring group stands in for a body (it has massive children, or it would carry no mass). - var inner = float.PositiveInfinity; - var mass = 0f; - foreach (var j in ring[i]) - { - inner = Math.Min(inner, d[j]); - mass += family[j]; - } - var ringSupport = GravityField.Beta * inner; - foreach (var j in ring[i]) ringSupport = Math.Max(ringSupport, d[j] + t._reach[j]); - low = Math.Max(low, ringSupport); - support = Math.Max(support, GravityField.Beta * low); - group[i] = new RingGroup(mass, inner, ringSupport); - } - lower[i] = low; - t._support[i] = support; - if (family[i] <= 0) continue; - var floor = GravityField.Beta * support; - var p = parent[i]; - float reach; - if (p < 0) reach = t.SubzoneReach(i, floor); - else if (body[p] <= 0 && ring[p] != null && ring[p].Length >= 2 && Array.IndexOf(ring[p], i) >= 0) - reach = Math.Max(GravityField.RingReach * d[i], floor); - else reach = Math.Max(GravityField.Reach * d[i], floor); - t._reach[i] = reach > 0f ? reach : 0f; - } - } - - // A root's reach: the floor (Beta x support) or the subzone reach, whichever is more. The subzone shape is decided in the - // public static SubzoneReach (multi-root-isolated-subzones): the generator calls the same function, so Reach x the nearest - // root's distance is spelled once and the roots' windows are fitted to it (root-window-floor). - private float SubzoneReach(int root, float floor) - { - var anchors = new List(); - foreach (var other in _massiveRoots) anchors.Add(_anchor[other]); - return Math.Max(SubzoneReach(anchors, Array.IndexOf(_massiveRoots, root)), floor); - } - - /// - /// A subzone root's reach among the zone's massive roots' anchors: a sole massive root is the whole zone (+inf, so its - /// global term is the far field); with several, each root is bounded to GravityField.Reach x the distance to the nearest - /// other root (multi-root-isolated-subzones). The superposed-inside option is not a change to this return: it needs every - /// root's support, and roots are processed one at a time. - /// - public static float SubzoneReach(IReadOnlyList anchors, int root) - { - if (anchors.Count < 2) return float.PositiveInfinity; - var nearest = float.PositiveInfinity; - for (var other = 0; other < anchors.Count; other++) - if (other != root) nearest = Math.Min(nearest, length(anchors[other] - anchors[root])); - return GravityField.Reach * nearest; - } - - private void EmitTerms(int[] parent, float[] body, float[] family, int[][] ring, float[] lower, RingGroup[] group, - PlanetSettings settings, float packRadius) - { - var n = parent.Length; - var terms = new List(); - _termStart = new int[n]; - _termCount = new int[n]; - for (var i = 0; i < n; i++) - { - _termStart[i] = terms.Count; - if (family[i] <= 0 || !(_reach[i] > 0f)) continue; - var global = float.IsPositiveInfinity(_reach[i]); - var fadeFrom = global ? float.PositiveInfinity : Math.Max(_support[i], GravityField.Gamma * _reach[i]); - void Add(float strength, float softening, float inner, float outer) => terms.Add(new Term(_key[i], strength, softening, inner, - outer, float.IsPositiveInfinity(outer) ? strength * GravityField.Potential(softening, inner, outer, packRadius) : 0f)); - if (body[i] > 0 && family[i] <= body[i]) - { - var (c, eps) = Curves(settings, body[i]); - Add(c, eps, fadeFrom, _reach[i]); - _termCount[i] = terms.Count - _termStart[i]; - continue; - } - if (body[i] > 0) - { - var (c, eps) = Curves(settings, body[i]); - Add(c, eps, lower[i], _support[i]); - } - else - { - var (c, eps) = Curves(settings, group[i].Mass); - Add(c, eps, lower[i], _support[i]); - Add(-c, eps, group[i].Inner, group[i].Support); - } - var (cf, ef) = Curves(settings, family[i]); - Add(cf, ef, fadeFrom, _reach[i]); - Add(-cf, ef, lower[i], _support[i]); - _termCount[i] = terms.Count - _termStart[i]; - } - _zoneStart = terms.Count; - if (_massiveRoots.Length >= 2) - { - var total = 0f; - var span = 0f; - foreach (var r in _massiveRoots) - { - total += family[r]; - span = Math.Max(span, length(_anchor[r] - Centre) + _reach[r]); - } - var (c, eps) = Curves(settings, total); - terms.Add(new Term(default, c, eps, float.PositiveInfinity, float.PositiveInfinity, - c * GravityField.Potential(eps, float.PositiveInfinity, float.PositiveInfinity, packRadius))); - if (span > 0f) terms.Add(new Term(default, -c, eps, span, GravityField.Beta * span, 0f)); - } - _zoneCount = terms.Count - _zoneStart; - _terms = terms.ToArray(); - } - - // One node's own terms at distance r from it, toward its centre. - private float PullOf(int node, float r) => PullOf(_termStart[node], _termCount[node], r); - - private float PullOf(int start, int count, float r) - { - var pull = 0f; - for (var t = start; t < start + count; t++) - { - var term = _terms[t]; - pull += term.Strength * GravityField.Pull(term.Softening, term.Inner, term.Outer, r); - } - return pull; - } - - /// - /// The field's force at p (toward the wells, u/s^2): every node's terms, walked from the roots; a subtree is skipped - /// the moment p is outside its reach, which is exact. `positionAt(orbit, time)` is the caller's, so this never owns time. - /// - public float2 Force(float2 p, Func positionAt, double time) - { - var force = float2.zero; - var toZone = Centre - p; - var rz = length(toZone); - if (_zoneCount > 0 && rz > 0f) force += toZone / rz * PullOf(_zoneStart, _zoneCount, rz); - foreach (var root in _roots) ForceFrom(root, p, positionAt, time, ref force); - return force; - } - - private void ForceFrom(int node, float2 p, Func positionAt, double time, ref float2 force) - { - var offset = positionAt(_key[node], time) - p; - var r = length(offset); - if (r > 0f) - force += offset / r * PullOf(node, r); - foreach (var kid in _kids[node]) - if (length(positionAt(_key[kid], time) - p) < _reach[kid]) ForceFrom(kid, p, positionAt, time, ref force); - } - - /// The field's potential at p: every node's terms less their references, walked as Force walks. - public float Potential(float2 p, Func positionAt, double time) - { - var sum = 0f; - var rz = length(Centre - p); - for (var t = _zoneStart; t < _zoneStart + _zoneCount; t++) - sum += _terms[t].Strength * GravityField.Potential(_terms[t].Softening, _terms[t].Inner, _terms[t].Outer, rz) - _terms[t].Reference; - foreach (var root in _roots) sum += PotentialFrom(root, p, positionAt, time); - return sum; - } - - private float PotentialFrom(int node, float2 p, Func positionAt, double time) - { - var r = length(positionAt(_key[node], time) - p); - var sum = 0f; - for (var t = _termStart[node]; t < _termStart[node] + _termCount[node]; t++) - { - var term = _terms[t]; - sum += term.Strength * GravityField.Potential(term.Softening, term.Inner, term.Outer, r) - term.Reference; - } - foreach (var kid in _kids[node]) - if (length(positionAt(_key[kid], time) - p) < _reach[kid]) sum += PotentialFrom(kid, p, positionAt, time); - return sum; - } - - /// - /// The pull (toward the node, u/s^2) a rail at `distance` round `parentOrbit` is given: the node's own terms at that - /// distance. A ring member of a bodyless node adds each other member's own terms at their chord (positions at t = 0), - /// projected toward the node. Infinite period for a pull of 0 is the caller's. - /// - public float PullAround(CultRecordKey parentOrbit, float distance, CultRecordKey self) - { - var node = _index[parentOrbit]; - var pull = PullOf(node, distance); - var members = _ring[node]; - if (members == null || members.Length < 2) return pull; - if (_index.TryGetValue(self, out var me) && Array.IndexOf(members, me) >= 0) return pull + PartnersPull(members, me); - return pull; - } - - // What the other members of a ring pull member m with, along the direction from m to the node. - private float PartnersPull(int[] members, int m) - { - var at = _distance[m] * OrbitData.Evaluate(_phase[m]); - var sum = 0f; - foreach (var q in members) - { - if (q == m) continue; - var chord = _distance[q] * OrbitData.Evaluate(_phase[q]) - at; - var r = length(chord); - if (r <= 0f || _distance[m] <= 0f) continue; - sum += PullOf(q, r) * dot(chord / r, -at / _distance[m]); - } - return sum; - } -} diff --git a/Assets/Scripts/ServerShared/WellTree.cs.meta b/Assets/Scripts/ServerShared/WellTree.cs.meta deleted file mode 100644 index 6834ea3c2..000000000 --- a/Assets/Scripts/ServerShared/WellTree.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: da20befcb0f606b4ab1165988b836096 \ No newline at end of file diff --git a/Assets/Scripts/ServerShared/Wormhole.cs b/Assets/Scripts/ServerShared/Wormhole.cs index fd93e51ca..bad43b9fd 100644 --- a/Assets/Scripts/ServerShared/Wormhole.cs +++ b/Assets/Scripts/ServerShared/Wormhole.cs @@ -4,6 +4,4 @@ public class Wormhole { public float2 Position; public GalaxyZone Target; - // The run's exit gate: it leads nowhere (Target is null) and ends the run when RunGoal.ExitOpen. - public bool Exit; } \ No newline at end of file diff --git a/Assets/Scripts/ServerShared/WwiseMetadata.cs b/Assets/Scripts/ServerShared/WwiseMetadata.cs new file mode 100644 index 000000000..30b88ad29 --- /dev/null +++ b/Assets/Scripts/ServerShared/WwiseMetadata.cs @@ -0,0 +1,92 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using Newtonsoft.Json; + +[JsonObject] +public class WwiseMetadataFile +{ + public WwiseMetaSoundBanksInfo SoundBanksInfo; +} + +[JsonObject] +public class WwiseMetaSoundBanksInfo +{ + public WwiseMetaSoundBank[] SoundBanks; + + private Dictionary _soundBanks; + public WwiseMetaSoundBank GetSoundBank(uint id) + { + if (_soundBanks == null) _soundBanks = SoundBanks.ToDictionary(sb => sb.Id); + return _soundBanks[id]; + } + + private Dictionary _soundBankNames; + public WwiseMetaSoundBank GetSoundBank(string name) + { + if (_soundBankNames == null) _soundBankNames = SoundBanks.ToDictionary(sb => sb.ShortName); + return _soundBankNames[name]; + } +} + +[JsonObject] +public class WwiseMetaSoundBank +{ + public uint Id; + public string ShortName; + public string ObjectPath; + public WwiseMetaObject[] IncludedEvents; + public WwiseMetaObject[] GameParameters; + + public WwiseMetaObject GetEvent(WeaponAudioEvent weaponAudioEvent) + { + return weaponAudioEvent switch + { + WeaponAudioEvent.Fire => IncludedEvents?.FirstOrDefault(e => e.Name.EndsWith("_fire")), + WeaponAudioEvent.Hit => IncludedEvents?.FirstOrDefault(e => e.Name.EndsWith("_hit")), + WeaponAudioEvent.Miss => IncludedEvents?.FirstOrDefault(e => e.Name.EndsWith("_miss")), + _ => throw new ArgumentOutOfRangeException(nameof(weaponAudioEvent), weaponAudioEvent, null) + }; + } + + public WwiseMetaObject GetEvent(ChargedWeaponAudioEvent chargedWeaponAudioEvent) + { + return chargedWeaponAudioEvent switch + { + ChargedWeaponAudioEvent.Start => IncludedEvents?.FirstOrDefault(e => e.Name.EndsWith("_charge_play")), + ChargedWeaponAudioEvent.Stop => IncludedEvents?.FirstOrDefault(e => e.Name.EndsWith("_charge_stop")), + ChargedWeaponAudioEvent.Fail => IncludedEvents?.FirstOrDefault(e => e.Name.EndsWith("_fail")), + _ => throw new ArgumentOutOfRangeException(nameof(chargedWeaponAudioEvent), chargedWeaponAudioEvent, null) + }; + } + + public WwiseMetaObject GetEvent(LoopingAudioEvent loopingAudioEvent) + { + return loopingAudioEvent switch + { + LoopingAudioEvent.Play => IncludedEvents?.FirstOrDefault(e => e.Name.EndsWith("_play")), + LoopingAudioEvent.Stop => IncludedEvents?.FirstOrDefault(e => e.Name.EndsWith("_stop")), + _ => throw new ArgumentOutOfRangeException(nameof(loopingAudioEvent), loopingAudioEvent, null) + }; + } + + public WwiseMetaObject GetParameter(SpecialAudioParameter audioParameter) + { + return audioParameter switch + { + SpecialAudioParameter.ShipVelocity => GameParameters?.FirstOrDefault(p => p.Name == "ship_velocity"), + SpecialAudioParameter.ChargeLevel => GameParameters?.FirstOrDefault(p => p.Name == "charge_level"), + SpecialAudioParameter.TargetLock => GameParameters?.FirstOrDefault(p => p.Name == "target_locking"), + SpecialAudioParameter.Intensity => GameParameters?.FirstOrDefault(p => p.Name == "sfx_shared_intensity"), + _ => throw new ArgumentOutOfRangeException(nameof(audioParameter), audioParameter, null) + }; + } +} + +[JsonObject] +public class WwiseMetaObject +{ + public uint Id; + public string Name; + public string ObjectPath; +} \ No newline at end of file diff --git a/Assets/Scripts/ServerShared/WwiseMetadata.cs.meta b/Assets/Scripts/ServerShared/WwiseMetadata.cs.meta new file mode 100644 index 000000000..d9deda43b --- /dev/null +++ b/Assets/Scripts/ServerShared/WwiseMetadata.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 0a12363ee8ef43b399bf91ca099947a9 +timeCreated: 1619664281 \ No newline at end of file diff --git a/Assets/Scripts/ServerShared/WwiseSoundBinding.cs b/Assets/Scripts/ServerShared/WwiseSoundBinding.cs new file mode 100644 index 000000000..da7a97548 --- /dev/null +++ b/Assets/Scripts/ServerShared/WwiseSoundBinding.cs @@ -0,0 +1,22 @@ +using MessagePack; +using Newtonsoft.Json; + +[MessagePackObject, JsonObject(MemberSerialization.OptIn)] +public class WwiseSoundBinding +{ + [Key(0), JsonProperty("playEvent")] + public uint PlayEvent; +} + +[MessagePackObject, JsonObject(MemberSerialization.OptIn)] +public class WwiseLoopingSoundBinding : WwiseSoundBinding +{ + [Key(1), JsonProperty("stopEvent")] + public uint StopEvent; +} + +// public class WwiseParameterBinding +// { +// [Key(0), JsonProperty("parameter")] +// public uint Parameter; +// } \ No newline at end of file diff --git a/Assets/Scripts/ServerShared/WwiseSoundBinding.cs.meta b/Assets/Scripts/ServerShared/WwiseSoundBinding.cs.meta new file mode 100644 index 000000000..b996ffa72 --- /dev/null +++ b/Assets/Scripts/ServerShared/WwiseSoundBinding.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 2e128c1cb68f481c9a846344e8283014 +timeCreated: 1619729875 \ No newline at end of file diff --git a/Assets/Scripts/ServerShared/Zone.cs b/Assets/Scripts/ServerShared/Zone.cs index 6ba9ef7d7..edfd043bf 100644 --- a/Assets/Scripts/ServerShared/Zone.cs +++ b/Assets/Scripts/ServerShared/Zone.cs @@ -6,51 +6,19 @@ using System; using System.Collections; using System.Collections.Generic; using System.Linq; +using System.Threading; +using System.Threading.Tasks; using GameCult.Caching; using UniRx; using CultMath; using static CultMath.math; using float2 = CultMath.float2; +using Random = CultMath.Random; public class Zone { public Action Log; - - // Membership, in admission order. Admit and Remove are the only writers; everyone else reads this view, which has - // no mutating member, so the death watch below follows membership by construction. - private readonly ReactiveCollection _entities = new ReactiveCollection(); - public MemberView Entities { get; } - - public sealed class MemberView : IReadOnlyReactiveCollection - { - private readonly ReactiveCollection _members; - internal MemberView(ReactiveCollection members) => _members = members; - public int Count => _members.Count; - public Entity this[int index] => _members[index]; - public int IndexOf(Entity entity) => _members.IndexOf(entity); - public bool Contains(Entity entity) => _members.Contains(entity); - public IEnumerator GetEnumerator() => _members.GetEnumerator(); - IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); - public UniRx.IObservable> ObserveAdd() => _members.ObserveAdd(); - public UniRx.IObservable ObserveCountChanged(bool notifyCurrentCount = false) => _members.ObserveCountChanged(notifyCurrentCount); - public UniRx.IObservable> ObserveMove() => _members.ObserveMove(); - public UniRx.IObservable> ObserveRemove() => _members.ObserveRemove(); - public UniRx.IObservable> ObserveReplace() => _members.ObserveReplace(); - public UniRx.IObservable ObserveReset() => _members.ObserveReset(); - } - - // Laid mines, in lay order. Zone owns their existence: Lay is the one adder, the mine step the one remover, - // and every removal is a blast. Runtime state, never saved. - public ReactiveCollection Mines = new ReactiveCollection(); - - // Vented vapour clouds, in vent order. Zone owns their existence: Vent is the one adder, StepClouds the one - // remover, and Obscuration the one reader that detection uses. Runtime state, never saved. - public ReactiveCollection Clouds = new ReactiveCollection(); - - // Floating items (death drops, jettisoned cargo), in release order. Zone owns their existence: Release is the one - // adder; StepFloatingItems (expiry) and TryPickUp are the only removers. TryHold, Free and Remove-of-the-holder - // are the only writers of FloatingItem.Holder. Runtime state, never saved. - public ReactiveCollection FloatingItems = new ReactiveCollection(); + public ReactiveCollection Entities = new ReactiveCollection(); public Dictionary Planets = new Dictionary(); public Dictionary PlanetInstances = new Dictionary(); @@ -58,133 +26,37 @@ public class Zone public Dictionary AsteroidBelts = new Dictionary(); public PlanetSettings Settings; - // Mining index (docs/aetheria-release-map.md, L3-L5): every targetable thing in the zone, fed by providers -- - // the entities, and one provider per belt. The reticle, cycling and any range query over rocks go through it; - // nothing else scans a belt. - public readonly TargetingIndex Targets = new TargetingIndex(); - private readonly List _suns = new List(); - private HashSet _updatedOrbits = new HashSet(); private ItemManager _itemManager; private double _time; + private Random _random; public List Agents = new List(); - // One flight per side, created on its first piloted join. A side is a faction, or one unaffiliated ship - // (brain-one-per-side-r2). A flight owns what its members target and do (Agents/Flight.cs). - private readonly Dictionary _flights = new Dictionary(); - public IEnumerable Flights => _flights.Values; - // Cut 2 (docs/mining-cut.md): chunk wear, keyed by chunk. Zone.Wear is the only writer; ChunkExists and - // ChunkRadius are the only readers besides the pack/unpack round trip below. - private Dictionary _wear = new Dictionary(); - - // Cut 3 (docs/fire-control-cut.md, 0b table): Zone owns the pending-shot collection and the ShotId - // namespace; FireControl owns every transition a shot goes through. ShotCommitted publishes once a shot's - // outcome is decided (R4's commit horizon); ShotResolved republishes the same, unchanged outcome at - // arrival, right before the shot is removed. Presentations are the only readers of either. - public List PendingShots = new List(); - public Subject ShotCommitted = new Subject(); - public Subject ShotResolved = new Subject(); - // Contacts.Step publishes each hull-on-hull contact it resolves; presentations are the only readers. - public Subject Contacted = new Subject(); - private int _nextShotId; - public int NextShotId() => ++_nextShotId; - - // The committed shot a presentation was handed the id of by OnFire. It carries what the simulation decided - // -- the target it flies at (null for a round that carries none) and where it bursts -- so a presentation - // reads that rather than the shooter's current selection. - public bool TryGetShot(int shotId, out PendingShot shot) - { - foreach (var pending in PendingShots) - if (pending.ShotId == shotId) - { - shot = pending; - return true; - } - shot = default; - return false; - } - - private readonly List _departures = new List(); - internal IReadOnlyList Departures => _departures; + private List BeltUpdates = new List(); public float Time { get => (float) _time; } - - // Zone time at full precision, for the index's orbital keys, which must agree with ChunkPose's own. - public double ExactTime => _time; public ZonePack Pack { get; } public GalaxyZone GalaxyZone { get; } public Galaxy Galaxy { get; } - // Cut 6b (docs/fire-control-cut.md, 6.1, Soul finding 6): one zone, one stable identity -- a galaxy seed - // reproduces it, and nothing else in the zone (an NPC joining, a shop opening, a wormhole exit) can - // perturb it. FireControl.Commit builds its own local generator from this and the shot's own id instead - // of touching a shared stream. - public uint CombatSeed { get; } - - // The zone's drop dice (loot and mine scatter): CombatSeed mixed with its run's seed (ruling loot-seed-in-save), so a - // new game drops differently and a reloaded save repeats. Mix(0) is 0, so a zone with no galaxy rolls on CombatSeed. - public uint DropSeed { get; } - - // The one source of floating item and mine ids: zone-scoped, from 1, never reused. Runtime state, not saved. - private uint _lastBodyId; - public FloatingBodyId NextBodyId() => new FloatingBodyId(++_lastBodyId); - - // The death ordinal of the loot dice: the nth death in this zone rolls on SimulationDice.For(DropSeed, LootStream, n). - private uint _deaths; - - // The zone-scoped agent ordinal, from 1, never reused: the key of a pilot's own dice. - private uint _lastAgentId; - public uint NextAgentId() => ++_lastAgentId; - - // One death subscription per member entity: Admit creates it together with the membership, Remove disposes it - // together with the membership, and nothing else touches either. - private readonly Dictionary _deathWatches = new Dictionary(); - public Zone(ItemManager itemManager, PlanetSettings settings, ZonePack pack, GalaxyZone galaxyZone, Galaxy galaxy) { - Entities = new MemberView(_entities); _time = pack.Time; GalaxyZone = galaxyZone; Galaxy = galaxy; Pack = pack; _itemManager = itemManager; Settings = settings; - _orbitPositionAt = OrbitPositionAt; - CombatSeed = galaxyZone?.Name.StableHash() ?? 1337u; - DropSeed = CombatSeed ^ SimulationDice.Mix(galaxy?.Seed ?? 0u); + _random = new Random(galaxyZone?.Name.StableHash() ?? 1337u); var cache = itemManager.ItemData; - // Cut 5, 5.6 (docs/fire-control-cut.md, Soul finding 7; operator ruling Q3): death removes the ship, - // in the simulation, not only in Unity's own loot-drop subscription. One subscription point covers - // every join, whichever caller admits the entity (deserialization below, a jump, a spawned turret) -- - // ObserveAdd fires for all of them. Forbidden writer: no presentation may remove an entity from Zone. - // The death watch lives exactly as long as the entity's membership in this zone: installed on admission, - // disposed on removal (death, dock, jump), so an entity admitted again never holds a second one. - // The one record of a removal for observers (ruling reveal-ends-on-perception): read by the next Sense pass. - _entities.ObserveRemove().Subscribe(remove => _departures.Add(new Departure(remove.Value, remove.Value.Position.xz, - remove.Value.Visibility))); - - // Leaving Entities, by death, docking or a transfer, is leaving the zone's pilots: the agent and its flight - // membership go with the ship, so nothing keeps flying a hull that is not here. - Entities.ObserveRemove().Subscribe(remove => - { - var agent = Agents.FirstOrDefault(a => a.Ship == remove.Value); - if (agent == null) return; - Agents.Remove(agent); - foreach (var flight in _flights.Values) flight.Leave(agent); - // A side of one is gone with its ship. - if (remove.Value.Faction == null) _flights.Remove(remove.Value); - }); - - Targets.Add(new EntityTargets()); - foreach (var orbit in pack.Orbits) { - Orbits.Add(orbit.Key, new Orbit(cache.Get(orbit))); + Orbits.Add(orbit.Key, new Orbit(Settings, cache.Get(orbit))); } foreach (var body in pack.Planets) @@ -194,15 +66,10 @@ public class Zone switch (planet) { case AsteroidBeltData belt: - // Mining Cut 3 (Q16 B): a belt from before field kinds existed gets its kind here, once, by - // the rule generation uses, and keeps it. - FieldKinds.Ensure(body.Key.Value, belt, cache, GalaxyZone?.Province?.Type ?? default); AsteroidBelts[body.Key] = new AsteroidBelt(belt); break; case SunData sun: - var sunInstance = new Sun(settings, sun, Orbits[planet.Orbit.Key]); - PlanetInstances.Add(body.Key, sunInstance); - _suns.Add(sunInstance); + PlanetInstances.Add(body.Key, new Sun(settings, sun, Orbits[planet.Orbit.Key])); break; case GasGiantData gas: PlanetInstances.Add(body.Key, new GasGiant(settings, gas, Orbits[planet.Orbit.Key])); @@ -213,352 +80,74 @@ public class Zone } } - // Orbits, bodies and belts exist: the field's terms are built once, and every rail's period is derived from them. - var wellMass = new Dictionary(); - foreach (var body in PlanetInstances) - if (body.Value.WellStrength > 0) - wellMass.TryAdd(Planets[body.Key].Orbit.Key, body.Value.BodyData.Mass); - var beltExtent = new Dictionary(); - foreach (var belt in AsteroidBelts) - { - var rail = Planets[belt.Key].Orbit.Key; - beltExtent[rail] = AsteroidBelt.Extent(belt.Value.Data, Orbits[rail].Data.Distance); - } - var wellNodes = new List(); - foreach (var orbit in Orbits) - { - var data = orbit.Value.Data; - wellNodes.Add(new WellNode(orbit.Key, data.Parent.Key, data.Distance, data.Phase, - wellMass.TryGetValue(orbit.Key, out var mass) ? mass : 0f, - beltExtent.TryGetValue(orbit.Key, out var reach) ? reach : data.Distance, - data.FixedPosition + OrbitData.Evaluate(frac(data.Phase)) * data.Distance)); // a root's stationary place: Offset at an infinite period - } - Wells = WellTree.Build(wellNodes, settings, pack.Radius); - foreach (var orbit in Orbits) - orbit.Value.Period = orbit.Value.Data.Parent.IsSet() - ? PeriodAround(orbit.Value.Data.Parent.Key, orbit.Value.Data.Distance, orbit.Key) - : float.PositiveInfinity; - foreach (var belt in AsteroidBelts) - { - var beltOrbit = Planets[belt.Key].Orbit.Key; - var beltParent = Orbits[beltOrbit].Data.Parent.Key; - for (var i = 0; i < belt.Value.Periods.Length; i++) - belt.Value.Periods[i] = belt.Value.Data.RidesRail - ? Orbits[beltOrbit].Period // a swarm's rocks ride their rail (trojans-ride-host-period-with-stations) - : PeriodAround(beltParent, belt.Value.Data.Asteroids[i].Distance, beltOrbit); - } - - PopulatedRadius = ComputePopulatedRadius(); - - // Aetheria gravity (target invariant zone-valid-before-tick): every orbit is placed at the pack's time - // when the zone is built, so each well, light and body pose read before the first Update is where the - // body is. Velocity stays zero until the first Update differences two placed positions. - foreach (var orbit in Orbits) - GetOrbitPosition(orbit.Key); - - // BeltTargets copies the belts' periods, so it is built after them. - foreach (var belt in AsteroidBelts) - Targets.Add(new BeltTargets(this, belt.Key, belt.Value.Data, settings, _time)); - - // Cut 2 (docs/mining-cut.md): read after belts are built so a later ChunkExists/ChunkRadius call has - // Planets/AsteroidBelts populated. A pack from before key 6 existed has ChunkWear == null (nullable - // persistence rule); that reads as no wear rather than throwing. - if (pack.ChunkWear != null) - foreach (var wear in pack.ChunkWear) - _wear[new ChunkId(wear.Field, wear.Index)] = new ChunkWear { Damage = wear.Damage, BrokenUntil = wear.BrokenUntil }; - - var ordinal = 0u; foreach (var entityPack in pack.Entities) { - ordinal++; var entity = EntitySerializer.Unpack(_itemManager, this, entityPack); - var ship = entity as Ship; - Admit(entity, piloted: ship is {IsPlayerShip: false}); - // Generation placement, not admission: a ship packed at the origin is scattered across the zone, on the - // zone's own dice, so nothing drawn from the item stream can move it. - if (ship is {IsPlayerShip: false} && lengthsq(ship.Position) < 1) - ship.Position = SimulationDice.For(CombatSeed, SimulationDice.ScatterStream, ordinal) - .NextFloat3(float3(-pack.Radius * .5f), float3(pack.Radius * .5f)); + Entities.Add(entity); + entity.Activate(); + if (entity is Ship {IsPlayerShip: false} ship) + { + Agents.Add(CreateAgent(ship)); + if (lengthsq(ship.Position) < 1) + ship.Position = _itemManager.Random.NextFloat3(float3(-pack.Radius * .5f), float3(pack.Radius * .5f)); + } } // TODO: Associate planets with stored entities for planetary colonies } - // The one admission into this zone (docs/scenarios-cut.md, 2.2): the only writer of membership and the only - // creator of agents. Construction, new-run staging (RunStart), warp arrival, undock and the console's spawned - // turret all join through here. A piloted entity gets the zone's Minion; an unpiloted one gets no agent at all. - // Only a ship can be piloted. The death watch is installed here, for every join, whichever caller admits it. - // An entity that is already a member is refused: it would hold a second watch and a second agent. - // A piloted entity starts on the zone's drawn patrol circuit unless the caller states its task (a scenario's approach). - public void Admit(Entity entity, bool piloted, AgentTask task = null) + private Agent CreateAgent(Ship ship) { - if (_entities.Contains(entity)) throw new InvalidOperationException("entity: already a member of this zone"); - _entities.Add(entity); - _deathWatches.Add(entity, entity.Death.Subscribe(_ => { DropLoot(entity); Remove(entity); entity.Deactivate(); })); - entity.Activate(); - if (piloted) Agents.Add(CreateAgent((Ship) entity, task)); - } - - // The one removal from this zone (death, dock, jump): membership and its death watch leave together, and so does the - // entity's give, which ends GiverGone unless a dock already ended it. False, and nothing changes, when the entity is - // not a member. The caller deactivates; Remove does not. - public bool Remove(Entity entity) - { - if (!_entities.Remove(entity)) return false; - CargoTransfer.End(entity, GiveEnd.GiverGone); - _deathWatches.Remove(entity, out var watch); - watch.Dispose(); - foreach (var floating in FloatingItems) - if (ReferenceEquals(floating.Holder, entity)) Free(floating.Id); - return true; - } - - private static object SideOf(Ship ship) => (object) ship.Faction ?? ship; - - private Agent CreateAgent(Ship ship, AgentTask stated) - { - var key = SideOf(ship); - if (!_flights.TryGetValue(key, out var flight)) - _flights[key] = flight = new Flight(ship.Faction?.Doctrine, _itemManager.GameplaySettings); - var id = NextAgentId(); - var agent = new Minion(ship, flight.Combatant) { Id = id }; - flight.Join(agent, stated ?? PatrolCircuit(id)); + var agent = new Minion(ship); + var task = new PatrolOrbitsTask(); + task.Circuit = Orbits.OrderBy(_ => _itemManager.Random.NextFloat()).Take(4).Select(x => x.Key).ToArray(); + agent.Task = task; return agent; } - private PatrolOrbitsTask PatrolCircuit(uint id) - { - var dice = SimulationDice.For(CombatSeed, SimulationDice.PatrolStream, id); - return new PatrolOrbitsTask { Circuit = Orbits.OrderBy(_ => dice.NextFloat()).Take(4).Select(x => x.Key).ToArray() }; - } - public ZonePack PackZone() { return new ZonePack { Radius = Pack.Radius, Mass = Pack.Mass, - Entities = _entities.Select(EntitySerializer.Pack).ToList(), + Entities = Entities.Select(EntitySerializer.Pack).ToList(), Orbits = Orbits.Keys.Select(key => new CultRecordRef(key)).ToList(), Planets = Planets.Keys.Select(key => new CultRecordRef(key)).ToList(), - Time = _time, - BossSpawned = Pack.BossSpawned, - // Cut 2 (docs/mining-cut.md): drop entries that carry no live information -- healed (no damage) and - // not currently broken -- so a save never accumulates wear rows for chunks nobody has touched since - // they last respawned. - ChunkWear = _wear - .Where(kv => !IsExpired(kv.Value)) - .Select(kv => new ChunkWearPack { Field = kv.Key.Field, Index = kv.Key.Index, Damage = kv.Value.Damage, BrokenUntil = kv.Value.BrokenUntil }) - .ToList() + Time = _time }; } - private bool IsExpired(ChunkWear wear) => wear.Damage <= 0f && (!wear.BrokenUntil.HasValue || wear.BrokenUntil.Value <= _time); + public void AddOrbit(OrbitData orbit) + { + Orbits.Add(_itemManager.ItemData.RefOf(orbit).Key, new Orbit(Settings, orbit)); + } public void Update(float deltaTime) { _time += deltaTime; _updatedOrbits.Clear(); - // Every previous position is taken before any orbit is placed: GetOrbitPosition places a parent as a - // side effect of placing its child, so differencing inside one loop would depend on dictionary order. - foreach (var orbit in Orbits) - orbit.Value.PreviousPosition = orbit.Value.Position; + foreach (var t in BeltUpdates) + t.Wait(); + BeltUpdates.Clear(); foreach (var orbit in Orbits) { + orbit.Value.PreviousPosition = orbit.Value.Position; orbit.Value.Position = GetOrbitPosition(orbit.Key); orbit.Value.Velocity = (orbit.Value.Position - orbit.Value.PreviousPosition) / deltaTime; } - foreach (var flight in _flights.Values) flight.Update(deltaTime); - // Every pilot's command is applied by PilotApplier, once per step. Entities with no agent (the player, a scripted - // pilot, a lone ship) first, as the player's input lands before the step; then each agent applies right after it - // decides, so the next agent sees it as it saw the direct writes this replaced. - var agents = Agents.ToArray(); - var piloted = new HashSet(); - foreach (var agent in agents) piloted.Add(agent.Ship); - foreach (var entity in Entities.ToArray()) - if (!piloted.Contains(entity)) PilotApplier.Apply(entity); - foreach (var agent in agents) + foreach (var belt in AsteroidBelts) { + Array.Copy(belt.Value.NewTransforms, belt.Value.Transforms, belt.Value.Transforms.Length); + belt.Value.OrbitPosition = belt.Value.NewOrbitPosition; + BeltUpdates.Add(Task.Run(() => UpdateAsteroidTransforms(belt.Key))); + } + + foreach(var agent in Agents) agent.Update(deltaTime); - PilotApplier.Apply(agent.Ship); - } - var entities = Entities.ToArray(); - foreach (var entity in entities) entity.PublishInbox(); - foreach (var entity in entities) entity.Update(deltaTime); - foreach (var entity in entities) entity.Sense(); - _departures.Clear(); - - CargoTransfer.Step(this, deltaTime); - StepMines(deltaTime); - StepClouds(deltaTime); - StepFloatingItems(deltaTime); - - // Hull contact (cut sim-contact): after every entity has moved and the mines and clouds have taken - // their toll, so only hulls still in the zone touch, and before shots resolve against the result. - Contacts.Step(this); - - // Cut 3: after every entity has had its chance to fire this tick, age and resolve the shots that - // firing queued. A shot fired this tick with a flight time shorter than CommitHorizon commits and - // resolves in this same call. - FireControl.Step(this, deltaTime); - } - - public void Lay(Mine mine) - { - mine.LaidAt = _time; - Mines.Add(mine); - } - - public void Vent(VapourCloud cloud) - { - cloud.Id = NextBodyId(); - cloud.VentedAt = _time; - Clouds.Add(cloud); - } - - // The one adder of floating items: death drops and jettison both come here. The item drifts as a KinematicBody - // launched at `velocity` and expires after FloatingItemLifetime. - public FloatingItem Release(ItemInstance item, float2 position, float2 velocity) - { - var floating = new FloatingItem - { - Id = NextBodyId(), Item = item, Body = new KinematicBody { Position = position, Velocity = velocity }, - ReleasedAt = _time, Lifetime = _itemManager.GameplaySettings.FloatingItemLifetime - }; - FloatingItems.Add(floating); - return floating; - } - - // The one commit of a pickup: the first of the taker's cargo bays that accepts the item stores it and the item - // stops floating. Otherwise nothing changes. - // An item held by another entity is refused: one holder per item holds at the commit as well. - public bool TryPickUp(Entity taker, FloatingBodyId id) - { - var floating = FloatingItems.FirstOrDefault(f => f.Id.Equals(id)); - if (floating == null || (floating.Holder != null && !ReferenceEquals(floating.Holder, taker))) return false; - if (!taker.CargoBays.Any(bay => bay.TryStore(floating.Item))) return false; - FloatingItems.Remove(floating); - return true; - } - - // The tractor beam's claim on a floating item: false if it is absent or already held. The item stays where it is - // until its pull begins; StepFloatingItems places it from then on. - public bool TryHold(Entity holder, FloatingBodyId id) - { - var floating = FloatingItems.FirstOrDefault(f => f.Id.Equals(id)); - if (floating == null || floating.Holder != null) return false; - floating.Holder = holder; - floating.HeldFrom = floating.Body.Position; - floating.HeldProgress = 0; - return true; - } - - // How far along its pull to the holder a held item is, 0..1. - public void SetHeldProgress(FloatingBodyId id, float progress) - { - var floating = FloatingItems.FirstOrDefault(f => f.Id.Equals(id)); - if (floating?.Holder != null) floating.HeldProgress = saturate(progress); - } - - // Lets a held item go: it floats on from where it is with the Velocity and Drift it had. - public void Free(FloatingBodyId id) - { - var floating = FloatingItems.FirstOrDefault(f => f.Id.Equals(id)); - if (floating == null) return; - floating.Holder = null; - floating.HeldProgress = 0; - } - - // Called from the death subscription, before the entity leaves the zone: one generator per death. Each equipped - // item but the hull drops on a LootDropProbability draw; every cargo stack drops whole. Each drop leaves from the - // dead entity's position at a random heading. Draw order: Equipment order (the probability draw, then the heading - // of a dropped item), then each cargo bay's stacks in CargoBays order (a heading each). - private void DropLoot(Entity dead) - { - var settings = _itemManager.GameplaySettings; - var random = SimulationDice.For(DropSeed, SimulationDice.LootStream, ++_deaths); - var at = new float2(dead.Position.x, dead.Position.z); - float2 Heading() { var angle = random.NextFloat() * 2f * PI; return float2(cos(angle), sin(angle)); } - foreach (var equipped in dead.Equipment.ToArray()) - { - if (equipped == dead.EquippedHull || !(random.NextFloat() < settings.LootDropProbability)) continue; - Release(equipped.EquippableItem, at, Heading() * settings.LootDropVelocity); - } - foreach (var bay in dead.CargoBays.ToArray()) - foreach (var stack in bay.Cargo.Keys.ToArray()) - Release(stack, at, Heading() * settings.LootDropVelocity); - } - - // After StepClouds and before FireControl.Step: each floating item drifts as a KinematicBody on the zone's force - // and is removed once its lifetime has run out. A held item is neither integrated nor expired: it is placed - // between where it was claimed and its holder, now that the entities have moved. - // The curve a held item rides from where it was claimed to its holder: the one owner, which the test scene's - // stand-in sim and tendril call rather than spell again. - public static float HeldPull(float progress) => smoothstep(0f, 1f, progress); - - private void StepFloatingItems(float deltaTime) - { - var settings = _itemManager.GameplaySettings; - foreach (var floating in FloatingItems.ToArray()) - { - if (floating.Holder != null) - { - floating.Body.Position = lerp(floating.HeldFrom, floating.Holder.Position.xz, HeldPull(floating.HeldProgress)); - continue; - } - floating.Body.Step(deltaTime, GetForce(floating.Body.Position), settings); - if (floating.ReleasedAt + floating.Lifetime <= _time) FloatingItems.Remove(floating); - } - } - - // The fraction of a sight line's signal that survives the clouds between `a` and `b`: the product of - // (1 - opacity now) over every cloud whose disc the segment touches, so 1f when none does. Derived from the - // live clouds at each call and stored nowhere; Sensor.Gain is where it enters detection. - public float Obscuration(float2 a, float2 b) - { - var through = 1f; - for (var i = 0; i < Clouds.Count; i++) - { - var cloud = Clouds[i]; - if (cloud.Touches(a, b)) through *= 1f - cloud.OpacityAt(_time); - } - return through; - } - - // After StepMines: each cloud drifts as a KinematicBody on the zone's force, as a mine does, and is removed - // once its lifetime has run out. Nothing else removes a cloud. - private void StepClouds(float deltaTime) - { - var settings = _itemManager.GameplaySettings; - foreach (var cloud in Clouds.ToArray()) - { - cloud.Body.Step(deltaTime, GetForce(cloud.Body.Position), settings); - if (cloud.VentedAt + cloud.Lifetime <= _time) Clouds.Remove(cloud); - } - } - - // After the entity loop and before FireControl.Step, in lay order: each mine drifts as a KinematicBody, is - // triggered by the first eligible hull its armed disc touches, and detonates through FireControl.Detonate at - // its trigger plus fuse delay or at its lifetime, whatever its layer does (ruling mine-owner-leash). The - // blast reads no faction; only the trigger does. - private void StepMines(float deltaTime) - { - var settings = _itemManager.GameplaySettings; - foreach (var mine in Mines.ToArray()) - { - mine.Body.Step(deltaTime, GetForce(mine.Body.Position), settings); - - if (mine.TriggeredAt == null && mine.Armed(_time) && - Entities.Any(entity => mine.Triggers(entity) && FireControl.Touches(entity, mine.Body.Position, mine.BlastRadius))) - mine.TriggeredAt = _time; - - var fused = mine.TriggeredAt + mine.FuseDelay <= _time; - if (!fused && mine.LaidAt + mine.Lifetime > _time) continue; - Mines.Remove(mine); - FireControl.Detonate(this, mine.Body.Position, mine.BlastRadius, mine.Damage, mine.DamageType); - } + foreach (var entity in Entities.ToArray()) entity.Update(deltaTime); } // Determine orbital position recursively, caching parent positions to avoid repeated calculations @@ -575,72 +164,30 @@ public class Zone if (!_updatedOrbits.Contains(orbitID)) { - Orbits[orbitID].Position = RailAt(orbitID, _time); + var orbit = Orbits[orbitID]; + float2 pos = float2.zero; + if (orbit.Period > .01f) + { + var phase = (float) frac(_time / orbit.Period); + pos = OrbitData.Evaluate(frac(phase + orbit.Data.Phase)) * orbit.Data.Distance; + + if (float.IsNaN(pos.x)) + { + //_context.Log("Orbit position is NaN, something went very wrong!"); + pos = float2.zero; + } + } + + var parentPosition = !Orbits[orbitID].Data.Parent.IsSet() + ? Orbits[orbitID].Data.FixedPosition : + GetOrbitPosition(orbit.Data.Parent.Key); + Orbits[orbitID].Position = parentPosition + pos; _updatedOrbits.Add(orbitID); } return Orbits[orbitID].Position; } - // The rail law, once: where an orbit sits from its parent's node at a time. An infinite period (a parentless orbit, - // or one with no field to circle in) leaves the orbit at its phase: frac(t / inf) is 0. - private static float2 Offset(Orbit orbit, double time) - { - var pos = float2.zero; - if (orbit.Period > .01f) - { - var phase = (float) frac(time / orbit.Period); - pos = OrbitData.Evaluate(frac(phase + orbit.Data.Phase)) * orbit.Data.Distance; - - if (float.IsNaN(pos.x)) - pos = float2.zero; - } - - return pos; - } - - // The same rail law at any time, with no memo read or written: a parent is its own rail at that time. - private float2 RailAt(CultRecordKey orbitID, double time) - { - if (!orbitID.IsSet()) - return float2.zero; - if (!Orbits.TryGetValue(orbitID, out var orbit)) - { - Log?.Invoke("Requested orbit is not part of this zone!"); - return float2.zero; - } - var parentPosition = !orbit.Data.Parent.IsSet() ? orbit.Data.FixedPosition : RailAt(orbit.Data.Parent.Key, time); - return parentPosition + Offset(orbit, time); - } - - // Where an orbit is at a time: pure, writes nothing. At the step's own time it is the step's memo (GetOrbitPosition); - // at any other time (a presenter's drawn time) it is the rail law evaluated there. - public float2 OrbitPositionAt(CultRecordKey orbitID, double time) - { - if (!orbitID.IsSet()) - return float2.zero; - if (!Orbits.ContainsKey(orbitID)) - { - Log?.Invoke("Requested orbit is not part of this zone!"); - return float2.zero; - } - - return time == _time ? GetOrbitPosition(orbitID) : RailAt(orbitID, time); - } - - /// The zone's gravity: the terms of its orbit tree (WellTree owns which exist and the walk that sums them). - public WellTree Wells { get; } - - private readonly Func _orbitPositionAt; - - // The one owner of a rail's period (Orbit.Period, AsteroidBelt.Periods): 2 pi sqrt(d / a), a being the pull the field - // gives at distance d from the node being orbited (WellTree.PullAround). No pull gives an infinite period. - private float PeriodAround(CultRecordKey parentOrbit, float distance, CultRecordKey self) - { - var a = Wells.PullAround(parentOrbit, distance, self); - return a > 0 && distance > 0 ? 2 * PI * sqrt(distance / a) : float.PositiveInfinity; - } - public float2 GetOrbitVelocity(CultRecordKey orbit) { if (Orbits.ContainsKey(orbit)) @@ -648,92 +195,115 @@ public class Zone return float2.zero; } - // Cut 2 (docs/mining-cut.md): the index is in range for its field and the chunk is not broken at zone time. - // Respawn is a comparison against zone time, never a per-tick loop or a write on read. - public bool ChunkExists(ChunkId chunk) + public int NearestAsteroid(CultRecordKey planetDataID, float2 position) { - if (!(Planets.TryGetValue(chunk.Field, out var body) && body is AsteroidBeltData beltData)) - return false; - if (chunk.Index < 0 || chunk.Index >= beltData.Asteroids.Length) - return false; - return !(_wear.TryGetValue(chunk, out var wear) && wear.BrokenUntil.HasValue && wear.BrokenUntil.Value > _time); - } + var beltData = Planets[planetDataID] as AsteroidBeltData; - // Cut 2: the size rule of AsteroidBelt.Size (Cut 1), now reading wear from its one owner (Zone) instead of - // per-belt dictionaries. A broken chunk (BrokenUntil in the future) has no size; an unbroken, undamaged - // chunk reads its authored size; a damaged one shrinks toward it. - public float ChunkRadius(ChunkId chunk) - { - var belt = AsteroidBelts[chunk.Field]; - if (!_wear.TryGetValue(chunk, out var wear)) - return belt.UndamagedSize(chunk.Index, Settings); - if (wear.BrokenUntil.HasValue && wear.BrokenUntil.Value > _time) - return 0f; - if (wear.Damage <= 0f) - return belt.UndamagedSize(chunk.Index, Settings); - return belt.DamagedSize(chunk.Index, wear.Damage, Settings); - } + var asteroidPositions = AsteroidBelts[planetDataID].Transforms; - // Cut 2: the only writer of chunk wear. Returns whether this hit broke the chunk. The break threshold is - // strictly greater-than, matching the deleted per-tick miner's own comparison against accumulated damage: - // damage exactly equal to hitpoints does not yet break the chunk, only damage that exceeds them does. - // A chunk that is currently broken (zone time < BrokenUntil) absorbs nothing: this hit did not break it - // (it was already broken), and its wear stays zeroed until it respawns and starts fresh. - public bool Wear(ChunkId chunk, float damage) - { - _wear.TryGetValue(chunk, out var wear); - if (wear.BrokenUntil.HasValue && wear.BrokenUntil.Value > _time) - return false; - - var beltData = (AsteroidBeltData) Planets[chunk.Field]; - var size = beltData.Asteroids[chunk.Index].Size; - var hitpoints = Settings.AsteroidHitpoints.Evaluate(size); - - var newDamage = wear.Damage + damage; - - if (newDamage > hitpoints) + int nearest = 0; + float nearestDistance = Single.MaxValue; + for (int i = 0; i < beltData.Asteroids.Length; i++) { - var respawnTime = Settings.AsteroidRespawnTime.Evaluate(size); - _wear[chunk] = new ChunkWear { Damage = 0f, BrokenUntil = _time + respawnTime }; - return true; + var dist = lengthsq(asteroidPositions[i].xz - position); + if (AsteroidExists(planetDataID, i) && dist < nearestDistance) + { + nearest = i; + nearestDistance = dist; + } } - _wear[chunk] = new ChunkWear { Damage = newDamage, BrokenUntil = null }; - return false; + return nearest; } - // Cut 1 (docs/mining-cut.md): a chunk's pose is a pure function of zone time, computed when asked. No stored - // pose survives a tick; the sim and the renderer both read it fresh through here. - public float4 ChunkPose(CultRecordKey belt, int index) => ChunkPose(belt, index, _time); + public bool AsteroidExists(CultRecordKey planetDataID, int asteroid) => ((AsteroidBeltData) Planets[planetDataID]).Asteroids.Length > asteroid && asteroid >= 0; - // The same pose at any time: the sim reads it at _time, a presenter at the drawn time (DrawAhead.Time). - public float4 ChunkPose(CultRecordKey belt, int index, double time) + private void UpdateAsteroidTransforms(CultRecordKey planetDataID) { - var beltData = Planets[belt] as AsteroidBeltData; - var parentPosition = OrbitPositionAt(Orbits[beltData.Orbit.Key].Data.Parent.Key, time); - var size = ChunkRadius(new ChunkId(belt, index)); - return AsteroidBelts[belt].Pose(index, time, parentPosition, size); - } + var beltData = Planets[planetDataID] as AsteroidBeltData; - // Mining Cut 3 (docs/mining-cut-refresh.md): how bright a chunk is -- Reflector's rule (cross-section × the light - // on it), with the field kind's reflectivity per schematic cell times the chunk's area in cells. Computed when - // asked; nothing about it is stored. A worn chunk shrinks and dims; a broken one, or one of a kindless belt, is dark. - public float ChunkVisibility(ChunkId chunk) - { - if (!ChunkExists(chunk)) return 0f; - var kind = _itemManager.ItemData.Get(((AsteroidBeltData) Planets[chunk.Field]).Kind); - if (kind == null) return 0f; - var cells = ChunkRadius(chunk) / _itemManager.GameplaySettings.SchematicCellSize; - return kind.CrossSection * PI * cells * cells * GetLight(ChunkPose(chunk.Field, chunk.Index).xy); - } + var belt = AsteroidBelts[planetDataID]; - public void EvaluateBelt(CultRecordKey belt, Span into, double time) - { - var beltData = Planets[belt] as AsteroidBeltData; - var parentPosition = OrbitPositionAt(Orbits[beltData.Orbit.Key].Data.Parent.Key, time); - var beltInstance = AsteroidBelts[belt]; + var orbitData = Orbits[beltData.Orbit.Key].Data; + belt.NewOrbitPosition = GetOrbitPosition(orbitData.Parent.Key); for (var i = 0; i < beltData.Asteroids.Length; i++) - into[i] = beltInstance.Pose(i, time, parentPosition, ChunkRadius(new ChunkId(belt, i))); + { + float size; + if(belt.RespawnTimers.ContainsKey(i)) size = 0; + else if (belt.Damage.ContainsKey(i)) + { + var asteroidHitpoints = Settings.AsteroidHitpoints.Evaluate(beltData.Asteroids[i].Size); + var damage = (asteroidHitpoints - belt.Damage[i]) / asteroidHitpoints; + size = Settings.AsteroidSize.Evaluate(damage * beltData.Asteroids[i].Size); + } + else size = Settings.AsteroidSize.Evaluate(beltData.Asteroids[i].Size); + + var rot = (float) (_time * beltData.Asteroids[i].RotationSpeed % (PI * 2)); + var pos = OrbitData.Evaluate((float) frac(_time / Settings.OrbitPeriod.Evaluate(beltData.Asteroids[i].Distance) + + beltData.Asteroids[i].Phase)) * beltData.Asteroids[i].Distance + belt.NewOrbitPosition; + //belt.NewPositions[i] = float3(pos.x, GetHeight(pos) + Settings.AsteroidVerticalOffset, pos.y); + belt.NewTransforms[i] = float4(pos.x, pos.y, rot, size); + } + } + + public OrbitData CreateOrbit(CultRecordKey parent, float2 position) + { + var parentPosition = GetOrbitPosition(parent); + var delta = position - parentPosition; + var distance = length(delta); + var period = Settings.OrbitPeriod.Evaluate(distance); + var phase = atan2(delta.y, delta.x) / (PI * 2); + var currentPhase = frac(_time / period); + var storedPhase = (float) frac(phase - currentPhase); + + var orbit = new OrbitData + { + Distance = distance, + Parent = new CultRecordRef(parent), + Phase = storedPhase + }; + Orbits.Add(_itemManager.ItemData.Upsert(orbit).Key, new Orbit(Settings, orbit)); + return orbit; + } + + public void MineAsteroid(Entity miner, CultRecordKey asteroidBelt, int asteroid, float damage, float efficiency, float penetration) + { + var beltData = Planets[asteroidBelt] as AsteroidBeltData; + var belt = AsteroidBelts[asteroidBelt]; + //var asteroidTransform = belt.Transforms[asteroid]; + + var size = beltData.Asteroids[asteroid].Size; + var asteroidHitpoints = Settings.AsteroidHitpoints.Evaluate(size); + + if (!belt.Damage.ContainsKey(asteroid)) + belt.Damage[asteroid] = 0; + belt.Damage[asteroid] = belt.Damage[asteroid] + damage; + + if (!belt.MiningAccumulator.ContainsKey((miner, asteroid))) + belt.MiningAccumulator[(miner, asteroid)] = 0; + belt.MiningAccumulator[(miner, asteroid)] = belt.MiningAccumulator[(miner, asteroid)] + damage; + + if (belt.Damage[asteroid] > asteroidHitpoints) + { + belt.RespawnTimers[asteroid] = Settings.AsteroidRespawnTime.Evaluate(size); + belt.Damage.Remove(asteroid); + belt.MiningAccumulator.Remove((miner, asteroid)); + return; + } + + var resourceCount = beltData.Resources.Sum(x => x.Value); + var resource = beltData.Resources.MaxBy(x => pow(x.Value, 1f / penetration) * _random.NextFloat()); + if (efficiency * _random.NextFloat() * belt.MiningAccumulator[(miner, asteroid)] * resourceCount / Settings.MiningDifficulty > 1) + { + belt.MiningAccumulator.Remove((miner, asteroid)); + // var newSimpleCommodity = new SimpleCommodity + // { + // Data = resource.Key, + // Quantity = 1 + // }; + // TODO: Drop item onto the Grid + //miner.AddCargo(newSimpleCommodity); + } } public SecurityLevel GetSecurityLevel(float2 pos) @@ -753,73 +323,62 @@ public class Zone return security; } - // The extent of the populated area, from the zone's origin: owned here; presenters read it, nothing authors it. A static - // bound on where anything can be, so it holds at every time and reads nothing the pack's Radius decides: for each body, - // its orbit chain's reach plus its Roche limit; for each belt, the chain's reach to the orbit its asteroids circle (the - // belt orbit's parent) plus the belt's own Radius, its largest asteroid Distance. - public float PopulatedRadius { get; } - - private float ComputePopulatedRadius() + public float GetHeight(float2 position) { - var radius = 0f; + var result = -PowerPulse(length(position)/(Pack.Radius*2), Settings.ZoneDepthExponent) * Settings.ZoneDepth; foreach (var body in PlanetInstances.Values) - radius = max(radius, ChainReach(body.BodyData.Orbit.Key) + body.RocheLimit); - foreach (var belt in AsteroidBelts) - radius = max(radius, ChainReach(Orbits[Planets[belt.Key].Orbit.Key].Data.Parent.Key) + belt.Value.Radius); - return radius; - } - - // The most an orbit can lie from the origin: the root's offset plus every orbit Distance down the chain to it. - private float ChainReach(CultRecordKey key) - { - var reach = 0f; - while (key.IsSet() && Orbits.TryGetValue(key, out var orbit)) { - if (orbit.Data.Parent.IsSet()) reach += orbit.Data.Distance; - else reach += length(orbit.Data.FixedPosition); - key = orbit.Data.Parent.Key; + var p = position - body.Orbit.Position; //GetOrbitPosition(body.BodyData.Orbit) + var distSqr = lengthsq(p); + var gravityRadius = body.GravityWellRadius; + if (distSqr < gravityRadius*gravityRadius) + { + var depth = body.GravityWellDepth; + result -= PowerPulse(sqrt(distSqr) / gravityRadius, body.BodyData.GravityDepthExponent) * depth; + } + + if (body is GasGiant gas) + { + var waveRadius = gas.GravityWavesRadius; + if(distSqr < waveRadius*waveRadius) + { + var depth = gas.GravityWavesDepth; + var frequency = Settings.WaveFrequency.Evaluate(body.BodyData.Mass); + var speed = gas.GravityWavesSpeed; + result -= RadialWaves(sqrt(distSqr) / waveRadius, 8, 1.25f, frequency, (float) (_time * speed)) * depth; + } + } } - return reach; + + return result; } - public float GetHeight(float2 position) => GetHeight(position, _time); - - // The field at a time: each term sits where its node's rail puts it then. The sim reads it at _time, a presenter at - // the drawn time, so a ship rides the same slope the drawn planet's well makes. - public float GetHeight(float2 position, double time) => Wells.Potential(position, _orbitPositionAt, time) / Settings.HeightExaggeration; - public float GetLight(float2 position) { var light = 0f; - foreach (var sun in _suns) - light += SunLight(sun, length(position - sun.Orbit.Position)); + foreach (var body in PlanetInstances.Values) + { + if (body is Sun sun) + { + var p = position - body.Orbit.Position; + var distSqr = lengthsq(p); + var lightRadius = sun.LightRadius; + if (distSqr < lightRadius * lightRadius) + { + light += PowerPulse(sqrt(distSqr) / lightRadius, 8); + } + } + } + return light; } - // One sun's light at `distance` from it. It never grows with distance, so the light at the nearest point of a - // region bounds the light anywhere in it (BeltTargets' visibility bound). - public static float SunLight(Sun sun, float distance) => - distance < sun.LightRadius ? PowerPulse(distance / sun.LightRadius, 8) : 0f; - - internal IReadOnlyList Suns() => _suns; - internal float SchematicCellSize => _itemManager.GameplaySettings.SchematicCellSize; - internal float FieldCrossSection(AsteroidBeltData belt) => _itemManager.ItemData.Get(belt.Kind)?.CrossSection ?? 0f; - - // The one source of gravitational acceleration (u/s^2): the walk of the zone's terms (WellTree). Ships, floating items, - // clouds and mines all read it, and so does Flow. It is the gradient of the potential GetHeight draws, so the two - // cannot disagree. - public float2 GetForce(float2 position) => Wells.Force(position, _orbitPositionAt, _time); - - // The global flow velocity at `position` in zone time, in u/s (FlowField is the law). The slope term reads the - // downhill direction, which is the force. - public float3 Flow(float3 position) => - FlowField.At(Settings.Flow, position, FlowScroll, GetForce(position.xz)); - - // The flow's noise scroll at zone time (Zone.Flow evaluates at exactly this); lowered to the shaders' _FlowScroll. - public float2 FlowScroll => FlowField.Scroll(Settings.Flow, _time); - - // The phase of a cycle of `period` seconds at zone time, for presenters that animate on the flow. - public float CyclePhase(float period) => FlowField.Cycle(_time, period); + public float2 GetForce(float2 position) + { + var normal = GetNormal(position); + var f = new float2(normal.x, normal.z); + return f * Settings.GravityStrength * lengthsq(f); + } public static float PowerPulse(float x, float exponent) { @@ -828,12 +387,22 @@ public class Zone return pow((x + 1) * (1 - x), exponent); } - // The surface normal of the drawn height (potential / K), derived from the force. Display only (ship tilt): the - // sim never reads it as a force. - public float3 GetNormal(float2 pos) + public static float RadialWaves(float x, float maskExponent, float sineExponent, float frequency, float phase) { - var slope = GetForce(pos) / Settings.HeightExaggeration; - return normalize(new float3(slope.x, 1f, slope.y)); + //x *= 2; + return PowerPulse(x, maskExponent) * cos(pow(x*2, sineExponent) * frequency + phase); + } + + public float3 GetNormal(float2 pos, float step = .1f, float mul = 1) + { + float hL = GetHeight(new float2(pos.x - step, pos.y)) * mul; + float hR = GetHeight(new float2(pos.x + step, pos.y)) * mul; + float hD = GetHeight(new float2(pos.x, pos.y - step)) * mul; + float hU = GetHeight(new float2(pos.x, pos.y + step)) * mul; + + // Deduce terrain normal + float3 normal = new float3((hL - hR), (hD - hU), step*2); + return normalize(normal).xzy; } } @@ -842,13 +411,10 @@ public class Planet public Orbit Orbit; protected readonly PlanetSettings Settings; public BodyData BodyData; + public float GravityWellDepth; + public float GravityWellRadius; public float BodyRadius; - // The well (GravityField): strength c by mass, and the Roche limit, which is both the closest a child may orbit and - // the well's softened core radius R (one curve of mass, never per body). Both are authored PlanetSettings curves. - public float WellStrength; - public float RocheLimit; - public Planet(PlanetSettings settings, BodyData data, Orbit orbit) { Settings = settings; @@ -860,17 +426,30 @@ public class Planet public void CalculateProperties() { BodyRadius = Settings.BodyRadius.Evaluate(BodyData.Mass) * BodyData.BodyRadiusMultiplier; - (WellStrength, RocheLimit) = WellTree.Curves(Settings, BodyData.Mass); + GravityWellRadius = Settings.GravityRadius.Evaluate(BodyData.Mass) * BodyData.GravityRadiusMultiplier; + GravityWellDepth = Settings.GravityDepth.Evaluate(BodyData.Mass) * BodyData.GravityDepthMultiplier; } } public class GasGiant : Planet { public GasGiantData GasGiantData; + public float GravityWavesDepth; + public float GravityWavesRadius; + public float GravityWavesSpeed; public GasGiant(PlanetSettings settings, GasGiantData data, Orbit orbit) : base(settings, data, orbit) { GasGiantData = data; + CalculateProperties(); + } + + public new void CalculateProperties() + { + base.CalculateProperties(); + GravityWavesDepth = Settings.WaveDepth.Evaluate(BodyData.Mass) * GasGiantData.WaveDepthMultiplier; + GravityWavesRadius = Settings.WaveRadius.Evaluate(BodyData.Mass) * GasGiantData.WaveRadiusMultiplier; + GravityWavesSpeed = Settings.WaveSpeed.Evaluate(BodyData.Mass) * GasGiantData.WaveSpeedMultiplier; } } @@ -895,107 +474,22 @@ public class Sun : GasGiant public class AsteroidBelt { public AsteroidBeltData Data; + public float4[] Transforms; // x, y, rotation, scale + public float4[] NewTransforms; // x, y, rotation, scale public float Radius { get; } - - // Each asteroid's orbital period, in seconds: derived once at zone build by Zone.PeriodAround (the field at the - // asteroid's own distance from the belt's parent), the only period Pose and BeltTargets divide by. - public float[] Periods { get; } + public float2 OrbitPosition; + public float2 NewOrbitPosition; + public Dictionary RespawnTimers = new Dictionary(); + public Dictionary Damage = new Dictionary(); + public Dictionary<(Entity, int), float> MiningAccumulator = new Dictionary<(Entity, int), float>(); public AsteroidBelt(AsteroidBeltData data) { Data = data; - Periods = new float[data.Asteroids.Length]; + Transforms = new float4[data.Asteroids.Length]; + NewTransforms = new float4[data.Asteroids.Length]; Radius = data.Asteroids.Max(a => a.Distance); } - - // What the belt's rail adds to its parent's L_F (WellTree): an annulus reaches its outermost rock, whose period reads the - // field there; a swarm riding its rail reaches only the rail, whose period every rock shares. The one belt extent rule: - // Zone, ZoneGenerator's clearance tree and the station tests all read it. - public static float Extent(AsteroidBeltData data, float railDistance) => - data.RidesRail ? railDistance : Math.Max(data.Asteroids.Max(a => a.Distance), railDistance); - - // Cut 1 (docs/mining-cut.md): the formula of Zone.cs:269-271 verbatim, `time` in double as `_time` was used. - // The only place a chunk pose is computed; no per-tick copy survives it. Cut 2: size is no longer read from - // per-belt storage -- Zone owns wear now, so the caller (Zone.ChunkPose/EvaluateBelt) computes it through - // Zone.ChunkRadius and passes it in. - public float4 Pose(int index, double time, float2 parentPosition, float size) - { - var asteroid = Data.Asteroids[index]; - var rot = (float) (time * asteroid.RotationSpeed % (PI * 2)); - var pos = OrbitData.Evaluate((float) frac(time / Periods[index] + asteroid.Phase)) * asteroid.Distance + parentPosition; - return float4(pos.x, pos.y, rot, size); - } - - // Cut 1's size rule (Zone.cs:259-267), split in Cut 2 into its undamaged and damaged halves now that wear - // lives on Zone instead of here. Neither reads wear directly; the caller (Zone.ChunkRadius) decides which - // applies and supplies the damage. - public float UndamagedSize(int index, PlanetSettings settings) => settings.AsteroidSize.Evaluate(Data.Asteroids[index].Size); - - public float DamagedSize(int index, float damage, PlanetSettings settings) - { - var asteroidHitpoints = settings.AsteroidHitpoints.Evaluate(Data.Asteroids[index].Size); - var remaining = (asteroidHitpoints - damage) / asteroidHitpoints; - return settings.AsteroidSize.Evaluate(remaining * Data.Asteroids[index].Size); - } -} - -// Cut 2 (docs/mining-cut.md): a chunk is (field, index). "Field" is deliberate, not "belt" -- the operator's -// ruling generalizes chunks to other kinds of debris field later; only AsteroidBelt/AsteroidBeltData, the one -// live field kind, keep their existing names. -public readonly struct ChunkId : IEquatable -{ - public readonly CultRecordKey Field; - public readonly int Index; - - public ChunkId(CultRecordKey field, int index) - { - Field = field; - Index = index; - } - - public bool Equals(ChunkId other) => Field.Equals(other.Field) && Index == other.Index; - public override bool Equals(object obj) => obj is ChunkId other && Equals(other); - public override int GetHashCode() => (Field.GetHashCode() * 397) ^ Index; -} - -// Mining Cut 3 (docs/mining-cut-refresh.md, Q2 A): what an entity targets -- another entity, a chunk, or nothing. -// One slot holds either kind (Entity.Target, written only by Entity.SetTarget). A chunk never equals an entity. -// There is deliberately no == operator: a comparison against null or an entity must say which side it means. -public readonly struct TargetRef : IEquatable -{ - public readonly Entity Entity; - public readonly ChunkId? Chunk; - - public TargetRef(Entity entity) - { - Entity = entity; - Chunk = null; - } - - public TargetRef(ChunkId chunk) - { - Entity = null; - Chunk = chunk; - } - - public static TargetRef None => default; - public bool IsNone => Entity == null && !Chunk.HasValue; - - public static implicit operator TargetRef(Entity entity) => new TargetRef(entity); - public static implicit operator TargetRef(ChunkId chunk) => new TargetRef(chunk); - - public bool Equals(TargetRef other) => ReferenceEquals(Entity, other.Entity) && Nullable.Equals(Chunk, other.Chunk); - public override bool Equals(object obj) => obj is TargetRef other && Equals(other); - public override int GetHashCode() => Chunk.HasValue ? Chunk.Value.GetHashCode() : Entity?.GetHashCode() ?? 0; -} - -// Cut 2: wear on one chunk. BrokenUntil is the absolute zone time the chunk respawns at; null means the chunk -// carries damage (or none) but is not currently broken. Respawn is read lazily by comparing to zone time -- -// nothing decrements or clears this on a timer. -public struct ChunkWear -{ - public float Damage; - public double? BrokenUntil; } public class Orbit @@ -1004,13 +498,11 @@ public class Orbit public float2 Velocity = float2.zero; public float2 Position = float2.zero; public float2 PreviousPosition = float2.zero; + public float Period; - // Seconds per turn, written only by the Zone constructor (Zone.PeriodAround); infinite when the orbit has no - // field to circle in. - public float Period { get; internal set; } - - public Orbit(OrbitData data) + public Orbit(PlanetSettings settings, OrbitData data) { Data = data; + Period = settings.OrbitPeriod.Evaluate(data.Distance); } } diff --git a/Assets/Scripts/ServerShared/ZoneData.cs b/Assets/Scripts/ServerShared/ZoneData.cs index a08895aaa..90158fdb4 100644 --- a/Assets/Scripts/ServerShared/ZoneData.cs +++ b/Assets/Scripts/ServerShared/ZoneData.cs @@ -5,7 +5,6 @@ using System; using System.Collections; using System.Collections.Generic; -using System.Linq; using GameCult.Caching; using MessagePack; using Newtonsoft.Json; @@ -36,37 +35,7 @@ public class ZonePack [JsonProperty("time"), Key(5)] public double Time; - // Cut 2 (docs/mining-cut.md): chunk wear (damage taken, broken-until time), keyed by chunk. Nullable, not - // defaulted to an empty list: an older record has no key 6 at all, and MessagePack fills a missing trailing - // key with nil, which a reference-typed field reads back as null. ARunWithoutKeySixLoadsWhole pins that a - // record from before this key existed loads with no wear, rather than throwing or silently reading a - // default instance. - [JsonProperty("chunkWear"), Key(6)] - public List ChunkWear; - // True once this zone's boss has been spawned. The dead boss leaves no entity, so this is the one fact that tells a - // slain boss from one that never existed; RunGoal.ExitOpen reads it. Written only by ZoneGenerator, carried by PackZone. - [JsonProperty("bossSpawned"), Key(7)] - public bool BossSpawned; -} - -// Cut 2 (docs/mining-cut.md): one packed wear entry for one chunk. "Field" names the body that owns the chunk -// (an asteroid belt today; the operator's ruling generalizes chunks to other kinds of debris field later), not -// "belt" -- the chunk surface itself must not bake in the one live field kind. -[MessagePackObject, JsonObject(MemberSerialization.OptIn)] -public class ChunkWearPack -{ - [JsonProperty("field"), Key(0)] - public CultRecordKey Field; - - [JsonProperty("index"), Key(1)] - public int Index; - - [JsonProperty("damage"), Key(2)] - public float Damage; - - [JsonProperty("brokenUntil"), Key(3)] - public double? BrokenUntil; } [JsonObject(MemberSerialization.OptIn)] @@ -81,10 +50,20 @@ public abstract class BodyData [JsonProperty("mass"), Key(3)] public float Mass = 0; - // MessagePack key 4 belonged to the removed stored Resources; do not reuse it. A belt's yield is derived by FieldKinds.Yield. + [CultReference(typeof(SimpleCommodityData), many: true), JsonProperty("resources"), Key(4)] + public Dictionary, float> Resources = new Dictionary, float>(); [JsonProperty("bodyRadiusMul")] [Key(5)] public float BodyRadiusMultiplier = 1; + + [JsonProperty("gravRadiusMul")] [Key(6)] + public float GravityRadiusMultiplier = 1; + + [JsonProperty("depthMul")] [Key(7)] + public float GravityDepthMultiplier = 1; + + [JsonProperty("depthExp")] [Key(8)] + public float GravityDepthExponent = 16; } [CultDocument("aetheria.planetdata", "1"), MessagePackObject, JsonObject(MemberSerialization.OptIn)] @@ -98,339 +77,6 @@ public class AsteroidBeltData : BodyData { [JsonProperty("asteroids"), Key(9)] public Asteroid[] Asteroids; - - // Mining Cut 3 (docs/mining-cut-refresh.md, Q16 B): the belt's field kind, chosen once and saved. Unset on a - // belt from before this key existed (MessagePack leaves a missing trailing key at its default); Zone assigns - // it on first load through FieldKinds.Ensure, the same function generation uses. - [JsonProperty("kind"), Key(10)] - public CultRecordRef Kind; - - // A Trojan swarm (ruling trojans-ride-host-period-with-stations): every rock rides the belt's rail at the rail's period, so - // the swarm keeps its shape. False on a belt from before this key (MessagePack leaves a missing trailing key at its default), - // which keeps each rock on its own distance's period: an annulus. - [JsonProperty("ridesRail"), Key(11)] - public bool RidesRail; -} - -// Mining Cut 3 (docs/mining-cut-refresh.md, Q11): a kind of debris field, an authored catalog record. A chunk's -// reflectivity comes from its field's kind; its yields (ore geography, ruling ores-are-regional) are the ores a belt of -// this kind holds before a province weights them. FieldKinds.Yield is the one reader. -[CultDocument("aetheria.fieldkinddata", "1"), MessagePackObject, JsonObject(MemberSerialization.OptIn)] -public class FieldKindData -{ - [CultName, JsonProperty("name"), Key(0)] - public string Name = ""; - - // Reflectivity per schematic cell of chunk area: a chunk reflects CrossSection × its area in cells × the light - // on it (Zone.ChunkVisibility), the rule Reflector applies to a hull. - [JsonProperty("crossSection"), Key(1)] - public float CrossSection; - - // How often generation picks this kind, relative to the others (FieldKinds.Assign). Zero never picks it. - [JsonProperty("generationWeight"), Key(2)] - public float GenerationWeight = 1; - - // The ores a belt of this kind holds. Empty on a kind from before this key (MessagePack leaves a missing trailing key at its default). - [JsonProperty("yields"), Key(3)] - public List Yields = new List(); -} - -// One ore a kind of field holds: Abundance of Commodity before the belt's province weights it. A Regional ore is held only -// where the province lists it (ruling ores-are-regional: some ores exist only in some provinces); any other entry is held -// everywhere, scaled by the province's factor for it. -[MessagePackObject, JsonObject(MemberSerialization.OptIn)] -public class FieldYield -{ - [JsonProperty("commodity"), Key(0)] - public CultRecordRef Commodity; - - [JsonProperty("abundance"), Key(1)] - public float Abundance; - - [JsonProperty("regional"), Key(2)] - public bool Regional; -} - -// Ore geography (rulings provinces-within-regions, ores-are-regional): a kind of ground, authored. A region deals its -// provinces' types from a deck holding GenerationWeight cards of each type (ruling province-types-dealt-per-region); -// a province's type weights which kinds its belts draw and which ores a kind holds there. -[CultDocument("aetheria.provincedata", "1"), MessagePackObject, JsonObject(MemberSerialization.OptIn)] -public class ProvinceData -{ - [CultName, JsonProperty("name"), Key(0)] - public string Name = ""; - - // The number of cards of this type in a region's deck. Zero is never dealt. - [JsonProperty("generationWeight"), Key(1)] - public int GenerationWeight = 1; - - // Multiplies the kind's own GenerationWeight in a belt's draw; a kind not listed is multiplied by one. - [JsonProperty("kinds"), Key(2)] - public List Kinds = new List(); - - // Multiplies an ore's Abundance wherever it is held; an ore not listed is multiplied by one, or by zero when the - // kind's entry for it is Regional. - [JsonProperty("ores"), Key(3)] - public List Ores = new List(); -} - -[MessagePackObject, JsonObject(MemberSerialization.OptIn)] -public class ProvinceKindWeight -{ - [JsonProperty("kind"), Key(0)] - public CultRecordRef Kind; - - [JsonProperty("weight"), Key(1)] - public float Weight = 1; -} - -[MessagePackObject, JsonObject(MemberSerialization.OptIn)] -public class ProvinceOre -{ - [JsonProperty("commodity"), Key(0)] - public CultRecordRef Commodity; - - [JsonProperty("weight"), Key(1)] - public float Weight = 1; -} - -// Mining Cut 3 (Q16 B): the one owner of which kind a belt is. Ore geography: and of what it yields. -public static class FieldKinds -{ - // The one weighted pick: an index into weights, chosen by a stable hash of the site (the same site and the same - // weights always give the same index), never one whose weight is not positive. -1 when no weight is positive. - internal static int Pick(string site, double[] weights) - { - var pick = site.StableHash() / 4294967296.0 * weights.Sum(); - var last = -1; - for (var i = 0; i < weights.Length; i++) - { - if (weights[i] <= 0) continue; - last = i; - if (pick < weights[i]) return i; - pick -= weights[i]; - } - return last; - } - - // A weighted pick among the catalog's kinds, by a stable hash of the belt's site: the same site, catalog and province - // type always give the same kind. A kind's weight is its GenerationWeight times its province's factor for it; a belt with - // no province type (unset, or naming nothing the catalog holds) draws unweighted. Generation names a belt by the zone's - // seed and the belt's place in generation order (never by the key the cache mints, which differs every run); a belt saved - // without a kind is named by its key. Kinds are ordered by key so the pick does not depend on store order. - // Unset when the catalog has no kind with positive weight. - public static CultRecordRef Assign(string site, CultCache catalog, CultRecordRef province) - { - var type = catalog.Get(province); - var kinds = catalog.GetAll() - .Select(kind => - { - var key = catalog.RefOf(kind).Key; - var factor = Factor(type?.Kinds.Where(entry => entry.Kind.Key.Equals(key)).Select(entry => (double) entry.Weight), 1.0); - // Both must be positive: two negatives do not multiply into a weight. - return (Key: key, Weight: kind.GenerationWeight > 0f && factor > 0.0 ? kind.GenerationWeight * factor : 0.0); - }) - .Where(kind => kind.Weight > 0.0) - .OrderBy(kind => kind.Key.Value, StringComparer.Ordinal) - .ToArray(); - if (kinds.Length == 0) return default; - - return new CultRecordRef(kinds[Pick(site, kinds.Select(kind => kind.Weight).ToArray())].Key); - } - - // A province's factor for one entry: the sum of its listings, or the default when it lists none. - private static double Factor(IEnumerable listed, double unlisted) - { - var weights = listed?.ToArray(); - return weights == null || weights.Length == 0 ? unlisted : weights.Sum(); - } - - // Gives a belt with no kind its kind and saves it; a belt that has one keeps it, whatever the catalog now says. - // Generation (ZoneGenerator) and first load (Zone) both call this, so there is one assignment rule. - public static void Ensure(string site, AsteroidBeltData belt, CultCache cache, CultRecordRef province) - { - if (belt.Kind.IsSet()) return; - belt.Kind = Assign(site, cache, province); - if (belt.Kind.IsSet()) cache.Upsert(belt); - } - - // What a belt of this kind holds in a zone of this province: each of the kind's yields, its Abundance times the - // province's factor for the ore (unlisted: one, or zero when the yield is Regional), summed per commodity, in commodity - // key order, zero amounts dropped. Derived on every call, never stored. Empty for an unset kind. - public static (CultRecordRef Commodity, float Amount)[] Yield(CultRecordRef kind, - CultRecordRef province, CultCache catalog) - { - var data = catalog.Get(kind); - if (data == null) return Array.Empty<(CultRecordRef, float)>(); - var type = catalog.Get(province); - return data.Yields - .Select(yield => (yield.Commodity, Amount: yield.Abundance * Factor( - type?.Ores.Where(ore => ore.Commodity.Key.Equals(yield.Commodity.Key)).Select(ore => (double) ore.Weight), yield.Regional ? 0.0 : 1.0))) - .GroupBy(yield => yield.Commodity.Key.Value, StringComparer.Ordinal) - .OrderBy(group => group.Key, StringComparer.Ordinal) - .Select(group => (group.First().Commodity, Amount: (float) group.Sum(yield => yield.Amount))) - .Where(yield => yield.Amount > 0f) - .ToArray(); - } -} - -// Ore geography (rulings provinces-within-regions, boss-zone-is-near-side, province-partition-by-size, province-types-dealt-per-region). -// Pure functions of the zone graph, the run seed and the catalog: nothing here draws from Galaxy's Random stream, stores membership -// or reads who owns what. Galaxy builds provinces once, in its generation and save constructors, and nothing re-partitions them. -public static class Provinces -{ - // Zones per province when a settings object does not say (SectorGenerationSettings.ProvinceZones): calibration, not a rule. - public const int DefaultZonesPerProvince = 8; - - // A boss zone sits on the near side of its border: its crossing links are its links to zones in the component of exit in - // the graph without it. The one definition, read by Regions (which cuts them) and ExtraExits (which prunes all but one). - // exit unset (-1) gives none, and a boss zone that is the exit has none. Ordered by boss, then far zone. - public static (int Boss, int Far)[] CrossingLinks(int[][] adjacency, IReadOnlyCollection bossZones, int exit) - { - var links = new List<(int Boss, int Far)>(); - if (exit >= 0) - foreach (var boss in bossZones.Distinct().Where(boss => boss != exit).OrderBy(boss => boss)) - { - var exitSide = Flood(adjacency, exit, (a, b) => b != boss); - foreach (var next in adjacency[boss].OrderBy(next => next)) - if (exitSide[next]) links.Add((boss, next)); - } - return links.ToArray(); - } - - // The crossing links to prune so each boss zone keeps one exit: all of them but the link to the boss zone's successor on - // exitPath (the zones from the entrance to the exit), which is the link the run goes through. The generator's exit path - // passes through every boss zone by one of its crossing links; a boss zone off exitPath, last on it, or followed by a zone - // it has no crossing link to breaks that, and throws naming the boss zone rather than guessing which link to keep. - public static (int Boss, int Far)[] ExtraExits(int[][] adjacency, IReadOnlyCollection bossZones, int exit, int[] exitPath) - { - var extra = new List<(int Boss, int Far)>(); - foreach (var links in CrossingLinks(adjacency, bossZones, exit).GroupBy(link => link.Boss)) - { - var at = Array.IndexOf(exitPath, links.Key); - var kept = at >= 0 && at + 1 < exitPath.Length ? exitPath[at + 1] : -1; - if (!links.Any(link => link.Far == kept)) - throw new InvalidOperationException($"boss zone {links.Key} has no crossing link to its successor on the exit path, so no exit to keep"); - extra.AddRange(links.Where(link => link.Far != kept)); - } - return extra.ToArray(); - } - - // Each zone's region, named by the region's least zone index. Cutting every boss zone's crossing links (CrossingLinks) - // leaves the regions as the connected components. Every zone, boss zones included, is in exactly one. - public static int[] Regions(int[][] adjacency, IReadOnlyCollection bossZones, int exit) - { - var cut = CrossingLinks(adjacency, bossZones, exit).Select(link => (Math.Min(link.Boss, link.Far), Math.Max(link.Boss, link.Far))).ToHashSet(); - - var regionOf = new int[adjacency.Length]; - Array.Fill(regionOf, -1); - for (var start = 0; start < adjacency.Length; start++) - { - if (regionOf[start] >= 0) continue; - var members = Flood(adjacency, start, (a, b) => !cut.Contains((Math.Min(a, b), Math.Max(a, b)))); - for (var i = 0; i < members.Length; i++) if (members[i]) regionOf[i] = start; - } - return regionOf; - } - - // Each zone's province, named by the province's seed zone index. A region of size s takes max(1, round(s / zonesPerProvince)) - // seeds: the first is the zone with the least hash of the run seed, each next the zone farthest (in-region hops) from the - // seeds chosen so far, ties by that hash; then every zone joins the nearest seed, ties to the earlier seed. A province is - // contiguous and never crosses a region. - public static int[] Partition(int[][] adjacency, int[] regionOf, uint runSeed, int zonesPerProvince) - { - var seedOf = new int[adjacency.Length]; - uint Hash(int index) => $"{runSeed}:province-seed:{index}".StableHash(); - foreach (var region in Enumerable.Range(0, adjacency.Length).GroupBy(zone => regionOf[zone]).OrderBy(group => group.Key)) - { - var zones = region.ToArray(); - var count = Math.Min(zones.Length, Math.Max(1, (int) Math.Round((double) zones.Length / Math.Max(1, zonesPerProvince), MidpointRounding.AwayFromZero))); - var seeds = new List { zones.OrderBy(Hash).ThenBy(zone => zone).First() }; - while (seeds.Count < count) - { - var hops = Grow(adjacency, regionOf, seeds.ToArray()).Hops; - seeds.Add(zones.Where(zone => !seeds.Contains(zone)).OrderByDescending(zone => hops[zone]).ThenBy(Hash).ThenBy(zone => zone).First()); - } - var owner = Grow(adjacency, regionOf, seeds.ToArray()).Owner; - foreach (var zone in zones) seedOf[zone] = seeds[owner[zone]]; - } - return seedOf; - } - - // A region's hand of province types, one per province in ascending seed-zone order. Types are dealt without replacement from - // a deck of GenerationWeight cards per type (catalog types in key order), each draw one weighted pick over the cards remaining - // at a site named by the run seed, the region and the draw's place; the deck is restored whole when it runs out. An empty - // deck deals every province an unset type. - public static CultRecordRef[] Deal(int regionKey, int seedCount, uint runSeed, CultCache catalog) - { - var types = catalog.GetAll() - .Where(type => type.GenerationWeight > 0) - .Select(type => (Ref: catalog.RefOf(type), Cards: type.GenerationWeight)) - .OrderBy(type => type.Ref.Key.Value, StringComparer.Ordinal) - .ToArray(); - var hand = new CultRecordRef[seedCount]; - if (types.Length == 0) return hand; - - var remaining = types.Select(type => type.Cards).ToArray(); - for (var n = 0; n < seedCount; n++) - { - if (remaining.Sum() == 0) remaining = types.Select(type => type.Cards).ToArray(); - var card = FieldKinds.Pick($"{runSeed}:province-deal:{regionKey}:{n}", remaining.Select(cards => (double) cards).ToArray()); - remaining[card]--; - hand[n] = types[card].Ref; - } - return hand; - } - - // Every zone reachable from start over the links the filter allows. - private static bool[] Flood(int[][] adjacency, int start, Func allowed) - { - var reached = new bool[adjacency.Length]; - var stack = new Stack(); - reached[start] = true; - stack.Push(start); - while (stack.Count > 0) - { - var zone = stack.Pop(); - foreach (var next in adjacency[zone]) - if (!reached[next] && allowed(zone, next)) - { - reached[next] = true; - stack.Push(next); - } - } - return reached; - } - - // Breadth-first growth from seeds inside their regions, level by level: each zone's hops to the nearest seed and the rank - // (place in seeds) of the earliest seed among those that reach it first. - private static (int[] Owner, int[] Hops) Grow(int[][] adjacency, int[] regionOf, int[] seeds) - { - var owner = new int[adjacency.Length]; - var hops = new int[adjacency.Length]; - Array.Fill(owner, -1); - for (var rank = 0; rank < seeds.Length; rank++) - { - owner[seeds[rank]] = rank; - hops[seeds[rank]] = 0; - } - var frontier = seeds.ToList(); - for (var level = 1; frontier.Count > 0; level++) - { - var claims = new Dictionary(); - foreach (var zone in frontier) - foreach (var next in adjacency[zone]) - if (owner[next] < 0 && regionOf[next] == regionOf[zone]) - claims[next] = claims.TryGetValue(next, out var rank) ? Math.Min(rank, owner[zone]) : owner[zone]; - foreach (var claim in claims) - { - owner[claim.Key] = claim.Value; - hops[claim.Key] = level; - } - frontier = claims.Keys.OrderBy(zone => zone).ToList(); - } - return (owner, hops); - } } [CultDocument("aetheria.gasgiantdata", "1"), MessagePackObject, JsonObject(MemberSerialization.OptIn)] @@ -451,6 +97,18 @@ public class GasGiantData : BodyData [JsonProperty("albedoRotationSpeed"), Key(13)] public float AlbedoRotationSpeed = 1; + [JsonProperty("gravRadiusMul")] [Key(14)] + public float WaveRadiusMultiplier = 1; + + [JsonProperty("depthMul")] [Key(15)] + public float WaveDepthMultiplier = 1; + + [JsonProperty("depthExp")] [Key(16)] + public float WaveDepthExponent = 8; + + [JsonProperty("depthExp")] [Key(17)] + public float WaveSpeedMultiplier = 8; + [JsonProperty("materialOverrides"), Key(18)] public List MaterialOverrides = new List(); diff --git a/Assets/Scripts/ServerShared/ZoneGenerator.cs b/Assets/Scripts/ServerShared/ZoneGenerator.cs index 5b82a9a1a..c36d5e9f6 100644 --- a/Assets/Scripts/ServerShared/ZoneGenerator.cs +++ b/Assets/Scripts/ServerShared/ZoneGenerator.cs @@ -35,22 +35,17 @@ public static class ZoneGenerator private const int MaximumPlacementSamples = 32; - // ambient: false keeps the planets, orbits and stations but generates no ship and no turret, so nothing wanders - // into a scenario's authored conditions (docs/scenarios-cut.md, 2.1). The rule is applied here, not by pruning. public static ZonePack GenerateZone( ItemManager itemManager, ZoneGenerationSettings zoneSettings, - PlanetSettings planetSettings, Galaxy galaxy, GalaxyZone galaxyZone, - bool isTutorial = false, - bool ambient = true) + bool isTutorial = false) { var pack = new ZonePack(); var cache = itemManager.ItemData; - var seed = galaxyZone.Name.StableHash() ^ (uint) pcg3d(galaxyZone.Position).x; - var random = new Random(seed); + var random = new Random(galaxyZone.Name.StableHash() ^ (uint) pcg3d(galaxyZone.Position).x); var density = saturate(galaxy.Background.CloudDensity(galaxyZone.Position)/2); pack.Radius = zoneSettings.ZoneRadius.Evaluate(density); @@ -90,17 +85,13 @@ public static class ZoneGenerator } var totalArea = occupiedAreas.Sum(c => c.Area); - // Every area root is massive, so a root's reach is Reach x its nearest area's centre (WellTree.SubzoneReach) - var centres = occupiedAreas.Select(c => c.Center).ToList(); - for (var k = 0; k < occupiedAreas.Count; k++) + foreach (var c in occupiedAreas) { - var c = occupiedAreas[k]; - planets.AddRange(GenerateEntities(zoneSettings, planetSettings, ref random, c.Area / totalArea * pack.Mass, c.Radius, c.Center, - WellTree.SubzoneReach(centres, k))); + planets.AddRange(GenerateEntities(zoneSettings, ref random, c.Area / totalArea * pack.Mass, c.Radius, c.Center)); } } else - planets.AddRange(GenerateEntities(zoneSettings, planetSettings, ref random, pack.Mass, pack.Radius, float2.zero, float.PositiveInfinity)); + planets.AddRange(GenerateEntities(zoneSettings, ref random, pack.Mass, pack.Radius, float2.zero)); // Every orbit is a record; parents link to records, so each orbit holds its key before any child names it var orbitMap = new Dictionary(); @@ -118,8 +109,7 @@ public static class ZoneGenerator } pack.Orbits = planets.Select(planet => cache.RefOf(orbitMap[planet])).ToList(); - var beltOf = new Dictionary(); - pack.Planets = planets.Where(p=>!p.Empty).Select((planet, index) => + pack.Planets = planets.Where(p=>!p.Empty).Select(planet => { BodyType bodyType = planet.Belt ? BodyType.Asteroid : planet.Mass > zoneSettings.SunMass ? BodyType.Sun : @@ -150,12 +140,11 @@ public static class ZoneGenerator planetData.Orbit = cache.RefOf(orbitMap[planet]); if (planetData is AsteroidBeltData beltData) { - beltOf[planet] = beltData; beltData.Asteroids = Enumerable.Range(0, (int) zoneSettings.AsteroidCount.Evaluate(beltData.Mass * orbitMap[planet].Distance)) .Select(_ => new Asteroid { - Distance = orbitMap[planet].Distance + random.NextFloat()*(random.NextFloat()-.5f)*2*planet.BeltHalfWidth, + Distance = orbitMap[planet].Distance + random.NextFloat()*(random.NextFloat()-.5f)*zoneSettings.AsteroidBeltWidth.Evaluate(orbitMap[planet].Distance), Phase = random.NextFloat(), Size = random.NextFloat(), RotationSpeed = zoneSettings.AsteroidRotationSpeed.Evaluate(random.NextFloat()) @@ -167,10 +156,8 @@ public static class ZoneGenerator { if (gas is SunData sun) { - var hueDraw = random.NextFloat(); - float primary = ColorMath.HueOutsideBand(hueDraw, zoneSettings.SunHueExcludedStart, zoneSettings.SunHueExcludedEnd); - float secondary = ColorMath.SecondaryHueOutsideBand(hueDraw, random.NextFloat() > .5, zoneSettings.SunSecondaryColorDistance, - zoneSettings.SunHueExcludedStart, zoneSettings.SunHueExcludedEnd); + float primary = random.NextFloat(); + float secondary = frac(primary + 1 + zoneSettings.SunSecondaryColorDistance * (random.NextFloat() > .5 ? 1 : -1)); gas.Colors = new [] { float4(ColorMath.HsvToRgb(float3(primary, zoneSettings.SunColorSaturation, .5f)), 0), @@ -210,132 +197,27 @@ public static class ZoneGenerator } // A body is named for the first eight characters of the key the cache mints for it - var bodyKey = cache.Upsert(planetData).Key; - planetData.Name = bodyKey.Value.Substring(0, 8); - // Mining Cut 3 (Q16 B): a belt's field kind is chosen here, at generation, and saved with it. - if (planetData is AsteroidBeltData generatedBelt) FieldKinds.Ensure($"{seed}:belt:{index}", generatedBelt, cache, galaxyZone.Province?.Type ?? default); + planetData.Name = cache.Upsert(planetData).Key.Value.Substring(0, 8); return cache.Upsert(planetData); }).ToList(); - // Trojan swarms (rulings trojans-first, trojans-ride-host-period-with-stations): a belt on a copy of its host's rail, its - // rocks round both L4 and L5. Drawn from a stream of its own, so no other draw in the zone moves; not a GeneratorPlanet, - // so it takes no slot and no station candidacy sees it. A standing binary leaves a bodyless node (Empty) that keeps its - // pair's mass and a parent, so the Empty guard is what keeps a swarm off a rail no body is on. - var swarmRandom = new Random(seed ^ TrojanStream); - var swarmHosts = new HashSet(); - foreach (var host in planets.Where(p => p.Parent != null && !p.Parent.Empty && !p.Empty && !p.Belt && p.Distance > 0 - && p.Mass > zoneSettings.PlanetMass && p.Mass <= zoneSettings.SunMass)) - { - if (swarmRandom.NextFloat() >= zoneSettings.TrojanProbability) continue; - swarmHosts.Add(host); - var hostOrbit = orbitMap[host]; - var rail = new OrbitData { Parent = hostOrbit.Parent, Distance = hostOrbit.Distance, Phase = hostOrbit.Phase }; - pack.Orbits.Add(cache.Upsert(rail)); - var swarm = new AsteroidBeltData - { - Orbit = cache.RefOf(rail), RidesRail = true, - Asteroids = TrojanRocks(zoneSettings, ref swarmRandom, rail.Distance, rail.Phase) - }; - BodyData swarmBody = swarm; - var swarmKey = cache.Upsert(swarmBody).Key; - swarm.Name = swarmKey.Value.Substring(0, 8); - FieldKinds.Ensure($"{seed}:swarm:{swarmHosts.Count}", swarm, cache, galaxyZone.Province?.Type ?? default); - pack.Planets.Add(cache.Upsert(swarmBody)); - } - - // Laned belts (rulings belt-shapes-direction, lanes-two-sided-visual-margin): a belt candidate that kept its body carries - // an annulus on a copy of its rail that fills its slot less a lane round the body, rocks on both sides. The lane is sized - // against the body the player sees (LaneBodyRadii body radii a side), and only a body whose slot holds a band at least - // that wide on both sides gets one. One belt shape per parent, and none on a swarm host. Drawn from a stream of its own, - // so no other draw in the zone moves; its rocks sit inside the host's slot, below the next sibling's spacing, so they - // raise no L_F and no support: the lane moves no well, period or height. - var laneRandom = new Random(seed ^ LaneStream); - var shaped = new HashSet(planets.Where(p => p.Belt).Select(p => p.Parent)); - foreach (var host in planets.Where(p => p.BeltCandidate && !p.Belt)) - { - if (laneRandom.NextFloat() >= zoneSettings.LaneProbability) continue; - var lane = zoneSettings.LaneBodyRadii * planetSettings.BodyRadius.Evaluate(host.Mass); - if (swarmHosts.Contains(host) || shaped.Contains(host.Parent) || !LaneHost(host, lane)) continue; - shaped.Add(host.Parent); - var hostOrbit = orbitMap[host]; - var rail = new OrbitData { Parent = hostOrbit.Parent, Distance = hostOrbit.Distance, Phase = hostOrbit.Phase }; - pack.Orbits.Add(cache.Upsert(rail)); - var laned = new AsteroidBeltData - { - Orbit = cache.RefOf(rail), - Asteroids = LaneRocks(zoneSettings, ref laneRandom, host.Mass, rail.Distance, lane, host.SlotInner, host.SlotOuter) - }; - BodyData lanedBody = laned; - var lanedKey = cache.Upsert(lanedBody).Key; - laned.Name = lanedKey.Value.Substring(0, 8); - FieldKinds.Ensure($"{seed}:lane:{shaped.Count}", laned, cache, galaxyZone.Province?.Type ?? default); - pack.Planets.Add(cache.Upsert(lanedBody)); - } - - // The generator's own well tree, for clearance only (the Zone builds its own): what a rail must stay out of is the body's - // support, or its Roche margin if more. A belt's extent is the rule Zone reads (AsteroidBelt.Extent). Swarm and lane rails - // are left out: a swarm's extent is its own rail, a copy of its host's, and a lane's outer rock sits inside its host's slot, - // below the next sibling's spacing, so neither raises an L_F or a support. - var wellNodes = planets.Select(p => new WellNode(cache.RefOf(orbitMap[p]).Key, p.Parent == null ? default : cache.RefOf(orbitMap[p.Parent]).Key, - p.Distance, p.Phase, p.Empty || p.Belt ? 0f : p.Mass, - p.Belt ? AsteroidBelt.Extent(beltOf[p], p.Distance) : p.Distance, p.FixedPosition)).ToList(); - var wells = WellTree.Build(wellNodes, planetSettings, pack.Radius); - float Extent(GeneratorPlanet p) - { - var key = cache.RefOf(orbitMap[p]).Key; - var roche = p.Empty || p.Belt ? 0f : WellTree.Curves(planetSettings, p.Mass).Softening * RocheMargin; - return Math.Max(wells.Support(key), roche); - } - bool Massive(GeneratorPlanet p) => wells.Reach(cache.RefOf(orbitMap[p]).Key) > 0f; - var nearestFaction = galaxy.Factions.MinBy(f => galaxy.HomeZones[f].Distance[galaxyZone]); var nearestFactionHomeZone = galaxy.HomeZones[nearestFaction]; - var factionPresence = galaxy.InfluenceOf(nearestFaction) - nearestFactionHomeZone.Distance[galaxyZone] + 1; + var factionPresence = nearestFaction.InfluenceDistance - nearestFactionHomeZone.Distance[galaxyZone] + 1; var storyStations = galaxyZone.Locations.Where(story => story.Type == LocationType.Station).ToArray(); var stationCount = (int)(random.NextFloat() * (factionPresence + 1)) + storyStations.Length; - // Enemy count below is based on this pre-override value, so the tutorial entrance doesn't gain an enemy - // just because its station got forced. - var baseStationCount = stationCount; - // Operator ruling, 2026-09-25 (docs/locomotion-cut.md, "Tutorial station"): the entrance zone always - // gets a generated faction station with a docking bay, deterministically. Galaxy.cs halves influence and - // picks the lowest-influence unowned zone for Entrance, which otherwise rolls stationCount 0 on every - // seed. galaxy.Entrance is reference-identity, not a name comparison. - var isTutorialEntrance = isTutorial && galaxyZone == galaxy.Entrance; - if (isTutorialEntrance && stationCount < 1) stationCount = 1; - // A station's source is a well-bearing body alone on its ring whose rail clears every massive sibling's extent (the - // sibling's support, or its Roche margin if more) and the largest reach of any station or turret hull: whatever hull - // is built there, its Lagrange orbit then sits clear of any other body. - var cellSize = itemManager.GameplaySettings.SchematicCellSize; - var largestReach = cache.GetAll().Where(h => h.HullType == HullType.Station || h.HullType == HullType.Turret) - .Select(h => h.Reach(cellSize)).DefaultIfEmpty(0f).Max(); - var candidates = planets - .Where(p => p.Parent != null && !p.Empty && !p.Belt - && p.Parent.Children.TrueForAll(c => c == p || (abs(c.Distance - p.Distance) >= WellTree.RingWindow - && (!Massive(c) || abs(c.Distance - p.Distance) > Extent(c) + largestReach)))) + var potentialLagrangePoints = planets + .Where(p => p.Parent != null && p.Parent.Children + .TrueForAll(c => !(c != p && abs(c.Distance - p.Distance) < .1f))) // Filter Rosettes .OrderBy(p => p.Distance) .ToArray(); - // (the rail, how far a body on it keeps others out, whether it is a station's own orbit rather than a base's) - var sources = candidates.Skip(candidates.Length / 2).Take(stationCount) - .Select(p => (orbit: orbitMap[p], extent: Extent(p), direct: false)).ToArray(); - if (isTutorialEntrance && candidates.Length == 0) - { - // The entrance gets a station whatever its bodies: it orbits a root node beyond its ring group (or, for a body, its - // whole family), never at a ring member's distance, and sits there, not at a Lagrange point. - var roots = planets.Where(p => p.Parent == null).ToList(); - var rootNode = roots.FirstOrDefault(p => p.Children.Count > 0) ?? (roots.Count > 1 ? roots.OrderByDescending(p => p.Mass).First() : null); - if (rootNode == null) - throw new InvalidOperationException( - "The tutorial entrance zone must always get a station, but it has no candidate orbit at all -- every planet in the zone is a parentless root."); - var distance = rootNode.Empty - ? (1 + GravityField.RingReach) * GravityField.Beta * rootNode.Children.Where(Massive).Min(c => c.Distance) - : Extent(rootNode); - var direct = new OrbitData { Parent = cache.RefOf(orbitMap[rootNode]), Distance = distance, Phase = random.NextFloat() }; - pack.Orbits.Add(cache.Upsert(direct)); - sources = new[] { (orbit: direct, extent: float.NegativeInfinity, direct: true) }; - } - var selectedStationOrbits = sources.Select(x => x.orbit).ToArray(); - var extentOf = sources.ToDictionary(x => x.orbit, x => x.extent); + // Pick a selection from the middle of the distribution + var selectedStationOrbits = potentialLagrangePoints + .Skip(potentialLagrangePoints.Length / 2) + .Take(stationCount) + .Select(p=>orbitMap[p]) + .ToArray(); var loadoutGenerators = new Dictionary(); @@ -346,81 +228,51 @@ public static class ZoneGenerator return loadoutGenerators[faction]; } - // L4 or L5: 60 degrees (one sixth of a turn) ahead of or behind the planet on its orbit. Phase is in turns. OrbitData CreateLagrangeOrbit(OrbitData baseOrbit) { - if (sources.First(x => x.orbit == baseOrbit).direct) return baseOrbit; var lagrangeOrbit = new OrbitData { Parent = baseOrbit.Parent, Distance = baseOrbit.Distance, - Phase = baseOrbit.Phase + sign(random.NextFloat() - .5f) / 6f, + Phase = baseOrbit.Phase + PI / 3 * sign(random.NextFloat() - .5f) }; pack.Orbits.Add(cache.Upsert(lagrangeOrbit)); return lagrangeOrbit; } - // A turret co-orbits with its station, on one side of it (side is -1 behind, +1 ahead), clear of the body inside - // it on that side by one of the turret's own radii: its centre sits innerReach + 2 turretReach beyond that - // body's. Every body's reach counts, so turrets of differing reach clear each other. Phase is in turns, so the - // arc length divides by the orbit's circumference. Returns where the turret sits (signed arc from the station) - // and its reach, or null when there is no turret hull to generate, before any orbit is created. - (float arc, float reach, bool placed)? PlaceTurret(OrbitData orbit, LoadoutGenerator loadoutGenerator, float side, float innerArc, float innerReach, - OrbitData baseOrbit) + void PlaceTurret(OrbitData orbit, LoadoutGenerator loadoutGenerator, int distanceMultiplier) { - var turret = loadoutGenerator.GenerateTurretLoadout(); - if (turret == null) return null; - var turretReach = (itemManager.GetData(turret.Hull) as HullData).Reach(itemManager.GameplaySettings.SchematicCellSize); - var arc = innerArc + side * (innerReach + 2 * turretReach); - // A turret whose centre is within the base body's extent plus its own reach of the base is not placed: its side stops. - var phase = orbit.Phase + arc / (2 * PI * orbit.Distance); - if (2 * orbit.Distance * abs(sin(PI * (phase - baseOrbit.Phase))) < extentOf[baseOrbit] + turretReach) - { - itemManager.Log("A turret was not placed: its station's base body is within its reach (story-turret-tail-clearance)."); - return (arc, turretReach, false); - } + var phase = 20f * distanceMultiplier / orbit.Distance; var turretOrbit = new OrbitData { Parent = orbit.Parent, Distance = orbit.Distance, - Phase = phase - + Phase = orbit.Phase + phase }; pack.Orbits.Add(cache.Upsert(turretOrbit)); + var turret = loadoutGenerator.GenerateTurretLoadout(); + if (turret == null) return; turret.Orbit = cache.RefOf(turretOrbit); pack.Entities.Add(turret); - return (arc, turretReach, true); } - // Turrets flank the station alternately, behind then ahead, each side growing outward from the station. - void PlaceTurrets(OrbitData orbit, LoadoutGenerator loadoutGenerator, int count, float stationReach, OrbitData baseOrbit) + void PlaceTurrets(OrbitData orbit, LoadoutGenerator loadoutGenerator, int count) { - var arcs = new float[2]; - var stopped = new bool[2]; - var reaches = new[] { stationReach, stationReach }; for(int t=0; t - (itemManager.GetData(station.Hull) as HullData).Reach(itemManager.GameplaySettings.SchematicCellSize); - for (var i = 0; i < storyStations.Length; i++) { var story = storyStations[i]; - if (i >= selectedStationOrbits.Length) { itemManager.Log($"Story station for {story.Faction?.Name} has no rail clear of the bodies; its story has nowhere to live!"); continue; } var orbit = selectedStationOrbits[i]; var lagrangeOrbit = CreateLagrangeOrbit(orbit); - var station = GetLoadoutGenerator(story.Faction).GenerateStationLoadout( - StationKinds.Choose(cache, story.Faction, $"{seed}:station:{i}", itemManager.Log)); + var station = GetLoadoutGenerator(story.Faction).GenerateStationLoadout(); if (station == null) { itemManager.Log($"Story station for {story.Faction?.Name} could not be generated; its story has nowhere to live!"); @@ -432,7 +284,7 @@ public static class ZoneGenerator station.Story = i; pack.Entities.Add(station); - if (ambient) PlaceTurrets(lagrangeOrbit, GetLoadoutGenerator(story.Faction), story.Turrets, StationReach(station), orbit); + PlaceTurrets(lagrangeOrbit, GetLoadoutGenerator(story.Faction), story.Turrets); } for (var i = storyStations.Length; i < selectedStationOrbits.Length; i++) @@ -441,55 +293,17 @@ public static class ZoneGenerator var security = (SecurityLevel) ((int) ((1f - pow(random.NextFloat(), factionPresence / 2f)) * 3f)); var lagrangeOrbit = CreateLagrangeOrbit(orbit); - var station = GetLoadoutGenerator(nearestFaction).GenerateStationLoadout( - StationKinds.Choose(cache, nearestFaction, $"{seed}:station:{i}", itemManager.Log)); - if (station == null) - { - if (isTutorialEntrance) - throw new InvalidOperationException( - $"The tutorial entrance zone must always get a station, but {nearestFaction?.Name} has no station loadout to generate."); - continue; - } + var station = GetLoadoutGenerator(nearestFaction).GenerateStationLoadout(); + if (station == null) continue; station.Orbit = cache.RefOf(lagrangeOrbit); station.SecurityLevel = security; station.SecurityRadius = pack.Radius; pack.Entities.Add(station); - if (ambient) PlaceTurrets(lagrangeOrbit, GetLoadoutGenerator(nearestFaction), 2, StationReach(station), orbit); + PlaceTurrets(lagrangeOrbit, GetLoadoutGenerator(nearestFaction), 2); } - // A boss zone gets its faction's boss whether or not the zone is ambient: the boss is the run's goal, not - // wandering traffic. The boss is its faction's boss Loadout, built whole by Loadouts.Materialize and never drawn - // (ruling boss-gear-is-a-loadout); ChooseProduct only brands a design-only slot. RunGoal reads the mark; nothing - // else decides whether a boss lives. - foreach (var bossFaction in galaxy.BossZones.Where(entry => entry.Value == galaxyZone).Select(entry => entry.Key)) - { - var loadout = Loadouts.BossOf(itemManager.ItemData, bossFaction, out var refusal); - if (loadout == null) - { - itemManager.Log($"{bossFaction.Name} has no boss: it {Loadouts.Describe(refusal)}. Its boss zone has no boss to kill."); - continue; - } - var failures = new List(); - var entity = Loadouts.Materialize(itemManager, null, loadout, design => GetLoadoutGenerator(bossFaction).ChooseProduct(design), failures); // the generator exists only once the Loadout is known to fit - if (entity == null) - { - itemManager.Log($"{bossFaction.Name}'s boss Loadout {loadout.Name} cannot be built: {string.Join("; ", failures)}"); - continue; - } - entity.Faction = bossFaction; - var boss = EntitySerializer.Pack(entity); - boss.Boss = true; - pack.Entities.Add(boss); - pack.BossSpawned = true; - } - - if (galaxyZone == galaxy.Exit && !pack.BossSpawned) - itemManager.Log("Galaxy.Exit has no boss: Galaxy.BossZones does not map a boss faction to the exit zone, or its boss Loadout is unset, missing or cannot be built (ZoneGenerator exit-without-boss). The exit gate stays sealed."); - - if (!ambient) return pack; - - var enemyCount = (int)(random.NextFloat() * factionPresence * 2) + baseStationCount; + var enemyCount = (int)(random.NextFloat() * factionPresence * 2) + stationCount; for (int i = 0; i < enemyCount; i++) { var ship = GetLoadoutGenerator(nearestFaction).GenerateShipLoadout(); @@ -522,15 +336,22 @@ public static class ZoneGenerator public static Faction[] EligibleWandererFactions(Faction[] factions, Faction owner, Faction nearest) => factions.Where(f => f != owner && f != nearest).ToArray(); - public static GeneratorPlanet[] GenerateEntities(ZoneGenerationSettings settings, PlanetSettings planetSettings, ref Random random, float mass, float radius, float2 fixedPosition, - float rootReach) + // static float ResourceValue(ref Random random, ZoneGenerationSettings settings, SimpleCommodityData resource, float density) + // { + // return random.NextPowerDistribution(resource.Minimum, resource.Maximum, resource.Exponent, + // 1 / lerp(settings.ResourceDensityMinimum, settings.ResourceDensityMaximum, density)); + // } + + public static GeneratorPlanet[] GenerateEntities(ZoneGenerationSettings settings, ref Random random, float mass, float radius, float2 fixedPosition) { var root = new GeneratorPlanet { FixedPosition = fixedPosition, Settings = settings, - Mass = mass - }; + Mass = mass, + ChildDistanceMaximum = radius * .75f, + ChildDistanceMinimum = settings.PlanetSafetyRadius.Evaluate(mass) + }; // There is some chance of generating a rosette or binary system // Probabilities which are fixed for the entire galaxy are in GlobalData, contained in the GameContext @@ -547,6 +368,8 @@ public static class ZoneGenerator count: (int)(random.NextFloat(1, 3) * random.NextFloat(1, 2)), massMulMin: .6f, massMulMax: .8f, + distMulMin: 1.25f, + distMulMax: 1.75f, jupiterJump: 1, massFraction: .1f); @@ -560,6 +383,8 @@ public static class ZoneGenerator count: (int) (random.NextFloat(1, 3 * m) + random.NextFloat(1, 3 * m)), massMulMin: 0.75f, massMulMax: 2.5f, + distMulMin: 1 + m * .25f, + distMulMax: 1.05f + m * .5f, jupiterJump: random.NextFloat() * random.NextFloat() * 10 + 1, massFraction: .5f ); @@ -573,6 +398,8 @@ public static class ZoneGenerator count: random.NextInt(5, 15), massMulMin: 0.75f, massMulMax: 2.5f, + distMulMin: 1.1f, + distMulMax: 1.25f, jupiterJump: random.NextFloat() * random.NextFloat() * 10 + 1, massFraction: .25f ); @@ -613,6 +440,8 @@ public static class ZoneGenerator count: planet.Mass < settings.GasGiantMass ? random.NextInt(1, 3) : random.NextInt(2, 6), massMulMin: .75f, massMulMax: 1.5f, + distMulMin: 1.05f, + distMulMax: 1.25f, jupiterJump: 1, massFraction: .15f); // Planetary satellites are not nearly as massive as planets themselves } @@ -627,198 +456,16 @@ public static class ZoneGenerator : root.AllPlanets().Where(p => p != root && p.Mass < settings.BeltMassCeiling && !binaries.Contains(p) && p.Children.Count == 0); foreach(var planet in beltCandidates.Reverse()) - { - planet.BeltCandidate = true; if (random.NextFloat() < settings.BeltProbability && !planet.Parent.Children.Any(p=>p.Belt)) planet.Belt = true; - } var totalMass = root.AllPlanets().Sum(p => p.Mass); var rootMass = root.Mass; foreach (var planet in root.AllPlanets()) planet.Mass = (planet.Mass / totalMass) * rootMass; - Place(root, planetSettings, radius, rootReach); - return root.AllPlanets().ToArray(); } - - // Placement (tail-taming-law-r3-band-loose-cusp, c4-proceed-and-fly): a child sits at least RocheMargin of its parent's Roche - // limits out; a massive child of a body also far enough that its own pull peak beats CuspMargin times its parent's pull there; - // siblings sit SiblingSpacing of a reach apart. Every other number is a GravityField constant. - public const float RocheMargin = 1.5f; - - private const uint TrojanStream = 0x9E3779B9u; - - // A swarm's rocks: alternately round L4 and L5 of the rail at `distance` and `phase`, each within half an arc of its point - // along the orbit and a half-width of the rail across it, thickest at the point. - public static Asteroid[] TrojanRocks(ZoneGenerationSettings settings, ref Random random, float distance, float phase) - { - var rocks = new Asteroid[2 * (int) settings.TrojanCount.Evaluate(distance)]; - for (var i = 0; i < rocks.Length; i++) - rocks[i] = new Asteroid - { - Distance = distance * (1 + random.NextFloat() * (random.NextFloat() - .5f) * 2 * settings.TrojanHalfWidth), - Phase = frac(phase + (i % 2 == 0 ? 1f : -1f) / 6f + random.NextFloat() * (random.NextFloat() - .5f) * settings.TrojanArc), - Size = random.NextFloat(), - RotationSpeed = settings.AsteroidRotationSpeed.Evaluate(random.NextFloat()) - }; - return rocks; - } - - private const uint LaneStream = 0x85EBCA6Bu; - - // Whether a placed body can carry a lane of half-width `lane`: its slot holds a band at least that wide on both sides - // (ruling lanes-two-sided-visual-margin), and it is not its parent's outermost child (ruling lane-not-outermost). Place - // stretches the chain to the window, so an outermost child's outer side is the window, not a sibling's spacing; a lane's outer - // band there would reach past every sibling's extent and raise its parent's support, and lanes move nothing else in the zone. - // An only child is its parent's outermost. - public static bool LaneHost(GeneratorPlanet host, float lane) => - host.Parent.Children.Any(c => c.Distance > host.Distance) - && host.SlotInner <= host.Distance - 2 * lane && host.SlotOuter >= host.Distance + 2 * lane; - - // A laned belt's rocks: the count an annulus of the host's mass at `distance` would draw, over the bands [inner, distance - lane] - // and [distance + lane, outer], each rock in a band by its area and drawn across it as the annulus draws across its width. - public static Asteroid[] LaneRocks(ZoneGenerationSettings settings, ref Random random, float mass, float distance, float lane, float inner, float outer) - { - float Sq(float x) => x * x; - var innerArea = Sq(distance - lane) - Sq(inner); - var share = innerArea / (innerArea + Sq(outer) - Sq(distance + lane)); - var rocks = new Asteroid[(int) settings.AsteroidCount.Evaluate(mass * distance)]; - for (var i = 0; i < rocks.Length; i++) - { - var innerBand = random.NextFloat() < share; - var a = innerBand ? inner : distance + lane; - var b = innerBand ? distance - lane : outer; - rocks[i] = new Asteroid - { - Distance = (a + b) / 2 + random.NextFloat() * (random.NextFloat() - .5f) * (b - a), - Phase = random.NextFloat(), - Size = random.NextFloat(), - RotationSpeed = settings.AsteroidRotationSpeed.Evaluate(random.NextFloat()) - }; - } - return rocks; - } - public const float CuspMargin = 1.5f; - public const float SiblingSpacing = .5f; - - /// - /// The one placement pass: gives every generated node its distance and every belt its half width, top-down. A body's children - /// are laid inside-out at the nearest the rules allow, the lightest family is folded into the parent (its mass kept) while the - /// outermost overflows the window, and the rest are stretched geometrically so the outermost sits at the window's edge. A - /// non-root's window ends before its own fade (Gamma x Reach x its distance); a root's, in a zone of several, ends under - /// rootReach / Beta so its support never meets another root's (root-window-floor), and is 0.75 x the area radius at most. - /// A rosette's ring is one orbit, and a member may itself be bodyless, which counts as one body of its family's mass; once its members have settled (their own children folded in), it folds into its node, - /// which becomes a body, if it cannot keep its heaviest member outside its Roche margin. Ported from docs/research/gravity-well-law/replace.py. - /// - public static void Place(GeneratorPlanet root, PlanetSettings planetSettings, float radius, float rootReach) - { - var q = 1 / (1 - SiblingSpacing * GravityField.Reach); - float Roche(float mass) => WellTree.Curves(planetSettings, mass).Softening; - float Strength(float mass) => WellTree.Curves(planetSettings, mass).Strength; - float WellMass(GeneratorPlanet p) => p.Empty || p.Belt ? 0f : p.Mass; - float Family(GeneratorPlanet p) => (p.Empty ? 0f : p.Mass) + p.Children.Sum(c => Family(c)); - // A bodyless node pulls from afar as one body of its family's mass, which it becomes if its ring cannot stand (binaries-orbited-from-afar) - float OneBody(GeneratorPlanet p) => p.Empty ? Family(p) : WellMass(p); - // A folded family joins its target: a body takes its mass, a bodyless node (whose own Mass is no mass) takes it as a child, - // which its own Settle then places. - void Fold(GeneratorPlanet node, GeneratorPlanet into) - { - node.Parent.Children.Remove(node); - if (into.Empty) { node.Parent = into; into.Children.Add(node); } - else into.Mass += Family(node); - } - - void PlaceChildren(List children, Func lower, float upper, GeneratorPlanet into) - { - upper *= 1 - 1e-6f; - float AtLeast(GeneratorPlanet child, float edge) - { - var m = OneBody(child); - var mInto = OneBody(into); - return m <= 0 || mInto <= 0 ? edge : Math.Max(edge, 2 * CuspMargin * Roche(m) * Strength(mInto) / Strength(m)); - } - - var lo = 0f; - var positions = new List(); - while (children.Count > 0) - { - lo = lower(); - positions.Clear(); - for (var k = 0; k < children.Count; k++) - positions.Add(AtLeast(children[k], k == 0 ? lo : Math.Max(lo, positions[k - 1] * q))); - if (positions[positions.Count - 1] <= upper) break; - var lightest = children.OrderBy(c => Family(c)).First(); - Fold(lightest, into); - children.Remove(lightest); - } - if (children.Count == 0) return; - - var g = children.Count > 1 ? pow(upper / positions[positions.Count - 1], 1f / (children.Count - 1)) : 1f; - for (var k = 0; k < children.Count; k++) - children[k].Distance = positions[k] * pow(g, k); - // Every child's slot: from the lower bound and the previous sibling's spacing out to the next sibling's spacing and the - // window. Place is the only writer of a slot; a belt fills its own, and the lane pass reads a body's. A belt is an - // interval inside its slot, the authored width the widest it may be. - var outer = 0f; - for (var k = 0; k < children.Count; k++) - { - var c = children[k]; - c.SlotInner = Math.Max(lo, outer * q); - c.SlotOuter = k + 1 < children.Count ? Math.Min(upper, children[k + 1].Distance / q) : upper; - if (!c.Belt) { outer = c.Distance; continue; } - var inner = c.SlotInner; - var outerLimit = c.SlotOuter; - c.Distance = (inner + outerLimit) / 2; - var half = Math.Max(0f, Math.Min(c.Settings.AsteroidBeltWidth.Evaluate(c.Distance), outerLimit - inner) / 2); - c.BeltHalfWidth = half; - outer = c.Distance + half; - } - } - - var chordCap = new Dictionary(); // a ring member's children stay within .2 of the nearest partner's chord - void Settle(GeneratorPlanet node) - { - var isRoot = node.Parent == null; - var reach = isRoot ? rootReach : GravityField.Reach * node.Distance; - var share = isRoot ? 1 / GravityField.Beta : GravityField.Gamma; - var cap = isRoot ? .75f * radius : float.PositiveInfinity; - var upper = Math.Min(cap, share * reach / Math.Max(GravityField.Beta, 1 + GravityField.Reach)); - if (chordCap.TryGetValue(node, out var chord)) upper = Math.Min(upper, chord); - if (WellMass(node) > 0) - { - PlaceChildren(node.Children.ToList(), () => RocheMargin * Roche(WellMass(node)), upper, node); - foreach (var child in node.Children.ToList()) Settle(child); - return; - } - - var ring = node.Children.Where(c => c.Ring && OneBody(c) > 0).ToList(); - if (ring.Count == 0) { foreach (var child in node.Children.ToList()) Settle(child); return; } - var heavy = ring.OrderByDescending(OneBody).First(); - var ringDistance = Math.Min(.5f * cap, share * reach / (GravityField.Beta * GravityField.Beta * (1 + GravityField.RingReach))); - PlaceChildren(node.Children.Where(c => !ring.Contains(c)).ToList(), - () => (1 + GravityField.RingReach) * ringDistance * GravityField.Beta, upper, heavy); - foreach (var member in ring) - { - member.Distance = ringDistance; - chordCap[member] = .2f * 2 * ringDistance * sin(PI / ring.Count); - Settle(member); - } - // A member's mass is final only once it has settled (its own overflowing children fold into it). - if (ringDistance < RocheMargin * Roche(ring.Max(OneBody))) - { - // The ring cannot keep its heaviest member outside its Roche margin inside its node's reach: the node is one body. - node.Empty = false; - node.Mass = 0; - foreach (var child in node.Children.ToList()) Fold(child, node); - return; - } - foreach (var child in node.Children.Where(c => !ring.Contains(c)).ToList()) Settle(child); - } - - Settle(root); - } } // All orbiting bodies are referred to here as "Planets" @@ -830,18 +477,11 @@ public class GeneratorPlanet public float Distance; public float Phase; public float Mass; - // A belt's half width, written by ZoneGenerator.Place: the belt fills the slot between its siblings' spacing, the parent's - // Roche margin and the parent's window, up to the authored width (ruling belt-fills-its-slot). - public float BeltHalfWidth; + //public float Period; + public float ChildDistanceMinimum; + public float ChildDistanceMaximum; public bool Empty = false; public bool Belt = false; - // The interval Place gives a child between its previous sibling's spacing and the next sibling's spacing or the window; zero - // on a ring member, which has no slot. - public float SlotInner, SlotOuter; - // A childless light body, not a binary or root rosette member, that could have become a belt (set by GenerateEntities). - public bool BeltCandidate; - // A member of a rosette's ring, which Place puts on one orbit round its bodyless parent. - public bool Ring = false; public List Children = new List(); // Planets orbiting this one are referred to as children public GeneratorPlanet Parent; public float2 FixedPosition; @@ -852,10 +492,12 @@ public class GeneratorPlanet return new[]{this}.Concat(Children.SelectMany(c=>c.AllPlanets())); } - // Create children that fill a single orbit, equally spaced; Place sets the orbit's radius + // Create children that fill a single orbit, equally spaced // https://en.wikipedia.org/wiki/Klemperer_rosette public void ExpandRosette(ref Random random, int vertices) { + //Debug.Log("Expanding Rosette"); + // Rosette children replace the parent, parent orbital node is left empty Empty = true; @@ -865,37 +507,61 @@ public class GeneratorPlanet // Proportion of the masses of sequential pairs is random, but only for even vertex counts var proportion = vertices % 2 == 0 ? random.NextFloat(.5f,.95f) : .5f; + // Place children at a fixed distance in the center of the range + var dist = (ChildDistanceMinimum + ChildDistanceMaximum) / 2; + + // Position of first child + var p0 = new float2(0, dist); + + // Position of second child + var p1 = OrbitData.Evaluate(1.0f / vertices) * dist; + + // Maximum child distance is half the distance to the neighbor minus the neighbor's radius + var p0ChildDist = (distance(p0, p1) * proportion - Settings.PlanetSafetyRadius.Evaluate(sharedMass * (1 - proportion))) * .75f; + var p1ChildDist = (distance(p0, p1) * (1 - proportion) - Settings.PlanetSafetyRadius.Evaluate(sharedMass * proportion)) * .75f; + for (int i = 0; i < vertices; i++) { - Children.Add(new GeneratorPlanet + var child = new GeneratorPlanet { Settings = Settings, Parent = this, Mass = sharedMass * (i % 2 == 0 ? proportion : 1 - proportion), // Masses alternate + Distance = dist, Phase = (float) i / vertices, - Ring = true - }); + ChildDistanceMaximum = (i % 2 == 0 ? p0ChildDist : p1ChildDist) + }; + child.ChildDistanceMinimum = Settings.PlanetSafetyRadius.Evaluate(child.Mass) * 2; + //child.Period = Settings..Evaluate(child.Distance); + Children.Add(child); } + + ChildDistanceMinimum = dist + p0ChildDist; } - // Create children that mimic the distribution of planetary masses in the solar system, inside-out in list order; - // Place gives them their distances - public void ExpandSolar(ref Random random, int count, float massMulMin, float massMulMax, float jupiterJump, float massFraction) + // Create children that mimic the distribution of planetary masses in the solar system + public void ExpandSolar(ref Random random, int count, float massMulMin, float massMulMax, float distMulMin, float distMulMax, float jupiterJump, float massFraction) { - if (count == 0) + //Debug.Log("Expanding Solar"); + // Expansion is impossible when child space is full + if (count == 0 || ChildDistanceMaximum < ChildDistanceMinimum) return; var masses = new float[count]; + var distances = new float[count]; // Accumulate total mass - // Initialize first mass, actual number doesn't matter since total mass will be divided proportionally - float massTotal = masses[0] = 1; + // Initialize first mass and distance, actual number doesn't matter since total mass will be divided proportionally + float massTotal = distances[0] = masses[0] = 1; - // Masses multiply from one planet to the next + // Masses and distances multiply from one planet to the next // Mass typically increases exponentially as you go further out // jupiterJump is an additional mass multiplier applied after half of the planets for (var i = 1; i < count; i++) + { massTotal += masses[i] = masses[i - 1] * random.NextFloat(massMulMin, massMulMax) * (count/2==i ? jupiterJump : 1); + distances[i] = distances[i - 1] * random.NextFloat(distMulMin, distMulMax); + } // Add some randomness to child masses for (var i = 0; i < masses.Length; i++) @@ -905,17 +571,38 @@ public class GeneratorPlanet for (var i = 0; i < count; i++) masses[i] = masses[i] / massTotal * Mass * massFraction; + // Map child distances to range between minimum and maximum + if (count > 1) + { + var oldDistances = (float[]) distances.Clone(); + for (var i = 0; i < count; i++) + distances[i] = lerp(ChildDistanceMinimum, ChildDistanceMaximum, + (oldDistances[i] - oldDistances[0]) / (oldDistances[count - 1] - oldDistances[0])) + Settings.PlanetSafetyRadius.Evaluate(masses[i]); + } + for (var i = 0; i < count; i++) { // Only instantiate children above the mass floor if (masses[i] > Settings.MassFloor) - Children.Add(new GeneratorPlanet + { + var child = new GeneratorPlanet { Settings = Settings, Parent = this, Mass = masses[i], + Distance = distances[i], Phase = random.NextFloat() - }); + }; + //child.Period = Context.GlobalData.OrbitalPeriod(child.Distance); + child.ChildDistanceMinimum = Settings.PlanetSafetyRadius.Evaluate(child.Mass) * 2; + // Maximum child distance of child is the smallest distance to either of its neighbors + child.ChildDistanceMaximum = min(i == 0 ? child.Distance - ChildDistanceMinimum : child.Distance - distances[i - 1], + i < count - 1 ? distances[i + 1] - child.Distance : float.PositiveInfinity); + if (float.IsNaN(child.Distance)) + throw new NotFiniteNumberException($"Planet created with NaN distance, something went very wrong!"); + if (child.ChildDistanceMaximum > child.ChildDistanceMinimum) + Children.Add(child); + } } } } diff --git a/Assets/Scripts/UI/ConsoleView.cs b/Assets/Scripts/UI/ConsoleView.cs index 64e0a4597..fcde87e29 100644 --- a/Assets/Scripts/UI/ConsoleView.cs +++ b/Assets/Scripts/UI/ConsoleView.cs @@ -50,9 +50,7 @@ public class ConsoleView : MonoBehaviour { Keyboard.current.onTextInput += c => { - // Text input also delivers control characters (backspace as '\b', enter as '\r'); editing keys are - // handled in Update, so only printable characters are text. - if (!Visible || c == '`' || char.IsControl(c)) return; + if (!Visible || c == '`') return; InputString += c; }; InputString = ""; @@ -83,7 +81,7 @@ public class ConsoleView : MonoBehaviour { if (!Visible) return; - if((keyboard.backspaceKey.wasPressedThisFrame || keyboard.deleteKey.wasPressedThisFrame) && InputString.Length>0) + if(keyboard.deleteKey.wasPressedThisFrame && InputString.Length>0) { InputString = InputString.Substring(0, InputString.Length - 1); } diff --git a/Assets/Scripts/UI/FieldTester.cs b/Assets/Scripts/UI/FieldTester.cs index 493b0b60e..0e955e3f5 100644 --- a/Assets/Scripts/UI/FieldTester.cs +++ b/Assets/Scripts/UI/FieldTester.cs @@ -26,10 +26,6 @@ public class FieldTester : MonoBehaviour public Camera Camera; public FieldDriver TestField; public PropertiesPanel Properties; - // The scene's slow viewing timings for a grab, published as the events' phase durations. - public float GrabExtendTime; - public float GrabEnvelopTime; - public float GrabPullTime; private AetheriaInput _input; private bool _forceThrust; @@ -53,14 +49,6 @@ public class FieldTester : MonoBehaviour private List<(float lerp, float time, Transform transform)> _pickups = new List<(float lerp, float time, Transform transform)>(); - // This scene stands in for the simulation, so it owns its pickup's grab timeline and pose: one grab at a time. - private bool _grabbing; - private int _grabIndex; - private float _grabElapsed; - private float3 _grabStart; - private bool _envelopPublished; - private bool _pullPublished; - private void Start() { _input = new AetheriaInput(); @@ -71,7 +59,10 @@ public class FieldTester : MonoBehaviour if (binder == null) Debug.LogError("FieldTester expects a CapabilityPresentationBinder on TestField's GameObject; no capability events will reach the field."); else - binder.Bind(_capabilityEvents); + binder.Bind(_capabilityEvents, + grabTargetResolver: handle => handle >= 0 && handle < _pickups.Count ? _pickups[handle].transform : null, + grabInitialVelocityResolver: handle => Vector3.forward * + (PickupTravelDistance / lerp(PickupTravelTimeMin, PickupTravelTimeMax, _pickups[handle].lerp))); // Impact absorption (fork L): what used to be FieldDriver's own click handler is now this // scene's stand-in for whatever will eventually detect a hit and publish AbsorbEvent. @@ -82,7 +73,7 @@ public class FieldTester : MonoBehaviour { var damageType = DamageTypeCycle[_nextDamageTypeIndex]; _nextDamageTypeIndex = (_nextDamageTypeIndex + 1) % DamageTypeCycle.Length; - _capabilityEvents.PublishAbsorb(new AbsorbEvent(hit.point.ToCultMath(), ray.direction.ToCultMath(), TestField.TestMagnitude, damageType, AbsorbLayer.Shield)); + _capabilityEvents.PublishAbsorb(new AbsorbEvent(hit.point.ToCultMath(), ray.direction.ToCultMath(), TestField.TestMagnitude, damageType)); }; } @@ -108,16 +99,12 @@ public class FieldTester : MonoBehaviour var click = pickup.GetComponent(); click.OnClick += (collider, data, ray, hit) => { - if (_grabbing) return; + if (!TestField.CanGrab) return; click.Clear(); - _grabbing = true; - _grabIndex = i1; - _grabElapsed = 0; - _envelopPublished = _pullPublished = false; - _grabStart = _pickups[i1].transform.position.ToCultMath(); - var id = new FloatingBodyId((uint) i1); - _capabilityEvents.PublishGrab(new GrabEvent(id, GrabPhase.Started, _grabStart, 0)); - _capabilityEvents.PublishGrab(new GrabEvent(id, GrabPhase.Extend, _grabStart, GrabExtendTime)); + var p = _pickups[i1]; + _capabilityEvents.PublishGrab(new GrabEvent(i1, GrabPhase.Started, p.transform.position.ToCultMath(), 0)); + p.transform = null; + _pickups[i1] = p; }; pickup.ScanLabelContainer.gameObject.SetActive(false); @@ -130,45 +117,6 @@ public class FieldTester : MonoBehaviour } } - // Publishes Envelop and Pull once each at their cumulative boundaries, holds the pickup still until the pull and - // then moves it along the same smoothstep as Zone's held pose, and ends with Completed and the pickup's removal. - private void AdvanceGrab() - { - _grabElapsed += Time.deltaTime; - var id = new FloatingBodyId((uint) _grabIndex); - var pullStart = GrabExtendTime + GrabEnvelopTime; - if (!_envelopPublished && _grabElapsed >= GrabExtendTime) - { - _envelopPublished = true; - _capabilityEvents.PublishGrab(new GrabEvent(id, GrabPhase.Envelop, _grabStart, GrabEnvelopTime)); - } - if (!_pullPublished && _grabElapsed >= pullStart) - { - _pullPublished = true; - _capabilityEvents.PublishGrab(new GrabEvent(id, GrabPhase.Pull, _grabStart, GrabPullTime)); - } - var pickup = _pickups[_grabIndex].transform; - pickup.position = PulledPosition(_grabStart, TestField.transform.position.ToCultMath(), _grabElapsed, - GrabExtendTime, GrabEnvelopTime, GrabPullTime).ToUnity(); - if (_pullPublished && PullProgress(_grabElapsed, GrabExtendTime, GrabEnvelopTime, GrabPullTime) >= 1) - { - _capabilityEvents.PublishGrab(new GrabEvent(id, GrabPhase.Completed, pickup.position.ToCultMath(), 0)); - Destroy(pickup.gameObject); - var p = _pickups[_grabIndex]; - p.transform = null; - _pickups[_grabIndex] = p; - _grabbing = false; - } - } - - // How far along the pull a grab is `elapsed` seconds in: 0 through Extend and Envelop, then 0..1 over the pull. - public static float PullProgress(float elapsed, float extend, float envelop, float pull) => - saturate((elapsed - extend - envelop) / max(pull, 1e-4f)); - - // Where the stand-in sim holds its pickup: still through Extend and Envelop, then along Zone's held-pose curve. - public static float3 PulledPosition(float3 start, float3 holder, float elapsed, float extend, float envelop, float pull) => - lerp(start, holder, Zone.HeldPull(PullProgress(elapsed, extend, envelop, pull))); - private void Update() { var move = _forceThrust ? float2(0,1) : _input.Player.Move.ReadValue().ToCultMath(); @@ -196,12 +144,10 @@ public class FieldTester : MonoBehaviour _capabilityEvents.PublishThrust(new ThrustEvent(_push, min(length(_push), 1), float2(_frontTwist, _rearTwist))); - if (_grabbing) AdvanceGrab(); - for (var i = 0; i < _pickups.Count; i++) { var (l, time, t) = _pickups[i]; - if (t == null || (_grabbing && i == _grabIndex)) continue; + if (t == null) continue; time = frac(time + Time.deltaTime / lerp(PickupTravelTimeMin, PickupTravelTimeMax, l)); t.localScale = Vector3.one * lerp(PickupSizeMin, PickupSizeMax, l) * Zone.PowerPulse(time - .5f, ScaleExponent); t.position = new Vector3(t.position.x, t.position.y, (time - .5f) * PickupTravelDistance); diff --git a/Assets/Scripts/UI/HUD/SchematicDisplay.cs b/Assets/Scripts/UI/HUD/SchematicDisplay.cs index 57f545960..65c3b1f7f 100644 --- a/Assets/Scripts/UI/HUD/SchematicDisplay.cs +++ b/Assets/Scripts/UI/HUD/SchematicDisplay.cs @@ -22,6 +22,8 @@ public class SchematicDisplay : MonoBehaviour public GameObject ShieldIcon; public Image HeatsinkBackground; + public GameObject AetherDriveUi; + public TextMeshProUGUI EnergyLabel; public TextMeshProUGUI CockpitTemperatureLabel; public TextMeshProUGUI RadiatorTemperatureLabel; @@ -30,6 +32,9 @@ public class SchematicDisplay : MonoBehaviour public TextMeshProUGUI VisibilityLabel; public TextMeshProUGUI HullDurabilityLabel; public TextMeshProUGUI DistanceLabel; + public TextMeshProUGUI ForwardRPMLabel; + public TextMeshProUGUI StrafeRPMLabel; + public TextMeshProUGUI TurnRPMLabel; public RectTransform SensorCooldownFill; public RectTransform EnergyFill; @@ -37,6 +42,9 @@ public class SchematicDisplay : MonoBehaviour public RectTransform HeatstrokeMeterFill; public RectTransform HypothermiaMeterFill; public RectTransform HeatstrokeLimitFill; + public RectTransform ForwardRPMFill; + public RectTransform StrafeRPMFill; + public RectTransform TurnRPMFill; private Entity _entity; private EquippableItem _hull; @@ -47,6 +55,7 @@ public class SchematicDisplay : MonoBehaviour private HeatStorage[] _heatStorages; private EquippedCargoBay[] _cargoBays; private SchematicDisplayItem[] _schematicItems; + private AetherDrive _aetherDrive; private bool _enemy; private Entity _player; @@ -58,8 +67,7 @@ public class SchematicDisplay : MonoBehaviour public class SchematicDisplayItem { - // The row Entity.SchematicRows derived: which item, which class and which range it shows. - public SchematicRow Row; + public EquippedItem Item; public SchematicListElement ListElement; public IProgressBehavior Cooldown; // public ItemUsage ItemUsage; @@ -70,16 +78,20 @@ public class SchematicDisplay : MonoBehaviour { _enemy = player != null; _player = player; - ReturnRows(); + if (_schematicItems != null) + foreach (var item in _schematicItems) + { + item.ListElement.GetComponent().ReturnToPool(); + } _entity = entity; - if (VisibilityLabel) - VisibilityLabel.gameObject.SetActive(!_enemy); if (!_enemy) { _cockpit = entity.GetBehavior(); _reactor = entity.GetBehavior(); _capacitors = entity.GetBehaviors().ToArray(); + _aetherDrive = entity.GetBehavior(); + AetherDriveUi.SetActive(_aetherDrive != null); _radiators = entity.GetBehaviors().ToArray(); if (_radiators.Length == 0) @@ -94,41 +106,21 @@ public class SchematicDisplay : MonoBehaviour CargoTemperatureLabel.text = "N/A"; } - BuildRows(Rows()); - } - - // Which rows, which class and which range label are Entity.SchematicRows' decision (aetheria-ew, classify-from-belief); - // this display only renders them. - private IEnumerable Rows() => (_player ?? _entity).SchematicRows(_entity); - - private void ReturnRows() - { - if (_schematicItems == null) return; - foreach (var item in _schematicItems) - item.ListElement.GetComponent().ReturnToPool(); - _schematicItems = null; - } - - private void BuildRows(IEnumerable rows) - { - _schematicItems = rows + _schematicItems = entity.Equipment + .Where(x => x.Behaviors.Any(b => b.Data is WeaponData)) .Select(x => new SchematicDisplayItem { - Row = x, + Item = x, ListElement = ListElementPrototype.Instantiate(), - Cooldown = _enemy ? null : (IProgressBehavior) x.Item.Behaviors.FirstOrDefault(b=> b is IProgressBehavior), + Cooldown = _enemy ? null : (IProgressBehavior) x.Behaviors.FirstOrDefault(b=> b is IProgressBehavior), // ItemUsage = _enemy ? null : (ItemUsage) x.Behaviors.FirstOrDefault(b=> b is ItemUsage), - Weapon = _enemy ? null : (Weapon) x.Item.Behaviors.FirstOrDefault(b=>b is Weapon) + Weapon = (Weapon) x.Behaviors.FirstOrDefault(b=>b is Weapon) }) .ToArray(); foreach (var x in _schematicItems) { - if (x.Row.Mount != null) - x.ListElement.ShowGear(x.Row.Mount.Type, null); - else if(x.Row.Claimed is WeaponItemData weaponItemData) + if(x.Item.Data is WeaponItemData weaponItemData) x.ListElement.ShowWeapon(weaponItemData); - else - x.ListElement.ShowGear(x.Row.Claimed.HardpointType, x.Row.Claimed.Name); //x.ListElement.Label.text = x.Item.EquippableItem.Name; if (!_enemy) { @@ -191,28 +183,25 @@ public class SchematicDisplay : MonoBehaviour EnergyFill.anchorMax = new Vector2(charge / maxCharge, 1); EnergyLabel.text = $"{((int)charge).ToString()}/{((int)maxCharge).ToString()} + ({((int)_reactor.Draw).ToString()})"; } + + if (_aetherDrive != null) + { + ForwardRPMLabel.text = ActionGameManager.PlayerSettings.Format(_aetherDrive.Rpm.x); + ForwardRPMFill.anchorMax = new Vector2(_aetherDrive.Rpm.x / _aetherDrive.MaximumRpm, 1); + + StrafeRPMLabel.text = ActionGameManager.PlayerSettings.Format(_aetherDrive.Rpm.y); + StrafeRPMFill.anchorMax = new Vector2(_aetherDrive.Rpm.y / _aetherDrive.MaximumRpm, 1); + + TurnRPMLabel.text = ActionGameManager.PlayerSettings.Format(_aetherDrive.Rpm.z); + TurnRPMFill.anchorMax = new Vector2(_aetherDrive.Rpm.z / _aetherDrive.MaximumRpm, 1); + } } // else // { // DistanceLabel.text = $"{(int)length(_entity.Position - _player.Position)}"; // } - // A reveal gained or ended after selection changes the rows with no event to hook: rebuild when the - // revealed set differs from the rows' items. - if (_enemy && !Rows().Select(r => r.Key).SequenceEqual(_schematicItems.Select(x => x.Row.Key))) - { - ReturnRows(); - BuildRows(Rows()); - } - - // Cut 2 (docs/fire-control-cut.md): marks whichever row is the player's current aim point. - // Re-checked every frame (not just on ShowShip) because ResolvedAim can drop on its own - // as info decays, with no event to hook. - if (_enemy && _schematicItems != null) - foreach (var x in _schematicItems) - x.ListElement.SetSelected(x.Row.Marks(_player.ResolvedAim)); - - if(VisibilityLabel && !_enemy) + if(VisibilityLabel) VisibilityLabel.text = ((int)_entity.Visibility).ToString(); if(HullDurabilityFill) @@ -228,11 +217,11 @@ public class SchematicDisplay : MonoBehaviour { if (!_enemy) { - var itemData = _entity.ItemManager.GetData(x.Row.Item.EquippableItem); - x.ListElement.HeatFill.anchorMax = new Vector2(unlerp(itemData.MinimumTemperature, itemData.MaximumTemperature, x.Row.Item.Temperature), 0); + var itemData = _entity.ItemManager.GetData(x.Item.EquippableItem); + x.ListElement.HeatFill.anchorMax = new Vector2(unlerp(itemData.MinimumTemperature, itemData.MaximumTemperature, x.Item.Temperature), 0); if (x.Cooldown != null) x.ListElement.CooldownFill.anchorMax = new Vector2(x.Cooldown.Progress, 1); - x.ListElement.DurabilityLabel.text = $"{(int)(x.Row.Item.EquippableItem.Durability / itemData.Durability * 100)}%"; + x.ListElement.DurabilityLabel.text = $"{(int)(x.Item.EquippableItem.Durability / itemData.Durability * 100)}%"; if (x.Weapon.WeaponData.AmmoType.IsSet()) { if(x.Weapon.WeaponData.MagazineSize > 1) @@ -242,11 +231,10 @@ public class SchematicDisplay : MonoBehaviour } } - if (x.ListElement.RangeLabel) + if (x.Weapon.WeaponData != null) { - var range = x.Row.Range; - x.ListElement.RangeLabel.gameObject.SetActive(range.HasValue); - if (range.HasValue) x.ListElement.RangeLabel.text = ((int) range.Value).ToString(); + if(x.ListElement.RangeLabel) + x.ListElement.RangeLabel.text = ((int) x.Weapon.Range).ToString(); } } } diff --git a/Assets/Scripts/UI/HUD/SchematicListElement.cs b/Assets/Scripts/UI/HUD/SchematicListElement.cs index b42bf4632..8b6829379 100644 --- a/Assets/Scripts/UI/HUD/SchematicListElement.cs +++ b/Assets/Scripts/UI/HUD/SchematicListElement.cs @@ -15,65 +15,12 @@ public class SchematicListElement : MonoBehaviour public RectTransform CooldownFill; public RectTransform HeatFill; - // Cut 2 (docs/fire-control-cut.md): marks this row as the current aim point (Entity.ResolvedAim) - // on an enemy schematic. Unassigned in a prefab that has not been wired up in the Unity editor yet - // (unavailable in this pass) -- SetSelected below is a no-op until then, not a null reference. - public GameObject SelectedIndicator; - private List _iconInstances = new List(); - // A gear row names its class; created on first use as VisibleTargetIndicator.ShowLabel creates its own (no scene or - // prefab edit) and hidden by every other row kind, because pools are shared. - private TextMeshProUGUI _nameLabel; - - private void ClearIcons() - { - foreach(var prototype in _iconInstances) prototype.ReturnToPool(); - _iconInstances.Clear(); - } - - private void SetName(string name) - { - var show = !string.IsNullOrEmpty(name); - if (_nameLabel == null) - { - if (!show) return; - var child = new GameObject("Name", typeof(RectTransform)); - child.transform.SetParent(transform, false); - _nameLabel = child.AddComponent(); - _nameLabel.fontSize = 14; - _nameLabel.alignment = TextAlignmentOptions.Left; - _nameLabel.raycastTarget = false; - var rect = _nameLabel.rectTransform; - rect.anchorMin = new Vector2(0, 0); - rect.anchorMax = new Vector2(1, 1); - rect.offsetMin = new Vector2(40, 0); - rect.offsetMax = Vector2.zero; - } - _nameLabel.gameObject.SetActive(show); - if (show && _nameLabel.text != name) _nameLabel.text = name; - } - - // A revealed item that is not a weapon: its hardpoint's icon and, when given, its class name. Layout-aim reuses this with - // a null name for mount rows. - public void ShowGear(HardpointType type, string name) - { - ClearIcons(); - var icon = IconPrototype.Instantiate(); - _iconInstances.Add(icon.GetComponent()); - icon.sprite = Settings.GetIcon(type); - SetName(name); - } - - public void SetSelected(bool selected) - { - if (SelectedIndicator != null) SelectedIndicator.SetActive(selected); - } - public void ShowWeapon(WeaponItemData weapon) { - ClearIcons(); - SetName(null); + foreach(var prototype in _iconInstances) prototype.ReturnToPool(); + _iconInstances.Clear(); var caliberIcon = IconPrototype.Instantiate(); _iconInstances.Add(caliberIcon.GetComponent()); diff --git a/Assets/Scripts/UI/HUD/VisibleTargetIndicator.cs b/Assets/Scripts/UI/HUD/VisibleTargetIndicator.cs index db512492e..f12220bd7 100644 --- a/Assets/Scripts/UI/HUD/VisibleTargetIndicator.cs +++ b/Assets/Scripts/UI/HUD/VisibleTargetIndicator.cs @@ -2,35 +2,10 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; -using TMPro; public class VisibleTargetIndicator : MonoBehaviour { public RectTransform Transform; public Image Fill; public PlaceUIElementWorldspace Place; - public TextMeshProUGUI Label; - - // Null or empty hides the label; the first non-empty text creates it as a child (no scene or prefab edit) and keeps it. - // Pools are shared, so hide the label before the indicator returns to its pool. - public void ShowLabel(string text) - { - var show = !string.IsNullOrEmpty(text); - if (Label == null) - { - if (!show) return; - var child = new GameObject("Label", typeof(RectTransform)); - child.transform.SetParent(transform, false); - Label = child.AddComponent(); - Label.fontSize = 14; - Label.alignment = TextAlignmentOptions.Top; - Label.raycastTarget = false; - var rect = Label.rectTransform; - rect.anchorMin = rect.anchorMax = new Vector2(.5f, 0); - rect.pivot = new Vector2(.5f, 1); - rect.sizeDelta = new Vector2(200, 24); - } - Label.gameObject.SetActive(show); - if (show && Label.text != text) Label.text = text; - } } diff --git a/Assets/Scripts/UI/MainMenu.cs b/Assets/Scripts/UI/MainMenu.cs index 9eef387ca..8ace9b3c3 100644 --- a/Assets/Scripts/UI/MainMenu.cs +++ b/Assets/Scripts/UI/MainMenu.cs @@ -5,25 +5,29 @@ using System.IO; using System.Linq; using System.Threading; using System.Threading.Tasks; +using MessagePack; using TMPro; using UniRx; using UnityEngine; using UnityEngine.SceneManagement; using UnityEngine.UI; using static CultMath.math; +using float2 = CultMath.float2; +using Random = UnityEngine.Random; public class MainMenu : MonoBehaviour { public VolumeCloudRenderer CloudRenderer; public GameSettings Settings; public ConfirmationDialog Dialog; + public bool InGame; public Prototype PanelPrototype; public float FadeTime = .5f; public float FadeDistance = 512; public float FadeAlphaExponent = 2; public float FadePositionExponent = 2; - private (PropertiesPanel panel, CanvasGroup group, PropertiesPanel detail) _currentMenu, _nextMenu; + private (PropertiesPanel panel, CanvasGroup group) _currentMenu, _nextMenu; private bool _fadeFromRight; private float _fadeLerp; private bool _fading; @@ -38,14 +42,10 @@ public class MainMenu : MonoBehaviour _panelPosition = PanelPrototype.transform.position; var panel1 = PanelPrototype.Instantiate(); - var detail1 = PanelPrototype.Instantiate(); - ScenarioPicker.Dock(detail1, panel1); - _currentMenu = (panel1, panel1.GetComponent(), detail1); + _currentMenu = (panel1, panel1.GetComponent()); var panel2 = PanelPrototype.Instantiate(); - var detail2 = PanelPrototype.Instantiate(); - ScenarioPicker.Dock(detail2, panel2); - _nextMenu = (panel2, panel2.GetComponent(), detail2); + _nextMenu = (panel2, panel2.GetComponent()); _currentMenu.panel.gameObject.SetActive(false); //_saveDirectory = ActionGameManager.GameDataDirectory.CreateSubdirectory("Saves"); @@ -78,7 +78,7 @@ public class MainMenu : MonoBehaviour } } - public static string TitleSubtitle(string title, string subtitle) => $"{title}\n{subtitle}"; + private string TitleSubtitle(string title, string subtitle) => $"{title}\n{subtitle}"; private void Fade(bool fromRight) { @@ -89,46 +89,90 @@ public class MainMenu : MonoBehaviour _fadeFromRight = fromRight; } - private static bool _exclusionsShown; - - // Starts the next screen on an empty panel with a title and its scenario detail pane hidden and empty. - private void Next(string title) - { - _nextMenu.panel.Clear(); - _nextMenu.panel.Title.text = title; - _nextMenu.detail.Clear(); - _nextMenu.detail.gameObject.SetActive(false); - } - private void ShowMain() { - Next(TitleSubtitle("aetheria", "terminus")); - if (ActionGameManager.CurrentGalaxy == null) + _nextMenu.panel.Clear(); + _nextMenu.panel.Title.text = TitleSubtitle("aetheria", "terminus"); + if (!InGame) { - // No run is live: at the title, after death, or after a new run failed to start. A saved run exists only as - // the run store's SavedGame global. + // A run exists only as the run store's SavedGame global. var cache = ActionGameManager.CultCache; - if (ActionGameManager.ModExclusions.Length > 0 && !_exclusionsShown) - { - _exclusionsShown = true; - RefuseMods("Some mods were not loaded", ActionGameManager.ModExclusions); - } var saved = cache.GetGlobal(); if (saved == null && cache.AllStoredDocuments.Any(stored => RunSave.IsRunRecord(stored.Descriptor.DocumentType))) Debug.Log("run store has no SavedGame; Continue disabled"); _nextMenu.panel.AddButton("Continue", saved == null ? (Action) null : () => { - try { RunSave.RequireDesigns(cache, saved); } - catch (InvalidOperationException error) { Refuse("Cannot continue this run", error.Message); return; } + ActionGameManager.IsTutorial = saved.IsTutorial; ActionGameManager.CurrentGalaxy = new Galaxy(cache, saved, Debug.Log); - EnterGame(); + SceneManager.LoadScene("ARPG"); }); } _nextMenu.panel.AddButton("New Game", () => { - ShowScenarios(); + RunSave.Clear(ActionGameManager.CultCache); + var generatorState = "Loading Database Contents"; + Action setState = s => generatorState = s; + Fade(true); + _nextMenu.panel.gameObject.SetActive(false); + Dialog.Clear(); + Dialog.Title.text = "Generating Galaxy"; + Dialog.AddProperty(() => generatorState); + Dialog.Show(); + + if (ActionGameManager.PlayerSettings.TutorialPassed) + { + var backgroundSettings = MessagePackSerializer.Deserialize( + MessagePackSerializer.Serialize(Settings.SectorBackgroundSettings)); + backgroundSettings.NoisePosition = Random.value * 1000; + ActionGameManager.IsTutorial = false; + Task.Run(() => + { + var sector = new Galaxy( + Settings.SectorGenerationSettings, + backgroundSettings, + Settings.NameGeneratorSettings, + ActionGameManager.CultCache, + Debug.Log, + setState); + Observable.NextFrame().Subscribe(_ => + { + ActionGameManager.CurrentGalaxy = sector; + SceneManager.LoadScene("ARPG"); + }); + }).ContinueWith(t => Debug.LogException(t.Exception), TaskContinuationOptions.OnlyOnFaulted); + } + else + { + var backgroundSettings = MessagePackSerializer.Deserialize( + MessagePackSerializer.Serialize(Settings.TutorialBackgroundSettings)); + int iteration = 1; + do + { + backgroundSettings.NoisePosition = Random.value * 1000; + setState($"Finding Galaxy Position: iteration {iteration++}"); + } while (backgroundSettings.CloudDensity(float2(0.5f)) < .5f); + + ActionGameManager.IsTutorial = true; + Task.Run(() => + { + var sector = new Galaxy( + Settings.TutorialGenerationSettings, + backgroundSettings, + Settings.NameGeneratorSettings, + ActionGameManager.CultCache, + ActionGameManager.PlayerSettings, + ActionGameManager.GameDataDirectory.CreateSubdirectory("Narrative"), + Debug.Log, + setState); + Observable.NextFrame().Subscribe(_ => + { + ActionGameManager.CurrentGalaxy = sector; + SceneManager.LoadScene("ARPG"); + }); + }).ContinueWith(t => Debug.LogException(t.Exception), TaskContinuationOptions.OnlyOnFaulted); + } }); _nextMenu.panel.AddButton("Settings", () => @@ -139,130 +183,10 @@ public class MainMenu : MonoBehaviour _nextMenu.panel.AddButton("Quit", Application.Quit); } - // New Game: every way to set up a run, each with its brief. A release build lists only the modes; the other ways - // to set up a run and the test arenas are listed only in editor and development builds. - private void ShowScenarios() - { - Next(TitleSubtitle("new game", "scenarios")); - var groups = new List<(string label, Scenario[] scenarios)> { ("modes", Scenarios.Modes) }; - if (Debug.isDebugBuild) - { - groups.Add(("development", Scenarios.Development)); - groups.Add(("test arenas", Scenarios.Tests)); - } - ScenarioPicker.Show(_nextMenu.panel, _nextMenu.detail, groups, Launch, () => - { - ShowMain(); - Fade(false); - }, Dialog.Confirm); - } - - // The only way into a new run: generates the scenario's galaxy off the main thread and enters the game, where - // StartGame has RunStart stage it and only then replaces the saved run. A galaxy that cannot generate is refused - // here, with the saved run untouched. - private void Launch(Scenario scenario) - { - var generatorState = "Loading Database Contents"; - - Fade(true); - _nextMenu.panel.gameObject.SetActive(false); - Dialog.Clear(); - Dialog.Title.text = "Generating Galaxy"; - Dialog.AddProperty(() => generatorState); - Dialog.Show(); - - var stage = new GalaxyStage( - Settings.SectorGenerationSettings, - Settings.SectorBackgroundSettings, - Settings.TutorialGenerationSettings, - Settings.TutorialBackgroundSettings, - ActionGameManager.CultCache, - ActionGameManager.PlayerSettings, - ActionGameManager.GameDataDirectory.CreateSubdirectory("Narrative"), - Debug.Log, - state => generatorState = state); - Task.Run(() => RunStart.Generate(scenario, stage)).ContinueWith(generation => - Observable.NextFrame().Subscribe(_ => - { - if (generation.IsFaulted) - { - Debug.LogException(generation.Exception); - ShowMain(); - Fade(false); - Refuse($"{scenario.Name} could not generate its galaxy", generation.Exception.GetBaseException().Message); - return; - } - ActionGameManager.CurrentGalaxy = generation.Result; - ActionGameManager.PendingScenario = scenario; - EnterGame(); - })); - } - - // The one way into the game scene. Mod ship prototypes import asynchronously at boot, so the scene waits for them, - // and a preload that could not run at all stops here with its reason rather than in the first zone. - private void EnterGame() => StartCoroutine(EnterGameWhenModShipsAreReady()); - - private IEnumerator EnterGameWhenModShipsAreReady() - { - var loading = ShipModShips.Loading; - while (!loading.IsCompleted) yield return null; - if (loading.IsFaulted) - { - if (loading.Exception.GetBaseException() is ShipModShips.ImportFault fault) RefuseMods("Mod ships failed to load", fault.Faults); - else Refuse("Mod ships failed to load", loading.Exception.GetBaseException().Message); - yield break; - } - SceneManager.LoadScene("ARPG"); - } - - public void Refuse(string title, string reason) - { - Debug.LogError($"{title}: {reason}"); - Dialog.Clear(); - Dialog.Title.text = title; - Dialog.AddProperty(() => reason); - Dialog.Show(onCancel: () => { }, cancelText: "OK"); - } - - // Refuse for faults that name mod packages: each distinct package gets a Remove button, the one RemovePackage. The catalog - // stays as this boot opened it, so the dialog says that removal takes effect at the next launch. - private readonly HashSet _removedPackages = new(); - - public void RefuseMods(string title, ShipModCatalog.Exclusion[] faults) - { - // A package moved aside this session stays named but loses its button: this boot's catalog still holds it. - var open = faults.Where(fault => !_removedPackages.Contains(fault.Package)).ToArray(); - var reason = string.Join("\n", faults.Select(fault => fault.ToString())); - Debug.LogError($"{title}: {reason}"); - Dialog.Clear(); - Dialog.Title.text = title; - Dialog.AddProperty(() => reason); - foreach (var package in open.Select(fault => fault.Package).Where(package => package != "(all mods)").Distinct()) - Dialog.AddButton($"Remove {package}", () => Remove(title, faults, package)); - Dialog.Show(onCancel: () => { }, cancelText: "OK"); - } - - private void Remove(string title, ShipModCatalog.Exclusion[] faults, string package) - { - string destination; - try { destination = ShipModCatalog.RemovePackage(ActionGameManager.ModsPath, package); } - catch (Exception error) - { - Refuse($"Could not remove {package}", $"{error.Message} Remove it by hand from {ActionGameManager.ModsPath}."); - return; - } - _removedPackages.Add(package); - var done = $"{package} moved to {destination}. Mods load at launch: restart Aetheria to play without it, or move it back into Mods to reinstall."; - Debug.Log(done); - Dialog.Clear(); - Dialog.Title.text = $"Removed {package}"; - Dialog.AddProperty(() => done); - Dialog.Show(onConfirm: Application.Quit, onCancel: () => { if (faults.Any(fault => fault.Package != "(all mods)" && !_removedPackages.Contains(fault.Package))) RefuseMods(title, faults); }, confirmText: "Quit", cancelText: "OK"); - } - private void ShowSettings() { - Next("settings"); + _nextMenu.panel.Clear(); + _nextMenu.panel.Title.text = "settings"; _nextMenu.panel.AddButton("Gameplay", () => { @@ -297,7 +221,8 @@ public class MainMenu : MonoBehaviour private void ShowGameplaySettings() { - Next(TitleSubtitle("gameplay", "settings")); + _nextMenu.panel.Clear(); + _nextMenu.panel.Title.text = TitleSubtitle("gameplay", "settings"); _nextMenu.panel.AddField("Name", () => ActionGameManager.PlayerSettings.Name, s => ActionGameManager.PlayerSettings.Name = s); @@ -319,7 +244,8 @@ public class MainMenu : MonoBehaviour private void ShowGraphicsSettings() { - Next(TitleSubtitle("graphics", "settings")); + _nextMenu.panel.Clear(); + _nextMenu.panel.Title.text = TitleSubtitle("graphics", "settings"); _nextMenu.panel.AddField("Nebula Quality", () => (int)ActionGameManager.PlayerSettings.GraphicsSettings.NebulaQuality, i => @@ -328,14 +254,12 @@ public class MainMenu : MonoBehaviour CloudRenderer.quality = ActionGameManager.PlayerSettings.GraphicsSettings.NebulaQuality; }, Enum.GetNames(typeof(Quality))); - _nextMenu.panel.AddField("Screen Shake", - () => ActionGameManager.PlayerSettings.GraphicsSettings.ScreenShake, - f => ActionGameManager.PlayerSettings.GraphicsSettings.ScreenShake = f, - 0, 1); + _nextMenu.panel.AddField("Show Asteroids in Minimap", + () => ActionGameManager.PlayerSettings.GraphicsSettings.ShowAsteroidsInMinimap, + b => ActionGameManager.PlayerSettings.GraphicsSettings.ShowAsteroidsInMinimap = b); _nextMenu.panel.AddButton("Back", () => { - ActionGameManager.SavePlayerSettings(); ShowSettings(); Fade(false); }); @@ -343,7 +267,8 @@ public class MainMenu : MonoBehaviour private void ShowInputSettings() { - Next(TitleSubtitle("input", "settings")); + _nextMenu.panel.Clear(); + _nextMenu.panel.Title.text = TitleSubtitle("input", "settings"); _nextMenu.panel.AddButton("Back", () => { @@ -354,7 +279,8 @@ public class MainMenu : MonoBehaviour private void ShowAudioSettings() { - Next(TitleSubtitle("audio", "settings")); + _nextMenu.panel.Clear(); + _nextMenu.panel.Title.text = TitleSubtitle("audio", "settings"); _nextMenu.panel.AddButton("Back", () => { diff --git a/Assets/Scripts/UI/Menu/MapRenderer.cs b/Assets/Scripts/UI/Menu/MapRenderer.cs index d6e585872..e8b1d49bb 100644 --- a/Assets/Scripts/UI/Menu/MapRenderer.cs +++ b/Assets/Scripts/UI/Menu/MapRenderer.cs @@ -51,7 +51,10 @@ public class MapRenderer : MonoBehaviour TintCamera.gameObject.SetActive(true); InfluenceCamera.gameObject.SetActive(true); Title.text = $"Zone: {GameManager.Zone.GalaxyZone.Name}"; - GameManager.ZoneRenderer.Map.OpenMapScreen(true); + + // If hiding minimap asteroids, turn them back on for the map screen + if (!ActionGameManager.PlayerSettings.GraphicsSettings.ShowAsteroidsInMinimap) + ZoneRenderer.ShowAsteroidUI = true; } private void OnDisable() @@ -64,7 +67,10 @@ public class MapRenderer : MonoBehaviour GravityCamera.gameObject.SetActive(false); TintCamera.gameObject.SetActive(false); InfluenceCamera.gameObject.SetActive(false); - GameManager.ZoneRenderer.Map.OpenMapScreen(false); + + // If hiding minimap asteroids, turn them back off when leaving the map screen + if (!ActionGameManager.PlayerSettings.GraphicsSettings.ShowAsteroidsInMinimap) + ZoneRenderer.ShowAsteroidUI = false; } void ReleaseTextures() @@ -123,6 +129,6 @@ public class MapRenderer : MonoBehaviour InfluenceCamera.transform.position = pos; InfluenceCamera.orthographicSize = _size.y * Scale * .5f; - GameManager.ZoneRenderer.Map.SetMapScreenScale(IconSize * Scale); + GameManager.ZoneRenderer.SetIconSize(IconSize * Scale); } } diff --git a/Assets/Scripts/UI/Menu/TradeMenu.cs b/Assets/Scripts/UI/Menu/TradeMenu.cs index 13345f88a..9bc285b75 100644 --- a/Assets/Scripts/UI/Menu/TradeMenu.cs +++ b/Assets/Scripts/UI/Menu/TradeMenu.cs @@ -3,6 +3,7 @@ using System.Collections; using System.Collections.Generic; using System.Linq; using System.Reflection; +using System.Runtime.Remoting.Contexts; using TMPro; using UnityEngine; using UnityEngine.UI; @@ -25,9 +26,9 @@ public class TradeMenu : MonoBehaviour public TextMeshProUGUI CreditsLabel; private EquippedCargoBay _targetCargo; - // False lists the station's wares to buy; true lists the selected bay's goods to sell. - private bool _selling; private (ItemFilter filter, HardpointType type) _hardpointFilter; + private (ItemFilter filter, SimpleCommodityCategory type) _commodityFilter; + private (ItemFilter filter, CompoundCommodityCategory type) _compoundCommodityFilter; private List<(ItemFilter filter, Type type)> _behaviorFilters = new List<(ItemFilter filter, Type type)>(); public EquippedCargoBay Inventory { get; set; } @@ -36,7 +37,6 @@ public class TradeMenu : MonoBehaviour { if (GameManager.DockedEntity == null) return; _targetCargo = GameManager.DockingBay; - _selling = false; TargetCargoLabel.text = "Docking Bay"; Properties.GameManager = GameManager; UpdateCreditsLabel(); @@ -60,6 +60,14 @@ public class TradeMenu : MonoBehaviour if (_hardpointFilter.filter != null) hardpointTypes = hardpointTypes.Where(x => x != _hardpointFilter.type); + IEnumerable commodityTypes = (SimpleCommodityCategory[]) Enum.GetValues(typeof(SimpleCommodityCategory)); + if (_commodityFilter.filter != null) + commodityTypes = commodityTypes.Where(x => x != _commodityFilter.type); + + IEnumerable compoundCommodityTypes = (CompoundCommodityCategory[]) Enum.GetValues(typeof(CompoundCommodityCategory)); + if (_compoundCommodityFilter.filter != null) + compoundCommodityTypes = compoundCommodityTypes.Where(x => x != _compoundCommodityFilter.type); + ContextMenu.AddDropdown("Gear Type", hardpointTypes .Select(x => (Enum.GetName(typeof(HardpointType), x), () => { @@ -72,10 +80,75 @@ public class TradeMenu : MonoBehaviour Populate(); }; } + if(_commodityFilter.filter) + { + _commodityFilter.filter.GetComponent().ReturnToPool(); + _commodityFilter.filter = null; + } + if(_compoundCommodityFilter.filter) + { + _compoundCommodityFilter.filter.GetComponent().ReturnToPool(); + _compoundCommodityFilter.filter = null; + } + _hardpointFilter.filter.Label.text = $"Hardpoint: {Enum.GetName(typeof(HardpointType), x)}"; _hardpointFilter.type = x; Populate(); }, true))); + ContextMenu.AddDropdown("Simple Commodity", commodityTypes + .Select(x => (Enum.GetName(typeof(SimpleCommodityCategory), x), () => + { + if (!_commodityFilter.filter) + { + _commodityFilter.filter = FilterPrototype.Instantiate(); + _commodityFilter.filter.OnDisable += () => + { + _commodityFilter.filter = null; + Populate(); + }; + } + if(_hardpointFilter.filter) + { + _hardpointFilter.filter.GetComponent().ReturnToPool(); + _hardpointFilter.filter = null; + } + if(_compoundCommodityFilter.filter) + { + _compoundCommodityFilter.filter.GetComponent().ReturnToPool(); + _compoundCommodityFilter.filter = null; + } + + _commodityFilter.filter.Label.text = $"Hardpoint: {Enum.GetName(typeof(SimpleCommodityCategory), x)}"; + _commodityFilter.type = x; + Populate(); + }, true))); + ContextMenu.AddDropdown("Compound Commodity", compoundCommodityTypes + .Select(x => (Enum.GetName(typeof(CompoundCommodityCategory), x), () => + { + if (!_compoundCommodityFilter.filter) + { + _compoundCommodityFilter.filter = FilterPrototype.Instantiate(); + _compoundCommodityFilter.filter.OnDisable += () => + { + _compoundCommodityFilter.filter = null; + Populate(); + }; + } + if(_hardpointFilter.filter) + { + _hardpointFilter.filter.GetComponent().ReturnToPool(); + _hardpointFilter.filter = null; + } + if(_commodityFilter.filter) + { + _commodityFilter.filter.GetComponent().ReturnToPool(); + _commodityFilter.filter = null; + } + + _compoundCommodityFilter.filter.Label.text = $"Hardpoint: {Enum.GetName(typeof(CompoundCommodityCategory), x)}"; + _compoundCommodityFilter.type = x; + Populate(); + }, true))); ContextMenu.AddDropdown("Item Behavior", typeof(BehaviorData).GetAllChildClasses() .Where(x=> x.GetCustomAttribute() != null && _behaviorFilters.All(f => f.type != x)) .Select(x=> (x.Name.FormatTypeName(), () => @@ -113,39 +186,42 @@ public class TradeMenu : MonoBehaviour void Populate() { - var columns = new List<(string name, int size, Func<(ItemInstance item, ItemData data), Func> output, Func<(ItemInstance item, ItemData data), IComparable> sortKey)>(); + var columns = new List<(string name, int size, Func<(ItemInstance item, ItemData data), Func> output, Func sortKey)>(); columns.Add(("Name", 3, x => () => x.item is CraftedItemInstance craftedItemInstance ? - $"{GameManager.ItemManager.Title(x.item)}" : - GameManager.ItemManager.Title(x.item), - x => GameManager.ItemManager.Title(x.item))); + $"{x.data.Name}" : + x.data.Name, + data => data.Name)); if(_hardpointFilter.filter==null) columns.Add(("Type", 2, x => () => { - if (x.data is SimpleCommodityData || x.data is CompoundCommodityData) return "Commodity"; + if (x.data is SimpleCommodityData s) return Enum.GetName(typeof(SimpleCommodityCategory), s.Category); + if(x.data is CompoundCommodityData c) return Enum.GetName(typeof(CompoundCommodityCategory), c.Category); if(x.data is EquippableItemData e) return Enum.GetName(typeof(HardpointType), e.HardpointType); return "None"; }, - x => + data => { - var data = x.data; - if (data is SimpleCommodityData || data is CompoundCommodityData) return 0; - if (data is EquippableItemData e) return 1 + (int) e.HardpointType; + if (data is SimpleCommodityData s) return (int) s.Category; + var offset = Enum.GetValues(typeof(SimpleCommodityCategory)).Length; + if(data is CompoundCommodityData c) return (int) c.Category + offset; + offset += Enum.GetValues(typeof(CompoundCommodityCategory)).Length; + if(data is EquippableItemData e) return (int) e.HardpointType + offset; return 0; })); columns.Add(("Mass", 1, x => () => ActionGameManager.PlayerSettings.Format(x.data.Mass), - x => x.data.Mass)); + data => data.Mass)); columns.Add(("Price", 1, - x => () => ShownPrice(x.item).ToString("N0"), - x => ShownPrice(x.item))); + x => () => (x.item is CraftedItemInstance craftedItemInstance ? GameManager.ItemManager.GetPrice(craftedItemInstance) : x.data.Price).ToString("N0"), + data => data.Price)); columns.Add(("Size", 1, x => () => $"{x.data.Shape.Width}x{x.data.Shape.Height}", - x => x.data.Shape.Width*x.data.Shape.Height)); + data => data.Shape.Width*data.Shape.Height)); - var items = (_selling ? _targetCargo : Inventory).Cargo.Keys + var items = Inventory.Cargo.Keys .Select(ii=>(ii, GameManager.ItemManager.GetData(ii))); if (MinimumSizeFilter.gameObject.activeSelf) @@ -158,6 +234,12 @@ public class TradeMenu : MonoBehaviour !(MaximumSizeFilter.Width.text.Length > 0 && i.data.Shape.Width > int.Parse(MaximumSizeFilter.Width.text) || MaximumSizeFilter.Height.text.Length > 0 && i.data.Shape.Height > int.Parse(MaximumSizeFilter.Height.text))); + if(_commodityFilter.filter != null) + items = items.Where(i => i.data is SimpleCommodityData s && s.Category == _commodityFilter.type); + + if(_compoundCommodityFilter.filter != null) + items = items.Where(i => i.data is CompoundCommodityData c && c.Category == _compoundCommodityFilter.type); + if (_hardpointFilter.filter != null) items = items.Where(i => i.data is EquippableItemData e && e.HardpointType == _hardpointFilter.type); @@ -173,9 +255,8 @@ public class TradeMenu : MonoBehaviour { var behavior = ((EquippableItemData) x.data).Behaviors.FirstOrDefault(b => type.IsInstanceOfType(b)); return () => ActionGameManager.PlayerSettings.Format((float) field.GetValue(behavior)); - }, x => + }, data => { - var data = x.data; var behavior = ((EquippableItemData) data).Behaviors.FirstOrDefault(b => type.IsInstanceOfType(b)); return (float) field.GetValue(behavior); })); @@ -184,9 +265,8 @@ public class TradeMenu : MonoBehaviour { var behavior = ((EquippableItemData) x.data).Behaviors.FirstOrDefault(b => type.IsInstanceOfType(b)); return () => ((int) field.GetValue(behavior)).ToString(); - }, x => + }, data => { - var data = x.data; var behavior = ((EquippableItemData) data).Behaviors.FirstOrDefault(b => type.IsInstanceOfType(b)); return (int) field.GetValue(behavior); })); @@ -196,9 +276,8 @@ public class TradeMenu : MonoBehaviour { var behavior = ((EquippableItemData) x.data).Behaviors.FirstOrDefault(b => type.IsInstanceOfType(b)); return () => ActionGameManager.PlayerSettings.Format(((PerformanceStat) field.GetValue(behavior)).Max); - }, x => + }, data => { - var data = x.data; var behavior = ((EquippableItemData) data).Behaviors.FirstOrDefault(b => type.IsInstanceOfType(b)); return ((PerformanceStat) field.GetValue(behavior)).Max; })); @@ -215,9 +294,8 @@ public class TradeMenu : MonoBehaviour return (_targetCargo.ItemsOfType.ContainsKey(GameManager.ItemManager.ItemData.RefOf(x.data).Key) ? _targetCargo.ItemsOfType[GameManager.ItemManager.ItemData.RefOf(x.data).Key].Cast().Sum(s=>s.Quantity) : 0).ToString(); return (_targetCargo.ItemsOfType.ContainsKey(GameManager.ItemManager.ItemData.RefOf(x.data).Key) ? _targetCargo.ItemsOfType[GameManager.ItemManager.ItemData.RefOf(x.data).Key].Count : 0).ToString(); }, - x => + data => { - var data = x.data; if (data is HullData) return GameManager.DockedEntity.Children.Count(s => s.Hull.Data.Key.Equals(GameManager.ItemManager.ItemData.RefOf(data).Key) && s is Ship {IsPlayerShip: true}); if(data is SimpleCommodityData) @@ -233,12 +311,11 @@ public class TradeMenu : MonoBehaviour Columns = columns.Select(x => new SpreadsheetEntryColumn { Output = x.output(i), - SortKey = x.sortKey(i) + SortKey = x.sortKey(i.data) }).ToArray(), OnClick = () => Properties.Inspect(i.item), OnDoubleClick = () => { - if (_selling) return; switch (i.item) { case CraftedItemInstance c: @@ -253,13 +330,7 @@ public class TradeMenu : MonoBehaviour }, OnRightClick = () => { - if (_selling) - { - ContextMenu.Clear(); - ContextMenu.AddOption($"Sell ({StationServices.SellPrice(GameManager.ItemManager, i.item):N0})", () => Sell(i.item)); - ContextMenu.Show(); - } - else if (i.item is SimpleCommodity s) + if (i.item is SimpleCommodity s) { ContextMenu.Clear(); ContextMenu.AddOption("Buy Quantity", @@ -267,10 +338,10 @@ public class TradeMenu : MonoBehaviour { int quantity = 1; Dialog.Clear(); - Dialog.Title.text = $"Buying {GameManager.ItemManager.Title(i.item)}"; + Dialog.Title.text = $"Buying {i.data.Name}"; Dialog.AddField("Quantity", () => quantity, - q => quantity = StationServices.BuyableQuantity(GameManager.ItemManager, s, q, GameManager.Credits)); + q => quantity = min(min(q, GameManager.Credits / i.data.Price), s.Quantity)); Dialog.Show(() => { Buy(s,quantity); @@ -285,11 +356,6 @@ public class TradeMenu : MonoBehaviour })); } - // The price the list shows and sorts by: what the station pays for the player's goods, what it charges otherwise. - private int ShownPrice(ItemInstance item) => _selling - ? StationServices.SellPrice(GameManager.ItemManager, item) - : StationServices.BuyPrice(GameManager.ItemManager, item); - private void UpdateCreditsLabel() { if (CreditsLabel != null) @@ -298,70 +364,83 @@ public class TradeMenu : MonoBehaviour } } - private void Sell(ItemInstance item) - { - if (StationServices.TrySell(_targetCargo, GameManager.DockedEntity, item, ref GameManager.Credits)) - { - UpdateCreditsLabel(); - Populate(); - return; - } - Dialog.Clear(); - Dialog.Title.text = "Unable to sell: Station Cargo Full!"; - Dialog.Show(); - Dialog.MoveToCursor(); - } - - private void Repair() - { - if (StationServices.TryRepair(GameManager.CurrentEntity, ref GameManager.Credits)) - { - UpdateCreditsLabel(); - return; - } - Dialog.Clear(); - Dialog.Title.text = "Unable to repair: Insufficient Credits!"; - Dialog.Show(); - Dialog.MoveToCursor(); - } - private void Buy(CraftedItemInstance item) { var data = GameManager.ItemManager.GetData(item); - if (data is HullData hullData && hullData.HullType != HullType.Ship) - throw new ArgumentException("Attempted to buy non-ship hull from station, WTF are you doing?!"); - Bought(StationServices.TryBuy(GameManager.ItemManager, item, 1, ref GameManager.Credits, () => + var price = GameManager.ItemManager.GetPrice(item); + if (price < GameManager.Credits) { - if (data is HullData) + if (data is HullData hullData) { - GameManager.CommissionShip(item as EquippableItem); - return true; + if (hullData.HullType != HullType.Ship) throw new ArgumentException("Attempted to buy non-ship hull from station, WTF are you doing?!"); + + var ship = new Ship(GameManager.ItemManager, GameManager.Zone, item as EquippableItem, GameManager.ItemManager.GameplaySettings.DefaultEntitySettings) { IsPlayerShip = true }; + ship.SetParent(GameManager.DockedEntity); + + GameManager.Credits -= data.Price; + UpdateCreditsLabel(); } - return Inventory.TryTransferItem(_targetCargo, item); - })); + else if (Inventory.TryTransferItem(_targetCargo, item)) + { + GameManager.Credits -= price; + UpdateCreditsLabel(); + } + else + { + Dialog.Clear(); + Dialog.Title.text = "Unable to buy: Insufficient Cargo Space!"; + Dialog.Show(); + Dialog.MoveToCursor(); + return; + } + } + else + { + Dialog.Clear(); + Dialog.Title.text = "Unable to buy: Insufficient Credits!"; + Dialog.Show(); + Dialog.MoveToCursor(); + return; + } } private void Buy(SimpleCommodity simpleCommodity, int quantity) { - Bought(StationServices.TryBuyLots(GameManager.ItemManager, simpleCommodity, quantity, ref GameManager.Credits, - lot => Inventory.TryTransferItem(_targetCargo, simpleCommodity, lot))); - } - - // Refreshes the credits after a purchase, or tells the player why the station refused it. - private bool Bought(BuyResult result) - { - if (result == BuyResult.Bought) + var data = GameManager.ItemManager.GetData(simpleCommodity); + // Up-rounded integer division from https://stackoverflow.com/a/503201 + int lots = (quantity - 1) / data.MaxStack + 1; + int remaining = quantity; + for (int i = 0; i < lots; i++) { - UpdateCreditsLabel(); - return true; + int q = min(remaining, data.MaxStack); + if (q * data.Price < GameManager.Credits) + { + if (Inventory.TryTransferItem(_targetCargo, simpleCommodity, quantity)) + { + GameManager.Credits -= q * data.Price; + UpdateCreditsLabel(); + remaining -= q; + } + else + { + Dialog.Clear(); + Dialog.Title.text = "Unable to buy: Insufficient Cargo Space!"; + Dialog.Show(); + Dialog.MoveToCursor(); + return; + } + } + else + { + Dialog.Clear(); + Dialog.Title.text = "Unable to buy: Insufficient Credits!"; + Dialog.Show(); + Dialog.MoveToCursor(); + return; + } + + } - Dialog.Clear(); - Dialog.Title.text = result == BuyResult.NoRoom - ? "Unable to buy: Insufficient Cargo Space!" - : "Unable to buy: Insufficient Credits!"; - Dialog.Show(); - Dialog.MoveToCursor(); - return false; } void Start() @@ -391,13 +470,6 @@ public class TradeMenu : MonoBehaviour } } } - ContextMenu.AddOption(_selling ? "Buy Goods" : "Sell Goods", () => - { - _selling = !_selling; - Populate(); - }); - var repairCost = StationServices.RepairCost(GameManager.ItemManager, GameManager.CurrentEntity); - if (repairCost > 0) ContextMenu.AddOption($"Repair ({repairCost:N0})", Repair); ContextMenu.Show(); }); } diff --git a/Assets/Scripts/UI/Properties Panel/CurveField.cs b/Assets/Scripts/UI/Properties Panel/CurveField.cs index d2e8b43e0..48c992890 100644 --- a/Assets/Scripts/UI/Properties Panel/CurveField.cs +++ b/Assets/Scripts/UI/Properties Panel/CurveField.cs @@ -20,7 +20,8 @@ public class CurveField : MonoBehaviour public Image CurrentX; public Image CurrentY; - private Func _y; + private BezierCurve _curve; + //private Func _xFunc; public void SetCurrent(float x) { @@ -28,33 +29,46 @@ public class CurveField : MonoBehaviour CurrentY.gameObject.SetActive(true); var xrect = CurrentX.GetComponent(); var yrect = CurrentY.GetComponent(); - var y = _y(x); + var y = _curve.Evaluate(x); xrect.anchorMin = new Vector2(x, 0); xrect.anchorMax = new Vector2(x, y); yrect.anchorMin = new Vector2(x, y); yrect.anchorMax = new Vector2(x, y); } - // Segments + 1 uniform samples of y over [0, 1], labelled by xFunc; the middle label sits at midX. - public void Show(string label, Func y, Func xFunc, float midX = .5f) + public void Show(string label, BezierCurve curve, Func xFunc, bool showMax = false) { - _y = y; + _curve = curve; + //_xFunc = xFunc; CurrentX.gameObject.SetActive(false); CurrentY.gameObject.SetActive(false); Title.text = label; var points = new List(); - for (int j = 0; j <= Segments; j++) + var keys = curve.Keys.Select(v => new Vector2(v.x, v.y)); + if (curve.Keys[0].x > .01f) keys = keys.Prepend(new Vector2(0, curve.Keys[0].y)); + if (curve.Keys[curve.Keys.Length-1].x < .99f) keys = keys.Append(new Vector2(1, curve.Keys[curve.Keys.Length-1].y)); + var keysArray = keys.ToArray(); + for (int i = 0; i < keysArray.Length - 1; i++) { - var x = (float) j / Segments; - points.Add(new Vector2(x, y(x))); + for (int j = 0; j < Segments; j++) + { + var x = lerp(keysArray[i].x, keysArray[i + 1].x, (float) j / Segments); + points.Add(new Vector2(x, curve.Evaluate(x))); + } } + points.Add(new Vector2(1, curve.Evaluate(1))); Line.Points = points.ToArray(); MinLabel.text = xFunc(0); MaxLabel.text = xFunc(1); - MidLabel.text = xFunc(midX); - var rect = MidLabel.GetComponent(); - rect.anchorMin = new Vector2(midX, rect.anchorMin.y); - rect.anchorMax = new Vector2(midX, rect.anchorMax.y); + if (showMax) + { + var midX = curve.Maximum; + MidLabel.text = xFunc(midX); + var rect = MidLabel.GetComponent(); + rect.anchorMin = new Vector2(midX, rect.anchorMin.y); + rect.anchorMax = new Vector2(midX, rect.anchorMax.y); + } + else MidLabel.text = xFunc(.5f); } } diff --git a/Assets/Scripts/UI/Properties Panel/PropertiesPanel.cs b/Assets/Scripts/UI/Properties Panel/PropertiesPanel.cs index 053e148b8..3e8a3c5ae 100644 --- a/Assets/Scripts/UI/Properties Panel/PropertiesPanel.cs +++ b/Assets/Scripts/UI/Properties Panel/PropertiesPanel.cs @@ -376,6 +376,7 @@ public class PropertiesPanel : MonoBehaviour sheet.AddStat("Manufacturer", () => maker.Name); if (product != null) { + AddProperty(product.Name); AddProperty(product.Description); } } @@ -386,7 +387,7 @@ public class PropertiesPanel : MonoBehaviour private void AddEquippableItemProperties(EquippableItem item, Func statValueFunction) { - if (item.IsDestroyed) + if (item.Durability < .01f) { return; } @@ -423,21 +424,16 @@ public class PropertiesPanel : MonoBehaviour if (gearData.Behaviors.FirstOrDefault(b => b is WeaponData) is WeaponData weapon) { var range = AddCurveField(); - var min = statValueFunction(weapon.MinRange); - var effective = statValueFunction(weapon.EffectiveRange); - var max = statValueFunction(weapon.Range); - range.Show("Damage Range", - t => WeaponData.RangeFactor(min, effective, max, weapon.DamageAtMaxRange, lerp(min, max, t)), - t => ActionGameManager.PlayerSettings.Format(lerp(min, max, t)), - effective < max ? saturate(unlerp(min, max, effective)) : .5f); + range.Show("Damage Range", weapon.DamageCurve, t => ActionGameManager.PlayerSettings.Format(lerp(statValueFunction(weapon.MinRange), statValueFunction(weapon.Range), t))); } } private string GetTitle(EquippableItem item) { + var data = GameManager.ItemManager.GetData(item); var (tier, upgrades) = GameManager.ItemManager.GetTier(item); return - $"{GameManager.ItemManager.Title(item)} ({tier.Name}{new string('+', upgrades)})"; + $"{data.Name} ({tier.Name}{new string('+', upgrades)})"; } public void Inspect(EquippedItem item) @@ -479,7 +475,7 @@ public class PropertiesPanel : MonoBehaviour var gearData = GameManager.ItemManager.GetData(item.EquippableItem); var statusSheet = AddStatSheet(); - if (item.EquippableItem.IsDestroyed) + if (item.EquippableItem.Durability < .01f) statusSheet.AddStat("Durability", () => "Item Destroyed!"); else statusSheet.AddStat("Durability", () => $"{(int)(item.EquippableItem.Durability / gearData.Durability * 100)}%"); statusSheet.AddStat("Temperature", () => ActionGameManager.PlayerSettings.FormatTemperature(item.Temperature)); diff --git a/Assets/Scripts/UI/ScenarioPicker.cs b/Assets/Scripts/UI/ScenarioPicker.cs deleted file mode 100644 index e0cd93134..000000000 --- a/Assets/Scripts/UI/ScenarioPicker.cs +++ /dev/null @@ -1,289 +0,0 @@ -using System; -using System.Collections.Generic; -using UniRx; -using UniRx.Triggers; -using TMPro; -using UnityEngine; -using UnityEngine.Events; -using UnityEngine.EventSystems; -using UnityEngine.InputSystem.UI; -using UnityEngine.UI; - -// The New Game screen: scenario names on the left pane by group, the selected scenario's brief, seed and ambient on a -// docked right pane, one Launch. This class owns which scenario is selected (one index into the rows it built); -// everything the screen shows about a scenario, and what Launch and Enter launch, reads that index. Keys arrive only as -// Input System UI events on the focused Launch button, so Enter and a mouse click are the same Button.onClick. -public sealed class ScenarioPicker -{ - private readonly List _scenarios = new List(); - private readonly List _groupLabels = new List(); - private readonly List