From df1a14eb84a152f6cf18f830595434c74d6f27f3 Mon Sep 17 00:00:00 2001 From: "Lennart R." Date: Tue, 2 Sep 2025 15:42:46 +0200 Subject: [PATCH] Terrain Tool Start --- Assets/Resources.meta | 8 + Assets/Resources/GrasJob.prefab | 47 ++ Assets/Resources/GrasJob.prefab.meta | 7 + Assets/Resources/GrasManagment.prefab | 46 ++ Assets/Resources/GrasManagment.prefab.meta | 7 + Assets/Scenes/TerrainTool.unity | 532 ++++++++++++++++++ Assets/Scenes/TerrainTool.unity.meta | 7 + Assets/Terrain.meta | 8 + Assets/Terrain/New Terrain.asset | Bin 0 -> 1958952 bytes Assets/Terrain/New Terrain.asset.meta | 8 + Assets/Terrain/NormalerLayer.terrainlayer | 22 + .../Terrain/NormalerLayer.terrainlayer.meta | 8 + Assets/TerrainTool.meta | 8 + Assets/TerrainTool/GrasField2.cs | 27 + Assets/TerrainTool/GrasField2.cs.meta | 11 + Assets/TerrainTool/GrasFieldManager.cs | 54 ++ Assets/TerrainTool/GrasFieldManager.cs.meta | 11 + Assets/TerrainTool/Grassorten.meta | 8 + .../TerrainTool/Grassorten/GrassSorte.asset | 16 + .../Grassorten/GrassSorte.asset.meta | 8 + .../TerrainTool/Grassorten/NeueSorte2.asset | 16 + .../Grassorten/NeueSorte2.asset.meta | 8 + Assets/TerrainTool/Grassorten/Skr.meta | 8 + .../Skr/GrassortenScriptableObject.cs | 71 +++ .../Skr/GrassortenScriptableObject.cs.meta | 11 + Assets/TerrainTool/Jobs.meta | 8 + Assets/TerrainTool/Jobs/GrasJob.cs | 20 + Assets/TerrainTool/Jobs/GrasJob.cs.meta | 11 + Assets/TerrainTool/MyTerrainToolTest.cs | 187 ++++++ Assets/TerrainTool/MyTerrainToolTest.cs.meta | 11 + 30 files changed, 1194 insertions(+) create mode 100644 Assets/Resources.meta create mode 100644 Assets/Resources/GrasJob.prefab create mode 100644 Assets/Resources/GrasJob.prefab.meta create mode 100644 Assets/Resources/GrasManagment.prefab create mode 100644 Assets/Resources/GrasManagment.prefab.meta create mode 100644 Assets/Scenes/TerrainTool.unity create mode 100644 Assets/Scenes/TerrainTool.unity.meta create mode 100644 Assets/Terrain.meta create mode 100644 Assets/Terrain/New Terrain.asset create mode 100644 Assets/Terrain/New Terrain.asset.meta create mode 100644 Assets/Terrain/NormalerLayer.terrainlayer create mode 100644 Assets/Terrain/NormalerLayer.terrainlayer.meta create mode 100644 Assets/TerrainTool.meta create mode 100644 Assets/TerrainTool/GrasField2.cs create mode 100644 Assets/TerrainTool/GrasField2.cs.meta create mode 100644 Assets/TerrainTool/GrasFieldManager.cs create mode 100644 Assets/TerrainTool/GrasFieldManager.cs.meta create mode 100644 Assets/TerrainTool/Grassorten.meta create mode 100644 Assets/TerrainTool/Grassorten/GrassSorte.asset create mode 100644 Assets/TerrainTool/Grassorten/GrassSorte.asset.meta create mode 100644 Assets/TerrainTool/Grassorten/NeueSorte2.asset create mode 100644 Assets/TerrainTool/Grassorten/NeueSorte2.asset.meta create mode 100644 Assets/TerrainTool/Grassorten/Skr.meta create mode 100644 Assets/TerrainTool/Grassorten/Skr/GrassortenScriptableObject.cs create mode 100644 Assets/TerrainTool/Grassorten/Skr/GrassortenScriptableObject.cs.meta create mode 100644 Assets/TerrainTool/Jobs.meta create mode 100644 Assets/TerrainTool/Jobs/GrasJob.cs create mode 100644 Assets/TerrainTool/Jobs/GrasJob.cs.meta create mode 100644 Assets/TerrainTool/MyTerrainToolTest.cs create mode 100644 Assets/TerrainTool/MyTerrainToolTest.cs.meta diff --git a/Assets/Resources.meta b/Assets/Resources.meta new file mode 100644 index 0000000..82e9895 --- /dev/null +++ b/Assets/Resources.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 14795812dfe88754ba3b80578b66234b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/GrasJob.prefab b/Assets/Resources/GrasJob.prefab new file mode 100644 index 0000000..c0260eb --- /dev/null +++ b/Assets/Resources/GrasJob.prefab @@ -0,0 +1,47 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &8670885462079861701 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4388420835408116181} + - component: {fileID: 7677349766599539232} + m_Layer: 0 + m_Name: GrasJob + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4388420835408116181 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8670885462079861701} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 47.66464, y: -120.290794, z: 132.91965} + 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!114 &7677349766599539232 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8670885462079861701} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ff1011c6afd7c2140a44b408bd527fec, type: 3} + m_Name: + m_EditorClassIdentifier: + jobName: temp diff --git a/Assets/Resources/GrasJob.prefab.meta b/Assets/Resources/GrasJob.prefab.meta new file mode 100644 index 0000000..9e4108c --- /dev/null +++ b/Assets/Resources/GrasJob.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ae88fa343d806fc4faa8eb193dec3a8c +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/GrasManagment.prefab b/Assets/Resources/GrasManagment.prefab new file mode 100644 index 0000000..60971bd --- /dev/null +++ b/Assets/Resources/GrasManagment.prefab @@ -0,0 +1,46 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &8656756849993837837 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 296919738142889761} + - component: {fileID: 5859714832040713013} + m_Layer: 0 + m_Name: GrasManagment + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &296919738142889761 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8656756849993837837} + 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!114 &5859714832040713013 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8656756849993837837} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4c5815668e75c314cbc2e9448292cec0, type: 3} + m_Name: + m_EditorClassIdentifier: diff --git a/Assets/Resources/GrasManagment.prefab.meta b/Assets/Resources/GrasManagment.prefab.meta new file mode 100644 index 0000000..a0ca1db --- /dev/null +++ b/Assets/Resources/GrasManagment.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f351e6e9d89d0fc499a4d50d418cf67a +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/TerrainTool.unity b/Assets/Scenes/TerrainTool.unity new file mode 100644 index 0000000..1792b4e --- /dev/null +++ b/Assets/Scenes/TerrainTool.unity @@ -0,0 +1,532 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + 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 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_LightingSettings: {fileID: 0} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!4 &172523546 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 4388420835408116181, guid: ae88fa343d806fc4faa8eb193dec3a8c, type: 3} + m_PrefabInstance: {fileID: 1005985095} + m_PrefabAsset: {fileID: 0} +--- !u!114 &172523547 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 7677349766599539232, guid: ae88fa343d806fc4faa8eb193dec3a8c, type: 3} + m_PrefabInstance: {fileID: 1005985095} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ff1011c6afd7c2140a44b408bd527fec, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &415499410 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 415499412} + - component: {fileID: 415499411} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &415499411 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 415499410} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &415499412 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 415499410} + serializedVersion: 2 + m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!1 &991014495 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 991014498} + - component: {fileID: 991014497} + - component: {fileID: 991014496} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &991014496 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 991014495} + m_Enabled: 1 +--- !u!20 &991014497 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 991014495} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + 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_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &991014498 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 991014495} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: -10} + 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!1001 &1005985095 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 1951628764} + m_Modifications: + - target: {fileID: 4388420835408116181, guid: ae88fa343d806fc4faa8eb193dec3a8c, type: 3} + propertyPath: m_LocalPosition.x + value: 47.66464 + objectReference: {fileID: 0} + - target: {fileID: 4388420835408116181, guid: ae88fa343d806fc4faa8eb193dec3a8c, type: 3} + propertyPath: m_LocalPosition.y + value: -120.290794 + objectReference: {fileID: 0} + - target: {fileID: 4388420835408116181, guid: ae88fa343d806fc4faa8eb193dec3a8c, type: 3} + propertyPath: m_LocalPosition.z + value: 132.91965 + objectReference: {fileID: 0} + - target: {fileID: 4388420835408116181, guid: ae88fa343d806fc4faa8eb193dec3a8c, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4388420835408116181, guid: ae88fa343d806fc4faa8eb193dec3a8c, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4388420835408116181, guid: ae88fa343d806fc4faa8eb193dec3a8c, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4388420835408116181, guid: ae88fa343d806fc4faa8eb193dec3a8c, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4388420835408116181, guid: ae88fa343d806fc4faa8eb193dec3a8c, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4388420835408116181, guid: ae88fa343d806fc4faa8eb193dec3a8c, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4388420835408116181, guid: ae88fa343d806fc4faa8eb193dec3a8c, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8670885462079861701, guid: ae88fa343d806fc4faa8eb193dec3a8c, type: 3} + propertyPath: m_Name + value: GrasJob + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: ae88fa343d806fc4faa8eb193dec3a8c, type: 3} +--- !u!1 &1951628762 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1951628764} + - component: {fileID: 1951628763} + m_Layer: 0 + m_Name: GrasManagment + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1951628763 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1951628762} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4c5815668e75c314cbc2e9448292cec0, type: 3} + m_Name: + m_EditorClassIdentifier: + alleJobs: + - {fileID: 172523547} + currentJob: {fileID: 172523547} +--- !u!4 &1951628764 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1951628762} + 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: 172523546} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2041697494 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2041697497} + - component: {fileID: 2041697496} + - component: {fileID: 2041697495} + m_Layer: 0 + m_Name: Terrain + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!154 &2041697495 +TerrainCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2041697494} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 2 + m_TerrainData: {fileID: 15600000, guid: 22543160dd7de804a8ba3abcfd7398ec, type: 2} + m_EnableTreeColliders: 1 +--- !u!218 &2041697496 +Terrain: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2041697494} + m_Enabled: 1 + serializedVersion: 6 + m_TerrainData: {fileID: 15600000, guid: 22543160dd7de804a8ba3abcfd7398ec, type: 2} + m_TreeDistance: 5000 + m_TreeBillboardDistance: 50 + m_TreeCrossFadeLength: 5 + m_TreeMaximumFullLODCount: 50 + m_DetailObjectDistance: 80 + m_DetailObjectDensity: 1 + m_HeightmapPixelError: 5 + m_SplatMapDistance: 1000 + m_HeightmapMinimumLODSimplification: 0 + m_HeightmapMaximumLOD: 0 + m_ShadowCastingMode: 2 + m_DrawHeightmap: 1 + m_DrawInstanced: 0 + m_DrawTreesAndFoliage: 1 + m_StaticShadowCaster: 0 + m_IgnoreQualitySettings: 0 + m_ReflectionProbeUsage: 1 + m_MaterialTemplate: {fileID: 10652, guid: 0000000000000000f000000000000000, type: 0} + m_BakeLightProbesForTrees: 1 + m_PreserveTreePrototypeLayers: 0 + m_DeringLightProbesForTrees: 1 + m_ReceiveGI: 1 + m_ScaleInLightmap: 0.0256 + m_LightmapParameters: {fileID: 15203, guid: 0000000000000000f000000000000000, type: 0} + m_GroupingID: 0 + m_RenderingLayerMask: 1 + m_AllowAutoConnect: 1 + m_EnableHeightmapRayTracing: 1 + m_EnableTreesAndDetailsRayTracing: 0 + m_TreeMotionVectorModeOverride: 3 +--- !u!4 &2041697497 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2041697494} + 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!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 991014498} + - {fileID: 415499412} + - {fileID: 2041697497} + - {fileID: 1951628764} diff --git a/Assets/Scenes/TerrainTool.unity.meta b/Assets/Scenes/TerrainTool.unity.meta new file mode 100644 index 0000000..bd0aefb --- /dev/null +++ b/Assets/Scenes/TerrainTool.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 8d0d9d0fd3d72aa49ab04e9f2f1dbcb4 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Terrain.meta b/Assets/Terrain.meta new file mode 100644 index 0000000..524a431 --- /dev/null +++ b/Assets/Terrain.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fe2c628676a225141a2a9bb076a9e815 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Terrain/New Terrain.asset b/Assets/Terrain/New Terrain.asset new file mode 100644 index 0000000000000000000000000000000000000000..9d46de9fc9291a24f37b07e531be76a5c187f3a5 GIT binary patch literal 1958952 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 FzW{V+=}G_q literal 0 HcmV?d00001 diff --git a/Assets/Terrain/New Terrain.asset.meta b/Assets/Terrain/New Terrain.asset.meta new file mode 100644 index 0000000..3dc0f95 --- /dev/null +++ b/Assets/Terrain/New Terrain.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 22543160dd7de804a8ba3abcfd7398ec +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 15600000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Terrain/NormalerLayer.terrainlayer b/Assets/Terrain/NormalerLayer.terrainlayer new file mode 100644 index 0000000..2977ea4 --- /dev/null +++ b/Assets/Terrain/NormalerLayer.terrainlayer @@ -0,0 +1,22 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1953259897 &8574412962073106934 +TerrainLayer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: NormalerLayer + m_DiffuseTexture: {fileID: 2800000, guid: 9bb4e817f09d0ea4cbab03f772e01910, type: 3} + m_NormalMapTexture: {fileID: 0} + m_MaskMapTexture: {fileID: 0} + m_TileSize: {x: 2, y: 2} + m_TileOffset: {x: 0, y: 0} + m_Specular: {r: 0, g: 0, b: 0, a: 0} + m_Metallic: 0 + m_Smoothness: 0 + m_NormalScale: 1 + m_DiffuseRemapMin: {x: 0, y: 0, z: 0, w: 0} + m_DiffuseRemapMax: {x: 1, y: 1, z: 1, w: 1} + m_MaskMapRemapMin: {x: 0, y: 0, z: 0, w: 0} + m_MaskMapRemapMax: {x: 1, y: 1, z: 1, w: 1} diff --git a/Assets/Terrain/NormalerLayer.terrainlayer.meta b/Assets/Terrain/NormalerLayer.terrainlayer.meta new file mode 100644 index 0000000..49d6bab --- /dev/null +++ b/Assets/Terrain/NormalerLayer.terrainlayer.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2451cadf6239f7b48a1dd0c8308694fb +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 8574412962073106934 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TerrainTool.meta b/Assets/TerrainTool.meta new file mode 100644 index 0000000..f0670fd --- /dev/null +++ b/Assets/TerrainTool.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ced67708815025d40b2356ff70d9a8e4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TerrainTool/GrasField2.cs b/Assets/TerrainTool/GrasField2.cs new file mode 100644 index 0000000..2d06f1f --- /dev/null +++ b/Assets/TerrainTool/GrasField2.cs @@ -0,0 +1,27 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class GrasField2 : MonoBehaviour +{ + Texture2D GrasFieldTexture; + + // Start is called before the first frame update + void OnEnable() + { + GrasFieldTexture = new Texture2D(16, 16, TextureFormat.Alpha8, false); + } + + void PaintOnGrasField(Vector2 pos) + { + + } + + + + // Update is called once per frame + void Update() + { + + } +} diff --git a/Assets/TerrainTool/GrasField2.cs.meta b/Assets/TerrainTool/GrasField2.cs.meta new file mode 100644 index 0000000..e64c895 --- /dev/null +++ b/Assets/TerrainTool/GrasField2.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fd6d3eb680e03db408d96fc00b1064d9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TerrainTool/GrasFieldManager.cs b/Assets/TerrainTool/GrasFieldManager.cs new file mode 100644 index 0000000..07137ac --- /dev/null +++ b/Assets/TerrainTool/GrasFieldManager.cs @@ -0,0 +1,54 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; + +public class GrasFieldManager : MonoBehaviour +{ + public List alleJobs = new List(); + public GrasJob currentJob; + + + // Start is called before the first frame update + void Start() + { + + } + + // Update is called once per frame + void Update() + { + + } + + void GetAllJobs() + { + alleJobs.Clear(); + for(int i=0; i < transform.childCount; i++) + { + alleJobs.Add(transform.GetChild(i).GetComponent()); + } + } + + public void BrushGras(Terrain terrain, GrassortenScriptableObject grassorte, Vector2 pos, float radius, bool shift) + { + if(currentJob == null) + { + GetAllJobs(); + if(alleJobs.Count > 0) + currentJob = alleJobs[0]; + } + if (currentJob == null) return; + + Debug.Log(pos); + + } + + public void ClearChunks() + { + while (transform.childCount > 0) + { + DestroyImmediate(transform.GetChild(0).gameObject); + } + } +} diff --git a/Assets/TerrainTool/GrasFieldManager.cs.meta b/Assets/TerrainTool/GrasFieldManager.cs.meta new file mode 100644 index 0000000..afc4770 --- /dev/null +++ b/Assets/TerrainTool/GrasFieldManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4c5815668e75c314cbc2e9448292cec0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TerrainTool/Grassorten.meta b/Assets/TerrainTool/Grassorten.meta new file mode 100644 index 0000000..8bfbbdb --- /dev/null +++ b/Assets/TerrainTool/Grassorten.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1c3c5cc8e2791fd48a09487cb7007e5a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TerrainTool/Grassorten/GrassSorte.asset b/Assets/TerrainTool/Grassorten/GrassSorte.asset new file mode 100644 index 0000000..c6024c2 --- /dev/null +++ b/Assets/TerrainTool/Grassorten/GrassSorte.asset @@ -0,0 +1,16 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f565c9ea2c3a9de4e93d55a25bfa14a0, type: 3} + m_Name: GrassSorte + m_EditorClassIdentifier: + sortenName: Normal + material: {fileID: 2100000, guid: 1cd7df4d77cf1ae40ad59a15c2769be9, type: 2} diff --git a/Assets/TerrainTool/Grassorten/GrassSorte.asset.meta b/Assets/TerrainTool/Grassorten/GrassSorte.asset.meta new file mode 100644 index 0000000..d8f4ba5 --- /dev/null +++ b/Assets/TerrainTool/Grassorten/GrassSorte.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7b8cfc9b5904f4044adb2693c4dfbaab +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TerrainTool/Grassorten/NeueSorte2.asset b/Assets/TerrainTool/Grassorten/NeueSorte2.asset new file mode 100644 index 0000000..14e0e9b --- /dev/null +++ b/Assets/TerrainTool/Grassorten/NeueSorte2.asset @@ -0,0 +1,16 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f565c9ea2c3a9de4e93d55a25bfa14a0, type: 3} + m_Name: NeueSorte2 + m_EditorClassIdentifier: + sortenName: + material: {fileID: 2100000, guid: ad7fd76c0f67ff04e8f51f21faf1739d, type: 2} diff --git a/Assets/TerrainTool/Grassorten/NeueSorte2.asset.meta b/Assets/TerrainTool/Grassorten/NeueSorte2.asset.meta new file mode 100644 index 0000000..7014838 --- /dev/null +++ b/Assets/TerrainTool/Grassorten/NeueSorte2.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 60e9ec60c0268e54586c60be04ed1b13 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TerrainTool/Grassorten/Skr.meta b/Assets/TerrainTool/Grassorten/Skr.meta new file mode 100644 index 0000000..5de44ab --- /dev/null +++ b/Assets/TerrainTool/Grassorten/Skr.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 28692abf71f2c1740b57c1abf821ba9d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TerrainTool/Grassorten/Skr/GrassortenScriptableObject.cs b/Assets/TerrainTool/Grassorten/Skr/GrassortenScriptableObject.cs new file mode 100644 index 0000000..d8e5ad9 --- /dev/null +++ b/Assets/TerrainTool/Grassorten/Skr/GrassortenScriptableObject.cs @@ -0,0 +1,71 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; +using UnityEditor.PackageManager.UI; + +[CreateAssetMenu(fileName = "GrassSorte", menuName = "Grassystem/Grassorte", order = 1)] +public class GrassortenScriptableObject : ScriptableObject +{ + public string sortenName; + public Material material; + private void Awake() + { + GeneratePreviewMesh(); + } + + public static Mesh GeneratePreviewMesh() + { + List verts = new List(); + List indes = new List(); + List tipPosAndLODVanish = new List(); + + Mesh mesh = new Mesh(); + + for(int i=0; i < 100; i++) + { + Vector3 vertexPos = new Vector3(Random.Range(-1f, 1f), 0, Random.Range(-1f, 1f)); + verts.Add(vertexPos); + indes.Add(i); + tipPosAndLODVanish.Add(new Vector4(Random.Range(-1f, 1f), 1f, Random.Range(-1f, 1f), 0)); + } + + mesh.SetVertices(verts); + mesh.SetUVs(0, tipPosAndLODVanish); + mesh.SetIndices(indes.ToArray(), MeshTopology.Points, 0); + mesh.name = "Tubnailmesh"; + + return mesh; + } +} + +[CustomEditor(typeof(GrassortenScriptableObject))] +public class GrassortenScriptableObjectEditor : Editor +{ + public override Texture2D RenderStaticPreview(string assetPath, Object[] subAssets, int width, int height) + { + PreviewRenderUtility previewUtility; + GrassortenScriptableObject grassorte = (GrassortenScriptableObject)target; + Mesh mesh = GrassortenScriptableObject.GeneratePreviewMesh(); + + previewUtility = new PreviewRenderUtility(); + previewUtility.DrawMesh(mesh, Matrix4x4.identity, grassorte.material, 0); + + // Camera Settings + previewUtility.camera.transform.position = new Vector3(0f, 1f, -3f); + previewUtility.camera.transform.eulerAngles = new Vector3(12f, 0f, 0f); + previewUtility.camera.nearClipPlane = 0.01f; + previewUtility.camera.farClipPlane = 20f; + + Rect rect = new Rect(0, 0, width, height); + previewUtility.BeginStaticPreview(rect); + previewUtility.Render(); + + var returnTexture = previewUtility.EndStaticPreview(); + + previewUtility.Cleanup(); + DestroyImmediate(mesh); + + return returnTexture; + } +} diff --git a/Assets/TerrainTool/Grassorten/Skr/GrassortenScriptableObject.cs.meta b/Assets/TerrainTool/Grassorten/Skr/GrassortenScriptableObject.cs.meta new file mode 100644 index 0000000..3b1bdf9 --- /dev/null +++ b/Assets/TerrainTool/Grassorten/Skr/GrassortenScriptableObject.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f565c9ea2c3a9de4e93d55a25bfa14a0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TerrainTool/Jobs.meta b/Assets/TerrainTool/Jobs.meta new file mode 100644 index 0000000..7798ab0 --- /dev/null +++ b/Assets/TerrainTool/Jobs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4565c16a3fdb2894b9c2744e1b62356d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TerrainTool/Jobs/GrasJob.cs b/Assets/TerrainTool/Jobs/GrasJob.cs new file mode 100644 index 0000000..1fdc99b --- /dev/null +++ b/Assets/TerrainTool/Jobs/GrasJob.cs @@ -0,0 +1,20 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class GrasJob : MonoBehaviour +{ + public string jobName = "temp"; + + // Start is called before the first frame update + void Start() + { + + } + + // Update is called once per frame + void Update() + { + + } +} diff --git a/Assets/TerrainTool/Jobs/GrasJob.cs.meta b/Assets/TerrainTool/Jobs/GrasJob.cs.meta new file mode 100644 index 0000000..c840746 --- /dev/null +++ b/Assets/TerrainTool/Jobs/GrasJob.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ff1011c6afd7c2140a44b408bd527fec +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TerrainTool/MyTerrainToolTest.cs b/Assets/TerrainTool/MyTerrainToolTest.cs new file mode 100644 index 0000000..f700ef1 --- /dev/null +++ b/Assets/TerrainTool/MyTerrainToolTest.cs @@ -0,0 +1,187 @@ +using System.Collections.Generic; +using System.Linq; +using UnityEditor.VersionControl; +using UnityEngine; +using UnityEngine.Assertions; +using UnityEngine.TerrainTools; +using static Unity.VisualScripting.Member; + +namespace UnityEditor.TerrainTools +{ +#if UNITY_EDITOR + public class MyTerrainToolTest : TerrainPaintTool + { + public GrasField2 grassField; + public GrasFieldManager grasFieldManager; + + + //Grassorten + bool grassortenSichtbar = false; + public List grassorten; + public GrassortenScriptableObject aktuelleGrassorte; + public int aktuelleGrassorteInt = 0; + + public bool isInChunckSelectorMode = false; + + + override public void OnEnable() + { + AssemblyReloadEvents.beforeAssemblyReload += OnBeforeAssemblyReload; + AssemblyReloadEvents.afterAssemblyReload += OnAfterAssemblyReload; + } + + override public void OnDisable() + { + AssemblyReloadEvents.beforeAssemblyReload -= OnBeforeAssemblyReload; + AssemblyReloadEvents.afterAssemblyReload -= OnAfterAssemblyReload; + } + + public override string GetName() + { + return "Grass Paint Tool"; + } + + public override string GetDescription() + { + return "Left click to raise.\n\nHold shift and left click to lower."; + } + + public override void OnRenderBrushPreview(Terrain terrain, IOnSceneGUI editContext) + { + //if (isInChunckSelectorMode) return; + + TerrainPaintUtilityEditor.ShowDefaultPreviewBrush(terrain, editContext.brushTexture, editContext.brushSize); + } + + public override bool OnPaint(Terrain terrain, IOnPaint editContext) + { + + Material mat = TerrainPaintUtility.GetBuiltinPaintMaterial(); + + if (grasFieldManager == null) + return false; + + //Normalen Paint Context callen, weil sonst der brush in die Textur gezeichnet wird + float rotationDegrees = 0.0f; + BrushTransform brushXform = TerrainPaintUtility.CalculateBrushTransform(terrain, editContext.uv, editContext.brushSize, rotationDegrees); + PaintContext paintContext = TerrainPaintUtility.BeginPaintTexture(terrain, brushXform.GetBrushXYBounds(), terrain.terrainData.terrainLayers[0]); + + grasFieldManager.BrushGras(terrain, aktuelleGrassorte, editContext.uv, editContext.brushSize, Event.current.shift); + //grassField.brushGrass(Event.current.shift, editContext.uv * new Vector2(terrain.terrainData.size.x, terrain.terrainData.size.z), editContext.brushSize); + + //Der Context wird immer released, weil wir in der anderen Funtion das malen übernemen + TerrainPaintUtility.ReleaseContextResources(paintContext); + + return false; + } + + public void OnBeforeAssemblyReload() + { + //if(grassField != null) grassField.SaveChuncks(); + } + + public void OnAfterAssemblyReload() + { + + } + + public override void OnSceneGUI(Terrain terrain, IOnSceneGUI editContext) + { + base.OnSceneGUI(terrain, editContext); + + if (Event.current.type == EventType.MouseUp && Event.current.button == 0 && grassField != null) + { + //grassField.ClearActiveChuncks(); + //grassField.UpdateChuncks(); + //grassField.SaveChuncks(); + } + } + + public override void OnInspectorGUI(Terrain terrain, IOnInspectorGUI editContext) + { + base.OnInspectorGUI(terrain, editContext); + editContext.ShowBrushesGUI(1, BrushGUIEditFlags.All); + + + if (grasFieldManager == null) + { + GameObject grasManagerObject = GameObject.Find("GrasManagment"); + + if (grasManagerObject == null) + { + Debug.LogError("Kein GrasMangager Gefunden"); + + GameObject grasMangerPrefab = (GameObject)Resources.Load("GrasManagment"); + grasManagerObject = Instantiate(grasMangerPrefab); + grasManagerObject.name = "GrasManagment"; + + Debug.Log("Neuer Gras Manager Gespawned"); + } + + grasFieldManager = grasManagerObject.GetComponent(); + } + + GrassortenAuswahlZeichnen(); + + if (GUILayout.Button("UpdateGras")) + { + AssetDatabase.Refresh(); + if (grassField != null) + { + //grassField.UpdateAllMeshes(); + } + } + + if (GUILayout.Button("Clear Grass Chuncks")) + { + AssetDatabase.Refresh(); + if(grasFieldManager != null) + { + grasFieldManager.ClearChunks(); + } + } + } + + private void GrassortenAuswahlZeichnen() + { + bool warenDieSortenSichtbar = grassortenSichtbar; + grassortenSichtbar = EditorGUILayout.BeginFoldoutHeaderGroup(grassortenSichtbar, "Grassorten"); + + if (warenDieSortenSichtbar == false && grassortenSichtbar == true) + { + if (grassorten == null) grassorten = new List(); + grassorten.Clear(); + + var allAssets = AssetDatabase.FindAssets($"t:{typeof(GrassortenScriptableObject).Name}").ToList().Select(AssetDatabase.GUIDToAssetPath); + foreach (var asset in allAssets) + { + grassorten.Add(AssetDatabase.LoadAssetAtPath(asset)); + + } + } + + if (grassortenSichtbar) + { + var grassortenNamen = new List(); + var grassTubnails = new List(); + + foreach (var sorte in grassorten) + { + grassortenNamen.Add(sorte.name); + grassTubnails.Add(AssetPreview.GetAssetPreview(sorte)); + } + + int alteSorte = aktuelleGrassorteInt; + aktuelleGrassorteInt = GUILayout.SelectionGrid(aktuelleGrassorteInt, grassTubnails.ToArray(), 4); + + if (aktuelleGrassorteInt != alteSorte) + aktuelleGrassorte = grassorten[aktuelleGrassorteInt]; + } + + EditorGUILayout.EndFoldoutHeaderGroup(); + } + + } + +#endif +} \ No newline at end of file diff --git a/Assets/TerrainTool/MyTerrainToolTest.cs.meta b/Assets/TerrainTool/MyTerrainToolTest.cs.meta new file mode 100644 index 0000000..44b7fce --- /dev/null +++ b/Assets/TerrainTool/MyTerrainToolTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 42c4a81b0837ac141a3ced23b6ac0cc0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: