(Feat) Add Build

This commit is contained in:
2026-07-22 12:56:13 +02:00
parent 3657b870d8
commit 0052b0d98e
244 changed files with 35752 additions and 3112 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 243 KiB

@@ -0,0 +1,117 @@
fileFormatVersion: 2
guid: d0115bcb4578ac449b3c68cff7b9ab74
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 0
wrapV: 0
wrapW: 0
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 0
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 4
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
customData:
physicsShape: []
bones: []
spriteID:
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:
@@ -11,8 +11,7 @@ GameObject:
- component: {fileID: 3714593433905687095}
- component: {fileID: 5681262012823064577}
- component: {fileID: 2155936523658636536}
- component: {fileID: -4039253569498786944}
m_Layer: 9
m_Layer: 14
m_Name: Wall_Prefab
m_TagString: Untagged
m_Icon: {fileID: 0}
@@ -91,24 +90,3 @@ MeshRenderer:
m_SortingOrder: 0
m_MaskInteraction: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!65 &-4039253569498786944
BoxCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 421010513357740068}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 3
m_Size: {x: 2.4617782, y: 2.50951, z: 0.2520886}
m_Center: {x: 0.0095511675, y: 1.2509763, z: -0.0246767}
@@ -11,8 +11,7 @@ GameObject:
- component: {fileID: 8054689501814014560}
- component: {fileID: 1338422113681176662}
- component: {fileID: 4733158660651713711}
- component: {fileID: 5106284389308251883}
m_Layer: 9
m_Layer: 14
m_Name: WoodCelling_Prefab
m_TagString: Untagged
m_Icon: {fileID: 0}
@@ -91,24 +90,3 @@ MeshRenderer:
m_SortingOrder: 0
m_MaskInteraction: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!65 &5106284389308251883
BoxCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6454600228789530739}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 3
m_Size: {x: 2.4893725, y: 0.279638, z: 2.4685874}
m_Center: {x: 0.0011386871, y: -0.07322356, z: -0.012834609}
@@ -5,6 +5,7 @@ PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 8997298075521803846}
m_Modifications:
- target: {fileID: 7198024643778214155, guid: bf1b6977d91e64f4d97ebe5917ac5100, type: 3}
@@ -56,18 +57,31 @@ PrefabInstance:
value: 0
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: bf1b6977d91e64f4d97ebe5917ac5100, type: 3}
--- !u!4 &8046626792452269860 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 7543342365492650929, guid: bf1b6977d91e64f4d97ebe5917ac5100, type: 3}
m_PrefabInstance: {fileID: 505539525378442389}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &505539527041720555
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 122938350598531472, guid: 6a1de89366a3f0741877f7cd3ca11cd9, type: 3}
propertyPath: MinDistance
value: 2
objectReference: {fileID: 0}
- target: {fileID: 5785395719311195047, guid: 6a1de89366a3f0741877f7cd3ca11cd9, type: 3}
propertyPath: <AssetPathHash>k__BackingField
value: 2699301597497639283
objectReference: {fileID: 0}
- target: {fileID: 8111840307215440919, guid: 6a1de89366a3f0741877f7cd3ca11cd9, type: 3}
propertyPath: m_Name
value: Chest(gold)
@@ -117,6 +131,12 @@ PrefabInstance:
value: 0
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects:
- targetCorrespondingSourceObject: {fileID: 8924123916003559085, guid: 6a1de89366a3f0741877f7cd3ca11cd9, type: 3}
insertIndex: -1
addedObject: {fileID: 8046626792452269860}
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 6a1de89366a3f0741877f7cd3ca11cd9, type: 3}
--- !u!4 &8997298075521803846 stripped
Transform:
@@ -11,7 +11,7 @@ GameObject:
- component: {fileID: 2606721799233737429}
- component: {fileID: 7224854202195104225}
- component: {fileID: 6178433971241266360}
m_Layer: 0
m_Layer: 9
m_Name: Chest_Base_LOD1
m_TagString: Untagged
m_Icon: {fileID: 0}
@@ -25,13 +25,13 @@ Transform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1205429200353802584}
serializedVersion: 2
m_LocalRotation: {x: 0.7071068, y: 0, z: -0, w: 0.7071067}
m_LocalPosition: {x: -0, y: 0, z: 0}
m_LocalScale: {x: 0.01, y: 0.01, z: 0.01}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 503519722303736055}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &7224854202195104225
MeshFilter:
@@ -58,6 +58,11 @@ MeshRenderer:
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RayTraceProcedural: 0
m_RayTracingAccelStructBuildFlagsOverride: 0
m_RayTracingAccelStructBuildFlags: 1
m_SmallMeshCulling: 1
m_ForceMeshLod: -1
m_MeshLodSelectionBias: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
@@ -79,9 +84,11 @@ MeshRenderer:
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_GlobalIlluminationMeshLod: 0
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_MaskInteraction: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!1 &2488455438653353329
GameObject:
@@ -98,7 +105,7 @@ GameObject:
- component: {fileID: 122938350598531472}
- component: {fileID: 1209279869221510233}
- component: {fileID: 4283136006545383452}
m_Layer: 0
m_Layer: 9
m_Name: Chest_Lid
m_TagString: Untagged
m_Icon: {fileID: 0}
@@ -112,6 +119,7 @@ Transform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2488455438653353329}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: -0.009018421, y: 0.44621155, z: -0.30879098}
m_LocalScale: {x: 1, y: 1, z: 1}
@@ -120,7 +128,6 @@ Transform:
- {fileID: 3707641557569320034}
- {fileID: 8232556972884782422}
m_Father: {fileID: 8924123916003559085}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &8976429598366186669
MeshFilter:
@@ -147,6 +154,11 @@ MeshRenderer:
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RayTraceProcedural: 0
m_RayTracingAccelStructBuildFlagsOverride: 0
m_RayTracingAccelStructBuildFlags: 1
m_SmallMeshCulling: 1
m_ForceMeshLod: -1
m_MeshLodSelectionBias: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
@@ -168,13 +180,15 @@ MeshRenderer:
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_GlobalIlluminationMeshLod: 0
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_MaskInteraction: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!95 &1361013315308231073
Animator:
serializedVersion: 5
serializedVersion: 7
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
@@ -188,6 +202,7 @@ Animator:
m_ApplyRootMotion: 0
m_LinearVelocityBlending: 0
m_StabilizeFeet: 0
m_AnimatePhysics: 0
m_WarningMessage:
m_HasTransformHierarchy: 1
m_AllowConstantClipSamplingOptimization: 1
@@ -204,6 +219,7 @@ AudioSource:
serializedVersion: 4
OutputAudioMixerGroup: {fileID: -7316018828095377594, guid: 0665dad8c29b42e4bafc93d713b131c9, type: 2}
m_audioClip: {fileID: 0}
m_Resource: {fileID: 0}
m_PlayOnAwake: 0
m_Volume: 0.8
m_Pitch: 1
@@ -315,9 +331,17 @@ MeshCollider:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2488455438653353329}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 4
serializedVersion: 5
m_Convex: 0
m_CookingOptions: 30
m_Mesh: {fileID: 2356492703377905092, guid: 19a7b53b36c3520479d09aa5646d4c5a, type: 3}
@@ -332,7 +356,7 @@ GameObject:
- component: {fileID: 3707641557569320034}
- component: {fileID: 5559165499292620654}
- component: {fileID: 9201044371878899178}
m_Layer: 0
m_Layer: 9
m_Name: Chest_Lid_LOD0
m_TagString: Untagged
m_Icon: {fileID: 0}
@@ -346,13 +370,13 @@ Transform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2834765333546211928}
serializedVersion: 2
m_LocalRotation: {x: 0.7071068, y: 0, z: -0, w: 0.7071067}
m_LocalPosition: {x: 0.009018421, y: -0.000000038146972, z: -0.000000057220458}
m_LocalScale: {x: 0.01, y: 0.01, z: 0.01}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 3835817499799255042}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &5559165499292620654
MeshFilter:
@@ -379,6 +403,11 @@ MeshRenderer:
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RayTraceProcedural: 0
m_RayTracingAccelStructBuildFlagsOverride: 0
m_RayTracingAccelStructBuildFlags: 1
m_SmallMeshCulling: 1
m_ForceMeshLod: -1
m_MeshLodSelectionBias: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
@@ -400,9 +429,11 @@ MeshRenderer:
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_GlobalIlluminationMeshLod: 0
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_MaskInteraction: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!1 &3477519202729442059
GameObject:
@@ -416,7 +447,7 @@ GameObject:
- component: {fileID: 3916079684582640722}
- component: {fileID: 7052433451743326622}
- component: {fileID: 8727277968094159911}
m_Layer: 0
m_Layer: 9
m_Name: Chest_Base
m_TagString: Untagged
m_Icon: {fileID: 0}
@@ -430,6 +461,7 @@ Transform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3477519202729442059}
serializedVersion: 2
m_LocalRotation: {x: 0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: -0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
@@ -438,7 +470,6 @@ Transform:
- {fileID: 7567182041190782969}
- {fileID: 2606721799233737429}
m_Father: {fileID: 8924123916003559085}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &3916079684582640722
MeshFilter:
@@ -465,6 +496,11 @@ MeshRenderer:
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RayTraceProcedural: 0
m_RayTracingAccelStructBuildFlagsOverride: 0
m_RayTracingAccelStructBuildFlags: 1
m_SmallMeshCulling: 1
m_ForceMeshLod: -1
m_MeshLodSelectionBias: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
@@ -486,9 +522,11 @@ MeshRenderer:
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_GlobalIlluminationMeshLod: 0
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_MaskInteraction: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!64 &8727277968094159911
MeshCollider:
@@ -498,9 +536,17 @@ MeshCollider:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3477519202729442059}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 4
serializedVersion: 5
m_Convex: 0
m_CookingOptions: 30
m_Mesh: {fileID: -3942633656405313522, guid: 19a7b53b36c3520479d09aa5646d4c5a, type: 3}
@@ -515,7 +561,7 @@ GameObject:
- component: {fileID: 7567182041190782969}
- component: {fileID: 7107667617370497390}
- component: {fileID: 8641505232673808897}
m_Layer: 0
m_Layer: 9
m_Name: Chest_Base_LOD0
m_TagString: Untagged
m_Icon: {fileID: 0}
@@ -529,13 +575,13 @@ Transform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3730502645607281877}
serializedVersion: 2
m_LocalRotation: {x: 0.7071068, y: 0, z: -0, w: 0.7071067}
m_LocalPosition: {x: -0, y: 0, z: 0}
m_LocalScale: {x: 0.01, y: 0.01, z: 0.01}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 503519722303736055}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &7107667617370497390
MeshFilter:
@@ -562,6 +608,11 @@ MeshRenderer:
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RayTraceProcedural: 0
m_RayTracingAccelStructBuildFlagsOverride: 0
m_RayTracingAccelStructBuildFlags: 1
m_SmallMeshCulling: 1
m_ForceMeshLod: -1
m_MeshLodSelectionBias: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
@@ -583,9 +634,11 @@ MeshRenderer:
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_GlobalIlluminationMeshLod: 0
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_MaskInteraction: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!1 &4380831863138714029
GameObject:
@@ -598,7 +651,7 @@ GameObject:
- component: {fileID: 8232556972884782422}
- component: {fileID: 2368990597280887114}
- component: {fileID: 7097754766906568354}
m_Layer: 0
m_Layer: 9
m_Name: Chest_Lid_LOD1
m_TagString: Untagged
m_Icon: {fileID: 0}
@@ -612,13 +665,13 @@ Transform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4380831863138714029}
serializedVersion: 2
m_LocalRotation: {x: 0.7071068, y: 0, z: -0, w: 0.7071067}
m_LocalPosition: {x: 0.009018421, y: -0.000000038146972, z: -0.000000057220458}
m_LocalScale: {x: 0.01, y: 0.01, z: 0.01}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 3835817499799255042}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &2368990597280887114
MeshFilter:
@@ -645,6 +698,11 @@ MeshRenderer:
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RayTraceProcedural: 0
m_RayTracingAccelStructBuildFlagsOverride: 0
m_RayTracingAccelStructBuildFlags: 1
m_SmallMeshCulling: 1
m_ForceMeshLod: -1
m_MeshLodSelectionBias: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
@@ -666,9 +724,11 @@ MeshRenderer:
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_GlobalIlluminationMeshLod: 0
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_MaskInteraction: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!1 &8111840307215440919
GameObject:
@@ -680,7 +740,7 @@ GameObject:
m_Component:
- component: {fileID: 8924123916003559085}
- component: {fileID: 546255530539012946}
m_Layer: 0
m_Layer: 9
m_Name: Chest
m_TagString: Untagged
m_Icon: {fileID: 0}
@@ -694,7 +754,8 @@ Transform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8111840307215440919}
m_LocalRotation: {x: 0, y: -0, z: -0, w: 1}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
@@ -702,7 +763,6 @@ Transform:
- {fileID: 503519722303736055}
- {fileID: 3835817499799255042}
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!205 &546255530539012946
LODGroup:
@@ -19,7 +19,7 @@ GameObject:
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 86
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &748262766046446123
Transform:
@@ -156,16 +156,23 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 7fda9de5aca90194dbd292acb461b816, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Harvestable
id: 59
harvestType: 2
maxHealth: 100
drops:
- item: {fileID: 11400000, guid: 51e850551f3764447b2e8b6168f82e3b, type: 2}
minQuantity: 1
maxQuantity: 2
shakeDuration: 0.4
shakeStrength: 0.2
shakeVibrato: 15
shakeRandomness: 60
toolDrops:
- tool: {fileID: 11400000, guid: 60132cba2202496eb74f2afc1f89c81a, type: 2}
drops:
- item: {fileID: 11400000, guid: 51e850551f3764447b2e8b6168f82e3b, type: 2}
minQuantity: 1
maxQuantity: 3
dropChance: 1
punchScale: 0.15
punchAngle: 8
punchDuration: 0.3
punchVibrato: 6
punchElasticity: 0.5
blockedAngle: 2.5
blockedDuration: 0.2
canRespawn: 1
respawnDelay: 60
onHit:
@@ -190,7 +197,7 @@ GameObject:
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 86
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &4217209489267025855
Transform:
@@ -280,7 +287,7 @@ GameObject:
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 86
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &3548739899808413248
Transform:
@@ -19,7 +19,7 @@ GameObject:
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 86
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &286197698383361655
Transform:
@@ -156,16 +156,23 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 7fda9de5aca90194dbd292acb461b816, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Harvestable
id: 90
harvestType: 2
maxHealth: 100
drops:
- item: {fileID: 11400000, guid: 51e850551f3764447b2e8b6168f82e3b, type: 2}
minQuantity: 1
maxQuantity: 2
shakeDuration: 0.4
shakeStrength: 0.2
shakeVibrato: 15
shakeRandomness: 60
toolDrops:
- tool: {fileID: 11400000, guid: 60132cba2202496eb74f2afc1f89c81a, type: 2}
drops:
- item: {fileID: 11400000, guid: 51e850551f3764447b2e8b6168f82e3b, type: 2}
minQuantity: 1
maxQuantity: 3
dropChance: 1
punchScale: 0.15
punchAngle: 8
punchDuration: 0.3
punchVibrato: 6
punchElasticity: 0.5
blockedAngle: 2.5
blockedDuration: 0.2
canRespawn: 1
respawnDelay: 60
onHit:
@@ -190,7 +197,7 @@ GameObject:
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 86
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &198993429449873881
Transform:
@@ -280,7 +287,7 @@ GameObject:
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 86
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &3543417022948999764
Transform:
@@ -19,7 +19,7 @@ GameObject:
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 86
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &2219824350256105327
Transform:
@@ -156,16 +156,23 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 7fda9de5aca90194dbd292acb461b816, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Harvestable
id: 22
harvestType: 2
maxHealth: 100
drops:
- item: {fileID: 11400000, guid: 51e850551f3764447b2e8b6168f82e3b, type: 2}
minQuantity: 1
maxQuantity: 2
shakeDuration: 0.4
shakeStrength: 0.2
shakeVibrato: 15
shakeRandomness: 60
toolDrops:
- tool: {fileID: 11400000, guid: 60132cba2202496eb74f2afc1f89c81a, type: 2}
drops:
- item: {fileID: 11400000, guid: 51e850551f3764447b2e8b6168f82e3b, type: 2}
minQuantity: 1
maxQuantity: 3
dropChance: 1
punchScale: 0.15
punchAngle: 8
punchDuration: 0.3
punchVibrato: 6
punchElasticity: 0.5
blockedAngle: 2.5
blockedDuration: 0.2
canRespawn: 1
respawnDelay: 60
onHit:
@@ -190,7 +197,7 @@ GameObject:
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 86
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &6567935216615476887
Transform:
@@ -280,7 +287,7 @@ GameObject:
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 86
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &5914414948368770446
Transform:
@@ -16,7 +16,7 @@ GameObject:
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 86
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &4280536933109484921
Transform:
@@ -106,7 +106,7 @@ GameObject:
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 86
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &3351503495626576030
Transform:
@@ -199,7 +199,7 @@ GameObject:
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 86
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &8362526065459812100
Transform:
@@ -336,16 +336,23 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 7fda9de5aca90194dbd292acb461b816, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Harvestable
id: 87
harvestType: 2
maxHealth: 100
drops:
- item: {fileID: 11400000, guid: 51e850551f3764447b2e8b6168f82e3b, type: 2}
minQuantity: 1
maxQuantity: 2
shakeDuration: 0.4
shakeStrength: 0.2
shakeVibrato: 15
shakeRandomness: 60
toolDrops:
- tool: {fileID: 11400000, guid: 60132cba2202496eb74f2afc1f89c81a, type: 2}
drops:
- item: {fileID: 11400000, guid: 51e850551f3764447b2e8b6168f82e3b, type: 2}
minQuantity: 1
maxQuantity: 3
dropChance: 1
punchScale: 0.15
punchAngle: 8
punchDuration: 0.3
punchVibrato: 6
punchElasticity: 0.5
blockedAngle: 2.5
blockedDuration: 0.2
canRespawn: 1
respawnDelay: 60
onHit:
@@ -16,7 +16,7 @@ GameObject:
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 86
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &6205293919350992614
Transform:
@@ -109,7 +109,7 @@ GameObject:
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 86
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &4762080378362873693
Transform:
@@ -246,16 +246,23 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 7fda9de5aca90194dbd292acb461b816, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Harvestable
id: 53
harvestType: 2
maxHealth: 100
drops:
- item: {fileID: 11400000, guid: 51e850551f3764447b2e8b6168f82e3b, type: 2}
minQuantity: 1
maxQuantity: 2
shakeDuration: 0.4
shakeStrength: 0.2
shakeVibrato: 15
shakeRandomness: 60
toolDrops:
- tool: {fileID: 11400000, guid: 60132cba2202496eb74f2afc1f89c81a, type: 2}
drops:
- item: {fileID: 11400000, guid: 51e850551f3764447b2e8b6168f82e3b, type: 2}
minQuantity: 1
maxQuantity: 3
dropChance: 1
punchScale: 0.15
punchAngle: 8
punchDuration: 0.3
punchVibrato: 6
punchElasticity: 0.5
blockedAngle: 2.5
blockedDuration: 0.2
canRespawn: 1
respawnDelay: 60
onHit:
@@ -280,7 +287,7 @@ GameObject:
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 86
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1010964867449484015
Transform:
@@ -16,7 +16,7 @@ GameObject:
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 86
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &5672072038109178627
Transform:
@@ -106,7 +106,7 @@ GameObject:
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 86
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &5444124662913614523
Transform:
@@ -199,7 +199,7 @@ GameObject:
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 86
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &5243363827767699911
Transform:
@@ -336,16 +336,23 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 7fda9de5aca90194dbd292acb461b816, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Harvestable
id: 61
harvestType: 2
maxHealth: 100
drops:
- item: {fileID: 11400000, guid: 51e850551f3764447b2e8b6168f82e3b, type: 2}
minQuantity: 1
maxQuantity: 2
shakeDuration: 0.4
shakeStrength: 0.2
shakeVibrato: 15
shakeRandomness: 60
toolDrops:
- tool: {fileID: 11400000, guid: 60132cba2202496eb74f2afc1f89c81a, type: 2}
drops:
- item: {fileID: 11400000, guid: 51e850551f3764447b2e8b6168f82e3b, type: 2}
minQuantity: 1
maxQuantity: 3
dropChance: 1
punchScale: 0.15
punchAngle: 8
punchDuration: 0.3
punchVibrato: 6
punchElasticity: 0.5
blockedAngle: 2.5
blockedDuration: 0.2
canRespawn: 1
respawnDelay: 60
onHit:
@@ -16,7 +16,7 @@ GameObject:
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 20
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &6806464786959562938
Transform:
@@ -109,7 +109,7 @@ GameObject:
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 20
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &8402525821647893593
Transform:
@@ -241,16 +241,23 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 7fda9de5aca90194dbd292acb461b816, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Harvestable
id: 84
harvestType: 2
maxHealth: 100
drops:
- item: {fileID: 11400000, guid: 51e850551f3764447b2e8b6168f82e3b, type: 2}
minQuantity: 1
maxQuantity: 2
shakeDuration: 0.4
shakeStrength: 0.2
shakeVibrato: 15
shakeRandomness: 60
toolDrops:
- tool: {fileID: 11400000, guid: 60132cba2202496eb74f2afc1f89c81a, type: 2}
drops:
- item: {fileID: 11400000, guid: 51e850551f3764447b2e8b6168f82e3b, type: 2}
minQuantity: 1
maxQuantity: 3
dropChance: 1
punchScale: 0.15
punchAngle: 8
punchDuration: 0.3
punchVibrato: 6
punchElasticity: 0.5
blockedAngle: 2.5
blockedDuration: 0.2
canRespawn: 1
respawnDelay: 60
onHit:
@@ -19,7 +19,7 @@ GameObject:
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 20
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &4970298923497092992
Transform:
@@ -151,16 +151,23 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 7fda9de5aca90194dbd292acb461b816, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Harvestable
id: 77
harvestType: 2
maxHealth: 100
drops:
- item: {fileID: 11400000, guid: 51e850551f3764447b2e8b6168f82e3b, type: 2}
minQuantity: 1
maxQuantity: 2
shakeDuration: 0.4
shakeStrength: 0.2
shakeVibrato: 15
shakeRandomness: 60
toolDrops:
- tool: {fileID: 11400000, guid: 60132cba2202496eb74f2afc1f89c81a, type: 2}
drops:
- item: {fileID: 11400000, guid: 51e850551f3764447b2e8b6168f82e3b, type: 2}
minQuantity: 1
maxQuantity: 3
dropChance: 1
punchScale: 0.15
punchAngle: 8
punchDuration: 0.3
punchVibrato: 6
punchElasticity: 0.5
blockedAngle: 2.5
blockedDuration: 0.2
canRespawn: 1
respawnDelay: 60
onHit:
@@ -185,7 +192,7 @@ GameObject:
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 20
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &8822011804714126119
Transform:
@@ -16,7 +16,7 @@ GameObject:
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 20
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &5154199213897954143
Transform:
@@ -109,7 +109,7 @@ GameObject:
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 20
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1275143432306138816
Transform:
@@ -241,16 +241,23 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 7fda9de5aca90194dbd292acb461b816, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Harvestable
id: 67
harvestType: 2
maxHealth: 100
drops:
- item: {fileID: 11400000, guid: 51e850551f3764447b2e8b6168f82e3b, type: 2}
minQuantity: 1
maxQuantity: 2
shakeDuration: 0.4
shakeStrength: 0.2
shakeVibrato: 15
shakeRandomness: 60
toolDrops:
- tool: {fileID: 11400000, guid: 60132cba2202496eb74f2afc1f89c81a, type: 2}
drops:
- item: {fileID: 11400000, guid: 51e850551f3764447b2e8b6168f82e3b, type: 2}
minQuantity: 1
maxQuantity: 3
dropChance: 1
punchScale: 0.15
punchAngle: 8
punchDuration: 0.3
punchVibrato: 6
punchElasticity: 0.5
blockedAngle: 2.5
blockedDuration: 0.2
canRespawn: 1
respawnDelay: 60
onHit:
@@ -185,7 +185,7 @@ MonoBehaviour:
_initializeOrder: 0
_preventDespawnOnDisconnect: 0
_defaultDespawnType: 0
_initializedTimestamp: -8584181721604556210
_initializedTimestamp: -8584169414543529327
--- !u!114 &6667641716399555817
MonoBehaviour:
m_ObjectHideFlags: 0
@@ -65,7 +65,7 @@ MonoBehaviour:
_spectatorInterpolation: 2
_enableTeleport: 0
_teleportThreshold: 1
<PrefabId>k__BackingField: 1
<PrefabId>k__BackingField: 0
<SpawnableCollectionId>k__BackingField: 0
<AssetPathHash>k__BackingField: 2903053101402871766
SceneId: 0
@@ -93,7 +93,7 @@ MonoBehaviour:
_initializeOrder: 0
_preventDespawnOnDisconnect: 0
_defaultDespawnType: 0
_initializedTimestamp: -8584181721604556210
_initializedTimestamp: -8584169414543529327
--- !u!114 &6667641716399555817
MonoBehaviour:
m_ObjectHideFlags: 0
@@ -249,7 +249,7 @@ MonoBehaviour:
_spectatorInterpolation: 2
_enableTeleport: 0
_teleportThreshold: 1
<PrefabId>k__BackingField: 8
<PrefabId>k__BackingField: 7
<SpawnableCollectionId>k__BackingField: 0
<AssetPathHash>k__BackingField: 8265366384202762268
SceneId: 0
@@ -277,7 +277,7 @@ MonoBehaviour:
_initializeOrder: 0
_preventDespawnOnDisconnect: 0
_defaultDespawnType: 0
_initializedTimestamp: -8584181721604556210
_initializedTimestamp: -8584169414543529327
--- !u!114 &6130968803401110125
MonoBehaviour:
m_ObjectHideFlags: 0
@@ -65,7 +65,7 @@ MonoBehaviour:
_spectatorInterpolation: 2
_enableTeleport: 0
_teleportThreshold: 1
<PrefabId>k__BackingField: 16
<PrefabId>k__BackingField: 19
<SpawnableCollectionId>k__BackingField: 0
<AssetPathHash>k__BackingField: 17307177893486029436
SceneId: 0
@@ -93,7 +93,7 @@ MonoBehaviour:
_initializeOrder: 0
_preventDespawnOnDisconnect: 0
_defaultDespawnType: 0
_initializedTimestamp: -8584181721604556210
_initializedTimestamp: -8584169414543529327
--- !u!114 &6667641716399555817
MonoBehaviour:
m_ObjectHideFlags: 0
@@ -66,7 +66,7 @@ MonoBehaviour:
_spectatorInterpolation: 2
_enableTeleport: 0
_teleportThreshold: 1
<PrefabId>k__BackingField: 11
<PrefabId>k__BackingField: 12
<SpawnableCollectionId>k__BackingField: 0
<AssetPathHash>k__BackingField: 13441272123366128544
SceneId: 0
@@ -94,7 +94,7 @@ MonoBehaviour:
_initializeOrder: 0
_preventDespawnOnDisconnect: 0
_defaultDespawnType: 0
_initializedTimestamp: -8584181721604556210
_initializedTimestamp: -8584169414543529327
--- !u!114 &6130968803401110125
MonoBehaviour:
m_ObjectHideFlags: 0
@@ -66,7 +66,7 @@ MonoBehaviour:
_spectatorInterpolation: 1
_enableTeleport: 0
_teleportThreshold: 1
<PrefabId>k__BackingField: 7
<PrefabId>k__BackingField: 6
<SpawnableCollectionId>k__BackingField: 0
<AssetPathHash>k__BackingField: 7357667251099481026
SceneId: 0
@@ -95,7 +95,7 @@ MonoBehaviour:
_initializeOrder: 0
_preventDespawnOnDisconnect: 0
_defaultDespawnType: 0
_initializedTimestamp: -8584181721604556210
_initializedTimestamp: -8584169414543529327
--- !u!114 &2759061792589502182
MonoBehaviour:
m_ObjectHideFlags: 0
@@ -156,7 +156,7 @@ MonoBehaviour:
_spectatorInterpolation: 2
_enableTeleport: 0
_teleportThreshold: 1
<PrefabId>k__BackingField: 12
<PrefabId>k__BackingField: 13
<SpawnableCollectionId>k__BackingField: 0
<AssetPathHash>k__BackingField: 15851448279207409322
SceneId: 0
@@ -184,7 +184,7 @@ MonoBehaviour:
_initializeOrder: 0
_preventDespawnOnDisconnect: 0
_defaultDespawnType: 0
_initializedTimestamp: -8584181721604556210
_initializedTimestamp: -8584169414543529327
--- !u!114 &4670340455971777434
MonoBehaviour:
m_ObjectHideFlags: 0
@@ -182,7 +182,7 @@ MonoBehaviour:
_initializeOrder: 0
_preventDespawnOnDisconnect: 0
_defaultDespawnType: 0
_initializedTimestamp: -8584181721604556210
_initializedTimestamp: -8584169414543529327
--- !u!114 &437322326027960749
MonoBehaviour:
m_ObjectHideFlags: 0
@@ -85,7 +85,7 @@ MonoBehaviour:
_spectatorInterpolation: 2
_enableTeleport: 0
_teleportThreshold: 1
<PrefabId>k__BackingField: 9
<PrefabId>k__BackingField: 8
<SpawnableCollectionId>k__BackingField: 0
<AssetPathHash>k__BackingField: 8652468816125699328
SceneId: 0
@@ -114,7 +114,7 @@ MonoBehaviour:
_initializeOrder: 0
_preventDespawnOnDisconnect: 0
_defaultDespawnType: 0
_initializedTimestamp: -8584181721604556210
_initializedTimestamp: -8584169414543529327
--- !u!143 &4148834954576211901
CharacterController:
m_ObjectHideFlags: 0
@@ -399,7 +399,7 @@ MonoBehaviour:
_initializeOrder: 0
_preventDespawnOnDisconnect: 0
_defaultDespawnType: 0
_initializedTimestamp: -8584181721604556210
_initializedTimestamp: -8584169414543529327
--- !u!54 &1517669882
Rigidbody:
m_ObjectHideFlags: 0
@@ -319,7 +319,7 @@ MonoBehaviour:
_spectatorInterpolation: 2
_enableTeleport: 0
_teleportThreshold: 1
<PrefabId>k__BackingField: 17
<PrefabId>k__BackingField: 21
<SpawnableCollectionId>k__BackingField: 0
<AssetPathHash>k__BackingField: 18062267916601837655
SceneId: 0
@@ -347,7 +347,7 @@ MonoBehaviour:
_initializeOrder: 0
_preventDespawnOnDisconnect: 0
_defaultDespawnType: 0
_initializedTimestamp: -8584181721604556210
_initializedTimestamp: -8584169414543529327
--- !u!114 &6420552185407096997
MonoBehaviour:
m_ObjectHideFlags: 0
@@ -346,7 +346,7 @@ MonoBehaviour:
_spectatorInterpolation: 2
_enableTeleport: 0
_teleportThreshold: 1
<PrefabId>k__BackingField: 15
<PrefabId>k__BackingField: 18
<SpawnableCollectionId>k__BackingField: 0
<AssetPathHash>k__BackingField: 17300898577088521684
SceneId: 0
@@ -374,7 +374,7 @@ MonoBehaviour:
_initializeOrder: 0
_preventDespawnOnDisconnect: 0
_defaultDespawnType: 0
_initializedTimestamp: -8584181721604556210
_initializedTimestamp: -8584169414543529327
--- !u!114 &6767263130208162619
MonoBehaviour:
m_ObjectHideFlags: 0
+8
View File
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 1732515ee69158247988715da637d349
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
Binary file not shown.
+110
View File
@@ -0,0 +1,110 @@
fileFormatVersion: 2
guid: c4627c2a24e5ef44290fe55663a464fb
ModelImporter:
serializedVersion: 24200
internalIDToNameTable: []
externalObjects: {}
materials:
materialImportMode: 2
materialName: 0
materialSearch: 1
materialLocation: 1
animations:
legacyGenerateAnimations: 4
bakeSimulation: 0
resampleCurves: 1
optimizeGameObjects: 0
removeConstantScaleCurves: 0
motionNodeName:
animationImportErrors:
animationImportWarnings:
animationRetargetingWarnings:
animationDoRetargetingWarnings: 0
importAnimatedCustomProperties: 0
importConstraints: 0
animationCompression: 1
animationRotationError: 0.5
animationPositionError: 0.5
animationScaleError: 0.5
animationWrapMode: 0
extraExposedTransformPaths: []
extraUserProperties: []
clipAnimations: []
isReadable: 0
meshes:
lODScreenPercentages: []
globalScale: 1
meshCompression: 0
addColliders: 0
useSRGBMaterialColor: 1
sortHierarchyByName: 1
importPhysicalCameras: 1
importVisibility: 1
importBlendShapes: 1
importCameras: 1
importLights: 1
nodeNameCollisionStrategy: 1
fileIdsGeneration: 2
swapUVChannels: 0
generateSecondaryUV: 0
useFileUnits: 1
keepQuads: 0
weldVertices: 1
bakeAxisConversion: 0
preserveHierarchy: 0
skinWeightsMode: 0
maxBonesPerVertex: 4
minBoneWeight: 0.001
optimizeBones: 1
generateMeshLods: 0
meshLodGenerationFlags: 0
maximumMeshLod: -1
meshOptimizationFlags: -1
indexFormat: 0
secondaryUVAngleDistortion: 8
secondaryUVAreaDistortion: 15.000001
secondaryUVHardAngle: 88
secondaryUVMarginMethod: 1
secondaryUVMinLightmapResolution: 40
secondaryUVMinObjectScale: 1
secondaryUVPackMargin: 4
useFileScale: 1
strictVertexDataChecks: 0
tangentSpace:
normalSmoothAngle: 60
normalImportMode: 0
tangentImportMode: 3
normalCalculationMode: 4
legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
blendShapeNormalImportMode: 1
normalSmoothingSource: 0
referencedClips: []
importAnimation: 1
humanDescription:
serializedVersion: 3
human: []
skeleton: []
armTwist: 0.5
foreArmTwist: 0.5
upperLegTwist: 0.5
legTwist: 0.5
armStretch: 0.05
legStretch: 0.05
feetSpacing: 0
globalScale: 1
rootMotionBoneName:
hasTranslationDoF: 0
hasExtraRoot: 0
skeletonHasParents: 1
lastHumanDescriptionAvatarSource: {instanceID: 0}
autoGenerateAvatarMappingIfUnspecified: 1
animationType: 2
humanoidOversampling: 1
avatarSetup: 0
addHumanoidExtraRootOnlyWhenUsingAvatar: 1
importBlendShapeDeformPercent: 1
remapMaterialsIfMaterialImportModeIsNone: 0
additionalBone: 0
userData:
assetBundleName:
assetBundleVariant:
Binary file not shown.
+110
View File
@@ -0,0 +1,110 @@
fileFormatVersion: 2
guid: e78c7da004d047f429dd97bcd3321d55
ModelImporter:
serializedVersion: 24200
internalIDToNameTable: []
externalObjects: {}
materials:
materialImportMode: 2
materialName: 0
materialSearch: 1
materialLocation: 1
animations:
legacyGenerateAnimations: 4
bakeSimulation: 0
resampleCurves: 1
optimizeGameObjects: 0
removeConstantScaleCurves: 0
motionNodeName:
animationImportErrors:
animationImportWarnings:
animationRetargetingWarnings:
animationDoRetargetingWarnings: 0
importAnimatedCustomProperties: 0
importConstraints: 0
animationCompression: 1
animationRotationError: 0.5
animationPositionError: 0.5
animationScaleError: 0.5
animationWrapMode: 0
extraExposedTransformPaths: []
extraUserProperties: []
clipAnimations: []
isReadable: 0
meshes:
lODScreenPercentages: []
globalScale: 1
meshCompression: 0
addColliders: 0
useSRGBMaterialColor: 1
sortHierarchyByName: 1
importPhysicalCameras: 1
importVisibility: 1
importBlendShapes: 1
importCameras: 1
importLights: 1
nodeNameCollisionStrategy: 1
fileIdsGeneration: 2
swapUVChannels: 0
generateSecondaryUV: 0
useFileUnits: 1
keepQuads: 0
weldVertices: 1
bakeAxisConversion: 0
preserveHierarchy: 0
skinWeightsMode: 0
maxBonesPerVertex: 4
minBoneWeight: 0.001
optimizeBones: 1
generateMeshLods: 0
meshLodGenerationFlags: 0
maximumMeshLod: -1
meshOptimizationFlags: -1
indexFormat: 0
secondaryUVAngleDistortion: 8
secondaryUVAreaDistortion: 15.000001
secondaryUVHardAngle: 88
secondaryUVMarginMethod: 1
secondaryUVMinLightmapResolution: 40
secondaryUVMinObjectScale: 1
secondaryUVPackMargin: 4
useFileScale: 1
strictVertexDataChecks: 0
tangentSpace:
normalSmoothAngle: 60
normalImportMode: 0
tangentImportMode: 3
normalCalculationMode: 4
legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
blendShapeNormalImportMode: 1
normalSmoothingSource: 0
referencedClips: []
importAnimation: 1
humanDescription:
serializedVersion: 3
human: []
skeleton: []
armTwist: 0.5
foreArmTwist: 0.5
upperLegTwist: 0.5
legTwist: 0.5
armStretch: 0.05
legStretch: 0.05
feetSpacing: 0
globalScale: 1
rootMotionBoneName:
hasTranslationDoF: 0
hasExtraRoot: 0
skeletonHasParents: 1
lastHumanDescriptionAvatarSource: {instanceID: 0}
autoGenerateAvatarMappingIfUnspecified: 1
animationType: 2
humanoidOversampling: 1
avatarSetup: 0
addHumanoidExtraRootOnlyWhenUsingAvatar: 1
importBlendShapeDeformPercent: 1
remapMaterialsIfMaterialImportModeIsNone: 0
additionalBone: 0
userData:
assetBundleName:
assetBundleVariant:
Binary file not shown.
@@ -0,0 +1,110 @@
fileFormatVersion: 2
guid: 308c4c6aa7df5ef45ad84b0c139e7f17
ModelImporter:
serializedVersion: 24200
internalIDToNameTable: []
externalObjects: {}
materials:
materialImportMode: 2
materialName: 0
materialSearch: 1
materialLocation: 1
animations:
legacyGenerateAnimations: 4
bakeSimulation: 0
resampleCurves: 1
optimizeGameObjects: 0
removeConstantScaleCurves: 0
motionNodeName:
animationImportErrors:
animationImportWarnings:
animationRetargetingWarnings:
animationDoRetargetingWarnings: 0
importAnimatedCustomProperties: 0
importConstraints: 0
animationCompression: 1
animationRotationError: 0.5
animationPositionError: 0.5
animationScaleError: 0.5
animationWrapMode: 0
extraExposedTransformPaths: []
extraUserProperties: []
clipAnimations: []
isReadable: 0
meshes:
lODScreenPercentages: []
globalScale: 1
meshCompression: 0
addColliders: 0
useSRGBMaterialColor: 1
sortHierarchyByName: 1
importPhysicalCameras: 1
importVisibility: 1
importBlendShapes: 1
importCameras: 1
importLights: 1
nodeNameCollisionStrategy: 1
fileIdsGeneration: 2
swapUVChannels: 0
generateSecondaryUV: 0
useFileUnits: 1
keepQuads: 0
weldVertices: 1
bakeAxisConversion: 0
preserveHierarchy: 0
skinWeightsMode: 0
maxBonesPerVertex: 4
minBoneWeight: 0.001
optimizeBones: 1
generateMeshLods: 0
meshLodGenerationFlags: 0
maximumMeshLod: -1
meshOptimizationFlags: -1
indexFormat: 0
secondaryUVAngleDistortion: 8
secondaryUVAreaDistortion: 15.000001
secondaryUVHardAngle: 88
secondaryUVMarginMethod: 1
secondaryUVMinLightmapResolution: 40
secondaryUVMinObjectScale: 1
secondaryUVPackMargin: 4
useFileScale: 1
strictVertexDataChecks: 0
tangentSpace:
normalSmoothAngle: 60
normalImportMode: 0
tangentImportMode: 3
normalCalculationMode: 4
legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
blendShapeNormalImportMode: 1
normalSmoothingSource: 0
referencedClips: []
importAnimation: 1
humanDescription:
serializedVersion: 3
human: []
skeleton: []
armTwist: 0.5
foreArmTwist: 0.5
upperLegTwist: 0.5
legTwist: 0.5
armStretch: 0.05
legStretch: 0.05
feetSpacing: 0
globalScale: 1
rootMotionBoneName:
hasTranslationDoF: 0
hasExtraRoot: 0
skeletonHasParents: 1
lastHumanDescriptionAvatarSource: {instanceID: 0}
autoGenerateAvatarMappingIfUnspecified: 1
animationType: 2
humanoidOversampling: 1
avatarSetup: 0
addHumanoidExtraRootOnlyWhenUsingAvatar: 1
importBlendShapeDeformPercent: 1
remapMaterialsIfMaterialImportModeIsNone: 0
additionalBone: 0
userData:
assetBundleName:
assetBundleVariant:
Binary file not shown.
@@ -0,0 +1,110 @@
fileFormatVersion: 2
guid: 2abe49436f5479241b87304e791a0126
ModelImporter:
serializedVersion: 24200
internalIDToNameTable: []
externalObjects: {}
materials:
materialImportMode: 2
materialName: 0
materialSearch: 1
materialLocation: 1
animations:
legacyGenerateAnimations: 4
bakeSimulation: 0
resampleCurves: 1
optimizeGameObjects: 0
removeConstantScaleCurves: 0
motionNodeName:
animationImportErrors:
animationImportWarnings:
animationRetargetingWarnings:
animationDoRetargetingWarnings: 0
importAnimatedCustomProperties: 0
importConstraints: 0
animationCompression: 1
animationRotationError: 0.5
animationPositionError: 0.5
animationScaleError: 0.5
animationWrapMode: 0
extraExposedTransformPaths: []
extraUserProperties: []
clipAnimations: []
isReadable: 0
meshes:
lODScreenPercentages: []
globalScale: 1
meshCompression: 0
addColliders: 0
useSRGBMaterialColor: 1
sortHierarchyByName: 1
importPhysicalCameras: 1
importVisibility: 1
importBlendShapes: 1
importCameras: 1
importLights: 1
nodeNameCollisionStrategy: 1
fileIdsGeneration: 2
swapUVChannels: 0
generateSecondaryUV: 0
useFileUnits: 1
keepQuads: 0
weldVertices: 1
bakeAxisConversion: 0
preserveHierarchy: 0
skinWeightsMode: 0
maxBonesPerVertex: 4
minBoneWeight: 0.001
optimizeBones: 1
generateMeshLods: 0
meshLodGenerationFlags: 0
maximumMeshLod: -1
meshOptimizationFlags: -1
indexFormat: 0
secondaryUVAngleDistortion: 8
secondaryUVAreaDistortion: 15.000001
secondaryUVHardAngle: 88
secondaryUVMarginMethod: 1
secondaryUVMinLightmapResolution: 40
secondaryUVMinObjectScale: 1
secondaryUVPackMargin: 4
useFileScale: 1
strictVertexDataChecks: 0
tangentSpace:
normalSmoothAngle: 60
normalImportMode: 0
tangentImportMode: 3
normalCalculationMode: 4
legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
blendShapeNormalImportMode: 1
normalSmoothingSource: 0
referencedClips: []
importAnimation: 1
humanDescription:
serializedVersion: 3
human: []
skeleton: []
armTwist: 0.5
foreArmTwist: 0.5
upperLegTwist: 0.5
legTwist: 0.5
armStretch: 0.05
legStretch: 0.05
feetSpacing: 0
globalScale: 1
rootMotionBoneName:
hasTranslationDoF: 0
hasExtraRoot: 0
skeletonHasParents: 1
lastHumanDescriptionAvatarSource: {instanceID: 0}
autoGenerateAvatarMappingIfUnspecified: 1
animationType: 2
humanoidOversampling: 1
avatarSetup: 0
addHumanoidExtraRootOnlyWhenUsingAvatar: 1
importBlendShapeDeformPercent: 1
remapMaterialsIfMaterialImportModeIsNone: 0
additionalBone: 0
userData:
assetBundleName:
assetBundleVariant:
Binary file not shown.
@@ -0,0 +1,110 @@
fileFormatVersion: 2
guid: 0e8c003416261584dba3d25627309d45
ModelImporter:
serializedVersion: 24200
internalIDToNameTable: []
externalObjects: {}
materials:
materialImportMode: 2
materialName: 0
materialSearch: 1
materialLocation: 1
animations:
legacyGenerateAnimations: 4
bakeSimulation: 0
resampleCurves: 1
optimizeGameObjects: 0
removeConstantScaleCurves: 0
motionNodeName:
animationImportErrors:
animationImportWarnings:
animationRetargetingWarnings:
animationDoRetargetingWarnings: 0
importAnimatedCustomProperties: 0
importConstraints: 0
animationCompression: 1
animationRotationError: 0.5
animationPositionError: 0.5
animationScaleError: 0.5
animationWrapMode: 0
extraExposedTransformPaths: []
extraUserProperties: []
clipAnimations: []
isReadable: 0
meshes:
lODScreenPercentages: []
globalScale: 1
meshCompression: 0
addColliders: 0
useSRGBMaterialColor: 1
sortHierarchyByName: 1
importPhysicalCameras: 1
importVisibility: 1
importBlendShapes: 1
importCameras: 1
importLights: 1
nodeNameCollisionStrategy: 1
fileIdsGeneration: 2
swapUVChannels: 0
generateSecondaryUV: 0
useFileUnits: 1
keepQuads: 0
weldVertices: 1
bakeAxisConversion: 0
preserveHierarchy: 0
skinWeightsMode: 0
maxBonesPerVertex: 4
minBoneWeight: 0.001
optimizeBones: 1
generateMeshLods: 0
meshLodGenerationFlags: 0
maximumMeshLod: -1
meshOptimizationFlags: -1
indexFormat: 0
secondaryUVAngleDistortion: 8
secondaryUVAreaDistortion: 15.000001
secondaryUVHardAngle: 88
secondaryUVMarginMethod: 1
secondaryUVMinLightmapResolution: 40
secondaryUVMinObjectScale: 1
secondaryUVPackMargin: 4
useFileScale: 1
strictVertexDataChecks: 0
tangentSpace:
normalSmoothAngle: 60
normalImportMode: 0
tangentImportMode: 3
normalCalculationMode: 4
legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
blendShapeNormalImportMode: 1
normalSmoothingSource: 0
referencedClips: []
importAnimation: 1
humanDescription:
serializedVersion: 3
human: []
skeleton: []
armTwist: 0.5
foreArmTwist: 0.5
upperLegTwist: 0.5
legTwist: 0.5
armStretch: 0.05
legStretch: 0.05
feetSpacing: 0
globalScale: 1
rootMotionBoneName:
hasTranslationDoF: 0
hasExtraRoot: 0
skeletonHasParents: 1
lastHumanDescriptionAvatarSource: {instanceID: 0}
autoGenerateAvatarMappingIfUnspecified: 1
animationType: 2
humanoidOversampling: 1
avatarSetup: 0
addHumanoidExtraRootOnlyWhenUsingAvatar: 1
importBlendShapeDeformPercent: 1
remapMaterialsIfMaterialImportModeIsNone: 0
additionalBone: 0
userData:
assetBundleName:
assetBundleVariant:
Binary file not shown.
+110
View File
@@ -0,0 +1,110 @@
fileFormatVersion: 2
guid: 96082e795316cee47b001bfe52dc298b
ModelImporter:
serializedVersion: 24200
internalIDToNameTable: []
externalObjects: {}
materials:
materialImportMode: 2
materialName: 0
materialSearch: 1
materialLocation: 1
animations:
legacyGenerateAnimations: 4
bakeSimulation: 0
resampleCurves: 1
optimizeGameObjects: 0
removeConstantScaleCurves: 0
motionNodeName:
animationImportErrors:
animationImportWarnings:
animationRetargetingWarnings:
animationDoRetargetingWarnings: 0
importAnimatedCustomProperties: 0
importConstraints: 0
animationCompression: 1
animationRotationError: 0.5
animationPositionError: 0.5
animationScaleError: 0.5
animationWrapMode: 0
extraExposedTransformPaths: []
extraUserProperties: []
clipAnimations: []
isReadable: 0
meshes:
lODScreenPercentages: []
globalScale: 1
meshCompression: 0
addColliders: 0
useSRGBMaterialColor: 1
sortHierarchyByName: 1
importPhysicalCameras: 1
importVisibility: 1
importBlendShapes: 1
importCameras: 1
importLights: 1
nodeNameCollisionStrategy: 1
fileIdsGeneration: 2
swapUVChannels: 0
generateSecondaryUV: 0
useFileUnits: 1
keepQuads: 0
weldVertices: 1
bakeAxisConversion: 0
preserveHierarchy: 0
skinWeightsMode: 0
maxBonesPerVertex: 4
minBoneWeight: 0.001
optimizeBones: 1
generateMeshLods: 0
meshLodGenerationFlags: 0
maximumMeshLod: -1
meshOptimizationFlags: -1
indexFormat: 0
secondaryUVAngleDistortion: 8
secondaryUVAreaDistortion: 15.000001
secondaryUVHardAngle: 88
secondaryUVMarginMethod: 1
secondaryUVMinLightmapResolution: 40
secondaryUVMinObjectScale: 1
secondaryUVPackMargin: 4
useFileScale: 1
strictVertexDataChecks: 0
tangentSpace:
normalSmoothAngle: 60
normalImportMode: 0
tangentImportMode: 3
normalCalculationMode: 4
legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
blendShapeNormalImportMode: 1
normalSmoothingSource: 0
referencedClips: []
importAnimation: 1
humanDescription:
serializedVersion: 3
human: []
skeleton: []
armTwist: 0.5
foreArmTwist: 0.5
upperLegTwist: 0.5
legTwist: 0.5
armStretch: 0.05
legStretch: 0.05
feetSpacing: 0
globalScale: 1
rootMotionBoneName:
hasTranslationDoF: 0
hasExtraRoot: 0
skeletonHasParents: 1
lastHumanDescriptionAvatarSource: {instanceID: 0}
autoGenerateAvatarMappingIfUnspecified: 1
animationType: 2
humanoidOversampling: 1
avatarSetup: 0
addHumanoidExtraRootOnlyWhenUsingAvatar: 1
importBlendShapeDeformPercent: 1
remapMaterialsIfMaterialImportModeIsNone: 0
additionalBone: 0
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,74 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &78071172308032964
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1015805472424669187}
- component: {fileID: 6021600361211429460}
m_Layer: 0
m_Name: BuildManager
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1015805472424669187
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 78071172308032964}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 772.4896, y: 352.97568, z: 226.42851}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &6021600361211429460
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 78071172308032964}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: bc4a78713a89ab54a806161c5f70f8bb, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Ashwild.Building.BuildManager
menuUI: {fileID: 0}
catalog:
- {fileID: 11400000, guid: 030740a1d4869434fb535225dbe03471, type: 2}
- {fileID: 11400000, guid: 869ce1fcc7aafc4429d8095f5c8ba6b0, type: 2}
- {fileID: 11400000, guid: f37e0d3c7eef5bb40956a640425b1845, type: 2}
- {fileID: 11400000, guid: a42d503226db3774a8ebdce271364b22, type: 2}
aimCamera: {fileID: 0}
placeRange: 8
groundMask:
serializedVersion: 2
m_Bits: 521
useGrid: 0
gridSize: 1
rotationStep: 90
continuousBuild: 1
snapRadius: 1.25
snapPointMask:
serializedVersion: 2
m_Bits: 8192
obstructionMask:
serializedVersion: 2
m_Bits: 512
obstructionPadding: 0.03
buildMask:
serializedVersion: 2
m_Bits: 512
demolitionMaterial: {fileID: 2100000, guid: 0a594aa41ef0d7e428398c2c32772c64, type: 2}
hammerUsesPerAction: 1
@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: fb3189f697e11534299fe0ff296e53bc
guid: 9c3114c2a557da848aa58b1bd2276667
PrefabImporter:
externalObjects: {}
userData:
@@ -0,0 +1,108 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &3427389263313396324
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 748327894251662759}
- component: {fileID: 7141230456228821510}
- component: {fileID: 289947267238384498}
m_Layer: 0
m_Name: BuildRegistry
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &748327894251662759
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3427389263313396324}
serializedVersion: 2
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 654.2982, y: 431.6819, z: 151.70045}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &7141230456228821510
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3427389263313396324}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 26b716c41e9b56b4baafaf13a523ba2e, type: 3}
m_Name:
m_EditorClassIdentifier: FishNet.Runtime::FishNet.Object.NetworkObject
_localLevelOfDetailCalculationType: 0
_useLevelOfDetail: 0
_useRootLevelOfDetail: 1
NetworkObserver: {fileID: 0}
_enablePrediction: 0
_predictionType: 0
_localReconcileCorrectionType: 2
_graphicalObject: {fileID: 0}
_detachGraphicalObject: 0
_enableStateForwarding: 1
_networkTransform: {fileID: 0}
_ownerInterpolation: 1
_ownerSmoothedProperties: 255
_adaptiveInterpolation: 3
_spectatorSmoothedProperties: 255
_spectatorInterpolation: 2
_enableTeleport: 0
_teleportThreshold: 1
<PrefabId>k__BackingField: 10
<SpawnableCollectionId>k__BackingField: 0
<AssetPathHash>k__BackingField: 9975403408747794214
SceneId: 0
SerializedTransformProperties:
Position: {x: 654.2982, y: 431.6819, z: 151.70045}
Rotation: {x: -0, y: -0, z: -0, w: 1}
Scale: {x: 1, y: 1, z: 1}
IsValid: 1
<IsNested>k__BackingField: 0
WasActiveDuringEdit: 0
WasActiveDuringEdit_Set1: 1
<ComponentIndex>k__BackingField: 0
<PredictedSpawn>k__BackingField: {fileID: 0}
<PredictedOwner>k__BackingField: {fileID: 0}
NetworkBehaviours:
- {fileID: 289947267238384498}
InitializedParentNetworkBehaviour: {fileID: 0}
InitializedNestedNetworkObjects: []
RuntimeParentNetworkBehaviour: {fileID: 0}
RuntimeChildNetworkBehaviours: []
_isNetworked: 1
_isSpawnable: 1
_isGlobal: 0
_initializeOrder: 0
_preventDespawnOnDisconnect: 0
_defaultDespawnType: 0
_initializedTimestamp: -8584169414543529327
--- !u!114 &289947267238384498
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3427389263313396324}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: f5d6268ef4905d54b9c4d23c6b54effa, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Ashwild.Building.BuildRegistry
_componentIndexCache: 0
_addedNetworkObject: {fileID: 7141230456228821510}
_networkObjectCache: {fileID: 7141230456228821510}
@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: adbf0247d50ef68409136335af276fc1
guid: 305d603ce48179b43b110ac4344f5b60
PrefabImporter:
externalObjects: {}
userData:
@@ -90,7 +90,7 @@ MonoBehaviour:
_initializeOrder: 0
_preventDespawnOnDisconnect: 0
_defaultDespawnType: 0
_initializedTimestamp: -8584181721604556210
_initializedTimestamp: -8584169414543529327
--- !u!114 &3185372856389979425
MonoBehaviour:
m_ObjectHideFlags: 0
@@ -0,0 +1,48 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &201875898711784295
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 467008878121580390}
- component: {fileID: 4930820130719000481}
m_Layer: 0
m_Name: HudVisibilityToggle
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &467008878121580390
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 201875898711784295}
serializedVersion: 2
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 562.112, y: 401.68655, z: 226.43498}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &4930820130719000481
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 201875898711784295}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: b111841eeafe2814db8f7fb488e56202, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Ashwild.UI.HudVisibilityToggle
toggleKey: 101
alwaysVisible: []
@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 39b04625f47cbc24a93966c3eb0194d2
guid: 071225dca8a312b429e59f7fac6bee64
PrefabImporter:
externalObjects: {}
userData:
@@ -63,7 +63,7 @@ MonoBehaviour:
_spectatorInterpolation: 2
_enableTeleport: 0
_teleportThreshold: 1
<PrefabId>k__BackingField: 14
<PrefabId>k__BackingField: 17
<SpawnableCollectionId>k__BackingField: 0
<AssetPathHash>k__BackingField: 16949488085050316302
SceneId: 0
@@ -90,7 +90,7 @@ MonoBehaviour:
_initializeOrder: 0
_preventDespawnOnDisconnect: 0
_defaultDespawnType: 0
_initializedTimestamp: -8584181721604556210
_initializedTimestamp: -8584169414543529327
--- !u!114 &3704013715362460501
MonoBehaviour:
m_ObjectHideFlags: 0
+8 -7
View File
@@ -75,7 +75,7 @@ Camera:
m_Depth: -1
m_CullingMask:
serializedVersion: 2
m_Bits: 2815
m_Bits: 27391
m_RenderingPath: -1
m_TargetTexture: {fileID: 0}
m_TargetDisplay: 0
@@ -815,7 +815,7 @@ MonoBehaviour:
_spectatorInterpolation: 2
_enableTeleport: 0
_teleportThreshold: 1
<PrefabId>k__BackingField: 13
<PrefabId>k__BackingField: 15
<SpawnableCollectionId>k__BackingField: 0
<AssetPathHash>k__BackingField: 16376119982057009716
SceneId: 0
@@ -836,6 +836,7 @@ MonoBehaviour:
- {fileID: -2455020581440275693}
- {fileID: 4782095384616423459}
- {fileID: 1890885114087150018}
- {fileID: -4423719270533760289}
- {fileID: 656527942023048284}
- {fileID: 4969709554801488359}
InitializedParentNetworkBehaviour: {fileID: 0}
@@ -848,7 +849,7 @@ MonoBehaviour:
_initializeOrder: 0
_preventDespawnOnDisconnect: 0
_defaultDespawnType: 0
_initializedTimestamp: -8584181721604556210
_initializedTimestamp: -8584169414543529327
--- !u!114 &-2455020581440275693
MonoBehaviour:
m_ObjectHideFlags: 0
@@ -1054,9 +1055,9 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: fabb912832c44b945a26c8ef03db222a, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Ashwild.Crafting.CraftDiscovery
_componentIndexCache: 255
_componentIndexCache: 5
_addedNetworkObject: {fileID: -5889822588553870904}
_networkObjectCache: {fileID: 0}
_networkObjectCache: {fileID: -5889822588553870904}
--- !u!114 &656527942023048284
MonoBehaviour:
m_ObjectHideFlags: 0
@@ -1069,7 +1070,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 8809701d89694f5488cc03b300f8dc09, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Ashwild.Network.SessionPresenceNotifier
_componentIndexCache: 5
_componentIndexCache: 6
_addedNetworkObject: {fileID: -5889822588553870904}
_networkObjectCache: {fileID: -5889822588553870904}
--- !u!114 &4969709554801488359
@@ -1084,7 +1085,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 23848f2e7f7ecba4791aa89d5344b3d0, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Ashwild.Network.PlayerBodyVisibility
_componentIndexCache: 6
_componentIndexCache: 7
_addedNetworkObject: {fileID: -5889822588553870904}
_networkObjectCache: {fileID: -5889822588553870904}
bodyRoot: {fileID: 0}
@@ -0,0 +1,223 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &5948094648586919017
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 2886761022184032782}
- component: {fileID: 5997657947119417274}
- component: {fileID: 7507030739449404127}
- component: {fileID: 8239258359241532420}
- component: {fileID: 8751794752429108}
- component: {fileID: 675340278771037740}
m_Layer: 9
m_Name: Chest
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &2886761022184032782
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5948094648586919017}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 5266958205498778288}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!65 &5997657947119417274
BoxCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5948094648586919017}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 3
m_Size: {x: 1.2221766, y: 0.7923986, z: 0.716973}
m_Center: {x: 0.0018180013, y: 0.39221516, z: 0.0063577592}
--- !u!114 &7507030739449404127
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5948094648586919017}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe38331f524a7db4cb3d53381b9ea244, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Ashwild.Building.BuiltStructure
bumpDuration: 0.22
startScaleFactor: 0.7
bumpEase: 27
--- !u!114 &8239258359241532420
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5948094648586919017}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3239767b01eb17642a9aa5c614618ae7, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Ashwild.GrassClearer.ClearGrassOnPlace
--- !u!114 &8751794752429108
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5948094648586919017}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 26b716c41e9b56b4baafaf13a523ba2e, type: 3}
m_Name:
m_EditorClassIdentifier: FishNet.Runtime::FishNet.Object.NetworkObject
_localLevelOfDetailCalculationType: 0
_useLevelOfDetail: 0
_useRootLevelOfDetail: 1
NetworkObserver: {fileID: 0}
_enablePrediction: 0
_predictionType: 0
_localReconcileCorrectionType: 2
_graphicalObject: {fileID: 0}
_detachGraphicalObject: 0
_enableStateForwarding: 1
_networkTransform: {fileID: 0}
_ownerInterpolation: 1
_ownerSmoothedProperties: 255
_adaptiveInterpolation: 3
_spectatorSmoothedProperties: 255
_spectatorInterpolation: 2
_enableTeleport: 0
_teleportThreshold: 1
<PrefabId>k__BackingField: 1
<SpawnableCollectionId>k__BackingField: 0
<AssetPathHash>k__BackingField: 4007524062421809988
SceneId: 0
SerializedTransformProperties:
Position: {x: 0, y: 0, z: 0}
Rotation: {x: 0, y: 0, z: 0, w: 1}
Scale: {x: 1, y: 1, z: 1}
IsValid: 1
<IsNested>k__BackingField: 0
WasActiveDuringEdit: 0
WasActiveDuringEdit_Set1: 1
<ComponentIndex>k__BackingField: 0
<PredictedSpawn>k__BackingField: {fileID: 0}
<PredictedOwner>k__BackingField: {fileID: 0}
NetworkBehaviours:
- {fileID: 675340278771037740}
InitializedParentNetworkBehaviour: {fileID: 0}
InitializedNestedNetworkObjects: []
RuntimeParentNetworkBehaviour: {fileID: 0}
RuntimeChildNetworkBehaviours: []
_isNetworked: 1
_isSpawnable: 1
_isGlobal: 0
_initializeOrder: 0
_preventDespawnOnDisconnect: 0
_defaultDespawnType: 0
_initializedTimestamp: -8584169414543529327
--- !u!114 &675340278771037740
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5948094648586919017}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: ee73c1f9305ee50408bbbee938a15194, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Ashwild.Storage.Chest
_componentIndexCache: 0
_addedNetworkObject: {fileID: 8751794752429108}
_networkObjectCache: {fileID: 8751794752429108}
data: {fileID: 11400000, guid: 38eb565e82ffe934ab6d60830d1d453a, type: 2}
--- !u!1001 &3661186797030908957
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 2886761022184032782}
m_Modifications:
- target: {fileID: 8111840307215440919, guid: 6a1de89366a3f0741877f7cd3ca11cd9, type: 3}
propertyPath: m_Name
value: Chest
objectReference: {fileID: 0}
- target: {fileID: 8924123916003559085, guid: 6a1de89366a3f0741877f7cd3ca11cd9, type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8924123916003559085, guid: 6a1de89366a3f0741877f7cd3ca11cd9, type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8924123916003559085, guid: 6a1de89366a3f0741877f7cd3ca11cd9, type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8924123916003559085, guid: 6a1de89366a3f0741877f7cd3ca11cd9, type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 8924123916003559085, guid: 6a1de89366a3f0741877f7cd3ca11cd9, type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8924123916003559085, guid: 6a1de89366a3f0741877f7cd3ca11cd9, type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8924123916003559085, guid: 6a1de89366a3f0741877f7cd3ca11cd9, type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8924123916003559085, guid: 6a1de89366a3f0741877f7cd3ca11cd9, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8924123916003559085, guid: 6a1de89366a3f0741877f7cd3ca11cd9, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8924123916003559085, guid: 6a1de89366a3f0741877f7cd3ca11cd9, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 6a1de89366a3f0741877f7cd3ca11cd9, type: 3}
--- !u!4 &5266958205498778288 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 8924123916003559085, guid: 6a1de89366a3f0741877f7cd3ca11cd9, type: 3}
m_PrefabInstance: {fileID: 3661186797030908957}
m_PrefabAsset: {fileID: 0}
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 5ed00af42fa05fe488f1fc26d1f7c6ce
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,513 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &208794168907284248
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 961227788918199288}
- component: {fileID: 7400803798588129510}
- component: {fileID: 4748379793658233428}
m_Layer: 13
m_Name: Wall_Foot
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &961227788918199288
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 208794168907284248}
serializedVersion: 2
m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071068}
m_LocalPosition: {x: 0, y: -1.254755, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1125945964717581948}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &7400803798588129510
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 208794168907284248}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 977546eeac153c04c9a08997c2a8609c, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Ashwild.Building.BuildSnapPoint
category: 1
--- !u!135 &4748379793658233428
SphereCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 208794168907284248}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 1
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 3
m_Radius: 0.5
m_Center: {x: 0, y: 0, z: 0}
--- !u!1 &1957736865413553716
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 8931836297000691229}
- component: {fileID: 5474830346548817540}
- component: {fileID: 2463972767883860536}
m_Layer: 13
m_Name: Wall_SideB
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &8931836297000691229
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1957736865413553716}
serializedVersion: 2
m_LocalRotation: {x: 0, y: -0.7071068, z: 0, w: 0.7071068}
m_LocalPosition: {x: -1.2308891, y: -0, z: -0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1125945964717581948}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &5474830346548817540
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1957736865413553716}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 977546eeac153c04c9a08997c2a8609c, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Ashwild.Building.BuildSnapPoint
category: 1
--- !u!135 &2463972767883860536
SphereCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1957736865413553716}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 1
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 3
m_Radius: 0.5
m_Center: {x: 0, y: 0, z: 0}
--- !u!1 &3853975807222614992
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1125945964717581948}
m_Layer: 9
m_Name: Snap
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1125945964717581948
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3853975807222614992}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0.0095511675, y: 1.2509763, z: -0.0246767}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 451099174334464957}
- {fileID: 961227788918199288}
- {fileID: 6185007869942481391}
- {fileID: 8931836297000691229}
m_Father: {fileID: 5381473336172268795}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &4838915898288505592
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 5381473336172268795}
- component: {fileID: 6040466525805525261}
- component: {fileID: 1224852433561986364}
- component: {fileID: 1115195620365084337}
- component: {fileID: 7022851135897287337}
m_Layer: 9
m_Name: Mur en bois
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &5381473336172268795
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4838915898288505592}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 5842308575927890256}
- {fileID: 1125945964717581948}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!65 &6040466525805525261
BoxCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4838915898288505592}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 3
m_Size: {x: 2.4617782, y: 2.50951, z: 0.2520886}
m_Center: {x: 0.0095511675, y: 1.2509763, z: -0.0246767}
--- !u!114 &1224852433561986364
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4838915898288505592}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe38331f524a7db4cb3d53381b9ea244, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Ashwild.Building.BuiltStructure
_componentIndexCache: 255
_addedNetworkObject: {fileID: 7022851135897287337}
_networkObjectCache: {fileID: 0}
bumpDuration: 0.22
startScaleFactor: 0.7
bumpEase: 27
--- !u!114 &1115195620365084337
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4838915898288505592}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3239767b01eb17642a9aa5c614618ae7, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Ashwild.GrassClearer.ClearGrassOnPlace
--- !u!114 &7022851135897287337
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4838915898288505592}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 26b716c41e9b56b4baafaf13a523ba2e, type: 3}
m_Name:
m_EditorClassIdentifier: FishNet.Runtime::FishNet.Object.NetworkObject
_localLevelOfDetailCalculationType: 0
_useLevelOfDetail: 0
_useRootLevelOfDetail: 1
NetworkObserver: {fileID: 0}
_enablePrediction: 0
_predictionType: 0
_localReconcileCorrectionType: 2
_graphicalObject: {fileID: 0}
_detachGraphicalObject: 0
_enableStateForwarding: 1
_networkTransform: {fileID: 0}
_ownerInterpolation: 1
_ownerSmoothedProperties: 255
_adaptiveInterpolation: 3
_spectatorSmoothedProperties: 255
_spectatorInterpolation: 2
_enableTeleport: 0
_teleportThreshold: 1
<PrefabId>k__BackingField: 65535
<SpawnableCollectionId>k__BackingField: 0
<AssetPathHash>k__BackingField: 7547832251807066330
SceneId: 0
SerializedTransformProperties:
Position: {x: 0, y: 0, z: 0}
Rotation: {x: 0, y: 0, z: 0, w: 0}
Scale: {x: 0, y: 0, z: 0}
IsValid: 0
<IsNested>k__BackingField: 0
WasActiveDuringEdit: 0
WasActiveDuringEdit_Set1: 1
<ComponentIndex>k__BackingField: 0
<PredictedSpawn>k__BackingField: {fileID: 0}
<PredictedOwner>k__BackingField: {fileID: 0}
NetworkBehaviours: []
InitializedParentNetworkBehaviour: {fileID: 0}
InitializedNestedNetworkObjects: []
RuntimeParentNetworkBehaviour: {fileID: 0}
RuntimeChildNetworkBehaviours: []
_isNetworked: 1
_isSpawnable: 1
_isGlobal: 0
_initializeOrder: 0
_preventDespawnOnDisconnect: 0
_defaultDespawnType: 0
_initializedTimestamp: 0
--- !u!1 &7687585878458156323
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 6185007869942481391}
- component: {fileID: 5189547651752577510}
- component: {fileID: 9115272895995619326}
m_Layer: 13
m_Name: Wall_SideA
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &6185007869942481391
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7687585878458156323}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0.7071068, z: 0, w: 0.7071068}
m_LocalPosition: {x: 1.2308891, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1125945964717581948}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &5189547651752577510
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7687585878458156323}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 977546eeac153c04c9a08997c2a8609c, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Ashwild.Building.BuildSnapPoint
category: 1
--- !u!135 &9115272895995619326
SphereCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7687585878458156323}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 1
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 3
m_Radius: 0.5
m_Center: {x: 0, y: 0, z: 0}
--- !u!1 &8861907097594589065
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 451099174334464957}
- component: {fileID: 4106805795255136685}
- component: {fileID: 4062594637198647446}
m_Layer: 13
m_Name: RoofMount
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &451099174334464957
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8861907097594589065}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0.7071068, z: 0.7071068, w: 0}
m_LocalPosition: {x: 0, y: 1.254755, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1125945964717581948}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &4106805795255136685
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8861907097594589065}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 977546eeac153c04c9a08997c2a8609c, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Ashwild.Building.BuildSnapPoint
category: 2
--- !u!135 &4062594637198647446
SphereCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8861907097594589065}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 1
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 3
m_Radius: 0.5
m_Center: {x: 0, y: 0, z: 0}
--- !u!1001 &7104692011643706215
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 5381473336172268795}
m_Modifications:
- target: {fileID: 421010513357740068, guid: ab9bde15c24bddc43a356e587b96f67c, type: 3}
propertyPath: m_Name
value: Wall_Prefab
objectReference: {fileID: 0}
- target: {fileID: 3714593433905687095, guid: ab9bde15c24bddc43a356e587b96f67c, type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 3714593433905687095, guid: ab9bde15c24bddc43a356e587b96f67c, type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 3714593433905687095, guid: ab9bde15c24bddc43a356e587b96f67c, type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 3714593433905687095, guid: ab9bde15c24bddc43a356e587b96f67c, type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 3714593433905687095, guid: ab9bde15c24bddc43a356e587b96f67c, type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 3714593433905687095, guid: ab9bde15c24bddc43a356e587b96f67c, type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 3714593433905687095, guid: ab9bde15c24bddc43a356e587b96f67c, type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 3714593433905687095, guid: ab9bde15c24bddc43a356e587b96f67c, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 3714593433905687095, guid: ab9bde15c24bddc43a356e587b96f67c, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 3714593433905687095, guid: ab9bde15c24bddc43a356e587b96f67c, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
m_RemovedComponents:
- {fileID: -4039253569498786944, guid: ab9bde15c24bddc43a356e587b96f67c, type: 3}
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: ab9bde15c24bddc43a356e587b96f67c, type: 3}
--- !u!4 &5842308575927890256 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 3714593433905687095, guid: ab9bde15c24bddc43a356e587b96f67c, type: 3}
m_PrefabInstance: {fileID: 7104692011643706215}
m_PrefabAsset: {fileID: 0}
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: c3a62bb0fb1710740825a4eb59437581
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,512 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &3930576761471722039
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 9084291393401960374}
- component: {fileID: 1491351931806317781}
- component: {fileID: 4836794251928457324}
m_Layer: 13
m_Name: Roof_West
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &9084291393401960374
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3930576761471722039}
serializedVersion: 2
m_LocalRotation: {x: 0, y: -0.7071068, z: -0, w: 0.7071068}
m_LocalPosition: {x: -1.2446862, y: 0.139819, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 4263273631203770316}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1491351931806317781
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3930576761471722039}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 977546eeac153c04c9a08997c2a8609c, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Ashwild.Building.BuildSnapPoint
category: 2
--- !u!135 &4836794251928457324
SphereCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3930576761471722039}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 1
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 3
m_Radius: 0.5
m_Center: {x: 0, y: 0, z: 0}
--- !u!1 &5086960793722575589
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 2042489852548193680}
- component: {fileID: 323275278811732031}
- component: {fileID: 7005265325359380249}
m_Layer: 13
m_Name: Roof_South
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &2042489852548193680
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5086960793722575589}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 1, z: 0, w: 0}
m_LocalPosition: {x: 0, y: 0.139819, z: -1.2342937}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 4263273631203770316}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &323275278811732031
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5086960793722575589}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 977546eeac153c04c9a08997c2a8609c, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Ashwild.Building.BuildSnapPoint
category: 2
--- !u!135 &7005265325359380249
SphereCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5086960793722575589}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 1
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 3
m_Radius: 0.5
m_Center: {x: 0, y: 0, z: 0}
--- !u!1 &5439766614215486298
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 4693139356659701411}
- component: {fileID: 1096036710088364051}
- component: {fileID: 7456420191696939690}
m_Layer: 13
m_Name: Roof_East
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &4693139356659701411
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5439766614215486298}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0.7071068, z: 0, w: 0.7071068}
m_LocalPosition: {x: 1.2446862, y: 0.139819, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 4263273631203770316}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1096036710088364051
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5439766614215486298}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 977546eeac153c04c9a08997c2a8609c, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Ashwild.Building.BuildSnapPoint
category: 2
--- !u!135 &7456420191696939690
SphereCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5439766614215486298}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 1
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 3
m_Radius: 0.5
m_Center: {x: 0, y: 0, z: 0}
--- !u!1 &5834752348484076943
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 40923618772375371}
- component: {fileID: 7357605378735079213}
- component: {fileID: 2163295442053852858}
- component: {fileID: 1317689691611017784}
- component: {fileID: 4444565792432705460}
m_Layer: 9
m_Name: Plafond
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &40923618772375371
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5834752348484076943}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 928183785439594325}
- {fileID: 4263273631203770316}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!65 &7357605378735079213
BoxCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5834752348484076943}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 3
m_Size: {x: 2.4893725, y: 0.279638, z: 2.4685874}
m_Center: {x: 0.0011386871, y: 0.14069226, z: -0.012834609}
--- !u!114 &2163295442053852858
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5834752348484076943}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe38331f524a7db4cb3d53381b9ea244, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Ashwild.Building.BuiltStructure
_componentIndexCache: 255
_addedNetworkObject: {fileID: 4444565792432705460}
_networkObjectCache: {fileID: 0}
bumpDuration: 0.22
startScaleFactor: 0.7
bumpEase: 27
--- !u!114 &1317689691611017784
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5834752348484076943}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3239767b01eb17642a9aa5c614618ae7, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Ashwild.GrassClearer.ClearGrassOnPlace
--- !u!114 &4444565792432705460
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5834752348484076943}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 26b716c41e9b56b4baafaf13a523ba2e, type: 3}
m_Name:
m_EditorClassIdentifier: FishNet.Runtime::FishNet.Object.NetworkObject
_localLevelOfDetailCalculationType: 0
_useLevelOfDetail: 0
_useRootLevelOfDetail: 1
NetworkObserver: {fileID: 0}
_enablePrediction: 0
_predictionType: 0
_localReconcileCorrectionType: 2
_graphicalObject: {fileID: 0}
_detachGraphicalObject: 0
_enableStateForwarding: 1
_networkTransform: {fileID: 0}
_ownerInterpolation: 1
_ownerSmoothedProperties: 255
_adaptiveInterpolation: 3
_spectatorSmoothedProperties: 255
_spectatorInterpolation: 2
_enableTeleport: 0
_teleportThreshold: 1
<PrefabId>k__BackingField: 65535
<SpawnableCollectionId>k__BackingField: 0
<AssetPathHash>k__BackingField: 13832512290486259770
SceneId: 0
SerializedTransformProperties:
Position: {x: 0, y: 0, z: 0}
Rotation: {x: 0, y: 0, z: 0, w: 0}
Scale: {x: 0, y: 0, z: 0}
IsValid: 0
<IsNested>k__BackingField: 0
WasActiveDuringEdit: 0
WasActiveDuringEdit_Set1: 1
<ComponentIndex>k__BackingField: 0
<PredictedSpawn>k__BackingField: {fileID: 0}
<PredictedOwner>k__BackingField: {fileID: 0}
NetworkBehaviours: []
InitializedParentNetworkBehaviour: {fileID: 0}
InitializedNestedNetworkObjects: []
RuntimeParentNetworkBehaviour: {fileID: 0}
RuntimeChildNetworkBehaviours: []
_isNetworked: 1
_isSpawnable: 1
_isGlobal: 0
_initializeOrder: 0
_preventDespawnOnDisconnect: 0
_defaultDespawnType: 0
_initializedTimestamp: 0
--- !u!1 &6937546176162827135
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 4263273631203770316}
m_Layer: 9
m_Name: Snap
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &4263273631203770316
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6937546176162827135}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0.0011386871, y: 0.14069226, z: -0.012834609}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 8193433619354612562}
- {fileID: 2042489852548193680}
- {fileID: 4693139356659701411}
- {fileID: 9084291393401960374}
m_Father: {fileID: 40923618772375371}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &8702346745728879574
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 8193433619354612562}
- component: {fileID: 852954361560795950}
- component: {fileID: 6084935132519380220}
m_Layer: 13
m_Name: Roof_North
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &8193433619354612562
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8702346745728879574}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0.139819, z: 1.2342937}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 4263273631203770316}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &852954361560795950
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8702346745728879574}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 977546eeac153c04c9a08997c2a8609c, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Ashwild.Building.BuildSnapPoint
category: 2
--- !u!135 &6084935132519380220
SphereCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8702346745728879574}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 1
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 3
m_Radius: 0.5
m_Center: {x: 0, y: 0, z: 0}
--- !u!1001 &7145404260217701685
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 40923618772375371}
m_Modifications:
- target: {fileID: 6454600228789530739, guid: c3ee7b90147ebe042bf1a600a96b0abf, type: 3}
propertyPath: m_Name
value: WoodCelling_Prefab
objectReference: {fileID: 0}
- target: {fileID: 8054689501814014560, guid: c3ee7b90147ebe042bf1a600a96b0abf, type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8054689501814014560, guid: c3ee7b90147ebe042bf1a600a96b0abf, type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8054689501814014560, guid: c3ee7b90147ebe042bf1a600a96b0abf, type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8054689501814014560, guid: c3ee7b90147ebe042bf1a600a96b0abf, type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 8054689501814014560, guid: c3ee7b90147ebe042bf1a600a96b0abf, type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8054689501814014560, guid: c3ee7b90147ebe042bf1a600a96b0abf, type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8054689501814014560, guid: c3ee7b90147ebe042bf1a600a96b0abf, type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8054689501814014560, guid: c3ee7b90147ebe042bf1a600a96b0abf, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8054689501814014560, guid: c3ee7b90147ebe042bf1a600a96b0abf, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8054689501814014560, guid: c3ee7b90147ebe042bf1a600a96b0abf, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: c3ee7b90147ebe042bf1a600a96b0abf, type: 3}
--- !u!4 &928183785439594325 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 8054689501814014560, guid: c3ee7b90147ebe042bf1a600a96b0abf, type: 3}
m_PrefabInstance: {fileID: 7145404260217701685}
m_PrefabAsset: {fileID: 0}
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 76972b4f65be7b14c99bf7c5df0efaf4
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,785 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &3015257535522599058
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 4945787393932429376}
- component: {fileID: 2740378140357890900}
- component: {fileID: 1517015390480547612}
m_Layer: 13
m_Name: Floor_East
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &4945787393932429376
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3015257535522599058}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0.7071068, z: 0, w: 0.7071068}
m_LocalPosition: {x: 1.2446862, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1028507122493498974}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &2740378140357890900
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3015257535522599058}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 977546eeac153c04c9a08997c2a8609c, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Ashwild.Building.BuildSnapPoint
category: 0
--- !u!135 &1517015390480547612
SphereCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3015257535522599058}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 1
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 3
m_Radius: 0.5
m_Center: {x: 0, y: 0, z: 0}
--- !u!1 &3183415615932361763
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 7186651538238987014}
- component: {fileID: 2291544757555110270}
- component: {fileID: 6858850823605817203}
- component: {fileID: 778683605449396331}
- component: {fileID: 7405293751935118856}
m_Layer: 9
m_Name: Sol en bois
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &7186651538238987014
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3183415615932361763}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 3144909205180013477}
- {fileID: 1028507122493498974}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!65 &2291544757555110270
BoxCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3183415615932361763}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 3
m_Size: {x: 2.4893725, y: 0.279638, z: 2.4685874}
m_Center: {x: 0.0011386871, y: 0.14069226, z: -0.012834609}
--- !u!114 &6858850823605817203
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3183415615932361763}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe38331f524a7db4cb3d53381b9ea244, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Ashwild.Building.BuiltStructure
_componentIndexCache: 255
_addedNetworkObject: {fileID: 7405293751935118856}
_networkObjectCache: {fileID: 0}
bumpDuration: 0.22
startScaleFactor: 0.7
bumpEase: 27
--- !u!114 &778683605449396331
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3183415615932361763}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3239767b01eb17642a9aa5c614618ae7, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Ashwild.GrassClearer.ClearGrassOnPlace
--- !u!114 &7405293751935118856
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3183415615932361763}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 26b716c41e9b56b4baafaf13a523ba2e, type: 3}
m_Name:
m_EditorClassIdentifier: FishNet.Runtime::FishNet.Object.NetworkObject
_localLevelOfDetailCalculationType: 0
_useLevelOfDetail: 0
_useRootLevelOfDetail: 1
NetworkObserver: {fileID: 0}
_enablePrediction: 0
_predictionType: 0
_localReconcileCorrectionType: 2
_graphicalObject: {fileID: 0}
_detachGraphicalObject: 0
_enableStateForwarding: 1
_networkTransform: {fileID: 0}
_ownerInterpolation: 1
_ownerSmoothedProperties: 255
_adaptiveInterpolation: 3
_spectatorSmoothedProperties: 255
_spectatorInterpolation: 2
_enableTeleport: 0
_teleportThreshold: 1
<PrefabId>k__BackingField: 65535
<SpawnableCollectionId>k__BackingField: 0
<AssetPathHash>k__BackingField: 13925520005596096250
SceneId: 0
SerializedTransformProperties:
Position: {x: 0, y: 0, z: 0}
Rotation: {x: 0, y: 0, z: 0, w: 0}
Scale: {x: 0, y: 0, z: 0}
IsValid: 0
<IsNested>k__BackingField: 0
WasActiveDuringEdit: 0
WasActiveDuringEdit_Set1: 1
<ComponentIndex>k__BackingField: 0
<PredictedSpawn>k__BackingField: {fileID: 0}
<PredictedOwner>k__BackingField: {fileID: 0}
NetworkBehaviours: []
InitializedParentNetworkBehaviour: {fileID: 0}
InitializedNestedNetworkObjects: []
RuntimeParentNetworkBehaviour: {fileID: 0}
RuntimeChildNetworkBehaviours: []
_isNetworked: 1
_isSpawnable: 1
_isGlobal: 0
_initializeOrder: 0
_preventDespawnOnDisconnect: 0
_defaultDespawnType: 0
_initializedTimestamp: 0
--- !u!1 &5016747873711697717
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 6081239821933389395}
- component: {fileID: 5287888658612811049}
- component: {fileID: 559144606326668187}
m_Layer: 13
m_Name: WallMount_North
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &6081239821933389395
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5016747873711697717}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0.7071068, z: 0.7071068, w: 0}
m_LocalPosition: {x: 0, y: 0.139819, z: 1.216}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1028507122493498974}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &5287888658612811049
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5016747873711697717}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 977546eeac153c04c9a08997c2a8609c, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Ashwild.Building.BuildSnapPoint
category: 1
--- !u!135 &559144606326668187
SphereCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5016747873711697717}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 1
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 3
m_Radius: 0.5
m_Center: {x: 0, y: 0, z: 0}
--- !u!1 &5566867004549566263
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 6488288424741899979}
- component: {fileID: 7197472678951274680}
- component: {fileID: 562663470692097558}
m_Layer: 13
m_Name: WallMount_South
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &6488288424741899979
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5566867004549566263}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0.7071068, z: 0.7071068, w: 0}
m_LocalPosition: {x: 0, y: 0.139819, z: -1.206}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1028507122493498974}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &7197472678951274680
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5566867004549566263}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 977546eeac153c04c9a08997c2a8609c, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Ashwild.Building.BuildSnapPoint
category: 1
--- !u!135 &562663470692097558
SphereCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5566867004549566263}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 1
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 3
m_Radius: 0.5
m_Center: {x: 0, y: 0, z: 0}
--- !u!1 &6107000946487921022
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 5997676958723984974}
- component: {fileID: 7905528615082448978}
- component: {fileID: 7789137847735753705}
m_Layer: 13
m_Name: Floor_West
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &5997676958723984974
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6107000946487921022}
serializedVersion: 2
m_LocalRotation: {x: 0, y: -0.7071068, z: -0, w: 0.7071068}
m_LocalPosition: {x: -1.2446862, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1028507122493498974}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &7905528615082448978
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6107000946487921022}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 977546eeac153c04c9a08997c2a8609c, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Ashwild.Building.BuildSnapPoint
category: 0
--- !u!135 &7789137847735753705
SphereCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6107000946487921022}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 1
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 3
m_Radius: 0.5
m_Center: {x: 0, y: 0, z: 0}
--- !u!1 &6388772436464905764
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1271483872477449789}
- component: {fileID: 9207456660066486750}
- component: {fileID: 3220838388077137214}
m_Layer: 13
m_Name: WallMount_West
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1271483872477449789
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6388772436464905764}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0.7071068, z: 0.7071068, w: 0}
m_LocalPosition: {x: -1.186, y: 0.139819, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1028507122493498974}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &9207456660066486750
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6388772436464905764}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 977546eeac153c04c9a08997c2a8609c, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Ashwild.Building.BuildSnapPoint
category: 1
--- !u!135 &3220838388077137214
SphereCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6388772436464905764}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 1
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 3
m_Radius: 0.5
m_Center: {x: 0, y: 0, z: 0}
--- !u!1 &7022636613293831284
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 7320601817753907019}
- component: {fileID: 7144384194673381334}
- component: {fileID: 3122412922055003796}
m_Layer: 13
m_Name: Floor_South
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &7320601817753907019
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7022636613293831284}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 1, z: 0, w: 0}
m_LocalPosition: {x: 0, y: 0, z: -1.2342937}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1028507122493498974}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &7144384194673381334
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7022636613293831284}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 977546eeac153c04c9a08997c2a8609c, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Ashwild.Building.BuildSnapPoint
category: 0
--- !u!135 &3122412922055003796
SphereCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7022636613293831284}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 1
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 3
m_Radius: 0.5
m_Center: {x: 0, y: 0, z: 0}
--- !u!1 &8114284026765641226
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1028507122493498974}
m_Layer: 9
m_Name: Snap
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1028507122493498974
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8114284026765641226}
serializedVersion: 2
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0.0011386871, y: 0.14069226, z: -0.012834609}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 1495899157673761099}
- {fileID: 7320601817753907019}
- {fileID: 4945787393932429376}
- {fileID: 5997676958723984974}
- {fileID: 6081239821933389395}
- {fileID: 6488288424741899979}
- {fileID: 5350324107798645853}
- {fileID: 1271483872477449789}
m_Father: {fileID: 7186651538238987014}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &8668162324072818912
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1495899157673761099}
- component: {fileID: 1974317403837520723}
- component: {fileID: 7627934911936129810}
m_Layer: 13
m_Name: Floor_North
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1495899157673761099
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8668162324072818912}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 1.2342937}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1028507122493498974}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1974317403837520723
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8668162324072818912}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 977546eeac153c04c9a08997c2a8609c, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Ashwild.Building.BuildSnapPoint
category: 0
--- !u!135 &7627934911936129810
SphereCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8668162324072818912}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 1
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 3
m_Radius: 0.5
m_Center: {x: 0, y: 0, z: 0}
--- !u!1 &9034195199641080368
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 5350324107798645853}
- component: {fileID: 4905755451283525879}
- component: {fileID: 2296979088887810826}
m_Layer: 13
m_Name: WallMount_East
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &5350324107798645853
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 9034195199641080368}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0.7071068, z: 0.7071068, w: 0}
m_LocalPosition: {x: 1.187, y: 0.139819, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1028507122493498974}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &4905755451283525879
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 9034195199641080368}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 977546eeac153c04c9a08997c2a8609c, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Ashwild.Building.BuildSnapPoint
category: 1
--- !u!135 &2296979088887810826
SphereCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 9034195199641080368}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 1
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 3
m_Radius: 0.5
m_Center: {x: 0, y: 0, z: 0}
--- !u!1001 &4930587474812279237
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 7186651538238987014}
m_Modifications:
- target: {fileID: 6454600228789530739, guid: c3ee7b90147ebe042bf1a600a96b0abf, type: 3}
propertyPath: m_Name
value: WoodCelling_Prefab
objectReference: {fileID: 0}
- target: {fileID: 8054689501814014560, guid: c3ee7b90147ebe042bf1a600a96b0abf, type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8054689501814014560, guid: c3ee7b90147ebe042bf1a600a96b0abf, type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8054689501814014560, guid: c3ee7b90147ebe042bf1a600a96b0abf, type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8054689501814014560, guid: c3ee7b90147ebe042bf1a600a96b0abf, type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 8054689501814014560, guid: c3ee7b90147ebe042bf1a600a96b0abf, type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8054689501814014560, guid: c3ee7b90147ebe042bf1a600a96b0abf, type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8054689501814014560, guid: c3ee7b90147ebe042bf1a600a96b0abf, type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8054689501814014560, guid: c3ee7b90147ebe042bf1a600a96b0abf, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8054689501814014560, guid: c3ee7b90147ebe042bf1a600a96b0abf, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8054689501814014560, guid: c3ee7b90147ebe042bf1a600a96b0abf, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
m_RemovedComponents:
- {fileID: 5106284389308251883, guid: c3ee7b90147ebe042bf1a600a96b0abf, type: 3}
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: c3ee7b90147ebe042bf1a600a96b0abf, type: 3}
--- !u!4 &3144909205180013477 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 8054689501814014560, guid: c3ee7b90147ebe042bf1a600a96b0abf, type: 3}
m_PrefabInstance: {fileID: 4930587474812279237}
m_PrefabAsset: {fileID: 0}
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 6da3ddb353032704ba93fbd2575769dc
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -1,431 +0,0 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &480736328517298862
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1942471322536217356}
m_Layer: 9
m_Name: Snap
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1942471322536217356
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 480736328517298862}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0.197, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 6870778831223154685}
- {fileID: 2524477793229890458}
- {fileID: 2131578201294031463}
- {fileID: 8179181624519070060}
m_Father: {fileID: 2140759467227372249}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1660908140604244018
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 6870778831223154685}
- component: {fileID: 6877881682430573567}
- component: {fileID: 612144715090567965}
m_Layer: 13
m_Name: Edge_North
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &6870778831223154685
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1660908140604244018}
serializedVersion: 2
m_LocalRotation: {x: -0, y: -1, z: -0, w: 0.0000029504295}
m_LocalPosition: {x: 0, y: 0, z: -1.2409973}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1942471322536217356}
m_LocalEulerAnglesHint: {x: 0, y: -180, z: 0}
--- !u!114 &6877881682430573567
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1660908140604244018}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 977546eeac153c04c9a08997c2a8609c, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Ashwild.Building.BuildSnapPoint
category: 0
--- !u!135 &612144715090567965
SphereCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1660908140604244018}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 1
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 3
m_Radius: 0.5
m_Center: {x: 0, y: 0, z: 0}
--- !u!1 &3209735075952564995
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 2140759467227372249}
- component: {fileID: 6877544168227861141}
- component: {fileID: 4884403491460680490}
- component: {fileID: 1774354476493266722}
- component: {fileID: 6057546317908917559}
m_Layer: 9
m_Name: WoodCelling_Prefab
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &2140759467227372249
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3209735075952564995}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 72.18446, y: -0.55225, z: 91.49081}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 1942471322536217356}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &6877544168227861141
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3209735075952564995}
m_Mesh: {fileID: -2092554398656258221, guid: 1b42665a080463144a6dbfce1200feba, type: 3}
--- !u!23 &4884403491460680490
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3209735075952564995}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_StaticShadowCaster: 0
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RayTraceProcedural: 0
m_RayTracingAccelStructBuildFlagsOverride: 0
m_RayTracingAccelStructBuildFlags: 1
m_SmallMeshCulling: 1
m_ForceMeshLod: -1
m_MeshLodSelectionBias: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 2100000, guid: 9f0520b2b2583b244b0e2c767593a214, type: 2}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_ReceiveGI: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 1
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_GlobalIlluminationMeshLod: 0
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_MaskInteraction: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!65 &1774354476493266722
BoxCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3209735075952564995}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 3
m_Size: {x: 2.4893725, y: 0.279638, z: 2.4685874}
m_Center: {x: 0.0011386871, y: 0.15, z: -0.012834609}
--- !u!114 &6057546317908917559
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3209735075952564995}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3239767b01eb17642a9aa5c614618ae7, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Ashwild.GrassClearer.ClearGrassOnPlace
--- !u!1 &4650471915439996732
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 2524477793229890458}
- component: {fileID: 8255092423828011360}
- component: {fileID: 1179469570671982705}
m_Layer: 13
m_Name: Edge_South
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &2524477793229890458
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4650471915439996732}
serializedVersion: 2
m_LocalRotation: {x: -0, y: 0.70710576, z: -0, w: 0.7071079}
m_LocalPosition: {x: 1.2409973, y: 0, z: 0.0000076293945}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1942471322536217356}
m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0}
--- !u!114 &8255092423828011360
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4650471915439996732}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 977546eeac153c04c9a08997c2a8609c, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Ashwild.Building.BuildSnapPoint
category: 0
--- !u!135 &1179469570671982705
SphereCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4650471915439996732}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 1
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 3
m_Radius: 0.5
m_Center: {x: 0, y: 0, z: 0}
--- !u!1 &4799995118589501802
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 2131578201294031463}
- component: {fileID: 3584398175655418314}
- component: {fileID: 7190310931469936734}
m_Layer: 13
m_Name: Edge_East
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &2131578201294031463
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4799995118589501802}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 1.241}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1942471322536217356}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &3584398175655418314
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4799995118589501802}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 977546eeac153c04c9a08997c2a8609c, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Ashwild.Building.BuildSnapPoint
category: 0
--- !u!135 &7190310931469936734
SphereCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4799995118589501802}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 1
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 3
m_Radius: 0.5
m_Center: {x: 0, y: 0, z: 0}
--- !u!1 &9051056320518420532
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 8179181624519070060}
- component: {fileID: 1268498989253368643}
- component: {fileID: 5138841435529898872}
m_Layer: 13
m_Name: Edge_West
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &8179181624519070060
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 9051056320518420532}
serializedVersion: 2
m_LocalRotation: {x: -0, y: -0.7933523, z: -0, w: 0.60876286}
m_LocalPosition: {x: -1.2409973, y: 0, z: -0.0000076293945}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1942471322536217356}
m_LocalEulerAnglesHint: {x: 0, y: -105, z: 0}
--- !u!114 &1268498989253368643
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 9051056320518420532}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 977546eeac153c04c9a08997c2a8609c, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Ashwild.Building.BuildSnapPoint
category: 0
--- !u!135 &5138841435529898872
SphereCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 9051056320518420532}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 1
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 3
m_Radius: 0.5
m_Center: {x: 0, y: 0, z: 0}
@@ -9,7 +9,7 @@ GameObject:
serializedVersion: 6
m_Component:
- component: {fileID: 5155531265051259965}
m_Layer: 9
m_Layer: 14
m_Name: Respanw Point
m_TagString: Untagged
m_Icon: {fileID: 0}
@@ -42,7 +42,7 @@ GameObject:
- component: {fileID: 1974791568506913495}
- component: {fileID: 7121555757307145449}
- component: {fileID: 8025352644449905843}
m_Layer: 9
m_Layer: 14
m_Name: Dual Bed
m_TagString: Untagged
m_Icon: {fileID: 0}
@@ -167,7 +167,7 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 919132149155446097, guid: daccda73d2db7124db470c2a2f478fcf, type: 3}
propertyPath: m_Layer
value: 9
value: 14
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
@@ -1,6 +1,6 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &380923795967029798
--- !u!1 &75671179855502526
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
@@ -8,51 +8,51 @@ GameObject:
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 7491935721759441242}
- component: {fileID: 4486794573903890}
- component: {fileID: 7387562695430027898}
m_Layer: 13
m_Name: Edge_South
- component: {fileID: 4110633420011679054}
- component: {fileID: 7420255900062292832}
- component: {fileID: 3414516216822582167}
m_Layer: 14
m_Name: Wall_SideB
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &7491935721759441242
--- !u!4 &4110633420011679054
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 380923795967029798}
m_GameObject: {fileID: 75671179855502526}
serializedVersion: 2
m_LocalRotation: {x: -0, y: 0.70710576, z: -0, w: 0.70710784}
m_LocalPosition: {x: 1.25, y: 0, z: 0}
m_LocalRotation: {x: 0, y: -0.7071068, z: 0, w: 0.7071068}
m_LocalPosition: {x: -1.2308891, y: -0, z: -0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 5468624895545680116}
m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0}
--- !u!114 &4486794573903890
m_Father: {fileID: 678596692599963659}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &7420255900062292832
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 380923795967029798}
m_GameObject: {fileID: 75671179855502526}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 977546eeac153c04c9a08997c2a8609c, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Ashwild.Building.BuildSnapPoint
category: 0
--- !u!135 &7387562695430027898
category: 1
--- !u!135 &3414516216822582167
SphereCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 380923795967029798}
m_GameObject: {fileID: 75671179855502526}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
@@ -63,11 +63,11 @@ SphereCollider:
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 0
m_Enabled: 1
serializedVersion: 3
m_Radius: 0.5
m_Center: {x: 0, y: 0, z: 0}
--- !u!1 &689960121515206631
--- !u!1 &1813028553946243035
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
@@ -75,86 +75,51 @@ GameObject:
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 5468624895545680116}
m_Layer: 9
m_Name: Snap
- component: {fileID: 7971769252731839825}
- component: {fileID: 8994203856384649543}
- component: {fileID: 7839324189915440117}
m_Layer: 14
m_Name: Wall_SideA
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &5468624895545680116
--- !u!4 &7971769252731839825
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 689960121515206631}
m_GameObject: {fileID: 1813028553946243035}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0.231, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 6339924542167595468}
- {fileID: 7491935721759441242}
- {fileID: 1464325717056940001}
- {fileID: 1042469317699432837}
m_Father: {fileID: 5800237873906906435}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1656609586749578753
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1464325717056940001}
- component: {fileID: 4974477594321398962}
- component: {fileID: 2800629085843272837}
m_Layer: 13
m_Name: Edge_East
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1464325717056940001
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1656609586749578753}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 1.241}
m_LocalRotation: {x: 0, y: 0.7071068, z: 0, w: 0.7071068}
m_LocalPosition: {x: 1.2308891, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 5468624895545680116}
m_Father: {fileID: 678596692599963659}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &4974477594321398962
--- !u!114 &8994203856384649543
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1656609586749578753}
m_GameObject: {fileID: 1813028553946243035}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 977546eeac153c04c9a08997c2a8609c, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Ashwild.Building.BuildSnapPoint
category: 0
--- !u!135 &2800629085843272837
category: 1
--- !u!135 &7839324189915440117
SphereCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1656609586749578753}
m_GameObject: {fileID: 1813028553946243035}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
@@ -165,11 +130,11 @@ SphereCollider:
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 0
m_Enabled: 1
serializedVersion: 3
m_Radius: 0.5
m_Center: {x: 0, y: 0, z: 0}
--- !u!1 &3305094920675404345
--- !u!1 &2619081753609909139
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
@@ -177,100 +142,42 @@ GameObject:
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 5800237873906906435}
- component: {fileID: 6597156952845105633}
- component: {fileID: 4116859313712376113}
- component: {fileID: 7915026797655516421}
- component: {fileID: 8958413773651828551}
- component: {fileID: 6514514229620551208}
- component: {fileID: 4978678982628191274}
m_Layer: 9
m_Name: Ghost_WoodCelling
- component: {fileID: 6656537982428225998}
- component: {fileID: 1619651739189685595}
- component: {fileID: 3761656243978262773}
- component: {fileID: 4182754159189231312}
- component: {fileID: 3877867435092391517}
m_Layer: 14
m_Name: Ghost_Mur en bois
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &5800237873906906435
--- !u!4 &6656537982428225998
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3305094920675404345}
m_GameObject: {fileID: 2619081753609909139}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 5468624895545680116}
- {fileID: 188722810559598727}
- {fileID: 678596692599963659}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &6597156952845105633
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3305094920675404345}
m_Mesh: {fileID: -2092554398656258221, guid: 1b42665a080463144a6dbfce1200feba, type: 3}
--- !u!23 &4116859313712376113
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3305094920675404345}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_StaticShadowCaster: 0
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RayTraceProcedural: 0
m_RayTracingAccelStructBuildFlagsOverride: 0
m_RayTracingAccelStructBuildFlags: 1
m_SmallMeshCulling: 1
m_ForceMeshLod: -1
m_MeshLodSelectionBias: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 2100000, guid: 9f0520b2b2583b244b0e2c767593a214, type: 2}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_ReceiveGI: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 1
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_GlobalIlluminationMeshLod: 0
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_MaskInteraction: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!65 &7915026797655516421
--- !u!65 &1619651739189685595
BoxCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3305094920675404345}
m_GameObject: {fileID: 2619081753609909139}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
@@ -283,23 +190,81 @@ BoxCollider:
m_ProvidesContacts: 0
m_Enabled: 0
serializedVersion: 3
m_Size: {x: 2.4893725, y: 0.279638, z: 2.4685874}
m_Center: {x: 0.0011386871, y: 0.15, z: -0.012834609}
--- !u!114 &8958413773651828551
m_Size: {x: 2.4617782, y: 2.4805732, z: 0.2520886}
m_Center: {x: 0.0095511675, y: 1.2382154, z: -0.024676695}
--- !u!114 &3761656243978262773
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3305094920675404345}
m_GameObject: {fileID: 2619081753609909139}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 26b716c41e9b56b4baafaf13a523ba2e, type: 3}
m_Name:
m_EditorClassIdentifier: FishNet.Runtime::FishNet.Object.NetworkObject
_localLevelOfDetailCalculationType: 0
_useLevelOfDetail: 0
_useRootLevelOfDetail: 1
NetworkObserver: {fileID: 0}
_enablePrediction: 0
_predictionType: 0
_localReconcileCorrectionType: 2
_graphicalObject: {fileID: 0}
_detachGraphicalObject: 0
_enableStateForwarding: 1
_networkTransform: {fileID: 0}
_ownerInterpolation: 1
_ownerSmoothedProperties: 255
_adaptiveInterpolation: 3
_spectatorSmoothedProperties: 255
_spectatorInterpolation: 2
_enableTeleport: 0
_teleportThreshold: 1
<PrefabId>k__BackingField: 16
<SpawnableCollectionId>k__BackingField: 0
<AssetPathHash>k__BackingField: 16508065741492498975
SceneId: 0
SerializedTransformProperties:
Position: {x: 0, y: 0, z: 0}
Rotation: {x: 0, y: 0, z: 0, w: 1}
Scale: {x: 1, y: 1, z: 1}
IsValid: 1
<IsNested>k__BackingField: 0
WasActiveDuringEdit: 0
WasActiveDuringEdit_Set1: 1
<ComponentIndex>k__BackingField: 0
<PredictedSpawn>k__BackingField: {fileID: 0}
<PredictedOwner>k__BackingField: {fileID: 0}
NetworkBehaviours:
- {fileID: 4182754159189231312}
InitializedParentNetworkBehaviour: {fileID: 0}
InitializedNestedNetworkObjects: []
RuntimeParentNetworkBehaviour: {fileID: 0}
RuntimeChildNetworkBehaviours: []
_isNetworked: 1
_isSpawnable: 1
_isGlobal: 0
_initializeOrder: 0
_preventDespawnOnDisconnect: 0
_defaultDespawnType: 0
_initializedTimestamp: -8584169414543529327
--- !u!114 &4182754159189231312
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2619081753609909139}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: a2836e36774ca1c4bbbee976e17b649c, type: 3}
m_Name:
m_EditorClassIdentifier: FishNet.Runtime::FishNet.Component.Transforming.NetworkTransform
_componentIndexCache: 0
_addedNetworkObject: {fileID: 6514514229620551208}
_networkObjectCache: {fileID: 6514514229620551208}
_addedNetworkObject: {fileID: 3761656243978262773}
_networkObjectCache: {fileID: 3761656243978262773}
_componentConfiguration: 0
_synchronizeParent: 0
_packing:
@@ -331,82 +296,24 @@ MonoBehaviour:
X: 0
Y: 0
Z: 0
--- !u!114 &6514514229620551208
--- !u!114 &3877867435092391517
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3305094920675404345}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 26b716c41e9b56b4baafaf13a523ba2e, type: 3}
m_Name:
m_EditorClassIdentifier: FishNet.Runtime::FishNet.Object.NetworkObject
_localLevelOfDetailCalculationType: 0
_useLevelOfDetail: 0
_useRootLevelOfDetail: 1
NetworkObserver: {fileID: 0}
_enablePrediction: 0
_predictionType: 0
_localReconcileCorrectionType: 2
_graphicalObject: {fileID: 0}
_detachGraphicalObject: 0
_enableStateForwarding: 1
_networkTransform: {fileID: 0}
_ownerInterpolation: 1
_ownerSmoothedProperties: 255
_adaptiveInterpolation: 3
_spectatorSmoothedProperties: 255
_spectatorInterpolation: 2
_enableTeleport: 0
_teleportThreshold: 1
<PrefabId>k__BackingField: 0
<SpawnableCollectionId>k__BackingField: 0
<AssetPathHash>k__BackingField: 12948973730721088167
SceneId: 0
SerializedTransformProperties:
Position: {x: 72.18446, y: -0.55225, z: 91.49081}
Rotation: {x: 0, y: 0, z: 0, w: 1}
Scale: {x: 1, y: 1, z: 1}
IsValid: 1
<IsNested>k__BackingField: 0
WasActiveDuringEdit: 0
WasActiveDuringEdit_Set1: 1
<ComponentIndex>k__BackingField: 0
<PredictedSpawn>k__BackingField: {fileID: 0}
<PredictedOwner>k__BackingField: {fileID: 0}
NetworkBehaviours:
- {fileID: 8958413773651828551}
InitializedParentNetworkBehaviour: {fileID: 0}
InitializedNestedNetworkObjects: []
RuntimeParentNetworkBehaviour: {fileID: 0}
RuntimeChildNetworkBehaviours: []
_isNetworked: 1
_isSpawnable: 1
_isGlobal: 0
_initializeOrder: 0
_preventDespawnOnDisconnect: 0
_defaultDespawnType: 0
_initializedTimestamp: -8584181721604556210
--- !u!114 &4978678982628191274
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3305094920675404345}
m_GameObject: {fileID: 2619081753609909139}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3da63aae88fc0f547b84e1d74e927e39, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Ashwild.Building.BuildGhost
footprint: {fileID: 7915026797655516421}
footprint: {fileID: 1619651739189685595}
renderers:
- {fileID: 4116859313712376113}
- {fileID: 3240891548206880328}
validOverlay: {fileID: 2100000, guid: 0e580295bcb9d8e4ab68d1a7f11efa63, type: 2}
invalidOverlay: {fileID: 2100000, guid: 0a594aa41ef0d7e428398c2c32772c64, type: 2}
--- !u!1 &3743132779249447582
--- !u!1 &3218417833338959851
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
@@ -414,51 +321,51 @@ GameObject:
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1042469317699432837}
- component: {fileID: 2008333350179210541}
- component: {fileID: 3028437067479239787}
m_Layer: 13
m_Name: Edge_West
- component: {fileID: 5996419176788311315}
- component: {fileID: 8140059345406537986}
- component: {fileID: 3039132073524866295}
m_Layer: 14
m_Name: Wall_Foot
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1042469317699432837
--- !u!4 &5996419176788311315
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3743132779249447582}
m_GameObject: {fileID: 3218417833338959851}
serializedVersion: 2
m_LocalRotation: {x: -0, y: -0.70710576, z: -0, w: 0.70710784}
m_LocalPosition: {x: -1.25, y: 0, z: 0}
m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071068}
m_LocalPosition: {x: 0, y: -1.254755, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 5468624895545680116}
m_LocalEulerAnglesHint: {x: 0, y: -90, z: 0}
--- !u!114 &2008333350179210541
m_Father: {fileID: 678596692599963659}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &8140059345406537986
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3743132779249447582}
m_GameObject: {fileID: 3218417833338959851}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 977546eeac153c04c9a08997c2a8609c, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Ashwild.Building.BuildSnapPoint
category: 0
--- !u!135 &3028437067479239787
category: 1
--- !u!135 &3039132073524866295
SphereCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3743132779249447582}
m_GameObject: {fileID: 3218417833338959851}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
@@ -469,11 +376,11 @@ SphereCollider:
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 0
m_Enabled: 1
serializedVersion: 3
m_Radius: 0.5
m_Center: {x: 0, y: 0, z: 0}
--- !u!1 &4899989921195697127
--- !u!1 &4003699280906804390
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
@@ -481,51 +388,86 @@ GameObject:
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 6339924542167595468}
- component: {fileID: 1765004770665976975}
- component: {fileID: 5073057946224045579}
m_Layer: 13
m_Name: Edge_North
- component: {fileID: 678596692599963659}
m_Layer: 14
m_Name: Snap
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &6339924542167595468
--- !u!4 &678596692599963659
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4899989921195697127}
m_GameObject: {fileID: 4003699280906804390}
serializedVersion: 2
m_LocalRotation: {x: -0, y: -1, z: -0, w: 0.0000029504295}
m_LocalPosition: {x: 0, y: 0, z: -1.2409973}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0.0095511675, y: 1.2509763, z: -0.0246767}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 4620887056281619740}
- {fileID: 5996419176788311315}
- {fileID: 7971769252731839825}
- {fileID: 4110633420011679054}
m_Father: {fileID: 6656537982428225998}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &8075198193928054193
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 4620887056281619740}
- component: {fileID: 7373577774691933245}
- component: {fileID: 1575446889901753875}
m_Layer: 14
m_Name: RoofMount
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &4620887056281619740
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8075198193928054193}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0.7071068, z: 0.7071068, w: 0}
m_LocalPosition: {x: 0, y: 1.254755, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 5468624895545680116}
m_LocalEulerAnglesHint: {x: 0, y: -180, z: 0}
--- !u!114 &1765004770665976975
m_Father: {fileID: 678596692599963659}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &7373577774691933245
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4899989921195697127}
m_GameObject: {fileID: 8075198193928054193}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 977546eeac153c04c9a08997c2a8609c, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Ashwild.Building.BuildSnapPoint
category: 0
--- !u!135 &5073057946224045579
category: 2
--- !u!135 &1575446889901753875
SphereCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4899989921195697127}
m_GameObject: {fileID: 8075198193928054193}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
@@ -536,7 +478,74 @@ SphereCollider:
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 0
m_Enabled: 1
serializedVersion: 3
m_Radius: 0.5
m_Center: {x: 0, y: 0, z: 0}
--- !u!1001 &3536057335109221040
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 6656537982428225998}
m_Modifications:
- target: {fileID: 421010513357740068, guid: ab9bde15c24bddc43a356e587b96f67c, type: 3}
propertyPath: m_Name
value: Wall_Prefab
objectReference: {fileID: 0}
- target: {fileID: 3714593433905687095, guid: ab9bde15c24bddc43a356e587b96f67c, type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 3714593433905687095, guid: ab9bde15c24bddc43a356e587b96f67c, type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 3714593433905687095, guid: ab9bde15c24bddc43a356e587b96f67c, type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 3714593433905687095, guid: ab9bde15c24bddc43a356e587b96f67c, type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 3714593433905687095, guid: ab9bde15c24bddc43a356e587b96f67c, type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 3714593433905687095, guid: ab9bde15c24bddc43a356e587b96f67c, type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 3714593433905687095, guid: ab9bde15c24bddc43a356e587b96f67c, type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 3714593433905687095, guid: ab9bde15c24bddc43a356e587b96f67c, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 3714593433905687095, guid: ab9bde15c24bddc43a356e587b96f67c, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 3714593433905687095, guid: ab9bde15c24bddc43a356e587b96f67c, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: ab9bde15c24bddc43a356e587b96f67c, type: 3}
--- !u!4 &188722810559598727 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 3714593433905687095, guid: ab9bde15c24bddc43a356e587b96f67c, type: 3}
m_PrefabInstance: {fileID: 3536057335109221040}
m_PrefabAsset: {fileID: 0}
--- !u!23 &3240891548206880328 stripped
MeshRenderer:
m_CorrespondingSourceObject: {fileID: 2155936523658636536, guid: ab9bde15c24bddc43a356e587b96f67c, type: 3}
m_PrefabInstance: {fileID: 3536057335109221040}
m_PrefabAsset: {fileID: 0}
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 75f36345a5b955a45af12d2600894962
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,321 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &3618108517299114000
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 3442713528874491935}
- component: {fileID: 6133395046125901231}
- component: {fileID: 5182197038018994757}
- component: {fileID: 4872016000618054028}
- component: {fileID: 4703411730269983851}
m_Layer: 14
m_Name: Ghost_NewBuildable
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &3442713528874491935
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3618108517299114000}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 8509319730477315567}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!65 &6133395046125901231
BoxCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3618108517299114000}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 0
serializedVersion: 3
m_Size: {x: 1.2221766, y: 0.7923986, z: 0.716973}
m_Center: {x: 0.0018180013, y: 0.39221516, z: 0.0063577592}
--- !u!114 &5182197038018994757
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3618108517299114000}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 26b716c41e9b56b4baafaf13a523ba2e, type: 3}
m_Name:
m_EditorClassIdentifier: FishNet.Runtime::FishNet.Object.NetworkObject
_localLevelOfDetailCalculationType: 0
_useLevelOfDetail: 0
_useRootLevelOfDetail: 1
NetworkObserver: {fileID: 0}
_enablePrediction: 0
_predictionType: 0
_localReconcileCorrectionType: 2
_graphicalObject: {fileID: 0}
_detachGraphicalObject: 0
_enableStateForwarding: 1
_networkTransform: {fileID: 0}
_ownerInterpolation: 1
_ownerSmoothedProperties: 255
_adaptiveInterpolation: 3
_spectatorSmoothedProperties: 255
_spectatorInterpolation: 2
_enableTeleport: 0
_teleportThreshold: 1
<PrefabId>k__BackingField: 14
<SpawnableCollectionId>k__BackingField: 0
<AssetPathHash>k__BackingField: 15960435111263854789
SceneId: 0
SerializedTransformProperties:
Position: {x: 0, y: 0, z: 0}
Rotation: {x: 0, y: 0, z: 0, w: 1}
Scale: {x: 1, y: 1, z: 1}
IsValid: 1
<IsNested>k__BackingField: 0
WasActiveDuringEdit: 0
WasActiveDuringEdit_Set1: 1
<ComponentIndex>k__BackingField: 0
<PredictedSpawn>k__BackingField: {fileID: 0}
<PredictedOwner>k__BackingField: {fileID: 0}
NetworkBehaviours:
- {fileID: 4872016000618054028}
InitializedParentNetworkBehaviour: {fileID: 0}
InitializedNestedNetworkObjects: []
RuntimeParentNetworkBehaviour: {fileID: 0}
RuntimeChildNetworkBehaviours: []
_isNetworked: 1
_isSpawnable: 1
_isGlobal: 0
_initializeOrder: 0
_preventDespawnOnDisconnect: 0
_defaultDespawnType: 0
_initializedTimestamp: -8584169414543529327
--- !u!114 &4872016000618054028
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3618108517299114000}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: a2836e36774ca1c4bbbee976e17b649c, type: 3}
m_Name:
m_EditorClassIdentifier: FishNet.Runtime::FishNet.Component.Transforming.NetworkTransform
_componentIndexCache: 0
_addedNetworkObject: {fileID: 5182197038018994757}
_networkObjectCache: {fileID: 5182197038018994757}
_componentConfiguration: 0
_synchronizeParent: 0
_packing:
Position: 1
Rotation: 1
Scale: 0
_useScaledTime: 1
_interpolation: 2
_extrapolation: 2
_enableTeleport: 0
_teleportThreshold: 1
_clientAuthoritative: 1
_sendToOwner: 1
_interval: 1
_synchronizePosition: 1
_positionSensitivity: 0.001
_positionSnapping:
X: 0
Y: 0
Z: 0
_synchronizeRotation: 1
_rotationSnapping:
X: 0
Y: 0
Z: 0
_synchronizeScale: 1
_scaleSensitivity: 0.001
_scaleSnapping:
X: 0
Y: 0
Z: 0
--- !u!114 &4703411730269983851
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3618108517299114000}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3da63aae88fc0f547b84e1d74e927e39, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Ashwild.Building.BuildGhost
footprint: {fileID: 6133395046125901231}
renderers:
- {fileID: 7786917842789155548}
- {fileID: 8800945613590286659}
- {fileID: 6373088977799208954}
- {fileID: 3630765017617655973}
- {fileID: 8250413398233554600}
- {fileID: 8020836188613664224}
validOverlay: {fileID: 2100000, guid: 0e580295bcb9d8e4ab68d1a7f11efa63, type: 2}
invalidOverlay: {fileID: 2100000, guid: 0a594aa41ef0d7e428398c2c32772c64, type: 2}
--- !u!1001 &995284928669643586
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 3442713528874491935}
m_Modifications:
- target: {fileID: 1205429200353802584, guid: 6a1de89366a3f0741877f7cd3ca11cd9, type: 3}
propertyPath: m_Layer
value: 14
objectReference: {fileID: 0}
- target: {fileID: 2488455438653353329, guid: 6a1de89366a3f0741877f7cd3ca11cd9, type: 3}
propertyPath: m_Layer
value: 14
objectReference: {fileID: 0}
- target: {fileID: 2834765333546211928, guid: 6a1de89366a3f0741877f7cd3ca11cd9, type: 3}
propertyPath: m_Layer
value: 14
objectReference: {fileID: 0}
- target: {fileID: 3477519202729442059, guid: 6a1de89366a3f0741877f7cd3ca11cd9, type: 3}
propertyPath: m_Layer
value: 14
objectReference: {fileID: 0}
- target: {fileID: 3730502645607281877, guid: 6a1de89366a3f0741877f7cd3ca11cd9, type: 3}
propertyPath: m_Layer
value: 14
objectReference: {fileID: 0}
- target: {fileID: 4283136006545383452, guid: 6a1de89366a3f0741877f7cd3ca11cd9, type: 3}
propertyPath: m_Enabled
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4380831863138714029, guid: 6a1de89366a3f0741877f7cd3ca11cd9, type: 3}
propertyPath: m_Layer
value: 14
objectReference: {fileID: 0}
- target: {fileID: 5785395719311195047, guid: 6a1de89366a3f0741877f7cd3ca11cd9, type: 3}
propertyPath: WasActiveDuringEdit
value: 1
objectReference: {fileID: 0}
- target: {fileID: 6182587958533565947, guid: 6a1de89366a3f0741877f7cd3ca11cd9, type: 3}
propertyPath: m_Enabled
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8111840307215440919, guid: 6a1de89366a3f0741877f7cd3ca11cd9, type: 3}
propertyPath: m_Name
value: Chest
objectReference: {fileID: 0}
- target: {fileID: 8111840307215440919, guid: 6a1de89366a3f0741877f7cd3ca11cd9, type: 3}
propertyPath: m_Layer
value: 14
objectReference: {fileID: 0}
- target: {fileID: 8727277968094159911, guid: 6a1de89366a3f0741877f7cd3ca11cd9, type: 3}
propertyPath: m_Enabled
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8924123916003559085, guid: 6a1de89366a3f0741877f7cd3ca11cd9, type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8924123916003559085, guid: 6a1de89366a3f0741877f7cd3ca11cd9, type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8924123916003559085, guid: 6a1de89366a3f0741877f7cd3ca11cd9, type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8924123916003559085, guid: 6a1de89366a3f0741877f7cd3ca11cd9, type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 8924123916003559085, guid: 6a1de89366a3f0741877f7cd3ca11cd9, type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8924123916003559085, guid: 6a1de89366a3f0741877f7cd3ca11cd9, type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8924123916003559085, guid: 6a1de89366a3f0741877f7cd3ca11cd9, type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8924123916003559085, guid: 6a1de89366a3f0741877f7cd3ca11cd9, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8924123916003559085, guid: 6a1de89366a3f0741877f7cd3ca11cd9, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8924123916003559085, guid: 6a1de89366a3f0741877f7cd3ca11cd9, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 6a1de89366a3f0741877f7cd3ca11cd9, type: 3}
--- !u!23 &3630765017617655973 stripped
MeshRenderer:
m_CorrespondingSourceObject: {fileID: 4588297011889216487, guid: 6a1de89366a3f0741877f7cd3ca11cd9, type: 3}
m_PrefabInstance: {fileID: 995284928669643586}
m_PrefabAsset: {fileID: 0}
--- !u!23 &6373088977799208954 stripped
MeshRenderer:
m_CorrespondingSourceObject: {fileID: 6178433971241266360, guid: 6a1de89366a3f0741877f7cd3ca11cd9, type: 3}
m_PrefabInstance: {fileID: 995284928669643586}
m_PrefabAsset: {fileID: 0}
--- !u!23 &7786917842789155548 stripped
MeshRenderer:
m_CorrespondingSourceObject: {fileID: 7052433451743326622, guid: 6a1de89366a3f0741877f7cd3ca11cd9, type: 3}
m_PrefabInstance: {fileID: 995284928669643586}
m_PrefabAsset: {fileID: 0}
--- !u!23 &8020836188613664224 stripped
MeshRenderer:
m_CorrespondingSourceObject: {fileID: 7097754766906568354, guid: 6a1de89366a3f0741877f7cd3ca11cd9, type: 3}
m_PrefabInstance: {fileID: 995284928669643586}
m_PrefabAsset: {fileID: 0}
--- !u!23 &8250413398233554600 stripped
MeshRenderer:
m_CorrespondingSourceObject: {fileID: 9201044371878899178, guid: 6a1de89366a3f0741877f7cd3ca11cd9, type: 3}
m_PrefabInstance: {fileID: 995284928669643586}
m_PrefabAsset: {fileID: 0}
--- !u!4 &8509319730477315567 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 8924123916003559085, guid: 6a1de89366a3f0741877f7cd3ca11cd9, type: 3}
m_PrefabInstance: {fileID: 995284928669643586}
m_PrefabAsset: {fileID: 0}
--- !u!23 &8800945613590286659 stripped
MeshRenderer:
m_CorrespondingSourceObject: {fileID: 8641505232673808897, guid: 6a1de89366a3f0741877f7cd3ca11cd9, type: 3}
m_PrefabInstance: {fileID: 995284928669643586}
m_PrefabAsset: {fileID: 0}
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 62ac65083695cf640afb7a4c8d803f52
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,556 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &3207235421607730643
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 2334593477414593074}
- component: {fileID: 4259463730000273668}
- component: {fileID: 8180767268016421964}
- component: {fileID: 5061449885792543640}
- component: {fileID: 8480802064931159789}
m_Layer: 14
m_Name: Ghost_Plafond
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &2334593477414593074
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3207235421607730643}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 2480906258353145818}
- {fileID: 8465296985294472986}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!65 &4259463730000273668
BoxCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3207235421607730643}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 0
serializedVersion: 3
m_Size: {x: 2.4893725, y: 0.26348943, z: 2.4685874}
m_Center: {x: 0.0011386871, y: 0.13261798, z: -0.012834549}
--- !u!114 &8180767268016421964
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3207235421607730643}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 26b716c41e9b56b4baafaf13a523ba2e, type: 3}
m_Name:
m_EditorClassIdentifier: FishNet.Runtime::FishNet.Object.NetworkObject
_localLevelOfDetailCalculationType: 0
_useLevelOfDetail: 0
_useRootLevelOfDetail: 1
NetworkObserver: {fileID: 0}
_enablePrediction: 0
_predictionType: 0
_localReconcileCorrectionType: 2
_graphicalObject: {fileID: 0}
_detachGraphicalObject: 0
_enableStateForwarding: 1
_networkTransform: {fileID: 0}
_ownerInterpolation: 1
_ownerSmoothedProperties: 255
_adaptiveInterpolation: 3
_spectatorSmoothedProperties: 255
_spectatorInterpolation: 2
_enableTeleport: 0
_teleportThreshold: 1
<PrefabId>k__BackingField: 9
<SpawnableCollectionId>k__BackingField: 0
<AssetPathHash>k__BackingField: 9001145751081742879
SceneId: 0
SerializedTransformProperties:
Position: {x: 0, y: 0, z: 0}
Rotation: {x: 0, y: 0, z: 0, w: 1}
Scale: {x: 1, y: 1, z: 1}
IsValid: 1
<IsNested>k__BackingField: 0
WasActiveDuringEdit: 0
WasActiveDuringEdit_Set1: 1
<ComponentIndex>k__BackingField: 0
<PredictedSpawn>k__BackingField: {fileID: 0}
<PredictedOwner>k__BackingField: {fileID: 0}
NetworkBehaviours:
- {fileID: 5061449885792543640}
InitializedParentNetworkBehaviour: {fileID: 0}
InitializedNestedNetworkObjects: []
RuntimeParentNetworkBehaviour: {fileID: 0}
RuntimeChildNetworkBehaviours: []
_isNetworked: 1
_isSpawnable: 1
_isGlobal: 0
_initializeOrder: 0
_preventDespawnOnDisconnect: 0
_defaultDespawnType: 0
_initializedTimestamp: -8584169414543529327
--- !u!114 &5061449885792543640
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3207235421607730643}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: a2836e36774ca1c4bbbee976e17b649c, type: 3}
m_Name:
m_EditorClassIdentifier: FishNet.Runtime::FishNet.Component.Transforming.NetworkTransform
_componentIndexCache: 0
_addedNetworkObject: {fileID: 8180767268016421964}
_networkObjectCache: {fileID: 8180767268016421964}
_componentConfiguration: 0
_synchronizeParent: 0
_packing:
Position: 1
Rotation: 1
Scale: 0
_useScaledTime: 1
_interpolation: 2
_extrapolation: 2
_enableTeleport: 0
_teleportThreshold: 1
_clientAuthoritative: 1
_sendToOwner: 1
_interval: 1
_synchronizePosition: 1
_positionSensitivity: 0.001
_positionSnapping:
X: 0
Y: 0
Z: 0
_synchronizeRotation: 1
_rotationSnapping:
X: 0
Y: 0
Z: 0
_synchronizeScale: 1
_scaleSensitivity: 0.001
_scaleSnapping:
X: 0
Y: 0
Z: 0
--- !u!114 &8480802064931159789
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3207235421607730643}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3da63aae88fc0f547b84e1d74e927e39, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Ashwild.Building.BuildGhost
footprint: {fileID: 4259463730000273668}
renderers:
- {fileID: 867643096524521749}
validOverlay: {fileID: 2100000, guid: 0e580295bcb9d8e4ab68d1a7f11efa63, type: 2}
invalidOverlay: {fileID: 2100000, guid: 0a594aa41ef0d7e428398c2c32772c64, type: 2}
--- !u!1 &4858757756608647664
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 4602981238972246013}
- component: {fileID: 3875791938832550371}
- component: {fileID: 9088785979806830343}
m_Layer: 14
m_Name: Roof_East
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &4602981238972246013
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4858757756608647664}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0.7071068, z: 0, w: 0.7071068}
m_LocalPosition: {x: 1.2446862, y: 0.139819, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 8465296985294472986}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &3875791938832550371
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4858757756608647664}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 977546eeac153c04c9a08997c2a8609c, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Ashwild.Building.BuildSnapPoint
category: 2
--- !u!135 &9088785979806830343
SphereCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4858757756608647664}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 3
m_Radius: 0.5
m_Center: {x: 0, y: 0, z: 0}
--- !u!1 &5512122055084541296
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 859550837518753123}
- component: {fileID: 8906642515955517611}
- component: {fileID: 3352744744535186914}
m_Layer: 14
m_Name: Roof_West
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &859550837518753123
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5512122055084541296}
serializedVersion: 2
m_LocalRotation: {x: 0, y: -0.7071068, z: -0, w: 0.7071068}
m_LocalPosition: {x: -1.2446862, y: 0.139819, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 8465296985294472986}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &8906642515955517611
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5512122055084541296}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 977546eeac153c04c9a08997c2a8609c, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Ashwild.Building.BuildSnapPoint
category: 2
--- !u!135 &3352744744535186914
SphereCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5512122055084541296}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 3
m_Radius: 0.5
m_Center: {x: 0, y: 0, z: 0}
--- !u!1 &7905636741028357460
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 5416205631251670395}
- component: {fileID: 1685552703306867197}
- component: {fileID: 5236667487884953350}
m_Layer: 14
m_Name: Roof_North
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &5416205631251670395
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7905636741028357460}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0.139819, z: 1.2342937}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 8465296985294472986}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1685552703306867197
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7905636741028357460}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 977546eeac153c04c9a08997c2a8609c, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Ashwild.Building.BuildSnapPoint
category: 2
--- !u!135 &5236667487884953350
SphereCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7905636741028357460}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 3
m_Radius: 0.5
m_Center: {x: 0, y: 0, z: 0}
--- !u!1 &7915600407017371744
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 8465296985294472986}
m_Layer: 14
m_Name: Snap
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &8465296985294472986
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7915600407017371744}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0.0011386871, y: 0.14069226, z: -0.012834609}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 5416205631251670395}
- {fileID: 8344125627154051844}
- {fileID: 4602981238972246013}
- {fileID: 859550837518753123}
m_Father: {fileID: 2334593477414593074}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &8872999223486918296
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 8344125627154051844}
- component: {fileID: 2148120599378747522}
- component: {fileID: 6712280106737377154}
m_Layer: 14
m_Name: Roof_South
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &8344125627154051844
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8872999223486918296}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 1, z: 0, w: 0}
m_LocalPosition: {x: 0, y: 0.139819, z: -1.2342937}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 8465296985294472986}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &2148120599378747522
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8872999223486918296}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 977546eeac153c04c9a08997c2a8609c, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Ashwild.Building.BuildSnapPoint
category: 2
--- !u!135 &6712280106737377154
SphereCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8872999223486918296}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 3
m_Radius: 0.5
m_Center: {x: 0, y: 0, z: 0}
--- !u!1001 &5595144700053915066
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 2334593477414593074}
m_Modifications:
- target: {fileID: 6454600228789530739, guid: c3ee7b90147ebe042bf1a600a96b0abf, type: 3}
propertyPath: m_Name
value: WoodCelling_Prefab
objectReference: {fileID: 0}
- target: {fileID: 6454600228789530739, guid: c3ee7b90147ebe042bf1a600a96b0abf, type: 3}
propertyPath: m_Layer
value: 14
objectReference: {fileID: 0}
- target: {fileID: 8054689501814014560, guid: c3ee7b90147ebe042bf1a600a96b0abf, type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8054689501814014560, guid: c3ee7b90147ebe042bf1a600a96b0abf, type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8054689501814014560, guid: c3ee7b90147ebe042bf1a600a96b0abf, type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8054689501814014560, guid: c3ee7b90147ebe042bf1a600a96b0abf, type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 8054689501814014560, guid: c3ee7b90147ebe042bf1a600a96b0abf, type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8054689501814014560, guid: c3ee7b90147ebe042bf1a600a96b0abf, type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8054689501814014560, guid: c3ee7b90147ebe042bf1a600a96b0abf, type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8054689501814014560, guid: c3ee7b90147ebe042bf1a600a96b0abf, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8054689501814014560, guid: c3ee7b90147ebe042bf1a600a96b0abf, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8054689501814014560, guid: c3ee7b90147ebe042bf1a600a96b0abf, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
m_RemovedComponents:
- {fileID: 5106284389308251883, guid: c3ee7b90147ebe042bf1a600a96b0abf, type: 3}
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: c3ee7b90147ebe042bf1a600a96b0abf, type: 3}
--- !u!23 &867643096524521749 stripped
MeshRenderer:
m_CorrespondingSourceObject: {fileID: 4733158660651713711, guid: c3ee7b90147ebe042bf1a600a96b0abf, type: 3}
m_PrefabInstance: {fileID: 5595144700053915066}
m_PrefabAsset: {fileID: 0}
--- !u!4 &2480906258353145818 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 8054689501814014560, guid: c3ee7b90147ebe042bf1a600a96b0abf, type: 3}
m_PrefabInstance: {fileID: 5595144700053915066}
m_PrefabAsset: {fileID: 0}
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 6bf8e95dcb3a6714b910f625259c6774
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,823 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &430521095547925462
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 8190069976148595663}
- component: {fileID: 6122837660798928291}
- component: {fileID: 4294551351110242468}
m_Layer: 14
m_Name: WallMount_West
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &8190069976148595663
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 430521095547925462}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0.7071068, z: 0.7071068, w: 0}
m_LocalPosition: {x: -1.2446862, y: 0.139819, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 248944562337532593}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &6122837660798928291
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 430521095547925462}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 977546eeac153c04c9a08997c2a8609c, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Ashwild.Building.BuildSnapPoint
category: 1
--- !u!135 &4294551351110242468
SphereCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 430521095547925462}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 3
m_Radius: 0.5
m_Center: {x: 0, y: 0, z: 0}
--- !u!1 &1318648983787145065
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 4898633667536099325}
- component: {fileID: 2465953508121486279}
- component: {fileID: 2079637758399699484}
m_Layer: 14
m_Name: WallMount_South
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &4898633667536099325
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1318648983787145065}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0.7071068, z: 0.7071068, w: 0}
m_LocalPosition: {x: 0, y: 0.139819, z: -1.2342937}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 248944562337532593}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &2465953508121486279
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1318648983787145065}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 977546eeac153c04c9a08997c2a8609c, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Ashwild.Building.BuildSnapPoint
category: 1
--- !u!135 &2079637758399699484
SphereCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1318648983787145065}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 3
m_Radius: 0.5
m_Center: {x: 0, y: 0, z: 0}
--- !u!1 &2927533322789073568
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 8992648873872040683}
- component: {fileID: 6483042259896254011}
- component: {fileID: 3085183870902717225}
m_Layer: 14
m_Name: Floor_North
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &8992648873872040683
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2927533322789073568}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 1.2342937}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 248944562337532593}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &6483042259896254011
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2927533322789073568}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 977546eeac153c04c9a08997c2a8609c, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Ashwild.Building.BuildSnapPoint
category: 0
--- !u!135 &3085183870902717225
SphereCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2927533322789073568}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 3
m_Radius: 0.5
m_Center: {x: 0, y: 0, z: 0}
--- !u!1 &3249437662983405793
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 2000180693350570291}
- component: {fileID: 3360874714659947842}
- component: {fileID: 478132120227767175}
m_Layer: 14
m_Name: Floor_East
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &2000180693350570291
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3249437662983405793}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0.7071068, z: 0, w: 0.7071068}
m_LocalPosition: {x: 1.2446862, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 248944562337532593}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &3360874714659947842
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3249437662983405793}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 977546eeac153c04c9a08997c2a8609c, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Ashwild.Building.BuildSnapPoint
category: 0
--- !u!135 &478132120227767175
SphereCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3249437662983405793}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 3
m_Radius: 0.5
m_Center: {x: 0, y: 0, z: 0}
--- !u!1 &4478274600058527901
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 7627621741129187602}
- component: {fileID: 548701492648806719}
- component: {fileID: 749410258778105127}
m_Layer: 14
m_Name: WallMount_East
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &7627621741129187602
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4478274600058527901}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0.7071068, z: 0.7071068, w: 0}
m_LocalPosition: {x: 1.2446862, y: 0.139819, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 248944562337532593}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &548701492648806719
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4478274600058527901}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 977546eeac153c04c9a08997c2a8609c, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Ashwild.Building.BuildSnapPoint
category: 1
--- !u!135 &749410258778105127
SphereCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4478274600058527901}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 3
m_Radius: 0.5
m_Center: {x: 0, y: 0, z: 0}
--- !u!1 &4757985137243063122
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 7787367724508377841}
- component: {fileID: 6214993921729326338}
- component: {fileID: 7476539020765907155}
m_Layer: 14
m_Name: Floor_West
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &7787367724508377841
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4757985137243063122}
serializedVersion: 2
m_LocalRotation: {x: 0, y: -0.7071068, z: -0, w: 0.7071068}
m_LocalPosition: {x: -1.2446862, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 248944562337532593}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &6214993921729326338
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4757985137243063122}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 977546eeac153c04c9a08997c2a8609c, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Ashwild.Building.BuildSnapPoint
category: 0
--- !u!135 &7476539020765907155
SphereCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4757985137243063122}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 3
m_Radius: 0.5
m_Center: {x: 0, y: 0, z: 0}
--- !u!1 &6111271289325253693
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 2447329633983607400}
- component: {fileID: 4701871052974855494}
- component: {fileID: 3524837029331905181}
m_Layer: 14
m_Name: WallMount_North
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &2447329633983607400
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6111271289325253693}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0.7071068, z: 0.7071068, w: 0}
m_LocalPosition: {x: 0, y: 0.139819, z: 1.2342937}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 248944562337532593}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &4701871052974855494
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6111271289325253693}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 977546eeac153c04c9a08997c2a8609c, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Ashwild.Building.BuildSnapPoint
category: 1
--- !u!135 &3524837029331905181
SphereCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6111271289325253693}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 3
m_Radius: 0.5
m_Center: {x: 0, y: 0, z: 0}
--- !u!1 &7020256173589722522
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 248944562337532593}
m_Layer: 14
m_Name: Snap
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &248944562337532593
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7020256173589722522}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0.0011386871, y: 0.14069226, z: -0.012834609}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 8992648873872040683}
- {fileID: 4674747199710507129}
- {fileID: 2000180693350570291}
- {fileID: 7787367724508377841}
- {fileID: 2447329633983607400}
- {fileID: 4898633667536099325}
- {fileID: 7627621741129187602}
- {fileID: 8190069976148595663}
m_Father: {fileID: 8969264719775463366}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &7177951504346610668
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 8969264719775463366}
- component: {fileID: 4942983283109352063}
- component: {fileID: 6193610700165479330}
- component: {fileID: 5834036106823394854}
- component: {fileID: 3315425253147515194}
m_Layer: 14
m_Name: Ghost_Sol en bois
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &8969264719775463366
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7177951504346610668}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 3907747113190157830}
- {fileID: 248944562337532593}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!65 &4942983283109352063
BoxCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7177951504346610668}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 0
serializedVersion: 3
m_Size: {x: 2.4893725, y: 0.279638, z: 2.4685874}
m_Center: {x: 0.0011386871, y: 0.14069226, z: -0.012834609}
--- !u!114 &6193610700165479330
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7177951504346610668}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 26b716c41e9b56b4baafaf13a523ba2e, type: 3}
m_Name:
m_EditorClassIdentifier: FishNet.Runtime::FishNet.Object.NetworkObject
_localLevelOfDetailCalculationType: 0
_useLevelOfDetail: 0
_useRootLevelOfDetail: 1
NetworkObserver: {fileID: 0}
_enablePrediction: 0
_predictionType: 0
_localReconcileCorrectionType: 2
_graphicalObject: {fileID: 0}
_detachGraphicalObject: 0
_enableStateForwarding: 1
_networkTransform: {fileID: 0}
_ownerInterpolation: 1
_ownerSmoothedProperties: 255
_adaptiveInterpolation: 3
_spectatorSmoothedProperties: 255
_spectatorInterpolation: 2
_enableTeleport: 0
_teleportThreshold: 1
<PrefabId>k__BackingField: 20
<SpawnableCollectionId>k__BackingField: 0
<AssetPathHash>k__BackingField: 17746024873254907359
SceneId: 0
SerializedTransformProperties:
Position: {x: 0, y: 0, z: 0}
Rotation: {x: 0, y: 0, z: 0, w: 1}
Scale: {x: 1, y: 1, z: 1}
IsValid: 1
<IsNested>k__BackingField: 0
WasActiveDuringEdit: 0
WasActiveDuringEdit_Set1: 1
<ComponentIndex>k__BackingField: 0
<PredictedSpawn>k__BackingField: {fileID: 0}
<PredictedOwner>k__BackingField: {fileID: 0}
NetworkBehaviours:
- {fileID: 5834036106823394854}
InitializedParentNetworkBehaviour: {fileID: 0}
InitializedNestedNetworkObjects: []
RuntimeParentNetworkBehaviour: {fileID: 0}
RuntimeChildNetworkBehaviours: []
_isNetworked: 1
_isSpawnable: 1
_isGlobal: 0
_initializeOrder: 0
_preventDespawnOnDisconnect: 0
_defaultDespawnType: 0
_initializedTimestamp: -8584169414543529327
--- !u!114 &5834036106823394854
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7177951504346610668}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: a2836e36774ca1c4bbbee976e17b649c, type: 3}
m_Name:
m_EditorClassIdentifier: FishNet.Runtime::FishNet.Component.Transforming.NetworkTransform
_componentIndexCache: 0
_addedNetworkObject: {fileID: 6193610700165479330}
_networkObjectCache: {fileID: 6193610700165479330}
_componentConfiguration: 0
_synchronizeParent: 0
_packing:
Position: 1
Rotation: 1
Scale: 0
_useScaledTime: 1
_interpolation: 2
_extrapolation: 2
_enableTeleport: 0
_teleportThreshold: 1
_clientAuthoritative: 1
_sendToOwner: 1
_interval: 1
_synchronizePosition: 1
_positionSensitivity: 0.001
_positionSnapping:
X: 0
Y: 0
Z: 0
_synchronizeRotation: 1
_rotationSnapping:
X: 0
Y: 0
Z: 0
_synchronizeScale: 1
_scaleSensitivity: 0.001
_scaleSnapping:
X: 0
Y: 0
Z: 0
--- !u!114 &3315425253147515194
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7177951504346610668}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3da63aae88fc0f547b84e1d74e927e39, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Ashwild.Building.BuildGhost
footprint: {fileID: 4942983283109352063}
renderers:
- {fileID: 1755441368672839881}
validOverlay: {fileID: 2100000, guid: 0e580295bcb9d8e4ab68d1a7f11efa63, type: 2}
invalidOverlay: {fileID: 2100000, guid: 0a594aa41ef0d7e428398c2c32772c64, type: 2}
--- !u!1 &7614968041141383678
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 4674747199710507129}
- component: {fileID: 7655421992682191301}
- component: {fileID: 4568402137604565735}
m_Layer: 14
m_Name: Floor_South
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &4674747199710507129
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7614968041141383678}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 1, z: 0, w: 0}
m_LocalPosition: {x: 0, y: 0, z: -1.2342937}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 248944562337532593}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &7655421992682191301
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7614968041141383678}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 977546eeac153c04c9a08997c2a8609c, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Ashwild.Building.BuildSnapPoint
category: 0
--- !u!135 &4568402137604565735
SphereCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7614968041141383678}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 3
m_Radius: 0.5
m_Center: {x: 0, y: 0, z: 0}
--- !u!1001 &6481553042355301478
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 8969264719775463366}
m_Modifications:
- target: {fileID: 6454600228789530739, guid: c3ee7b90147ebe042bf1a600a96b0abf, type: 3}
propertyPath: m_Name
value: WoodCelling_Prefab
objectReference: {fileID: 0}
- target: {fileID: 8054689501814014560, guid: c3ee7b90147ebe042bf1a600a96b0abf, type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8054689501814014560, guid: c3ee7b90147ebe042bf1a600a96b0abf, type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8054689501814014560, guid: c3ee7b90147ebe042bf1a600a96b0abf, type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8054689501814014560, guid: c3ee7b90147ebe042bf1a600a96b0abf, type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 8054689501814014560, guid: c3ee7b90147ebe042bf1a600a96b0abf, type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8054689501814014560, guid: c3ee7b90147ebe042bf1a600a96b0abf, type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8054689501814014560, guid: c3ee7b90147ebe042bf1a600a96b0abf, type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8054689501814014560, guid: c3ee7b90147ebe042bf1a600a96b0abf, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8054689501814014560, guid: c3ee7b90147ebe042bf1a600a96b0abf, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8054689501814014560, guid: c3ee7b90147ebe042bf1a600a96b0abf, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: c3ee7b90147ebe042bf1a600a96b0abf, type: 3}
--- !u!23 &1755441368672839881 stripped
MeshRenderer:
m_CorrespondingSourceObject: {fileID: 4733158660651713711, guid: c3ee7b90147ebe042bf1a600a96b0abf, type: 3}
m_PrefabInstance: {fileID: 6481553042355301478}
m_PrefabAsset: {fileID: 0}
--- !u!4 &3907747113190157830 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 8054689501814014560, guid: c3ee7b90147ebe042bf1a600a96b0abf, type: 3}
m_PrefabInstance: {fileID: 6481553042355301478}
m_PrefabAsset: {fileID: 0}
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: f046cc05e536953459b254c18199682d
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -297,7 +297,7 @@ MonoBehaviour:
_spectatorInterpolation: 2
_enableTeleport: 0
_teleportThreshold: 1
<PrefabId>k__BackingField: 10
<PrefabId>k__BackingField: 11
<SpawnableCollectionId>k__BackingField: 0
<AssetPathHash>k__BackingField: 10703378808306651026
SceneId: 0
@@ -324,7 +324,7 @@ MonoBehaviour:
_initializeOrder: 0
_preventDespawnOnDisconnect: 0
_defaultDespawnType: 0
_initializedTimestamp: -8584181721604556210
_initializedTimestamp: -8584169414543529327
--- !u!1 &5855379289088646484
GameObject:
m_ObjectHideFlags: 0
@@ -1,6 +1,6 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &1449196833709694992
--- !u!1 &542849118745372900
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
@@ -8,10 +8,218 @@ GameObject:
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 607827644847487143}
- component: {fileID: 3963579599117951989}
- component: {fileID: 5725644289869038764}
- component: {fileID: 7776490238597678248}
- component: {fileID: 310967193875547842}
- component: {fileID: 4526848622919824119}
m_Layer: 5
m_Name: Ressources Needed Ui
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &310967193875547842
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 542849118745372900}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 198739833623371999}
- {fileID: 584408140031347170}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 0}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 182.5, y: 100}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &4526848622919824119
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 542849118745372900}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: b197776c5c48d19409d8b73a5f77bcfb, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Ashwild.UI.BuildCostEntryUI
icon: {fileID: 5353320151652771885}
amountLabel: {fileID: 3165878011081759808}
affordColor: {r: 1, g: 1, b: 1, a: 1}
missingColor: {r: 1, g: 0.35, b: 0.35, a: 1}
--- !u!1 &2645899834466809626
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 198739833623371999}
- component: {fileID: 429033920032492496}
- component: {fileID: 5978422469185035414}
m_Layer: 5
m_Name: Image
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &198739833623371999
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2645899834466809626}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 310967193875547842}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 1.5858, y: 0}
m_SizeDelta: {x: -14.227, y: -35.256}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &429033920032492496
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2645899834466809626}
m_CullTransparentMesh: 1
--- !u!114 &5978422469185035414
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2645899834466809626}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
m_Material: {fileID: 0}
m_Color: {r: 0.3679245, g: 0.3679245, b: 0.3679245, a: 0.28235295}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 21300000, guid: c4f7f8debbcf3cf4faf280628cab55f9, type: 3}
m_Type: 1
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!1 &3192063945015413932
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 584408140031347170}
- component: {fileID: 2990510669376542892}
- component: {fileID: 7503349329125450186}
m_Layer: 5
m_Name: GameObject
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &584408140031347170
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3192063945015413932}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 3991399002855118185}
- {fileID: 6531536504494789601}
m_Father: {fileID: 310967193875547842}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: -6.9, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &2990510669376542892
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3192063945015413932}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.ContentSizeFitter
m_HorizontalFit: 2
m_VerticalFit: 2
--- !u!114 &7503349329125450186
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3192063945015413932}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.HorizontalLayoutGroup
m_Padding:
m_Left: 0
m_Right: 0
m_Top: 0
m_Bottom: 0
m_ChildAlignment: 4
m_Spacing: 0
m_ChildForceExpandWidth: 1
m_ChildForceExpandHeight: 1
m_ChildControlWidth: 0
m_ChildControlHeight: 0
m_ChildScaleWidth: 0
m_ChildScaleHeight: 0
m_ReverseArrangement: 0
--- !u!1 &5347819237772639510
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 6531536504494789601}
- component: {fileID: 1370747412458166393}
- component: {fileID: 3165878011081759808}
- component: {fileID: 3601661005796488396}
m_Layer: 5
m_Name: Text (TMP)
m_TagString: Untagged
@@ -19,40 +227,40 @@ GameObject:
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &607827644847487143
--- !u!224 &6531536504494789601
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1449196833709694992}
m_GameObject: {fileID: 5347819237772639510}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 8500789918531834058}
m_Father: {fileID: 584408140031347170}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 0, y: 1}
m_AnchoredPosition: {x: 85.313095, y: -31.504}
m_SizeDelta: {x: 44.61, y: 63.008}
m_AnchoredPosition: {x: 101.8443, y: -32.37215}
m_SizeDelta: {x: 74.2, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &3963579599117951989
--- !u!222 &1370747412458166393
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1449196833709694992}
m_GameObject: {fileID: 5347819237772639510}
m_CullTransparentMesh: 1
--- !u!114 &5725644289869038764
--- !u!114 &3165878011081759808
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1449196833709694992}
m_GameObject: {fileID: 5347819237772639510}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
@@ -66,9 +274,7 @@ MonoBehaviour:
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_text: '10/10
'
m_text: 2/10
m_isRightToLeft: 0
m_fontAsset: {fileID: 11400000, guid: dc221f629ad2625429da3920b6f9a348, type: 2}
m_sharedMaterial: {fileID: 3767062857633432899, guid: dc221f629ad2625429da3920b6f9a348, type: 2}
@@ -95,13 +301,13 @@ MonoBehaviour:
m_faceColor:
serializedVersion: 2
rgba: 4294967295
m_fontSize: 20
m_fontSizeBase: 20
m_fontSize: 36
m_fontSizeBase: 36
m_fontWeight: 400
m_enableAutoSizing: 0
m_fontSizeMin: 18
m_fontSizeMax: 72
m_fontStyle: 0
m_fontStyle: 1
m_HorizontalAlignment: 2
m_VerticalAlignment: 512
m_textAlignment: 65535
@@ -140,21 +346,21 @@ MonoBehaviour:
m_hasFontAssetChanged: 0
m_baseMaterial: {fileID: 0}
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
--- !u!114 &7776490238597678248
--- !u!114 &3601661005796488396
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1449196833709694992}
m_GameObject: {fileID: 5347819237772639510}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.ContentSizeFitter
m_HorizontalFit: 2
m_VerticalFit: 0
--- !u!1 &3796616338314271085
m_VerticalFit: 2
--- !u!1 &8572139397173251095
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
@@ -162,9 +368,9 @@ GameObject:
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 67615937123066110}
- component: {fileID: 2248708403780224795}
- component: {fileID: 824788329508477661}
- component: {fileID: 3991399002855118185}
- component: {fileID: 3346059932869489193}
- component: {fileID: 5353320151652771885}
m_Layer: 5
m_Name: Image
m_TagString: Untagged
@@ -172,40 +378,40 @@ GameObject:
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &67615937123066110
--- !u!224 &3991399002855118185
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3796616338314271085}
m_GameObject: {fileID: 8572139397173251095}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 8500789918531834058}
m_Father: {fileID: 584408140031347170}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 0}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 63.0081, y: 63.0081}
m_SizeDelta: {x: 64.7443, y: 64.7443}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &2248708403780224795
--- !u!222 &3346059932869489193
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3796616338314271085}
m_GameObject: {fileID: 8572139397173251095}
m_CullTransparentMesh: 1
--- !u!114 &824788329508477661
--- !u!114 &5353320151652771885
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3796616338314271085}
m_GameObject: {fileID: 8572139397173251095}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
@@ -221,7 +427,7 @@ MonoBehaviour:
m_Calls: []
m_Sprite: {fileID: 21300000, guid: aac71bc72b8e8ce4da73028769c1b20a, type: 3}
m_Type: 0
m_PreserveAspect: 1
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
@@ -229,99 +435,3 @@ MonoBehaviour:
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!1 &6992362772493703696
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 8500789918531834058}
- component: {fileID: 7137866051671997104}
- component: {fileID: 1408010592961239319}
- component: {fileID: 9158453950938887334}
m_Layer: 5
m_Name: Ressources Needed
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &8500789918531834058
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6992362772493703696}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 67615937123066110}
- {fileID: 607827644847487143}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 0, y: 1}
m_AnchoredPosition: {x: 36.999268, y: -14.694519}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &7137866051671997104
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6992362772493703696}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.HorizontalLayoutGroup
m_Padding:
m_Left: 0
m_Right: 0
m_Top: 0
m_Bottom: 0
m_ChildAlignment: 0
m_Spacing: 0
m_ChildForceExpandWidth: 1
m_ChildForceExpandHeight: 1
m_ChildControlWidth: 0
m_ChildControlHeight: 0
m_ChildScaleWidth: 0
m_ChildScaleHeight: 0
m_ReverseArrangement: 0
--- !u!114 &1408010592961239319
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6992362772493703696}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.ContentSizeFitter
m_HorizontalFit: 2
m_VerticalFit: 2
--- !u!114 &9158453950938887334
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6992362772493703696}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: b197776c5c48d19409d8b73a5f77bcfb, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Ashwild.UI.BuildCostEntryUI
icon: {fileID: 824788329508477661}
amountLabel: {fileID: 5725644289869038764}
affordColor: {r: 1, g: 1, b: 1, a: 1}
missingColor: {r: 1, g: 0.35, b: 0.35, a: 1}
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 6e53fb4da47f13648973d61c547e63d6
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
+515 -11
View File
@@ -2572,7 +2572,7 @@ MonoBehaviour:
m_Top: 0
m_Bottom: 0
m_ChildAlignment: 1
m_Spacing: 7.8
m_Spacing: 7
m_ChildForceExpandWidth: 1
m_ChildForceExpandHeight: 1
m_ChildControlWidth: 0
@@ -3081,7 +3081,7 @@ GameObject:
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
m_IsActive: 0
--- !u!224 &8481609622609388703
RectTransform:
m_ObjectHideFlags: 0
@@ -3093,12 +3093,15 @@ RectTransform:
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Children:
- {fileID: 6728699242075629836}
- {fileID: 7225429466115344003}
- {fileID: 4276272872393547282}
m_Father: {fileID: 7857481831142227221}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 0, y: 1}
m_AnchoredPosition: {x: 110.48, y: -46.7}
m_AnchoredPosition: {x: 5, y: -17}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &3834215647302423569
@@ -3124,8 +3127,8 @@ MonoBehaviour:
m_ChildForceExpandHeight: 1
m_ChildControlWidth: 0
m_ChildControlHeight: 0
m_ChildScaleWidth: 0
m_ChildScaleHeight: 0
m_ChildScaleWidth: 1
m_ChildScaleHeight: 1
m_ReverseArrangement: 0
--- !u!114 &4722122648630739765
MonoBehaviour:
@@ -4527,7 +4530,7 @@ GameObject:
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
m_IsActive: 0
--- !u!224 &1596723111164776776
RectTransform:
m_ObjectHideFlags: 0
@@ -4544,8 +4547,8 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 0, y: 1}
m_AnchoredPosition: {x: 110.48, y: -28.349998}
m_SizeDelta: {x: 220.96, y: 0}
m_AnchoredPosition: {x: 278.75, y: -20.55}
m_SizeDelta: {x: 220.96, y: 21.1}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &4132973060268027817
CanvasRenderer:
@@ -5954,8 +5957,14 @@ MonoBehaviour:
m_EditorClassIdentifier: Assembly-CSharp::CrosshairManager
icon: {fileID: 8955712843149927660}
promptLabel: {fileID: 65970657491887858}
costHolder: {fileID: 8481609622609388703}
costEntryPrefab: {fileID: 9158453950938887334, guid: fb3189f697e11534299fe0ff296e53bc, type: 3}
verticalGroup: {fileID: 9071915530194825027}
idleSpacing: 7
buildSpacing: 7
costHolder: {fileID: 4437702633090290063}
costEntries:
- {fileID: 7485962907017092409}
- {fileID: 6829636285320704694}
- {fileID: 133419483354278439}
idleState: {fileID: 11400000, guid: e6730ffd626cf7240951b398e0521454, type: 2}
hoverState: {fileID: 11400000, guid: 7bbc76d322beed84282f97531e2230e3, type: 2}
transitionDuration: 0.25
@@ -8463,6 +8472,171 @@ RectTransform:
m_CorrespondingSourceObject: {fileID: 4729973786354734962, guid: 11892426c0821bd4083da2f453d1a1f1, type: 3}
m_PrefabInstance: {fileID: 4320600255612900325}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &4542047928556493008
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 8481609622609388703}
m_Modifications:
- target: {fileID: 310967193875547842, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_Pivot.x
value: 0.5
objectReference: {fileID: 0}
- target: {fileID: 310967193875547842, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_Pivot.y
value: 0.5
objectReference: {fileID: 0}
- target: {fileID: 310967193875547842, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_AnchorMax.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 310967193875547842, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_AnchorMax.y
value: 1
objectReference: {fileID: 0}
- target: {fileID: 310967193875547842, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_AnchorMin.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 310967193875547842, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_AnchorMin.y
value: 1
objectReference: {fileID: 0}
- target: {fileID: 310967193875547842, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_SizeDelta.x
value: 182.5
objectReference: {fileID: 0}
- target: {fileID: 310967193875547842, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_SizeDelta.y
value: 100
objectReference: {fileID: 0}
- target: {fileID: 310967193875547842, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 310967193875547842, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 310967193875547842, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 310967193875547842, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 310967193875547842, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 310967193875547842, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 310967193875547842, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 310967193875547842, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_AnchoredPosition.x
value: 466.25
objectReference: {fileID: 0}
- target: {fileID: 310967193875547842, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_AnchoredPosition.y
value: -50
objectReference: {fileID: 0}
- target: {fileID: 310967193875547842, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 310967193875547842, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 310967193875547842, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 542849118745372900, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_Name
value: Ressources Needed Ui (2)
objectReference: {fileID: 0}
- target: {fileID: 542849118745372900, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_IsActive
value: 0
objectReference: {fileID: 0}
- target: {fileID: 584408140031347170, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_SizeDelta.x
value: 138.9443
objectReference: {fileID: 0}
- target: {fileID: 584408140031347170, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_SizeDelta.y
value: 64.7443
objectReference: {fileID: 0}
- target: {fileID: 3991399002855118185, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_AnchorMax.y
value: 1
objectReference: {fileID: 0}
- target: {fileID: 3991399002855118185, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_AnchorMin.y
value: 1
objectReference: {fileID: 0}
- target: {fileID: 3991399002855118185, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_AnchoredPosition.x
value: 32.37215
objectReference: {fileID: 0}
- target: {fileID: 3991399002855118185, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_AnchoredPosition.y
value: -32.37215
objectReference: {fileID: 0}
- target: {fileID: 6531536504494789601, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_AnchorMax.y
value: 1
objectReference: {fileID: 0}
- target: {fileID: 6531536504494789601, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_AnchorMin.y
value: 1
objectReference: {fileID: 0}
- target: {fileID: 6531536504494789601, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_SizeDelta.x
value: 74.2
objectReference: {fileID: 0}
- target: {fileID: 6531536504494789601, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_SizeDelta.y
value: 43.21
objectReference: {fileID: 0}
- target: {fileID: 6531536504494789601, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_AnchoredPosition.x
value: 101.8443
objectReference: {fileID: 0}
- target: {fileID: 6531536504494789601, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_AnchoredPosition.y
value: -32.37215
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
--- !u!114 &133419483354278439 stripped
MonoBehaviour:
m_CorrespondingSourceObject: {fileID: 4526848622919824119, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
m_PrefabInstance: {fileID: 4542047928556493008}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: b197776c5c48d19409d8b73a5f77bcfb, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Ashwild.UI.BuildCostEntryUI
--- !u!224 &4276272872393547282 stripped
RectTransform:
m_CorrespondingSourceObject: {fileID: 310967193875547842, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
m_PrefabInstance: {fileID: 4542047928556493008}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &5009484648183140821
PrefabInstance:
m_ObjectHideFlags: 0
@@ -9267,6 +9441,336 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: da6ff11a2825c2c41b3d675f4b46c9f2, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::SlotUI
--- !u!1001 &6427168061402066894
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 8481609622609388703}
m_Modifications:
- target: {fileID: 310967193875547842, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_Pivot.x
value: 0.5
objectReference: {fileID: 0}
- target: {fileID: 310967193875547842, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_Pivot.y
value: 0.5
objectReference: {fileID: 0}
- target: {fileID: 310967193875547842, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_AnchorMax.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 310967193875547842, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_AnchorMax.y
value: 1
objectReference: {fileID: 0}
- target: {fileID: 310967193875547842, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_AnchorMin.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 310967193875547842, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_AnchorMin.y
value: 1
objectReference: {fileID: 0}
- target: {fileID: 310967193875547842, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_SizeDelta.x
value: 182.5
objectReference: {fileID: 0}
- target: {fileID: 310967193875547842, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_SizeDelta.y
value: 100
objectReference: {fileID: 0}
- target: {fileID: 310967193875547842, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 310967193875547842, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 310967193875547842, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 310967193875547842, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 310967193875547842, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 310967193875547842, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 310967193875547842, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 310967193875547842, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_AnchoredPosition.x
value: 91.25
objectReference: {fileID: 0}
- target: {fileID: 310967193875547842, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_AnchoredPosition.y
value: -50
objectReference: {fileID: 0}
- target: {fileID: 310967193875547842, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 310967193875547842, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 310967193875547842, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 542849118745372900, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_Name
value: Ressources Needed Ui
objectReference: {fileID: 0}
- target: {fileID: 542849118745372900, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_IsActive
value: 0
objectReference: {fileID: 0}
- target: {fileID: 584408140031347170, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_SizeDelta.x
value: 138.9443
objectReference: {fileID: 0}
- target: {fileID: 584408140031347170, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_SizeDelta.y
value: 64.7443
objectReference: {fileID: 0}
- target: {fileID: 3991399002855118185, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_AnchorMax.y
value: 1
objectReference: {fileID: 0}
- target: {fileID: 3991399002855118185, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_AnchorMin.y
value: 1
objectReference: {fileID: 0}
- target: {fileID: 3991399002855118185, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_AnchoredPosition.x
value: 32.37215
objectReference: {fileID: 0}
- target: {fileID: 3991399002855118185, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_AnchoredPosition.y
value: -32.37215
objectReference: {fileID: 0}
- target: {fileID: 6531536504494789601, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_AnchorMax.y
value: 1
objectReference: {fileID: 0}
- target: {fileID: 6531536504494789601, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_AnchorMin.y
value: 1
objectReference: {fileID: 0}
- target: {fileID: 6531536504494789601, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_SizeDelta.x
value: 74.2
objectReference: {fileID: 0}
- target: {fileID: 6531536504494789601, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_SizeDelta.y
value: 43.21
objectReference: {fileID: 0}
- target: {fileID: 6531536504494789601, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_AnchoredPosition.x
value: 101.8443
objectReference: {fileID: 0}
- target: {fileID: 6531536504494789601, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_AnchoredPosition.y
value: -32.37215
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
--- !u!224 &6728699242075629836 stripped
RectTransform:
m_CorrespondingSourceObject: {fileID: 310967193875547842, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
m_PrefabInstance: {fileID: 6427168061402066894}
m_PrefabAsset: {fileID: 0}
--- !u!114 &7485962907017092409 stripped
MonoBehaviour:
m_CorrespondingSourceObject: {fileID: 4526848622919824119, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
m_PrefabInstance: {fileID: 6427168061402066894}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: b197776c5c48d19409d8b73a5f77bcfb, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Ashwild.UI.BuildCostEntryUI
--- !u!1001 &6923482688266600513
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 8481609622609388703}
m_Modifications:
- target: {fileID: 310967193875547842, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_Pivot.x
value: 0.5
objectReference: {fileID: 0}
- target: {fileID: 310967193875547842, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_Pivot.y
value: 0.5
objectReference: {fileID: 0}
- target: {fileID: 310967193875547842, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_AnchorMax.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 310967193875547842, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_AnchorMax.y
value: 1
objectReference: {fileID: 0}
- target: {fileID: 310967193875547842, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_AnchorMin.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 310967193875547842, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_AnchorMin.y
value: 1
objectReference: {fileID: 0}
- target: {fileID: 310967193875547842, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_SizeDelta.x
value: 182.5
objectReference: {fileID: 0}
- target: {fileID: 310967193875547842, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_SizeDelta.y
value: 100
objectReference: {fileID: 0}
- target: {fileID: 310967193875547842, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 310967193875547842, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 310967193875547842, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 310967193875547842, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 310967193875547842, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 310967193875547842, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 310967193875547842, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 310967193875547842, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_AnchoredPosition.x
value: 278.75
objectReference: {fileID: 0}
- target: {fileID: 310967193875547842, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_AnchoredPosition.y
value: -50
objectReference: {fileID: 0}
- target: {fileID: 310967193875547842, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 310967193875547842, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 310967193875547842, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 542849118745372900, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_Name
value: Ressources Needed Ui (1)
objectReference: {fileID: 0}
- target: {fileID: 542849118745372900, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_IsActive
value: 0
objectReference: {fileID: 0}
- target: {fileID: 584408140031347170, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_SizeDelta.x
value: 138.9443
objectReference: {fileID: 0}
- target: {fileID: 584408140031347170, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_SizeDelta.y
value: 64.7443
objectReference: {fileID: 0}
- target: {fileID: 3991399002855118185, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_AnchorMax.y
value: 1
objectReference: {fileID: 0}
- target: {fileID: 3991399002855118185, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_AnchorMin.y
value: 1
objectReference: {fileID: 0}
- target: {fileID: 3991399002855118185, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_AnchoredPosition.x
value: 32.37215
objectReference: {fileID: 0}
- target: {fileID: 3991399002855118185, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_AnchoredPosition.y
value: -32.37215
objectReference: {fileID: 0}
- target: {fileID: 6531536504494789601, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_AnchorMax.y
value: 1
objectReference: {fileID: 0}
- target: {fileID: 6531536504494789601, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_AnchorMin.y
value: 1
objectReference: {fileID: 0}
- target: {fileID: 6531536504494789601, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_SizeDelta.x
value: 74.2
objectReference: {fileID: 0}
- target: {fileID: 6531536504494789601, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_SizeDelta.y
value: 43.21
objectReference: {fileID: 0}
- target: {fileID: 6531536504494789601, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_AnchoredPosition.x
value: 101.8443
objectReference: {fileID: 0}
- target: {fileID: 6531536504494789601, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
propertyPath: m_AnchoredPosition.y
value: -32.37215
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
--- !u!114 &6829636285320704694 stripped
MonoBehaviour:
m_CorrespondingSourceObject: {fileID: 4526848622919824119, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
m_PrefabInstance: {fileID: 6923482688266600513}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: b197776c5c48d19409d8b73a5f77bcfb, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Ashwild.UI.BuildCostEntryUI
--- !u!224 &7225429466115344003 stripped
RectTransform:
m_CorrespondingSourceObject: {fileID: 310967193875547842, guid: 6e53fb4da47f13648973d61c547e63d6, type: 3}
m_PrefabInstance: {fileID: 6923482688266600513}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &7818409619538672673
PrefabInstance:
m_ObjectHideFlags: 0
@@ -13,5 +13,7 @@ MonoBehaviour:
m_Name: BuildableDatabase
m_EditorClassIdentifier: Assembly-CSharp::Ashwild.Building.BuildableDatabase
buildables:
- {fileID: 11400000, guid: 869ce1fcc7aafc4429d8095f5c8ba6b0, type: 2}
- {fileID: 11400000, guid: 030740a1d4869434fb535225dbe03471, type: 2}
- {fileID: 11400000, guid: dca47e84e615c4e4baa4da9b06529e55, type: 2}
- {fileID: 11400000, guid: a42d503226db3774a8ebdce271364b22, type: 2}
- {fileID: 11400000, guid: f37e0d3c7eef5bb40956a640425b1845, type: 2}
+1
View File
@@ -23,6 +23,7 @@ MonoBehaviour:
- {fileID: 11400000, guid: 61d25be5e4754e48b62692e58bd4fc00, type: 2}
- {fileID: 11400000, guid: a827e12e2b364d73bd1038d60d5258a1, type: 2}
- {fileID: 11400000, guid: 0c27b42a96974b60b484bf475036ef58, type: 2}
- {fileID: 11400000, guid: db082cae7b71f3643ad33fcc5d4c474b, type: 2}
- {fileID: 11400000, guid: 60132cba2202496eb74f2afc1f89c81a, type: 2}
- {fileID: 11400000, guid: f9cafd470cfc4aa8aceea5b263c4c25c, type: 2}
- {fileID: 11400000, guid: 6b543ed8734f4dcf984c1c43d63a9207, type: 2}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 09a9af9cb71128f44aa20b50333b8848
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 15600000
userData:
assetBundleName:
assetBundleVariant:
+39 -11
View File
@@ -163,6 +163,12 @@ MonoBehaviour:
_prefab: Assets/GAME/Prefabs/Manager/PlayerPresenceFeedUI.prefab
- _gameObject: {fileID: 196788999}
_prefab: Assets/GAME/Prefabs/UI/Player_Canvas.prefab
- _gameObject: {fileID: 196789015}
_prefab: Assets/GAME/Prefabs/UI/Build/Ressources Needed Ui.prefab
- _gameObject: {fileID: 196789014}
_prefab: Assets/GAME/Prefabs/UI/Build/Ressources Needed Ui.prefab
- _gameObject: {fileID: 196789013}
_prefab: Assets/GAME/Prefabs/UI/Build/Ressources Needed Ui.prefab
- _gameObject: {fileID: 196789012}
_prefab: Assets/GAME/Prefabs/UI/Button Category.prefab
- _gameObject: {fileID: 196789011}
@@ -1081,47 +1087,47 @@ GameObject:
m_PrefabAsset: {fileID: 0}
--- !u!1 &196789000 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 1435912439651889848, guid: fc052529108a2854aa09a1d295778ef4, type: 3}
m_CorrespondingSourceObject: {fileID: 5158597572884001758, guid: fc052529108a2854aa09a1d295778ef4, type: 3}
m_PrefabInstance: {fileID: 196788998}
m_PrefabAsset: {fileID: 0}
--- !u!1 &196789001 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 3870225346547395938, guid: fc052529108a2854aa09a1d295778ef4, type: 3}
m_CorrespondingSourceObject: {fileID: 2899509862561618229, guid: fc052529108a2854aa09a1d295778ef4, type: 3}
m_PrefabInstance: {fileID: 196788998}
m_PrefabAsset: {fileID: 0}
--- !u!1 &196789002 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 4665850176590005251, guid: fc052529108a2854aa09a1d295778ef4, type: 3}
m_CorrespondingSourceObject: {fileID: 5175506847435012150, guid: fc052529108a2854aa09a1d295778ef4, type: 3}
m_PrefabInstance: {fileID: 196788998}
m_PrefabAsset: {fileID: 0}
--- !u!1 &196789003 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 5439416756030813576, guid: fc052529108a2854aa09a1d295778ef4, type: 3}
m_CorrespondingSourceObject: {fileID: 6218829446984784645, guid: fc052529108a2854aa09a1d295778ef4, type: 3}
m_PrefabInstance: {fileID: 196788998}
m_PrefabAsset: {fileID: 0}
--- !u!1 &196789004 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 5027997652594933461, guid: fc052529108a2854aa09a1d295778ef4, type: 3}
m_CorrespondingSourceObject: {fileID: 4525802775991890810, guid: fc052529108a2854aa09a1d295778ef4, type: 3}
m_PrefabInstance: {fileID: 196788998}
m_PrefabAsset: {fileID: 0}
--- !u!1 &196789005 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 59684519612680428, guid: fc052529108a2854aa09a1d295778ef4, type: 3}
m_CorrespondingSourceObject: {fileID: 3170185415313623352, guid: fc052529108a2854aa09a1d295778ef4, type: 3}
m_PrefabInstance: {fileID: 196788998}
m_PrefabAsset: {fileID: 0}
--- !u!1 &196789006 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 6596292997576987978, guid: fc052529108a2854aa09a1d295778ef4, type: 3}
m_CorrespondingSourceObject: {fileID: 8518248039573098604, guid: fc052529108a2854aa09a1d295778ef4, type: 3}
m_PrefabInstance: {fileID: 196788998}
m_PrefabAsset: {fileID: 0}
--- !u!1 &196789007 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 2054330470357333891, guid: fc052529108a2854aa09a1d295778ef4, type: 3}
m_CorrespondingSourceObject: {fileID: 1233530907938768311, guid: fc052529108a2854aa09a1d295778ef4, type: 3}
m_PrefabInstance: {fileID: 196788998}
m_PrefabAsset: {fileID: 0}
--- !u!1 &196789008 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 7010948319502818324, guid: fc052529108a2854aa09a1d295778ef4, type: 3}
m_CorrespondingSourceObject: {fileID: 5286856348858392856, guid: fc052529108a2854aa09a1d295778ef4, type: 3}
m_PrefabInstance: {fileID: 196788998}
m_PrefabAsset: {fileID: 0}
--- !u!1 &196789009 stripped
@@ -1144,6 +1150,21 @@ GameObject:
m_CorrespondingSourceObject: {fileID: 1085327290798050191, guid: fc052529108a2854aa09a1d295778ef4, type: 3}
m_PrefabInstance: {fileID: 196788998}
m_PrefabAsset: {fileID: 0}
--- !u!1 &196789013 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 4071270431516733492, guid: fc052529108a2854aa09a1d295778ef4, type: 3}
m_PrefabInstance: {fileID: 196788998}
m_PrefabAsset: {fileID: 0}
--- !u!1 &196789014 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 7466318057741297829, guid: fc052529108a2854aa09a1d295778ef4, type: 3}
m_PrefabInstance: {fileID: 196788998}
m_PrefabAsset: {fileID: 0}
--- !u!1 &196789015 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 6825615529796470570, guid: fc052529108a2854aa09a1d295778ef4, type: 3}
m_PrefabInstance: {fileID: 196788998}
m_PrefabAsset: {fileID: 0}
--- !u!1 &245694839
GameObject:
m_ObjectHideFlags: 0
@@ -2952,6 +2973,7 @@ MonoBehaviour:
useGrid: 1
gridSize: 1
rotationStep: 90
continuousBuild: 0
snapRadius: 1.25
snapPointMask:
serializedVersion: 2
@@ -2959,6 +2981,12 @@ MonoBehaviour:
obstructionMask:
serializedVersion: 2
m_Bits: 0
obstructionPadding: 0.03
buildMask:
serializedVersion: 2
m_Bits: 4294967295
demolitionMaterial: {fileID: 0}
hammerUsesPerAction: 1
--- !u!4 &1675459008
Transform:
m_ObjectHideFlags: 0
@@ -3688,7 +3716,7 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 5826855044170579573, guid: fda48d70f282f6c4b9dda3a7533e947b, type: 3}
propertyPath: SceneId
value: 3183474871
value: 3200236991
objectReference: {fileID: 0}
- target: {fileID: 5826855044170579573, guid: fda48d70f282f6c4b9dda3a7533e947b, type: 3}
propertyPath: WasActiveDuringEdit
@@ -3854,7 +3882,7 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 7847709848979142105, guid: 6a3ea20bb46e81c44ad6959bbe90e0dd, type: 3}
propertyPath: SceneId
value: 3170892597
value: 4271586359
objectReference: {fileID: 0}
- target: {fileID: 7847709848979142105, guid: 6a3ea20bb46e81c44ad6959bbe90e0dd, type: 3}
propertyPath: WasActiveDuringEdit
+80 -52
View File
@@ -3,13 +3,41 @@ using UnityEngine;
namespace Ashwild.Building
{
/// <summary>
/// Placement validity for a build ghost. Each frame BuildManager calls Evaluate with the
/// obstruction mask it owns (configured in one place, not per ghost prefab), which box-overlaps
/// the ghost's footprint against those layers (other structures, props, players — never the
/// ground it rests on) and shows the result by adding a valid or invalid overlay material on top
/// of each renderer's base materials (not by tinting them). BuildManager reads <see cref="IsValid"/>
/// to allow or block the build. The footprint collider is only a bounds source: the overlap test
/// reads its dimensions directly rather than relying on physics contacts.
/// Why a placement is or is not allowed. Produced in one place (BuildManager.EvaluatePlacement) and
/// consumed by both the ghost's look and the confirm gate, so the preview can never disagree with
/// what pressing the button actually does — the two used to be decided separately and could drift.
///
/// Splitting the failure into distinct reasons is the point: a single "invalid" state left the
/// player staring at a red ghost with no way to tell a blocked spot from an unpayable one.
/// </summary>
public enum PlacementVerdict
{
/// <summary>Buildable here, right now.</summary>
Valid,
/// <summary>The footprint overlaps something on the obstruction layers.</summary>
Blocked,
/// <summary>The structure requires a socket connection (PlacementSupport.SnapOnly) and has none.</summary>
Unsupported,
/// <summary>The spot itself is fine, but the player cannot pay the cost.</summary>
Unaffordable
}
/// <summary>
/// The visual state of a build ghost — a pure view over a <see cref="PlacementVerdict"/>.
///
/// It decides nothing: BuildManager owns the layer masks, runs the obstruction query and produces
/// the verdict, then hands it here to be rendered. (It used to run the overlap itself using a mask
/// passed in from outside, which mixed deciding with displaying and put the physics query away from
/// the data that configures it.)
///
/// The look is applied by ADDING an overlay material on top of each renderer's authored materials
/// rather than replacing them, so the model keeps its own look underneath the tint. The footprint
/// BoxCollider is exposed purely as a bounds source — it stays disabled on the prefab, because the
/// obstruction mask includes the layer the ghost itself sits on and an enabled collider would make
/// the preview report itself as blocked.
/// </summary>
[DisallowMultipleComponent]
public class BuildGhost : MonoBehaviour
@@ -17,47 +45,54 @@ namespace Ashwild.Building
#region Serialized Fields
[Header("Footprint")]
[Tooltip("Box whose bounds define the volume tested for obstructions. Sized in the prefab.")]
[Tooltip("Box whose bounds define the volume tested for obstructions. Sized in the prefab, and kept disabled — it is read as dimensions, never used for physics contacts.")]
[SerializeField] private BoxCollider footprint;
[Header("Overlay Materials")]
[Tooltip("Renderers the overlay is added onto. Auto-filled from children if left empty.")]
[SerializeField] private Renderer[] renderers;
[Tooltip("Material added on top of the base ones when the spot is buildable (green).")]
[Tooltip("Added on top of the base materials when the spot is buildable (green).")]
[SerializeField] private Material validOverlay;
[Tooltip("Material added on top of the base ones when the spot is blocked (red).")]
[Tooltip("Added for every reason the build is refused — blocked, unsupported or unaffordable.")]
[SerializeField] private Material invalidOverlay;
#endregion
#region State
/// <summary>
/// Whether the ghost is currently on a buildable spot (no obstruction overlap).
/// </summary>
public bool IsValid { get; private set; }
/// <summary>
/// Each renderer's original materials, so the overlay can be appended without losing them.
/// </summary>
private Material[][] baseMaterials;
/// <summary>
/// The validity reflected by the currently applied overlay, so we only swap on a real change.
/// The overlay currently applied, so we only rebuild the material lists when it actually changes.
/// </summary>
private bool lastValid;
private Material lastOverlay;
private bool overlayApplied;
private readonly Collider[] overlapResults = new Collider[8];
#endregion
#region Public API
/// <summary>
/// The footprint volume, for BuildManager to read its centre and size when testing obstructions.
/// Null on a ghost authored without one, which BuildManager treats as "never obstructed".
/// </summary>
public BoxCollider Footprint => footprint;
#endregion
#region Unity Lifecycle
/// <summary>
/// Auto-collects renderers when none were assigned and caches their base materials.
/// Auto-collects renderers when none were assigned, caches their base materials, then shows the
/// valid overlay immediately so the ghost reads as a semi-transparent preview from the very first
/// frame — on every client, not just the owner. On a remote copy nobody runs the evaluation, so
/// without this the ghost would sit in its opaque base materials until (and unless) a validity
/// update lands; the owner's own evaluation overrides this on its next frame anyway.
/// </summary>
private void Awake()
{
@@ -67,53 +102,46 @@ namespace Ashwild.Building
baseMaterials = new Material[renderers.Length][];
for (int i = 0; i < renderers.Length; i++)
baseMaterials[i] = renderers[i] != null ? renderers[i].sharedMaterials : new Material[0];
SetOverlay(validOverlay);
}
#endregion
#region Public API
#region Display
/// <summary>
/// Re-tests the footprint against the obstruction layers (passed in by BuildManager, which
/// owns the mask so it is configured in one place), swaps the overlay material when validity
/// changed, and returns the result. A ghost with no footprint is always considered valid.
/// Shows the look matching a verdict. The single entry point the owner drives every frame.
/// Every refusal shares the one invalid material — the verdict still distinguishes the reasons for
/// the confirm gate (and for anything that wants to surface them later), the preview just does not
/// colour-code them.
/// </summary>
public bool Evaluate(LayerMask obstructionMask)
{
IsValid = !IsObstructed(obstructionMask);
if (!overlayApplied || IsValid != lastValid)
{
ApplyOverlay(IsValid ? validOverlay : invalidOverlay);
lastValid = IsValid;
overlayApplied = true;
}
return IsValid;
}
#endregion
#region Internal
public void SetState(PlacementVerdict verdict)
=> SetOverlay(verdict == PlacementVerdict.Valid ? validOverlay : invalidOverlay);
/// <summary>
/// Box-overlaps the footprint against the obstruction layers, ignoring triggers.
/// Applies the shared valid/blocked look on a remote copy from the placer's replicated spot
/// validity (routed through BuildRegistry). Remotes only ever see these two states — the placer's
/// private "unaffordable" and "unsupported" reasons are never sent — so a teammate sees green on
/// a buildable spot and red otherwise, matching where the placer can actually build.
/// </summary>
private bool IsObstructed(LayerMask obstructionMask)
public void SetRemoteValidity(bool valid) => SetOverlay(valid ? validOverlay : invalidOverlay);
/// <summary>
/// Sets the current overlay, rebuilding the renderers' material lists only when it actually
/// changes — the single funnel every state path goes through, so the change-guard stays in one place.
/// </summary>
private void SetOverlay(Material overlay)
{
if (footprint == null) return false;
Transform t = footprint.transform;
Vector3 center = t.TransformPoint(footprint.center);
Vector3 halfExtents = Vector3.Scale(footprint.size, t.lossyScale) * 0.5f;
int count = Physics.OverlapBoxNonAlloc(center, halfExtents, overlapResults, t.rotation, obstructionMask, QueryTriggerInteraction.Ignore);
return count > 0;
if (overlayApplied && overlay == lastOverlay) return;
ApplyOverlay(overlay);
lastOverlay = overlay;
overlayApplied = true;
}
/// <summary>
/// Rebuilds each renderer's material list as "base materials + overlay", so the overlay
/// draws on top of the model instead of replacing it. Skips when no overlay is assigned.
/// Rebuilds each renderer's material list as "base materials + overlay", so the overlay draws on
/// top of the model instead of replacing it. Skips when no overlay is assigned.
/// </summary>
private void ApplyOverlay(Material overlay)
{
+165 -27
View File
@@ -67,6 +67,9 @@ namespace Ashwild.Building
[Tooltip("Layers that block a build (structures, props, players). Must NOT include the ground.")]
[SerializeField] private LayerMask obstructionMask;
[Tooltip("Metres shaved off each side of the footprint before testing obstructions. Connected pieces meet exactly flush, so without a small inset every snapped build would report its own neighbour as blocking. Keep it well under the thinnest structure.")]
[SerializeField] private float obstructionPadding = 0.03f;
[Header("Demolition")]
[Tooltip("Layers the demolition aim can hit to target a committed structure. Narrow this to the structures' layer so walls, roofs, etc. are the only demolishable hits.")]
[SerializeField] private LayerMask buildMask = ~0;
@@ -74,6 +77,10 @@ namespace Ashwild.Building
[Tooltip("Overlay material added on top of the aimed build while it is the demolition target (e.g. a translucent red 'about to break' pass). Should be a transparent/additive material since it draws over the model.")]
[SerializeField] private Material demolitionMaterial;
[Header("Hammer Wear")]
[Tooltip("Durability (uses) spent on the equipped hammer for each successful placement or demolition. Requires the hammer's ItemData to be uses-tracked (Has Uses + Max Uses). A depleted hammer blocks building/demolishing until repaired. Set to 0 for a hammer that never wears.")]
[SerializeField] private int hammerUsesPerAction = 1;
#endregion
#region State
@@ -98,9 +105,17 @@ namespace Ashwild.Building
/// The live networked ghost we own and drive, or null while idle or awaiting its spawn.
/// </summary>
private GameObject ghost;
private BuildGhost ghostValidity;
private BuildGhost ghostView;
private BuildSnapPoint[] ghostSnaps;
/// <summary>
/// Whether the ghost's current pose came from a socket connection rather than the free/grid aim.
/// Kept as state rather than recomputed because the pose and the validity check happen in two
/// steps, and because a frame whose aim ray hits nothing leaves the ghost — and so its
/// connection — exactly as it was.
/// </summary>
private bool ghostIsConnected;
/// <summary>
/// The ghost's current yaw for grid placement, stepped by the scroll wheel.
/// </summary>
@@ -128,7 +143,20 @@ namespace Ashwild.Building
/// </summary>
private int spawnToken;
/// <summary>
/// Last spot validity pushed to teammates (-1 = none sent yet, 0 = invalid, 1 = valid), so the
/// networked ghost overlay is only replicated when it actually flips — never every frame.
/// </summary>
private int lastSentValidity = -1;
private readonly Collider[] snapResults = new Collider[16];
private readonly Collider[] obstructionResults = new Collider[8];
/// <summary>
/// Floor for the padded half-extents, so a very thin piece (a floor slab a few centimetres deep)
/// cannot have the inset collapse its footprint to zero — or invert it — and stop testing at all.
/// </summary>
private const float MinHalfExtent = 0.01f;
/// <summary>
/// Reused buffer for the active build's cost lines, rebuilt and pushed to the crosshair each
@@ -163,7 +191,7 @@ namespace Ashwild.Building
{
PlayerEvents.BuildMenuOpenChanged += HandleMenuOpenChanged;
PlayerEvents.AttackPressed += HandleConfirm;
PlayerEvents.SecondaryUsePressed += HandleCancel;
PlayerEvents.BuildCancelRequested += HandleCancel;
PlayerEvents.HotbarScroll += HandleRotate;
PlayerEvents.BuildRotatePressed += HandleRotateKey;
PlayerEvents.DemolishModeChanged += HandleDemolishModeChanged;
@@ -177,7 +205,7 @@ namespace Ashwild.Building
{
PlayerEvents.BuildMenuOpenChanged -= HandleMenuOpenChanged;
PlayerEvents.AttackPressed -= HandleConfirm;
PlayerEvents.SecondaryUsePressed -= HandleCancel;
PlayerEvents.BuildCancelRequested -= HandleCancel;
PlayerEvents.HotbarScroll -= HandleRotate;
PlayerEvents.BuildRotatePressed -= HandleRotateKey;
PlayerEvents.DemolishModeChanged -= HandleDemolishModeChanged;
@@ -205,7 +233,7 @@ namespace Ashwild.Building
if (PlayerEvents.InputLocked) return;
UpdateGhostPose();
if (ghostValidity != null) ghostValidity.Evaluate(obstructionMask);
EvaluateGhost();
}
#endregion
@@ -306,22 +334,107 @@ namespace Ashwild.Building
}
ghost = go;
ghostValidity = go.GetComponentInChildren<BuildGhost>(true);
ghostView = go.GetComponentInChildren<BuildGhost>(true);
ghostSnaps = go.GetComponentsInChildren<BuildSnapPoint>(true);
ResolveAim();
lastSentValidity = -1;
ghostIsConnected = false;
placementBeganFrame = Time.frameCount;
UpdateGhostPose();
if (ghostValidity != null) ghostValidity.Evaluate(obstructionMask);
EvaluateGhost();
}
/// <summary>
/// Pushes the current verdict into the ghost's look each frame. No-op when no ghost is live.
/// </summary>
private void EvaluateGhost()
{
if (ghostView == null) return;
PlacementVerdict verdict = EvaluatePlacement();
ghostView.SetState(verdict);
ReplicateValidity(verdict == PlacementVerdict.Valid);
}
/// <summary>
/// The single answer to "can the active structure be committed at the ghost's current pose?",
/// used both to tint the preview and to gate the confirm — so what the player sees and what the
/// button does can never disagree. It is recomputed on demand rather than cached, since a cached
/// verdict would be one frame stale depending on the input/Update order.
///
/// The reasons are tested most-spatial first: a structure that needs a connection and has none is
/// reported before an obstruction, and both before affordability, so the player is always told
/// about the problem that moving the mouse can actually fix.
///
/// A CONNECTED ghost skips the obstruction test entirely: the socket already decided where the
/// piece belongs, and real modular geometry interpenetrates far more than any tolerance can absorb
/// (a wall's head runs up into the ceiling it supports, a frame overlaps the slab it sits in).
/// Shrinking the footprint was tried and is not enough — the only rule that holds is that an
/// authored connection IS the validity check. Free placement still tests obstructions normally,
/// so the padding below continues to matter there.
/// </summary>
private PlacementVerdict EvaluatePlacement()
{
if (active == null) return PlacementVerdict.Blocked;
if (active.Support == PlacementSupport.SnapOnly && !ghostIsConnected)
return PlacementVerdict.Unsupported;
if (!ghostIsConnected && IsFootprintObstructed()) return PlacementVerdict.Blocked;
if (!active.CanAfford(PlayerInventory.Instance)) return PlacementVerdict.Unaffordable;
return PlacementVerdict.Valid;
}
/// <summary>
/// Box-overlaps the ghost's footprint against the obstruction layers, ignoring triggers. The box
/// is shrunk by <see cref="obstructionPadding"/> on every side: snapped pieces meet exactly flush
/// by construction, so an un-inset test would report the very neighbour the player is building
/// against. The inset is small enough that a real intruder inside the volume — a chest, a player,
/// another structure — is still caught. A ghost without a footprint is never obstructed.
/// </summary>
private bool IsFootprintObstructed()
{
BoxCollider footprint = ghostView != null ? ghostView.Footprint : null;
if (footprint == null) return false;
Transform t = footprint.transform;
Vector3 center = t.TransformPoint(footprint.center);
Vector3 halfExtents = Vector3.Scale(footprint.size, t.lossyScale) * 0.5f;
halfExtents = Vector3.Max(halfExtents - Vector3.one * obstructionPadding, Vector3.one * MinHalfExtent);
int count = Physics.OverlapBoxNonAlloc(center, halfExtents, obstructionResults, t.rotation, obstructionMask, QueryTriggerInteraction.Ignore);
return count > 0;
}
/// <summary>
/// Pushes the ghost's spot validity to teammates through BuildRegistry, but only when it flips —
/// so a remote ghost shows the same green/red as here without a per-frame RPC stream. Affordability
/// stays local (the placer's private inventory), so only IsValid crosses the wire.
/// </summary>
private void ReplicateValidity(bool valid)
{
int state = valid ? 1 : 0;
if (state == lastSentValidity) return;
lastSentValidity = state;
if (BuildRegistry.Instance != null && ghost != null)
BuildRegistry.Instance.SetGhostValidity(ghost.GetComponent<NetworkObject>(), valid);
}
/// <summary>
/// Left-click: demolishes the aimed build while in demolition mode, otherwise commits the
/// ghost's pose to the registry (spawned for everyone) and consumes its resource cost from the
/// local inventory (client-authoritative, exactly like crafting). In continuous build mode it
/// then re-arms a fresh ghost of the same structure (keeping the current yaw, so pieces chain
/// edge-to-edge); otherwise it ends the placement. Blocked on an invalid spot, on the very frame
/// the ghost was attached, and when the player cannot afford the cost.
/// ghost's pose to the registry (spawned for everyone), spends a use of the equipped hammer and
/// consumes the resource cost from the local inventory (client-authoritative, exactly like
/// crafting). In continuous build mode it then re-arms a fresh ghost of the same structure
/// (keeping the current yaw, so pieces chain edge-to-edge); otherwise it ends the placement.
///
/// Placement itself is gated by the one verdict the preview is already showing, so the button can
/// never accept what the ghost paints as refused. The remaining guards are input/session
/// conditions rather than placement rules — input locked, the very frame the ghost was attached,
/// no registry in the session, and a hammer out of durability.
/// </summary>
private void HandleConfirm()
{
@@ -334,11 +447,11 @@ namespace Ashwild.Building
if (ghost == null) return;
if (PlayerEvents.InputLocked) return;
if (Time.frameCount == placementBeganFrame) return;
if (ghostValidity != null && !ghostValidity.IsValid) return;
if (active != null && !active.CanAfford(PlayerInventory.Instance)) return;
if (EvaluatePlacement() != PlacementVerdict.Valid) return;
if (BuildRegistry.Instance == null) return;
if (!TryConsumeHammerUse()) return;
if (BuildRegistry.Instance != null)
BuildRegistry.Instance.RequestBuild(activeId, ghost.transform.position, ghost.transform.rotation);
BuildRegistry.Instance.RequestBuild(activeId, ghost.transform.position, ghost.transform.rotation);
ConsumeCost();
@@ -352,7 +465,9 @@ namespace Ashwild.Building
}
/// <summary>
/// Right-click: cancels the current placement (even while the ghost is still spawning).
/// The hammer's cancel request (a right-click tap while placing): cancels the current placement
/// (even while the ghost is still spawning). Routed through the bus so this stays the single
/// place that ends a placement — the hammer is the sole arbiter of the click.
/// </summary>
private void HandleCancel()
{
@@ -388,7 +503,7 @@ namespace Ashwild.Building
/// <summary>
/// Poses the ghost each frame: quantise the aim hit to the grid with the current yaw, then
/// let a nearby matching socket pull it into an exact connection (sockets win over the grid).
/// Leaves the ghost where it was when the ray hits nothing in range.
/// Leaves the ghost where it was — connection included — when the ray hits nothing in range.
/// </summary>
private void UpdateGhostPose()
{
@@ -397,7 +512,7 @@ namespace Ashwild.Building
return;
ghost.transform.SetPositionAndRotation(SnapToGrid(hit.point), Quaternion.Euler(0f, yaw, 0f));
TrySnapToSockets();
ghostIsConnected = TrySnapToSockets();
}
/// <summary>
@@ -419,11 +534,14 @@ namespace Ashwild.Building
/// coincides. Because it commits to the single nearest ghost-socket↔world-socket pair (not the
/// socket nearest the aim), the ghost picks one connection instead of hovering between two.
/// Rotation stays the player's grid yaw, so pieces meet edge-to-edge once oriented.
///
/// Returns whether a connection was actually made, which is what lets the caller trust the pose
/// and skip the obstruction test for it.
/// </summary>
private void TrySnapToSockets()
private bool TrySnapToSockets()
{
if (ghostSnaps == null || ghostSnaps.Length == 0) return;
if (snapPointMask == 0) return;
if (ghostSnaps == null || ghostSnaps.Length == 0) return false;
if (snapPointMask == 0) return false;
BuildSnapPoint bestGhost = null;
BuildSnapPoint bestWorld = null;
@@ -451,9 +569,10 @@ namespace Ashwild.Building
}
}
if (bestGhost == null || bestWorld == null) return;
if (bestGhost == null || bestWorld == null) return false;
ghost.transform.position += bestWorld.transform.position - bestGhost.transform.position;
return true;
}
/// <summary>
@@ -505,8 +624,10 @@ namespace Ashwild.Building
BuildRegistry.Instance.RequestDespawnGhost(ghost.GetComponent<NetworkObject>());
ghost = null;
}
ghostValidity = null;
ghostView = null;
ghostSnaps = null;
lastSentValidity = -1;
ghostIsConnected = false;
}
/// <summary>
@@ -638,14 +759,31 @@ namespace Ashwild.Building
}
/// <summary>
/// Left-click while demolishing: asks the registry to remove the aimed build for everyone. The
/// target stays until the next frame re-evaluates, so a miss simply retargets.
/// Left-click while demolishing: spends a hammer use and asks the registry to remove the aimed
/// build for everyone (which refunds resources by remaining health). Blocked when the hammer is
/// out of durability. The target stays until the next frame re-evaluates, so a miss simply
/// retargets.
/// </summary>
private void TryDemolish()
{
if (demoTarget == null) return;
if (BuildRegistry.Instance != null)
BuildRegistry.Instance.RequestDemolish(demoTarget.gameObject);
if (!TryConsumeHammerUse()) return;
demoTarget.RequestDemolish();
}
/// <summary>
/// Spends the configured durability on the equipped hammer for one build action, returning
/// whether the action may proceed. A depleted hammer returns false so the placement/demolition
/// is blocked (like any worn-out tool); a hammer with no durability authored, a zero cost, or no
/// inventory simply passes without wear. The hammer is the selected hotbar item while building,
/// so spending the selected tool's use targets it.
/// </summary>
private bool TryConsumeHammerUse()
{
PlayerInventory inv = PlayerInventory.Instance;
if (inv == null) return true;
return inv.ConsumeSelectedToolUse(hammerUsesPerAction);
}
/// <summary>
@@ -1,16 +0,0 @@
using UnityEngine;
namespace Ashwild.Building
{
/// <summary>
/// A committed structure in the world, replicated in the BuildRegistry's SyncList: which
/// buildable (network id) sits at which pose. Every machine instantiates the matching
/// BuiltPrefab locally from this record — the structures themselves are never NetworkObjects (§3).
/// </summary>
public struct BuildRecord
{
public ushort buildableId;
public Vector3 position;
public Quaternion rotation;
}
}
@@ -1,2 +0,0 @@
fileFormatVersion: 2
guid: 1554bdf5a966a1947bbe0d2855967590
+65 -204
View File
@@ -1,25 +1,29 @@
using System.Collections.Generic;
using FishNet.Connection;
using FishNet.Object;
using FishNet.Object.Synchronizing;
using UnityEngine;
namespace Ashwild.Building
{
/// <summary>
/// Owns the whole networked side of building, grouped here by cohesion rather than split into
/// two tiny scripts:
/// The networked side of building: it commits placements and owns the live ghost preview.
///
/// 1. Committed structures — a SyncList of BuildRecords (id + pose). They accumulate to high
/// counts, so they are data-driven, not NetworkObjects (§3): every machine (late joiners
/// included) instantiates the matching BuiltPrefab locally from the synced list.
/// 2. The live ghost preview — spawned as a real NetworkObject owned by the placer, so FishNet's
/// NetworkTransform replicates its motion to everyone smoothly. A ghost is one-per-player and
/// transient, the case where a NetworkObject beats a data registry — the deliberate exception
/// to §3's "no NetworkObjects for world state" (which targets high-count scatter, not this).
/// Every committed structure — a wall as much as a chest or a campfire — is spawned as a real
/// NetworkObject owned by the server. That is the whole design: FishNet already replicates spawns,
/// catches late joiners up, and tears objects down on despawn, so there is no build list to keep,
/// no index to align, and no rebuild path to write. Each build carries its own state on its own
/// <see cref="BuiltStructure"/>, which is what lets a stateful structure (chest, cooking station)
/// be placed by exactly the same code as a plain wall instead of needing a parallel mechanism.
///
/// BuildManager (the local build UX) drives the owned ghost; on confirm this registry commits the
/// record and despawns the ghost. One instance per scene, a scene NetworkObject like the others.
/// This replaced an earlier data-driven registry (a SyncList of pose records that every client
/// instantiated locally). That saved FishNet's per-object bookkeeping but not the GameObjects —
/// they were instantiated locally anyway — while forcing a second, incompatible path for anything
/// with real state. One mechanism is worth the bookkeeping.
///
/// The ghost is likewise a NetworkObject, but owned by the placer so FishNet's NetworkTransform
/// replicates its motion smoothly; it is transient and one per player.
///
/// BuildManager (the local build UX) drives the owned ghost; on confirm this registry spawns the
/// structure and despawns the ghost. One instance per scene, a scene NetworkObject like the others.
/// </summary>
[RequireComponent(typeof(NetworkObject))]
public class BuildRegistry : NetworkBehaviour
@@ -27,50 +31,31 @@ namespace Ashwild.Building
#region State
/// <summary>
/// The single scene instance, so BuildManager can request ghost spawns/despawns and build
/// commits.
/// The single scene instance, so BuildManager can request ghost spawns/despawns and build commits.
/// </summary>
public static BuildRegistry Instance { get; private set; }
/// <summary>
/// Every committed structure, server-written and replicated to all clients.
/// </summary>
private readonly SyncList<BuildRecord> builds = new SyncList<BuildRecord>();
/// <summary>
/// The local instances rendered from <see cref="builds"/>, kept index-aligned with it.
/// </summary>
private readonly List<GameObject> spawned = new List<GameObject>();
/// <summary>
/// How close two sockets must be to count as connected — they snap to the exact same point,
/// so a tiny threshold is enough and no layer/radius has to be configured.
/// </summary>
private const float OccupancyThresholdSqr = 0.05f * 0.05f;
#endregion
#region Network Lifecycle
/// <summary>
/// Starts listening to the replicated build list on every machine.
/// Claims the singleton on every machine.
/// </summary>
public override void OnStartNetwork()
{
base.OnStartNetwork();
Instance = this;
builds.OnChange += OnBuildsChanged;
}
/// <summary>
/// Unsubscribes and tears down the local instances when the session ends.
/// Releases the singleton when the session ends. Committed structures are NetworkObjects, so
/// FishNet despawns them itself — there is nothing to tear down here.
/// </summary>
public override void OnStopNetwork()
{
base.OnStopNetwork();
if (Instance == this) Instance = null;
builds.OnChange -= OnBuildsChanged;
ClearAll();
}
#endregion
@@ -78,60 +63,45 @@ namespace Ashwild.Building
#region Commit Build
/// <summary>
/// Called by BuildManager when the local player confirms a placement: commit this buildable
/// at this pose so the real structure appears for every player.
/// Called by BuildManager when the local player confirms a placement: commit this buildable at
/// this pose so the real structure appears for every player.
/// </summary>
public void RequestBuild(ushort buildableId, Vector3 position, Quaternion rotation)
=> RequestBuildServerRpc(buildableId, position, rotation);
/// <summary>
/// Server-side: validates the id and appends the record, which replicates to all clients.
/// Server-side: validates the id, instantiates the built prefab, seeds its identity and health,
/// then spawns it for everyone. The appear pop is sent separately to current observers only, so a
/// late joiner streaming in an existing base does not watch all of it pop at once.
///
/// The structure is spawned server-owned (no connection passed): builds are shared world state
/// and several players interact with the same chest or fire, so handing ownership to whoever
/// placed it would tie everyone's access to that player's connection.
/// </summary>
[ServerRpc(RequireOwnership = false)]
private void RequestBuildServerRpc(ushort buildableId, Vector3 position, Quaternion rotation, NetworkConnection conn = null)
{
if (BuildableDatabase.Instance == null || BuildableDatabase.Instance.GetBuildable(buildableId) == null)
return;
// TODO: validate + consume the requester's resources (conn → PlayerInventory) before committing.
builds.Add(new BuildRecord { buildableId = buildableId, position = position, rotation = rotation });
}
#endregion
#region Demolish Build
/// <summary>
/// Called by BuildManager when the local player demolishes a build they aimed at: resolves the
/// hit instance to its index in the replicated list and asks the server to remove it. The index
/// is a valid shared key because <see cref="spawned"/> stays aligned with <see cref="builds"/>
/// on every machine. No-op when the object is not one of our committed builds.
/// </summary>
public void RequestDemolish(GameObject builtInstance)
{
if (builtInstance == null) return;
int index = spawned.IndexOf(builtInstance);
if (index < 0)
BuildableData data = BuildableDatabase.Instance != null ? BuildableDatabase.Instance.GetBuildable(buildableId) : null;
if (data == null || data.BuiltPrefab == null)
{
Debug.LogWarning($"[BuildRegistry] '{builtInstance.name}' is not a committed build — nothing to demolish.", this);
Debug.LogWarning($"[BuildRegistry] Buildable id {buildableId} is unknown or has no BuiltPrefab — nothing spawned.", this);
return;
}
RequestDemolishServerRpc(index);
}
/// <summary>
/// Server-side: removes the record at this index, which replicates the removal (and the local
/// teardown + occupancy refresh) to every client. Range-guarded against a stale index from a
/// build that another player demolished during the round-trip.
/// </summary>
[ServerRpc(RequireOwnership = false)]
private void RequestDemolishServerRpc(int index, NetworkConnection conn = null)
{
if (index < 0 || index >= builds.Count) return;
// TODO: validate + consume the requester's resources (conn → PlayerInventory) before committing.
GameObject go = Instantiate(data.BuiltPrefab, position, rotation);
// TODO: refund the builder's resources (conn → PlayerInventory) once build cost lands.
builds.RemoveAt(index);
BuiltStructure structure = go.GetComponent<BuiltStructure>();
if (structure == null)
{
Debug.LogError($"[BuildRegistry] BuiltPrefab '{data.BuiltPrefab.name}' has no BuiltStructure — add one (it carries the build's identity, health and demolition).", this);
Destroy(go);
return;
}
structure.InitialiseOnServer(buildableId, data.MaxHealth);
base.ServerManager.Spawn(go);
structure.PlaySpawnBumpForObservers();
}
#endregion
@@ -193,147 +163,38 @@ namespace Ashwild.Building
base.ServerManager.Despawn(ghost, DespawnType.Destroy);
}
#endregion
#region Sync Local Instances
/// <summary>
/// Mirrors the replicated build list into local instances. The host processes only the
/// server callback (asServer) so a build is never instantiated twice on the same machine.
/// Owner → replicates the ghost's current spot validity to every other client so teammates see
/// the same green (clear) / red (blocked) preview. Only the owner drives the evaluation locally,
/// so without this a remote ghost stays on its default look; BuildManager calls this only when the
/// value actually changes, so the traffic is a rare per-ghost blip, not a per-frame stream.
/// </summary>
private void OnBuildsChanged(SyncListOperation op, int index, BuildRecord oldItem, BuildRecord newItem, bool asServer)
public void SetGhostValidity(NetworkObject ghost, bool valid)
{
if (!asServer && base.IsServerInitialized) return;
switch (op)
{
case SyncListOperation.Add:
case SyncListOperation.Insert:
{
GameObject go = CreateInstance(newItem);
spawned.Insert(index, go);
MarkOccupancy(go);
break;
}
case SyncListOperation.Set:
DestroyAt(index);
spawned[index] = CreateInstance(newItem);
break;
case SyncListOperation.RemoveAt:
DestroyAt(index);
spawned.RemoveAt(index);
RecomputeOccupancy();
break;
case SyncListOperation.Clear:
ClearAll();
break;
case SyncListOperation.Complete:
RebuildAll();
break;
}
if (ghost != null) SetGhostValidityServerRpc(ghost, valid);
}
/// <summary>
/// Instantiates a record's BuiltPrefab at its pose, or null when the id or prefab is missing.
/// Server-side relay: forwards the placer's validity to all observers.
/// </summary>
private GameObject CreateInstance(BuildRecord record)
[ServerRpc(RequireOwnership = false)]
private void SetGhostValidityServerRpc(NetworkObject ghost, bool valid, NetworkConnection conn = null)
{
BuildableData data = BuildableDatabase.Instance != null ? BuildableDatabase.Instance.GetBuildable(record.buildableId) : null;
if (data == null || data.BuiltPrefab == null)
{
Debug.LogWarning($"[BuildRegistry] Buildable id {record.buildableId} introuvable ou sans BuiltPrefab — rien de spawné.", this);
return null;
}
GameObject go = Instantiate(data.BuiltPrefab, record.position, record.rotation);
if (go.GetComponent<BuiltStructure>() == null) go.AddComponent<BuiltStructure>();
return go;
if (ghost == null) return;
ObserversSetGhostValidity(ghost, valid);
}
/// <summary>
/// Destroys the local instance at an index without touching the list bookkeeping.
/// Applies the replicated validity on every client except the placer, whose own local evaluation
/// already drives the richer verdict (and knows about affordability, which is never sent). A
/// missing ghost is ignored — it may have been despawned mid-flight.
/// </summary>
private void DestroyAt(int index)
[ObserversRpc]
private void ObserversSetGhostValidity(NetworkObject ghost, bool valid)
{
if (index < 0 || index >= spawned.Count) return;
if (spawned[index] != null) Destroy(spawned[index]);
}
/// <summary>
/// Destroys every local instance and clears the list.
/// </summary>
private void ClearAll()
{
foreach (GameObject go in spawned)
if (go != null) Destroy(go);
spawned.Clear();
}
/// <summary>
/// Rebuilds all local instances from the current list — used for the late-join catch-up —
/// then recomputes which sockets are connected so late joiners see the same occupancy.
/// </summary>
private void RebuildAll()
{
ClearAll();
for (int i = 0; i < builds.Count; i++)
spawned.Add(CreateInstance(builds[i]));
foreach (GameObject go in spawned)
MarkOccupancy(go);
}
/// <summary>
/// Recomputes occupancy from scratch after a removal: clears every socket, then re-marks the
/// connected pairs across what remains. Without this a demolished piece would leave its former
/// neighbours' sockets stuck "occupied", so nothing could ever be snapped back into the gap.
/// </summary>
private void RecomputeOccupancy()
{
foreach (GameObject go in spawned)
{
if (go == null) continue;
foreach (BuildSnapPoint sp in go.GetComponentsInChildren<BuildSnapPoint>(true))
sp.SetOccupied(false);
}
foreach (GameObject go in spawned)
MarkOccupancy(go);
}
/// <summary>
/// Marks the sockets a piece shares a position with — and the matching sockets on the pieces
/// it touches — as occupied, so placement snapping skips them. Occupancy is derived purely
/// from geometry (two connected sockets sit on the exact same point), so it stays consistent
/// on every client without anything extra crossing the wire.
/// </summary>
private void MarkOccupancy(GameObject instance)
{
if (instance == null) return;
BuildSnapPoint[] newSockets = instance.GetComponentsInChildren<BuildSnapPoint>(true);
if (newSockets.Length == 0) return;
foreach (GameObject other in spawned)
{
if (other == null || other == instance) continue;
foreach (BuildSnapPoint os in other.GetComponentsInChildren<BuildSnapPoint>(true))
{
foreach (BuildSnapPoint ns in newSockets)
{
if (ns.Category != os.Category) continue;
if ((ns.transform.position - os.transform.position).sqrMagnitude > OccupancyThresholdSqr) continue;
ns.SetOccupied(true);
os.SetOccupied(true);
}
}
}
if (ghost == null || ghost.IsOwner) return;
BuildGhost bg = ghost.GetComponent<BuildGhost>();
if (bg != null) bg.SetRemoteValidity(valid);
}
#endregion
+31 -7
View File
@@ -24,8 +24,9 @@ namespace Ashwild.Building
/// of the ghost, so the ghost never snaps to itself.
///
/// Once another piece connects here the socket is marked occupied — the placement snapping skips
/// occupied sockets (so two pieces never stack on the same connection) and its gizmo turns from
/// blue (free) to red (occupied) in the Scene view.
/// occupied sockets (so two pieces never stack on the same connection) and its gizmo turns red
/// in the Scene view; while free it takes the colour of its category, so a glance at a prefab
/// tells which sockets can ever link together.
/// </summary>
[DisallowMultipleComponent]
public class BuildSnapPoint : MonoBehaviour
@@ -61,19 +62,42 @@ namespace Ashwild.Building
#region Gizmos
private static readonly Color OccupiedColor = new Color(1f, 0.3f, 0.3f, 0.9f);
private static readonly Color FloorColor = new Color(0.3f, 0.8f, 1f, 0.9f);
private static readonly Color WallColor = new Color(0.4f, 1f, 0.5f, 0.9f);
private static readonly Color RoofColor = new Color(1f, 0.75f, 0.25f, 0.9f);
private static readonly Color PillarColor = new Color(0.8f, 0.5f, 1f, 0.9f);
private static readonly Color CustomColor = new Color(1f, 1f, 1f, 0.9f);
/// <summary>
/// Draws the socket in the editor: a sphere (blue when free, red once occupied) plus a ray
/// along its forward (Z) axis — the direction the connecting piece attaches. Two sockets link
/// only when their forwards face each other, so orient each empty's blue arrow outward toward
/// where the neighbour should sit.
/// Draws the socket in the editor: a sphere plus a ray along its forward (Z) axis — the
/// direction the connecting piece attaches. Two sockets link only when their forwards face
/// each other, so orient each empty's arrow outward toward where the neighbour should sit.
/// </summary>
private void OnDrawGizmos()
{
Gizmos.color = occupied ? new Color(1f, 0.3f, 0.3f, 0.9f) : new Color(0.3f, 0.8f, 1f, 0.9f);
Gizmos.color = occupied ? OccupiedColor : GetCategoryColor(category);
Gizmos.DrawWireSphere(transform.position, 0.12f);
Gizmos.DrawRay(transform.position, transform.forward * 0.35f);
}
/// <summary>
/// Maps a connection category to its Scene-view colour. Sockets that can link share a
/// category, so same-coloured gizmos are exactly the ones that may ever snap together —
/// mismatched colours on two pieces mean they will never connect.
/// </summary>
private static Color GetCategoryColor(SnapCategory value)
{
switch (value)
{
case SnapCategory.Floor: return FloorColor;
case SnapCategory.Wall: return WallColor;
case SnapCategory.Roof: return RoofColor;
case SnapCategory.Pillar: return PillarColor;
default: return CustomColor;
}
}
#endregion
}
}
@@ -3,6 +3,25 @@ using Ashwild.Inventory;
namespace Ashwild.Building
{
/// <summary>
/// What a buildable is allowed to rest on. This is the one placement rule that genuinely differs
/// per structure — a foundation sits on terrain, a wall or a ceiling only makes sense attached to
/// something — so it is authored here rather than configured globally on BuildManager (which keeps
/// owning the project-wide layer masks: what blocks a build does not vary per build).
///
/// <see cref="GroundOrSnap"/> is deliberately the zero value: Unity deserializes a missing field to
/// 0, so buildables authored before this rule existed keep their old, permissive behaviour instead
/// of silently becoming unplaceable.
/// </summary>
public enum PlacementSupport
{
/// <summary>Free placement anywhere the aim lands, or connected to a socket. Foundations, floors.</summary>
GroundOrSnap,
/// <summary>Only valid while connected to a matching socket. Walls, ceilings, roofs.</summary>
SnapOnly
}
/// <summary>
/// Authoring data for one buildable structure shown in the construction menu (a wall, a
/// floor, a door, ...). Mirrors the ScriptableObject-for-data / MonoBehaviour-for-logic
@@ -35,6 +54,14 @@ namespace Ashwild.Building
[Tooltip("Resources consumed from the builder's inventory on each placement. Leave empty for a free build.")]
[SerializeField] private BuildCost[] cost;
[Header("Placement")]
[Tooltip("Where this structure may be committed. Walls, ceilings and roofs should be Snap Only so they cannot be dropped in mid-air; foundations and floors stay Ground Or Snap.")]
[SerializeField] private PlacementSupport support = PlacementSupport.GroundOrSnap;
[Header("Health")]
[Tooltip("Hit points the placed structure starts with. Damage subtracts from this (server-authoritative in BuildRegistry); at 0 the build is destroyed. A manual demolition refunds the cost in proportion to the health left.")]
[SerializeField] private float maxHealth = 100f;
#endregion
#region Public API
@@ -45,6 +72,8 @@ namespace Ashwild.Building
public GameObject GhostPrefab => ghostPrefab;
public GameObject BuiltPrefab => builtPrefab;
public BuildCost[] Cost => cost;
public float MaxHealth => maxHealth;
public PlacementSupport Support => support;
/// <summary>
/// Whether the given inventory holds enough of every cost line to place this structure once.
+310 -18
View File
@@ -1,34 +1,106 @@
using System.Collections.Generic;
using Ashwild.Inventory;
using DG.Tweening;
using FishNet.Connection;
using FishNet.Object;
using FishNet.Object.Synchronizing;
using UnityEngine;
namespace Ashwild.Building
{
/// <summary>
/// Runtime marker added to every committed structure instance the BuildRegistry spawns, so the
/// demolition aim can recognise a build from a raycast hit (GetComponentInParent) and hand its
/// root back to the registry to remove. It also owns the demolition highlight: while it is the
/// hammer's target the demolition material is added on top of every renderer (an extra overlay
/// pass, like the ghost), and removed again when the aim leaves — so the player sees exactly which
/// build will break. Pure local visual + a pure tag: nothing about it ever crosses the wire.
/// The one component every committed structure carries — wall, floor, chest, campfire alike. Since
/// builds are spawned as real NetworkObjects, each one is self-contained: it knows what it is, owns
/// its own server-authoritative health, and handles its own damage and demolition. There is no
/// central list of builds and no index to keep aligned; the object IS the record.
///
/// It groups everything that changes together when a placed build's behaviour changes:
/// 1. Identity — <see cref="BuildableId"/>, replicated so any machine can resolve the BuildableData
/// behind this instance (the refund needs its cost, UI needs its name).
/// 2. Health and damage — server-authoritative. <see cref="TakeDamage"/> is what an attacker calls;
/// the server applies it and despawns the build for everyone when it dies (no refund — it broke).
/// 3. Demolition — <see cref="RequestDemolish"/> refunds a share of the cost proportional to the
/// health left, then despawns.
/// 4. Presentation — the appear bump and the demolition highlight, both purely local.
/// 5. Snap occupancy — every live instance registers here, so connected sockets can be marked
/// without anyone holding a master list of builds.
///
/// Health never crosses the wire: only its observable effects do (the build disappearing, resources
/// refunded), which replicate through the despawn and the inventory RPC respectively.
/// </summary>
[DisallowMultipleComponent]
public class BuiltStructure : MonoBehaviour
[RequireComponent(typeof(NetworkObject))]
public class BuiltStructure : NetworkBehaviour
{
#region Serialized Fields
[Header("Appear Bump")]
[Tooltip("How long the pop lasts — short and snappy reads as an 'appear' effect.")]
[SerializeField] private float bumpDuration = DefaultBumpDuration;
[Tooltip("Fraction of the authored scale the bump starts from (0.7 = starts at 70%, then springs up).")]
[SerializeField] private float startScaleFactor = DefaultStartScaleFactor;
[Tooltip("OutBack gives the springy overshoot that sells the 'boom'.")]
[SerializeField] private Ease bumpEase = Ease.OutBack;
#endregion
#region Constants
/// <summary>
/// Fallback bump values, used both as the field initializers and as the guard defaults in
/// <see cref="PlaySpawnBump"/> — so a build whose prefab predates these serialized fields
/// (Unity deserializes the missing values to 0) still pops instead of snapping in.
/// </summary>
private const float DefaultBumpDuration = 0.22f;
private const float DefaultStartScaleFactor = 0.7f;
/// <summary>
/// How close two sockets must be to count as connected — they snap to the exact same point, so a
/// tiny threshold is enough and no layer or radius has to be configured.
/// </summary>
private const float OccupancyThresholdSqr = 0.05f * 0.05f;
#endregion
#region State
/// <summary>
/// Every child renderer, cached so the highlight can swap and restore their materials.
/// Every live built structure on this machine. Maintained here rather than in a central registry
/// so occupancy works off the objects themselves — the network spawns and despawns them, and the
/// list follows automatically.
/// </summary>
private static readonly List<BuiltStructure> Live = new List<BuiltStructure>();
/// <summary>
/// Which buildable this instance was placed from, so the refund can look up its cost. Written by
/// the server before the spawn, so it is already correct on the first frame everywhere.
/// </summary>
private readonly SyncVar<ushort> buildableId = new SyncVar<ushort>();
/// <summary>
/// Server-only remaining health, seeded from the buildable's authored max at spawn.
/// </summary>
private float health;
private Renderer[] renderers;
/// <summary>
/// Each renderer's original materials, kept so the swap is fully reversible.
/// </summary>
private Material[][] baseMaterials;
private bool highlighted;
private Tween bumpTween;
#endregion
#region Public API
public ushort BuildableId => buildableId.Value;
/// <summary>
/// Whether the demolition material is currently applied, so swaps stay idempotent.
/// The authoring data behind this instance, or null when the database cannot resolve its id.
/// </summary>
private bool highlighted;
public BuildableData Data => BuildableDatabase.Instance != null
? BuildableDatabase.Instance.GetBuildable(buildableId.Value)
: null;
#endregion
@@ -46,14 +118,234 @@ namespace Ashwild.Building
baseMaterials[i] = renderers[i] != null ? renderers[i].sharedMaterials : new Material[0];
}
/// <summary>
/// Kills the appear tween so it never targets a destroyed transform (e.g. the build was
/// demolished mid-pop).
/// </summary>
private void OnDestroy() => bumpTween?.Kill();
#endregion
#region Public API
#region Network Lifecycle
/// <summary>
/// Adds the demolition material on top of each renderer's authored materials (an extra draw
/// pass), marking this build as the hammer's current target without hiding the model. Mirrors
/// the ghost overlay. No-op when already highlighted or no material was provided.
/// Joins the live set and marks the sockets this piece connects to. Runs on every machine as the
/// object spawns — including on a late joiner receiving builds placed long ago, which is exactly
/// when occupancy has to be rebuilt for them too.
/// </summary>
public override void OnStartNetwork()
{
base.OnStartNetwork();
Live.Add(this);
MarkOccupancy();
}
/// <summary>
/// Leaves the live set and recomputes occupancy across what remains. Without the recompute a
/// demolished piece would leave its former neighbours' sockets stuck "occupied", so nothing could
/// ever be snapped back into the gap.
/// </summary>
public override void OnStopNetwork()
{
base.OnStopNetwork();
Live.Remove(this);
RecomputeOccupancy();
}
#endregion
#region Server Setup
/// <summary>
/// Seeds identity and health on the server, before the object is spawned, so both are already in
/// place when clients first see it. Called by BuildRegistry as part of committing a placement.
/// </summary>
public void InitialiseOnServer(ushort id, float maxHealth)
{
buildableId.Value = id;
health = maxHealth > 0f ? maxHealth : 1f;
}
#endregion
#region Appear Bump
/// <summary>
/// Tells everyone currently watching to play the appear pop. Sent by the server right after a
/// fresh placement. Because it only reaches present observers, a late joiner streaming in dozens
/// of existing structures never receives it — so their base does not pop into existence all at
/// once, which is precisely the distinction the old "only on Add, never on rebuild" rule made.
/// </summary>
[ObserversRpc]
public void PlaySpawnBumpForObservers() => PlaySpawnBump();
/// <summary>
/// Runs the appear bump from the shrunk start scale up to the transform's current (authored)
/// scale. Captures the target at call time so a non-uniform or non-unit prefab scale is preserved.
/// Non-positive serialized values fall back to the constants so the pop still plays.
/// </summary>
public void PlaySpawnBump()
{
bumpTween?.Kill();
float duration = bumpDuration > 0f ? bumpDuration : DefaultBumpDuration;
float factor = (startScaleFactor > 0f && startScaleFactor < 1f) ? startScaleFactor : DefaultStartScaleFactor;
Vector3 targetScale = transform.localScale;
transform.localScale = targetScale * factor;
bumpTween = transform.DOScale(targetScale, duration).SetEase(bumpEase);
}
#endregion
#region Damage
/// <summary>
/// Called by an attacker (weapon, explosion, ...) to hurt this build. Health is server-
/// authoritative, so this only forwards the hit; the server applies it and despawns the structure
/// for everyone when it dies. A build destroyed by damage is NOT refunded, unlike a manual
/// demolition — it broke, its resources are lost. Safe to call from any client.
/// </summary>
public void TakeDamage(float amount)
{
if (amount <= 0f) return;
TakeDamageServerRpc(amount);
}
/// <summary>
/// Server-side: subtracts the damage and despawns the build once it reaches zero.
/// </summary>
[ServerRpc(RequireOwnership = false)]
private void TakeDamageServerRpc(float amount)
{
if (amount <= 0f) return;
health -= amount;
if (health <= 0f) Despawn();
}
#endregion
#region Demolition
/// <summary>
/// Called by BuildManager when the local player demolishes this build: asks the server to refund
/// and remove it. Any client may request it — co-op is friendly, not anti-cheat.
/// </summary>
public void RequestDemolish() => DemolishServerRpc();
/// <summary>
/// Server-side: refunds the demolisher a share of the cost proportional to the health left, then
/// despawns the structure for everyone.
/// </summary>
[ServerRpc(RequireOwnership = false)]
private void DemolishServerRpc(NetworkConnection conn = null)
{
RefundResources(conn);
Despawn();
}
/// <summary>
/// Grants the demolishing player back a share of this build's cost proportional to its remaining
/// health: a full-health build refunds its whole cost, a half-health one refunds half, and so on
/// (per line, floored — a partial unit is not returned). No-op for a free build, when the player's
/// inventory cannot be resolved, or when the fraction rounds every line down to nothing.
/// </summary>
private void RefundResources(NetworkConnection conn)
{
BuildableData data = Data;
if (data == null || data.Cost == null || data.Cost.Length == 0) return;
PlayerInventory inventory = ResolveInventory(conn);
if (inventory == null) return;
float max = data.MaxHealth;
float fraction = max > 0f ? Mathf.Clamp01(health / max) : 1f;
foreach (BuildCost line in data.Cost)
{
if (line.item == null) continue;
int refund = Mathf.FloorToInt(line.quantity * fraction);
if (refund > 0) inventory.GrantItemFromServer(line.item, refund);
}
}
/// <summary>
/// Returns the PlayerInventory on the player object owned by the given connection, mirroring
/// CookingStation so refunds land in the requester's own inventory.
/// </summary>
private static PlayerInventory ResolveInventory(NetworkConnection conn)
{
NetworkObject playerObject = conn != null ? conn.FirstObject : null;
return playerObject != null ? playerObject.GetComponent<PlayerInventory>() : null;
}
/// <summary>
/// Removes this structure for every player. Server-side only.
/// </summary>
private void Despawn()
{
if (base.IsServerInitialized) base.ServerManager.Despawn(base.NetworkObject, DespawnType.Destroy);
}
#endregion
#region Snap Occupancy
/// <summary>
/// Marks the sockets this piece shares a position with — and the matching sockets on the pieces it
/// touches — as occupied, so placement snapping skips them. Occupancy is derived purely from
/// geometry (two connected sockets sit on the exact same point), so it stays consistent on every
/// client without anything extra crossing the wire.
/// </summary>
private void MarkOccupancy()
{
BuildSnapPoint[] mine = GetComponentsInChildren<BuildSnapPoint>(true);
if (mine.Length == 0) return;
foreach (BuiltStructure other in Live)
{
if (other == null || other == this) continue;
foreach (BuildSnapPoint os in other.GetComponentsInChildren<BuildSnapPoint>(true))
{
foreach (BuildSnapPoint ms in mine)
{
if (ms.Category != os.Category) continue;
if ((ms.transform.position - os.transform.position).sqrMagnitude > OccupancyThresholdSqr) continue;
ms.SetOccupied(true);
os.SetOccupied(true);
}
}
}
}
/// <summary>
/// Recomputes occupancy from scratch across every live structure: clears every socket, then
/// re-marks the connected pairs across what remains. Run after a removal.
/// </summary>
private static void RecomputeOccupancy()
{
foreach (BuiltStructure structure in Live)
{
if (structure == null) continue;
foreach (BuildSnapPoint sp in structure.GetComponentsInChildren<BuildSnapPoint>(true))
sp.SetOccupied(false);
}
foreach (BuiltStructure structure in Live)
if (structure != null) structure.MarkOccupancy();
}
#endregion
#region Demolition Highlight
/// <summary>
/// Adds the demolition material on top of each renderer's authored materials (an extra draw pass),
/// marking this build as the hammer's current target without hiding the model. Mirrors the ghost
/// overlay. No-op when already highlighted or no material was provided.
/// </summary>
public void Highlight(Material demolitionMaterial)
{
@@ -81,10 +81,12 @@ namespace Ashwild.Crafting
#region Event Handlers
/// <summary>
/// Marks an acquired item as discovered. Guarded to the owning instance so a remote puppet
/// that briefly subscribed before being gated off can never drive discovery on the wrong copy.
/// Marks an acquired item as discovered. Transfers count too — pulling an item a co-op partner
/// left in a chest is a genuine first acquisition and must unlock its recipes, even though the
/// HUD stays silent about it. Guarded to the owning instance so a remote puppet that briefly
/// subscribed before being gated off can never drive discovery on the wrong copy.
/// </summary>
private void HandleItemAdded(ItemData item, int quantity)
private void HandleItemAdded(ItemData item, int quantity, bool isTransfer)
{
if (Instance != this) return;
Discover(item);
@@ -0,0 +1,121 @@
using System.Diagnostics;
using UnityEditor;
using UnityEngine;
using UnityEngine.Profiling;
using Ashwild.Building;
using Debug = UnityEngine.Debug;
namespace Ashwild.EditorTools
{
/// <summary>
/// A load test for the decision to spawn every build as a NetworkObject: places a grid of structures
/// and reports how long it took and what it cost in memory, so the "can FishNet carry a whole base"
/// question can be answered with numbers instead of estimates.
///
/// Deliberately single-instance. Measuring a second client's join bandwidth would mean two peers, and
/// the session is wired to FishySteamworks — that costs far more setup than the risk it covers. Join
/// traffic is a one-shot cost of roughly a spawn packet per object anyway; what actually matters day
/// to day is the steady state, and that is exactly what this measures. Watch the profiler's frame time
/// after the spawn, not just the numbers logged here.
///
/// Caveat when reading the elapsed time: this places everything in a single frame, which no player
/// ever does. Treat it as a worst case for the spawn burst, not as a gameplay measurement.
/// </summary>
public static class BuildStressTest
{
#region Constants
private const float Spacing = 4f;
private const float GroundHeight = 0f;
#endregion
#region Menu
/// <summary>
/// Places 250 structures — a realistic co-op base.
/// </summary>
[MenuItem("Tools/Ashwild/Stress Test/Spawn 250 Builds")]
public static void Spawn250() => SpawnGrid(250);
/// <summary>
/// Places 1000 structures — an ambitious long-save base, the level the NetworkObject decision was
/// judged against.
/// </summary>
[MenuItem("Tools/Ashwild/Stress Test/Spawn 1000 Builds")]
public static void Spawn1000() => SpawnGrid(1000);
#endregion
#region Internal Helpers
/// <summary>
/// Commits <paramref name="count"/> builds of the first usable buildable on a grid around the
/// origin, then logs the elapsed time and the memory delta. Requires play mode with a live session,
/// since committing goes through the registry's server RPC exactly as a real placement would.
/// </summary>
private static void SpawnGrid(int count)
{
if (!Application.isPlaying)
{
Debug.LogError("[BuildStressTest] Enter play mode and host a session first — builds are spawned through the server.");
return;
}
if (BuildRegistry.Instance == null)
{
Debug.LogError("[BuildStressTest] No BuildRegistry in the session — is the scene's BuildRegistry present and the session started?");
return;
}
if (!TryResolveBuildable(out ushort id, out string label)) return;
int side = Mathf.CeilToInt(Mathf.Sqrt(count));
long memoryBefore = Profiler.GetTotalAllocatedMemoryLong();
Stopwatch watch = Stopwatch.StartNew();
for (int i = 0; i < count; i++)
{
Vector3 position = new Vector3((i % side) * Spacing, GroundHeight, (i / side) * Spacing);
BuildRegistry.Instance.RequestBuild(id, position, Quaternion.identity);
}
watch.Stop();
long memoryDelta = Profiler.GetTotalAllocatedMemoryLong() - memoryBefore;
Debug.Log($"[BuildStressTest] Requested {count}× '{label}' in {watch.ElapsedMilliseconds} ms " +
$"({memoryDelta / 1024f / 1024f:F1} MB allocated this frame). " +
"Spawns complete over the next frames — check the profiler's steady-state frame time now.");
}
/// <summary>
/// Picks the first buildable that can actually be spawned, so the test never fails halfway on a
/// half-authored asset. Reports clearly when the database is empty or unbuilt.
/// </summary>
private static bool TryResolveBuildable(out ushort id, out string label)
{
id = 0;
label = string.Empty;
BuildableDatabase database = BuildableDatabase.Instance;
if (database == null || database.Buildables == null || database.Buildables.Length == 0)
{
Debug.LogError("[BuildStressTest] BuildableDatabase is empty — run Tools ▸ Ashwild ▸ Rebuild Buildable Database.");
return false;
}
foreach (BuildableData buildable in database.Buildables)
{
if (buildable == null || buildable.BuiltPrefab == null) continue;
id = database.GetId(buildable);
label = buildable.name;
return true;
}
Debug.LogError("[BuildStressTest] No buildable with a BuiltPrefab found.");
return false;
}
#endregion
}
}
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: dfaebf3f0f14ca94e803a73cc00965f7
@@ -0,0 +1,109 @@
using UnityEditor;
using UnityEngine;
using Ashwild.Building;
using FishNet.Object;
namespace Ashwild.EditorTools
{
/// <summary>
/// One-shot migration for the move to server-spawned builds: every committed structure is now a real
/// NetworkObject, so each buildable's BuiltPrefab needs a NetworkObject and a BuiltStructure on its
/// root. Prefabs authored before that change have neither (or only BuiltStructure, which is now a
/// NetworkBehaviour and cannot function alone), and a missing NetworkObject makes the prefab silently
/// unspawnable — the exact failure that used to leave a placed chest deactivated.
///
/// Safe to re-run: it only touches prefabs that are actually missing a component, and reports what it
/// changed. Kept as an explicit menu action rather than an automatic postprocessor because it rewrites
/// authored assets, which should never happen behind the designer's back.
/// </summary>
public static class BuiltPrefabMigrator
{
#region Menu
/// <summary>
/// Scans every BuildableData, ensures its BuiltPrefab carries NetworkObject + BuiltStructure, and
/// asks FishNet to rescan its spawnable prefab collection afterwards.
/// </summary>
[MenuItem("Tools/Ashwild/Migrate Built Prefabs To Network Objects")]
public static void Migrate()
{
string[] guids = AssetDatabase.FindAssets("t:BuildableData");
int migrated = 0;
int alreadyFine = 0;
int missingPrefab = 0;
foreach (string guid in guids)
{
BuildableData buildable = AssetDatabase.LoadAssetAtPath<BuildableData>(AssetDatabase.GUIDToAssetPath(guid));
if (buildable == null) continue;
if (buildable.BuiltPrefab == null)
{
Debug.LogWarning($"[BuiltPrefabMigrator] '{buildable.name}' has no BuiltPrefab — skipped.", buildable);
missingPrefab++;
continue;
}
if (EnsureNetworked(buildable.BuiltPrefab)) migrated++;
else alreadyFine++;
}
AssetDatabase.SaveAssets();
AssetDatabase.Refresh();
RefreshNetworkPrefabRegistry();
Debug.Log($"[BuiltPrefabMigrator] Done — {migrated} prefab(s) migrated, {alreadyFine} already correct, {missingPrefab} buildable(s) without a BuiltPrefab.");
}
#endregion
#region Internal Helpers
/// <summary>
/// Adds whatever the prefab root is missing and saves it. The NetworkObject goes on first so that
/// BuiltStructure's RequireComponent is already satisfied when it is added. Returns true when the
/// prefab was actually changed.
/// </summary>
private static bool EnsureNetworked(GameObject prefab)
{
string path = AssetDatabase.GetAssetPath(prefab);
if (string.IsNullOrEmpty(path)) return false;
GameObject root = PrefabUtility.LoadPrefabContents(path);
bool changed = false;
if (root.GetComponent<NetworkObject>() == null)
{
root.AddComponent<NetworkObject>();
changed = true;
}
if (root.GetComponent<BuiltStructure>() == null)
{
root.AddComponent<BuiltStructure>();
changed = true;
}
if (changed)
{
PrefabUtility.SaveAsPrefabAsset(root, path);
Debug.Log($"[BuiltPrefabMigrator] Migrated '{path}'.", AssetDatabase.LoadAssetAtPath<GameObject>(path));
}
PrefabUtility.UnloadPrefabContents(root);
return changed;
}
/// <summary>
/// Forces FishNet to rescan DefaultPrefabObjects so the migrated prefabs are spawnable. Invoked
/// through the menu item because the generator API is internal to the FishNet assembly.
/// </summary>
private static void RefreshNetworkPrefabRegistry()
{
const string menu = "Tools/Fish-Networking/Utility/Refresh Default Prefabs";
if (!EditorApplication.ExecuteMenuItem(menu))
Debug.LogWarning($"[BuiltPrefabMigrator] Could not run '{menu}' — run it by hand so the built prefabs are registered as spawnable.");
}
#endregion
}
}
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: c1d18a05426439d47937c24568677913
@@ -438,3 +438,32 @@
.ash-recipe-name {
margin-bottom: 12px;
}
/* ── Prefab generator (shown while a prefab slot is empty) ─ */
.ash-generator {
margin-top: 10px;
padding: 10px;
border-radius: 8px;
background-color: rgba(64, 110, 220, 0.07);
border-width: 1px;
border-color: rgb(74, 90, 130);
}
.ash-generator__title {
-unity-font-style: bold;
font-size: 11px;
color: rgb(150, 175, 240);
margin-bottom: 8px;
}
.ash-generator .ash-btn {
margin-top: 8px;
}
.ash-generator__hint {
margin-top: 8px;
font-size: 10px;
color: rgb(130, 132, 140);
-unity-font-style: italic;
white-space: normal;
}
@@ -311,7 +311,7 @@ namespace Ashwild.EditorTools
else if (selectedAsset is CraftingRecipe recipe)
rightPane.Add(new RecipeEditorView(recipe, RefreshRow).Root);
else if (selectedAsset is BuildableData buildable)
rightPane.Add(new BuildableEditorView(buildable, RefreshRow).Root);
rightPane.Add(new BuildableEditorView(buildable, RefreshRow, ShowSelection).Root);
}
/// <summary>
@@ -1,20 +1,91 @@
using System.IO;
using System.Text;
using UnityEditor;
using UnityEngine;
using Ashwild.Building;
using Ashwild.GrassClearer;
using FishNet.Component.Transforming;
using FishNet.Object;
namespace Ashwild.EditorTools
{
/// <summary>
/// Editor-only factory that creates BuildableData assets for the Ashwild Database window.
/// Kept separate from the window so buildable authoring stays a single-purpose, testable helper —
/// mirrors RecipeAssetFactory for recipes and ItemAssetFactory for items.
/// Which socket sets to generate on a buildable. Combinable, because one piece usually offers several
/// kinds of connection at once: a floor slab chains to other slabs by its edges AND hosts walls on
/// those same edges, so it is authored as <see cref="FloorEdges"/> | <see cref="WallMounts"/>.
///
/// Each flag describes a connection the piece OFFERS, not what the piece is called, so the sets
/// compose without overlapping. The pairs that mate are <see cref="WallMounts"/> (faces up, on a
/// floor) with <see cref="WallBody"/>'s foot (faces down, on the wall) — opposing forwards of the
/// same category, which is exactly what BuildManager requires to connect two sockets.
///
/// Lives here rather than in the runtime assembly because it is purely an authoring-time hint: the
/// generated prefabs only ever carry plain BuildSnapPoints.
/// </summary>
[System.Flags]
public enum BuildSnapLayout
{
None = 0,
/// <summary>Four horizontal edge sockets (category Floor) so slabs chain edge to edge.</summary>
FloorEdges = 1 << 0,
/// <summary>Four upward-facing sockets on the top edges (category Wall) where a wall plants its foot.</summary>
WallMounts = 1 << 1,
/// <summary>This piece IS a wall: a downward foot plus two end sockets (category Wall) for wall-to-wall runs.</summary>
WallBody = 1 << 2,
/// <summary>A single upward socket at the centre of the top face (category Roof) where a roof lands.</summary>
RoofMount = 1 << 3,
/// <summary>This piece IS a roof/ceiling: a single downward socket at its centre, mating a RoofMount.</summary>
RoofBody = 1 << 4,
/// <summary>Up/down caps (category Pillar) so pillars stack vertically.</summary>
PillarCaps = 1 << 5
}
/// <summary>
/// Editor-only factory that creates BuildableData assets and, on demand, generates the two prefabs a
/// buildable needs from a single source mesh or prefab — mirroring ItemAssetFactory for items.
///
/// The generated pair follows the authored convention exactly (see Ghost_WoodCelling / WoodCelling_Prefab):
/// - Built prefab — root on the Build layer carrying the source as a child, a non-trigger BoxCollider
/// fitted to the renderers, BuiltStructure (bump / highlight / damage entry) and ClearGrassOnPlace.
/// - Ghost prefab — the same root plus a NetworkObject and a client-authoritative NetworkTransform
/// (BuildRegistry spawns the ghost as a real NetworkObject, §3's deliberate low-count exception),
/// and a BuildGhost wired to the footprint collider and the two overlay materials.
///
/// Both get a "Snap" container of BuildSnapPoints on the BuildSnap layer, positioned from the source's
/// bounds with each socket's forward pointing OUT of the piece — the orientation BuildManager requires,
/// since two sockets only connect when their forwards oppose. The built copy's sockets are triggers so
/// the placement overlap finds them; the ghost's are not, so a ghost never snaps to itself.
///
/// The layout is a best guess from the mesh proportions and is meant to be adjusted by hand afterwards;
/// generation exists to kill the repetitive part, not to replace authoring judgement.
/// </summary>
public static class BuildableAssetFactory
{
#region Constants
private const string BuildablesFolder = "Assets/GAME/ScriptableObjects/Buildables";
private const string BuiltPrefabFolder = "Assets/GAME/Prefabs/Structure/Build/Build";
private const string GhostPrefabFolder = "Assets/GAME/Prefabs/Structure/Build/Ghost";
private const string ValidOverlayPath = "Assets/GAME/Shaders/Build/GAME_BuildGhost_Good.mat";
private const string InvalidOverlayPath = "Assets/GAME/Shaders/Build/GAME_BuildGhost_Not.mat";
private const string BuildLayerName = "Build";
private const string SnapLayerName = "BuildSnap";
private const string GhostLayerName = "BuildGhost";
private const string SnapContainerName = "Snap";
private const float SnapColliderRadius = 0.5f;
private const string RefreshPrefabsMenu = "Tools/Fish-Networking/Utility/Refresh Default Prefabs";
private static readonly Vector3 FallbackSize = new Vector3(1f, 1f, 1f);
#endregion
@@ -44,10 +115,512 @@ namespace Ashwild.EditorTools
return buildable;
}
/// <summary>
/// Renames the asset file so it matches the authored display name — a buildable called "Wood Wall"
/// should not sit on disk as "NewBuildable 2". Invalid path characters are stripped and the result
/// is uniquified, so a clash with an existing file never overwrites it. No-op when the name is
/// blank or already matches. Returns true when the file was actually renamed.
/// </summary>
public static bool RenameAssetToDisplayName(BuildableData buildable)
{
if (buildable == null) return false;
string desired = SanitiseFileName(buildable.DisplayName);
if (string.IsNullOrEmpty(desired) || desired == buildable.name) return false;
string path = AssetDatabase.GetAssetPath(buildable);
if (string.IsNullOrEmpty(path)) return false;
string folder = Path.GetDirectoryName(path).Replace('\\', '/');
string unique = Path.GetFileNameWithoutExtension(AssetDatabase.GenerateUniqueAssetPath($"{folder}/{desired}.asset"));
string error = AssetDatabase.RenameAsset(path, unique);
if (!string.IsNullOrEmpty(error))
{
Debug.LogWarning($"[BuildableAssetFactory] Could not rename '{buildable.name}' to '{unique}' — {error}.", buildable);
return false;
}
AssetDatabase.SaveAssets();
return true;
}
/// <summary>
/// Strips characters the file system rejects (and collapses surrounding whitespace) so a display
/// name typed freely by a designer can safely become an asset file name.
/// </summary>
private static string SanitiseFileName(string raw)
{
if (string.IsNullOrWhiteSpace(raw)) return string.Empty;
char[] invalid = Path.GetInvalidFileNameChars();
StringBuilder builder = new StringBuilder(raw.Length);
foreach (char c in raw.Trim())
if (System.Array.IndexOf(invalid, c) < 0) builder.Append(c);
return builder.ToString().Trim();
}
#endregion
#region Prefab Generation
/// <summary>
/// Generates the missing prefabs for a buildable from one source object (an FBX model or an
/// existing prefab), wires them onto the asset and returns true when at least one was created.
/// Only the slots asked for are built, so a designer can regenerate just the ghost after tweaking
/// the model without losing hand-edits on the built prefab.
///
/// The source is nested as a child rather than flattened, so it stays a live prefab link the
/// designer can keep editing. Because the ghost is a NetworkObject it must live in
/// DefaultPrefabObjects; FishNet's generator picks it up on import, and we force a refresh
/// afterwards so the registration is deterministic rather than dependent on import timing.
/// </summary>
public static bool GeneratePrefabs(BuildableData buildable, GameObject source, BuildSnapLayout layout, bool generateBuilt, bool generateGhost)
{
if (buildable == null)
{
Debug.LogError("[BuildableAssetFactory] Cannot generate prefabs — no BuildableData selected.");
return false;
}
if (source == null)
{
Debug.LogError($"[BuildableAssetFactory] Cannot generate prefabs for '{buildable.name}' — no source mesh or prefab chosen.", buildable);
return false;
}
if (!generateBuilt && !generateGhost) return false;
if (!EnsureFolder(BuiltPrefabFolder) || !EnsureFolder(GhostPrefabFolder)) return false;
Bounds bounds = MeasureSource(source);
bool created = false;
if (generateBuilt) created |= BuildBuiltPrefab(buildable, source, bounds, layout) != null;
if (generateGhost) created |= BuildGhostPrefab(buildable, source, bounds, layout) != null;
if (created)
{
ApplySupport(buildable, layout);
AssetDatabase.SaveAssets();
AssetDatabase.Refresh();
RefreshNetworkPrefabRegistry();
}
return created;
}
/// <summary>
/// Builds and saves the committed-structure prefab: the source on the Build layer under a root
/// carrying a fitted non-trigger BoxCollider (what the demolition ray and obstruction tests hit),
/// BuiltStructure and ClearGrassOnPlace, plus trigger snap sockets the placement overlap can find.
///
/// Committed structures are spawned by the server as real NetworkObjects, so the root gets one —
/// without it BuiltStructure (a NetworkBehaviour) cannot function and the prefab is not spawnable.
/// </summary>
private static GameObject BuildBuiltPrefab(BuildableData buildable, GameObject source, Bounds bounds, BuildSnapLayout layout)
{
GameObject root = BuildRoot(buildable.name, source, ResolveLayer(BuildLayerName));
FitBoxCollider(root, bounds, true);
root.AddComponent<NetworkObject>();
root.AddComponent<BuiltStructure>();
root.AddComponent<ClearGrassOnPlace>();
AddSnapSockets(root, bounds, layout, true);
return SaveAndAssign(root, $"{BuiltPrefabFolder}/{buildable.name}.prefab", buildable, "builtPrefab");
}
/// <summary>
/// Builds and saves the placement-preview prefab: the same root plus the networking pair the
/// registry needs (NetworkObject + client-authoritative NetworkTransform, since the placer owns
/// and drives its own ghost) and a BuildGhost wired to the footprint collider and the shared
/// valid/invalid overlay materials. Its snap colliders are left as non-triggers, matching the
/// authored ghost, so the ghost never registers as a snap target for itself.
///
/// The child renderers are assigned explicitly rather than left to BuildGhost's Awake fallback, so
/// the overlay targets are visible (and editable) in the prefab exactly like the authored ghost.
/// </summary>
private static GameObject BuildGhostPrefab(BuildableData buildable, GameObject source, Bounds bounds, BuildSnapLayout layout)
{
GameObject root = BuildRoot($"Ghost_{buildable.name}", source, ResolveGhostLayer());
BoxCollider footprint = FitBoxCollider(root, bounds, false);
root.AddComponent<NetworkObject>();
NetworkTransform netTransform = root.AddComponent<NetworkTransform>();
SerializedObject transformSo = new SerializedObject(netTransform);
transformSo.FindProperty("_clientAuthoritative").boolValue = true;
transformSo.ApplyModifiedPropertiesWithoutUndo();
BuildGhost ghost = root.AddComponent<BuildGhost>();
SerializedObject ghostSo = new SerializedObject(ghost);
ghostSo.FindProperty("footprint").objectReferenceValue = footprint;
ghostSo.FindProperty("validOverlay").objectReferenceValue = LoadOverlay(ValidOverlayPath);
ghostSo.FindProperty("invalidOverlay").objectReferenceValue = LoadOverlay(InvalidOverlayPath);
AssignRenderers(ghostSo.FindProperty("renderers"), root);
ghostSo.ApplyModifiedPropertiesWithoutUndo();
AddSnapSockets(root, bounds, layout, false);
DisableColliders(root);
return SaveAndAssign(root, $"{GhostPrefabFolder}/Ghost_{buildable.name}.prefab", buildable, "ghostPrefab");
}
/// <summary>
/// Fills a serialized Renderer array with every renderer found under the root, including inactive
/// ones — the ghost swaps materials on all of them, so a renderer left out would keep its opaque
/// look while the rest of the piece turns translucent.
/// </summary>
private static void AssignRenderers(SerializedProperty arrayProperty, GameObject root)
{
Renderer[] renderers = root.GetComponentsInChildren<Renderer>(true);
arrayProperty.arraySize = renderers.Length;
for (int i = 0; i < renderers.Length; i++)
arrayProperty.GetArrayElementAtIndex(i).objectReferenceValue = renderers[i];
}
#endregion
#region Snap Sockets
/// <summary>
/// Creates the "Snap" container at the source's bounds centre and fills it with every socket set
/// the layout asks for — they compose, so a floor slab gets its edge ring AND its wall mounts from
/// one pass. Nothing is added for <see cref="BuildSnapLayout.None"/>, leaving a piece that can only
/// be free-placed.
/// </summary>
private static void AddSnapSockets(GameObject root, Bounds bounds, BuildSnapLayout layout, bool trigger)
{
if (layout == BuildSnapLayout.None) return;
GameObject container = new GameObject(SnapContainerName) { layer = root.layer };
container.transform.SetParent(root.transform, false);
container.transform.localPosition = bounds.center;
Vector3 half = bounds.extents;
if (layout.HasFlag(BuildSnapLayout.FloorEdges)) AddFloorEdges(container, half, trigger);
if (layout.HasFlag(BuildSnapLayout.RoofMount)) AddRoofMount(container, half, trigger);
if (layout.HasFlag(BuildSnapLayout.RoofBody)) AddRoofBody(container, half, trigger);
if (layout.HasFlag(BuildSnapLayout.WallMounts)) AddWallMounts(container, half, trigger);
if (layout.HasFlag(BuildSnapLayout.WallBody)) AddWallBody(container, half, trigger);
if (layout.HasFlag(BuildSnapLayout.PillarCaps)) AddPillarCaps(container, half, trigger);
}
/// <summary>
/// Adds the four horizontal edge sockets of a slab, at the midpoint of each side and at
/// mid-thickness, each facing straight out of the piece so a neighbour clicks in edge-to-edge.
/// </summary>
private static void AddFloorEdges(GameObject container, Vector3 half, bool trigger)
{
CreateSocket(container, "Floor_North", new Vector3(0f, 0f, half.z), Vector3.forward, SnapCategory.Floor, trigger);
CreateSocket(container, "Floor_South", new Vector3(0f, 0f, -half.z), Vector3.back, SnapCategory.Floor, trigger);
CreateSocket(container, "Floor_East", new Vector3(half.x, 0f, 0f), Vector3.right, SnapCategory.Floor, trigger);
CreateSocket(container, "Floor_West", new Vector3(-half.x, 0f, 0f), Vector3.left, SnapCategory.Floor, trigger);
}
/// <summary>
/// Adds the single socket a roof lands on: centred on the top face and facing up, because a roof
/// or ceiling sits centred over the piece rather than hooking onto its sides. Deliberately ONE
/// socket, not a ring — four of them would let a roof snap offset to an edge, and two adjacent
/// pieces would each offer a competing target for the same roof.
/// </summary>
private static void AddRoofMount(GameObject container, Vector3 half, bool trigger)
{
CreateSocket(container, "RoofMount", new Vector3(0f, half.y, 0f), Vector3.up, SnapCategory.Roof, trigger);
}
/// <summary>
/// Adds the counterpart a roof or ceiling piece needs: one socket under its centre facing DOWN,
/// which mates the upward RoofMount offered by whatever it rests on. Without this set a RoofMount
/// has nothing to pair with — two sockets connect only when their forwards oppose.
/// </summary>
private static void AddRoofBody(GameObject container, Vector3 half, bool trigger)
{
CreateSocket(container, "Roof_Base", new Vector3(0f, -half.y, 0f), Vector3.down, SnapCategory.Roof, trigger);
}
/// <summary>
/// Adds the sockets a floor offers to walls: one per top edge, facing UP. A wall's foot faces down,
/// so the two oppose and connect — which also means a wall mount can never be mistaken for a floor
/// edge socket (those face sideways), even though a slab carries both rings at once.
/// </summary>
private static void AddWallMounts(GameObject container, Vector3 half, bool trigger)
{
CreateSocket(container, "WallMount_North", new Vector3(0f, half.y, half.z), Vector3.up, SnapCategory.Wall, trigger);
CreateSocket(container, "WallMount_South", new Vector3(0f, half.y, -half.z), Vector3.up, SnapCategory.Wall, trigger);
CreateSocket(container, "WallMount_East", new Vector3(half.x, half.y, 0f), Vector3.up, SnapCategory.Wall, trigger);
CreateSocket(container, "WallMount_West", new Vector3(-half.x, half.y, 0f), Vector3.up, SnapCategory.Wall, trigger);
}
/// <summary>
/// Adds a standing panel's own sockets: a foot at the base facing DOWN (which mates a floor's
/// upward wall mount) plus one socket on each end of its long axis facing outward, so walls chain
/// into runs. The long axis is taken as whichever horizontal dimension is larger.
/// </summary>
private static void AddWallBody(GameObject container, Vector3 half, bool trigger)
{
bool thinAlongZ = half.z <= half.x;
Vector3 longAxis = thinAlongZ ? Vector3.right : Vector3.forward;
float longHalf = thinAlongZ ? half.x : half.z;
CreateSocket(container, "Wall_Foot", new Vector3(0f, -half.y, 0f), Vector3.down, SnapCategory.Wall, trigger);
CreateSocket(container, "Wall_SideA", longAxis * longHalf, longAxis, SnapCategory.Wall, trigger);
CreateSocket(container, "Wall_SideB", -longAxis * longHalf, -longAxis, SnapCategory.Wall, trigger);
}
/// <summary>
/// Adds a pillar's two caps so pillars stack vertically: the top faces up and the bottom faces
/// down, which is exactly the opposing pair the snapping requires.
/// </summary>
private static void AddPillarCaps(GameObject container, Vector3 half, bool trigger)
{
CreateSocket(container, "Cap_Top", new Vector3(0f, half.y, 0f), Vector3.up, SnapCategory.Pillar, trigger);
CreateSocket(container, "Cap_Bottom", new Vector3(0f, -half.y, 0f), Vector3.down, SnapCategory.Pillar, trigger);
}
/// <summary>
/// Creates one socket: a child on the BuildSnap layer oriented so its forward is
/// <paramref name="outward"/>, carrying a BuildSnapPoint of the given category and the sphere
/// collider the placement overlap detects it by. Sockets are triggers on the built piece (the
/// snap targets the placement scan looks for) and plain colliders on the ghost, matching the
/// authored prefabs — the ghost is excluded from its own scan by parentage, not by collider type.
/// </summary>
private static void CreateSocket(GameObject container, string name, Vector3 localPosition, Vector3 outward, SnapCategory category, bool trigger)
{
GameObject socket = new GameObject(name) { layer = ResolveLayer(SnapLayerName) };
socket.transform.SetParent(container.transform, false);
socket.transform.localPosition = localPosition;
socket.transform.localRotation = SocketRotation(outward);
BuildSnapPoint point = socket.AddComponent<BuildSnapPoint>();
SerializedObject so = new SerializedObject(point);
so.FindProperty("category").enumValueIndex = (int)category;
so.ApplyModifiedPropertiesWithoutUndo();
SphereCollider collider = socket.AddComponent<SphereCollider>();
collider.radius = SnapColliderRadius;
collider.isTrigger = trigger;
}
/// <summary>
/// Turns an outward direction into a socket rotation. A vertical direction needs a non-parallel
/// reference up, otherwise LookRotation degenerates and the cap sockets come out unrotated.
/// </summary>
private static Quaternion SocketRotation(Vector3 outward)
{
Vector3 up = Mathf.Abs(Vector3.Dot(outward, Vector3.up)) > 0.99f ? Vector3.forward : Vector3.up;
return Quaternion.LookRotation(outward, up);
}
/// <summary>
/// Derives the buildable's placement rule from the sockets it was just given: a piece authored as
/// a wall body or a roof body only makes sense attached to something, so it becomes SnapOnly and
/// can no longer be dropped in mid-air. Everything else — foundations, floor slabs — stays free to
/// place on the ground. Doing it here means the designer never has to remember to set the two
/// fields consistently: the socket layout already says what kind of piece this is.
/// </summary>
private static void ApplySupport(BuildableData buildable, BuildSnapLayout layout)
{
bool needsConnection = layout.HasFlag(BuildSnapLayout.WallBody) || layout.HasFlag(BuildSnapLayout.RoofBody);
SerializedObject so = new SerializedObject(buildable);
so.FindProperty("support").enumValueIndex = (int)(needsConnection ? PlacementSupport.SnapOnly : PlacementSupport.GroundOrSnap);
so.ApplyModifiedPropertiesWithoutUndo();
EditorUtility.SetDirty(buildable);
}
/// <summary>
/// Suggests a layout for a source model, so picking a mesh in the window pre-ticks a sensible set
/// the designer can then adjust. Measures the mesh, so it is only worth calling when the source
/// actually changes.
/// </summary>
public static BuildSnapLayout InferLayout(GameObject source)
{
return source == null ? BuildSnapLayout.None : InferLayout(MeasureSource(source).size);
}
/// <summary>
/// Picks a socket layout from the mesh's proportions: a square-ish tall block stacks as a pillar,
/// a tall panel thin on one horizontal axis is a wall body, and anything flat enough to stand on
/// is a floor — which gets BOTH its edge ring (slab to slab) and its wall mounts, since a floor
/// piece almost always has to host walls too. That combination is the reason the layout is a set
/// of flags rather than a single choice.
/// </summary>
private static BuildSnapLayout InferLayout(Vector3 size)
{
const BuildSnapLayout slab = BuildSnapLayout.FloorEdges | BuildSnapLayout.WallMounts;
float minHorizontal = Mathf.Min(size.x, size.z);
float maxHorizontal = Mathf.Max(size.x, size.z);
if (maxHorizontal <= Mathf.Epsilon) return slab;
if (size.y <= 0.5f * minHorizontal) return slab;
if (size.y >= 1.5f * maxHorizontal && maxHorizontal <= 1.6f * minHorizontal) return BuildSnapLayout.PillarCaps;
if (minHorizontal <= 0.35f * maxHorizontal && size.y >= 0.6f * maxHorizontal) return BuildSnapLayout.WallBody;
return slab;
}
#endregion
#region Internal Helpers
/// <summary>
/// Measures the source's combined renderer bounds in its own local space by instantiating it once
/// at the origin, so socket positions and the footprint are derived from the real mesh rather than
/// guessed. Falls back to a unit box when the source has no renderers, so generation still yields a
/// usable (if arbitrary) footprint instead of a degenerate zero-size collider.
/// </summary>
private static Bounds MeasureSource(GameObject source)
{
GameObject probe = (GameObject)PrefabUtility.InstantiatePrefab(source);
if (probe == null) probe = Object.Instantiate(source);
probe.transform.position = Vector3.zero;
probe.transform.rotation = Quaternion.identity;
Renderer[] renderers = probe.GetComponentsInChildren<Renderer>();
Bounds bounds = renderers.Length > 0 ? renderers[0].bounds : new Bounds(Vector3.zero, FallbackSize);
for (int i = 1; i < renderers.Length; i++) bounds.Encapsulate(renderers[i].bounds);
Object.DestroyImmediate(probe);
return bounds;
}
/// <summary>
/// Creates the generated root with the source nested as a child at the origin, so the designer's
/// authored model stays a prefab link rather than being flattened into the copy.
///
/// The whole nested subtree is forced onto <paramref name="layer"/>. Source models routinely ship
/// on their own layer (a wall model authored on Build, say), and leaving that alone would make the
/// generated piece behave inconsistently — worst of all on a ghost, whose visual must not sit on a
/// layer the obstruction test scans.
/// </summary>
private static GameObject BuildRoot(string name, GameObject source, int layer)
{
GameObject root = new GameObject(name) { layer = layer };
GameObject visual = (GameObject)PrefabUtility.InstantiatePrefab(source);
if (visual == null) visual = Object.Instantiate(source);
visual.transform.SetParent(root.transform, false);
visual.transform.localPosition = Vector3.zero;
SetLayerRecursively(visual, layer);
return root;
}
/// <summary>
/// Puts a GameObject and every descendant on one layer.
/// </summary>
private static void SetLayerRecursively(GameObject go, int layer)
{
go.layer = layer;
foreach (Transform child in go.transform)
SetLayerRecursively(child.gameObject, layer);
}
/// <summary>
/// Disables every collider under the ghost, including any the source model brought with it.
///
/// This is what keeps a ghost from reporting itself as blocked: BuildGhost box-overlaps its
/// footprint against the obstruction mask, and an enabled collider anywhere in the preview — the
/// source model's own BoxCollider is the usual culprit, since it is authored on the Build layer —
/// lands inside that very box, so the spot reads as occupied everywhere and the ghost never turns
/// green. A ghost needs no physics at all: its footprint is read as raw dimensions, and its snap
/// sockets are found through GetComponentsInChildren, never by an overlap query.
/// </summary>
private static void DisableColliders(GameObject root)
{
foreach (Collider collider in root.GetComponentsInChildren<Collider>(true))
collider.enabled = false;
}
/// <summary>
/// The layer generated ghosts go on: a dedicated "BuildGhost" layer when the project defines one
/// (the clean setup — it keeps previews out of every mask aimed at real structures), otherwise the
/// Build layer, matching the original authored ghosts. Silent by design, since the dedicated layer
/// is optional.
/// </summary>
private static int ResolveGhostLayer()
{
int layer = LayerMask.NameToLayer(GhostLayerName);
return layer >= 0 ? layer : ResolveLayer(BuildLayerName);
}
/// <summary>
/// Adds the root's BoxCollider sized to the measured bounds. It is left enabled on the built piece
/// (its physical body, and what the demolition ray hits) but DISABLED on the ghost: the obstruction
/// mask is the Build layer the ghost itself sits on, so an enabled footprint would overlap itself
/// and report every spot as blocked. BuildGhost only ever reads the collider's centre/size, never
/// its physics contacts, so a disabled collider still serves as the bounds source.
/// </summary>
private static BoxCollider FitBoxCollider(GameObject root, Bounds bounds, bool enabled)
{
BoxCollider box = root.AddComponent<BoxCollider>();
box.center = bounds.center;
box.size = bounds.size;
box.enabled = enabled;
return box;
}
/// <summary>
/// Saves a built GameObject as a prefab under a unique path, destroys the scene instance, wires the
/// saved prefab onto the given BuildableData field and marks the asset dirty.
/// </summary>
private static GameObject SaveAndAssign(GameObject root, string desiredPath, BuildableData buildable, string field)
{
string prefabPath = AssetDatabase.GenerateUniqueAssetPath(desiredPath);
GameObject prefab = PrefabUtility.SaveAsPrefabAsset(root, prefabPath);
Object.DestroyImmediate(root);
if (prefab == null)
{
Debug.LogError($"[BuildableAssetFactory] Failed to save prefab at '{prefabPath}'.", buildable);
return null;
}
SerializedObject so = new SerializedObject(buildable);
so.FindProperty(field).objectReferenceValue = prefab;
so.ApplyModifiedPropertiesWithoutUndo();
EditorUtility.SetDirty(buildable);
Debug.Log($"[BuildableAssetFactory] Built '{prefabPath}' and assigned it to {buildable.name}.{field}.", prefab);
return prefab;
}
/// <summary>
/// Loads one of the shared ghost overlay materials, warning (rather than failing generation) when
/// it has been moved — a ghost without overlays still works, it just renders opaque.
/// </summary>
private static Material LoadOverlay(string path)
{
Material material = AssetDatabase.LoadAssetAtPath<Material>(path);
if (material == null)
Debug.LogWarning($"[BuildableAssetFactory] Ghost overlay material not found at '{path}' — assign it by hand on the generated ghost.");
return material;
}
/// <summary>
/// Forces FishNet to rescan DefaultPrefabObjects so the freshly saved ghost is spawnable straight
/// away. Invoked through the menu item rather than the generator API, which is internal to the
/// FishNet assembly and so unreachable from this one.
/// </summary>
private static void RefreshNetworkPrefabRegistry()
{
if (!EditorApplication.ExecuteMenuItem(RefreshPrefabsMenu))
Debug.LogWarning($"[BuildableAssetFactory] Could not run '{RefreshPrefabsMenu}' — run it by hand so the ghost is registered as a spawnable network prefab.");
}
/// <summary>
/// Resolves a layer index by name, falling back to the Default layer (0) with a warning when the
/// project is missing the expected layer so generation never silently lands on a wrong one.
/// </summary>
private static int ResolveLayer(string layerName)
{
int layer = LayerMask.NameToLayer(layerName);
if (layer >= 0) return layer;
Debug.LogWarning($"[BuildableAssetFactory] Layer '{layerName}' not found — using Default. Add it in the Tags & Layers settings.");
return 0;
}
/// <summary>
/// Ensures a project-relative asset folder exists, creating any missing segments. Returns
/// false (and logs) when the path cannot be created.
@@ -1,18 +1,23 @@
using System;
using System.Collections.Generic;
using UnityEditor;
using UnityEditor.UIElements;
using UnityEngine;
using UnityEngine.UIElements;
using Ashwild.Building;
using Ashwild.Inventory;
namespace Ashwild.EditorTools
{
/// <summary>
/// The custom editor for a BuildableData shown in the right pane of the Ashwild Database. Replaces
/// the default ScriptableObject inspector with a hero header (large clickable icon, editable name,
/// "Buildable" badge) and cards for the identity (description) and the ghost/built prefabs the
/// construction menu and placement ghost consume. All fields bind live to the asset; changing the
/// name or icon notifies the list so the row updates without a full rebuild.
/// "Buildable" badge) and cards for the identity (description), the ghost/built prefabs, the resource
/// cost, and the placed structure's health. The cost card reuses the recipe editor's interactive chip
/// strip — one clickable item card (with a /+ quantity stepper and a remove button) per cost line,
/// joined by "+", followed by a dashed add tile — so authoring a price feels identical to authoring a
/// recipe. All fields bind live to the asset; changing the name or icon notifies the list so the row
/// updates without a full rebuild.
/// </summary>
public class BuildableEditorView
{
@@ -21,12 +26,21 @@ namespace Ashwild.EditorTools
public VisualElement Root { get; }
private const int IconPickerControlId = 0x41534842;
private const int CostPickerControlId = 0x41534843;
private readonly BuildableData buildable;
private readonly SerializedObject so;
private readonly SerializedProperty costProp;
private readonly Action onMetaChanged;
private readonly Action onAssetChanged;
private VisualElement iconPreview;
private VisualElement costStrip;
private Action<ItemData> costPickHandler;
private bool costPickCommitsOnCloseOnly;
private GameObject generationSource;
private BuildSnapLayout generationLayout = BuildSnapLayout.None;
#endregion
@@ -34,18 +48,28 @@ namespace Ashwild.EditorTools
/// <summary>
/// Builds the full editor tree for a buildable. <paramref name="onMetaChanged"/> is raised when
/// the display name or icon changes so the list can refresh that row.
/// the display name or icon changes so the list can refresh that row;
/// <paramref name="onAssetChanged"/> re-renders the whole view after a structural change (prefab
/// generation, asset rename) that the live bindings alone cannot reflect.
/// </summary>
public BuildableEditorView(BuildableData buildable, Action onMetaChanged)
public BuildableEditorView(BuildableData buildable, Action onMetaChanged, Action onAssetChanged)
{
this.buildable = buildable;
this.onMetaChanged = onMetaChanged;
this.onAssetChanged = onAssetChanged;
so = new SerializedObject(buildable);
costProp = so.FindProperty("cost");
Root = new VisualElement();
Root.Add(BuildHero());
Root.Add(BuildIdentityCard());
Root.Add(BuildPrefabsCard());
Root.Add(BuildCostCard());
Root.Add(BuildPlacementCard());
Root.Add(BuildHealthCard());
Root.Add(BuildPickerProxy());
RefreshCost();
}
#endregion
@@ -82,6 +106,7 @@ namespace Ashwild.EditorTools
nameField.AddToClassList("ash-hero__name");
nameField.BindProperty(so.FindProperty("displayName"));
nameField.RegisterValueChangedCallback(_ => onMetaChanged?.Invoke());
nameField.RegisterCallback<FocusOutEvent>(_ => SyncAssetName());
info.Add(AshwildUI.EditableNameRow(nameField));
VisualElement typeRow = new VisualElement();
@@ -93,6 +118,19 @@ namespace Ashwild.EditorTools
return hero;
}
/// <summary>
/// Renames the asset file to match the display name once the designer leaves the name field, so a
/// buildable titled "Wood Wall" stops living on disk as "NewBuildable 2". Deliberately fired on
/// focus-out rather than on every keystroke — renaming per character would spam the AssetDatabase
/// and leave a trail of half-typed file names. Re-renders the view so the header reflects the new
/// asset identity.
/// </summary>
private void SyncAssetName()
{
if (BuildableAssetFactory.RenameAssetToDisplayName(buildable))
onAssetChanged?.Invoke();
}
/// <summary>
/// Shows the buildable's icon in the hero preview, or a neutral placeholder when none is set.
/// </summary>
@@ -141,7 +179,7 @@ namespace Ashwild.EditorTools
#endregion
#region Cards
#region Identity & Prefab Cards
/// <summary>
/// Identity card: the description shown on the menu card, plus the icon field (kept in sync
@@ -170,7 +208,12 @@ namespace Ashwild.EditorTools
/// <summary>
/// Prefabs card: the semi-transparent ghost spawned while positioning and the real structure
/// spawned once placement is confirmed.
/// spawned once placement is confirmed. When either slot is still empty the card also offers the
/// one-click generator below the fields, so the common path (drop a mesh in, press Generate) never
/// leaves the window. The generator's visibility is resolved when the view is built rather than
/// bound to the two fields: BindProperty raises a change event on its initial bind, so re-rendering
/// from those callbacks would loop the view rebuild endlessly. Generating re-renders explicitly,
/// and a hand-assigned prefab is picked up the next time the buildable is selected.
/// </summary>
private VisualElement BuildPrefabsCard()
{
@@ -184,9 +227,367 @@ namespace Ashwild.EditorTools
built.BindProperty(so.FindProperty("builtPrefab"));
card.Add(built);
if (buildable.GhostPrefab == null || buildable.BuiltPrefab == null)
card.Add(BuildGeneratorBlock());
return card;
}
/// <summary>
/// The generator shown while a prefab slot is empty: pick a source model or prefab, tick which
/// socket sets the piece should offer, and press the button to author the missing prefab(s) —
/// collider, gameplay components, networking and snap sockets included. Only the empty slots are
/// generated, so regenerating a ghost never clobbers a built prefab that has already been hand-tuned.
///
/// The layout is a mask rather than a single choice because one piece usually offers several kinds
/// of connection: a floor both chains to other floors and hosts walls. Choosing a source pre-ticks
/// the set inferred from the mesh proportions, which the designer is free to change.
/// </summary>
private VisualElement BuildGeneratorBlock()
{
VisualElement block = new VisualElement();
block.AddToClassList("ash-generator");
Label heading = new Label("Generate from a source model");
heading.AddToClassList("ash-generator__title");
block.Add(heading);
MaskField layoutField = null;
ObjectField sourceField = new ObjectField("Source Mesh / Prefab")
{
objectType = typeof(GameObject),
allowSceneObjects = false,
tooltip = "The authored model (FBX) or prefab to wrap. It is nested as a child, never flattened, so you can keep editing it."
};
sourceField.RegisterValueChangedCallback(evt =>
{
generationSource = evt.newValue as GameObject;
generationLayout = BuildableAssetFactory.InferLayout(generationSource);
layoutField?.SetValueWithoutNotify((int)generationLayout);
});
block.Add(sourceField);
layoutField = new MaskField(
"Snap Layout",
new List<string> { "Floor Edges", "Wall Mounts", "Wall Body", "Roof Mount", "Roof Body", "Pillar Caps" },
(int)generationLayout)
{
tooltip = "Which sockets to place — combinable. A floor slab usually wants Floor Edges (chain to other slabs) AND Wall Mounts (walls stand on its edges); a wall piece wants Wall Body."
};
layoutField.RegisterValueChangedCallback(evt => generationLayout = (BuildSnapLayout)evt.newValue);
block.Add(layoutField);
Button generate = new Button(GenerateMissingPrefabs) { text = DescribeGeneration() };
generate.AddToClassList("ash-btn");
generate.AddToClassList("ash-btn--primary");
block.Add(generate);
Label hint = new Label("Sockets are placed from the mesh bounds: floor edges face outward, wall mounts face up, a wall's foot faces down, and the roof mount is a single socket centred on the top face. Treat the layout as a starting point — nudge them in the prefab afterwards.");
hint.AddToClassList("ash-generator__hint");
block.Add(hint);
return block;
}
/// <summary>
/// Labels the generate button with exactly what it will create, so the designer can tell at a
/// glance whether pressing it touches one slot or both.
/// </summary>
private string DescribeGeneration()
{
bool needsBuilt = buildable.BuiltPrefab == null;
bool needsGhost = buildable.GhostPrefab == null;
if (needsBuilt && needsGhost) return "Generate Built + Ghost Prefabs";
return needsBuilt ? "Generate Built Prefab" : "Generate Ghost Prefab";
}
/// <summary>
/// Runs the generation for whichever slots are empty and re-renders the view so the new prefabs
/// appear in their fields and the generator collapses away.
/// </summary>
private void GenerateMissingPrefabs()
{
bool generated = BuildableAssetFactory.GeneratePrefabs(
buildable,
generationSource,
generationLayout,
buildable.BuiltPrefab == null,
buildable.GhostPrefab == null);
if (generated) onAssetChanged?.Invoke();
}
/// <summary>
/// Health card: the hit points the placed structure starts with, edited as a plain float field.
/// An empty cost makes the build free; likewise this drives the proportional demolition refund.
/// </summary>
private VisualElement BuildHealthCard()
{
VisualElement card = AshwildUI.Card("Health");
FloatField maxHealth = new FloatField("Max Health");
maxHealth.BindProperty(so.FindProperty("maxHealth"));
card.Add(maxHealth);
return card;
}
/// <summary>
/// Placement card: what this structure may rest on. Generating the prefabs sets it from the snap
/// layout, so this is the override for a piece the layout cannot classify — or for a buildable
/// authored before the rule existed, which defaults to the permissive Ground Or Snap.
/// </summary>
private VisualElement BuildPlacementCard()
{
VisualElement card = AshwildUI.Card("Placement");
EnumField support = new EnumField("Support")
{
tooltip = "Ground Or Snap: free placement anywhere the aim lands, or connected. Snap Only: valid solely while connected to a matching socket — use it for walls, ceilings and roofs so they cannot be dropped in mid-air."
};
support.BindProperty(so.FindProperty("support"));
card.Add(support);
return card;
}
#endregion
#region Cost Card
/// <summary>
/// Cost card: an interactive chip strip mirroring the recipe editor. Each cost line is a clickable
/// item card with a /+ quantity stepper and a remove button, the lines are joined by "+", and a
/// dashed add tile appends a new line. An empty strip means a free build.
/// </summary>
private VisualElement BuildCostCard()
{
VisualElement card = AshwildUI.Card("Cost");
costStrip = new VisualElement();
costStrip.AddToClassList("ash-equation");
card.Add(costStrip);
return card;
}
/// <summary>
/// Repaints the whole cost strip: one interactive card per cost line (joined by "+"), then the
/// dashed add tile. Shows only the add tile when the build is free.
/// </summary>
private void RefreshCost()
{
costStrip.Clear();
int count = costProp.arraySize;
for (int i = 0; i < count; i++)
{
if (i > 0) costStrip.Add(Operator("+"));
costStrip.Add(BuildCostCardChip(i));
}
if (count > 0) costStrip.Add(Operator("+"));
costStrip.Add(BuildAddTile());
}
/// <summary>
/// Builds the interactive card for the cost line at <paramref name="index"/>: a clickable icon
/// (change item), the name, a /+ quantity stepper, and a remove button.
/// </summary>
private VisualElement BuildCostCardChip(int index)
{
SerializedProperty element = costProp.GetArrayElementAtIndex(index);
ItemData item = element.FindPropertyRelative("item").objectReferenceValue as ItemData;
int quantity = element.FindPropertyRelative("quantity").intValue;
VisualElement card = MakeCard(item, () => OpenItemPicker(item, true, picked => SetCostItem(index, picked)));
card.Add(Stepper(quantity, delta => AdjustCostQuantity(index, delta)));
Button remove = new Button(() => RemoveCost(index)) { text = "✕" };
remove.AddToClassList("ash-rchip__remove");
card.Add(remove);
return card;
}
/// <summary>
/// Builds the dashed "+" tile that appends a new cost line once an item is picked.
/// </summary>
private VisualElement BuildAddTile()
{
VisualElement tile = new VisualElement();
tile.AddToClassList("ash-rchip");
tile.AddToClassList("ash-rchip--add");
tile.tooltip = "Add a cost line";
tile.RegisterCallback<ClickEvent>(_ => OpenItemPicker(null, false, AddCost));
Label plus = new Label("+");
plus.AddToClassList("ash-rchip__plus");
tile.Add(plus);
return tile;
}
/// <summary>
/// Builds the shared card body (icon + name) for an item, with the icon wired to open a picker.
/// The icon shows the item's sprite, or a neutral placeholder when unset.
/// </summary>
private VisualElement MakeCard(ItemData item, Action onIconClicked)
{
VisualElement card = new VisualElement();
card.AddToClassList("ash-rchip");
VisualElement icon = new VisualElement();
icon.AddToClassList("ash-rchip__icon");
icon.tooltip = "Click to choose an item";
if (item != null && item.Icon != null) icon.style.backgroundImage = new StyleBackground(item.Icon);
icon.RegisterCallback<ClickEvent>(_ => onIconClicked());
card.Add(icon);
Label name = new Label(item != null ? item.ItemName : "Choose…");
name.AddToClassList("ash-rchip__name");
card.Add(name);
return card;
}
/// <summary>
/// Builds a /+ quantity stepper showing the current value; <paramref name="onDelta"/> receives
/// -1 or +1.
/// </summary>
private VisualElement Stepper(int quantity, Action<int> onDelta)
{
VisualElement stepper = new VisualElement();
stepper.AddToClassList("ash-rchip__stepper");
Button minus = new Button(() => onDelta(-1)) { text = "" };
minus.AddToClassList("ash-rchip__step");
stepper.Add(minus);
Label value = new Label(quantity.ToString());
value.AddToClassList("ash-rchip__qty");
stepper.Add(value);
Button plus = new Button(() => onDelta(1)) { text = "+" };
plus.AddToClassList("ash-rchip__step");
stepper.Add(plus);
return stepper;
}
/// <summary>
/// Builds a large "+" operator glyph between cost cards.
/// </summary>
private static Label Operator(string glyph)
{
Label op = new Label(glyph);
op.AddToClassList("ash-equation__op");
return op;
}
#endregion
#region Cost Mutations
/// <summary>
/// Sets the item of an existing cost line and repaints.
/// </summary>
private void SetCostItem(int index, ItemData item)
{
if (index < 0 || index >= costProp.arraySize) return;
costProp.GetArrayElementAtIndex(index).FindPropertyRelative("item").objectReferenceValue = item;
so.ApplyModifiedProperties();
RefreshCost();
}
/// <summary>
/// Changes a cost line's quantity by a delta, clamped to a minimum of one, and repaints.
/// </summary>
private void AdjustCostQuantity(int index, int delta)
{
if (index < 0 || index >= costProp.arraySize) return;
SerializedProperty quantity = costProp.GetArrayElementAtIndex(index).FindPropertyRelative("quantity");
quantity.intValue = Mathf.Max(1, quantity.intValue + delta);
so.ApplyModifiedProperties();
RefreshCost();
}
/// <summary>
/// Appends a new cost line (quantity 1) for the picked item and repaints; ignores a null pick
/// (e.g. the picker was cancelled).
/// </summary>
private void AddCost(ItemData item)
{
if (item == null) return;
int index = costProp.arraySize;
costProp.arraySize++;
SerializedProperty element = costProp.GetArrayElementAtIndex(index);
element.FindPropertyRelative("item").objectReferenceValue = item;
element.FindPropertyRelative("quantity").intValue = 1;
so.ApplyModifiedProperties();
RefreshCost();
}
/// <summary>
/// Removes the cost line at the given index and repaints.
/// </summary>
private void RemoveCost(int index)
{
if (index < 0 || index >= costProp.arraySize) return;
costProp.DeleteArrayElementAtIndex(index);
so.ApplyModifiedProperties();
RefreshCost();
}
#endregion
#region Item Picker
/// <summary>
/// Builds the hidden IMGUI proxy that relays Unity's object-picker commands to the active cost
/// pick handler (the editor window is UI Toolkit, which can't receive those commands directly).
/// </summary>
private VisualElement BuildPickerProxy()
{
IMGUIContainer proxy = new IMGUIContainer(HandleItemPickerCommands);
proxy.style.position = Position.Absolute;
proxy.style.width = 1;
proxy.style.height = 1;
return proxy;
}
/// <summary>
/// Opens Unity's item picker seeded with the current item. When <paramref name="commitLive"/>
/// is true the pick applies on every highlight (live preview, e.g. changing an existing line);
/// otherwise it applies only when the picker closes (e.g. adding a new line — commit once).
/// </summary>
private void OpenItemPicker(ItemData seed, bool commitLive, Action<ItemData> onPicked)
{
costPickHandler = onPicked;
costPickCommitsOnCloseOnly = !commitLive;
EditorGUIUtility.ShowObjectPicker<ItemData>(seed, false, string.Empty, CostPickerControlId);
}
/// <summary>
/// Forwards the picker's selection to the active handler, honouring the live-vs-on-close policy.
/// </summary>
private void HandleItemPickerCommands()
{
Event evt = Event.current;
if (evt == null || evt.type != EventType.ExecuteCommand) return;
if (EditorGUIUtility.GetObjectPickerControlID() != CostPickerControlId) return;
bool updated = evt.commandName == "ObjectSelectorUpdated";
bool closed = evt.commandName == "ObjectSelectorClosed";
if (!updated && !closed) return;
if (updated && costPickCommitsOnCloseOnly) return;
costPickHandler?.Invoke(EditorGUIUtility.GetObjectPickerObject() as ItemData);
}
#endregion
}
}
@@ -0,0 +1,213 @@
using System;
using System.Reflection;
using UnityEditor;
using UnityEngine;
namespace Ashwild.EditorTools
{
/// <summary>
/// Editor-only capture helper: an on/off toggle under Tools ▸ Ashwild that, when enabled, forces the
/// Game view into a borderless fullscreen window as soon as Play Mode starts — so the running game
/// looks exactly like a shipped build (no editor chrome, no toolbar) and is clean to record in OBS.
/// The preference is checkable in the menu and persists per-machine in EditorPrefs; entering fullscreen
/// spawns a dedicated popup Game view on the main display and it is torn down the moment play stops.
/// </summary>
[InitializeOnLoad]
public static class FullscreenOnPlay
{
#region Constants
/// <summary>
/// The checkable menu entry that flips the feature on and off.
/// </summary>
private const string MenuPath = "Tools/Fullscreen On Play (OBS)";
/// <summary>
/// EditorPrefs key holding the toggle state. Per-user, per-machine — a personal recording setting,
/// deliberately not shared through the project.
/// </summary>
private const string PrefKey = "Ashwild.FullscreenOnPlay.Enabled";
#endregion
#region State
/// <summary>
/// The live borderless Game view spawned for fullscreen playback, or null when not in fullscreen.
/// Held so it can be closed again the instant Play Mode ends.
/// </summary>
private static EditorWindow fullscreenView;
#endregion
#region Initialization
/// <summary>
/// Hooks the Play Mode state stream once, on editor load and every domain reload, so the fullscreen
/// window follows play/stop regardless of how the user triggered it.
/// </summary>
static FullscreenOnPlay()
{
EditorApplication.playModeStateChanged -= HandlePlayModeStateChanged;
EditorApplication.playModeStateChanged += HandlePlayModeStateChanged;
}
#endregion
#region Menu
/// <summary>
/// Flips the toggle and, as a convenience, applies it immediately when already in Play Mode
/// (goes fullscreen right away, or drops back to the windowed Game view).
/// </summary>
[MenuItem(MenuPath, false, 200)]
private static void Toggle()
{
bool enabled = !IsEnabled;
EditorPrefs.SetBool(PrefKey, enabled);
Menu.SetChecked(MenuPath, enabled);
if (!EditorApplication.isPlaying) return;
if (enabled) EnterFullscreen();
else ExitFullscreen();
}
/// <summary>
/// Keeps the menu checkmark in sync with the stored preference every time the menu is opened.
/// </summary>
[MenuItem(MenuPath, true)]
private static bool ToggleValidate()
{
Menu.SetChecked(MenuPath, IsEnabled);
return true;
}
#endregion
#region Play Mode Hook
/// <summary>
/// Enters fullscreen when play begins (only if the toggle is on) and always tears it down as play
/// ends — so a leftover popup can never survive back into edit mode.
/// </summary>
private static void HandlePlayModeStateChanged(PlayModeStateChange state)
{
switch (state)
{
case PlayModeStateChange.EnteredPlayMode:
if (IsEnabled) EnterFullscreen();
break;
case PlayModeStateChange.ExitingPlayMode:
ExitFullscreen();
break;
}
}
#endregion
#region Fullscreen Control
/// <summary>
/// Spawns a dedicated Game view, strips its toolbar and shows it as a borderless popup sized to the
/// main display — the closest the editor gets to a real build's fullscreen. The position is
/// re-asserted next editor tick because ShowPopup can clamp the initial rect. Reuses nothing from
/// the docked layout, so the user's window arrangement is left untouched.
/// </summary>
private static void EnterFullscreen()
{
if (fullscreenView != null) return;
Type gameViewType = typeof(EditorWindow).Assembly.GetType("UnityEditor.GameView");
if (gameViewType == null)
{
Debug.LogError("[FullscreenOnPlay] Could not resolve UnityEditor.GameView — fullscreen capture unavailable on this Unity version.");
return;
}
fullscreenView = ScriptableObject.CreateInstance(gameViewType) as EditorWindow;
if (fullscreenView == null)
{
Debug.LogError("[FullscreenOnPlay] Failed to create a Game view instance — fullscreen capture aborted.");
return;
}
fullscreenView.titleContent = new GUIContent("Game (Fullscreen)");
SetShowToolbar(fullscreenView, false);
Rect fullscreen = MainDisplayRect();
fullscreenView.ShowPopup();
fullscreenView.position = fullscreen;
fullscreenView.minSize = fullscreen.size;
fullscreenView.maxSize = fullscreen.size;
fullscreenView.Focus();
EditorApplication.delayCall += ReassertPosition;
Debug.Log("[FullscreenOnPlay] Game view is fullscreen for capture. To exit: press your Play shortcut (Ctrl/Cmd+P), or Alt+Tab back to the Unity editor and press Stop.");
}
/// <summary>
/// Closes the fullscreen popup if one is open. Safe to call when nothing is showing (a no-op),
/// so both the play-stop hook and the live toggle can lean on it unconditionally.
/// </summary>
private static void ExitFullscreen()
{
EditorApplication.delayCall -= ReassertPosition;
if (fullscreenView == null) return;
fullscreenView.Close();
fullscreenView = null;
}
/// <summary>
/// Re-applies the fullscreen rect one tick after showing, defeating any clamp ShowPopup applied
/// before the window was fully realized. Guards against the window having been closed meanwhile.
/// </summary>
private static void ReassertPosition()
{
EditorApplication.delayCall -= ReassertPosition;
if (fullscreenView == null) return;
fullscreenView.position = MainDisplayRect();
fullscreenView.Focus();
}
#endregion
#region Internal Helpers
/// <summary>
/// The main display's bounds expressed in editor points (pixels ÷ pixelsPerPoint), so the window
/// covers the whole monitor correctly even under OS display scaling on high-DPI screens.
/// </summary>
private static Rect MainDisplayRect()
{
float pixelsPerPoint = Mathf.Max(1f, EditorGUIUtility.pixelsPerPoint);
Resolution res = Screen.currentResolution;
return new Rect(0f, 0f, res.width / pixelsPerPoint, res.height / pixelsPerPoint);
}
/// <summary>
/// Hides (or shows) the Game view's own toolbar via its internal 'showToolbar' property so the
/// capture is pure game with no editor UI. Silently degrades if the property is missing on a
/// future Unity version — a visible toolbar is a cosmetic loss, not a failure.
/// </summary>
private static void SetShowToolbar(EditorWindow gameView, bool visible)
{
PropertyInfo prop = gameView.GetType().GetProperty(
"showToolbar", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
if (prop != null && prop.CanWrite)
prop.SetValue(gameView, visible);
}
/// <summary>
/// Whether the fullscreen-on-play toggle is currently enabled.
/// </summary>
private static bool IsEnabled => EditorPrefs.GetBool(PrefKey, false);
#endregion
}
}
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 71eb5c7505bea6d4f862da3606a758f3
+25 -17
View File
@@ -55,7 +55,8 @@ namespace Ashwild.Inventory
{
// Visual setup that does not need the player.
for (int i = 0; i < hotbarSlot.Length; i++)
hotbarSlot[i].Initialize(i, InventoryUI.OnSwapRequested, OnSlotClicked, OnSlotHoverEnter, OnSlotHoverExit);
hotbarSlot[i].Initialize(SlotContainer.Inventory, i,
InventoryUI.HandleSlotDrop, OnSlotClicked, OnSlotHoverEnter, OnSlotHoverExit);
transform.localScale = Vector3.one * idleScale;
if (canvasGroup != null)
@@ -154,15 +155,27 @@ namespace Ashwild.Inventory
ZoomOut();
}
private void OnSlotClicked(int index, bool rightClick)
/// <summary>
/// Right-click on a hotbar slot: a quick deposit into the open chest, otherwise the slot context
/// menu (only while the inventory window is open — the hotbar must not pop a menu during play).
/// </summary>
private void OnSlotClicked(SlotContainer container, int index, bool rightClick)
{
if (rightClick && PlayerEvents.IsInventoryOpen)
if (!rightClick) return;
if (PlayerEvents.IsChestOpen)
{
if (contextMenu != null)
contextMenu.Show(index);
else
inventory.UseItem(index);
if (InventoryUI.Instance != null)
InventoryUI.Instance.RequestQuickTransfer(SlotContainer.Inventory, index);
return;
}
if (!PlayerEvents.IsInventoryOpen) return;
if (contextMenu != null)
contextMenu.Show(index);
else
inventory.UseItem(index);
}
private void OnSlotChanged(int index)
@@ -173,11 +186,12 @@ namespace Ashwild.Inventory
/// <summary>
/// Shows the shared description panel for a hovered hotbar slot, but only while the inventory
/// is open — during normal play the hotbar must not pop a description. The duration bar
/// reflects the item's remaining uses/durability.
/// is open and no chest is open (chest mode hides the description entirely) — during normal play
/// the hotbar must not pop a description. The duration bar reflects the item's remaining uses.
/// </summary>
private void OnSlotHoverEnter(int index)
private void OnSlotHoverEnter(SlotContainer container, int index)
{
if (PlayerEvents.IsChestOpen) return;
if (hoverDescription == null || inventory == null || !PlayerEvents.IsInventoryOpen) return;
InventorySlot slot = inventory.GetSlot(index);
@@ -187,13 +201,7 @@ namespace Ashwild.Inventory
return;
}
ItemData item = slot.ItemData;
bool hasDuration = item.HasUses;
float fill = hasDuration ? (float)slot.CurrentUses / item.MaxUses : 0f;
string durationText = hasDuration ? $"{slot.CurrentUses} / {item.MaxUses}" : string.Empty;
hoverDescription.Show(new ItemDescriptionView(
item.Icon, item.ItemName, item.Description, hasDuration, fill, durationText));
hoverDescription.Show(ItemDescriptionView.From(slot));
}
/// <summary>
@@ -9,6 +9,7 @@ namespace Ashwild.Inventory
[SerializeField] private int defaultCategoryIndex;
private int currentIndex = -1;
private bool locked;
private void Awake()
{
@@ -22,12 +23,13 @@ namespace Ashwild.Inventory
panels[i].SetActive(false);
}
/// <summary>
/// Opens the category strip on the inventory category every time — the window must always land on
/// the inventory, never stay on craft from a previous session (and chest mode needs the grid).
/// </summary>
public void Open()
{
if (currentIndex < 0)
SelectCategoryImmediate(defaultCategoryIndex);
else
SelectCategoryImmediate(currentIndex);
SelectCategoryImmediate(defaultCategoryIndex);
}
public void Close()
@@ -36,8 +38,15 @@ namespace Ashwild.Inventory
panels[i].SetActive(false);
}
/// <summary>
/// Blocks category switching while set — used in chest mode, where the left grid must stay the
/// inventory so items can be deposited/withdrawn.
/// </summary>
public void SetLocked(bool value) => locked = value;
public void SelectCategory(int index)
{
if (locked) return;
if (index == currentIndex) return;
if (index < 0 || index >= panels.Length) return;
@@ -55,17 +55,6 @@ namespace Ashwild.Inventory
currentUses = 0;
}
public int AddQuantity(int amount)
{
if (itemData == null || !itemData.IsStackable || itemData.HasUses)
return amount;
int space = itemData.MaxStackSize - quantity;
int toAdd = amount < space ? amount : space;
quantity += toAdd;
return amount - toAdd;
}
public void RemoveQuantity(int amount)
{
quantity -= amount;
+188 -54
View File
@@ -2,24 +2,37 @@ using UnityEngine;
using UnityEngine.UI;
using TMPro;
using Ashwild.Player;
using Ashwild.Storage;
using Ashwild.UI;
namespace Ashwild.Inventory
{
/// <summary>
/// The inventory window. It is a local UI panel (opening/closing is purely local — the item
/// data itself lives in the networked <see cref="PlayerInventory"/>), so it is driven by the
/// GameUIManager panel stack like any other panel. The controller object stays active so it can
/// build its grid when the local player spawns; Show/Hide only toggle the visual window.
/// The inventory window and the manager of its right-side modules. It is a local UI panel
/// (opening/closing is purely local — the item data lives in the networked <see cref="PlayerInventory"/>),
/// driven by the GameUIManager panel stack. The left grid + hotbar are always the player's inventory;
/// the right area swaps between two modules: the hover description (normal browsing) and the chest
/// module (<see cref="ChestPanelUI"/>) when a chest is opened. Opening a chest reuses this same window
/// — the inventory and hotbar cells double as the deposit source, so nothing is rebuilt — and every
/// drop is routed here into the right operation, chest transfers going through the chest's
/// server-authoritative RPCs so two players sharing a chest stay in sync.
/// </summary>
public class InventoryUI : UIPanel
{
/// <summary>
/// Marks this panel as the inventory: input is locked and the cursor shows, but the world
/// keeps running (unlike the pause menu).
/// keeps running (unlike the pause menu). A chest reuses this same window/kind.
/// </summary>
public override PanelKind Kind => PanelKind.Inventory;
/// <summary>
/// The single inventory window in the scene, reached by a chest's Interact() and by slot cells
/// routing their drops here.
/// </summary>
public static InventoryUI Instance { get; private set; }
#region Serialized Fields
[Header("References")]
[SerializeField] private GameObject inventoryPanel;
[SerializeField] private Transform slotContainer;
@@ -33,8 +46,12 @@ namespace Ashwild.Inventory
[Header("Context Menu")]
[SerializeField] private SlotContextMenu contextMenu;
[Header("Hover Description")]
[Header("Right Modules")]
[Tooltip("Holder of the hover-description module — shown while browsing, hidden while a chest is open.")]
[SerializeField] private GameObject descriptionModule;
[SerializeField] private HoverDescriptionUI hoverDescription;
[Tooltip("The chest module shown in place of the description while a chest is open.")]
[SerializeField] private ChestPanelUI chestPanel;
[Header("Categories")]
[SerializeField] private InventoryCategoryManager categoryManager;
@@ -42,10 +59,32 @@ namespace Ashwild.Inventory
[Header("Hotbar")]
[SerializeField] private HotbarUI hotbarUI;
#endregion
#region State
private SlotUI[] slotUIs;
private PlayerInventory inventory;
private bool bound;
/// <summary>
/// The chest bound while the window is in chest mode (null during normal inventory browsing).
/// </summary>
private Chest boundChest;
#endregion
#region Unity Lifecycle
/// <summary>
/// Registers the singleton (in addition to the base panel setup).
/// </summary>
protected override void Awake()
{
base.Awake();
Instance = this;
}
/// <summary>
/// Waits for the networked local player to spawn before building the inventory grid.
/// </summary>
@@ -64,7 +103,7 @@ namespace Ashwild.Inventory
private void Start()
{
// Setup shared ghost for all SlotUIs (hotbar + inventory) — does not need the player.
// Setup shared ghost for all SlotUIs (hotbar + inventory + chest) — does not need the player.
SlotUI.SetupGhost(ghostObject, ghostIcon, ghostQuantityText);
inventoryPanel.SetActive(false);
@@ -73,6 +112,20 @@ namespace Ashwild.Inventory
BuildInventory();
}
/// <summary>
/// Clears the listener and the singleton on teardown.
/// </summary>
private void OnDestroy()
{
if (inventory != null)
inventory.onSlotChanged.RemoveListener(RefreshSlot);
if (Instance == this) Instance = null;
}
#endregion
#region Build
/// <summary>
/// Builds the grid as soon as the local player has spawned on the network.
/// </summary>
@@ -96,7 +149,8 @@ namespace Ashwild.Inventory
int slotIndex = inventory.HotbarSize + i;
GameObject slotGO = Instantiate(slotPrefab, slotContainer);
SlotUI slotUI = slotGO.GetComponent<SlotUI>();
slotUI.Initialize(slotIndex, OnSwapRequested, OnSlotClicked, OnSlotHoverEnter, OnSlotHoverExit);
slotUI.Initialize(SlotContainer.Inventory, slotIndex,
HandleSlotDrop, OnSlotClicked, OnSlotHoverEnter, OnSlotHoverExit);
slotUIs[i] = slotUI;
}
@@ -104,29 +158,59 @@ namespace Ashwild.Inventory
RefreshAll();
}
private void OnDestroy()
#endregion
#region Panel Lifecycle
/// <summary>
/// Binds a chest and opens this window in chest mode through the panel stack. Called from a
/// chest's Interact(); the chest is picked up in Show().
/// </summary>
public void OpenChest(Chest chest)
{
if (inventory != null)
inventory.onSlotChanged.RemoveListener(RefreshSlot);
if (chest == null) return;
boundChest = chest;
if (UIManager.Instance != null)
UIManager.Instance.OpenPanel(this);
}
/// <summary>
/// Opens the inventory window (called by the GameUIManager panel stack).
/// Opens the inventory window. Enters chest mode when a chest was bound (right side shows the
/// chest module, category is forced to and locked on the inventory), otherwise normal browsing
/// (right side shows the description). Always lands on the inventory category, never craft.
/// </summary>
public override void Show()
{
inventoryPanel.SetActive(true);
RefreshAll();
bool chestMode = boundChest != null;
if (categoryManager != null)
{
categoryManager.Open();
categoryManager.SetLocked(chestMode);
}
if (chestMode)
{
if (descriptionModule != null) descriptionModule.SetActive(false);
if (chestPanel != null) chestPanel.Bind(boundChest);
PlayerEvents.RaiseChestOpenChanged(true);
}
else
{
if (chestPanel != null) chestPanel.Hide();
if (descriptionModule != null) descriptionModule.SetActive(true);
}
RefreshAll();
if (hotbarUI != null)
hotbarUI.OnInventoryOpen();
}
/// <summary>
/// Closes the inventory window and tears down its transient UI (ghost, context menu).
/// Closes the window and tears down its transient UI (ghost, context menu, chest binding).
/// </summary>
public override void Hide()
{
@@ -140,11 +224,16 @@ namespace Ashwild.Inventory
hoverDescription.Hide();
if (categoryManager != null)
{
categoryManager.SetLocked(false);
categoryManager.Close();
}
if (hotbarUI != null)
hotbarUI.OnInventoryClose();
CloseChestMode();
inventoryPanel.SetActive(false);
}
@@ -156,54 +245,99 @@ namespace Ashwild.Inventory
if (ghostObject != null)
ghostObject.SetActive(false);
CloseChestMode();
inventoryPanel.SetActive(false);
}
// Called by any SlotUI (inventory or hotbar) when a drag-drop completes
public static void OnSwapRequested(int fromIndex, int toIndex)
/// <summary>
/// Leaves chest mode: hides the chest module, releases the chest and puts the description module
/// back. Shared by both close paths so they can never drift apart — HideInstant used to forget
/// the description and left the right side blank on the next open.
/// </summary>
private void CloseChestMode()
{
PlayerInventory inv = PlayerInventory.Instance;
InventorySlot fromSlot = inv.GetSlot(fromIndex);
InventorySlot toSlot = inv.GetSlot(toIndex);
if (boundChest == null) return;
// Same stackable item: merge
if (!fromSlot.IsEmpty && !toSlot.IsEmpty
&& fromSlot.ItemData == toSlot.ItemData
&& toSlot.CanAccept(fromSlot.ItemData))
{
int leftover = toSlot.AddQuantity(fromSlot.Quantity);
if (leftover <= 0)
fromSlot.Clear();
else
fromSlot.Set(fromSlot.ItemData, leftover);
inv.onSlotChanged?.Invoke(fromIndex);
inv.onSlotChanged?.Invoke(toIndex);
}
else
{
// Swap
inv.SwapSlots(fromIndex, toIndex);
}
if (chestPanel != null) chestPanel.Hide();
boundChest = null;
if (descriptionModule != null) descriptionModule.SetActive(true);
PlayerEvents.RaiseChestOpenChanged(false);
}
private void OnSlotClicked(int index, bool rightClick)
#endregion
#region Transfer Routing
/// <summary>
/// Routes a slot drop to whoever owns the slots: the inventory itself when both ends are local,
/// otherwise the chest (which reconciles it server-side). Both paths end up in the same
/// <see cref="SlotTransfer.Move"/> rules, so a chest drag behaves exactly like an inventory drag.
/// Static so every cell (inventory, hotbar, chest) reports here without a per-cell reference.
/// </summary>
public static void HandleSlotDrop(SlotContainer fromContainer, int fromIndex, SlotContainer toContainer, int toIndex)
{
if (rightClick)
if (fromContainer == SlotContainer.Inventory && toContainer == SlotContainer.Inventory)
{
if (contextMenu != null)
contextMenu.Show(index);
else
inventory.UseItem(index);
PlayerInventory inv = PlayerInventory.Instance;
if (inv != null) inv.MoveSlot(fromIndex, toIndex);
return;
}
Chest chest = Instance != null ? Instance.boundChest : null;
if (chest == null) return;
// Paint the chest cell as emptied now: its clear replicates on the SyncList (end of tick)
// while the grant is an immediate TargetRpc, so without this the stack visibly lands in the
// inventory before it leaves the chest.
if (fromContainer == SlotContainer.Chest && Instance.chestPanel != null)
Instance.chestPanel.PredictEmptied(fromIndex);
chest.RequestMove(fromContainer, fromIndex, toContainer, toIndex);
}
/// <summary>
/// Builds the description payload for the hovered slot and shows the side panel. Empty slots
/// keep the panel hidden. The duration bar reflects the item's remaining uses/durability.
/// Quick-transfers a stack to the other container (auto-placed), for right-clicks. Exposed so the
/// hotbar — which cannot reach the private chest binding — can route its own cells here.
/// </summary>
private void OnSlotHoverEnter(int index)
public void RequestQuickTransfer(SlotContainer container, int index)
{
if (boundChest != null)
boundChest.RequestQuickTransfer(container, index);
}
#endregion
#region Event Handlers
/// <summary>
/// Right-click on an inventory cell: a quick deposit while a chest is open, otherwise the slot
/// context menu.
/// </summary>
private void OnSlotClicked(SlotContainer container, int index, bool rightClick)
{
if (!rightClick) return;
if (boundChest != null)
{
boundChest.RequestQuickTransfer(SlotContainer.Inventory, index);
return;
}
if (contextMenu != null)
contextMenu.Show(index);
else if (inventory != null)
inventory.UseItem(index);
}
/// <summary>
/// Builds the description payload for the hovered slot and shows the side panel. Suppressed in
/// chest mode (the description module is hidden) and for empty slots. The duration bar reflects
/// the item's remaining uses/durability.
/// </summary>
private void OnSlotHoverEnter(SlotContainer container, int index)
{
if (boundChest != null) return;
if (hoverDescription == null || inventory == null) return;
InventorySlot slot = inventory.GetSlot(index);
@@ -213,13 +347,7 @@ namespace Ashwild.Inventory
return;
}
ItemData item = slot.ItemData;
bool hasDuration = item.HasUses;
float fill = hasDuration ? (float)slot.CurrentUses / item.MaxUses : 0f;
string durationText = hasDuration ? $"{slot.CurrentUses} / {item.MaxUses}" : string.Empty;
hoverDescription.Show(new ItemDescriptionView(
item.Icon, item.ItemName, item.Description, hasDuration, fill, durationText));
hoverDescription.Show(ItemDescriptionView.From(slot));
}
/// <summary>
@@ -231,6 +359,10 @@ namespace Ashwild.Inventory
hoverDescription.Hide();
}
#endregion
#region Refresh
private void RefreshSlot(int index)
{
if (slotUIs == null) return;
@@ -250,5 +382,7 @@ namespace Ashwild.Inventory
slotUIs[i].UpdateVisual(inventory.GetSlot(slotIndex));
}
}
#endregion
}
}

Some files were not shown because too many files have changed in this diff Show More