diff --git a/.claude/settings.local.json b/.claude/settings.local.json
new file mode 100644
index 0000000..d0df7d3
--- /dev/null
+++ b/.claude/settings.local.json
@@ -0,0 +1,7 @@
+{
+ "permissions": {
+ "allow": [
+ "Bash(tree:*)"
+ ]
+ }
+}
diff --git a/Assembly-CSharp.csproj b/Assembly-CSharp.csproj
index ea95f45..8250869 100644
--- a/Assembly-CSharp.csproj
+++ b/Assembly-CSharp.csproj
@@ -49,9 +49,14 @@
+
+
+
+
+
diff --git a/Assets/Data/BuildingData.asset b/Assets/Data/BuildingData.asset
new file mode 100644
index 0000000..884cb97
--- /dev/null
+++ b/Assets/Data/BuildingData.asset
@@ -0,0 +1,21 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 937e64980d44d6b46acb35b8046adf34, type: 3}
+ m_Name: BuildingData
+ m_EditorClassIdentifier: Assembly-CSharp::Northbound.BuildingData
+ buildingName: BaseTower
+ prefab: {fileID: 3733880183385667081, guid: 1979909431408184b9bc587877c5b4b4, type: 3}
+ width: 1
+ length: 1
+ height: 2
+ placementOffset: {x: 0, y: 0, z: 0}
+ allowRotation: 1
diff --git a/Assets/Data/BuildingData.asset.meta b/Assets/Data/BuildingData.asset.meta
new file mode 100644
index 0000000..b0fb6a5
--- /dev/null
+++ b/Assets/Data/BuildingData.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 23c12a82ea534b34299700b86fffd524
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 11400000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/DefaultNetworkPrefabs.asset b/Assets/DefaultNetworkPrefabs.asset
index a2f6956..8416bd1 100644
--- a/Assets/DefaultNetworkPrefabs.asset
+++ b/Assets/DefaultNetworkPrefabs.asset
@@ -19,3 +19,8 @@ MonoBehaviour:
SourcePrefabToOverride: {fileID: 0}
SourceHashToOverride: 0
OverridingTargetPrefab: {fileID: 0}
+ - Override: 0
+ Prefab: {fileID: 3733880183385667081, guid: 1979909431408184b9bc587877c5b4b4, type: 3}
+ SourcePrefabToOverride: {fileID: 0}
+ SourceHashToOverride: 0
+ OverridingTargetPrefab: {fileID: 0}
diff --git a/Assets/External/Kaykit Medieval Hexagon.meta b/Assets/External/Kaykit Medieval Hexagon.meta
new file mode 100644
index 0000000..8efbbc5
--- /dev/null
+++ b/Assets/External/Kaykit Medieval Hexagon.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 0044b1ec7ed91e247adf7a75ec05aeb6
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings.meta b/Assets/External/Kaykit Medieval Hexagon/Buildings.meta
new file mode 100644
index 0000000..afdf5dd
--- /dev/null
+++ b/Assets/External/Kaykit Medieval Hexagon/Buildings.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: d2270266c7faaff4b95c7602e83df5df
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/blue.meta b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue.meta
new file mode 100644
index 0000000..7cbf6ee
--- /dev/null
+++ b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: a556af67ccb51dd469c7083df37c2802
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_archeryrange_blue.fbx b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_archeryrange_blue.fbx
new file mode 100644
index 0000000..8f4b8d1
Binary files /dev/null and b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_archeryrange_blue.fbx differ
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_archeryrange_blue.fbx.meta b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_archeryrange_blue.fbx.meta
new file mode 100644
index 0000000..10b1f23
--- /dev/null
+++ b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_archeryrange_blue.fbx.meta
@@ -0,0 +1,110 @@
+fileFormatVersion: 2
+guid: f911fb7b59d4e0c44b75d7b9517d7611
+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:
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_barracks_blue.fbx b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_barracks_blue.fbx
new file mode 100644
index 0000000..c7f1f7a
Binary files /dev/null and b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_barracks_blue.fbx differ
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_barracks_blue.fbx.meta b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_barracks_blue.fbx.meta
new file mode 100644
index 0000000..8e12c28
--- /dev/null
+++ b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_barracks_blue.fbx.meta
@@ -0,0 +1,110 @@
+fileFormatVersion: 2
+guid: 541b41b312c58644885ec05deac3e6ca
+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:
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_blacksmith_blue.fbx b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_blacksmith_blue.fbx
new file mode 100644
index 0000000..5f54479
Binary files /dev/null and b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_blacksmith_blue.fbx differ
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_blacksmith_blue.fbx.meta b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_blacksmith_blue.fbx.meta
new file mode 100644
index 0000000..9714611
--- /dev/null
+++ b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_blacksmith_blue.fbx.meta
@@ -0,0 +1,110 @@
+fileFormatVersion: 2
+guid: 8a9efd5c4c2231648949840ad6529f58
+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:
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_castle_blue.fbx b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_castle_blue.fbx
new file mode 100644
index 0000000..bb0f21e
Binary files /dev/null and b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_castle_blue.fbx differ
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_castle_blue.fbx.meta b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_castle_blue.fbx.meta
new file mode 100644
index 0000000..872a2ef
--- /dev/null
+++ b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_castle_blue.fbx.meta
@@ -0,0 +1,110 @@
+fileFormatVersion: 2
+guid: 0402c4b1e07c04444b61bea1d63d7880
+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:
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_church_blue.fbx b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_church_blue.fbx
new file mode 100644
index 0000000..a85e9be
Binary files /dev/null and b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_church_blue.fbx differ
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_church_blue.fbx.meta b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_church_blue.fbx.meta
new file mode 100644
index 0000000..5c30ca7
--- /dev/null
+++ b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_church_blue.fbx.meta
@@ -0,0 +1,110 @@
+fileFormatVersion: 2
+guid: a81605b662cbe434797c3a36df552acd
+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:
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_home_A_blue.fbx b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_home_A_blue.fbx
new file mode 100644
index 0000000..671f12e
Binary files /dev/null and b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_home_A_blue.fbx differ
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_home_A_blue.fbx.meta b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_home_A_blue.fbx.meta
new file mode 100644
index 0000000..13981a9
--- /dev/null
+++ b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_home_A_blue.fbx.meta
@@ -0,0 +1,110 @@
+fileFormatVersion: 2
+guid: 34f30443ae6b90c479bcd207cebedc98
+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:
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_home_B_blue.fbx b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_home_B_blue.fbx
new file mode 100644
index 0000000..1f157d9
Binary files /dev/null and b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_home_B_blue.fbx differ
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_home_B_blue.fbx.meta b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_home_B_blue.fbx.meta
new file mode 100644
index 0000000..66b2d0d
--- /dev/null
+++ b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_home_B_blue.fbx.meta
@@ -0,0 +1,110 @@
+fileFormatVersion: 2
+guid: 6a3eaa66f0b05be4296ca6d64ef1adb1
+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:
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_lumbermill_blue.fbx b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_lumbermill_blue.fbx
new file mode 100644
index 0000000..8e838b2
Binary files /dev/null and b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_lumbermill_blue.fbx differ
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_lumbermill_blue.fbx.meta b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_lumbermill_blue.fbx.meta
new file mode 100644
index 0000000..979ca41
--- /dev/null
+++ b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_lumbermill_blue.fbx.meta
@@ -0,0 +1,110 @@
+fileFormatVersion: 2
+guid: 4bace94893b4e5c4eb57ce2c732419ef
+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:
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_market_blue.fbx b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_market_blue.fbx
new file mode 100644
index 0000000..0d29467
Binary files /dev/null and b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_market_blue.fbx differ
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_market_blue.fbx.meta b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_market_blue.fbx.meta
new file mode 100644
index 0000000..3ed03d4
--- /dev/null
+++ b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_market_blue.fbx.meta
@@ -0,0 +1,110 @@
+fileFormatVersion: 2
+guid: 6f010940e14d29946acdf47f3c558dad
+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:
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_mine_blue.fbx b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_mine_blue.fbx
new file mode 100644
index 0000000..0af0b06
Binary files /dev/null and b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_mine_blue.fbx differ
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_mine_blue.fbx.meta b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_mine_blue.fbx.meta
new file mode 100644
index 0000000..66680ec
--- /dev/null
+++ b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_mine_blue.fbx.meta
@@ -0,0 +1,110 @@
+fileFormatVersion: 2
+guid: a58786a28a2fd2b40b9df4d8592ce2b8
+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:
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_tavern_blue.fbx b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_tavern_blue.fbx
new file mode 100644
index 0000000..c051023
Binary files /dev/null and b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_tavern_blue.fbx differ
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_tavern_blue.fbx.meta b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_tavern_blue.fbx.meta
new file mode 100644
index 0000000..68b9dec
--- /dev/null
+++ b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_tavern_blue.fbx.meta
@@ -0,0 +1,110 @@
+fileFormatVersion: 2
+guid: c42ac98a221bd71439652dafd5440549
+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:
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_tower_A_blue.fbx b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_tower_A_blue.fbx
new file mode 100644
index 0000000..0982035
Binary files /dev/null and b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_tower_A_blue.fbx differ
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_tower_A_blue.fbx.meta b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_tower_A_blue.fbx.meta
new file mode 100644
index 0000000..8c3b8f7
--- /dev/null
+++ b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_tower_A_blue.fbx.meta
@@ -0,0 +1,110 @@
+fileFormatVersion: 2
+guid: 128035a3339ed60429405f26baf23be7
+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:
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_tower_B_blue.fbx b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_tower_B_blue.fbx
new file mode 100644
index 0000000..f067591
Binary files /dev/null and b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_tower_B_blue.fbx differ
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_tower_B_blue.fbx.meta b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_tower_B_blue.fbx.meta
new file mode 100644
index 0000000..3056ad2
--- /dev/null
+++ b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_tower_B_blue.fbx.meta
@@ -0,0 +1,110 @@
+fileFormatVersion: 2
+guid: f500e63426996224a921c2d25ba7d8e1
+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:
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_tower_base_blue.fbx b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_tower_base_blue.fbx
new file mode 100644
index 0000000..95df01d
Binary files /dev/null and b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_tower_base_blue.fbx differ
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_tower_base_blue.fbx.meta b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_tower_base_blue.fbx.meta
new file mode 100644
index 0000000..5bb086b
--- /dev/null
+++ b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_tower_base_blue.fbx.meta
@@ -0,0 +1,110 @@
+fileFormatVersion: 2
+guid: 9925587cfc99e8148bfab9d8b22d9f87
+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:
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_tower_catapult_blue.fbx b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_tower_catapult_blue.fbx
new file mode 100644
index 0000000..cc89f80
Binary files /dev/null and b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_tower_catapult_blue.fbx differ
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_tower_catapult_blue.fbx.meta b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_tower_catapult_blue.fbx.meta
new file mode 100644
index 0000000..8eb032f
--- /dev/null
+++ b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_tower_catapult_blue.fbx.meta
@@ -0,0 +1,110 @@
+fileFormatVersion: 2
+guid: 44f1bfa31a734db41aa05bad7e3848e0
+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:
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_watermill_blue.fbx b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_watermill_blue.fbx
new file mode 100644
index 0000000..39e6b25
Binary files /dev/null and b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_watermill_blue.fbx differ
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_watermill_blue.fbx.meta b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_watermill_blue.fbx.meta
new file mode 100644
index 0000000..80e4c4d
--- /dev/null
+++ b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_watermill_blue.fbx.meta
@@ -0,0 +1,110 @@
+fileFormatVersion: 2
+guid: 42a0a711fe55cbb47957f3fd5bc58f5b
+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:
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_well_blue.fbx b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_well_blue.fbx
new file mode 100644
index 0000000..1a3dddd
Binary files /dev/null and b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_well_blue.fbx differ
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_well_blue.fbx.meta b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_well_blue.fbx.meta
new file mode 100644
index 0000000..665243b
--- /dev/null
+++ b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_well_blue.fbx.meta
@@ -0,0 +1,110 @@
+fileFormatVersion: 2
+guid: 57ffacd9359c6354982488a260877465
+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:
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_windmill_blue.fbx b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_windmill_blue.fbx
new file mode 100644
index 0000000..0f5f737
Binary files /dev/null and b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_windmill_blue.fbx differ
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_windmill_blue.fbx.meta b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_windmill_blue.fbx.meta
new file mode 100644
index 0000000..3114e04
--- /dev/null
+++ b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/building_windmill_blue.fbx.meta
@@ -0,0 +1,110 @@
+fileFormatVersion: 2
+guid: 76d2fc886520a194f897149741d80cab
+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:
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/hexagons_medieval.png b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/hexagons_medieval.png
new file mode 100644
index 0000000..14cdc25
Binary files /dev/null and b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/hexagons_medieval.png differ
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/hexagons_medieval.png.meta b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/hexagons_medieval.png.meta
new file mode 100644
index 0000000..1268206
--- /dev/null
+++ b/Assets/External/Kaykit Medieval Hexagon/Buildings/blue/hexagons_medieval.png.meta
@@ -0,0 +1,156 @@
+fileFormatVersion: 2
+guid: b9dd7682e7a0a6041b2590e464add09c
+TextureImporter:
+ internalIDToNameTable:
+ - first:
+ 213: 4348085514693947249
+ second: hexagons_medieval_0
+ externalObjects: {}
+ serializedVersion: 13
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ 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: 1
+ wrapV: 1
+ wrapW: 1
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 2
+ 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: 1
+ spriteTessellationDetail: -1
+ textureType: 8
+ 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
+ - serializedVersion: 4
+ buildTarget: WebGL
+ 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:
+ - serializedVersion: 2
+ name: hexagons_medieval_0
+ rect:
+ serializedVersion: 2
+ x: 0
+ y: 0
+ width: 1024
+ height: 1024
+ alignment: 0
+ pivot: {x: 0, y: 0}
+ border: {x: 0, y: 0, z: 0, w: 0}
+ customData:
+ outline: []
+ physicsShape: []
+ tessellationDetail: -1
+ bones: []
+ spriteID: 17faa5c0db0875c30800000000000000
+ internalID: 4348085514693947249
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ outline: []
+ customData:
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spriteCustomMetadata:
+ entries: []
+ nameFileIdTable:
+ hexagons_medieval_0: 4348085514693947249
+ mipmapLimitGroupName:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/red.meta b/Assets/External/Kaykit Medieval Hexagon/Buildings/red.meta
new file mode 100644
index 0000000..6032bf1
--- /dev/null
+++ b/Assets/External/Kaykit Medieval Hexagon/Buildings/red.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 4b457d9018e20c640b9aead660b1a2f4
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_archeryrange_red.fbx b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_archeryrange_red.fbx
new file mode 100644
index 0000000..d55a645
Binary files /dev/null and b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_archeryrange_red.fbx differ
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_archeryrange_red.fbx.meta b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_archeryrange_red.fbx.meta
new file mode 100644
index 0000000..4a0a7f9
--- /dev/null
+++ b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_archeryrange_red.fbx.meta
@@ -0,0 +1,110 @@
+fileFormatVersion: 2
+guid: ad5e6a006d76fe64ebc3d3ea81c2676e
+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:
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_barracks_red.fbx b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_barracks_red.fbx
new file mode 100644
index 0000000..2996a16
Binary files /dev/null and b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_barracks_red.fbx differ
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_barracks_red.fbx.meta b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_barracks_red.fbx.meta
new file mode 100644
index 0000000..021c2d8
--- /dev/null
+++ b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_barracks_red.fbx.meta
@@ -0,0 +1,110 @@
+fileFormatVersion: 2
+guid: 67a3d1e5fa007d0429fc2d007ba0df18
+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:
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_blacksmith_red.fbx b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_blacksmith_red.fbx
new file mode 100644
index 0000000..2aabebf
Binary files /dev/null and b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_blacksmith_red.fbx differ
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_blacksmith_red.fbx.meta b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_blacksmith_red.fbx.meta
new file mode 100644
index 0000000..07bce7c
--- /dev/null
+++ b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_blacksmith_red.fbx.meta
@@ -0,0 +1,110 @@
+fileFormatVersion: 2
+guid: 00bd6ef0e9898694a9c3c2b2e97ad08a
+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:
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_castle_red.fbx b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_castle_red.fbx
new file mode 100644
index 0000000..afaa9df
Binary files /dev/null and b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_castle_red.fbx differ
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_castle_red.fbx.meta b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_castle_red.fbx.meta
new file mode 100644
index 0000000..cbdf2d0
--- /dev/null
+++ b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_castle_red.fbx.meta
@@ -0,0 +1,110 @@
+fileFormatVersion: 2
+guid: abbef665d6427ce4894f50211167e122
+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:
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_church_red.fbx b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_church_red.fbx
new file mode 100644
index 0000000..4df7ad6
Binary files /dev/null and b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_church_red.fbx differ
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_church_red.fbx.meta b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_church_red.fbx.meta
new file mode 100644
index 0000000..83fbdfd
--- /dev/null
+++ b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_church_red.fbx.meta
@@ -0,0 +1,110 @@
+fileFormatVersion: 2
+guid: 83339876c201d114abb89b3ac8694bcc
+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:
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_home_A_red.fbx b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_home_A_red.fbx
new file mode 100644
index 0000000..cd6854a
Binary files /dev/null and b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_home_A_red.fbx differ
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_home_A_red.fbx.meta b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_home_A_red.fbx.meta
new file mode 100644
index 0000000..52e84c2
--- /dev/null
+++ b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_home_A_red.fbx.meta
@@ -0,0 +1,110 @@
+fileFormatVersion: 2
+guid: 48ec7b33c6c259946b04ad301626728a
+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:
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_home_B_red.fbx b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_home_B_red.fbx
new file mode 100644
index 0000000..2115030
Binary files /dev/null and b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_home_B_red.fbx differ
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_home_B_red.fbx.meta b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_home_B_red.fbx.meta
new file mode 100644
index 0000000..69783df
--- /dev/null
+++ b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_home_B_red.fbx.meta
@@ -0,0 +1,110 @@
+fileFormatVersion: 2
+guid: 76d058a3106e2b645beb7f796e853d81
+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:
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_lumbermill_red.fbx b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_lumbermill_red.fbx
new file mode 100644
index 0000000..27277e5
Binary files /dev/null and b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_lumbermill_red.fbx differ
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_lumbermill_red.fbx.meta b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_lumbermill_red.fbx.meta
new file mode 100644
index 0000000..5dd7479
--- /dev/null
+++ b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_lumbermill_red.fbx.meta
@@ -0,0 +1,110 @@
+fileFormatVersion: 2
+guid: 18bfa43615c2b25459c085e2bc6698f9
+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:
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_market_red.fbx b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_market_red.fbx
new file mode 100644
index 0000000..4aebad3
Binary files /dev/null and b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_market_red.fbx differ
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_market_red.fbx.meta b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_market_red.fbx.meta
new file mode 100644
index 0000000..6ea3af7
--- /dev/null
+++ b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_market_red.fbx.meta
@@ -0,0 +1,110 @@
+fileFormatVersion: 2
+guid: c61cbb57590aae14b8373f88e60e6006
+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:
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_mine_red.fbx b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_mine_red.fbx
new file mode 100644
index 0000000..28caf68
Binary files /dev/null and b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_mine_red.fbx differ
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_mine_red.fbx.meta b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_mine_red.fbx.meta
new file mode 100644
index 0000000..5162915
--- /dev/null
+++ b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_mine_red.fbx.meta
@@ -0,0 +1,110 @@
+fileFormatVersion: 2
+guid: 5b74918579d10714eb1153a3011946d8
+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:
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_tavern_red.fbx b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_tavern_red.fbx
new file mode 100644
index 0000000..b473b16
Binary files /dev/null and b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_tavern_red.fbx differ
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_tavern_red.fbx.meta b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_tavern_red.fbx.meta
new file mode 100644
index 0000000..54642f7
--- /dev/null
+++ b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_tavern_red.fbx.meta
@@ -0,0 +1,110 @@
+fileFormatVersion: 2
+guid: 5e05da3c4224a7d4b806f6f378db26ec
+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:
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_tower_A_red.fbx b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_tower_A_red.fbx
new file mode 100644
index 0000000..361fe67
Binary files /dev/null and b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_tower_A_red.fbx differ
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_tower_A_red.fbx.meta b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_tower_A_red.fbx.meta
new file mode 100644
index 0000000..c84495d
--- /dev/null
+++ b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_tower_A_red.fbx.meta
@@ -0,0 +1,110 @@
+fileFormatVersion: 2
+guid: 74d02ea245408b74a9e4412a148edfbe
+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:
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_tower_B_red.fbx b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_tower_B_red.fbx
new file mode 100644
index 0000000..b7d1f34
Binary files /dev/null and b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_tower_B_red.fbx differ
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_tower_B_red.fbx.meta b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_tower_B_red.fbx.meta
new file mode 100644
index 0000000..19a3646
--- /dev/null
+++ b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_tower_B_red.fbx.meta
@@ -0,0 +1,110 @@
+fileFormatVersion: 2
+guid: c065aab924928e8498f741cc90ea5738
+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:
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_tower_base_red.fbx b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_tower_base_red.fbx
new file mode 100644
index 0000000..ab93668
Binary files /dev/null and b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_tower_base_red.fbx differ
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_tower_base_red.fbx.meta b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_tower_base_red.fbx.meta
new file mode 100644
index 0000000..5ce1910
--- /dev/null
+++ b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_tower_base_red.fbx.meta
@@ -0,0 +1,110 @@
+fileFormatVersion: 2
+guid: bd707599c4fa401488906c4e4699669c
+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:
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_tower_catapult_red.fbx b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_tower_catapult_red.fbx
new file mode 100644
index 0000000..b9d5b86
Binary files /dev/null and b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_tower_catapult_red.fbx differ
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_tower_catapult_red.fbx.meta b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_tower_catapult_red.fbx.meta
new file mode 100644
index 0000000..9033dcf
--- /dev/null
+++ b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_tower_catapult_red.fbx.meta
@@ -0,0 +1,110 @@
+fileFormatVersion: 2
+guid: 4dca2b6c7e536ea48be7bc57574a6322
+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:
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_watermill_red.fbx b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_watermill_red.fbx
new file mode 100644
index 0000000..5fca96f
Binary files /dev/null and b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_watermill_red.fbx differ
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_watermill_red.fbx.meta b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_watermill_red.fbx.meta
new file mode 100644
index 0000000..f63001a
--- /dev/null
+++ b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_watermill_red.fbx.meta
@@ -0,0 +1,110 @@
+fileFormatVersion: 2
+guid: 594059e2cd2aea44680a3f851b0e79cf
+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:
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_well_red.fbx b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_well_red.fbx
new file mode 100644
index 0000000..7f05e68
Binary files /dev/null and b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_well_red.fbx differ
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_well_red.fbx.meta b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_well_red.fbx.meta
new file mode 100644
index 0000000..d20aa95
--- /dev/null
+++ b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_well_red.fbx.meta
@@ -0,0 +1,110 @@
+fileFormatVersion: 2
+guid: 9771c129bb679d540b3614dd30390cc4
+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:
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_windmill_red.fbx b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_windmill_red.fbx
new file mode 100644
index 0000000..18ba036
Binary files /dev/null and b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_windmill_red.fbx differ
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_windmill_red.fbx.meta b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_windmill_red.fbx.meta
new file mode 100644
index 0000000..3dbe742
--- /dev/null
+++ b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/building_windmill_red.fbx.meta
@@ -0,0 +1,110 @@
+fileFormatVersion: 2
+guid: fda06709816b28743b6e3fda1ad7ec4c
+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:
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/red/hexagons_medieval.png b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/hexagons_medieval.png
new file mode 100644
index 0000000..14cdc25
Binary files /dev/null and b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/hexagons_medieval.png differ
diff --git a/Assets/External/Kaykit Medieval Hexagon/Buildings/red/hexagons_medieval.png.meta b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/hexagons_medieval.png.meta
new file mode 100644
index 0000000..0237d38
--- /dev/null
+++ b/Assets/External/Kaykit Medieval Hexagon/Buildings/red/hexagons_medieval.png.meta
@@ -0,0 +1,156 @@
+fileFormatVersion: 2
+guid: b32d1c3ba5ced9f438efa644418c73c3
+TextureImporter:
+ internalIDToNameTable:
+ - first:
+ 213: 4348085514693947249
+ second: hexagons_medieval_0
+ externalObjects: {}
+ serializedVersion: 13
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ 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: 1
+ wrapV: 1
+ wrapW: 1
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 2
+ 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: 1
+ spriteTessellationDetail: -1
+ textureType: 8
+ 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
+ - serializedVersion: 4
+ buildTarget: WebGL
+ 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:
+ - serializedVersion: 2
+ name: hexagons_medieval_0
+ rect:
+ serializedVersion: 2
+ x: 0
+ y: 0
+ width: 1024
+ height: 1024
+ alignment: 0
+ pivot: {x: 0, y: 0}
+ border: {x: 0, y: 0, z: 0, w: 0}
+ customData:
+ outline: []
+ physicsShape: []
+ tessellationDetail: -1
+ bones: []
+ spriteID: 17faa5c0db0875c30800000000000000
+ internalID: 4348085514693947249
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ outline: []
+ customData:
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spriteCustomMetadata:
+ entries: []
+ nameFileIdTable:
+ hexagons_medieval_0: 4348085514693947249
+ mipmapLimitGroupName:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/External/Kaykit Medieval Hexagon/Textures.meta b/Assets/External/Kaykit Medieval Hexagon/Textures.meta
new file mode 100644
index 0000000..e9e002f
--- /dev/null
+++ b/Assets/External/Kaykit Medieval Hexagon/Textures.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 2a545bb9b0ff5e444b6a0245afb68fa0
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/External/Kaykit Medieval Hexagon/Textures/hexagons_medieval.png b/Assets/External/Kaykit Medieval Hexagon/Textures/hexagons_medieval.png
new file mode 100644
index 0000000..14cdc25
Binary files /dev/null and b/Assets/External/Kaykit Medieval Hexagon/Textures/hexagons_medieval.png differ
diff --git a/Assets/External/Kaykit Medieval Hexagon/Textures/hexagons_medieval.png.meta b/Assets/External/Kaykit Medieval Hexagon/Textures/hexagons_medieval.png.meta
new file mode 100644
index 0000000..c8bdb68
--- /dev/null
+++ b/Assets/External/Kaykit Medieval Hexagon/Textures/hexagons_medieval.png.meta
@@ -0,0 +1,156 @@
+fileFormatVersion: 2
+guid: cd4befb846a0f8a4dae8b4bddafb1da7
+TextureImporter:
+ internalIDToNameTable:
+ - first:
+ 213: 4348085514693947249
+ second: hexagons_medieval_0
+ externalObjects: {}
+ serializedVersion: 13
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ 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: 1
+ wrapV: 1
+ wrapW: 1
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 2
+ 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: 1
+ spriteTessellationDetail: -1
+ textureType: 8
+ 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
+ - serializedVersion: 4
+ buildTarget: WebGL
+ 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:
+ - serializedVersion: 2
+ name: hexagons_medieval_0
+ rect:
+ serializedVersion: 2
+ x: 0
+ y: 0
+ width: 1024
+ height: 1024
+ alignment: 0
+ pivot: {x: 0, y: 0}
+ border: {x: 0, y: 0, z: 0, w: 0}
+ customData:
+ outline: []
+ physicsShape: []
+ tessellationDetail: -1
+ bones: []
+ spriteID: 17faa5c0db0875c30800000000000000
+ internalID: 4348085514693947249
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ outline: []
+ customData:
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spriteCustomMetadata:
+ entries: []
+ nameFileIdTable:
+ hexagons_medieval_0: 4348085514693947249
+ mipmapLimitGroupName:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/InputSystem_Actions.cs b/Assets/InputSystem_Actions.cs
index 7d0af26..84a4a9c 100644
--- a/Assets/InputSystem_Actions.cs
+++ b/Assets/InputSystem_Actions.cs
@@ -114,7 +114,7 @@ public partial class @PlayerInputActions: IInputActionCollection2, IDisposable
""name"": ""Attack"",
""type"": ""Button"",
""id"": ""6c2ab1b8-8984-453a-af3d-a3c78ae1679a"",
- ""expectedControlType"": ""Button"",
+ ""expectedControlType"": """",
""processors"": """",
""interactions"": """",
""initialStateCheck"": false
@@ -172,6 +172,33 @@ public partial class @PlayerInputActions: IInputActionCollection2, IDisposable
""processors"": """",
""interactions"": """",
""initialStateCheck"": false
+ },
+ {
+ ""name"": ""Toggle Build Mode"",
+ ""type"": ""Button"",
+ ""id"": ""7a4ed342-2ee3-4884-829b-618df4ba4938"",
+ ""expectedControlType"": """",
+ ""processors"": """",
+ ""interactions"": """",
+ ""initialStateCheck"": false
+ },
+ {
+ ""name"": ""Rotate"",
+ ""type"": ""Button"",
+ ""id"": ""f8d0fd71-8954-43c6-929d-c2c7ac8fccdf"",
+ ""expectedControlType"": """",
+ ""processors"": """",
+ ""interactions"": """",
+ ""initialStateCheck"": false
+ },
+ {
+ ""name"": ""Build"",
+ ""type"": ""Button"",
+ ""id"": ""6684a7da-e647-4577-8008-711e30cd37da"",
+ ""expectedControlType"": """",
+ ""processors"": """",
+ ""interactions"": """",
+ ""initialStateCheck"": false
}
],
""bindings"": [
@@ -559,6 +586,39 @@ public partial class @PlayerInputActions: IInputActionCollection2, IDisposable
""action"": ""Crouch"",
""isComposite"": false,
""isPartOfComposite"": false
+ },
+ {
+ ""name"": """",
+ ""id"": ""4b447936-c61b-4e8c-9d56-8a7fc1c1e488"",
+ ""path"": ""/b"",
+ ""interactions"": """",
+ ""processors"": """",
+ ""groups"": "";Keyboard&Mouse"",
+ ""action"": ""Toggle Build Mode"",
+ ""isComposite"": false,
+ ""isPartOfComposite"": false
+ },
+ {
+ ""name"": """",
+ ""id"": ""a237ec8c-67b2-45d1-bff5-e2420af81736"",
+ ""path"": ""/r"",
+ ""interactions"": """",
+ ""processors"": """",
+ ""groups"": "";Keyboard&Mouse"",
+ ""action"": ""Rotate"",
+ ""isComposite"": false,
+ ""isPartOfComposite"": false
+ },
+ {
+ ""name"": """",
+ ""id"": ""99c6ee34-d67d-42aa-94d5-987ee6a08c1f"",
+ ""path"": ""/leftButton"",
+ ""interactions"": """",
+ ""processors"": """",
+ ""groups"": "";Keyboard&Mouse"",
+ ""action"": ""Build"",
+ ""isComposite"": false,
+ ""isPartOfComposite"": false
}
]
},
@@ -1153,6 +1213,9 @@ public partial class @PlayerInputActions: IInputActionCollection2, IDisposable
m_Player_Previous = m_Player.FindAction("Previous", throwIfNotFound: true);
m_Player_Next = m_Player.FindAction("Next", throwIfNotFound: true);
m_Player_Sprint = m_Player.FindAction("Sprint", throwIfNotFound: true);
+ m_Player_ToggleBuildMode = m_Player.FindAction("Toggle Build Mode", throwIfNotFound: true);
+ m_Player_Rotate = m_Player.FindAction("Rotate", throwIfNotFound: true);
+ m_Player_Build = m_Player.FindAction("Build", throwIfNotFound: true);
// UI
m_UI = asset.FindActionMap("UI", throwIfNotFound: true);
m_UI_Navigate = m_UI.FindAction("Navigate", throwIfNotFound: true);
@@ -1255,6 +1318,9 @@ public partial class @PlayerInputActions: IInputActionCollection2, IDisposable
private readonly InputAction m_Player_Previous;
private readonly InputAction m_Player_Next;
private readonly InputAction m_Player_Sprint;
+ private readonly InputAction m_Player_ToggleBuildMode;
+ private readonly InputAction m_Player_Rotate;
+ private readonly InputAction m_Player_Build;
///
/// Provides access to input actions defined in input action map "Player".
///
@@ -1303,6 +1369,18 @@ public partial class @PlayerInputActions: IInputActionCollection2, IDisposable
///
public InputAction @Sprint => m_Wrapper.m_Player_Sprint;
///
+ /// Provides access to the underlying input action "Player/ToggleBuildMode".
+ ///
+ public InputAction @ToggleBuildMode => m_Wrapper.m_Player_ToggleBuildMode;
+ ///
+ /// Provides access to the underlying input action "Player/Rotate".
+ ///
+ public InputAction @Rotate => m_Wrapper.m_Player_Rotate;
+ ///
+ /// Provides access to the underlying input action "Player/Build".
+ ///
+ public InputAction @Build => m_Wrapper.m_Player_Build;
+ ///
/// Provides access to the underlying input action map instance.
///
public InputActionMap Get() { return m_Wrapper.m_Player; }
@@ -1355,6 +1433,15 @@ public partial class @PlayerInputActions: IInputActionCollection2, IDisposable
@Sprint.started += instance.OnSprint;
@Sprint.performed += instance.OnSprint;
@Sprint.canceled += instance.OnSprint;
+ @ToggleBuildMode.started += instance.OnToggleBuildMode;
+ @ToggleBuildMode.performed += instance.OnToggleBuildMode;
+ @ToggleBuildMode.canceled += instance.OnToggleBuildMode;
+ @Rotate.started += instance.OnRotate;
+ @Rotate.performed += instance.OnRotate;
+ @Rotate.canceled += instance.OnRotate;
+ @Build.started += instance.OnBuild;
+ @Build.performed += instance.OnBuild;
+ @Build.canceled += instance.OnBuild;
}
///
@@ -1393,6 +1480,15 @@ public partial class @PlayerInputActions: IInputActionCollection2, IDisposable
@Sprint.started -= instance.OnSprint;
@Sprint.performed -= instance.OnSprint;
@Sprint.canceled -= instance.OnSprint;
+ @ToggleBuildMode.started -= instance.OnToggleBuildMode;
+ @ToggleBuildMode.performed -= instance.OnToggleBuildMode;
+ @ToggleBuildMode.canceled -= instance.OnToggleBuildMode;
+ @Rotate.started -= instance.OnRotate;
+ @Rotate.performed -= instance.OnRotate;
+ @Rotate.canceled -= instance.OnRotate;
+ @Build.started -= instance.OnBuild;
+ @Build.performed -= instance.OnBuild;
+ @Build.canceled -= instance.OnBuild;
}
///
@@ -1756,6 +1852,27 @@ public partial class @PlayerInputActions: IInputActionCollection2, IDisposable
///
///
void OnSprint(InputAction.CallbackContext context);
+ ///
+ /// Method invoked when associated input action "Toggle Build Mode" is either , or .
+ ///
+ ///
+ ///
+ ///
+ void OnToggleBuildMode(InputAction.CallbackContext context);
+ ///
+ /// Method invoked when associated input action "Rotate" is either , or .
+ ///
+ ///
+ ///
+ ///
+ void OnRotate(InputAction.CallbackContext context);
+ ///
+ /// Method invoked when associated input action "Build" is either , or .
+ ///
+ ///
+ ///
+ ///
+ void OnBuild(InputAction.CallbackContext context);
}
///
/// Interface to implement callback methods for all input action callbacks associated with input actions defined by "UI" which allows adding and removing callbacks.
diff --git a/Assets/InputSystem_Actions.inputactions b/Assets/InputSystem_Actions.inputactions
index 1a12cb9..e3d8dd9 100644
--- a/Assets/InputSystem_Actions.inputactions
+++ b/Assets/InputSystem_Actions.inputactions
@@ -1,4 +1,5 @@
{
+ "version": 1,
"name": "InputSystem_Actions",
"maps": [
{
@@ -27,7 +28,7 @@
"name": "Attack",
"type": "Button",
"id": "6c2ab1b8-8984-453a-af3d-a3c78ae1679a",
- "expectedControlType": "Button",
+ "expectedControlType": "",
"processors": "",
"interactions": "",
"initialStateCheck": false
@@ -85,6 +86,33 @@
"processors": "",
"interactions": "",
"initialStateCheck": false
+ },
+ {
+ "name": "Toggle Build Mode",
+ "type": "Button",
+ "id": "7a4ed342-2ee3-4884-829b-618df4ba4938",
+ "expectedControlType": "",
+ "processors": "",
+ "interactions": "",
+ "initialStateCheck": false
+ },
+ {
+ "name": "Rotate",
+ "type": "Button",
+ "id": "f8d0fd71-8954-43c6-929d-c2c7ac8fccdf",
+ "expectedControlType": "",
+ "processors": "",
+ "interactions": "",
+ "initialStateCheck": false
+ },
+ {
+ "name": "Build",
+ "type": "Button",
+ "id": "6684a7da-e647-4577-8008-711e30cd37da",
+ "expectedControlType": "",
+ "processors": "",
+ "interactions": "",
+ "initialStateCheck": false
}
],
"bindings": [
@@ -472,6 +500,39 @@
"action": "Crouch",
"isComposite": false,
"isPartOfComposite": false
+ },
+ {
+ "name": "",
+ "id": "4b447936-c61b-4e8c-9d56-8a7fc1c1e488",
+ "path": "/b",
+ "interactions": "",
+ "processors": "",
+ "groups": ";Keyboard&Mouse",
+ "action": "Toggle Build Mode",
+ "isComposite": false,
+ "isPartOfComposite": false
+ },
+ {
+ "name": "",
+ "id": "a237ec8c-67b2-45d1-bff5-e2420af81736",
+ "path": "/r",
+ "interactions": "",
+ "processors": "",
+ "groups": ";Keyboard&Mouse",
+ "action": "Rotate",
+ "isComposite": false,
+ "isPartOfComposite": false
+ },
+ {
+ "name": "",
+ "id": "99c6ee34-d67d-42aa-94d5-987ee6a08c1f",
+ "path": "/leftButton",
+ "interactions": "",
+ "processors": "",
+ "groups": ";Keyboard&Mouse",
+ "action": "Build",
+ "isComposite": false,
+ "isPartOfComposite": false
}
]
},
diff --git a/Assets/Prefabs/BaseTower.prefab b/Assets/Prefabs/BaseTower.prefab
new file mode 100644
index 0000000..14f7972
--- /dev/null
+++ b/Assets/Prefabs/BaseTower.prefab
@@ -0,0 +1,184 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &2363338622025898633
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 5908846398168058715}
+ m_Layer: 0
+ m_Name: GameObject
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &5908846398168058715
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2363338622025898633}
+ serializedVersion: 2
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0.75, z: 0.02444}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 600918267133276861}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &3733880183385667081
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 600918267133276861}
+ - component: {fileID: 6029659556982190569}
+ m_Layer: 0
+ m_Name: BaseTower
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &600918267133276861
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 3733880183385667081}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 1, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 4953750989773685492}
+ - {fileID: 5908846398168058715}
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &6029659556982190569
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 3733880183385667081}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: d5a57f767e5e46a458fc5d3c628d0cbb, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: Unity.Netcode.Runtime::Unity.Netcode.NetworkObject
+ GlobalObjectIdHash: 2180513150
+ InScenePlacedSourceGlobalObjectIdHash: 0
+ DeferredDespawnTick: 0
+ Ownership: 1
+ AlwaysReplicateAsRoot: 0
+ SynchronizeTransform: 1
+ ActiveSceneSynchronization: 0
+ SceneMigrationSynchronization: 0
+ SpawnWithObservers: 1
+ DontDestroyWithOwner: 0
+ AutoObjectParentSync: 1
+ SyncOwnerTransformWhenParented: 1
+ AllowOwnerToParent: 0
+--- !u!1001 &4843053201060930847
+PrefabInstance:
+ m_ObjectHideFlags: 0
+ serializedVersion: 2
+ m_Modification:
+ serializedVersion: 3
+ m_TransformParent: {fileID: 600918267133276861}
+ m_Modifications:
+ - target: {fileID: -8679921383154817045, guid: 9925587cfc99e8148bfab9d8b22d9f87, type: 3}
+ propertyPath: m_LocalPosition.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: -8679921383154817045, guid: 9925587cfc99e8148bfab9d8b22d9f87, type: 3}
+ propertyPath: m_LocalPosition.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: -8679921383154817045, guid: 9925587cfc99e8148bfab9d8b22d9f87, type: 3}
+ propertyPath: m_LocalPosition.z
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: -8679921383154817045, guid: 9925587cfc99e8148bfab9d8b22d9f87, type: 3}
+ propertyPath: m_LocalRotation.w
+ value: 1
+ objectReference: {fileID: 0}
+ - target: {fileID: -8679921383154817045, guid: 9925587cfc99e8148bfab9d8b22d9f87, type: 3}
+ propertyPath: m_LocalRotation.x
+ value: 0.00000008146034
+ objectReference: {fileID: 0}
+ - target: {fileID: -8679921383154817045, guid: 9925587cfc99e8148bfab9d8b22d9f87, type: 3}
+ propertyPath: m_LocalRotation.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: -8679921383154817045, guid: 9925587cfc99e8148bfab9d8b22d9f87, type: 3}
+ propertyPath: m_LocalRotation.z
+ value: -0
+ objectReference: {fileID: 0}
+ - target: {fileID: -8679921383154817045, guid: 9925587cfc99e8148bfab9d8b22d9f87, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: -8679921383154817045, guid: 9925587cfc99e8148bfab9d8b22d9f87, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: -8679921383154817045, guid: 9925587cfc99e8148bfab9d8b22d9f87, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.z
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 919132149155446097, guid: 9925587cfc99e8148bfab9d8b22d9f87, type: 3}
+ propertyPath: m_Name
+ value: building_tower_base_blue
+ objectReference: {fileID: 0}
+ m_RemovedComponents: []
+ m_RemovedGameObjects: []
+ m_AddedGameObjects: []
+ m_AddedComponents:
+ - targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: 9925587cfc99e8148bfab9d8b22d9f87, type: 3}
+ insertIndex: -1
+ addedObject: {fileID: 6494052432076197753}
+ m_SourcePrefab: {fileID: 100100000, guid: 9925587cfc99e8148bfab9d8b22d9f87, type: 3}
+--- !u!4 &4953750989773685492 stripped
+Transform:
+ m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: 9925587cfc99e8148bfab9d8b22d9f87, type: 3}
+ m_PrefabInstance: {fileID: 4843053201060930847}
+ m_PrefabAsset: {fileID: 0}
+--- !u!1 &5761391365246359630 stripped
+GameObject:
+ m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: 9925587cfc99e8148bfab9d8b22d9f87, type: 3}
+ m_PrefabInstance: {fileID: 4843053201060930847}
+ m_PrefabAsset: {fileID: 0}
+--- !u!64 &6494052432076197753
+MeshCollider:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 5761391365246359630}
+ m_Material: {fileID: 0}
+ m_IncludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_ExcludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_LayerOverridePriority: 0
+ m_IsTrigger: 0
+ m_ProvidesContacts: 0
+ m_Enabled: 1
+ serializedVersion: 5
+ m_Convex: 1
+ m_CookingOptions: 30
+ m_Mesh: {fileID: 2231612616327559228, guid: 9925587cfc99e8148bfab9d8b22d9f87, type: 3}
diff --git a/Assets/Prefabs/BaseTower.prefab.meta b/Assets/Prefabs/BaseTower.prefab.meta
new file mode 100644
index 0000000..81607d6
--- /dev/null
+++ b/Assets/Prefabs/BaseTower.prefab.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 1979909431408184b9bc587877c5b4b4
+PrefabImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Prefabs/Player.prefab b/Assets/Prefabs/Player.prefab
index 41f1ce6..fbe99ed 100644
--- a/Assets/Prefabs/Player.prefab
+++ b/Assets/Prefabs/Player.prefab
@@ -13,6 +13,7 @@ GameObject:
- component: {fileID: 3792365921352178844}
- component: {fileID: 1698609800605343773}
- component: {fileID: 3007098678582223509}
+ - component: {fileID: 1883169379180791275}
m_Layer: 0
m_Name: Player
m_TagString: Untagged
@@ -76,9 +77,6 @@ MonoBehaviour:
ShowTopMostFoldoutHeaderGroup: 1
moveSpeed: 5
rotationSpeed: 10
- jumpHeight: 1.5
- gravity: -19.62
- inputActions: {fileID: -944628639613478452, guid: 2bcd2660ca9b64942af0de543d8d7100, type: 3}
--- !u!95 &1698609800605343773
Animator:
serializedVersion: 7
@@ -126,6 +124,29 @@ CharacterController:
m_SkinWidth: 0.08
m_MinMoveDistance: 0.001
m_Center: {x: 0, y: 0, z: 0}
+--- !u!114 &1883169379180791275
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1314983689436087486}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 2e305ee9051761b4e8d11fd29fe7b1a1, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: Assembly-CSharp::Northbound.BuildingPlacement
+ ShowTopMostFoldoutHeaderGroup: 1
+ buildModeKey: 98
+ rotateLeftKey: 113
+ rotateRightKey: 101
+ groundLayer:
+ serializedVersion: 2
+ m_Bits: 64
+ maxPlacementDistance: 100
+ validMaterial: {fileID: 0}
+ invalidMaterial: {fileID: 0}
+ selectedBuildingIndex: 0
--- !u!1001 &1445453803682481668
PrefabInstance:
m_ObjectHideFlags: 0
diff --git a/Assets/Scenes/GameMain.unity b/Assets/Scenes/GameMain.unity
index 1cf51cc..5e2a511 100644
--- a/Assets/Scenes/GameMain.unity
+++ b/Assets/Scenes/GameMain.unity
@@ -477,6 +477,83 @@ Transform:
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1199559221
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1199559224}
+ - component: {fileID: 1199559222}
+ - component: {fileID: 1199559223}
+ m_Layer: 0
+ m_Name: BuildingManager
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!114 &1199559222
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1199559221}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: d5a57f767e5e46a458fc5d3c628d0cbb, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: Unity.Netcode.Runtime::Unity.Netcode.NetworkObject
+ GlobalObjectIdHash: 3519205374
+ InScenePlacedSourceGlobalObjectIdHash: 0
+ DeferredDespawnTick: 0
+ Ownership: 1
+ AlwaysReplicateAsRoot: 0
+ SynchronizeTransform: 1
+ ActiveSceneSynchronization: 0
+ SceneMigrationSynchronization: 0
+ SpawnWithObservers: 1
+ DontDestroyWithOwner: 0
+ AutoObjectParentSync: 1
+ SyncOwnerTransformWhenParented: 1
+ AllowOwnerToParent: 0
+--- !u!114 &1199559223
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1199559221}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 27ee775fc5a0dc7498f3049e65e32513, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: Assembly-CSharp::Northbound.BuildingManager
+ ShowTopMostFoldoutHeaderGroup: 1
+ gridSize: 1
+ groundLayer:
+ serializedVersion: 2
+ m_Bits: 64
+ availableBuildings:
+ - {fileID: 11400000, guid: 23c12a82ea534b34299700b86fffd524, type: 2}
+--- !u!4 &1199559224
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1199559221}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: -0.48349, y: 1, z: 0.31137}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1433142230
GameObject:
m_ObjectHideFlags: 0
@@ -742,6 +819,10 @@ PrefabInstance:
propertyPath: m_Name
value: Primitive_Floor
objectReference: {fileID: 0}
+ - target: {fileID: 919132149155446097, guid: 19ca9afdd7bb3a64c9036c18e8cee5f2, type: 3}
+ propertyPath: m_Layer
+ value: 6
+ objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
@@ -759,3 +840,4 @@ SceneRoots:
- {fileID: 1433142232}
- {fileID: 61373299}
- {fileID: 1142746334}
+ - {fileID: 1199559224}
diff --git a/Assets/Scripts/Building.cs b/Assets/Scripts/Building.cs
new file mode 100644
index 0000000..4849e64
--- /dev/null
+++ b/Assets/Scripts/Building.cs
@@ -0,0 +1,76 @@
+using Unity.Netcode;
+using UnityEngine;
+
+namespace Northbound
+{
+ public class Building : NetworkBehaviour
+ {
+ [Header("References")]
+ public BuildingData buildingData;
+
+ [Header("Runtime Info")]
+ public Vector3Int gridPosition;
+ public int rotation; // 0-3 (0=0°, 1=90°, 2=180°, 3=270°)
+
+ [Header("Debug")]
+ public bool showGridBounds = true;
+ public Color gridBoundsColor = Color.cyan;
+
+ public void Initialize(BuildingData data, Vector3Int gridPos, int rot)
+ {
+ buildingData = data;
+ gridPosition = gridPos;
+ rotation = rot;
+ }
+
+ ///
+ /// Gets the grid-based bounds (from BuildingData width/length/height)
+ /// This is used for placement validation, NOT the actual collider bounds
+ /// Bounds are slightly shrunk to allow adjacent buildings to touch
+ ///
+ public Bounds GetGridBounds()
+ {
+ if (buildingData == null) return new Bounds(transform.position, Vector3.one);
+
+ Vector3 gridSize = buildingData.GetSize(rotation);
+
+ // Shrink slightly to allow buildings to be adjacent without Intersects() returning true
+ Vector3 shrunkSize = gridSize - Vector3.one * 0.01f;
+ return new Bounds(transform.position + Vector3.up * gridSize.y * 0.5f, shrunkSize);
+ }
+
+ ///
+ /// Legacy method, use GetGridBounds() instead
+ ///
+ public Bounds GetBounds()
+ {
+ return GetGridBounds();
+ }
+
+ private void OnDrawGizmos()
+ {
+ if (!showGridBounds || buildingData == null) return;
+
+ Bounds bounds = GetGridBounds();
+ Gizmos.color = gridBoundsColor;
+ Gizmos.DrawWireCube(bounds.center, bounds.size);
+ }
+
+ private void OnDrawGizmosSelected()
+ {
+ if (buildingData == null) return;
+
+ Bounds bounds = GetGridBounds();
+ Gizmos.color = Color.yellow;
+ Gizmos.DrawWireCube(bounds.center, bounds.size);
+
+ // Draw grid position
+ if (BuildingManager.Instance != null)
+ {
+ Vector3 worldPos = BuildingManager.Instance.GridToWorld(gridPosition);
+ Gizmos.color = Color.magenta;
+ Gizmos.DrawSphere(worldPos, 0.2f);
+ }
+ }
+ }
+}
diff --git a/Assets/Scripts/Building.cs.meta b/Assets/Scripts/Building.cs.meta
new file mode 100644
index 0000000..8aa27c0
--- /dev/null
+++ b/Assets/Scripts/Building.cs.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: 0ceedb9b012d848478813136b65738ae
\ No newline at end of file
diff --git a/Assets/Scripts/BuildingData.cs b/Assets/Scripts/BuildingData.cs
new file mode 100644
index 0000000..014307c
--- /dev/null
+++ b/Assets/Scripts/BuildingData.cs
@@ -0,0 +1,35 @@
+using UnityEngine;
+
+namespace Northbound
+{
+ [CreateAssetMenu(fileName = "NewBuilding", menuName = "Northbound/Building Data")]
+ public class BuildingData : ScriptableObject
+ {
+ [Header("Building Info")]
+ public string buildingName;
+ public GameObject prefab;
+
+ [Header("Grid Size")]
+ [Tooltip("Width in grid units")]
+ public int width = 1;
+ [Tooltip("Length in grid units")]
+ public int length = 1;
+ [Tooltip("Height for placement validation")]
+ public float height = 2f;
+
+ [Header("Placement Settings")]
+ [Tooltip("Offset from grid position")]
+ public Vector3 placementOffset = Vector3.zero;
+ [Tooltip("Can rotate this building?")]
+ public bool allowRotation = true;
+
+ public Vector3 GetSize(int rotation)
+ {
+ // Rotation 0,180 = normal, 90,270 = swap width/length
+ bool isRotated = (rotation == 1 || rotation == 3);
+ float w = isRotated ? length : width;
+ float l = isRotated ? width : length;
+ return new Vector3(w, height, l);
+ }
+ }
+}
diff --git a/Assets/Scripts/BuildingData.cs.meta b/Assets/Scripts/BuildingData.cs.meta
new file mode 100644
index 0000000..629788c
--- /dev/null
+++ b/Assets/Scripts/BuildingData.cs.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: 937e64980d44d6b46acb35b8046adf34
\ No newline at end of file
diff --git a/Assets/Scripts/BuildingManager.cs b/Assets/Scripts/BuildingManager.cs
new file mode 100644
index 0000000..a63710e
--- /dev/null
+++ b/Assets/Scripts/BuildingManager.cs
@@ -0,0 +1,153 @@
+using System.Collections.Generic;
+using Unity.Netcode;
+using UnityEngine;
+
+namespace Northbound
+{
+ public class BuildingManager : NetworkBehaviour
+ {
+ public static BuildingManager Instance { get; private set; }
+
+ [Header("Settings")]
+ public float gridSize = 1f;
+ public LayerMask groundLayer;
+
+ [Header("Building Database")]
+ public List availableBuildings = new List();
+
+ private List placedBuildings = new List();
+
+ private void Awake()
+ {
+ if (Instance != null && Instance != this)
+ {
+ Destroy(gameObject);
+ return;
+ }
+ Instance = this;
+ }
+
+ public Vector3 SnapToGrid(Vector3 worldPosition)
+ {
+ return new Vector3(
+ Mathf.Round(worldPosition.x / gridSize) * gridSize,
+ worldPosition.y,
+ Mathf.Round(worldPosition.z / gridSize) * gridSize
+ );
+ }
+
+ public Vector3Int WorldToGrid(Vector3 worldPosition)
+ {
+ return new Vector3Int(
+ Mathf.RoundToInt(worldPosition.x / gridSize),
+ Mathf.RoundToInt(worldPosition.y / gridSize),
+ Mathf.RoundToInt(worldPosition.z / gridSize)
+ );
+ }
+
+ public Vector3 GridToWorld(Vector3Int gridPosition)
+ {
+ return new Vector3(
+ gridPosition.x * gridSize,
+ gridPosition.y * gridSize,
+ gridPosition.z * gridSize
+ );
+ }
+
+ public bool IsValidPlacement(BuildingData data, Vector3 position, int rotation, out Vector3 groundPosition)
+ {
+ groundPosition = position;
+
+ // Ground check
+ if (!CheckGround(position, out groundPosition))
+ return false;
+
+ // IMPORTANT: Snap to grid BEFORE checking overlap!
+ // Otherwise we check the raw cursor position which might overlap
+ Vector3 snappedPosition = SnapToGrid(groundPosition);
+ groundPosition = snappedPosition; // Update groundPosition to snapped value
+
+ // Overlap check using GRID SIZE from BuildingData (not actual colliders)
+ Vector3 gridSize = data.GetSize(rotation);
+
+ // Shrink bounds slightly to allow buildings to touch without overlapping
+ // This prevents Bounds.Intersects() from returning true for adjacent buildings
+ Vector3 shrunkSize = gridSize - Vector3.one * 0.01f;
+ Bounds checkBounds = new Bounds(snappedPosition + Vector3.up * gridSize.y * 0.5f, shrunkSize);
+
+ foreach (var building in placedBuildings)
+ {
+ if (building == null) continue;
+
+ // Compare grid bounds, not collider bounds
+ Bounds buildingGridBounds = building.GetGridBounds();
+
+ if (checkBounds.Intersects(buildingGridBounds))
+ return false;
+ }
+
+ return true;
+ }
+
+ ///
+ /// Get the grid bounds for a building at a given position
+ /// Useful for preview visualization
+ ///
+ public Bounds GetPlacementBounds(BuildingData data, Vector3 position, int rotation)
+ {
+ Vector3 gridSize = data.GetSize(rotation);
+ return new Bounds(position + Vector3.up * gridSize.y * 0.5f, gridSize);
+ }
+
+ private bool CheckGround(Vector3 position, out Vector3 groundPosition)
+ {
+ groundPosition = position;
+
+ // Raycast down to find ground
+ if (Physics.Raycast(position + Vector3.up * 10f, Vector3.down, out RaycastHit hit, 20f, groundLayer))
+ {
+ groundPosition = hit.point;
+ return true;
+ }
+
+ return false;
+ }
+
+ [Rpc(SendTo.Server, InvokePermission = RpcInvokePermission.Everyone)]
+ public void PlaceBuildingServerRpc(int buildingIndex, Vector3 position, int rotation)
+ {
+ if (buildingIndex < 0 || buildingIndex >= availableBuildings.Count)
+ return;
+
+ BuildingData data = availableBuildings[buildingIndex];
+
+ // IsValidPlacement now returns snapped position in groundPosition
+ if (!IsValidPlacement(data, position, rotation, out Vector3 snappedPosition))
+ return;
+
+ Vector3Int gridPosition = WorldToGrid(snappedPosition);
+
+ // Spawn building at snapped position
+ GameObject buildingObj = Instantiate(data.prefab, snappedPosition + data.placementOffset, Quaternion.Euler(0, rotation * 90f, 0));
+ NetworkObject netObj = buildingObj.GetComponent();
+
+ if (netObj != null)
+ {
+ netObj.Spawn();
+
+ Building building = buildingObj.GetComponent();
+ if (building == null)
+ building = buildingObj.AddComponent();
+
+ building.Initialize(data, gridPosition, rotation);
+ placedBuildings.Add(building);
+ }
+ }
+
+ public void RemoveBuilding(Building building)
+ {
+ if (placedBuildings.Contains(building))
+ placedBuildings.Remove(building);
+ }
+ }
+}
diff --git a/Assets/Scripts/BuildingManager.cs.meta b/Assets/Scripts/BuildingManager.cs.meta
new file mode 100644
index 0000000..244b981
--- /dev/null
+++ b/Assets/Scripts/BuildingManager.cs.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: 27ee775fc5a0dc7498f3049e65e32513
\ No newline at end of file
diff --git a/Assets/Scripts/BuildingPlacement.cs b/Assets/Scripts/BuildingPlacement.cs
new file mode 100644
index 0000000..10c13a5
--- /dev/null
+++ b/Assets/Scripts/BuildingPlacement.cs
@@ -0,0 +1,452 @@
+using Unity.Netcode;
+using UnityEngine;
+using UnityEngine.InputSystem;
+
+namespace Northbound
+{
+ public class BuildingPlacement : NetworkBehaviour
+ {
+ [Header("Settings")]
+ public LayerMask groundLayer;
+ public float maxPlacementDistance = 100f;
+
+ [Header("Preview Materials")]
+ public Material validMaterial;
+ public Material invalidMaterial;
+
+ [Header("Current Selection")]
+ public int selectedBuildingIndex = 0;
+
+ [Header("Debug Visualization")]
+ public bool showGridBounds = true;
+
+ private bool isBuildModeActive = false;
+ private GameObject previewObject;
+ private int currentRotation = 0; // 0-3
+ private Material[] originalMaterials;
+ private Renderer[] previewRenderers;
+ private PlayerInputActions _inputActions;
+
+ public override void OnNetworkSpawn()
+ {
+ if (!IsOwner) return;
+
+ _inputActions = new PlayerInputActions();
+ _inputActions.Player.ToggleBuildMode.performed += OnToggleBuildMode;
+ _inputActions.Player.Rotate.performed += OnRotate;
+ _inputActions.Player.Build.performed += OnBuild;
+ _inputActions.Enable();
+
+ // Create default materials if not assigned
+ if (validMaterial == null)
+ {
+ validMaterial = CreateGhostMaterial(new Color(0, 1, 0, 0.5f));
+ }
+
+ if (invalidMaterial == null)
+ {
+ invalidMaterial = CreateGhostMaterial(new Color(1, 0, 0, 0.5f));
+ }
+ }
+
+ private Material CreateGhostMaterial(Color color)
+ {
+ // Try to find appropriate shader for current render pipeline
+ Shader shader = Shader.Find("Universal Render Pipeline/Lit");
+ if (shader == null)
+ shader = Shader.Find("Standard");
+ if (shader == null)
+ shader = Shader.Find("Diffuse");
+
+ Material mat = new Material(shader);
+
+ // Set base color
+ if (mat.HasProperty("_BaseColor"))
+ mat.SetColor("_BaseColor", color); // URP
+ else if (mat.HasProperty("_Color"))
+ mat.SetColor("_Color", color); // Standard
+
+ // Enable transparency
+ if (mat.HasProperty("_Surface"))
+ {
+ // URP Transparency
+ mat.SetFloat("_Surface", 1); // Transparent
+ mat.SetFloat("_Blend", 0); // Alpha
+ mat.SetFloat("_AlphaClip", 0);
+ mat.SetFloat("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.SrcAlpha);
+ mat.SetFloat("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);
+ mat.SetFloat("_ZWrite", 0);
+ mat.renderQueue = 3000;
+ mat.EnableKeyword("_SURFACE_TYPE_TRANSPARENT");
+ mat.EnableKeyword("_ALPHAPREMULTIPLY_ON");
+ }
+ else
+ {
+ // Standard RP Transparency
+ mat.SetFloat("_Mode", 3); // Transparent mode
+ mat.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.SrcAlpha);
+ mat.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);
+ mat.SetInt("_ZWrite", 0);
+ mat.DisableKeyword("_ALPHATEST_ON");
+ mat.EnableKeyword("_ALPHABLEND_ON");
+ mat.DisableKeyword("_ALPHAPREMULTIPLY_ON");
+ mat.renderQueue = 3000;
+ }
+
+ return mat;
+ }
+
+ public override void OnNetworkDespawn()
+ {
+ if (IsOwner && _inputActions != null)
+ {
+ _inputActions.Player.ToggleBuildMode.performed -= OnToggleBuildMode;
+ _inputActions.Player.Rotate.performed -= OnRotate;
+ _inputActions.Player.Build.performed -= OnBuild;
+ _inputActions.Disable();
+ _inputActions.Dispose();
+ }
+ }
+
+ private void Update()
+ {
+ if (!IsOwner) return;
+
+ if (isBuildModeActive)
+ {
+ UpdatePreviewPosition();
+ }
+ }
+
+ private void OnDrawGizmos()
+ {
+ if (!IsOwner || !isBuildModeActive || !showGridBounds) return;
+ if (BuildingManager.Instance == null || previewObject == null || !previewObject.activeSelf) return;
+
+ BuildingData data = BuildingManager.Instance.availableBuildings[selectedBuildingIndex];
+ if (data == null) return;
+
+ // Draw grid bounds being used for collision detection
+ Bounds bounds = BuildingManager.Instance.GetPlacementBounds(data, previewObject.transform.position, currentRotation);
+
+ // Check if valid
+ bool isValid = BuildingManager.Instance.IsValidPlacement(data, previewObject.transform.position, currentRotation, out _);
+
+ Gizmos.color = isValid ? new Color(0, 1, 0, 0.5f) : new Color(1, 0, 0, 0.5f);
+ Gizmos.DrawWireCube(bounds.center, bounds.size);
+
+ // Draw grid cells
+ Gizmos.color = Color.yellow;
+ float gridSize = BuildingManager.Instance.gridSize;
+ Vector3 snappedPos = BuildingManager.Instance.SnapToGrid(previewObject.transform.position);
+
+ // Draw grid origin point
+ Gizmos.DrawSphere(snappedPos, 0.1f);
+
+ // Draw grid outline for each cell
+ int width = Mathf.RoundToInt(bounds.size.x / gridSize);
+ int length = Mathf.RoundToInt(bounds.size.z / gridSize);
+
+ for (int x = 0; x < width; x++)
+ {
+ for (int z = 0; z < length; z++)
+ {
+ Vector3 cellPos = snappedPos + new Vector3(
+ (x - width / 2f + 0.5f) * gridSize,
+ 0.01f,
+ (z - length / 2f + 0.5f) * gridSize
+ );
+ Gizmos.DrawWireCube(cellPos, new Vector3(gridSize, 0.01f, gridSize));
+ }
+ }
+ }
+
+ private void OnToggleBuildMode(InputAction.CallbackContext context)
+ {
+ ToggleBuildMode();
+ }
+
+ private void OnRotate(InputAction.CallbackContext context)
+ {
+ if (!isBuildModeActive) return;
+
+ float rotateValue = context.ReadValue();
+ if (rotateValue > 0)
+ {
+ currentRotation = (currentRotation + 1) % 4;
+ }
+ else if (rotateValue < 0)
+ {
+ currentRotation = (currentRotation - 1 + 4) % 4;
+ }
+ }
+
+ private void OnBuild(InputAction.CallbackContext context)
+ {
+ if (!isBuildModeActive) return;
+ TryPlaceBuilding();
+ }
+
+ private void ToggleBuildMode()
+ {
+ isBuildModeActive = !isBuildModeActive;
+
+ if (isBuildModeActive)
+ {
+ EnterBuildMode();
+ }
+ else
+ {
+ ExitBuildMode();
+ }
+ }
+
+ private void EnterBuildMode()
+ {
+ currentRotation = 0;
+ CreatePreview();
+ }
+
+ private void ExitBuildMode()
+ {
+ DestroyPreview();
+ }
+
+ private void CreatePreview()
+ {
+ if (BuildingManager.Instance == null)
+ return;
+
+ if (BuildingManager.Instance.availableBuildings.Count == 0)
+ return;
+
+ selectedBuildingIndex = Mathf.Clamp(selectedBuildingIndex, 0,
+ BuildingManager.Instance.availableBuildings.Count - 1);
+
+ BuildingData data = BuildingManager.Instance.availableBuildings[selectedBuildingIndex];
+ if (data == null || data.prefab == null)
+ return;
+
+ previewObject = Instantiate(data.prefab);
+ previewObject.name = "BuildingPreview";
+
+ // Disable colliders on preview
+ foreach (var collider in previewObject.GetComponentsInChildren())
+ {
+ collider.enabled = false;
+ }
+
+ // Remove NetworkObject from preview if exists
+ NetworkObject netObj = previewObject.GetComponent();
+ if (netObj != null)
+ {
+ Destroy(netObj);
+ }
+
+ // Store original materials and setup preview renderers
+ previewRenderers = previewObject.GetComponentsInChildren();
+
+ if (previewRenderers.Length == 0)
+ {
+ // Add a debug cube so you can at least see something
+ GameObject debugCube = GameObject.CreatePrimitive(PrimitiveType.Cube);
+ debugCube.transform.SetParent(previewObject.transform);
+ debugCube.transform.localPosition = Vector3.zero;
+ Destroy(debugCube.GetComponent());
+ previewRenderers = previewObject.GetComponentsInChildren();
+ }
+
+ originalMaterials = new Material[previewRenderers.Length];
+
+ for (int i = 0; i < previewRenderers.Length; i++)
+ {
+ originalMaterials[i] = previewRenderers[i].material;
+ // Replace all materials with ghost material
+ Material[] mats = new Material[previewRenderers[i].materials.Length];
+ for (int j = 0; j < mats.Length; j++)
+ {
+ mats[j] = validMaterial;
+ }
+ previewRenderers[i].materials = mats;
+
+ // Disable shadow casting
+ previewRenderers[i].shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off;
+ previewRenderers[i].receiveShadows = false;
+ }
+ }
+
+ private void DestroyPreview()
+ {
+ if (previewObject != null)
+ {
+ Destroy(previewObject);
+ previewObject = null;
+ }
+ }
+
+ private void UpdatePreviewPosition()
+ {
+ if (BuildingManager.Instance == null) return;
+
+ if (previewObject == null)
+ {
+ CreatePreview();
+ if (previewObject == null) return;
+ }
+
+ if (Mouse.current == null)
+ return;
+
+ Vector2 mousePos = Mouse.current.position.ReadValue();
+ Ray ray = Camera.main.ScreenPointToRay(mousePos);
+
+ Vector3 targetPosition = Vector3.zero;
+ bool foundPosition = false;
+
+ // Robust approach: Find where ray intersects ground plane, then raycast down from there
+ // This works even when pointing at empty space between buildings
+
+ // Step 1: Calculate where ray intersects a horizontal plane at Y=0
+ // Using plane intersection math
+ Plane groundPlane = new Plane(Vector3.up, Vector3.zero);
+ float enter;
+
+ if (groundPlane.Raycast(ray, out enter))
+ {
+ // Get the XZ position where ray hits the ground plane
+ Vector3 planeHitPoint = ray.GetPoint(enter);
+
+ // Step 2: Cast down from above this XZ position to find actual ground
+ Vector3 highPoint = new Vector3(planeHitPoint.x, 100f, planeHitPoint.z);
+
+ if (Physics.Raycast(highPoint, Vector3.down, out RaycastHit downHit, 200f, groundLayer))
+ {
+ // Always use the hit point
+ targetPosition = downHit.point;
+ foundPosition = true;
+ }
+ else
+ {
+ // No ground found via raycast, use the plane intersection point directly
+ targetPosition = planeHitPoint;
+ foundPosition = true;
+ }
+ }
+ else
+ {
+ // Fallback: Try direct raycast to anything
+ if (Physics.Raycast(ray, out RaycastHit anyHit, maxPlacementDistance))
+ {
+ targetPosition = anyHit.point;
+ foundPosition = true;
+ }
+ }
+
+ if (foundPosition)
+ {
+ BuildingData data = BuildingManager.Instance.availableBuildings[selectedBuildingIndex];
+
+ // IsValidPlacement now returns the snapped position in groundPosition
+ bool isValid = BuildingManager.Instance.IsValidPlacement(data, targetPosition, currentRotation, out Vector3 snappedPosition);
+
+ previewObject.transform.position = snappedPosition + data.placementOffset;
+ previewObject.transform.rotation = Quaternion.Euler(0, currentRotation * 90f, 0);
+
+ if (!previewObject.activeSelf)
+ {
+ previewObject.SetActive(true);
+ }
+
+ // Update material
+ Material previewMat = isValid ? validMaterial : invalidMaterial;
+ foreach (var renderer in previewRenderers)
+ {
+ Material[] mats = new Material[renderer.materials.Length];
+ for (int i = 0; i < mats.Length; i++)
+ {
+ mats[i] = previewMat;
+ }
+ renderer.materials = mats;
+ }
+ }
+ else
+ {
+ if (previewObject.activeSelf)
+ {
+ previewObject.SetActive(false);
+ }
+ }
+ }
+
+ private void TryPlaceBuilding()
+ {
+ if (previewObject == null || !previewObject.activeSelf) return;
+
+ Vector2 mousePos = Mouse.current.position.ReadValue();
+ Ray ray = Camera.main.ScreenPointToRay(mousePos);
+
+ Vector3 targetPosition = Vector3.zero;
+ bool foundPosition = false;
+
+ // Use plane intersection to get XZ position, then raycast down to find ground
+ Plane groundPlane = new Plane(Vector3.up, Vector3.zero);
+ float enter;
+
+ if (groundPlane.Raycast(ray, out enter))
+ {
+ Vector3 planeHitPoint = ray.GetPoint(enter);
+ Vector3 highPoint = new Vector3(planeHitPoint.x, 100f, planeHitPoint.z);
+
+ if (Physics.Raycast(highPoint, Vector3.down, out RaycastHit downHit, 200f, groundLayer))
+ {
+ if (downHit.collider.GetComponentInParent() == null)
+ {
+ targetPosition = downHit.point;
+ foundPosition = true;
+ }
+ else
+ {
+ targetPosition = downHit.point;
+ foundPosition = true;
+ }
+ }
+ else
+ {
+ targetPosition = planeHitPoint;
+ foundPosition = true;
+ }
+ }
+ else
+ {
+ // Fallback: direct raycast
+ if (Physics.Raycast(ray, out RaycastHit anyHit, maxPlacementDistance))
+ {
+ targetPosition = anyHit.point;
+ foundPosition = true;
+ }
+ }
+
+ if (foundPosition)
+ {
+ BuildingData data = BuildingManager.Instance.availableBuildings[selectedBuildingIndex];
+
+ // IsValidPlacement now returns the snapped position
+ if (BuildingManager.Instance.IsValidPlacement(data, targetPosition, currentRotation, out Vector3 snappedPosition))
+ {
+ BuildingManager.Instance.PlaceBuildingServerRpc(selectedBuildingIndex, snappedPosition, currentRotation);
+ }
+ }
+ }
+
+
+ private void OnDestroy()
+ {
+ DestroyPreview();
+
+ if (_inputActions != null)
+ {
+ _inputActions.Dispose();
+ }
+ }
+ }
+}
diff --git a/Assets/Scripts/BuildingPlacement.cs.meta b/Assets/Scripts/BuildingPlacement.cs.meta
new file mode 100644
index 0000000..6950f05
--- /dev/null
+++ b/Assets/Scripts/BuildingPlacement.cs.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: 2e305ee9051761b4e8d11fd29fe7b1a1
\ No newline at end of file
diff --git a/Assets/Scripts/GhostMaterialTest.cs b/Assets/Scripts/GhostMaterialTest.cs
new file mode 100644
index 0000000..8b0b651
--- /dev/null
+++ b/Assets/Scripts/GhostMaterialTest.cs
@@ -0,0 +1,92 @@
+using UnityEngine;
+
+namespace Northbound
+{
+ ///
+ /// Simple test script to verify ghost materials work.
+ /// Attach to any GameObject with a Renderer to see the ghost effect.
+ ///
+ public class GhostMaterialTest : MonoBehaviour
+ {
+ [Header("Test Settings")]
+ public Color ghostColor = new Color(0, 1, 0, 0.5f);
+ public bool applyOnStart = true;
+
+ private void Start()
+ {
+ if (applyOnStart)
+ {
+ ApplyGhostMaterial();
+ }
+ }
+
+ [ContextMenu("Apply Ghost Material")]
+ public void ApplyGhostMaterial()
+ {
+ Material ghostMat = CreateGhostMaterial(ghostColor);
+
+ Renderer[] renderers = GetComponentsInChildren();
+ foreach (var renderer in renderers)
+ {
+ Material[] mats = new Material[renderer.materials.Length];
+ for (int i = 0; i < mats.Length; i++)
+ {
+ mats[i] = ghostMat;
+ }
+ renderer.materials = mats;
+ renderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off;
+ renderer.receiveShadows = false;
+ }
+
+ Debug.Log($"Applied ghost material to {renderers.Length} renderers");
+ }
+
+ private Material CreateGhostMaterial(Color color)
+ {
+ // Try to find appropriate shader for current render pipeline
+ Shader shader = Shader.Find("Universal Render Pipeline/Lit");
+ if (shader == null)
+ shader = Shader.Find("Standard");
+ if (shader == null)
+ shader = Shader.Find("Diffuse");
+
+ Material mat = new Material(shader);
+
+ // Set base color
+ if (mat.HasProperty("_BaseColor"))
+ mat.SetColor("_BaseColor", color); // URP
+ else if (mat.HasProperty("_Color"))
+ mat.SetColor("_Color", color); // Standard
+
+ // Enable transparency
+ if (mat.HasProperty("_Surface"))
+ {
+ // URP Transparency
+ mat.SetFloat("_Surface", 1); // Transparent
+ mat.SetFloat("_Blend", 0); // Alpha
+ mat.SetFloat("_AlphaClip", 0);
+ mat.SetFloat("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.SrcAlpha);
+ mat.SetFloat("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);
+ mat.SetFloat("_ZWrite", 0);
+ mat.renderQueue = 3000;
+ mat.EnableKeyword("_SURFACE_TYPE_TRANSPARENT");
+ mat.EnableKeyword("_ALPHAPREMULTIPLY_ON");
+ }
+ else
+ {
+ // Standard RP Transparency
+ mat.SetFloat("_Mode", 3); // Transparent mode
+ mat.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.SrcAlpha);
+ mat.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);
+ mat.SetInt("_ZWrite", 0);
+ mat.DisableKeyword("_ALPHATEST_ON");
+ mat.EnableKeyword("_ALPHABLEND_ON");
+ mat.DisableKeyword("_ALPHAPREMULTIPLY_ON");
+ mat.renderQueue = 3000;
+ }
+
+ Debug.Log($"Created ghost material with shader: {shader.name}");
+ return mat;
+ }
+ }
+}
diff --git a/Assets/Scripts/GhostMaterialTest.cs.meta b/Assets/Scripts/GhostMaterialTest.cs.meta
new file mode 100644
index 0000000..73b3af2
--- /dev/null
+++ b/Assets/Scripts/GhostMaterialTest.cs.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: 99bb7a3f13f744642aca504e3c30a571
\ No newline at end of file
diff --git a/BUILDING_SYSTEM_SETUP.md b/BUILDING_SYSTEM_SETUP.md
new file mode 100644
index 0000000..067aa2f
--- /dev/null
+++ b/BUILDING_SYSTEM_SETUP.md
@@ -0,0 +1,323 @@
+# Building System Setup Guide
+
+## Overview
+The building system allows players to place buildings with:
+- **Grid-based snapping** for aligned placement
+- **Overlap detection** to prevent buildings from colliding
+- **Ground validation** to ensure buildings are placed on terrain
+- **Ghost preview** with green (valid) / red (invalid) visual feedback
+- **Network synchronization** across all players
+
+## Components
+
+### 1. BuildingData (ScriptableObject)
+Defines properties for each building type:
+- Building name and prefab reference
+- Grid size (width, length, height)
+- Placement offset and rotation settings
+
+### 2. Building (MonoBehaviour)
+Component attached to placed building instances. Tracks:
+- Grid position
+- Rotation (0-3, representing 0°, 90°, 180°, 270°)
+- Reference to BuildingData
+
+### 3. BuildingManager (NetworkBehaviour - Singleton)
+Central manager that:
+- Maintains list of all placed buildings
+- Validates placement (ground check + overlap detection)
+- Handles grid snapping
+- Spawns buildings on network via ServerRpc
+
+### 4. BuildingPlacement (NetworkBehaviour)
+Player-side building interface:
+- Uses new Input System (`PlayerInputActions`, `Keyboard.current`, `Mouse.current`)
+- Handles input (B key to toggle, Q/E to rotate, click to place)
+- Shows ghost preview at mouse position
+- Updates preview material (green/red) based on validity
+- Proper input lifecycle management (enable/disable/dispose)
+
+## Setup Instructions
+
+### Step 0: Setup Input Actions (Required First!)
+**Before using the building system, you MUST add the required input actions.**
+
+See **INPUT_ACTIONS_SETUP.md** for detailed instructions.
+
+Quick summary - Add these to your Player action map in `InputSystem_Actions.inputactions`:
+1. **ToggleBuildMode** (Button) → Keyboard B
+2. **Rotate** (Value/Axis) → Keyboard R
+3. **Build** (Button) → Mouse Left Button
+
+After adding, save the asset to regenerate the code.
+
+### Step 1: Create BuildingData Assets
+1. Right-click in Project window → Create → Northbound → Building Data
+2. Configure your building:
+ - Assign the building prefab
+ - Set grid size (width, length, height)
+ - Adjust placement offset if needed
+ - Enable/disable rotation
+
+### Step 2: Setup Building Prefabs
+For each building prefab:
+1. Add `NetworkObject` component
+2. Add `Building` component
+3. Ensure it has a `Renderer` for preview
+4. Add colliders for gameplay (player collision, physics)
+5. **Important:** Colliders are NOT used for placement validation - only BuildingData grid size matters
+6. Set the prefab's layer to anything EXCEPT the Ground layer (buildings will be raycast-ignored during placement)
+
+### Step 3: Setup BuildingManager
+1. Create empty GameObject in your scene named "BuildingManager"
+2. Add `BuildingManager` component
+3. Add `NetworkObject` component
+4. Configure settings:
+ - **Grid Size**: Size of one grid unit (default: 1)
+ - **Ground Layer**: Layer mask for valid ground (e.g., "Ground")
+ - **Available Buildings**: Add your BuildingData assets
+
+### Step 4: Add BuildingPlacement to Player
+1. Open your Player prefab
+2. Add `BuildingPlacement` component
+3. Configure:
+ - **Ground Layer**: Same as BuildingManager
+ - **Max Placement Distance**: How far player can place (default: 100)
+ - **Valid Material**: Green transparent material (auto-created if null)
+ - **Invalid Material**: Red transparent material (auto-created if null)
+
+### Step 5: Setup Layers
+1. Create a layer named "Ground" (or your preferred name)
+2. Assign this layer to terrain/ground objects
+3. **Important:** Make sure building prefabs are on a **different** layer (not Ground)
+ - This allows raycasting through buildings to hit the ground
+ - You can place buildings even when cursor is over existing buildings
+
+## Controls
+
+Default bindings (customizable in Input Actions):
+- **B**: Toggle build mode on/off
+- **R**: Rotate building (90° increments)
+- **Left Mouse Button**: Place building (if valid position)
+- **Mouse Movement**: Move preview to placement location
+
+## Input System
+
+The building system uses Unity's **new Input System** with action callbacks:
+- Actions: `ToggleBuildMode`, `Rotate`, `Build`
+- Subscribe to `.performed` events in `OnNetworkSpawn`
+- Unsubscribe in `OnNetworkDespawn`
+- No hardcoded keys - all controls defined in Input Actions asset
+- Easy to rebind without code changes
+
+**Pattern:**
+```csharp
+_inputActions.Player.ToggleBuildMode.performed += OnToggleBuildMode;
+_inputActions.Player.Rotate.performed += OnRotate;
+_inputActions.Player.Build.performed += OnBuild;
+```
+
+This uses callback-based input, similar to the pattern shown in `InputSystem_Actions.cs` examples.
+
+## Technical Implementation
+
+### Modern Input System (Callback Pattern)
+```csharp
+// Initialization in OnNetworkSpawn
+_inputActions = new PlayerInputActions();
+_inputActions.Player.ToggleBuildMode.performed += OnToggleBuildMode;
+_inputActions.Player.Rotate.performed += OnRotate;
+_inputActions.Player.Build.performed += OnBuild;
+_inputActions.Enable();
+
+// Callback handlers
+private void OnToggleBuildMode(InputAction.CallbackContext context)
+{
+ ToggleBuildMode();
+}
+
+private void OnRotate(InputAction.CallbackContext context)
+{
+ float rotateValue = context.ReadValue();
+ // Positive = rotate right, Negative = rotate left
+}
+
+private void OnBuild(InputAction.CallbackContext context)
+{
+ TryPlaceBuilding();
+}
+
+// Cleanup in OnNetworkDespawn
+_inputActions.Player.ToggleBuildMode.performed -= OnToggleBuildMode;
+_inputActions.Player.Rotate.performed -= OnRotate;
+_inputActions.Player.Build.performed -= OnBuild;
+_inputActions.Disable();
+_inputActions.Dispose();
+```
+
+### Modern Netcode RPC Pattern
+```csharp
+[ServerRpc(RequireOwnership = false)]
+public void PlaceBuildingServerRpc(int buildingIndex, Vector3 position, int rotation, ServerRpcParams serverRpcParams = default)
+{
+ // Validation
+ if (!IsValidPlacement(...)) return;
+
+ // Server-side spawn
+ GameObject obj = Instantiate(...);
+ NetworkObject netObj = obj.GetComponent();
+ netObj.Spawn(); // Automatically syncs to all clients
+}
+```
+
+## How It Works
+
+### Build Mode Flow
+1. Player presses **B** → enters build mode
+2. Preview appears at mouse cursor position
+3. System raycasts to find ground (two-stage):
+ - **Method 1:** Direct raycast to ground, ignoring building colliders
+ - **Method 2:** If ground not visible (buildings blocking), raycast to anything, then cast downward from that point to find ground below
+ - This allows placement even in completely surrounded cells
+4. System checks placement validity:
+ - Is there ground below?
+ - Does grid bounds overlap with existing buildings?
+5. Preview shows **green** if valid, **red** if invalid
+6. Player rotates with **R** if desired
+7. Player clicks to confirm placement
+8. **ServerRpc** sent to server to spawn building
+9. Building synchronized to all clients
+
+### Validation System (Grid-Based)
+```
+IsValidPlacement() checks:
+├── Ground Check: Raycast down to find ground
+└── Overlap Check: Compare GRID BOUNDS (not colliders!)
+ ├── Uses BuildingData width/length/height
+ ├── NOT the actual collider size
+ └── Rotates grid size automatically (90°/180°/270°)
+```
+
+**Important:** Collision detection uses the **grid size** from `BuildingData`, not the physical colliders on the building prefab. This means:
+- A building with `width=2, length=3, height=2` occupies a 2x3 grid area
+- Even if the visual model is smaller/larger, the grid size determines overlap
+- This allows consistent, predictable building placement
+
+### Grid Snapping
+- World position → rounded to nearest grid size
+- Example: gridSize=2, position (3.7, 0, 5.2) → snaps to (4, 0, 6)
+
+### Rotation System
+- Rotation values: 0, 1, 2, 3 → 0°, 90°, 180°, 270°
+- Building size auto-swaps width/length when rotated 90° or 270°
+
+## Example Building Setup
+
+### Small House (2x2)
+```
+Name: Small House
+Prefab: SmallHousePrefab
+Width: 2
+Length: 2
+Height: 3
+Allow Rotation: true
+```
+
+### Wall Segment (1x3)
+```
+Name: Wall
+Prefab: WallPrefab
+Width: 1
+Length: 3
+Height: 2
+Allow Rotation: true
+```
+
+## Debug Visualization
+
+The system includes visual debugging to help you understand grid placement:
+
+**In Scene View (when build mode is active):**
+- **Green/Red Wire Cube**: Shows the grid bounds being checked
+ - Green = valid placement
+ - Red = invalid (overlapping or no ground)
+- **Yellow Grid Cells**: Shows individual grid cells occupied
+- **Yellow Sphere**: Grid origin point (snapped position)
+
+**On Placed Buildings:**
+- **Cyan Wire Cube**: Shows the grid bounds of placed buildings
+- **Yellow Wire Cube** (when selected): Highlights the selected building's grid
+- **Magenta Sphere**: Grid position origin
+
+Enable/disable with:
+- BuildingPlacement → Show Grid Bounds
+- Building → Show Grid Bounds
+
+## Troubleshooting
+
+**Preview doesn't appear:**
+- Check if BuildingManager.Instance exists
+- Verify availableBuildings list has BuildingData
+- Ensure Ground layer is set correctly
+
+**Can't place buildings:**
+- Check ground layer mask matches terrain
+- Verify building prefabs have NetworkObject
+- Ensure BuildingManager has NetworkObject and is spawned
+
+**Buildings overlap despite visual gap:**
+- Remember: Collision uses **grid size** from BuildingData, not visual model size
+- Check the grid bounds in Scene view (cyan wire cubes)
+- Adjust width/length/height in BuildingData to match desired grid footprint
+
+**Can't place buildings when cursor is near existing buildings:**
+- FIXED: System now uses RaycastAll and ignores building colliders
+- Raycasts pass through buildings to hit the ground
+- You can place buildings even when cursor is hovering over old ones
+- Just make sure buildings are NOT on the Ground layer
+
+**Can't place in center cell when surrounded by buildings:**
+- FIXED: Two-stage raycast system
+- If direct ground raycast fails, system raycasts to any object then down to find ground
+- Works even when all adjacent cells are built and blocking the ground view
+- You can fill in gaps surrounded by buildings
+
+**Network issues:**
+- BuildingManager must be spawned on network
+- Ensure player has BuildingPlacement component with IsOwner
+
+## Extending the System
+
+### Add Building Categories
+Edit `BuildingData.cs` and add:
+```csharp
+public enum BuildingCategory { Housing, Production, Defense }
+public BuildingCategory category;
+```
+
+### Add Resource Costs
+```csharp
+[Header("Cost")]
+public int woodCost;
+public int stoneCost;
+```
+
+Then check resources in `BuildingManager.PlaceBuildingServerRpc()`
+
+### Add Build Range Limit
+In `BuildingPlacement.UpdatePreviewPosition()`:
+```csharp
+float distanceToPlayer = Vector3.Distance(transform.position, snappedPosition);
+if (distanceToPlayer > maxBuildRange)
+ isValid = false;
+```
+
+### Multiple Building Selection
+Add UI buttons that change `selectedBuildingIndex` in BuildingPlacement
+
+## Notes
+
+- Buildings are spawned on the **server** via ServerRpc
+- Preview is **local-only** (each player sees their own preview)
+- Ground layer should include all walkable/buildable surfaces
+- Grid size should match your game's scale (larger buildings = larger grid)
diff --git a/GRID_BASED_COLLISION.md b/GRID_BASED_COLLISION.md
new file mode 100644
index 0000000..a10bde8
--- /dev/null
+++ b/GRID_BASED_COLLISION.md
@@ -0,0 +1,283 @@
+# Grid-Based Collision System
+
+## How It Works
+
+The building system uses **grid-based collision detection**, NOT the actual colliders on building prefabs.
+
+### Grid Bounds vs Collider Bounds
+
+```
+❌ OLD WAY (Collider-based):
+Building A has BoxCollider (2.5 x 3.7 x 4.2)
+Building B has MeshCollider (complex shape)
+→ Hard to predict, inconsistent placement
+
+✅ NEW WAY (Grid-based):
+Building A has width=2, length=3, height=2 in BuildingData
+Building B has width=1, length=4, height=3 in BuildingData
+→ Predictable, consistent grid placement
+```
+
+## Why Grid-Based?
+
+### Advantages
+1. **Predictable**: Buildings snap to grid, easy to understand
+2. **Consistent**: Same rules for all buildings, regardless of visual model
+3. **Flexible**: Visual model can be any size/shape
+4. **Network-Friendly**: Simple data to sync (just grid position + rotation)
+5. **Performance**: Fast AABB (Axis-Aligned Bounding Box) checks
+
+### Comparison
+
+| Aspect | Collider-Based | Grid-Based |
+|--------|---------------|------------|
+| Placement | Visual, complex shapes | Predictable grid cells |
+| Performance | Slower (physics queries) | Faster (simple bounds check) |
+| Network Sync | Complex mesh data | Simple int coordinates |
+| Rotation | Complex recalculation | Swap width/length |
+| Debugging | Hard to visualize | Easy (grid gizmos) |
+
+## How Grid Size Works
+
+### BuildingData Settings
+
+```csharp
+[Header("Grid Size")]
+public int width = 2; // X-axis grid cells
+public int length = 3; // Z-axis grid cells
+public float height = 2f; // Y-axis size (can be float)
+```
+
+### Rotation Effect
+
+```
+Building: width=2, length=3
+
+Rotation 0° (0): Rotation 90° (1):
+┌─────┐ ┌───────┐
+│ 2 │ │ 3 │
+│ x │ │ x │
+│ 3 │ └───────┘
+└─────┘ 2
+
+Rotation 180° (2): Rotation 270° (3):
+┌─────┐ ┌───────┐
+│ 3 │ │ 2 │
+│ x │ │ x │
+│ 2 │ └───────┘
+└─────┘ 3
+```
+
+The `GetSize(rotation)` method automatically swaps width/length for 90° and 270° rotations.
+
+## Visual Examples
+
+### Example 1: Small House
+```yaml
+BuildingData:
+ width: 2
+ length: 2
+ height: 3
+
+Grid Footprint (top view):
+┌─┬─┐
+├─┼─┤ Occupies 4 grid cells (2x2)
+└─┴─┘
+
+Visual Model: Can be any size!
+- Model might be 1.8 x 1.8 (smaller than grid)
+- Model might be 2.3 x 2.3 (larger than grid)
+- Collision still uses 2x2 grid
+```
+
+### Example 2: Wall Segment
+```yaml
+BuildingData:
+ width: 1
+ length: 4
+ height: 2
+
+Grid Footprint:
+┌───────────┐
+│ 1 x 4 │ Occupies 4 grid cells (1x4)
+└───────────┘
+
+When rotated 90°:
+┌─┐
+├─┤
+├─┤ Becomes 4x1
+├─┤
+└─┘
+```
+
+### Example 3: Large Building
+```yaml
+BuildingData:
+ width: 4
+ length: 5
+ height: 4
+
+Grid Footprint:
+┌─┬─┬─┬─┬─┐
+├─┼─┼─┼─┼─┤
+├─┼─┼─┼─┼─┤ Occupies 20 grid cells (4x5)
+├─┼─┼─┼─┼─┤
+└─┴─┴─┴─┴─┘
+```
+
+## Collision Detection Code
+
+### IsValidPlacement (BuildingManager.cs)
+
+```csharp
+// Get grid size from BuildingData (NOT collider)
+Vector3 gridSize = data.GetSize(rotation);
+
+// Shrink bounds slightly to allow adjacent placement
+// Without this, Bounds.Intersects() returns true for touching bounds
+Vector3 shrunkSize = gridSize - Vector3.one * 0.01f;
+Bounds checkBounds = new Bounds(
+ groundPosition + Vector3.up * gridSize.y * 0.5f,
+ shrunkSize
+);
+
+// Check against all placed buildings' GRID bounds
+foreach (var building in placedBuildings)
+{
+ Bounds buildingGridBounds = building.GetGridBounds();
+ if (checkBounds.Intersects(buildingGridBounds))
+ return false; // Overlap detected
+}
+```
+
+**Why shrink by 0.01f?**
+Unity's `Bounds.Intersects()` returns `true` when bounds are touching (edge-to-edge), not just overlapping. By shrinking the bounds by a tiny amount (0.01 units), we allow buildings to be placed directly adjacent without triggering a false overlap detection.
+
+### GetGridBounds (Building.cs)
+
+```csharp
+public Bounds GetGridBounds()
+{
+ // Uses BuildingData size, not collider
+ Vector3 gridSize = buildingData.GetSize(rotation);
+
+ // Shrink slightly to allow adjacent buildings
+ Vector3 shrunkSize = gridSize - Vector3.one * 0.01f;
+ return new Bounds(
+ transform.position + Vector3.up * gridSize.y * 0.5f,
+ shrunkSize
+ );
+}
+```
+
+**Note:** The 0.01f shrink is tiny and not visible, but prevents false overlap detection for adjacent buildings.
+
+## Visualizing Grid Bounds
+
+### In Scene View
+
+1. **Enter Build Mode** (Press B)
+2. **Look at Scene View** (not Game view)
+3. You'll see:
+ - **Green/Red Wire Cube**: Preview's grid bounds
+ - **Yellow Grid Cells**: Individual cells
+ - **Cyan Wire Cubes**: Placed buildings' grid bounds
+
+### Debug Settings
+
+**BuildingPlacement:**
+- `Show Grid Bounds` - Shows preview grid visualization
+
+**Building:**
+- `Show Grid Bounds` - Shows cyan wire cube for this building
+- `Grid Bounds Color` - Customize visualization color
+
+### Example Scene
+
+```
+Scene View:
+ Preview (Green)
+ ┌─────┐
+ │ 2x3 │
+ └─────┘
+ Placed Building (Cyan)
+ ┌───┐
+ │1x2│
+ └───┘
+
+Grid Cells (Yellow):
+┌─┬─┬─┬─┬─┬─┐
+├─┼─┼─┼─┼─┼─┤
+└─┴─┴─┴─┴─┴─┘
+```
+
+## Best Practices
+
+### 1. Match Grid Size to Gameplay
+```csharp
+// Small decorations
+width: 1, length: 1, height: 1
+
+// Medium buildings
+width: 2-3, length: 2-3, height: 2-3
+
+// Large buildings
+width: 4-6, length: 4-6, height: 3-5
+```
+
+### 2. Visual Model Can Differ
+The visual model doesn't need to match grid size exactly:
+- Overhang/decorations can extend beyond grid
+- Model can be smaller, leaving empty grid space
+- Use `placementOffset` to adjust visual alignment
+
+### 3. Height Consideration
+```csharp
+height: 2f // Building is 2 units tall
+```
+- Used for vertical bounds checking
+- Prevents buildings on top of each other
+- Can be float (e.g., 2.5f for tall buildings)
+
+### 4. Colliders Still Needed
+Building prefabs should still have colliders for:
+- Player/entity collision during gameplay
+- Physics interactions
+- Raycast detection
+
+But these are NOT used for placement validation!
+
+## Common Questions
+
+**Q: Why is my small model blocking a large area?**
+A: Check the `width` and `length` in BuildingData. The grid size determines collision, not the visual model.
+
+**Q: Buildings overlap visually but can't place?**
+A: Grid bounds are overlapping. Check Scene view with "Show Grid Bounds" enabled.
+
+**Q: How do I make a building take less space?**
+A: Reduce `width` and `length` in BuildingData. The visual model size doesn't matter.
+
+**Q: Can I use fractional grid sizes?**
+A: `width` and `length` are integers (whole grid cells). Only `height` can be a float.
+
+**Q: What if my model is rotated strangely?**
+A: Grid rotation is separate from model rotation. Grid always aligns to world axes. Adjust model's prefab rotation or use `placementOffset`.
+
+**Q: Can buildings be placed directly next to each other with no gap?**
+A: Yes! The system shrinks bounds by 0.01f to allow adjacent placement. Buildings can touch edge-to-edge.
+
+**Q: I want a gap between buildings. How?**
+A: Increase the `width` and `length` values in BuildingData by 1. For example, change a 2x2 building to 3x3 to add a 1-cell buffer zone.
+
+## Summary
+
+✅ **Use BuildingData grid size** for collision
+✅ **Visual model can be any size**
+✅ **Predictable, grid-aligned placement**
+✅ **Easy debugging with gizmos**
+✅ **Fast performance**
+
+❌ **Don't rely on collider size**
+❌ **Don't expect pixel-perfect visual collision**
+❌ **Don't use colliders for placement validation**
diff --git a/INPUT_ACTIONS_SETUP.md b/INPUT_ACTIONS_SETUP.md
new file mode 100644
index 0000000..f17421c
--- /dev/null
+++ b/INPUT_ACTIONS_SETUP.md
@@ -0,0 +1,128 @@
+# Building System Input Actions Setup
+
+## Required Input Actions
+
+Add these three actions to your `InputSystem_Actions.inputactions` file in the **Player** action map:
+
+### 1. ToggleBuildMode (Button)
+- **Action Type**: Button
+- **Control Type**: Button
+- **Binding**: Keyboard B
+
+### 2. Rotate (Value)
+- **Action Type**: Value
+- **Control Type**: Axis
+- **Binding**: Keyboard R (positive value)
+- Alternative: You can use a 1D Axis composite with:
+ - Negative: Q
+ - Positive: E
+
+### 3. Build (Button)
+- **Action Type**: Button
+- **Control Type**: Button
+- **Binding**: Mouse Left Button
+
+## Step-by-Step Setup in Unity
+
+1. **Open Input Actions Asset**
+ - Navigate to `Assets/InputSystem_Actions.inputactions`
+ - Double-click to open the Input Actions window
+
+2. **Select Player Action Map**
+ - In the left panel, click on "Player" action map
+
+3. **Add ToggleBuildMode Action**
+ - Click the "+" button in the Actions column
+ - Name it: `ToggleBuildMode`
+ - Action Type: Button
+ - Add binding: Keyboard → B
+
+4. **Add Rotate Action**
+ - Click the "+" button in the Actions column
+ - Name it: `Rotate`
+ - Action Type: Value
+ - Control Type: Axis
+
+ **Option A (Simple - Single key):**
+ - Add binding: Keyboard → R
+
+ **Option B (Advanced - Q/E rotation):**
+ - Right-click → Add 1D Axis Composite
+ - Negative: Keyboard → Q
+ - Positive: Keyboard → E
+
+5. **Add Build Action**
+ - Click the "+" button in the Actions column
+ - Name it: `Build`
+ - Action Type: Button
+ - Add binding: Mouse → Left Button
+
+6. **Save and Regenerate**
+ - Click "Save Asset" button
+ - The `InputSystem_Actions.cs` script will auto-regenerate
+
+## How It Works in Code
+
+The BuildingPlacement script subscribes to these actions:
+
+```csharp
+// Setup in OnNetworkSpawn
+_inputActions.Player.ToggleBuildMode.performed += OnToggleBuildMode;
+_inputActions.Player.Rotate.performed += OnRotate;
+_inputActions.Player.Build.performed += OnBuild;
+
+// Cleanup in OnNetworkDespawn
+_inputActions.Player.ToggleBuildMode.performed -= OnToggleBuildMode;
+_inputActions.Player.Rotate.performed -= OnRotate;
+_inputActions.Player.Build.performed -= OnBuild;
+```
+
+### ToggleBuildMode
+- Triggers when B is pressed
+- Toggles build mode on/off
+- Shows/hides building preview
+
+### Rotate
+- Triggers when R is pressed (or Q/E if using composite)
+- Reads value: positive = rotate right, negative = rotate left
+- Rotates building preview by 90°
+
+### Build
+- Triggers when left mouse button is pressed
+- Only works when build mode is active
+- Places the building at the preview position
+
+## Customizing Controls
+
+To change the key bindings:
+1. Open `InputSystem_Actions.inputactions`
+2. Click on the binding you want to change
+3. Click "Path" dropdown
+4. Select new key/button
+5. Save Asset
+
+No code changes needed - the script uses the action names, not specific keys!
+
+## Testing
+
+After setup:
+1. Enter Play mode
+2. Press **B** → Should see "Entered Build Mode" in console
+3. Press **R** → Building preview should rotate
+4. Click **Left Mouse Button** → Should place building (if valid position)
+5. Press **B** again → Should exit build mode
+
+## Troubleshooting
+
+**Error: "ToggleBuildMode does not exist"**
+- Make sure you named the action exactly `ToggleBuildMode` (case-sensitive)
+- Save the Input Actions asset to regenerate the code
+
+**Rotation doesn't work:**
+- Check the action name is exactly `Rotate`
+- If using composite, make sure it's a 1D Axis composite
+- Verify the action type is "Value" not "Button"
+
+**Build action triggers during movement:**
+- Make sure Build action is mapped to Mouse Left Button, not Attack
+- Check that Build mode is active (press B first)
diff --git a/ProjectSettings/TagManager.asset b/ProjectSettings/TagManager.asset
index 1c92a78..acda2db 100644
--- a/ProjectSettings/TagManager.asset
+++ b/ProjectSettings/TagManager.asset
@@ -2,7 +2,7 @@
%TAG !u! tag:unity3d.com,2011:
--- !u!78 &1
TagManager:
- serializedVersion: 2
+ serializedVersion: 3
tags: []
layers:
- Default
@@ -11,7 +11,7 @@ TagManager:
-
- Water
- UI
- -
+ - Ground
-
-
-
@@ -41,3 +41,5 @@ TagManager:
- name: Default
uniqueID: 0
locked: 0
+ m_RenderingLayers:
+ - Default
diff --git a/TROUBLESHOOTING_GHOST.md b/TROUBLESHOOTING_GHOST.md
new file mode 100644
index 0000000..1167303
--- /dev/null
+++ b/TROUBLESHOOTING_GHOST.md
@@ -0,0 +1,196 @@
+# Building Ghost Preview Troubleshooting
+
+## FIXED: Preview Activated But Not Visible
+
+If console shows "Preview activated" but you can't see it, this was a **material/transparency issue**.
+
+**Solution implemented:**
+- Better material creation supporting both URP and Standard RP
+- Proper transparency setup for ghost materials
+- Multiple material slots handled correctly
+- Auto-creates debug cube if prefab has no renderer
+
+**Test the fix:**
+1. Press Play
+2. Press B to enter build mode
+3. Move mouse over ground
+4. You should now see a **green transparent ghost** of your building
+5. Invalid positions show **red transparent ghost**
+
+If still not visible after update, continue with checklist below.
+
+---
+
+## Quick Checklist
+
+Run through these checks in order:
+
+### 1. Check Console Logs
+Press B to enter build mode and look for these messages:
+- ✅ "Entered Build Mode"
+- ✅ "[BuildingPlacement] Created preview: BuildingPreview"
+- ✅ "[BuildingPlacement] Found X renderers"
+- ✅ "[BuildingPlacement] Applied valid material to preview"
+- ✅ "[BuildingPlacement] Preview activated at (x, y, z)"
+
+**If you see errors:**
+- ❌ "BuildingManager.Instance is null" → Go to Step 2
+- ❌ "No buildings available" → Go to Step 3
+- ❌ "Prefab is null" → Go to Step 4
+- ❌ "Preview deactivated - no ground hit" → Go to Step 5
+
+### 2. Check BuildingManager Setup
+1. In Hierarchy, find "BuildingManager" GameObject
+2. Verify it has:
+ - `BuildingManager` component
+ - `NetworkObject` component
+3. In BuildingManager component:
+ - **Grid Size**: Should be > 0 (e.g., 1)
+ - **Ground Layer**: Should be set (e.g., "Default" or "Ground")
+ - **Available Buildings**: Should have at least 1 BuildingData
+
+**Fix:** If BuildingManager doesn't exist, create it:
+- Create Empty GameObject → Name: "BuildingManager"
+- Add Component → BuildingManager
+- Add Component → NetworkObject
+- Configure settings
+
+### 3. Check BuildingData Asset
+1. Project window → Find your BuildingData asset
+2. Select it and check Inspector:
+ - **Building Name**: Should have a name
+ - **Prefab**: Should be assigned (not "None")
+ - **Width/Length/Height**: Should be > 0
+3. Verify this BuildingData is in BuildingManager's "Available Buildings" list
+
+**Fix:** If BuildingData missing:
+- Right-click in Project → Create → Northbound → Building Data
+- Assign a prefab
+- Add to BuildingManager's Available Buildings list
+
+### 4. Check Building Prefab
+1. Find your building prefab in Project
+2. Open it and verify:
+ - Has a `MeshRenderer` or `SkinnedMeshRenderer` component
+ - Renderer has a `Material` assigned
+ - Has a `Collider` (for placement validation)
+ - Optionally has `NetworkObject` (will be removed from preview)
+
+**Fix:** If prefab is missing components:
+- Add a 3D object (Cube, for testing)
+- Save as prefab
+- Assign to BuildingData
+
+### 5. Check Ground Layer
+The preview won't show if the raycast can't hit the ground.
+
+1. In Scene view, select your terrain/ground
+2. Check its **Layer** (top of Inspector)
+3. In BuildingManager:
+ - **Ground Layer** mask should include this layer
+4. In BuildingPlacement (on Player):
+ - **Ground Layer** mask should match BuildingManager
+
+**Fix:**
+- Set terrain Layer to "Default" or create "Ground" layer
+- In BuildingManager/BuildingPlacement → Ground Layer → Check "Default" (or your ground layer)
+
+### 6. Check Camera
+1. Verify `Camera.main` exists in scene
+2. Camera should be able to see the ground
+
+**Fix:**
+- Make sure Main Camera has tag "MainCamera"
+- Camera should be positioned to see the scene
+
+### 7. Check Player Setup
+1. Find your Player prefab
+2. Verify it has:
+ - `BuildingPlacement` component
+ - **Ground Layer** is set
+ - **Max Placement Distance** > 0 (e.g., 100)
+
+### 8. Visual Check in Scene View
+1. Press B to enter build mode
+2. Open **Hierarchy** window
+3. Look for object named "BuildingPreview"
+4. If it exists:
+ - Click on it
+ - Check if it's active (checkbox next to name)
+ - Look at its position in Inspector
+ - Switch to **Scene** view and look for it
+ - Check if materials are assigned in Renderer component
+
+### 9. Test with Simple Cube
+Create a minimal test setup:
+1. Create a Cube in scene → Save as Prefab → Delete from scene
+2. Create BuildingData → Assign Cube prefab
+3. Add to BuildingManager → Available Buildings
+4. Create a Plane → Position at (0, 0, 0)
+5. Press Play → Press B → Move mouse over Plane
+
+You should see the transparent cube preview.
+
+## Common Issues
+
+### Preview exists but is invisible
+**Cause:** Materials not rendering or transparent issues
+**Fix (Now Automated):**
+- The system now auto-detects your render pipeline (URP or Standard)
+- Creates proper transparent materials automatically
+- If prefab has no renderer, adds a debug cube
+
+**Manual Test:**
+1. Add `GhostMaterialTest` component to any object with a renderer
+2. Press Play
+3. Object should become transparent green
+4. If it works, the ghost system will work too
+
+### Preview doesn't follow mouse
+**Cause:** Ground layer not set correctly or no ground detected
+**Fix:**
+- Check console for "no ground hit" message
+- Verify Ground Layer includes your terrain
+- Increase Max Placement Distance
+- Make sure you're pointing at ground, not sky
+
+### Preview spawns at (0,0,0) and doesn't move
+**Cause:** Raycast not hitting ground
+**Fix:**
+- Same as above - Ground Layer issue
+
+### Materials are black/pink
+**Cause:** Shader/material issues
+**Fix:**
+- Make sure you're using the correct render pipeline shaders
+- Standard RP: Use "Standard" shader
+- URP: Use "Universal Render Pipeline/Lit" shader
+
+## Debug Commands
+
+Add these temporary debug lines to check:
+
+In `CreatePreview()` after instantiation:
+```csharp
+Debug.Log($"Preview position: {previewObject.transform.position}");
+Debug.Log($"Preview active: {previewObject.activeSelf}");
+Debug.Log($"Renderers: {previewRenderers.Length}");
+```
+
+In `UpdatePreviewPosition()`:
+```csharp
+Debug.DrawRay(ray.origin, ray.direction * maxPlacementDistance, Color.red);
+```
+
+This shows the raycast in Scene view (red line from camera to mouse).
+
+## Still Not Working?
+
+Check these final items:
+1. Input Actions are set up (ToggleBuildMode, Rotate, Build)
+2. BuildingManager is spawned on network (in scene, not prefab)
+3. You're the owner of the player (IsOwner = true)
+4. No errors in Console
+5. Build mode is actually active (check console for "Entered Build Mode")
+
+If all else fails, check the Console for any errors and share them!