├── Assets ├── GeoPainter.meta ├── GeoPainter │ ├── Materials.meta │ ├── Materials │ │ ├── Cube.mat │ │ ├── Cube.mat.meta │ │ ├── Sphere.mat │ │ ├── Sphere.mat.meta │ │ ├── Terrain.mat │ │ ├── Terrain.mat.meta │ │ ├── cylinder.mat │ │ ├── cylinder.mat.meta │ │ ├── object.mat │ │ ├── object.mat.meta │ │ ├── paintMask.mat │ │ └── paintMask.mat.meta │ ├── Prefabs.meta │ ├── Prefabs │ │ ├── paintObject.prefab │ │ └── paintObject.prefab.meta │ ├── Scripts.meta │ ├── Scripts │ │ ├── Editor.meta │ │ ├── Editor │ │ │ ├── GeoPainterEditor.js │ │ │ └── GeoPainterEditor.js.meta │ │ ├── GeoPainter.js │ │ ├── GeoPainter.js.meta │ │ ├── GeoPainterGroup.js │ │ ├── GeoPainterGroup.js.meta │ │ ├── GeoPainterObject.js │ │ ├── GeoPainterObject.js.meta │ │ ├── GeoPainterPoint.js │ │ └── GeoPainterPoint.js.meta │ ├── readme.txt │ └── readme.txt.meta ├── GeoPainterCommunity_TestLevel.unity └── GeoPainterCommunity_TestLevel.unity.meta ├── GeoPainter Community Edition Manual.pdf ├── LICENSE └── README.md /Assets/GeoPainter.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2c8f2bcb350ffe44ca9eb8fd298fb4a9 3 | folderAsset: yes 4 | timeCreated: 1531152212 5 | licenseType: Free 6 | DefaultImporter: 7 | externalObjects: {} 8 | userData: 9 | assetBundleName: 10 | assetBundleVariant: 11 | -------------------------------------------------------------------------------- /Assets/GeoPainter/Materials.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 045f48b545d473b4c80b2b3db0cee606 3 | folderAsset: yes 4 | timeCreated: 1531428202 5 | licenseType: Free 6 | DefaultImporter: 7 | externalObjects: {} 8 | userData: 9 | assetBundleName: 10 | assetBundleVariant: 11 | -------------------------------------------------------------------------------- /Assets/GeoPainter/Materials/Cube.mat: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!21 &2100000 4 | Material: 5 | serializedVersion: 6 6 | m_ObjectHideFlags: 0 7 | m_PrefabParentObject: {fileID: 0} 8 | m_PrefabInternal: {fileID: 0} 9 | m_Name: Cube 10 | m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} 11 | m_ShaderKeywords: 12 | m_LightmapFlags: 4 13 | m_EnableInstancingVariants: 0 14 | m_DoubleSidedGI: 0 15 | m_CustomRenderQueue: -1 16 | stringTagMap: {} 17 | disabledShaderPasses: [] 18 | m_SavedProperties: 19 | serializedVersion: 3 20 | m_TexEnvs: 21 | - _BumpMap: 22 | m_Texture: {fileID: 0} 23 | m_Scale: {x: 1, y: 1} 24 | m_Offset: {x: 0, y: 0} 25 | - _DetailAlbedoMap: 26 | m_Texture: {fileID: 0} 27 | m_Scale: {x: 1, y: 1} 28 | m_Offset: {x: 0, y: 0} 29 | - _DetailMask: 30 | m_Texture: {fileID: 0} 31 | m_Scale: {x: 1, y: 1} 32 | m_Offset: {x: 0, y: 0} 33 | - _DetailNormalMap: 34 | m_Texture: {fileID: 0} 35 | m_Scale: {x: 1, y: 1} 36 | m_Offset: {x: 0, y: 0} 37 | - _EmissionMap: 38 | m_Texture: {fileID: 0} 39 | m_Scale: {x: 1, y: 1} 40 | m_Offset: {x: 0, y: 0} 41 | - _MainTex: 42 | m_Texture: {fileID: 0} 43 | m_Scale: {x: 1, y: 1} 44 | m_Offset: {x: 0, y: 0} 45 | - _MetallicGlossMap: 46 | m_Texture: {fileID: 0} 47 | m_Scale: {x: 1, y: 1} 48 | m_Offset: {x: 0, y: 0} 49 | - _OcclusionMap: 50 | m_Texture: {fileID: 0} 51 | m_Scale: {x: 1, y: 1} 52 | m_Offset: {x: 0, y: 0} 53 | - _ParallaxMap: 54 | m_Texture: {fileID: 0} 55 | m_Scale: {x: 1, y: 1} 56 | m_Offset: {x: 0, y: 0} 57 | m_Floats: 58 | - _BumpScale: 1 59 | - _Cutoff: 0.5 60 | - _DetailNormalMapScale: 1 61 | - _DstBlend: 0 62 | - _GlossMapScale: 1 63 | - _Glossiness: 0.5 64 | - _GlossyReflections: 1 65 | - _Metallic: 0 66 | - _Mode: 0 67 | - _OcclusionStrength: 1 68 | - _Parallax: 0.02 69 | - _SmoothnessTextureChannel: 0 70 | - _SpecularHighlights: 1 71 | - _SrcBlend: 1 72 | - _UVSec: 0 73 | - _ZWrite: 1 74 | m_Colors: 75 | - _Color: {r: 0.3678633, g: 0.5955882, b: 0.4448186, a: 1} 76 | - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} 77 | -------------------------------------------------------------------------------- /Assets/GeoPainter/Materials/Cube.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2a31ab38fcfbec9459c885956c0cccef 3 | timeCreated: 1531428638 4 | licenseType: Free 5 | NativeFormatImporter: 6 | externalObjects: {} 7 | mainObjectFileID: 2100000 8 | userData: 9 | assetBundleName: 10 | assetBundleVariant: 11 | -------------------------------------------------------------------------------- /Assets/GeoPainter/Materials/Sphere.mat: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!21 &2100000 4 | Material: 5 | serializedVersion: 6 6 | m_ObjectHideFlags: 0 7 | m_PrefabParentObject: {fileID: 0} 8 | m_PrefabInternal: {fileID: 0} 9 | m_Name: Sphere 10 | m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} 11 | m_ShaderKeywords: 12 | m_LightmapFlags: 4 13 | m_EnableInstancingVariants: 0 14 | m_DoubleSidedGI: 0 15 | m_CustomRenderQueue: -1 16 | stringTagMap: {} 17 | disabledShaderPasses: [] 18 | m_SavedProperties: 19 | serializedVersion: 3 20 | m_TexEnvs: 21 | - _BumpMap: 22 | m_Texture: {fileID: 0} 23 | m_Scale: {x: 1, y: 1} 24 | m_Offset: {x: 0, y: 0} 25 | - _DetailAlbedoMap: 26 | m_Texture: {fileID: 0} 27 | m_Scale: {x: 1, y: 1} 28 | m_Offset: {x: 0, y: 0} 29 | - _DetailMask: 30 | m_Texture: {fileID: 0} 31 | m_Scale: {x: 1, y: 1} 32 | m_Offset: {x: 0, y: 0} 33 | - _DetailNormalMap: 34 | m_Texture: {fileID: 0} 35 | m_Scale: {x: 1, y: 1} 36 | m_Offset: {x: 0, y: 0} 37 | - _EmissionMap: 38 | m_Texture: {fileID: 0} 39 | m_Scale: {x: 1, y: 1} 40 | m_Offset: {x: 0, y: 0} 41 | - _MainTex: 42 | m_Texture: {fileID: 0} 43 | m_Scale: {x: 1, y: 1} 44 | m_Offset: {x: 0, y: 0} 45 | - _MetallicGlossMap: 46 | m_Texture: {fileID: 0} 47 | m_Scale: {x: 1, y: 1} 48 | m_Offset: {x: 0, y: 0} 49 | - _OcclusionMap: 50 | m_Texture: {fileID: 0} 51 | m_Scale: {x: 1, y: 1} 52 | m_Offset: {x: 0, y: 0} 53 | - _ParallaxMap: 54 | m_Texture: {fileID: 0} 55 | m_Scale: {x: 1, y: 1} 56 | m_Offset: {x: 0, y: 0} 57 | m_Floats: 58 | - _BumpScale: 1 59 | - _Cutoff: 0.5 60 | - _DetailNormalMapScale: 1 61 | - _DstBlend: 0 62 | - _GlossMapScale: 1 63 | - _Glossiness: 0.5 64 | - _GlossyReflections: 1 65 | - _Metallic: 0 66 | - _Mode: 0 67 | - _OcclusionStrength: 1 68 | - _Parallax: 0.02 69 | - _SmoothnessTextureChannel: 0 70 | - _SpecularHighlights: 1 71 | - _SrcBlend: 1 72 | - _UVSec: 0 73 | - _ZWrite: 1 74 | m_Colors: 75 | - _Color: {r: 0.59244716, g: 0.5955882, b: 0.3678633, a: 1} 76 | - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} 77 | -------------------------------------------------------------------------------- /Assets/GeoPainter/Materials/Sphere.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 152427138b5cd0b469438e9484673d63 3 | timeCreated: 1531428638 4 | licenseType: Free 5 | NativeFormatImporter: 6 | externalObjects: {} 7 | mainObjectFileID: 2100000 8 | userData: 9 | assetBundleName: 10 | assetBundleVariant: 11 | -------------------------------------------------------------------------------- /Assets/GeoPainter/Materials/Terrain.mat: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!21 &2100000 4 | Material: 5 | serializedVersion: 6 6 | m_ObjectHideFlags: 0 7 | m_PrefabParentObject: {fileID: 0} 8 | m_PrefabInternal: {fileID: 0} 9 | m_Name: Terrain 10 | m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} 11 | m_ShaderKeywords: 12 | m_LightmapFlags: 4 13 | m_EnableInstancingVariants: 0 14 | m_DoubleSidedGI: 0 15 | m_CustomRenderQueue: -1 16 | stringTagMap: {} 17 | disabledShaderPasses: [] 18 | m_SavedProperties: 19 | serializedVersion: 3 20 | m_TexEnvs: 21 | - _BumpMap: 22 | m_Texture: {fileID: 0} 23 | m_Scale: {x: 1, y: 1} 24 | m_Offset: {x: 0, y: 0} 25 | - _DetailAlbedoMap: 26 | m_Texture: {fileID: 0} 27 | m_Scale: {x: 1, y: 1} 28 | m_Offset: {x: 0, y: 0} 29 | - _DetailMask: 30 | m_Texture: {fileID: 0} 31 | m_Scale: {x: 1, y: 1} 32 | m_Offset: {x: 0, y: 0} 33 | - _DetailNormalMap: 34 | m_Texture: {fileID: 0} 35 | m_Scale: {x: 1, y: 1} 36 | m_Offset: {x: 0, y: 0} 37 | - _EmissionMap: 38 | m_Texture: {fileID: 0} 39 | m_Scale: {x: 1, y: 1} 40 | m_Offset: {x: 0, y: 0} 41 | - _MainTex: 42 | m_Texture: {fileID: 0} 43 | m_Scale: {x: 1, y: 1} 44 | m_Offset: {x: 0, y: 0} 45 | - _MetallicGlossMap: 46 | m_Texture: {fileID: 0} 47 | m_Scale: {x: 1, y: 1} 48 | m_Offset: {x: 0, y: 0} 49 | - _OcclusionMap: 50 | m_Texture: {fileID: 0} 51 | m_Scale: {x: 1, y: 1} 52 | m_Offset: {x: 0, y: 0} 53 | - _ParallaxMap: 54 | m_Texture: {fileID: 0} 55 | m_Scale: {x: 1, y: 1} 56 | m_Offset: {x: 0, y: 0} 57 | m_Floats: 58 | - _BumpScale: 1 59 | - _Cutoff: 0.5 60 | - _DetailNormalMapScale: 1 61 | - _DstBlend: 0 62 | - _GlossMapScale: 1 63 | - _Glossiness: 0 64 | - _GlossyReflections: 1 65 | - _Metallic: 0 66 | - _Mode: 0 67 | - _OcclusionStrength: 1 68 | - _Parallax: 0.02 69 | - _SmoothnessTextureChannel: 0 70 | - _SpecularHighlights: 1 71 | - _SrcBlend: 1 72 | - _UVSec: 0 73 | - _ZWrite: 1 74 | m_Colors: 75 | - _Color: {r: 0.40560123, g: 0.4329958, b: 0.45588237, a: 1} 76 | - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} 77 | -------------------------------------------------------------------------------- /Assets/GeoPainter/Materials/Terrain.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a86d1eebd8998aa4c99264f6f855a172 3 | timeCreated: 1531428194 4 | licenseType: Free 5 | NativeFormatImporter: 6 | externalObjects: {} 7 | mainObjectFileID: 2100000 8 | userData: 9 | assetBundleName: 10 | assetBundleVariant: 11 | -------------------------------------------------------------------------------- /Assets/GeoPainter/Materials/cylinder.mat: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!21 &2100000 4 | Material: 5 | serializedVersion: 6 6 | m_ObjectHideFlags: 0 7 | m_PrefabParentObject: {fileID: 0} 8 | m_PrefabInternal: {fileID: 0} 9 | m_Name: cylinder 10 | m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} 11 | m_ShaderKeywords: 12 | m_LightmapFlags: 4 13 | m_EnableInstancingVariants: 0 14 | m_DoubleSidedGI: 0 15 | m_CustomRenderQueue: -1 16 | stringTagMap: {} 17 | disabledShaderPasses: [] 18 | m_SavedProperties: 19 | serializedVersion: 3 20 | m_TexEnvs: 21 | - _BumpMap: 22 | m_Texture: {fileID: 0} 23 | m_Scale: {x: 1, y: 1} 24 | m_Offset: {x: 0, y: 0} 25 | - _DetailAlbedoMap: 26 | m_Texture: {fileID: 0} 27 | m_Scale: {x: 1, y: 1} 28 | m_Offset: {x: 0, y: 0} 29 | - _DetailMask: 30 | m_Texture: {fileID: 0} 31 | m_Scale: {x: 1, y: 1} 32 | m_Offset: {x: 0, y: 0} 33 | - _DetailNormalMap: 34 | m_Texture: {fileID: 0} 35 | m_Scale: {x: 1, y: 1} 36 | m_Offset: {x: 0, y: 0} 37 | - _EmissionMap: 38 | m_Texture: {fileID: 0} 39 | m_Scale: {x: 1, y: 1} 40 | m_Offset: {x: 0, y: 0} 41 | - _MainTex: 42 | m_Texture: {fileID: 0} 43 | m_Scale: {x: 1, y: 1} 44 | m_Offset: {x: 0, y: 0} 45 | - _MetallicGlossMap: 46 | m_Texture: {fileID: 0} 47 | m_Scale: {x: 1, y: 1} 48 | m_Offset: {x: 0, y: 0} 49 | - _OcclusionMap: 50 | m_Texture: {fileID: 0} 51 | m_Scale: {x: 1, y: 1} 52 | m_Offset: {x: 0, y: 0} 53 | - _ParallaxMap: 54 | m_Texture: {fileID: 0} 55 | m_Scale: {x: 1, y: 1} 56 | m_Offset: {x: 0, y: 0} 57 | m_Floats: 58 | - _BumpScale: 1 59 | - _Cutoff: 0.5 60 | - _DetailNormalMapScale: 1 61 | - _DstBlend: 0 62 | - _GlossMapScale: 1 63 | - _Glossiness: 0.5 64 | - _GlossyReflections: 1 65 | - _Metallic: 0 66 | - _Mode: 0 67 | - _OcclusionStrength: 1 68 | - _Parallax: 0.02 69 | - _SmoothnessTextureChannel: 0 70 | - _SpecularHighlights: 1 71 | - _SrcBlend: 1 72 | - _UVSec: 0 73 | - _ZWrite: 1 74 | m_Colors: 75 | - _Color: {r: 0.46994692, g: 0.3678633, b: 0.5955882, a: 1} 76 | - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} 77 | -------------------------------------------------------------------------------- /Assets/GeoPainter/Materials/cylinder.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: ceb8cdc3b09dd5a4fa2464e28b4be3a6 3 | timeCreated: 1531428638 4 | licenseType: Free 5 | NativeFormatImporter: 6 | externalObjects: {} 7 | mainObjectFileID: 2100000 8 | userData: 9 | assetBundleName: 10 | assetBundleVariant: 11 | -------------------------------------------------------------------------------- /Assets/GeoPainter/Materials/object.mat: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!21 &2100000 4 | Material: 5 | serializedVersion: 6 6 | m_ObjectHideFlags: 0 7 | m_PrefabParentObject: {fileID: 0} 8 | m_PrefabInternal: {fileID: 0} 9 | m_Name: object 10 | m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} 11 | m_ShaderKeywords: 12 | m_LightmapFlags: 4 13 | m_EnableInstancingVariants: 0 14 | m_DoubleSidedGI: 0 15 | m_CustomRenderQueue: -1 16 | stringTagMap: {} 17 | disabledShaderPasses: [] 18 | m_SavedProperties: 19 | serializedVersion: 3 20 | m_TexEnvs: 21 | - _BumpMap: 22 | m_Texture: {fileID: 0} 23 | m_Scale: {x: 1, y: 1} 24 | m_Offset: {x: 0, y: 0} 25 | - _DetailAlbedoMap: 26 | m_Texture: {fileID: 0} 27 | m_Scale: {x: 1, y: 1} 28 | m_Offset: {x: 0, y: 0} 29 | - _DetailMask: 30 | m_Texture: {fileID: 0} 31 | m_Scale: {x: 1, y: 1} 32 | m_Offset: {x: 0, y: 0} 33 | - _DetailNormalMap: 34 | m_Texture: {fileID: 0} 35 | m_Scale: {x: 1, y: 1} 36 | m_Offset: {x: 0, y: 0} 37 | - _EmissionMap: 38 | m_Texture: {fileID: 0} 39 | m_Scale: {x: 1, y: 1} 40 | m_Offset: {x: 0, y: 0} 41 | - _MainTex: 42 | m_Texture: {fileID: 0} 43 | m_Scale: {x: 1, y: 1} 44 | m_Offset: {x: 0, y: 0} 45 | - _MetallicGlossMap: 46 | m_Texture: {fileID: 0} 47 | m_Scale: {x: 1, y: 1} 48 | m_Offset: {x: 0, y: 0} 49 | - _OcclusionMap: 50 | m_Texture: {fileID: 0} 51 | m_Scale: {x: 1, y: 1} 52 | m_Offset: {x: 0, y: 0} 53 | - _ParallaxMap: 54 | m_Texture: {fileID: 0} 55 | m_Scale: {x: 1, y: 1} 56 | m_Offset: {x: 0, y: 0} 57 | m_Floats: 58 | - _BumpScale: 1 59 | - _Cutoff: 0.5 60 | - _DetailNormalMapScale: 1 61 | - _DstBlend: 0 62 | - _GlossMapScale: 1 63 | - _Glossiness: 0 64 | - _GlossyReflections: 1 65 | - _Metallic: 0.384 66 | - _Mode: 0 67 | - _OcclusionStrength: 1 68 | - _Parallax: 0.02 69 | - _SmoothnessTextureChannel: 0 70 | - _SpecularHighlights: 1 71 | - _SrcBlend: 1 72 | - _UVSec: 0 73 | - _ZWrite: 1 74 | m_Colors: 75 | - _Color: {r: 0.15486501, g: 0.659, b: 0.19620408, a: 1} 76 | - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} 77 | -------------------------------------------------------------------------------- /Assets/GeoPainter/Materials/object.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 566f802f4178bda4ca393b541f46e654 3 | timeCreated: 1531428638 4 | licenseType: Free 5 | NativeFormatImporter: 6 | externalObjects: {} 7 | mainObjectFileID: 2100000 8 | userData: 9 | assetBundleName: 10 | assetBundleVariant: 11 | -------------------------------------------------------------------------------- /Assets/GeoPainter/Materials/paintMask.mat: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!21 &2100000 4 | Material: 5 | serializedVersion: 6 6 | m_ObjectHideFlags: 0 7 | m_PrefabParentObject: {fileID: 0} 8 | m_PrefabInternal: {fileID: 0} 9 | m_Name: paintMask 10 | m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} 11 | m_ShaderKeywords: _ALPHAPREMULTIPLY_ON _GLOSSYREFLECTIONS_OFF _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A 12 | m_LightmapFlags: 4 13 | m_EnableInstancingVariants: 0 14 | m_DoubleSidedGI: 0 15 | m_CustomRenderQueue: 3000 16 | stringTagMap: 17 | RenderType: Transparent 18 | disabledShaderPasses: [] 19 | m_SavedProperties: 20 | serializedVersion: 3 21 | m_TexEnvs: 22 | - _BumpMap: 23 | m_Texture: {fileID: 0} 24 | m_Scale: {x: 1, y: 1} 25 | m_Offset: {x: 0, y: 0} 26 | - _DetailAlbedoMap: 27 | m_Texture: {fileID: 0} 28 | m_Scale: {x: 1, y: 1} 29 | m_Offset: {x: 0, y: 0} 30 | - _DetailMask: 31 | m_Texture: {fileID: 0} 32 | m_Scale: {x: 1, y: 1} 33 | m_Offset: {x: 0, y: 0} 34 | - _DetailNormalMap: 35 | m_Texture: {fileID: 0} 36 | m_Scale: {x: 1, y: 1} 37 | m_Offset: {x: 0, y: 0} 38 | - _EmissionMap: 39 | m_Texture: {fileID: 0} 40 | m_Scale: {x: 1, y: 1} 41 | m_Offset: {x: 0, y: 0} 42 | - _MainTex: 43 | m_Texture: {fileID: 0} 44 | m_Scale: {x: 1, y: 1} 45 | m_Offset: {x: 0, y: 0} 46 | - _MetallicGlossMap: 47 | m_Texture: {fileID: 0} 48 | m_Scale: {x: 1, y: 1} 49 | m_Offset: {x: 0, y: 0} 50 | - _OcclusionMap: 51 | m_Texture: {fileID: 0} 52 | m_Scale: {x: 1, y: 1} 53 | m_Offset: {x: 0, y: 0} 54 | - _ParallaxMap: 55 | m_Texture: {fileID: 0} 56 | m_Scale: {x: 1, y: 1} 57 | m_Offset: {x: 0, y: 0} 58 | m_Floats: 59 | - _BumpScale: 1 60 | - _Cutoff: 0.5 61 | - _DetailNormalMapScale: 1 62 | - _DstBlend: 10 63 | - _GlossMapScale: 0 64 | - _Glossiness: 0.5 65 | - _GlossyReflections: 0 66 | - _Metallic: 0.28 67 | - _Mode: 3 68 | - _OcclusionStrength: 1 69 | - _Parallax: 0.02 70 | - _SmoothnessTextureChannel: 1 71 | - _SpecularHighlights: 1 72 | - _SrcBlend: 1 73 | - _UVSec: 0 74 | - _ZWrite: 0 75 | m_Colors: 76 | - _Color: {r: 1, g: 0, b: 0, a: 0.153} 77 | - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} 78 | -------------------------------------------------------------------------------- /Assets/GeoPainter/Materials/paintMask.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 82740adf62894764fa392185f8b66b5b 3 | timeCreated: 1531428271 4 | licenseType: Free 5 | NativeFormatImporter: 6 | externalObjects: {} 7 | mainObjectFileID: 2100000 8 | userData: 9 | assetBundleName: 10 | assetBundleVariant: 11 | -------------------------------------------------------------------------------- /Assets/GeoPainter/Prefabs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 4de0bd7cee1c8944693ddd80963a41e4 3 | folderAsset: yes 4 | timeCreated: 1531426771 5 | licenseType: Free 6 | DefaultImporter: 7 | externalObjects: {} 8 | userData: 9 | assetBundleName: 10 | assetBundleVariant: 11 | -------------------------------------------------------------------------------- /Assets/GeoPainter/Prefabs/paintObject.prefab: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1001 &100100000 4 | Prefab: 5 | m_ObjectHideFlags: 1 6 | serializedVersion: 2 7 | m_Modification: 8 | m_TransformParent: {fileID: 0} 9 | m_Modifications: [] 10 | m_RemovedComponents: [] 11 | m_ParentPrefab: {fileID: 0} 12 | m_RootGameObject: {fileID: 1252715670555686} 13 | m_IsPrefabParent: 1 14 | --- !u!1 &1252715670555686 15 | GameObject: 16 | m_ObjectHideFlags: 0 17 | m_PrefabParentObject: {fileID: 0} 18 | m_PrefabInternal: {fileID: 100100000} 19 | serializedVersion: 5 20 | m_Component: 21 | - component: {fileID: 4202910973729430} 22 | - component: {fileID: 33621127327410374} 23 | - component: {fileID: 65210267929361302} 24 | - component: {fileID: 23023618270534390} 25 | m_Layer: 9 26 | m_Name: paintObject 27 | m_TagString: Untagged 28 | m_Icon: {fileID: 0} 29 | m_NavMeshLayer: 0 30 | m_StaticEditorFlags: 0 31 | m_IsActive: 1 32 | --- !u!4 &4202910973729430 33 | Transform: 34 | m_ObjectHideFlags: 1 35 | m_PrefabParentObject: {fileID: 0} 36 | m_PrefabInternal: {fileID: 100100000} 37 | m_GameObject: {fileID: 1252715670555686} 38 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 39 | m_LocalPosition: {x: 23.6, y: -12.060075, z: 129.2} 40 | m_LocalScale: {x: 2.8089168, y: 6.3703604, z: 1.8462611} 41 | m_Children: [] 42 | m_Father: {fileID: 0} 43 | m_RootOrder: 0 44 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 45 | --- !u!23 &23023618270534390 46 | MeshRenderer: 47 | m_ObjectHideFlags: 1 48 | m_PrefabParentObject: {fileID: 0} 49 | m_PrefabInternal: {fileID: 100100000} 50 | m_GameObject: {fileID: 1252715670555686} 51 | m_Enabled: 1 52 | m_CastShadows: 1 53 | m_ReceiveShadows: 1 54 | m_DynamicOccludee: 1 55 | m_MotionVectors: 1 56 | m_LightProbeUsage: 1 57 | m_ReflectionProbeUsage: 1 58 | m_Materials: 59 | - {fileID: 2100000, guid: 566f802f4178bda4ca393b541f46e654, type: 2} 60 | m_StaticBatchInfo: 61 | firstSubMesh: 0 62 | subMeshCount: 0 63 | m_StaticBatchRoot: {fileID: 0} 64 | m_ProbeAnchor: {fileID: 0} 65 | m_LightProbeVolumeOverride: {fileID: 0} 66 | m_ScaleInLightmap: 1 67 | m_PreserveUVs: 1 68 | m_IgnoreNormalsForChartDetection: 0 69 | m_ImportantGI: 0 70 | m_StitchLightmapSeams: 0 71 | m_SelectedEditorRenderState: 3 72 | m_MinimumChartSize: 4 73 | m_AutoUVMaxDistance: 0.5 74 | m_AutoUVMaxAngle: 89 75 | m_LightmapParameters: {fileID: 0} 76 | m_SortingLayerID: 0 77 | m_SortingLayer: 0 78 | m_SortingOrder: 0 79 | --- !u!33 &33621127327410374 80 | MeshFilter: 81 | m_ObjectHideFlags: 1 82 | m_PrefabParentObject: {fileID: 0} 83 | m_PrefabInternal: {fileID: 100100000} 84 | m_GameObject: {fileID: 1252715670555686} 85 | m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} 86 | --- !u!65 &65210267929361302 87 | BoxCollider: 88 | m_ObjectHideFlags: 1 89 | m_PrefabParentObject: {fileID: 0} 90 | m_PrefabInternal: {fileID: 100100000} 91 | m_GameObject: {fileID: 1252715670555686} 92 | m_Material: {fileID: 0} 93 | m_IsTrigger: 0 94 | m_Enabled: 1 95 | serializedVersion: 2 96 | m_Size: {x: 1, y: 1, z: 1} 97 | m_Center: {x: 0, y: 0, z: 0} 98 | -------------------------------------------------------------------------------- /Assets/GeoPainter/Prefabs/paintObject.prefab.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 1ce7800e95cd265469b9eba312c32a5b 3 | timeCreated: 1531428899 4 | licenseType: Free 5 | NativeFormatImporter: 6 | externalObjects: {} 7 | mainObjectFileID: 100100000 8 | userData: 9 | assetBundleName: 10 | assetBundleVariant: 11 | -------------------------------------------------------------------------------- /Assets/GeoPainter/Scripts.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 448841b3a0e47894db98bf9ae6944df9 3 | folderAsset: yes 4 | timeCreated: 1530755490 5 | licenseType: Free 6 | DefaultImporter: 7 | externalObjects: {} 8 | userData: 9 | assetBundleName: 10 | assetBundleVariant: 11 | -------------------------------------------------------------------------------- /Assets/GeoPainter/Scripts/Editor.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 198720399eb4c2f4ba4e951d0884abf5 3 | folderAsset: yes 4 | timeCreated: 1530755490 5 | licenseType: Free 6 | DefaultImporter: 7 | externalObjects: {} 8 | userData: 9 | assetBundleName: 10 | assetBundleVariant: 11 | -------------------------------------------------------------------------------- /Assets/GeoPainter/Scripts/Editor/GeoPainterEditor.js: -------------------------------------------------------------------------------- 1 | @CustomEditor(GeoPainter) 2 | class GeoPainterEditor extends Editor { 3 | 4 | static var appTitle = "Geo Painter Tools"; 5 | private var isPainting = false; 6 | private var myGroups:Array ; 7 | private var myLibrary:Array; 8 | private var myObjToInstArray : Array; 9 | 10 | private var showGroups : boolean = true; 11 | private var showPaint : boolean = true; 12 | private var showBiblio : boolean = true; 13 | private var showRandom: boolean = true; 14 | private var drawDebug: boolean = true; 15 | private var currentGroup; 16 | private var currentGroupScript; 17 | private var copyFromIndex = 0; 18 | private var myCopyFromPop: Array = new Array(); 19 | //private var tmpMinSlopeVal: float = 5; 20 | //private var minSlopeLimit: float = 0; 21 | //private var tmpMaxSlopeVal: float = 15; 22 | //private var maxSlopeLimit: float = 90; 23 | //private var minAltitudeVal: float = -2000; 24 | //private var minAltitudeLimit: float = -10000; 25 | //private var maxAltitudeVal: float = 2000; 26 | //private var maxAltitudeLimit: float = 10000; 27 | 28 | 29 | 30 | //******************************************************************************************** 31 | //*** OnInspectorGUI 32 | //******************************************************************************************** 33 | function OnInspectorGUI () 34 | { 35 | //Check if an object has been deleted 36 | if(currentGroupScript != null && currentGroupScript.myPointsList.Count != 0) 37 | { 38 | for(var i=currentGroupScript.myPointsList.Count-1;i>=0;i--) 39 | { 40 | 41 | var element = currentGroupScript.myPointsList[i]; 42 | 43 | if(element.go == null) 44 | { 45 | currentGroupScript.myPointsList.RemoveAt(i); 46 | } 47 | } 48 | } 49 | 50 | // myGroups = target.myGroups; 51 | //GROUPS 52 | //myStyleBoldText.fontStyle = FontStyle.Bold; 53 | 54 | 55 | if(myGroups == null) 56 | { 57 | myGroups = new Array(); 58 | for( obj in target.myGroupsBuiltIn) 59 | { 60 | if(obj != null) 61 | { 62 | myGroups.Add(obj); 63 | } 64 | } 65 | 66 | 67 | 68 | target.groupSelIndex = 1; 69 | 70 | } 71 | 72 | 73 | showGroups = EditorGUILayout.Foldout(showGroups, "GROUPS", EditorStyles.boldLabel); 74 | drawDebug = EditorGUILayout.Toggle("Draw debug slope and altitude?", drawDebug); 75 | if(showGroups && !isPainting) 76 | { 77 | 78 | //Add / Remove Groups 79 | EditorGUILayout.Space(); 80 | EditorGUILayout.BeginHorizontal(); 81 | //EditorGUILayout.LabelField("Add",""); 82 | 83 | if(GUILayout.Button ("+")) { 84 | addGroup(); 85 | target.myGroupsBuiltIn = myGroups.ToBuiltin(GameObject); 86 | } 87 | 88 | EditorGUILayout.EndHorizontal(); 89 | EditorGUILayout.Space(); 90 | if(myGroups.length > 0) 91 | { 92 | 93 | //Groups Display 94 | var nbrTemp = 1; 95 | for(var obj in myGroups) 96 | { 97 | 98 | var myLabel = "" + nbrTemp + ": "; 99 | EditorGUILayout.BeginHorizontal(); 100 | if(nbrTemp == target.groupSelIndex) 101 | { 102 | obj.name = EditorGUILayout.TextField(myLabel + " (EDIT)",obj.name); 103 | } else 104 | { 105 | obj.name = EditorGUILayout.TextField(myLabel + " ",obj.name); 106 | } 107 | if(GUILayout.Button ("EDIT",GUILayout.Width(100))) { 108 | target.groupSelIndex = nbrTemp; 109 | currentGroup = myGroups[nbrTemp-1]; 110 | currentGroupScript = currentGroup.GetComponent("GeoPainterGroup"); 111 | myLibrary = new Array(currentGroupScript.myLibraryBuiltIn); 112 | var position = currentGroup.transform.position; 113 | SceneView.lastActiveSceneView.pivot = position; 114 | SceneView.lastActiveSceneView.Repaint(); 115 | } 116 | //if (EditorGUILayout.TextField.isFocused) { 117 | // target.groupSelIndex = nbrTemp; 118 | // currentGroup = myGroups[nbrTemp - 1]; 119 | // currentGroupScript = currentGroup.GetComponent("GeoPainterGroup"); 120 | // myLibrary = new Array(currentGroupScript.myLibraryBuiltIn); 121 | // var position = currentGroup.transform.position; 122 | // SceneView.lastActiveSceneView.pivot = position; 123 | // SceneView.lastActiveSceneView.Repaint(); 124 | //} 125 | if(GUILayout.Button ("REMOVE",GUILayout.Width(100))) { 126 | removeGroup(nbrTemp,false); 127 | target.myGroupsBuiltIn = myGroups.ToBuiltin(GameObject); 128 | } 129 | if(GUILayout.Button ("RELEASE",GUILayout.Width(100))) { 130 | 131 | target.groupSelIndex = nbrTemp; 132 | currentGroup = myGroups[nbrTemp-1]; 133 | currentGroupScript = currentGroup.GetComponent("GeoPainterGroup"); 134 | myLibrary = new Array(currentGroupScript.myLibraryBuiltIn); 135 | position = currentGroup.transform.position; 136 | SceneView.lastActiveSceneView.pivot = position; 137 | SceneView.lastActiveSceneView.Repaint(); 138 | 139 | updatePrefab(true); 140 | removeGroup(nbrTemp,true); 141 | target.myGroupsBuiltIn = myGroups.ToBuiltin(GameObject); 142 | } 143 | EditorGUILayout.EndHorizontal(); 144 | nbrTemp++; 145 | 146 | } 147 | 148 | 149 | } 150 | } 151 | 152 | //PANELS 153 | if(myGroups.length > 0) 154 | { 155 | 156 | currentGroup = myGroups[target.groupSelIndex-1]; 157 | currentGroupScript = currentGroup.GetComponent("GeoPainterGroup"); 158 | 159 | 160 | //BIBLIO 161 | 162 | if(myLibrary == null) 163 | { 164 | myLibrary = new Array(currentGroupScript.myLibraryBuiltIn); 165 | } 166 | 167 | EditorGUILayout.Space(); 168 | EditorGUILayout.Space(); 169 | EditorGUILayout.Space(); 170 | showBiblio = EditorGUILayout.Foldout(showBiblio, "LIBRARY",EditorStyles.boldLabel); 171 | if(showBiblio && !isPainting) 172 | { 173 | EditorGUILayout.Space(); 174 | EditorGUILayout.Space(); 175 | EditorGUILayout.Space(); 176 | /* 177 | //Method 178 | target.bibSortIndex = EditorGUILayout.Popup("Method: ", target.bibSortIndex, target.bibSortMethod); 179 | if(target.bibSortIndex == 1) { 180 | target.bibSoloSelect = EditorGUILayout.IntField("Selected Element:", target.bibSoloSelect); 181 | } 182 | 183 | EditorGUILayout.Space(); 184 | EditorGUILayout.Space(); 185 | */ 186 | //Elements 187 | var x : int = 0; 188 | if(GUILayout.Button ("ADD OBJECT")) { 189 | myLibrary.Add(null); 190 | currentGroupScript.myLibraryBuiltIn = myLibrary.ToBuiltin(GameObject); 191 | 192 | } 193 | 194 | for(x = 0; x < myLibrary.length; x++) { 195 | EditorGUILayout.BeginHorizontal(); 196 | EditorGUILayout.BeginVertical(); 197 | EditorGUILayout.LabelField("Object #"+x+" :"); 198 | // JO ENTER Percent chance field here. 199 | myLibrary[x] = EditorGUILayout.ObjectField(myLibrary[x], typeof (GameObject), false); 200 | //Probability 201 | //EditorGUILayout.BeginHorizontal(); 202 | //EditorGUILayout.PrefixLabel("Prabability "); 203 | //currentGroupScript.sprayRadius = EditorGUILayout.FloatField(currentGroupScript.sprayRadius); 204 | //if (currentGroupScript.sprayRadius <= 0) currentGroupScript.sprayRadius = 0; 205 | //EditorGUILayout.EndHorizontal(); 206 | 207 | if(GUILayout.Button ("REMOVE")) { 208 | myLibrary.RemoveAt(x); 209 | currentGroupScript.myLibraryBuiltIn = myLibrary.ToBuiltin(GameObject); 210 | break; 211 | } 212 | 213 | EditorGUILayout.EndVertical(); 214 | 215 | if(myLibrary[x] != null) 216 | { 217 | var previewTex; 218 | 219 | #if !UNITY_3_4 && !UNITY_3_5 220 | previewTex = AssetPreview.GetAssetPreview(myLibrary[x]); 221 | #else 222 | previewTex = EditorUtility.GetAssetPreview(myLibrary[x]); 223 | #endif 224 | GUILayout.Button( previewTex,GUILayout.Width(100),GUILayout.Height(100)); 225 | } 226 | 227 | EditorGUILayout.EndHorizontal(); 228 | GUILayout.Space(20); 229 | } 230 | if(GUI.changed) 231 | { 232 | currentGroupScript.myLibraryBuiltIn = myLibrary.ToBuiltin(GameObject); 233 | } 234 | GUI.changed = false; 235 | if(myLibrary.length != 0) 236 | { 237 | if(target.bibSoloSelect > (myLibrary.length-1)) 238 | target.bibSoloSelect = (myLibrary.length-1); 239 | } 240 | if(target.bibSoloSelect < 0) 241 | target.bibSoloSelect = 0; 242 | EditorGUILayout.Space(); 243 | if(GUILayout.Button("Update Prefabs",GUILayout.Height(30))) 244 | { 245 | updatePrefab(false); 246 | randomize(); 247 | } 248 | if (GUILayout.Button("Replace Prefab",GUILayout.Height(30))) 249 | { 250 | replacePrefab(); 251 | } 252 | }//End Biblio 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | //PAINT 263 | EditorGUILayout.Space(); 264 | EditorGUILayout.Space(); 265 | EditorGUILayout.Space(); 266 | showPaint = EditorGUILayout.Foldout(showPaint, "PAINT",EditorStyles.boldLabel); 267 | 268 | 269 | if(showPaint) 270 | { 271 | EditorGUILayout.Space(); 272 | EditorGUILayout.Space(); 273 | EditorGUILayout.Space(); 274 | target.paintLayer = EditorGUILayout.LayerField("Paint Layer:",target.paintLayer); 275 | EditorGUILayout.Space(); 276 | if(!isPainting) 277 | { 278 | 279 | if(GUILayout.Button("Start Painting",GUILayout.Height(40))) 280 | { 281 | target.rndAuto = false; 282 | myObjToInstArray = new Array(); 283 | isPainting = true; 284 | 285 | } 286 | } 287 | else 288 | { 289 | if(GUILayout.Button("Stop Painting (CTRL+Click) = Paint (SHIFT+Click) = Erase",GUILayout.Height(40))) 290 | { 291 | target.myGroupsBuiltIn = myGroups.ToBuiltin(GameObject); 292 | isPainting = false; 293 | 294 | } 295 | } 296 | 297 | if (GUILayout.Button("Clean Painting", GUILayout.Height(30)) && EditorUtility.DisplayDialog("Delete prefabs?", "Are you sure you want to delete all the prefabs that have been painted in the " + myGroups[target.groupSelIndex - 1].name + " group?", "Delete", "Do Not Delete")) 298 | { 299 | for(i=currentGroupScript.myPointsList.Count-1;i>=0;i--) 300 | { 301 | element = currentGroupScript.myPointsList[i]; 302 | DestroyImmediate(element.go); 303 | currentGroupScript.myPointsList.RemoveAt(i); 304 | } 305 | } 306 | //Distance Radius 307 | EditorGUILayout.BeginHorizontal(); 308 | EditorGUILayout.PrefixLabel("Distance Radius "); 309 | EditorGUILayout.PrefixLabel("(D, SHIFT+D): "); 310 | //JO currentGroupScript.distanceRadius 311 | currentGroupScript.distanceRadius = EditorGUILayout.FloatField(currentGroupScript.distanceRadius); 312 | if(currentGroupScript.distanceRadius <= 0) currentGroupScript.distanceRadius =0; 313 | EditorGUILayout.EndHorizontal(); 314 | 315 | //Spray Radius 316 | EditorGUILayout.BeginHorizontal(); 317 | EditorGUILayout.PrefixLabel("Spray Radius "); 318 | EditorGUILayout.PrefixLabel("(S, SHIFT+S): "); 319 | //JO currentGroupScript.sprayRadius 320 | currentGroupScript.sprayRadius = EditorGUILayout.FloatField(currentGroupScript.sprayRadius); 321 | if(currentGroupScript.sprayRadius <= 0) currentGroupScript.sprayRadius =0; 322 | EditorGUILayout.EndHorizontal(); 323 | //Delete Radius 324 | EditorGUILayout.BeginHorizontal(); 325 | EditorGUILayout.PrefixLabel("Delete Radius"); 326 | EditorGUILayout.PrefixLabel(" (C, SHIFT+C): "); 327 | //JO currentGroupScript.deleteRadius 328 | currentGroupScript.deleteRadius = EditorGUILayout.FloatField(currentGroupScript.deleteRadius); 329 | if(currentGroupScript.deleteRadius <= 0) currentGroupScript.deleteRadius =0; 330 | EditorGUILayout.EndHorizontal(); 331 | // Slope 332 | EditorGUILayout.Space(); 333 | EditorGUILayout.Space(); 334 | EditorGUILayout.LabelField("Slope Limits"); 335 | currentGroupScript.minSlopeVal = EditorGUILayout.FloatField("Minimum Slope Angle:", currentGroupScript.minSlopeVal); 336 | currentGroupScript.maxSlopeVal = EditorGUILayout.FloatField("Maximum Slope Angle:", currentGroupScript.maxSlopeVal); 337 | EditorGUILayout.Space(); 338 | EditorGUILayout.Space(); 339 | // Altitude 340 | EditorGUILayout.Space(); 341 | EditorGUILayout.Space(); 342 | EditorGUILayout.LabelField("Altitude Limits"); 343 | currentGroupScript.minAltitudeVal = EditorGUILayout.FloatField("Minimum Altitude Height:", currentGroupScript.minAltitudeVal); 344 | currentGroupScript.maxAltitudeVal = EditorGUILayout.FloatField("Maximum Altitude Height:", currentGroupScript.maxAltitudeVal); 345 | EditorGUILayout.Space(); 346 | EditorGUILayout.Space(); 347 | 348 | currentGroupScript.useNormal = EditorGUILayout.Toggle("Use Normal ?", currentGroupScript.useNormal); 349 | 350 | } 351 | //RandomSection 352 | EditorGUILayout.Space(); 353 | EditorGUILayout.Space(); 354 | EditorGUILayout.Space(); 355 | showRandom = EditorGUILayout.Foldout(showRandom, "RANDOMIZE",EditorStyles.boldLabel ); 356 | if(showRandom && !isPainting) 357 | { 358 | EditorGUILayout.Space(); 359 | EditorGUILayout.Space(); 360 | EditorGUILayout.Space(); 361 | currentGroupScript.rndSeed = EditorGUILayout.IntSlider("Seed: ", currentGroupScript.rndSeed, 1, 12600); 362 | 363 | //POSITION 364 | EditorGUILayout.Space(); 365 | GUILayout.Label("POSITION",EditorStyles.boldLabel); 366 | EditorGUILayout.Space(); 367 | 368 | EditorGUILayout.BeginHorizontal(); 369 | EditorGUILayout.BeginVertical(); 370 | EditorGUILayout.LabelField("","",GUILayout.Width(3)); 371 | EditorGUILayout.LabelField("x:","",GUILayout.Width(3)); 372 | EditorGUILayout.LabelField("y:","",GUILayout.Width(3)); 373 | EditorGUILayout.LabelField("z:","",GUILayout.Width(3)); 374 | EditorGUILayout.EndVertical(); 375 | 376 | EditorGUILayout.BeginVertical(); 377 | EditorGUILayout.LabelField("","Offset",GUILayout.Width(200)); 378 | currentGroupScript.offPosX = EditorGUILayout.FloatField("",currentGroupScript.offPosX,GUILayout.Width(200)); 379 | currentGroupScript.offPosY = EditorGUILayout.FloatField("",currentGroupScript.offPosY,GUILayout.Width(200)); 380 | currentGroupScript.offPosZ = EditorGUILayout.FloatField("",currentGroupScript.offPosZ,GUILayout.Width(200)); 381 | EditorGUILayout.EndVertical(); 382 | 383 | EditorGUILayout.BeginVertical(); 384 | EditorGUILayout.LabelField("","Random Min",GUILayout.Width(200)); 385 | currentGroupScript.rndPosMinX = EditorGUILayout.FloatField("",currentGroupScript.rndPosMinX,GUILayout.Width(200)); 386 | currentGroupScript.rndPosMinY = EditorGUILayout.FloatField("",currentGroupScript.rndPosMinY,GUILayout.Width(200)); 387 | currentGroupScript.rndPosMinZ = EditorGUILayout.FloatField("",currentGroupScript.rndPosMinZ,GUILayout.Width(200)); 388 | EditorGUILayout.EndVertical(); 389 | 390 | EditorGUILayout.BeginVertical(); 391 | EditorGUILayout.LabelField("","Random Max",GUILayout.Width(200)); 392 | currentGroupScript.rndPosMaxX = EditorGUILayout.FloatField("",currentGroupScript.rndPosMaxX,GUILayout.Width(200)); 393 | currentGroupScript.rndPosMaxY = EditorGUILayout.FloatField("",currentGroupScript.rndPosMaxY,GUILayout.Width(200)); 394 | currentGroupScript.rndPosMaxZ = EditorGUILayout.FloatField("",currentGroupScript.rndPosMaxZ,GUILayout.Width(200)); 395 | EditorGUILayout.EndVertical(); 396 | 397 | EditorGUILayout.EndHorizontal(); 398 | 399 | //ROTATION 400 | EditorGUILayout.Space(); 401 | GUILayout.Label("ROTATION",EditorStyles.boldLabel); 402 | EditorGUILayout.Space(); 403 | 404 | EditorGUILayout.BeginHorizontal(); 405 | EditorGUILayout.BeginVertical(); 406 | EditorGUILayout.LabelField("","",GUILayout.Width(3)); 407 | EditorGUILayout.LabelField("x:","",GUILayout.Width(3)); 408 | EditorGUILayout.LabelField("y:","",GUILayout.Width(3)); 409 | EditorGUILayout.LabelField("z:","",GUILayout.Width(3)); 410 | EditorGUILayout.EndVertical(); 411 | 412 | EditorGUILayout.BeginVertical(); 413 | EditorGUILayout.LabelField("","Offset",GUILayout.Width(200)); 414 | currentGroupScript.offRotX = EditorGUILayout.FloatField("",currentGroupScript.offRotX,GUILayout.Width(200)); 415 | currentGroupScript.offRotY = EditorGUILayout.FloatField("",currentGroupScript.offRotY,GUILayout.Width(200)); 416 | currentGroupScript.offRotZ = EditorGUILayout.FloatField("",currentGroupScript.offRotZ,GUILayout.Width(200)); 417 | EditorGUILayout.EndVertical(); 418 | 419 | EditorGUILayout.BeginVertical(); 420 | EditorGUILayout.LabelField("","Random Min",GUILayout.Width(200)); 421 | currentGroupScript.rndRotMinX = EditorGUILayout.FloatField("",currentGroupScript.rndRotMinX,GUILayout.Width(200)); 422 | currentGroupScript.rndRotMinY = EditorGUILayout.FloatField("",currentGroupScript.rndRotMinY,GUILayout.Width(200)); 423 | currentGroupScript.rndRotMinZ = EditorGUILayout.FloatField("",currentGroupScript.rndRotMinZ,GUILayout.Width(200)); 424 | EditorGUILayout.EndVertical(); 425 | 426 | EditorGUILayout.BeginVertical(); 427 | EditorGUILayout.LabelField("","Random Max",GUILayout.Width(200)); 428 | currentGroupScript.rndRotMaxX = EditorGUILayout.FloatField("",currentGroupScript.rndRotMaxX,GUILayout.Width(200)); 429 | currentGroupScript.rndRotMaxY = EditorGUILayout.FloatField("",currentGroupScript.rndRotMaxY,GUILayout.Width(200)); 430 | currentGroupScript.rndRotMaxZ = EditorGUILayout.FloatField("",currentGroupScript.rndRotMaxZ,GUILayout.Width(200)); 431 | EditorGUILayout.EndVertical(); 432 | 433 | EditorGUILayout.EndHorizontal(); 434 | 435 | 436 | //Scale 437 | 438 | EditorGUILayout.Space(); 439 | GUILayout.Label("SCALE",EditorStyles.boldLabel); 440 | EditorGUILayout.Space(); 441 | currentGroupScript.scaleUniform = EditorGUILayout.Toggle("Uniform:", currentGroupScript.scaleUniform ); 442 | 443 | if(!currentGroupScript.scaleUniform) 444 | { 445 | EditorGUILayout.BeginHorizontal(); 446 | EditorGUILayout.BeginVertical(); 447 | EditorGUILayout.LabelField("","",GUILayout.Width(3)); 448 | EditorGUILayout.LabelField("x:","",GUILayout.Width(3)); 449 | EditorGUILayout.LabelField("y:","",GUILayout.Width(3)); 450 | EditorGUILayout.LabelField("z:","",GUILayout.Width(3)); 451 | EditorGUILayout.EndVertical(); 452 | 453 | EditorGUILayout.BeginVertical(); 454 | EditorGUILayout.LabelField("","Offset",GUILayout.Width(200)); 455 | currentGroupScript.offSclX = EditorGUILayout.FloatField("",currentGroupScript.offSclX,GUILayout.Width(200)); 456 | currentGroupScript.offSclY = EditorGUILayout.FloatField("",currentGroupScript.offSclY,GUILayout.Width(200)); 457 | currentGroupScript.offSclZ = EditorGUILayout.FloatField("",currentGroupScript.offSclZ,GUILayout.Width(200)); 458 | EditorGUILayout.EndVertical(); 459 | 460 | EditorGUILayout.BeginVertical(); 461 | EditorGUILayout.LabelField("","Random Min",GUILayout.Width(200)); 462 | currentGroupScript.rndSclMinX = EditorGUILayout.FloatField("",currentGroupScript.rndSclMinX,GUILayout.Width(200)); 463 | currentGroupScript.rndSclMinY = EditorGUILayout.FloatField("",currentGroupScript.rndSclMinY,GUILayout.Width(200)); 464 | currentGroupScript.rndSclMinZ = EditorGUILayout.FloatField("",currentGroupScript.rndSclMinZ,GUILayout.Width(200)); 465 | EditorGUILayout.EndVertical(); 466 | 467 | EditorGUILayout.BeginVertical(); 468 | EditorGUILayout.LabelField("","Random Max",GUILayout.Width(200)); 469 | currentGroupScript.rndSclMaxX = EditorGUILayout.FloatField("",currentGroupScript.rndSclMaxX,GUILayout.Width(200)); 470 | currentGroupScript.rndSclMaxY = EditorGUILayout.FloatField("",currentGroupScript.rndSclMaxY,GUILayout.Width(200)); 471 | currentGroupScript.rndSclMaxZ = EditorGUILayout.FloatField("",currentGroupScript.rndSclMaxZ,GUILayout.Width(200)); 472 | EditorGUILayout.EndVertical(); 473 | 474 | EditorGUILayout.EndHorizontal(); 475 | } else 476 | { 477 | EditorGUILayout.BeginVertical(); 478 | EditorGUILayout.BeginHorizontal(); 479 | EditorGUILayout.LabelField("","",GUILayout.Width(30)); 480 | EditorGUILayout.LabelField("","Offset",GUILayout.Width(200)); 481 | EditorGUILayout.LabelField("","Random Min",GUILayout.Width(200)); 482 | EditorGUILayout.LabelField("","Random Max",GUILayout.Width(200)); 483 | EditorGUILayout.EndHorizontal(); 484 | 485 | EditorGUILayout.BeginHorizontal(); 486 | EditorGUILayout.LabelField("All:","",GUILayout.Width(30)); 487 | currentGroupScript.offSclX = EditorGUILayout.FloatField("",currentGroupScript.offSclX,GUILayout.Width(200)); 488 | currentGroupScript.rndSclMinX = EditorGUILayout.FloatField("",currentGroupScript.rndSclMinX,GUILayout.Width(200)); 489 | currentGroupScript.rndSclMaxX = EditorGUILayout.FloatField("",currentGroupScript.rndSclMaxX,GUILayout.Width(200)); 490 | 491 | 492 | EditorGUILayout.EndVertical(); 493 | EditorGUILayout.EndHorizontal(); 494 | } 495 | 496 | 497 | //AUTO 498 | EditorGUILayout.Space(); 499 | GUILayout.Label("UPDATE",EditorStyles.boldLabel); 500 | EditorGUILayout.Space(); 501 | target.rndAuto = GUILayout.Toggle(target.rndAuto,"Auto Update","button"); 502 | if(GUILayout.Button("Randomize",GUILayout.Height(30))) 503 | { 504 | randomize(); 505 | } 506 | 507 | if(GUI.changed && target.rndAuto) 508 | { 509 | randomize(); 510 | GUI.changed = false; 511 | } 512 | 513 | myCopyFromPop = new Array(); 514 | for(i=0;i0) 715 | { 716 | var randomCircle = Random.insideUnitCircle * currentGroupScript.sprayRadius; 717 | var rayDirection = (hit.point + Vector3(randomCircle.x,0,randomCircle.y)) - ray.origin; 718 | var newHit: RaycastHit; 719 | if (Physics.Raycast (ray.origin, rayDirection, newHit, Mathf.Infinity, layerMask)) 720 | { 721 | hit = newHit; 722 | } 723 | } 724 | 725 | //Check Distance 726 | if(currentGroup.transform.childCount != 0){ 727 | for(obj in myObjToInstArray)//currentGroup.transform) 728 | { 729 | var tempDist = Vector3.Distance(hit.point, obj.transform.position); 730 | if(tempDist < dist) 731 | dist = tempDist; 732 | } 733 | } 734 | 735 | // See if we are inside of a mask zone. 736 | // Find all game objects with tag paintMask 737 | var objectsArray: GameObject[]; 738 | objectMask = false; 739 | objectsArray = GameObject.FindGameObjectsWithTag("paintMask"); 740 | // Iterate through all objects and check for isInside 741 | for (var go: GameObject in objectsArray) { 742 | if (go.GetComponent(Collider)) { 743 | if (CheckIsInside(go.GetComponent(Collider), hit.point)) { 744 | objectMask = true; 745 | //EditorUtility.DisplayDialog("Hit a prefab painting mask!", "It looks like we hit an object with the tag paintMask", "Continue", "You have to continue"); 746 | } 747 | } 748 | } 749 | 750 | var angle: float; 751 | angle = Vector3.Angle(hit.normal, Vector3(0, 1, 0)); 752 | 753 | var hitHeight: float; 754 | hitHeight = hit.point.y; 755 | //Debug.Log("Height is: " + hitHeight); 756 | //Debug.Log("Angle is: " + angle); 757 | 758 | // JO Added check for slop angle and altitude 759 | if (dist >= currentGroupScript.distanceRadius && angle <= currentGroupScript.maxSlopeVal && angle >= currentGroupScript.minSlopeVal && hitHeight >= currentGroupScript.minAltitudeVal && hitHeight <= currentGroupScript.maxAltitudeVal && !objectMask) 760 | { 761 | //Biblio Method 762 | if(target.bibSortIndex == 0) 763 | { 764 | //Random 765 | // JO Here is where you would pick an item based on the random probability of each 766 | var myRandom = Random.Range(0, currentGroupScript.myLibraryBuiltIn.length); 767 | objToInst = currentGroupScript.myLibraryBuiltIn[parseInt(myRandom)]; 768 | } 769 | if(target.bibSortIndex == 1) 770 | { 771 | objToInst = currentGroupScript.myLibraryBuiltIn[target.bibSoloSelect]; 772 | } 773 | 774 | //Check is we're using normal placement 775 | myRot = Quaternion.identity; 776 | if(currentGroupScript.useNormal) 777 | { 778 | //myRot = Quaternion.LookRotation(hit.normal); 779 | myRot = Quaternion.FromToRotation(objToInst.transform.up, hit.normal) * objToInst.transform.rotation; 780 | } 781 | Undo.RegisterSceneUndo("GeoPainter Paint Add"); 782 | //Create the Object 783 | //newObj = EditorUtility.InstantiatePrefab(objToInst); 784 | newObj = PrefabUtility.InstantiatePrefab(objToInst); 785 | newObj.transform.position = hit.point; 786 | newObj.transform.rotation = myRot; 787 | myObjToInstArray.Add(newObj); 788 | 789 | //Update Points Array 790 | currentGroupScript.addObject(newObj,hit.point,newObj.transform.localScale,hit.normal,currentGroupScript.useNormal); 791 | 792 | //Update Position Pivot 793 | if(currentGroup.transform.childCount == 0) 794 | { 795 | currentGroup.transform.position = newObj.transform.position; 796 | newObj.transform.parent = currentGroup.transform; 797 | } else { 798 | newObj.transform.parent = currentGroup.transform; 799 | } 800 | randomizeSolo(currentGroupScript.myPointsList[currentGroupScript.myPointsList.Count-1]); 801 | //EditorUtility.ReconnectToLastPrefab(newObj); 802 | 803 | 804 | } 805 | } 806 | 807 | } 808 | 809 | //******************************************************************************************** 810 | //*** Paint Remove 811 | //******************************************************************************************** 812 | function paintRemove() 813 | { 814 | Undo.RegisterSceneUndo("GeoPainter Paint Remove"); 815 | var hit : RaycastHit; 816 | var ray = HandleUtility.GUIPointToWorldRay(Event.current.mousePosition); 817 | 818 | if (Physics.Raycast (ray.origin, ray.direction, hit, Mathf.Infinity)) 819 | { 820 | /* 821 | //currentGroup 822 | if(hit.transform.IsChildOf(currentGroup.transform)) 823 | { 824 | DestroyImmediate(hit.collider.gameObject); 825 | } 826 | */ 827 | for(i=0;i(); 851 | myGroups.Add(go); 852 | target.groupSelIndex = myGroups.length; 853 | currentGroup = myGroups[target.groupSelIndex-1]; 854 | currentGroupScript = currentGroup.GetComponent("GeoPainterGroup"); 855 | myLibrary = new Array(currentGroupScript.myLibraryBuiltIn); 856 | } 857 | 858 | //******************************************************************************************** 859 | //*** Remove a group 860 | //******************************************************************************************** 861 | function removeGroup(_index,_release) 862 | { 863 | Undo.RegisterSceneUndo("Remove Group"); 864 | var index = (_index -1); 865 | 866 | if(_release == false) 867 | { 868 | var go = myGroups[index]; 869 | DestroyImmediate(go); 870 | } 871 | 872 | myGroups.RemoveAt(index); 873 | target.groupSelIndex = myGroups.length; 874 | if(myGroups.length != 0) 875 | { 876 | currentGroup = myGroups[target.groupSelIndex-1]; 877 | currentGroupScript = currentGroup.GetComponent("GeoPainterGroup"); 878 | myLibrary = new Array(currentGroupScript.myLibraryBuiltIn); 879 | } else 880 | { 881 | addGroup(); 882 | } 883 | 884 | } 885 | 886 | //******************************************************************************************** 887 | //*** HANDLES 888 | //******************************************************************************************** 889 | function drawHandles() 890 | { 891 | var hit : RaycastHit; 892 | var ray = HandleUtility.GUIPointToWorldRay(Event.current.mousePosition); 893 | var layerMask = 1 << target.paintLayer; 894 | if (Physics.Raycast (ray.origin, ray.direction, hit, Mathf.Infinity, layerMask)) 895 | { 896 | if(currentGroupScript.sprayRadius != 0) 897 | { 898 | Handles.color = Color.green; 899 | Handles.CircleHandleCap(1, hit.point, Quaternion.LookRotation(hit.normal), currentGroupScript.sprayRadius, EventType.Repaint); 900 | } 901 | if(currentGroupScript.distanceRadius != 0) 902 | { 903 | Handles.color = Color.blue; 904 | Handles.CircleHandleCap(0, hit.point, Quaternion.LookRotation(hit.normal), currentGroupScript.distanceRadius, EventType.Repaint); 905 | } 906 | if(currentGroupScript.deleteRadius != 0) 907 | { 908 | Handles.color = Color.red; 909 | Handles.CircleHandleCap(0, hit.point, Quaternion.LookRotation(hit.normal), currentGroupScript.deleteRadius, EventType.Repaint); 910 | } 911 | // Draw debug info. 912 | var e = Event.current; 913 | var p: Vector3 = new Vector3(); 914 | var c: Camera = UnityEditor.SceneView.lastActiveSceneView.camera; 915 | var mousePos: Vector2 = new Vector2(); 916 | myStyle = new GUIStyle(); 917 | myStyle.normal.textColor = Color.black; 918 | myStyle.fontSize = 20; 919 | if (e.capsLock && drawDebug) { 920 | // Note that the y position from Event is inverted. 921 | mousePos.x = e.mousePosition.x + currentGroupScript.deleteRadius; 922 | mousePos.y = c.pixelHeight - e.mousePosition.y + currentGroupScript.deleteRadius; 923 | p = c.ScreenToWorldPoint(new Vector3(mousePos.x, mousePos.y, c.nearClipPlane)); 924 | //Handles.Label(p, "Angle: " + Vector3.Angle(hit.normal, Vector3(0, 1, 0)) + " Altitude: " + hit.point.y + " Hit.point: " + hit.point + " Camera Rotation: " + SceneView.lastActiveSceneView.rotation.eulerAngles); 925 | Handles.Label(p, "Ang: " + Vector3.Angle(hit.normal, Vector3(0, 1, 0)).ToString("0.0"), myStyle); 926 | mousePos.x = e.mousePosition.x + currentGroupScript.deleteRadius; 927 | mousePos.y = c.pixelHeight - e.mousePosition.y + currentGroupScript.deleteRadius + 25; 928 | p = c.ScreenToWorldPoint(new Vector3(mousePos.x, mousePos.y, c.nearClipPlane)); 929 | Handles.Label(p, "Alt: " + hit.point.y.ToString("0.0"), myStyle); 930 | } 931 | if (e.control && drawDebug) { 932 | // Note that the y position from Event is inverted. 933 | mousePos.x = e.mousePosition.x + currentGroupScript.deleteRadius; 934 | mousePos.y = c.pixelHeight - e.mousePosition.y + currentGroupScript.deleteRadius; 935 | p = c.ScreenToWorldPoint(new Vector3(mousePos.x, mousePos.y, c.nearClipPlane)); 936 | Handles.Label(p, "Paint mode", myStyle); 937 | } 938 | if (e.shift && drawDebug) { 939 | // Note that the y position from Event is inverted. 940 | mousePos.x = e.mousePosition.x + currentGroupScript.deleteRadius; 941 | mousePos.y = c.pixelHeight - e.mousePosition.y + currentGroupScript.deleteRadius; 942 | p = c.ScreenToWorldPoint(new Vector3(mousePos.x, mousePos.y, c.nearClipPlane)); 943 | Handles.Label(p, "Clean mode", myStyle); 944 | } 945 | } 946 | } 947 | 948 | //******************************************************************************************** 949 | //*** ON SCENE GUI 950 | //******************************************************************************************** 951 | function OnSceneGUI () 952 | { 953 | 954 | 955 | var ctrlID = GUIUtility.GetControlID (appTitle.GetHashCode (), FocusType.Passive); 956 | if(isPainting) 957 | { 958 | 959 | 960 | var e = Event.current; 961 | //Handles 962 | drawHandles(); 963 | if(e.keyCode == KeyCode.D && !e.shift) { 964 | currentGroupScript.distanceRadius += 0.01 ; 965 | Repaint(); 966 | HandleUtility.Repaint(); 967 | } 968 | if (e.keyCode == KeyCode.D && e.shift){ 969 | currentGroupScript.distanceRadius -= 0.01; 970 | if(currentGroupScript.distanceRadius <=0) 971 | currentGroupScript.distanceRadius = 0; 972 | Repaint(); 973 | HandleUtility.Repaint(); 974 | } 975 | if(e.keyCode == KeyCode.S && !e.shift) { 976 | currentGroupScript.sprayRadius += 0.01 ; 977 | Repaint(); 978 | HandleUtility.Repaint(); 979 | } 980 | if (e.keyCode == KeyCode.S && e.shift){ 981 | currentGroupScript.sprayRadius -= 0.01; 982 | if(currentGroupScript.sprayRadius <=0) 983 | currentGroupScript.sprayRadius = 0; 984 | Repaint(); 985 | HandleUtility.Repaint(); 986 | } 987 | if(e.keyCode == KeyCode.C && !e.shift) { 988 | currentGroupScript.deleteRadius += 0.01 ; 989 | Repaint(); 990 | HandleUtility.Repaint(); 991 | } 992 | if (e.keyCode == KeyCode.C && e.shift){ 993 | currentGroupScript.deleteRadius -= 0.01; 994 | if(currentGroupScript.deleteRadius <=0) 995 | currentGroupScript.deleteRadius = 0; 996 | Repaint(); 997 | HandleUtility.Repaint(); 998 | } 999 | 1000 | //Mouse Event 1001 | switch (e.type) 1002 | { 1003 | case EventType.MouseDrag: 1004 | if (e.control) { 1005 | paint(); 1006 | e.Use(); 1007 | } 1008 | else if(e.shift) 1009 | { 1010 | paintRemove(); 1011 | e.Use(); 1012 | } 1013 | break; 1014 | case EventType.MouseUp: 1015 | if (e.control) { 1016 | paint(); 1017 | // Undo.RegisterUndo(myObjToInstArray.ToBuiltin(GameObject),"New Paint Object"); 1018 | myObjToInstArray = new Array(); 1019 | e.Use(); 1020 | } 1021 | else if(e.shift) 1022 | { 1023 | paintRemove(); 1024 | e.Use(); 1025 | } 1026 | break; 1027 | case EventType.Layout: 1028 | HandleUtility.AddDefaultControl (ctrlID); 1029 | break; 1030 | case EventType.MouseMove: 1031 | HandleUtility.Repaint(); 1032 | break; 1033 | //if(Event.current.type == EventType.MouseDown && Event.current.button == 0) 1034 | } 1035 | } 1036 | 1037 | } 1038 | //******************************************************************************************** 1039 | //*** Menu Item 1040 | //******************************************************************************************** 1041 | @MenuItem ("GameObject/Add GeoPainter") 1042 | static function CreateMenu () { 1043 | // Get existing open window or if none, make a new one: 1044 | if(!GameObject.Find("GeoPainterSys")) 1045 | { 1046 | go = new GameObject ("GeoPainterSys"); 1047 | go.AddComponent.(); 1048 | Selection.activeGameObject = go; 1049 | 1050 | 1051 | } 1052 | } 1053 | 1054 | //******************************************************************************************** 1055 | //*** Test if hit point is inside of an object. Only works for convex objects. 1056 | //******************************************************************************************** 1057 | static public function CheckIsInside(maskingObject: Collider, point: Vector3): boolean 1058 | { 1059 | var center: Vector3; 1060 | var direction: Vector3; 1061 | var ray: Ray; 1062 | var hitInfo: RaycastHit; 1063 | var hit : boolean; 1064 | 1065 | // Use collider bounds to get the center of the collider. May be inaccurate 1066 | // for some colliders (i.e. MeshCollider with a 'plane' mesh) 1067 | center = maskingObject.bounds.center; 1068 | 1069 | // Cast a ray from point to center 1070 | direction = center - point; 1071 | ray = new Ray(point, direction); 1072 | hit = maskingObject.Raycast(ray, hitInfo, direction.magnitude); 1073 | //hit = Physics.Raycast(point, direction, Mathf.Infinity); 1074 | 1075 | // If we hit the collider, point is outside. So we return !hit 1076 | //Debug.Log("Collision is: " + hit); 1077 | return !hit; 1078 | } 1079 | 1080 | } -------------------------------------------------------------------------------- /Assets/GeoPainter/Scripts/Editor/GeoPainterEditor.js.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f1fbadf190e54084dabb653af1be1c65 3 | timeCreated: 18446744011573954816 4 | MonoImporter: 5 | externalObjects: {} 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Assets/GeoPainter/Scripts/GeoPainter.js: -------------------------------------------------------------------------------- 1 | class GeoPainter extends MonoBehaviour 2 | { 3 | var paintLayer : int = 0; 4 | var myGroups : Array = new Array(); 5 | var myGroupsBuiltIn : GameObject[]; 6 | var nbrGroupsCreated : int; 7 | var myDistance : float = 0.5; 8 | var mySpray : float = 1; 9 | var myDelete : float = 2; 10 | var useNormal : boolean = true; 11 | var groupSelIndex : int = 1; 12 | 13 | 14 | 15 | 16 | 17 | var bibSortMethod : String[] = ["Random", "Solo"]; 18 | var bibSortIndex = 0; 19 | var bibSoloSelect = 0; 20 | 21 | var rndAuto = false; 22 | 23 | 24 | } 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /Assets/GeoPainter/Scripts/GeoPainter.js.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0addf81fe17020740b0ec3413391e47a 3 | timeCreated: 18446744011573954816 4 | MonoImporter: 5 | externalObjects: {} 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Assets/GeoPainter/Scripts/GeoPainterGroup.js: -------------------------------------------------------------------------------- 1 | import System.Collections.Generic; 2 | class GeoPainterGroup extends MonoBehaviour 3 | { 4 | var myLibraryBuiltIn : GameObject[] ; 5 | var rndSeed : int = 1; 6 | 7 | @SerializeField 8 | var myPointsList : List. = new List.(); 9 | 10 | //Brush Rules 11 | var distanceRadius : float = 0.5; 12 | var sprayRadius : float = 1; 13 | var deleteRadius : float = 2; 14 | var minSlopeVal : float = 0; 15 | var maxSlopeVal : float = 90; 16 | var minAltitudeVal : float = -10000; 17 | var maxAltitudeVal : float = 10000; 18 | var useNormal : boolean = true; 19 | 20 | //Position 21 | var offPosX : float = 0.0; 22 | var offPosY : float = 0.0; 23 | var offPosZ : float = 0.0; 24 | var rndPosMinX : float = 0.0; 25 | var rndPosMinY : float = 0.0; 26 | var rndPosMinZ : float = 0.0; 27 | var rndPosMaxX : float = 0.0; 28 | var rndPosMaxY : float = 0.0; 29 | var rndPosMaxZ : float = 0.0; 30 | 31 | //Rotation 32 | var offRotX : float = 0.0; 33 | var offRotY : float = 0.0; 34 | var offRotZ : float = 0.0; 35 | var rndRotMinX : float = 0.0; 36 | var rndRotMinY : float = 0.0; 37 | var rndRotMinZ : float = 0.0; 38 | var rndRotMaxX : float = 0.0; 39 | var rndRotMaxY : float = 0.0; 40 | var rndRotMaxZ : float = 0.0; 41 | 42 | //Scale 43 | var scaleUniform = false; 44 | var offSclX : float = 0.0; 45 | var offSclY : float = 0.0; 46 | var offSclZ : float = 0.0; 47 | var rndSclMinX : float = 0.0; 48 | var rndSclMinY : float = 0.0; 49 | var rndSclMinZ : float = 0.0; 50 | var rndSclMaxX : float = 0.0; 51 | var rndSclMaxY : float = 0.0; 52 | var rndSclMaxZ : float = 0.0; 53 | 54 | 55 | function addObject(_go : GameObject, _pos : Vector3, _scale : Vector3, _normal : Vector3, _useNormal : boolean) 56 | { 57 | var myNewPoint : GeoPainterPoint = new GeoPainterPoint(); 58 | myNewPoint.go = _go; 59 | myNewPoint.pos = _pos; 60 | myNewPoint.scale = _scale; 61 | myNewPoint.normal = _normal; 62 | myNewPoint.useNormal = _useNormal; 63 | myPointsList.Add(myNewPoint); 64 | } 65 | 66 | 67 | } -------------------------------------------------------------------------------- /Assets/GeoPainter/Scripts/GeoPainterGroup.js.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f03397cb266760a4296c27ed450b9975 3 | timeCreated: 18446744011573954816 4 | MonoImporter: 5 | externalObjects: {} 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Assets/GeoPainter/Scripts/GeoPainterObject.js: -------------------------------------------------------------------------------- 1 | class GeoPainterObject extends System.Object 2 | { 3 | //public var probability: string; 4 | public var rareItem : boolean; 5 | 6 | } -------------------------------------------------------------------------------- /Assets/GeoPainter/Scripts/GeoPainterObject.js.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c8067ec290fe3e944930a33e8da28af4 3 | timeCreated: 18446744011573954816 4 | MonoImporter: 5 | externalObjects: {} 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Assets/GeoPainter/Scripts/GeoPainterPoint.js: -------------------------------------------------------------------------------- 1 | class GeoPainterPoint extends System.Object 2 | { 3 | public var go : GameObject; 4 | public var pos : Vector3; 5 | public var scale : Vector3; 6 | public var normal : Vector3; 7 | public var useNormal : boolean; 8 | 9 | } -------------------------------------------------------------------------------- /Assets/GeoPainter/Scripts/GeoPainterPoint.js.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0d8b2c6954c74ef4d851c680863d2dd5 3 | timeCreated: 18446744011573954816 4 | MonoImporter: 5 | externalObjects: {} 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Assets/GeoPainter/readme.txt: -------------------------------------------------------------------------------- 1 | Youtube Tutorial: 2 | 3 | http://www.youtube.com/watch?v=pUBOQrjxHjk 4 | 5 | Forum Post: 6 | 7 | http://forum.unity3d.com/threads/114153-Geo-Painter-(Scatter-Tool)-Soon?p=759062#post759062 8 | 9 | FeedBacks: 10 | 11 | r.ziboo@gmail.com -------------------------------------------------------------------------------- /Assets/GeoPainter/readme.txt.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9da641ac913cfe341ae6642068903e67 3 | timeCreated: 18446744011573954816 4 | TextScriptImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/GeoPainterCommunity_TestLevel.unity: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!29 &1 4 | OcclusionCullingSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_OcclusionBakeSettings: 8 | smallestOccluder: 5 9 | smallestHole: 0.25 10 | backfaceThreshold: 100 11 | m_SceneGUID: 00000000000000000000000000000000 12 | m_OcclusionCullingData: {fileID: 0} 13 | --- !u!104 &2 14 | RenderSettings: 15 | m_ObjectHideFlags: 0 16 | serializedVersion: 8 17 | m_Fog: 0 18 | m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} 19 | m_FogMode: 3 20 | m_FogDensity: 0.01 21 | m_LinearFogStart: 0 22 | m_LinearFogEnd: 300 23 | m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} 24 | m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} 25 | m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} 26 | m_AmbientIntensity: 1 27 | m_AmbientMode: 0 28 | m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} 29 | m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} 30 | m_HaloStrength: 0.5 31 | m_FlareStrength: 1 32 | m_FlareFadeSpeed: 3 33 | m_HaloTexture: {fileID: 0} 34 | m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} 35 | m_DefaultReflectionMode: 0 36 | m_DefaultReflectionResolution: 128 37 | m_ReflectionBounces: 1 38 | m_ReflectionIntensity: 1 39 | m_CustomReflection: {fileID: 0} 40 | m_Sun: {fileID: 0} 41 | m_IndirectSpecularColor: {r: 0.44657898, g: 0.4964133, b: 0.5748178, a: 1} 42 | --- !u!157 &3 43 | LightmapSettings: 44 | m_ObjectHideFlags: 0 45 | serializedVersion: 11 46 | m_GIWorkflowMode: 0 47 | m_GISettings: 48 | serializedVersion: 2 49 | m_BounceScale: 1 50 | m_IndirectOutputScale: 1 51 | m_AlbedoBoost: 1 52 | m_TemporalCoherenceThreshold: 1 53 | m_EnvironmentLightingMode: 0 54 | m_EnableBakedLightmaps: 1 55 | m_EnableRealtimeLightmaps: 1 56 | m_LightmapEditorSettings: 57 | serializedVersion: 9 58 | m_Resolution: 2 59 | m_BakeResolution: 40 60 | m_TextureWidth: 1024 61 | m_TextureHeight: 1024 62 | m_AO: 0 63 | m_AOMaxDistance: 1 64 | m_CompAOExponent: 1 65 | m_CompAOExponentDirect: 0 66 | m_Padding: 2 67 | m_LightmapParameters: {fileID: 0} 68 | m_LightmapsBakeMode: 1 69 | m_TextureCompression: 1 70 | m_FinalGather: 0 71 | m_FinalGatherFiltering: 1 72 | m_FinalGatherRayCount: 256 73 | m_ReflectionCompression: 2 74 | m_MixedBakeMode: 2 75 | m_BakeBackend: 0 76 | m_PVRSampling: 1 77 | m_PVRDirectSampleCount: 32 78 | m_PVRSampleCount: 500 79 | m_PVRBounces: 2 80 | m_PVRFilterTypeDirect: 0 81 | m_PVRFilterTypeIndirect: 0 82 | m_PVRFilterTypeAO: 0 83 | m_PVRFilteringMode: 1 84 | m_PVRCulling: 1 85 | m_PVRFilteringGaussRadiusDirect: 1 86 | m_PVRFilteringGaussRadiusIndirect: 5 87 | m_PVRFilteringGaussRadiusAO: 2 88 | m_PVRFilteringAtrousPositionSigmaDirect: 0.5 89 | m_PVRFilteringAtrousPositionSigmaIndirect: 2 90 | m_PVRFilteringAtrousPositionSigmaAO: 1 91 | m_ShowResolutionOverlay: 1 92 | m_LightingDataAsset: {fileID: 0} 93 | m_UseShadowmask: 1 94 | --- !u!196 &4 95 | NavMeshSettings: 96 | serializedVersion: 2 97 | m_ObjectHideFlags: 0 98 | m_BuildSettings: 99 | serializedVersion: 2 100 | agentTypeID: 0 101 | agentRadius: 0.5 102 | agentHeight: 2 103 | agentSlope: 45 104 | agentClimb: 0.4 105 | ledgeDropHeight: 0 106 | maxJumpAcrossDistance: 0 107 | minRegionArea: 2 108 | manualCellSize: 0 109 | cellSize: 0.16666667 110 | manualTileSize: 0 111 | tileSize: 256 112 | accuratePlacement: 0 113 | debug: 114 | m_Flags: 0 115 | m_NavMeshData: {fileID: 0} 116 | --- !u!1 &28612257 117 | GameObject: 118 | m_ObjectHideFlags: 0 119 | m_PrefabParentObject: {fileID: 0} 120 | m_PrefabInternal: {fileID: 0} 121 | serializedVersion: 5 122 | m_Component: 123 | - component: {fileID: 28612258} 124 | - component: {fileID: 28612261} 125 | - component: {fileID: 28612260} 126 | - component: {fileID: 28612259} 127 | m_Layer: 0 128 | m_Name: Cube 129 | m_TagString: Untagged 130 | m_Icon: {fileID: 0} 131 | m_NavMeshLayer: 0 132 | m_StaticEditorFlags: 0 133 | m_IsActive: 1 134 | --- !u!4 &28612258 135 | Transform: 136 | m_ObjectHideFlags: 0 137 | m_PrefabParentObject: {fileID: 0} 138 | m_PrefabInternal: {fileID: 0} 139 | m_GameObject: {fileID: 28612257} 140 | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} 141 | m_LocalPosition: {x: -1284.1947, y: 28.39, z: -1142.3732} 142 | m_LocalScale: {x: 10.812503, y: 10.812503, z: 10.812503} 143 | m_Children: [] 144 | m_Father: {fileID: 1083142296} 145 | m_RootOrder: 1 146 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 147 | --- !u!23 &28612259 148 | MeshRenderer: 149 | m_ObjectHideFlags: 0 150 | m_PrefabParentObject: {fileID: 0} 151 | m_PrefabInternal: {fileID: 0} 152 | m_GameObject: {fileID: 28612257} 153 | m_Enabled: 1 154 | m_CastShadows: 1 155 | m_ReceiveShadows: 1 156 | m_DynamicOccludee: 1 157 | m_MotionVectors: 1 158 | m_LightProbeUsage: 1 159 | m_ReflectionProbeUsage: 1 160 | m_Materials: 161 | - {fileID: 2100000, guid: 2a31ab38fcfbec9459c885956c0cccef, type: 2} 162 | m_StaticBatchInfo: 163 | firstSubMesh: 0 164 | subMeshCount: 0 165 | m_StaticBatchRoot: {fileID: 0} 166 | m_ProbeAnchor: {fileID: 0} 167 | m_LightProbeVolumeOverride: {fileID: 0} 168 | m_ScaleInLightmap: 1 169 | m_PreserveUVs: 1 170 | m_IgnoreNormalsForChartDetection: 0 171 | m_ImportantGI: 0 172 | m_StitchLightmapSeams: 0 173 | m_SelectedEditorRenderState: 3 174 | m_MinimumChartSize: 4 175 | m_AutoUVMaxDistance: 0.5 176 | m_AutoUVMaxAngle: 89 177 | m_LightmapParameters: {fileID: 0} 178 | m_SortingLayerID: 0 179 | m_SortingLayer: 0 180 | m_SortingOrder: 0 181 | --- !u!65 &28612260 182 | BoxCollider: 183 | m_ObjectHideFlags: 0 184 | m_PrefabParentObject: {fileID: 0} 185 | m_PrefabInternal: {fileID: 0} 186 | m_GameObject: {fileID: 28612257} 187 | m_Material: {fileID: 0} 188 | m_IsTrigger: 0 189 | m_Enabled: 1 190 | serializedVersion: 2 191 | m_Size: {x: 1, y: 1, z: 1} 192 | m_Center: {x: 0, y: 0, z: 0} 193 | --- !u!33 &28612261 194 | MeshFilter: 195 | m_ObjectHideFlags: 0 196 | m_PrefabParentObject: {fileID: 0} 197 | m_PrefabInternal: {fileID: 0} 198 | m_GameObject: {fileID: 28612257} 199 | m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} 200 | --- !u!1 &70233599 201 | GameObject: 202 | m_ObjectHideFlags: 0 203 | m_PrefabParentObject: {fileID: 0} 204 | m_PrefabInternal: {fileID: 0} 205 | serializedVersion: 5 206 | m_Component: 207 | - component: {fileID: 70233600} 208 | - component: {fileID: 70233604} 209 | - component: {fileID: 70233603} 210 | - component: {fileID: 70233602} 211 | - component: {fileID: 70233601} 212 | m_Layer: 0 213 | m_Name: Cylinder 214 | m_TagString: Untagged 215 | m_Icon: {fileID: 0} 216 | m_NavMeshLayer: 0 217 | m_StaticEditorFlags: 0 218 | m_IsActive: 1 219 | --- !u!4 &70233600 220 | Transform: 221 | m_ObjectHideFlags: 0 222 | m_PrefabParentObject: {fileID: 0} 223 | m_PrefabInternal: {fileID: 0} 224 | m_GameObject: {fileID: 70233599} 225 | m_LocalRotation: {x: -0, y: -0, z: 0.70710677, w: 0.7071068} 226 | m_LocalPosition: {x: -1349.4, y: 31.4, z: -1099.7} 227 | m_LocalScale: {x: 16.049849, y: 16.049849, z: 16.049849} 228 | m_Children: [] 229 | m_Father: {fileID: 1083142296} 230 | m_RootOrder: 4 231 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 232 | --- !u!64 &70233601 233 | MeshCollider: 234 | m_ObjectHideFlags: 0 235 | m_PrefabParentObject: {fileID: 0} 236 | m_PrefabInternal: {fileID: 0} 237 | m_GameObject: {fileID: 70233599} 238 | m_Material: {fileID: 0} 239 | m_IsTrigger: 0 240 | m_Enabled: 1 241 | serializedVersion: 3 242 | m_Convex: 0 243 | m_CookingOptions: 14 244 | m_SkinWidth: 0.01 245 | m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} 246 | --- !u!23 &70233602 247 | MeshRenderer: 248 | m_ObjectHideFlags: 0 249 | m_PrefabParentObject: {fileID: 0} 250 | m_PrefabInternal: {fileID: 0} 251 | m_GameObject: {fileID: 70233599} 252 | m_Enabled: 1 253 | m_CastShadows: 1 254 | m_ReceiveShadows: 1 255 | m_DynamicOccludee: 1 256 | m_MotionVectors: 1 257 | m_LightProbeUsage: 1 258 | m_ReflectionProbeUsage: 1 259 | m_Materials: 260 | - {fileID: 2100000, guid: ceb8cdc3b09dd5a4fa2464e28b4be3a6, type: 2} 261 | m_StaticBatchInfo: 262 | firstSubMesh: 0 263 | subMeshCount: 0 264 | m_StaticBatchRoot: {fileID: 0} 265 | m_ProbeAnchor: {fileID: 0} 266 | m_LightProbeVolumeOverride: {fileID: 0} 267 | m_ScaleInLightmap: 1 268 | m_PreserveUVs: 1 269 | m_IgnoreNormalsForChartDetection: 0 270 | m_ImportantGI: 0 271 | m_StitchLightmapSeams: 0 272 | m_SelectedEditorRenderState: 3 273 | m_MinimumChartSize: 4 274 | m_AutoUVMaxDistance: 0.5 275 | m_AutoUVMaxAngle: 89 276 | m_LightmapParameters: {fileID: 0} 277 | m_SortingLayerID: 0 278 | m_SortingLayer: 0 279 | m_SortingOrder: 0 280 | --- !u!136 &70233603 281 | CapsuleCollider: 282 | m_ObjectHideFlags: 0 283 | m_PrefabParentObject: {fileID: 0} 284 | m_PrefabInternal: {fileID: 0} 285 | m_GameObject: {fileID: 70233599} 286 | m_Material: {fileID: 0} 287 | m_IsTrigger: 0 288 | m_Enabled: 1 289 | m_Radius: 0.5 290 | m_Height: 2 291 | m_Direction: 1 292 | m_Center: {x: 0, y: 0, z: 0} 293 | --- !u!33 &70233604 294 | MeshFilter: 295 | m_ObjectHideFlags: 0 296 | m_PrefabParentObject: {fileID: 0} 297 | m_PrefabInternal: {fileID: 0} 298 | m_GameObject: {fileID: 70233599} 299 | m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} 300 | --- !u!1 &122492143 301 | GameObject: 302 | m_ObjectHideFlags: 0 303 | m_PrefabParentObject: {fileID: 0} 304 | m_PrefabInternal: {fileID: 0} 305 | serializedVersion: 5 306 | m_Component: 307 | - component: {fileID: 122492144} 308 | - component: {fileID: 122492148} 309 | - component: {fileID: 122492147} 310 | - component: {fileID: 122492146} 311 | - component: {fileID: 122492145} 312 | m_Layer: 8 313 | m_Name: Ground_Sphere 314 | m_TagString: Untagged 315 | m_Icon: {fileID: 0} 316 | m_NavMeshLayer: 0 317 | m_StaticEditorFlags: 0 318 | m_IsActive: 1 319 | --- !u!4 &122492144 320 | Transform: 321 | m_ObjectHideFlags: 0 322 | m_PrefabParentObject: {fileID: 0} 323 | m_PrefabInternal: {fileID: 0} 324 | m_GameObject: {fileID: 122492143} 325 | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} 326 | m_LocalPosition: {x: -1348.5836, y: 55.647915, z: -1173.2025} 327 | m_LocalScale: {x: 31.485535, y: 31.485535, z: 31.485535} 328 | m_Children: [] 329 | m_Father: {fileID: 1083142296} 330 | m_RootOrder: 3 331 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 332 | --- !u!64 &122492145 333 | MeshCollider: 334 | m_ObjectHideFlags: 0 335 | m_PrefabParentObject: {fileID: 0} 336 | m_PrefabInternal: {fileID: 0} 337 | m_GameObject: {fileID: 122492143} 338 | m_Material: {fileID: 0} 339 | m_IsTrigger: 0 340 | m_Enabled: 1 341 | serializedVersion: 3 342 | m_Convex: 0 343 | m_CookingOptions: 14 344 | m_SkinWidth: 0.01 345 | m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} 346 | --- !u!23 &122492146 347 | MeshRenderer: 348 | m_ObjectHideFlags: 0 349 | m_PrefabParentObject: {fileID: 0} 350 | m_PrefabInternal: {fileID: 0} 351 | m_GameObject: {fileID: 122492143} 352 | m_Enabled: 1 353 | m_CastShadows: 1 354 | m_ReceiveShadows: 1 355 | m_DynamicOccludee: 1 356 | m_MotionVectors: 1 357 | m_LightProbeUsage: 1 358 | m_ReflectionProbeUsage: 1 359 | m_Materials: 360 | - {fileID: 2100000, guid: a86d1eebd8998aa4c99264f6f855a172, type: 2} 361 | m_StaticBatchInfo: 362 | firstSubMesh: 0 363 | subMeshCount: 0 364 | m_StaticBatchRoot: {fileID: 0} 365 | m_ProbeAnchor: {fileID: 0} 366 | m_LightProbeVolumeOverride: {fileID: 0} 367 | m_ScaleInLightmap: 1 368 | m_PreserveUVs: 1 369 | m_IgnoreNormalsForChartDetection: 0 370 | m_ImportantGI: 0 371 | m_StitchLightmapSeams: 0 372 | m_SelectedEditorRenderState: 3 373 | m_MinimumChartSize: 4 374 | m_AutoUVMaxDistance: 0.5 375 | m_AutoUVMaxAngle: 89 376 | m_LightmapParameters: {fileID: 0} 377 | m_SortingLayerID: 0 378 | m_SortingLayer: 0 379 | m_SortingOrder: 0 380 | --- !u!135 &122492147 381 | SphereCollider: 382 | m_ObjectHideFlags: 0 383 | m_PrefabParentObject: {fileID: 0} 384 | m_PrefabInternal: {fileID: 0} 385 | m_GameObject: {fileID: 122492143} 386 | m_Material: {fileID: 0} 387 | m_IsTrigger: 0 388 | m_Enabled: 1 389 | serializedVersion: 2 390 | m_Radius: 0.5 391 | m_Center: {x: 0, y: 0, z: 0} 392 | --- !u!33 &122492148 393 | MeshFilter: 394 | m_ObjectHideFlags: 0 395 | m_PrefabParentObject: {fileID: 0} 396 | m_PrefabInternal: {fileID: 0} 397 | m_GameObject: {fileID: 122492143} 398 | m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} 399 | --- !u!1 &386402991 400 | GameObject: 401 | m_ObjectHideFlags: 0 402 | m_PrefabParentObject: {fileID: 0} 403 | m_PrefabInternal: {fileID: 0} 404 | serializedVersion: 5 405 | m_Component: 406 | - component: {fileID: 386402993} 407 | - component: {fileID: 386402992} 408 | m_Layer: 0 409 | m_Name: GeoPainterSys 410 | m_TagString: Untagged 411 | m_Icon: {fileID: 0} 412 | m_NavMeshLayer: 0 413 | m_StaticEditorFlags: 0 414 | m_IsActive: 1 415 | --- !u!114 &386402992 416 | MonoBehaviour: 417 | m_ObjectHideFlags: 0 418 | m_PrefabParentObject: {fileID: 0} 419 | m_PrefabInternal: {fileID: 0} 420 | m_GameObject: {fileID: 386402991} 421 | m_Enabled: 1 422 | m_EditorHideFlags: 0 423 | m_Script: {fileID: 11500000, guid: 0addf81fe17020740b0ec3413391e47a, type: 3} 424 | m_Name: 425 | m_EditorClassIdentifier: 426 | paintLayer: 0 427 | myGroupsBuiltIn: 428 | - {fileID: 518238285} 429 | nbrGroupsCreated: 1 430 | myDistance: 0.5 431 | mySpray: 1 432 | myDelete: 2 433 | useNormal: 1 434 | groupSelIndex: 1 435 | bibSortMethod: 436 | - Random 437 | - Solo 438 | bibSortIndex: 0 439 | bibSoloSelect: 0 440 | rndAuto: 0 441 | --- !u!4 &386402993 442 | Transform: 443 | m_ObjectHideFlags: 0 444 | m_PrefabParentObject: {fileID: 0} 445 | m_PrefabInternal: {fileID: 0} 446 | m_GameObject: {fileID: 386402991} 447 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 448 | m_LocalPosition: {x: 0, y: 0, z: 0} 449 | m_LocalScale: {x: 1, y: 1, z: 1} 450 | m_Children: [] 451 | m_Father: {fileID: 0} 452 | m_RootOrder: 2 453 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 454 | --- !u!1 &457915445 455 | GameObject: 456 | m_ObjectHideFlags: 0 457 | m_PrefabParentObject: {fileID: 0} 458 | m_PrefabInternal: {fileID: 0} 459 | serializedVersion: 5 460 | m_Component: 461 | - component: {fileID: 457915446} 462 | - component: {fileID: 457915449} 463 | - component: {fileID: 457915448} 464 | - component: {fileID: 457915447} 465 | m_Layer: 8 466 | m_Name: Plane 467 | m_TagString: Untagged 468 | m_Icon: {fileID: 0} 469 | m_NavMeshLayer: 0 470 | m_StaticEditorFlags: 0 471 | m_IsActive: 1 472 | --- !u!4 &457915446 473 | Transform: 474 | m_ObjectHideFlags: 0 475 | m_PrefabParentObject: {fileID: 0} 476 | m_PrefabInternal: {fileID: 0} 477 | m_GameObject: {fileID: 457915445} 478 | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} 479 | m_LocalPosition: {x: -1323.3901, y: 24.3734, z: -1143.7852} 480 | m_LocalScale: {x: 13.705025, y: 13.705025, z: 13.705025} 481 | m_Children: [] 482 | m_Father: {fileID: 1083142296} 483 | m_RootOrder: 6 484 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 485 | --- !u!23 &457915447 486 | MeshRenderer: 487 | m_ObjectHideFlags: 0 488 | m_PrefabParentObject: {fileID: 0} 489 | m_PrefabInternal: {fileID: 0} 490 | m_GameObject: {fileID: 457915445} 491 | m_Enabled: 1 492 | m_CastShadows: 1 493 | m_ReceiveShadows: 1 494 | m_DynamicOccludee: 1 495 | m_MotionVectors: 1 496 | m_LightProbeUsage: 1 497 | m_ReflectionProbeUsage: 1 498 | m_Materials: 499 | - {fileID: 2100000, guid: a86d1eebd8998aa4c99264f6f855a172, type: 2} 500 | m_StaticBatchInfo: 501 | firstSubMesh: 0 502 | subMeshCount: 0 503 | m_StaticBatchRoot: {fileID: 0} 504 | m_ProbeAnchor: {fileID: 0} 505 | m_LightProbeVolumeOverride: {fileID: 0} 506 | m_ScaleInLightmap: 1 507 | m_PreserveUVs: 1 508 | m_IgnoreNormalsForChartDetection: 0 509 | m_ImportantGI: 0 510 | m_StitchLightmapSeams: 0 511 | m_SelectedEditorRenderState: 3 512 | m_MinimumChartSize: 4 513 | m_AutoUVMaxDistance: 0.5 514 | m_AutoUVMaxAngle: 89 515 | m_LightmapParameters: {fileID: 0} 516 | m_SortingLayerID: 0 517 | m_SortingLayer: 0 518 | m_SortingOrder: 0 519 | --- !u!64 &457915448 520 | MeshCollider: 521 | m_ObjectHideFlags: 0 522 | m_PrefabParentObject: {fileID: 0} 523 | m_PrefabInternal: {fileID: 0} 524 | m_GameObject: {fileID: 457915445} 525 | m_Material: {fileID: 0} 526 | m_IsTrigger: 0 527 | m_Enabled: 1 528 | serializedVersion: 3 529 | m_Convex: 0 530 | m_CookingOptions: 14 531 | m_SkinWidth: 0.01 532 | m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} 533 | --- !u!33 &457915449 534 | MeshFilter: 535 | m_ObjectHideFlags: 0 536 | m_PrefabParentObject: {fileID: 0} 537 | m_PrefabInternal: {fileID: 0} 538 | m_GameObject: {fileID: 457915445} 539 | m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} 540 | --- !u!1 &518238285 541 | GameObject: 542 | m_ObjectHideFlags: 0 543 | m_PrefabParentObject: {fileID: 0} 544 | m_PrefabInternal: {fileID: 0} 545 | serializedVersion: 5 546 | m_Component: 547 | - component: {fileID: 518238286} 548 | - component: {fileID: 518238287} 549 | m_Layer: 0 550 | m_Name: paintObject 551 | m_TagString: Untagged 552 | m_Icon: {fileID: 0} 553 | m_NavMeshLayer: 0 554 | m_StaticEditorFlags: 0 555 | m_IsActive: 1 556 | --- !u!4 &518238286 557 | Transform: 558 | m_ObjectHideFlags: 0 559 | m_PrefabParentObject: {fileID: 0} 560 | m_PrefabInternal: {fileID: 0} 561 | m_GameObject: {fileID: 518238285} 562 | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} 563 | m_LocalPosition: {x: -1357.7529, y: 33.468666, z: -1091.9531} 564 | m_LocalScale: {x: 1, y: 1, z: 1} 565 | m_Children: [] 566 | m_Father: {fileID: 1083142296} 567 | m_RootOrder: 7 568 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 569 | --- !u!114 &518238287 570 | MonoBehaviour: 571 | m_ObjectHideFlags: 0 572 | m_PrefabParentObject: {fileID: 0} 573 | m_PrefabInternal: {fileID: 0} 574 | m_GameObject: {fileID: 518238285} 575 | m_Enabled: 1 576 | m_EditorHideFlags: 0 577 | m_Script: {fileID: 11500000, guid: f03397cb266760a4296c27ed450b9975, type: 3} 578 | m_Name: 579 | m_EditorClassIdentifier: 580 | myLibraryBuiltIn: 581 | - {fileID: 1252715670555686, guid: 1ce7800e95cd265469b9eba312c32a5b, type: 2} 582 | rndSeed: 1 583 | myPointsList: [] 584 | distanceRadius: 3.4199972 585 | sprayRadius: 3.9199972 586 | deleteRadius: 5.6400356 587 | minSlopeVal: 10 588 | maxSlopeVal: 80 589 | minAltitudeVal: -10000 590 | maxAltitudeVal: 10000 591 | useNormal: 1 592 | offPosX: 0 593 | offPosY: 0 594 | offPosZ: 0 595 | rndPosMinX: 0 596 | rndPosMinY: 0 597 | rndPosMinZ: 0 598 | rndPosMaxX: 0 599 | rndPosMaxY: 0 600 | rndPosMaxZ: 0 601 | offRotX: 0 602 | offRotY: 0 603 | offRotZ: 0 604 | rndRotMinX: 0 605 | rndRotMinY: 0 606 | rndRotMinZ: 0 607 | rndRotMaxX: 0 608 | rndRotMaxY: 0 609 | rndRotMaxZ: 0 610 | scaleUniform: 0 611 | offSclX: 0 612 | offSclY: 0 613 | offSclZ: 0 614 | rndSclMinX: 0 615 | rndSclMinY: 0 616 | rndSclMinZ: 0 617 | rndSclMaxX: 0 618 | rndSclMaxY: 0 619 | rndSclMaxZ: 0 620 | --- !u!1 &1067415891 621 | GameObject: 622 | m_ObjectHideFlags: 0 623 | m_PrefabParentObject: {fileID: 0} 624 | m_PrefabInternal: {fileID: 0} 625 | serializedVersion: 5 626 | m_Component: 627 | - component: {fileID: 1067415892} 628 | - component: {fileID: 1067415895} 629 | - component: {fileID: 1067415894} 630 | - component: {fileID: 1067415893} 631 | m_Layer: 0 632 | m_Name: paintMask_Zone 633 | m_TagString: paintMask 634 | m_Icon: {fileID: 0} 635 | m_NavMeshLayer: 0 636 | m_StaticEditorFlags: 0 637 | m_IsActive: 1 638 | --- !u!4 &1067415892 639 | Transform: 640 | m_ObjectHideFlags: 0 641 | m_PrefabParentObject: {fileID: 0} 642 | m_PrefabInternal: {fileID: 0} 643 | m_GameObject: {fileID: 1067415891} 644 | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} 645 | m_LocalPosition: {x: -1323.4896, y: 33.072296, z: -1143.6816} 646 | m_LocalScale: {x: 6.397975, y: 3.9803011, z: 13.411749} 647 | m_Children: [] 648 | m_Father: {fileID: 1083142296} 649 | m_RootOrder: 5 650 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 651 | --- !u!23 &1067415893 652 | MeshRenderer: 653 | m_ObjectHideFlags: 0 654 | m_PrefabParentObject: {fileID: 0} 655 | m_PrefabInternal: {fileID: 0} 656 | m_GameObject: {fileID: 1067415891} 657 | m_Enabled: 1 658 | m_CastShadows: 1 659 | m_ReceiveShadows: 1 660 | m_DynamicOccludee: 1 661 | m_MotionVectors: 1 662 | m_LightProbeUsage: 1 663 | m_ReflectionProbeUsage: 1 664 | m_Materials: 665 | - {fileID: 2100000, guid: 82740adf62894764fa392185f8b66b5b, type: 2} 666 | m_StaticBatchInfo: 667 | firstSubMesh: 0 668 | subMeshCount: 0 669 | m_StaticBatchRoot: {fileID: 0} 670 | m_ProbeAnchor: {fileID: 0} 671 | m_LightProbeVolumeOverride: {fileID: 0} 672 | m_ScaleInLightmap: 1 673 | m_PreserveUVs: 1 674 | m_IgnoreNormalsForChartDetection: 0 675 | m_ImportantGI: 0 676 | m_StitchLightmapSeams: 0 677 | m_SelectedEditorRenderState: 3 678 | m_MinimumChartSize: 4 679 | m_AutoUVMaxDistance: 0.5 680 | m_AutoUVMaxAngle: 89 681 | m_LightmapParameters: {fileID: 0} 682 | m_SortingLayerID: 0 683 | m_SortingLayer: 0 684 | m_SortingOrder: 0 685 | --- !u!65 &1067415894 686 | BoxCollider: 687 | m_ObjectHideFlags: 0 688 | m_PrefabParentObject: {fileID: 0} 689 | m_PrefabInternal: {fileID: 0} 690 | m_GameObject: {fileID: 1067415891} 691 | m_Material: {fileID: 0} 692 | m_IsTrigger: 0 693 | m_Enabled: 1 694 | serializedVersion: 2 695 | m_Size: {x: 1, y: 1, z: 1} 696 | m_Center: {x: 0, y: 0, z: 0} 697 | --- !u!33 &1067415895 698 | MeshFilter: 699 | m_ObjectHideFlags: 0 700 | m_PrefabParentObject: {fileID: 0} 701 | m_PrefabInternal: {fileID: 0} 702 | m_GameObject: {fileID: 1067415891} 703 | m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} 704 | --- !u!1 &1083142295 705 | GameObject: 706 | m_ObjectHideFlags: 0 707 | m_PrefabParentObject: {fileID: 0} 708 | m_PrefabInternal: {fileID: 0} 709 | serializedVersion: 5 710 | m_Component: 711 | - component: {fileID: 1083142296} 712 | m_Layer: 0 713 | m_Name: Level 714 | m_TagString: Untagged 715 | m_Icon: {fileID: 0} 716 | m_NavMeshLayer: 0 717 | m_StaticEditorFlags: 0 718 | m_IsActive: 1 719 | --- !u!4 &1083142296 720 | Transform: 721 | m_ObjectHideFlags: 0 722 | m_PrefabParentObject: {fileID: 0} 723 | m_PrefabInternal: {fileID: 0} 724 | m_GameObject: {fileID: 1083142295} 725 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 726 | m_LocalPosition: {x: 1310.5455, y: -45.02359, z: 1301.893} 727 | m_LocalScale: {x: 1, y: 1, z: 1} 728 | m_Children: 729 | - {fileID: 2022540094} 730 | - {fileID: 28612258} 731 | - {fileID: 1168452264} 732 | - {fileID: 122492144} 733 | - {fileID: 70233600} 734 | - {fileID: 1067415892} 735 | - {fileID: 457915446} 736 | - {fileID: 518238286} 737 | m_Father: {fileID: 0} 738 | m_RootOrder: 3 739 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 740 | --- !u!1 &1168452263 741 | GameObject: 742 | m_ObjectHideFlags: 0 743 | m_PrefabParentObject: {fileID: 0} 744 | m_PrefabInternal: {fileID: 0} 745 | serializedVersion: 5 746 | m_Component: 747 | - component: {fileID: 1168452264} 748 | - component: {fileID: 1168452268} 749 | - component: {fileID: 1168452267} 750 | - component: {fileID: 1168452266} 751 | - component: {fileID: 1168452265} 752 | m_Layer: 8 753 | m_Name: Ground_Cube 754 | m_TagString: Untagged 755 | m_Icon: {fileID: 0} 756 | m_NavMeshLayer: 0 757 | m_StaticEditorFlags: 0 758 | m_IsActive: 1 759 | --- !u!4 &1168452264 760 | Transform: 761 | m_ObjectHideFlags: 0 762 | m_PrefabParentObject: {fileID: 0} 763 | m_PrefabInternal: {fileID: 0} 764 | m_GameObject: {fileID: 1168452263} 765 | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} 766 | m_LocalPosition: {x: -1323.3901, y: 28.39, z: -1143.7852} 767 | m_LocalScale: {x: 26.138367, y: 8.935054, z: 20.55911} 768 | m_Children: [] 769 | m_Father: {fileID: 1083142296} 770 | m_RootOrder: 2 771 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 772 | --- !u!64 &1168452265 773 | MeshCollider: 774 | m_ObjectHideFlags: 0 775 | m_PrefabParentObject: {fileID: 0} 776 | m_PrefabInternal: {fileID: 0} 777 | m_GameObject: {fileID: 1168452263} 778 | m_Material: {fileID: 0} 779 | m_IsTrigger: 0 780 | m_Enabled: 1 781 | serializedVersion: 3 782 | m_Convex: 0 783 | m_CookingOptions: 14 784 | m_SkinWidth: 0.01 785 | m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} 786 | --- !u!23 &1168452266 787 | MeshRenderer: 788 | m_ObjectHideFlags: 0 789 | m_PrefabParentObject: {fileID: 0} 790 | m_PrefabInternal: {fileID: 0} 791 | m_GameObject: {fileID: 1168452263} 792 | m_Enabled: 1 793 | m_CastShadows: 1 794 | m_ReceiveShadows: 1 795 | m_DynamicOccludee: 1 796 | m_MotionVectors: 1 797 | m_LightProbeUsage: 1 798 | m_ReflectionProbeUsage: 1 799 | m_Materials: 800 | - {fileID: 2100000, guid: a86d1eebd8998aa4c99264f6f855a172, type: 2} 801 | m_StaticBatchInfo: 802 | firstSubMesh: 0 803 | subMeshCount: 0 804 | m_StaticBatchRoot: {fileID: 0} 805 | m_ProbeAnchor: {fileID: 0} 806 | m_LightProbeVolumeOverride: {fileID: 0} 807 | m_ScaleInLightmap: 1 808 | m_PreserveUVs: 1 809 | m_IgnoreNormalsForChartDetection: 0 810 | m_ImportantGI: 0 811 | m_StitchLightmapSeams: 0 812 | m_SelectedEditorRenderState: 3 813 | m_MinimumChartSize: 4 814 | m_AutoUVMaxDistance: 0.5 815 | m_AutoUVMaxAngle: 89 816 | m_LightmapParameters: {fileID: 0} 817 | m_SortingLayerID: 0 818 | m_SortingLayer: 0 819 | m_SortingOrder: 0 820 | --- !u!65 &1168452267 821 | BoxCollider: 822 | m_ObjectHideFlags: 0 823 | m_PrefabParentObject: {fileID: 0} 824 | m_PrefabInternal: {fileID: 0} 825 | m_GameObject: {fileID: 1168452263} 826 | m_Material: {fileID: 0} 827 | m_IsTrigger: 0 828 | m_Enabled: 1 829 | serializedVersion: 2 830 | m_Size: {x: 1, y: 1, z: 1} 831 | m_Center: {x: 0, y: 0, z: 0} 832 | --- !u!33 &1168452268 833 | MeshFilter: 834 | m_ObjectHideFlags: 0 835 | m_PrefabParentObject: {fileID: 0} 836 | m_PrefabInternal: {fileID: 0} 837 | m_GameObject: {fileID: 1168452263} 838 | m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} 839 | --- !u!1 &1580235446 840 | GameObject: 841 | m_ObjectHideFlags: 0 842 | m_PrefabParentObject: {fileID: 0} 843 | m_PrefabInternal: {fileID: 0} 844 | serializedVersion: 5 845 | m_Component: 846 | - component: {fileID: 1580235450} 847 | - component: {fileID: 1580235449} 848 | - component: {fileID: 1580235448} 849 | - component: {fileID: 1580235447} 850 | m_Layer: 0 851 | m_Name: Main Camera 852 | m_TagString: MainCamera 853 | m_Icon: {fileID: 0} 854 | m_NavMeshLayer: 0 855 | m_StaticEditorFlags: 0 856 | m_IsActive: 1 857 | --- !u!81 &1580235447 858 | AudioListener: 859 | m_ObjectHideFlags: 0 860 | m_PrefabParentObject: {fileID: 0} 861 | m_PrefabInternal: {fileID: 0} 862 | m_GameObject: {fileID: 1580235446} 863 | m_Enabled: 1 864 | --- !u!124 &1580235448 865 | Behaviour: 866 | m_ObjectHideFlags: 0 867 | m_PrefabParentObject: {fileID: 0} 868 | m_PrefabInternal: {fileID: 0} 869 | m_GameObject: {fileID: 1580235446} 870 | m_Enabled: 1 871 | --- !u!20 &1580235449 872 | Camera: 873 | m_ObjectHideFlags: 0 874 | m_PrefabParentObject: {fileID: 0} 875 | m_PrefabInternal: {fileID: 0} 876 | m_GameObject: {fileID: 1580235446} 877 | m_Enabled: 1 878 | serializedVersion: 2 879 | m_ClearFlags: 1 880 | m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} 881 | m_NormalizedViewPortRect: 882 | serializedVersion: 2 883 | x: 0 884 | y: 0 885 | width: 1 886 | height: 1 887 | near clip plane: 0.3 888 | far clip plane: 1000 889 | field of view: 60 890 | orthographic: 0 891 | orthographic size: 5 892 | m_Depth: -1 893 | m_CullingMask: 894 | serializedVersion: 2 895 | m_Bits: 4294967295 896 | m_RenderingPath: -1 897 | m_TargetTexture: {fileID: 0} 898 | m_TargetDisplay: 0 899 | m_TargetEye: 3 900 | m_HDR: 1 901 | m_AllowMSAA: 1 902 | m_AllowDynamicResolution: 0 903 | m_ForceIntoRT: 0 904 | m_OcclusionCulling: 1 905 | m_StereoConvergence: 10 906 | m_StereoSeparation: 0.022 907 | --- !u!4 &1580235450 908 | Transform: 909 | m_ObjectHideFlags: 0 910 | m_PrefabParentObject: {fileID: 0} 911 | m_PrefabInternal: {fileID: 0} 912 | m_GameObject: {fileID: 1580235446} 913 | m_LocalRotation: {x: 0.43499193, y: -0, z: -0, w: 0.90043443} 914 | m_LocalPosition: {x: 0, y: 53.450104, z: 68.89158} 915 | m_LocalScale: {x: 1, y: 1, z: 1} 916 | m_Children: [] 917 | m_Father: {fileID: 0} 918 | m_RootOrder: 0 919 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 920 | --- !u!1 &2022540093 921 | GameObject: 922 | m_ObjectHideFlags: 0 923 | m_PrefabParentObject: {fileID: 0} 924 | m_PrefabInternal: {fileID: 0} 925 | serializedVersion: 5 926 | m_Component: 927 | - component: {fileID: 2022540094} 928 | - component: {fileID: 2022540097} 929 | - component: {fileID: 2022540096} 930 | - component: {fileID: 2022540095} 931 | m_Layer: 0 932 | m_Name: Sphere 933 | m_TagString: Untagged 934 | m_Icon: {fileID: 0} 935 | m_NavMeshLayer: 0 936 | m_StaticEditorFlags: 0 937 | m_IsActive: 1 938 | --- !u!4 &2022540094 939 | Transform: 940 | m_ObjectHideFlags: 0 941 | m_PrefabParentObject: {fileID: 0} 942 | m_PrefabInternal: {fileID: 0} 943 | m_GameObject: {fileID: 2022540093} 944 | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} 945 | m_LocalPosition: {x: -1289.7747, y: 28.39, z: -1105.3447} 946 | m_LocalScale: {x: 16.011448, y: 16.011448, z: 16.011448} 947 | m_Children: [] 948 | m_Father: {fileID: 1083142296} 949 | m_RootOrder: 0 950 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 951 | --- !u!23 &2022540095 952 | MeshRenderer: 953 | m_ObjectHideFlags: 0 954 | m_PrefabParentObject: {fileID: 0} 955 | m_PrefabInternal: {fileID: 0} 956 | m_GameObject: {fileID: 2022540093} 957 | m_Enabled: 1 958 | m_CastShadows: 1 959 | m_ReceiveShadows: 1 960 | m_DynamicOccludee: 1 961 | m_MotionVectors: 1 962 | m_LightProbeUsage: 1 963 | m_ReflectionProbeUsage: 1 964 | m_Materials: 965 | - {fileID: 2100000, guid: 152427138b5cd0b469438e9484673d63, type: 2} 966 | m_StaticBatchInfo: 967 | firstSubMesh: 0 968 | subMeshCount: 0 969 | m_StaticBatchRoot: {fileID: 0} 970 | m_ProbeAnchor: {fileID: 0} 971 | m_LightProbeVolumeOverride: {fileID: 0} 972 | m_ScaleInLightmap: 1 973 | m_PreserveUVs: 1 974 | m_IgnoreNormalsForChartDetection: 0 975 | m_ImportantGI: 0 976 | m_StitchLightmapSeams: 0 977 | m_SelectedEditorRenderState: 3 978 | m_MinimumChartSize: 4 979 | m_AutoUVMaxDistance: 0.5 980 | m_AutoUVMaxAngle: 89 981 | m_LightmapParameters: {fileID: 0} 982 | m_SortingLayerID: 0 983 | m_SortingLayer: 0 984 | m_SortingOrder: 0 985 | --- !u!135 &2022540096 986 | SphereCollider: 987 | m_ObjectHideFlags: 0 988 | m_PrefabParentObject: {fileID: 0} 989 | m_PrefabInternal: {fileID: 0} 990 | m_GameObject: {fileID: 2022540093} 991 | m_Material: {fileID: 0} 992 | m_IsTrigger: 0 993 | m_Enabled: 1 994 | serializedVersion: 2 995 | m_Radius: 0.5 996 | m_Center: {x: 0, y: 0, z: 0} 997 | --- !u!33 &2022540097 998 | MeshFilter: 999 | m_ObjectHideFlags: 0 1000 | m_PrefabParentObject: {fileID: 0} 1001 | m_PrefabInternal: {fileID: 0} 1002 | m_GameObject: {fileID: 2022540093} 1003 | m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} 1004 | --- !u!1 &2073357051 1005 | GameObject: 1006 | m_ObjectHideFlags: 0 1007 | m_PrefabParentObject: {fileID: 0} 1008 | m_PrefabInternal: {fileID: 0} 1009 | serializedVersion: 5 1010 | m_Component: 1011 | - component: {fileID: 2073357053} 1012 | - component: {fileID: 2073357052} 1013 | m_Layer: 0 1014 | m_Name: Directional Light 1015 | m_TagString: Untagged 1016 | m_Icon: {fileID: 0} 1017 | m_NavMeshLayer: 0 1018 | m_StaticEditorFlags: 0 1019 | m_IsActive: 1 1020 | --- !u!108 &2073357052 1021 | Light: 1022 | m_ObjectHideFlags: 0 1023 | m_PrefabParentObject: {fileID: 0} 1024 | m_PrefabInternal: {fileID: 0} 1025 | m_GameObject: {fileID: 2073357051} 1026 | m_Enabled: 1 1027 | serializedVersion: 8 1028 | m_Type: 1 1029 | m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} 1030 | m_Intensity: 1 1031 | m_Range: 10 1032 | m_SpotAngle: 30 1033 | m_CookieSize: 10 1034 | m_Shadows: 1035 | m_Type: 2 1036 | m_Resolution: -1 1037 | m_CustomResolution: -1 1038 | m_Strength: 1 1039 | m_Bias: 0.05 1040 | m_NormalBias: 0.4 1041 | m_NearPlane: 0.2 1042 | m_Cookie: {fileID: 0} 1043 | m_DrawHalo: 0 1044 | m_Flare: {fileID: 0} 1045 | m_RenderMode: 0 1046 | m_CullingMask: 1047 | serializedVersion: 2 1048 | m_Bits: 4294967295 1049 | m_Lightmapping: 4 1050 | m_AreaSize: {x: 1, y: 1} 1051 | m_BounceIntensity: 1 1052 | m_ColorTemperature: 6570 1053 | m_UseColorTemperature: 0 1054 | m_ShadowRadius: 0 1055 | m_ShadowAngle: 0 1056 | --- !u!4 &2073357053 1057 | Transform: 1058 | m_ObjectHideFlags: 0 1059 | m_PrefabParentObject: {fileID: 0} 1060 | m_PrefabInternal: {fileID: 0} 1061 | m_GameObject: {fileID: 2073357051} 1062 | m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} 1063 | m_LocalPosition: {x: 0, y: 3, z: 0} 1064 | m_LocalScale: {x: 1, y: 1, z: 1} 1065 | m_Children: [] 1066 | m_Father: {fileID: 0} 1067 | m_RootOrder: 1 1068 | m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} 1069 | -------------------------------------------------------------------------------- /Assets/GeoPainterCommunity_TestLevel.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 5a90647d36e520541a5d141130f308fd 3 | timeCreated: 1531425587 4 | licenseType: Free 5 | DefaultImporter: 6 | externalObjects: {} 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /GeoPainter Community Edition Manual.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheCoderPerson/GeoPainterCommunity/8352de1eabfdb034e3c69e4bd3e7f1f64921c214/GeoPainter Community Edition Manual.pdf -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 John O'Keefe 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # GeoPainterCommunity 2 | GeoPainter Community Edition is a Unity editor tool for painting prefabs in a scene. 3 | 4 | It was originally a paid tool on the Unity Asset Store but at some point was made free by the author: 5 | https://www.assetstore.unity3d.com/en/#!/content/2389 6 | 7 | You can watch an older video of the original tools functionality: 8 | https://www.youtube.com/watch?v=pUBOQrjxHjk 9 | 10 | I tried it out and decided to make some improvements to it. I asked the original author if I could post it on Github so others could contribute to the tools development and he agreed. 11 | 12 | I am keeping the original name but dubbing it the community edition. 13 | 14 | Some of the current improvements that I have made are the following: 15 | - Min/Max slope limits for painting prefabs. 16 | - Min/Max altitude limits for painting prefabs. 17 | - Ability to use a mask object for preventing painting in those areas. Objects with the tab "paintMask" will fufill that function. 18 | - Updated some deprecated api calls. 19 | - Added a confirm on delete so the user does not accidently delete painted prefabs. 20 | - Added debug information. When in paint mode press on the CAPS LOCK key to display slope and altitude info for the point you are looking at. Helpful for knowing what to set min/max values for slope/altitude. 21 | - Added debug information to display what mode you are in i.e. paint, or clean when pressing the shift or control key. 22 | - Added checkbox to toggle on/off debug info. 23 | - Added the ability to save brush info per object group. 24 | - Added ability to save min/max slope/altitude info per object group. 25 | 26 | Some features I would like to add in the future: 27 | - Convert from unity script to C# since unity script is no longer supported. 28 | - Add ability to have probabilities for each object in an object group. So you could set an object to occur 2% of the time and other objects 20% of the time. Then when painting it would draw the 2% object less frequently then the others. Currently all objects in a group have equal probability of being drawn. 29 | - Clean up the display of the UI (width, presentation, etc.). 30 | - Add better documentation/videos to help explain how to use the tool. 31 | --------------------------------------------------------------------------------