+ Marry building system with world terrain - phase 1

This commit is contained in:
tetreum
2021-02-28 11:52:56 +01:00
parent ab599a77c3
commit a6254cb262
15 changed files with 602 additions and 636 deletions
+1 -1
View File
@@ -250,7 +250,7 @@ Material:
- _ZTestTransparent: 4
- _ZWrite: 0
m_Colors:
- _BaseColor: {r: 1, g: 1, b: 1, a: 1}
- _BaseColor: {r: 1, g: 0, b: 0, a: 1}
- _BaseColorMap_MipInfo: {r: 0, g: 0, b: 0, a: 0}
- _Color: {r: 1, g: 1, b: 1, a: 1}
- _DiffusionProfileAsset: {r: 0, g: 0, b: 0, a: 0}
@@ -1,5 +1,64 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &1396293389
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1396293390}
- component: {fileID: 1396293392}
- component: {fileID: 1396293393}
m_Layer: 1
m_Name: TriggerDetector
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1396293390
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1396293389}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 4573967098094624498}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!136 &1396293392
CapsuleCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1396293389}
m_Material: {fileID: 0}
m_IsTrigger: 1
m_Enabled: 1
m_Radius: 0.35
m_Height: 1.8
m_Direction: 1
m_Center: {x: 0, y: 0, z: 0}
--- !u!114 &1396293393
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1396293389}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 8e5c79ebb3775174eb3267455201fb5d, type: 3}
m_Name:
m_EditorClassIdentifier:
waterBlocks: []
--- !u!1 &4573967098094624393
GameObject:
m_ObjectHideFlags: 0
@@ -13,6 +72,7 @@ GameObject:
- component: {fileID: 4573967098094624396}
- component: {fileID: 4573967098094624399}
- component: {fileID: 4573967098094624398}
- component: {fileID: 1964356915}
m_Layer: 2
m_Name: FPSController
m_TagString: Player
@@ -32,6 +92,7 @@ Transform:
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children:
- {fileID: 4573967099470554939}
- {fileID: 1396293390}
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0}
@@ -69,7 +130,7 @@ MonoBehaviour:
m_WalkSpeed: 2
m_RunSpeed: 5
m_RunstepLenghten: 0.7
m_JumpSpeed: 3
m_JumpSpeed: 5
m_StickToGroundForce: 10
m_GravityMultiplier: 2
m_MouseLook:
@@ -287,6 +348,22 @@ AudioSource:
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 0
--- !u!114 &1964356915
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4573967098094624393}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: de849660fe1ceb242a3431e8327c72af, type: 3}
m_Name:
m_EditorClassIdentifier:
inventorySlots: 36
isOnWater: 0
firstPersonController: {fileID: 0}
triggerDetector: {fileID: 0}
--- !u!1 &4573967099470554938
GameObject:
m_ObjectHideFlags: 0
@@ -299,6 +376,7 @@ GameObject:
- component: {fileID: 4573967099470554916}
- component: {fileID: 4573967099470554919}
- component: {fileID: 4573967099470554918}
- component: {fileID: 1791073987}
m_Layer: 0
m_Name: FirstPersonCharacter
m_TagString: MainCamera
@@ -356,8 +434,8 @@ Camera:
m_TargetTexture: {fileID: 0}
m_TargetDisplay: 0
m_TargetEye: 3
m_HDR: 1
m_AllowMSAA: 1
m_HDR: 0
m_AllowMSAA: 0
m_AllowDynamicResolution: 0
m_ForceIntoRT: 0
m_OcclusionCulling: 1
@@ -379,3 +457,117 @@ Behaviour:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4573967099470554938}
m_Enabled: 1
--- !u!114 &1791073987
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4573967099470554938}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 23c1ce4fb46143f46bc5cb5224c934f6, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Version: 7
m_ObsoleteRenderingPath: 0
m_ObsoleteFrameSettings:
overrides: 0
enableShadow: 0
enableContactShadows: 0
enableShadowMask: 0
enableSSR: 0
enableSSAO: 0
enableSubsurfaceScattering: 0
enableTransmission: 0
enableAtmosphericScattering: 0
enableVolumetrics: 0
enableReprojectionForVolumetrics: 0
enableLightLayers: 0
enableExposureControl: 1
diffuseGlobalDimmer: 0
specularGlobalDimmer: 0
shaderLitMode: 0
enableDepthPrepassWithDeferredRendering: 0
enableTransparentPrepass: 0
enableMotionVectors: 0
enableObjectMotionVectors: 0
enableDecals: 0
enableRoughRefraction: 0
enableTransparentPostpass: 0
enableDistortion: 0
enablePostprocess: 0
enableOpaqueObjects: 0
enableTransparentObjects: 0
enableRealtimePlanarReflection: 0
enableMSAA: 0
enableAsyncCompute: 0
runLightListAsync: 0
runSSRAsync: 0
runSSAOAsync: 0
runContactShadowsAsync: 0
runVolumeVoxelizationAsync: 0
lightLoopSettings:
overrides: 0
enableDeferredTileAndCluster: 0
enableComputeLightEvaluation: 0
enableComputeLightVariants: 0
enableComputeMaterialVariants: 0
enableFptlForForwardOpaque: 0
enableBigTilePrepass: 0
isFptlEnabled: 0
clearColorMode: 0
backgroundColorHDR: {r: 0.025, g: 0.07, b: 0.19, a: 0}
clearDepth: 1
volumeLayerMask:
serializedVersion: 2
m_Bits: 1
volumeAnchorOverride: {fileID: 0}
antialiasing: 0
SMAAQuality: 2
dithering: 0
stopNaNs: 0
taaSharpenStrength: 0.6
TAAQuality: 1
taaHistorySharpening: 0.35
taaAntiFlicker: 0.5
taaMotionVectorRejection: 0
taaAntiHistoryRinging: 0
physicalParameters:
m_Iso: 200
m_ShutterSpeed: 0.005
m_Aperture: 16
m_BladeCount: 5
m_Curvature: {x: 2, y: 11}
m_BarrelClipping: 0.25
m_Anamorphism: 0
flipYMode: 0
xrRendering: 1
fullscreenPassthrough: 0
allowDynamicResolution: 0
customRenderingSettings: 0
invertFaceCulling: 0
probeLayerMask:
serializedVersion: 2
m_Bits: 4294967295
hasPersistentHistory: 0
exposureTarget: {fileID: 0}
m_RenderingPathCustomFrameSettings:
bitDatas:
data1: 70300024700749
data2: 4539628425463136256
lodBias: 1
lodBiasMode: 0
lodBiasQualityLevel: 0
maximumLODLevel: 0
maximumLODLevelMode: 0
maximumLODLevelQualityLevel: 0
sssQualityMode: 0
sssQualityLevel: 0
sssCustomSampleBudget: 20
materialQuality: 0
renderingPathCustomFrameSettingsOverrideMask:
mask:
data1: 0
data2: 0
defaultFrameSettings: 0
+1
View File
@@ -51,3 +51,4 @@ MonoBehaviour:
- {fileID: 7820642324698506490, guid: 2afc2f2af1b4e904ab398c38b1182927, type: 3}
- {fileID: 7206315527319244451, guid: 46a7727c4f018494e94698435337a070, type: 3}
- {fileID: 6066566645834451869, guid: 71921c3e1effe564ea7dc3ced05ba291, type: 3}
playerPrefab: {fileID: 4573967098094624393, guid: ca86112991f492f448b9242dfb373cbd, type: 3}
-216
View File
@@ -453,65 +453,6 @@ Transform:
m_Father: {fileID: 0}
m_RootOrder: 5
m_LocalEulerAnglesHint: {x: 51.612, y: 54.243, z: 130.659}
--- !u!1 &1396293389
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1396293390}
- component: {fileID: 1396293392}
- component: {fileID: 1396293393}
m_Layer: 1
m_Name: TriggerDetector
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1396293390
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1396293389}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 1964356920}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!136 &1396293392
CapsuleCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1396293389}
m_Material: {fileID: 0}
m_IsTrigger: 1
m_Enabled: 1
m_Radius: 0.35
m_Height: 1.8
m_Direction: 1
m_Center: {x: 0, y: 0, z: 0}
--- !u!114 &1396293393
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1396293389}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 8e5c79ebb3775174eb3267455201fb5d, type: 3}
m_Name:
m_EditorClassIdentifier:
waterBlocks: []
--- !u!1001 &1791073985
PrefabInstance:
m_ObjectHideFlags: 0
@@ -523,10 +464,6 @@ PrefabInstance:
propertyPath: m_Name
value: FPSController
objectReference: {fileID: 0}
- target: {fileID: 4573967098094624396, guid: ca86112991f492f448b9242dfb373cbd, type: 3}
propertyPath: m_JumpSpeed
value: 5
objectReference: {fileID: 0}
- target: {fileID: 4573967098094624498, guid: ca86112991f492f448b9242dfb373cbd, type: 3}
propertyPath: m_RootOrder
value: 0
@@ -571,161 +508,8 @@ PrefabInstance:
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4573967099470554916, guid: ca86112991f492f448b9242dfb373cbd, type: 3}
propertyPath: m_HDR
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4573967099470554916, guid: ca86112991f492f448b9242dfb373cbd, type: 3}
propertyPath: m_AllowMSAA
value: 0
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: ca86112991f492f448b9242dfb373cbd, type: 3}
--- !u!1 &1791073986 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 4573967099470554938, guid: ca86112991f492f448b9242dfb373cbd, type: 3}
m_PrefabInstance: {fileID: 1791073985}
m_PrefabAsset: {fileID: 0}
--- !u!114 &1791073987
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1791073986}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 23c1ce4fb46143f46bc5cb5224c934f6, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Version: 7
m_ObsoleteRenderingPath: 0
m_ObsoleteFrameSettings:
overrides: 0
enableShadow: 0
enableContactShadows: 0
enableShadowMask: 0
enableSSR: 0
enableSSAO: 0
enableSubsurfaceScattering: 0
enableTransmission: 0
enableAtmosphericScattering: 0
enableVolumetrics: 0
enableReprojectionForVolumetrics: 0
enableLightLayers: 0
enableExposureControl: 1
diffuseGlobalDimmer: 0
specularGlobalDimmer: 0
shaderLitMode: 0
enableDepthPrepassWithDeferredRendering: 0
enableTransparentPrepass: 0
enableMotionVectors: 0
enableObjectMotionVectors: 0
enableDecals: 0
enableRoughRefraction: 0
enableTransparentPostpass: 0
enableDistortion: 0
enablePostprocess: 0
enableOpaqueObjects: 0
enableTransparentObjects: 0
enableRealtimePlanarReflection: 0
enableMSAA: 0
enableAsyncCompute: 0
runLightListAsync: 0
runSSRAsync: 0
runSSAOAsync: 0
runContactShadowsAsync: 0
runVolumeVoxelizationAsync: 0
lightLoopSettings:
overrides: 0
enableDeferredTileAndCluster: 0
enableComputeLightEvaluation: 0
enableComputeLightVariants: 0
enableComputeMaterialVariants: 0
enableFptlForForwardOpaque: 0
enableBigTilePrepass: 0
isFptlEnabled: 0
clearColorMode: 0
backgroundColorHDR: {r: 0.025, g: 0.07, b: 0.19, a: 0}
clearDepth: 1
volumeLayerMask:
serializedVersion: 2
m_Bits: 1
volumeAnchorOverride: {fileID: 0}
antialiasing: 0
SMAAQuality: 2
dithering: 0
stopNaNs: 0
taaSharpenStrength: 0.6
TAAQuality: 1
taaHistorySharpening: 0.35
taaAntiFlicker: 0.5
taaMotionVectorRejection: 0
taaAntiHistoryRinging: 0
physicalParameters:
m_Iso: 200
m_ShutterSpeed: 0.005
m_Aperture: 16
m_BladeCount: 5
m_Curvature: {x: 2, y: 11}
m_BarrelClipping: 0.25
m_Anamorphism: 0
flipYMode: 0
xrRendering: 1
fullscreenPassthrough: 0
allowDynamicResolution: 0
customRenderingSettings: 0
invertFaceCulling: 0
probeLayerMask:
serializedVersion: 2
m_Bits: 4294967295
hasPersistentHistory: 0
exposureTarget: {fileID: 0}
m_RenderingPathCustomFrameSettings:
bitDatas:
data1: 70300024700749
data2: 4539628425463136256
lodBias: 1
lodBiasMode: 0
lodBiasQualityLevel: 0
maximumLODLevel: 0
maximumLODLevelMode: 0
maximumLODLevelQualityLevel: 0
sssQualityMode: 0
sssQualityLevel: 0
sssCustomSampleBudget: 20
materialQuality: 0
renderingPathCustomFrameSettingsOverrideMask:
mask:
data1: 0
data2: 0
defaultFrameSettings: 0
--- !u!1 &1964356914 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 4573967098094624393, guid: ca86112991f492f448b9242dfb373cbd, type: 3}
m_PrefabInstance: {fileID: 1791073985}
m_PrefabAsset: {fileID: 0}
--- !u!114 &1964356915
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1964356914}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: de849660fe1ceb242a3431e8327c72af, type: 3}
m_Name:
m_EditorClassIdentifier:
inventorySlots: 36
isOnWater: 0
firstPersonController: {fileID: 0}
triggerDetector: {fileID: 0}
--- !u!4 &1964356920 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 4573967098094624498, guid: ca86112991f492f448b9242dfb373cbd, type: 3}
m_PrefabInstance: {fileID: 1791073985}
m_PrefabAsset: {fileID: 0}
--- !u!1 &2092671485
GameObject:
m_ObjectHideFlags: 1
+226 -2
View File
@@ -38,7 +38,7 @@ RenderSettings:
m_ReflectionIntensity: 1
m_CustomReflection: {fileID: 0}
m_Sun: {fileID: 0}
m_IndirectSpecularColor: {r: 2156.1572, g: 2260.3867, b: 3299.3516, a: 1}
m_IndirectSpecularColor: {r: 2161.1426, g: 2269.287, b: 3322.5312, a: 1}
m_UseRadianceAmbientProbe: 0
--- !u!157 &3
LightmapSettings:
@@ -219,6 +219,72 @@ MeshFilter:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 76730909}
m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0}
--- !u!1 &77350768
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 77350771}
- component: {fileID: 77350770}
- component: {fileID: 77350769}
m_Layer: 0
m_Name: EventSystem
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!114 &77350769
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 77350768}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3}
m_Name:
m_EditorClassIdentifier:
m_HorizontalAxis: Horizontal
m_VerticalAxis: Vertical
m_SubmitButton: Submit
m_CancelButton: Cancel
m_InputActionsPerSecond: 10
m_RepeatDelay: 0.5
m_ForceModuleActive: 0
--- !u!114 &77350770
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 77350768}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3}
m_Name:
m_EditorClassIdentifier:
m_FirstSelected: {fileID: 0}
m_sendNavigationEvents: 1
m_DragThreshold: 10
--- !u!4 &77350771
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 77350768}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 8
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &136659992
GameObject:
m_ObjectHideFlags: 0
@@ -675,6 +741,103 @@ MeshFilter:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 454871188}
m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0}
--- !u!1001 &518071539
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 6359582169700392598, guid: 8ec3b7e304d024247a1acea0b0a6ac3f, type: 3}
propertyPath: m_Pivot.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6359582169700392598, guid: 8ec3b7e304d024247a1acea0b0a6ac3f, type: 3}
propertyPath: m_Pivot.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6359582169700392598, guid: 8ec3b7e304d024247a1acea0b0a6ac3f, type: 3}
propertyPath: m_RootOrder
value: 6
objectReference: {fileID: 0}
- target: {fileID: 6359582169700392598, guid: 8ec3b7e304d024247a1acea0b0a6ac3f, type: 3}
propertyPath: m_AnchorMax.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6359582169700392598, guid: 8ec3b7e304d024247a1acea0b0a6ac3f, type: 3}
propertyPath: m_AnchorMax.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6359582169700392598, guid: 8ec3b7e304d024247a1acea0b0a6ac3f, type: 3}
propertyPath: m_AnchorMin.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6359582169700392598, guid: 8ec3b7e304d024247a1acea0b0a6ac3f, type: 3}
propertyPath: m_AnchorMin.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6359582169700392598, guid: 8ec3b7e304d024247a1acea0b0a6ac3f, type: 3}
propertyPath: m_SizeDelta.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6359582169700392598, guid: 8ec3b7e304d024247a1acea0b0a6ac3f, type: 3}
propertyPath: m_SizeDelta.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6359582169700392598, guid: 8ec3b7e304d024247a1acea0b0a6ac3f, type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6359582169700392598, guid: 8ec3b7e304d024247a1acea0b0a6ac3f, type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6359582169700392598, guid: 8ec3b7e304d024247a1acea0b0a6ac3f, type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6359582169700392598, guid: 8ec3b7e304d024247a1acea0b0a6ac3f, type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 6359582169700392598, guid: 8ec3b7e304d024247a1acea0b0a6ac3f, type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6359582169700392598, guid: 8ec3b7e304d024247a1acea0b0a6ac3f, type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6359582169700392598, guid: 8ec3b7e304d024247a1acea0b0a6ac3f, type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6359582169700392598, guid: 8ec3b7e304d024247a1acea0b0a6ac3f, type: 3}
propertyPath: m_AnchoredPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6359582169700392598, guid: 8ec3b7e304d024247a1acea0b0a6ac3f, type: 3}
propertyPath: m_AnchoredPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6359582169700392598, guid: 8ec3b7e304d024247a1acea0b0a6ac3f, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6359582169700392598, guid: 8ec3b7e304d024247a1acea0b0a6ac3f, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6359582169700392598, guid: 8ec3b7e304d024247a1acea0b0a6ac3f, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6359582169700392682, guid: 8ec3b7e304d024247a1acea0b0a6ac3f, type: 3}
propertyPath: m_Name
value: Canvas
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 8ec3b7e304d024247a1acea0b0a6ac3f, type: 3}
--- !u!1 &625603110
GameObject:
m_ObjectHideFlags: 0
@@ -720,6 +883,67 @@ Transform:
m_Father: {fileID: 0}
m_RootOrder: 5
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1001 &709979601
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 5696849023657060160, guid: f95b4ecb0498be44db5c16f2b6e58c74, type: 3}
propertyPath: playerPrefab
value:
objectReference: {fileID: 4573967098094624393, guid: ca86112991f492f448b9242dfb373cbd, type: 3}
- target: {fileID: 5696849023657060161, guid: f95b4ecb0498be44db5c16f2b6e58c74, type: 3}
propertyPath: m_RootOrder
value: 7
objectReference: {fileID: 0}
- target: {fileID: 5696849023657060161, guid: f95b4ecb0498be44db5c16f2b6e58c74, type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 5696849023657060161, guid: f95b4ecb0498be44db5c16f2b6e58c74, type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 5696849023657060161, guid: f95b4ecb0498be44db5c16f2b6e58c74, type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 5696849023657060161, guid: f95b4ecb0498be44db5c16f2b6e58c74, type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 5696849023657060161, guid: f95b4ecb0498be44db5c16f2b6e58c74, type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 5696849023657060161, guid: f95b4ecb0498be44db5c16f2b6e58c74, type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 5696849023657060161, guid: f95b4ecb0498be44db5c16f2b6e58c74, type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 5696849023657060161, guid: f95b4ecb0498be44db5c16f2b6e58c74, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 5696849023657060161, guid: f95b4ecb0498be44db5c16f2b6e58c74, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 5696849023657060161, guid: f95b4ecb0498be44db5c16f2b6e58c74, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 5696849023657060162, guid: f95b4ecb0498be44db5c16f2b6e58c74, type: 3}
propertyPath: m_Name
value: Server
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: f95b4ecb0498be44db5c16f2b6e58c74, type: 3}
--- !u!1 &790548551
GameObject:
m_ObjectHideFlags: 0
@@ -1027,7 +1251,7 @@ GameObject:
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
m_IsActive: 0
--- !u!81 &1823688465
AudioListener:
m_ObjectHideFlags: 0
+60 -7
View File
@@ -1,5 +1,6 @@
using UnityEngine;
using Brickcraft.UI;
using Brickcraft.World;
namespace Brickcraft
{
@@ -102,6 +103,13 @@ namespace Brickcraft
// ignore collisions with studs
if (other.name.StartsWith("GridStud")) {
return;
} else if (other.name.StartsWith("ChunkSlice")) {
/*
RaycastHit hit;
Physics.Raycast(transform.position, other.transform.position, out hit);
var pos = other.gameObject.GetComponent<Collider>().ClosestPointOnBounds(transform.position);
Debug.Log(other.transform.InverseTransformPoint(pos) + "-" + transform.InverseTransformPoint(pos));
*/
}
// prevent resetting those vars each frame
@@ -123,8 +131,14 @@ namespace Brickcraft
StudInfo stud = new StudInfo();
// get grid dimensions
string[] tmp = hit.collider.name.Replace("GridStud ", "").Replace("GridStudBottom ", "").Split('x');
stud.gridDimensions = new Vector2Int(int.Parse(tmp[0]), int.Parse(tmp[1]));
if (hit.collider.name.StartsWith("GridStud")) {
string[] tmp = hit.collider.name.Replace("GridStud ", "").Replace("GridStudBottom ", "").Split('x');
stud.gridDimensions = new Vector2Int(int.Parse(tmp[0]), int.Parse(tmp[1]));
} else {
// is looking at world stud
// so grid is a 16x16 (chunk slice) made by 2x2 bricks
stud.gridDimensions = new Vector2Int(Chunk.SliceHeight * 2, Chunk.SliceHeight * 2);
}
// 1x1 are easy xD
if (stud.gridDimensions.x == 1 && stud.gridDimensions.y == 1) {
@@ -132,7 +146,12 @@ namespace Brickcraft
}
// convert world coords to local ones
var localHitpoint = hit.collider.transform.InverseTransformPoint(hit.point);
Vector3 localHitpoint = hit.collider.transform.InverseTransformPoint(hit.point);
if (hit.collider.name.StartsWith("ChunkSlice")) { // chunkSlices have center wrongly set
Vector3 localCenter = hit.collider.transform.InverseTransformPoint(hit.collider.transform.GetComponent<Collider>().bounds.center);
localHitpoint -= localCenter;
}
// since localHitpoint is based on the center of the object, we need to sum half
// of it's size
@@ -157,6 +176,32 @@ namespace Brickcraft
return stud;
}
public bool isLookingAtWorldStud (RaycastHit hit) {
Vector3[] vertices = getTriangleVertices(hit.transform.GetComponent<MeshCollider>().sharedMesh, hit.triangleIndex);
Vector3Int equal = new Vector3Int(
vertices[0].x == vertices[1].x && vertices[1].x == vertices[2].x ? 1 : 0,
vertices[0].y == vertices[1].y && vertices[1].y == vertices[2].y ? 1 : 0,
vertices[0].z == vertices[1].z && vertices[1].z == vertices[2].z ? 1 : 0
);
// y is the same OR there are no equal values (round triangle) then we know that is top or bottom face
return vertices[0].y == vertices[1].y && vertices[1].y == vertices[2].y || equal == Vector3Int.zero;
}
Vector3[] getTriangleVertices(Mesh mesh, int triangleIndex) {
Vector3[] vertices = mesh.vertices;
int[] triangles = mesh.triangles;
Vector3[] output = new Vector3[3];
output[0] = vertices[triangles[triangleIndex * 3 + 0]];
output[1] = vertices[triangles[triangleIndex * 3 + 1]];
output[2] = vertices[triangles[triangleIndex * 3 + 2]];
return output;
}
public void lookingAtStud(RaycastHit hit) {
// player is not holding a brick
if (PlayerPanel.Instance.selectedItem == null || PlayerPanel.Instance.selectedItem.item.type != Item.Type.Brick) {
@@ -168,9 +213,8 @@ namespace Brickcraft
if (hit.transform == latestStudGrid && stud.gridPosition == latestStud) {
return;
}
GameObject brickObj = hit.collider.transform.parent.gameObject;
Quaternion rot = pivot.rotation; // kepp current rotation
Quaternion rot = pivot.rotation; // keep current rotation
// if old stud and new stud don't have the same rotation,
// pivot rotation will be invalid, so we reset it to new stud's rotation
@@ -182,15 +226,23 @@ namespace Brickcraft
latestStud = stud.gridPosition;
Vector3 studPos = hit.collider.transform.TransformPoint(stud.center);
// height needs to be corrected for bottom studs
if (hit.collider.name.Contains("Bottom")) {
studPos.y -= PlayerPanel.Instance.selectedItem.item.brickModel.heightInPlates * Server.plateHeight;
} else if (hit.collider.name.StartsWith("ChunkSlice")) { // chunkSlices have center wrongly set
Vector3 localCenter = hit.collider.transform.InverseTransformPoint(hit.collider.transform.GetComponent<Collider>().bounds.center);
studPos += localCenter;
studPos.y = hit.point.y;
studPos.y -= 0.089f; // supper ugly hack
}
currentStud = studPos;
if (!Server.bricks.ContainsKey(brickObj.name)) {
GameObject brickObj = hit.collider.transform.parent.gameObject;
if (!Server.bricks.ContainsKey(brickObj.name) && !hit.collider.name.StartsWith("ChunkSlice")) {
Debug.LogError("Brick not found in server list " + brickObj.name);
return;
}
@@ -216,6 +268,7 @@ namespace Brickcraft
pivot.position = pos;
pivot.rotation = rotation;
transform.localRotation = Quaternion.identity; // localy reset child rotation as it should always be identity
isColliding = false;
setValid(true);
lastPos = pos;
}
+12 -1
View File
@@ -42,6 +42,12 @@ namespace Brickcraft
private void Start() {
PlayerPanel.Instance.reload();
// temporal for testing
addItem(new UserItem() {
id = 1,
quantity = 100,
});
}
private void Update() {
@@ -68,7 +74,12 @@ namespace Brickcraft
//Debug.DrawRay(ray.origin, ray.direction * rayLength, Color.red);
if (Physics.Raycast(ray, out latestHit, rayLength)) {
if (latestHit.collider.name.StartsWith("GridStud")) {
if (latestHit.collider.name.StartsWith("ChunkSlice")) {
if (BrickCollisionDetector.Instance != null && BrickCollisionDetector.Instance.isLookingAtWorldStud(latestHit)) {
BrickCollisionDetector.Instance.lookingAtStud(latestHit);
}
lookedBrick = latestHit.transform.parent.gameObject;
} else if (latestHit.collider.name.StartsWith("GridStud")) {
if (BrickCollisionDetector.Instance != null) {
BrickCollisionDetector.Instance.lookingAtStud(latestHit);
}
+5
View File
@@ -83,6 +83,7 @@ namespace Brickcraft
public const float brickWidth = 0.796f; // 2x2
public GameObject[] prefabs;
public GameObject playerPrefab;
void Awake() {
Instance = this;
@@ -97,6 +98,10 @@ namespace Brickcraft
}
}
public void spawnPlayer () {
Instantiate(playerPrefab, new Vector3(0, 160, 0), Quaternion.identity);
}
void processPrefabs() {
foreach (var prefab in prefabs) {
brickPrefabs.Add(prefab.name, prefab);
+3
View File
@@ -11,6 +11,9 @@ public class CameraController : MonoBehaviour
}
void Update() {
if (!enabled) {
return;
}
movementSpeed = Mathf.Max(movementSpeed += Input.GetAxis("Mouse ScrollWheel"), 0.0f);
if (Input.GetAxis("Vertical") != 0) {
transform.Translate(Vector3.forward * movementSpeed * Input.GetAxis("Vertical"));
+13 -9
View File
@@ -46,7 +46,7 @@ namespace Brickcraft.World
{
ChunkObject = new GameObject(String.Format("X {0} Z {1}", X, Z));
ChunkObject.transform.position = new Vector3(X*16,0,Z*16);
ChunkObject.transform.position = new Vector3(X * 16, 0, Z * 16);
}
public void InitRenderableSlices()
@@ -64,6 +64,7 @@ namespace Brickcraft.World
meshRenderer.material.mainTexture = WorldBehaviour.AtlasTexture;
meshRenderer.sharedMaterial = WorldBehaviour.BlockMaterial;
newObject.AddComponent(typeof(MeshFilter));
newObject.AddComponent<MeshCollider>();
Vector3 pos = new Vector3(ChunkObject.transform.position.x, ChunkObject.transform.position.y + (i * Chunk.SliceHeight), ChunkObject.transform.position.z);
if (WorldBehaviour.mode == 3) {
@@ -376,12 +377,12 @@ namespace Brickcraft.World
public void RecalculateHeight()
{
LowestY = 255;
HeightMap = new byte[16, 16];
for (int x = 0; x < 16; x++)
{
for (int z = 0; z < 16; z++)
RecalculateHeight(x, z);
}
HeightMap = new byte[16, 16];
for (int x = 0; x < 16; x++)
{
for (int z = 0; z < 16; z++)
RecalculateHeight(x, z);
}
MinSliceIndex = (LowestY / Chunk.SliceHeight) - 1;
}
@@ -393,8 +394,8 @@ namespace Brickcraft.World
for (height = 127; height > 0 && (GetBlockType(x, height - 1, z) == 0 || (blockType = GetBlockType(x, height - 1, z)) == BlockType.Leaves || blockType == BlockType.Water || blockType == BlockType.Still_Water); height--) ;
HeightMap[x, z] = (byte)height;
if (height < LowestY)
LowestY = height;
if (height < LowestY)
LowestY = height;
}
public void ClearDirtySlices()
@@ -406,5 +407,8 @@ namespace Brickcraft.World
slice.ClearDirtyLight();
}
}
public static int CorrectBlockCoordinate(int axis) {
return axis >= 0 ? axis : (axis + Chunk.SliceHeight);
}
}
}
+10 -11
View File
@@ -53,18 +53,17 @@ namespace Brickcraft.World
genWait[i] = new ManualResetEvent(false);
ChunkGenThreadEntry chunkGenEntry = new ChunkGenThreadEntry(currStartX, currEndX, GenPool, (chunkGen, x) => {
int xComponent = (x + Math.Abs(fromChunkX)) * (toChunkX - fromChunkX);
for(int z = fromChunkX; z < toChunkX; ++z)
{
ushort index = WorldBehaviour.ChunkIndexFromCoords(x,z);
Chunk chunk = new Chunk(x,z, worldManager, (z + x) % 2 == 0? Color.black : Color.gray);
chunkGen.GenerateChunk(chunk, x, z);
int xComponent = (x + Math.Abs(fromChunkX)) * (toChunkX - fromChunkX);
for(int z = fromChunkX; z < toChunkX; ++z)
{
ushort index = WorldBehaviour.ChunkIndexFromCoords(x, z);
Chunk chunk = new Chunk(x,z, worldManager, (z + x) % 2 == 0 ? Color.black : Color.gray);
chunkGen.GenerateChunk(chunk, x, z);
int entryIndex = xComponent + (z + Math.Abs(fromChunkX));
chunkEntries[entryIndex] = new ChunkMeshThreadEntry(chunk);
WorldBehaviour.ChunksMap[index] = chunk;
}
int entryIndex = xComponent + (z + Math.Abs(fromChunkX));
chunkEntries[entryIndex] = new ChunkMeshThreadEntry(chunk);
WorldBehaviour.ChunksMap[index] = chunk;
}
});
ThreadPool.QueueUserWorkItem(new WaitCallback(chunkGenEntry.ThreadCallback), genWait[i]);
+23 -339
View File
@@ -504,6 +504,23 @@ namespace Brickcraft.World
throw new System.Exception("wrong face name: " + face);
}
// temporal | testing
Vector2 xt = new Vector2(0, 0);
Vector2 zt = new Vector2(0, 0);
foreach (Vector3 vertice in faceMap.vertices) {
if (vertice.x > xt.x) {
xt.x = vertice.x;
} else if (vertice.x < xt.y) {
xt.y = vertice.x;
}
if (vertice.z > zt.x) {
zt.x = vertice.z;
} else if (vertice.x < zt.y) {
zt.y = vertice.z;
}
}
foreach (Vector3 vertice in faceMap.vertices) {
Vector3 pos = new Vector3(
vertice.x + (x * Server.brickWidth),
@@ -512,7 +529,12 @@ namespace Brickcraft.World
);
vertices.Add(pos);
colors.Add(color);
uvs.Add(new Vector2(vertice.x, vertice.z));
if (face == "top" || face == "bottom") {
uvs.Add(new Vector2(xt.x, zt.x));
} else {
uvs.Add(new Vector2(xt.y, zt.y));
}
}
foreach (int index in faceMap.triangles) {
triangles.Add(index + vertexIndex);
@@ -530,343 +552,5 @@ namespace Brickcraft.World
meshes[block].Add(pos);
}
public void RenderSliceLight(ChunkSlice chunkSlice)
{
Chunk parentChunk = chunkSlice.ParentChunk;
MeshFilter meshFilter = parentChunk.ChunkSliceObjects[chunkSlice.Index].GetComponent<MeshFilter>();
if(meshFilter.mesh.vertexCount == 0)
{
chunkSlice.ClearDirtyLight();
return;
}
WorldBehaviour world = chunkSlice.ParentChunk.World;
int minHeight = parentChunk.MinSliceIndex == chunkSlice.Index ? (parentChunk.LowestY & Chunk.SliceHeightLimit) : 0;
colors.Clear();
vertices.Clear();
uvs.Clear();
triangles.Clear();
float epsilon = 0;
for (int x = 0; x < 16; x++)
{
for (int z = 0; z < 16; z++)
{
for (int y = Chunk.SliceHeight - 1; y >= 0 && y >= minHeight; --y)
{
byte block = chunkSlice[x, y, z];
int light = 0;
byte top;
if(block == 0)
continue;
if(y + 1 > Chunk.SliceHeightLimit)
{
if(chunkSlice.Index + 1 > Chunk.MaxSliceIndex)
top = 0;
else
{
int worldY = (chunkSlice.Index * ChunkSlice.SizeY) + (y + 1);
top = (byte)parentChunk.GetBlockType(x, worldY, z);
light = parentChunk.GetSkylight(x, worldY, z);
}
}
else
{
top = chunkSlice[x, y + 1, z];
light = chunkSlice.GetSkylight(x, y + 1, z);
}
// we are checking the top face of the block, so see if the top is exposed
if (top == 0)
{
int vertexIndex = vertices.Count;
vertices.Add(new Vector3(x, y + 1, z));
vertices.Add(new Vector3(x, y + 1, z + 1));
vertices.Add(new Vector3(x + 1, y + 1, z + 1));
vertices.Add(new Vector3(x + 1, y + 1, z));
triangles.Add(vertexIndex);
triangles.Add(vertexIndex+1);
triangles.Add(vertexIndex+2);
triangles.Add(vertexIndex+2);
triangles.Add(vertexIndex+3);
triangles.Add(vertexIndex);
float attenuation = (light / 15.0f);
Color withLight = new Color(topColor.r * attenuation, topColor.g * attenuation, topColor.b * attenuation, 1);
colors.Add(withLight);
colors.Add(withLight);
colors.Add(withLight);
colors.Add(withLight);
Rect coords = BlockUVs.GetUVFromTypeAndFace((BlockType)block, BlockFace.Top);
float yMax = coords.y + coords.height - epsilon;
float xMax = coords.x + coords.width - epsilon;
float xMin = coords.x + epsilon;
float yMin = coords.y + epsilon;
uvs.Add(new Vector2(xMin, yMax));
uvs.Add(new Vector2(xMin, yMin));
uvs.Add(new Vector2(xMax, yMin));
uvs.Add(new Vector2(xMax, yMax));
}
int front;
if(z - 1 < 0)
{
int worldX = (parentChunk.X << 4) + x;
int worldZ = (parentChunk.Z << 4) - 1;
int worldY = (chunkSlice.Index * ChunkSlice.SizeY) + y;
front = (byte)world.GetBlockType(worldX, worldY, worldZ);
}
else
front = chunkSlice[x, y, z - 1];
if (front == 0)
{
int vertexIndex = vertices.Count;
vertices.Add(new Vector3(x, y, z));
vertices.Add(new Vector3(x, y + 1, z));
vertices.Add(new Vector3(x + 1, y + 1, z));
vertices.Add(new Vector3(x + 1, y, z));
triangles.Add(vertexIndex);
triangles.Add(vertexIndex+1);
triangles.Add(vertexIndex+2);
triangles.Add(vertexIndex+2);
triangles.Add(vertexIndex+3);
triangles.Add(vertexIndex);
colors.Add(firstSideColor);
colors.Add(firstSideColor);
colors.Add(firstSideColor);
colors.Add(firstSideColor);
Rect coords = BlockUVs.GetUVFromTypeAndFace((BlockType)block, BlockFace.Side);
float yMax = coords.y + coords.height - epsilon;
float xMax = coords.x + coords.width - epsilon;
float xMin = coords.x + epsilon;
float yMin = coords.y + epsilon;
uvs.Add(new Vector2(xMin, yMin));
uvs.Add(new Vector2(xMin, yMax));
uvs.Add(new Vector2(xMax, yMax));
uvs.Add(new Vector2(xMax, yMin));
}
int right;
if(x + 1 > 15)
{
int worldX = (parentChunk.X << 4) + 16;
int worldZ = (parentChunk.Z << 4) + z;
int worldY = (chunkSlice.Index * ChunkSlice.SizeY) + y;
right = (byte)world.GetBlockType(worldX, worldY, worldZ);
}
else
right = chunkSlice[x + 1, y, z];
if (right == 0)
{
int vertexIndex = vertices.Count;
vertices.Add(new Vector3(x + 1, y, z));
vertices.Add(new Vector3(x + 1, y + 1, z));
vertices.Add(new Vector3(x + 1, y + 1, z + 1));
vertices.Add(new Vector3(x + 1, y, z + 1));
triangles.Add(vertexIndex);
triangles.Add(vertexIndex+1);
triangles.Add(vertexIndex+2);
triangles.Add(vertexIndex+2);
triangles.Add(vertexIndex+3);
triangles.Add(vertexIndex);
colors.Add(secondSideColor);
colors.Add(secondSideColor);
colors.Add(secondSideColor);
colors.Add(secondSideColor);
Rect coords = BlockUVs.GetUVFromTypeAndFace((BlockType)block, BlockFace.Side);
float yMax = coords.y + coords.height - epsilon;
float xMax = coords.x + coords.width - epsilon;
float xMin = coords.x + epsilon;
float yMin = coords.y + epsilon;
uvs.Add(new Vector2(xMin, yMin));
uvs.Add(new Vector2(xMin, yMax));
uvs.Add(new Vector2(xMax, yMax));
uvs.Add(new Vector2(xMax, yMin));
}
int back;
if(z + 1 > 15)
{
int worldX = (parentChunk.X << 4) + x;
int worldZ = (parentChunk.Z << 4) + 16;
int worldY = (chunkSlice.Index * ChunkSlice.SizeY) + y;
back = (byte)world.GetBlockType(worldX, worldY, worldZ);
}
else
back = chunkSlice[x, y, z + 1];
if (back == 0)
{
int vertexIndex = vertices.Count;
vertices.Add(new Vector3(x + 1, y, z + 1));
vertices.Add(new Vector3(x + 1, y + 1, z + 1));
vertices.Add(new Vector3(x, y + 1, z + 1));
vertices.Add(new Vector3(x, y, z + 1));
triangles.Add(vertexIndex);
triangles.Add(vertexIndex+1);
triangles.Add(vertexIndex+2);
triangles.Add(vertexIndex+2);
triangles.Add(vertexIndex+3);
triangles.Add(vertexIndex);
colors.Add(firstSideColor);
colors.Add(firstSideColor);
colors.Add(firstSideColor);
colors.Add(firstSideColor);
Rect coords = BlockUVs.GetUVFromTypeAndFace((BlockType)block, BlockFace.Side);
float yMax = coords.y + coords.height - epsilon;
float xMax = coords.x + coords.width - epsilon;
float xMin = coords.x + epsilon;
float yMin = coords.y + epsilon;
uvs.Add(new Vector2(xMin, yMin));
uvs.Add(new Vector2(xMin, yMax));
uvs.Add(new Vector2(xMax, yMax));
uvs.Add(new Vector2(xMax, yMin));
}
int left;
if(x - 1 < 0)
{
int worldX = (parentChunk.X << 4) - 1;
int worldZ = (parentChunk.Z << 4) + z;
int worldY = (chunkSlice.Index * ChunkSlice.SizeY) + y;
left = (byte)world.GetBlockType(worldX, worldY, worldZ);
}
else
left = chunkSlice[x - 1, y, z];
if (left == 0)
{
int vertexIndex = vertices.Count;
vertices.Add(new Vector3(x, y, z + 1));
vertices.Add(new Vector3(x, y + 1, z + 1));
vertices.Add(new Vector3(x, y + 1, z));
vertices.Add(new Vector3(x, y, z));
triangles.Add(vertexIndex);
triangles.Add(vertexIndex+1);
triangles.Add(vertexIndex+2);
triangles.Add(vertexIndex+2);
triangles.Add(vertexIndex+3);
triangles.Add(vertexIndex);
colors.Add(secondSideColor);
colors.Add(secondSideColor);
colors.Add(secondSideColor);
colors.Add(secondSideColor);
Rect coords = BlockUVs.GetUVFromTypeAndFace((BlockType)block, BlockFace.Side);
float yMax = coords.y + coords.height - epsilon;
float xMax = coords.x + coords.width - epsilon;
float xMin = coords.x + epsilon;
float yMin = coords.y + epsilon;
uvs.Add(new Vector2(xMin, yMin));
uvs.Add(new Vector2(xMin, yMax));
uvs.Add(new Vector2(xMax, yMax));
uvs.Add(new Vector2(xMax, yMin));
}
byte bottom;
if(y - 1 < 0)
bottom = 1;
else
bottom = chunkSlice[x, y - 1, z];
if (bottom == 0)
{
int vertexIndex = vertices.Count;
vertices.Add(new Vector3(x, y, z + 1));
vertices.Add(new Vector3(x, y, z));
vertices.Add(new Vector3(x + 1, y, z));
vertices.Add(new Vector3(x + 1, y, z + 1));
triangles.Add(vertexIndex);
triangles.Add(vertexIndex+1);
triangles.Add(vertexIndex+2);
triangles.Add(vertexIndex+2);
triangles.Add(vertexIndex+3);
triangles.Add(vertexIndex);
/*triangles.Add(vertexIndex);
triangles.Add(vertexIndex+1);
triangles.Add(vertexIndex+2);
triangles.Add(vertexIndex+3);*/
colors.Add(bottomColor);
colors.Add(bottomColor);
colors.Add(bottomColor);
colors.Add(bottomColor);
Rect coords = BlockUVs.GetUVFromTypeAndFace((BlockType)block, BlockFace.Bottom);
float yMax = coords.y + coords.height - epsilon;
float xMax = coords.x + coords.width - epsilon;
float xMin = coords.x + epsilon;
float yMin = coords.y + epsilon;
uvs.Add(new Vector2(xMin, yMin));
uvs.Add(new Vector2(xMin, yMax));
uvs.Add(new Vector2(xMax, yMax));
uvs.Add(new Vector2(xMax, yMin));
}
}
}
}
//meshFilter.mesh.Clear();
//meshFilter.mesh.vertices = vertices.ToArray();
if(colors.Count != meshFilter.mesh.vertices.Length)
UnityEngine.Debug.Log("vertices: " + meshFilter.mesh.vertices.Length + " colors: " + colors.Count);
//meshFilter.mesh.triangles = triangles.ToArray();
//meshFilter.mesh.uv = uvs.ToArray();
meshFilter.mesh.colors = colors.ToArray();
chunkSlice.ClearDirtyLight();
}
}
}
+1 -1
View File
@@ -12,7 +12,7 @@ namespace Brickcraft.World
public static readonly short TotalBlockNumber = (short)(SizeX * SizeY * SizeZ);
private byte[] _Types = new byte[SizeX*SizeY*SizeZ];
private byte[] _Types = new byte[SizeX * SizeY * SizeZ];
private NibbleArray _Skylight = new NibbleArray(TotalBlockNumber / 2);
private short solidBlocks;
+52 -46
View File
@@ -60,9 +60,6 @@ namespace Brickcraft.World
Debug.Log("Terrain texture not loaded");
}
GameObject camera = Camera.main.gameObject;
camera.transform.position = new Vector3(0,160,0);
ChunkMeshThreadEntry[] chunkEntries = new ChunkMeshThreadEntry[ChunksNum];
ChunkGenManager chunkGenManager = new ChunkGenManager(MapMinChunkX, MapMaxChunkX + 1, 6, this, 13284938921, chunkEntries);
@@ -84,51 +81,24 @@ namespace Brickcraft.World
{
return (ushort)((x + 127) << 8 | (z + 127));
}
private void CalculateStartLight()
{
for(int x = MapMinChunkX; x < MapMaxChunkX + 1; ++x)
{
for(int z = MapMinChunkX; z < MapMaxChunkX + 1; ++z)
{
Chunk chunk = ChunksMap[ChunkIndexFromCoords(x,z)];
chunk.RecalculateSkyLight();
}
}
}
private void CalculateTestLight()
{
for(int x = MapMinChunkX; x < MapMaxChunkX; ++x)
{
for(int z = MapMinChunkX; z < MapMaxChunkX; ++z)
{
Chunk chunk = ChunksMap[ChunkIndexFromCoords(x,z)];
chunk.RecalculateTestSkyLight();
}
}
}
void Update () {
/*
foreach (Chunk chunk in ChunksMap) {
if (chunk == null) {
continue;
}
foreach (ChunkSlice slice in chunk.Slices) {
if (slice.IsEmpty) {
/*
void Update () {
foreach (Chunk chunk in ChunksMap) {
if (chunk == null) {
continue;
}
slice.FrustrumCulling();
foreach (ChunkSlice slice in chunk.Slices) {
if (slice.IsEmpty) {
continue;
}
slice.FrustrumCulling();
}
}
}*/
if (Input.GetKeyUp(KeyCode.Escape))
Application.Quit();
else if(Input.GetKeyUp(KeyCode.L))
CalculateTestLight();
}
}
*/
void FixedUpdate()
{
++accumulator;
@@ -146,6 +116,10 @@ namespace Brickcraft.World
{
ChunkSliceBuildEntry chunkEntry = ChunkSlicesWorkingQueue.Dequeue();
BuildChunkSliceMesh(chunkEntry);
if (ChunkSlicesWorkingQueue.Count == 0) {
Server.Instance.spawnPlayer();
}
}
lock(SliceLock)
@@ -247,6 +221,7 @@ namespace Brickcraft.World
mesh.RecalculateBounds();
filter.mesh = mesh;
chunkSliceObject.GetComponent<MeshCollider>().sharedMesh = mesh;
}
chunkEntry.ParentChunk.ClearDirtySlices();
}
@@ -266,7 +241,38 @@ namespace Brickcraft.World
public Chunk GetChunk(int x, int z)
{
return ChunksMap[ChunkIndexFromCoords(x,z)];
return ChunksMap[ChunkIndexFromCoords(x, z)];
}
public static Chunk WorldCoordinateToChunk(Vector3 coordinates) {
coordinates /= Chunk.SliceHeight;
return ChunksMap[ChunkIndexFromCoords(Mathf.RoundToInt(coordinates.x), Mathf.RoundToInt(coordinates.z))];
}
public static BlockType WorldCoordinateToBlock(Vector3 coordinates) {
Chunk chunk = WorldCoordinateToChunk(coordinates);
coordinates /= Chunk.SliceHeight;
if (chunk == null) {
return BlockType.NULL; // We return NULL so that is different from air and we don't build side faces of the blocks
}
return chunk.GetBlockType(Mathf.RoundToInt(coordinates.x) & 0xF, Mathf.RoundToInt(coordinates.y), Mathf.RoundToInt(coordinates.z) & 0xF);
/*
return new Vector3Int(
Chunk.CorrectBlockCoordinate(Mathf.RoundToInt(coordinates.x % Chunk.SliceHeight)),
Chunk.CorrectBlockCoordinate(Mathf.RoundToInt(coordinates.y % Chunk.SliceHeight)),
Chunk.CorrectBlockCoordinate(Mathf.RoundToInt(coordinates.z % Chunk.SliceHeight))
);*/
}
public static Vector3 WorldCoordinateToBlockCoordinate(Vector3 coordinates) {
return new Vector3(
Mathf.RoundToInt(coordinates.x) * Server.brickWidth,
Mathf.RoundToInt(coordinates.y) * Server.brickHeight,
Mathf.RoundToInt(coordinates.z) * Server.brickWidth
);
}
}
}