diff --git a/Assets/# Prototype/Models/Old Sentinel.meta b/Assets/# Prototype/Models/Old Sentinel.meta new file mode 100644 index 0000000..5aa10fb --- /dev/null +++ b/Assets/# Prototype/Models/Old Sentinel.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e1f104f32b15f4206a6bdd7ef764db95 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/# Prototype/Models/Sentinel/Sentinel Material.mat b/Assets/# Prototype/Models/Old Sentinel/Sentinel Material.mat similarity index 100% rename from Assets/# Prototype/Models/Sentinel/Sentinel Material.mat rename to Assets/# Prototype/Models/Old Sentinel/Sentinel Material.mat diff --git a/Assets/# Prototype/Models/Sentinel/Sentinel Material.mat.meta b/Assets/# Prototype/Models/Old Sentinel/Sentinel Material.mat.meta similarity index 100% rename from Assets/# Prototype/Models/Sentinel/Sentinel Material.mat.meta rename to Assets/# Prototype/Models/Old Sentinel/Sentinel Material.mat.meta diff --git a/Assets/# Prototype/Models/Sentinel/Textures.meta b/Assets/# Prototype/Models/Old Sentinel/Textures.meta similarity index 100% rename from Assets/# Prototype/Models/Sentinel/Textures.meta rename to Assets/# Prototype/Models/Old Sentinel/Textures.meta diff --git a/Assets/# Prototype/Models/Sentinel/Textures/sentinel.albedo.png b/Assets/# Prototype/Models/Old Sentinel/Textures/sentinel.albedo.png similarity index 100% rename from Assets/# Prototype/Models/Sentinel/Textures/sentinel.albedo.png rename to Assets/# Prototype/Models/Old Sentinel/Textures/sentinel.albedo.png diff --git a/Assets/# Prototype/Models/Sentinel/Textures/sentinel.albedo.png.meta b/Assets/# Prototype/Models/Old Sentinel/Textures/sentinel.albedo.png.meta similarity index 100% rename from Assets/# Prototype/Models/Sentinel/Textures/sentinel.albedo.png.meta rename to Assets/# Prototype/Models/Old Sentinel/Textures/sentinel.albedo.png.meta diff --git a/Assets/# Prototype/Models/Sentinel/Textures/sentinel.emission-map.png b/Assets/# Prototype/Models/Old Sentinel/Textures/sentinel.emission-map.png similarity index 100% rename from Assets/# Prototype/Models/Sentinel/Textures/sentinel.emission-map.png rename to Assets/# Prototype/Models/Old Sentinel/Textures/sentinel.emission-map.png diff --git a/Assets/# Prototype/Models/Sentinel/Textures/sentinel.emission-map.png.meta b/Assets/# Prototype/Models/Old Sentinel/Textures/sentinel.emission-map.png.meta similarity index 100% rename from Assets/# Prototype/Models/Sentinel/Textures/sentinel.emission-map.png.meta rename to Assets/# Prototype/Models/Old Sentinel/Textures/sentinel.emission-map.png.meta diff --git a/Assets/# Prototype/Models/Sentinel/Textures/sentinel.normal-map.png b/Assets/# Prototype/Models/Old Sentinel/Textures/sentinel.normal-map.png similarity index 100% rename from Assets/# Prototype/Models/Sentinel/Textures/sentinel.normal-map.png rename to Assets/# Prototype/Models/Old Sentinel/Textures/sentinel.normal-map.png diff --git a/Assets/# Prototype/Models/Sentinel/Textures/sentinel.normal-map.png.meta b/Assets/# Prototype/Models/Old Sentinel/Textures/sentinel.normal-map.png.meta similarity index 100% rename from Assets/# Prototype/Models/Sentinel/Textures/sentinel.normal-map.png.meta rename to Assets/# Prototype/Models/Old Sentinel/Textures/sentinel.normal-map.png.meta diff --git a/Assets/# Prototype/Models/Sentinel/sentinel.fbx b/Assets/# Prototype/Models/Old Sentinel/sentinel.fbx similarity index 100% rename from Assets/# Prototype/Models/Sentinel/sentinel.fbx rename to Assets/# Prototype/Models/Old Sentinel/sentinel.fbx diff --git a/Assets/# Prototype/Models/Sentinel/sentinel.fbx.meta b/Assets/# Prototype/Models/Old Sentinel/sentinel.fbx.meta similarity index 82% rename from Assets/# Prototype/Models/Sentinel/sentinel.fbx.meta rename to Assets/# Prototype/Models/Old Sentinel/sentinel.fbx.meta index dd18c2c..1140a2b 100644 --- a/Assets/# Prototype/Models/Sentinel/sentinel.fbx.meta +++ b/Assets/# Prototype/Models/Old Sentinel/sentinel.fbx.meta @@ -204,6 +204,64 @@ ModelImporter: maskType: 3 maskSource: {instanceID: 0} additiveReferencePoseFrame: 0 + - serializedVersion: 16 + name: Fall + takeName: Armature|Main + internalID: -4084983065073612718 + firstFrame: 138 + lastFrame: 158 + wrapMode: 0 + orientationOffsetY: 0 + level: 0 + cycleOffset: 0 + loop: 0 + hasAdditiveReferencePose: 0 + loopTime: 1 + loopBlend: 0 + loopBlendOrientation: 0 + loopBlendPositionY: 0 + loopBlendPositionXZ: 0 + keepOriginalOrientation: 0 + keepOriginalPositionY: 1 + keepOriginalPositionXZ: 0 + heightFromFeet: 0 + mirror: 0 + bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 + curves: [] + events: [] + transformMask: [] + maskType: 3 + maskSource: {instanceID: 0} + additiveReferencePoseFrame: 0 + - serializedVersion: 16 + name: FallLanding + takeName: Armature|Main + internalID: 7716892539185763080 + firstFrame: 165 + lastFrame: 170 + wrapMode: 0 + orientationOffsetY: 0 + level: 0 + cycleOffset: 0 + loop: 0 + hasAdditiveReferencePose: 0 + loopTime: 0 + loopBlend: 0 + loopBlendOrientation: 0 + loopBlendPositionY: 0 + loopBlendPositionXZ: 0 + keepOriginalOrientation: 0 + keepOriginalPositionY: 1 + keepOriginalPositionXZ: 0 + heightFromFeet: 0 + mirror: 0 + bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 + curves: [] + events: [] + transformMask: [] + maskType: 3 + maskSource: {instanceID: 0} + additiveReferencePoseFrame: 0 isReadable: 0 meshes: lODScreenPercentages: [] diff --git a/Assets/# Prototype/Models/Sentinel/Meshy_AI_Omega_Sentinel_biped_Character_output.fbx b/Assets/# Prototype/Models/Sentinel/Meshy_AI_Omega_Sentinel_biped_Character_output.fbx new file mode 100644 index 0000000..8ca2c74 --- /dev/null +++ b/Assets/# Prototype/Models/Sentinel/Meshy_AI_Omega_Sentinel_biped_Character_output.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b23e7754a01746a44914ba325e85b1f2417717341ae4f2cd57e629a8ec3cbb2a +size 8761788 diff --git a/Assets/# Prototype/Models/Sentinel/Meshy_AI_Omega_Sentinel_biped_Character_output.fbx.meta b/Assets/# Prototype/Models/Sentinel/Meshy_AI_Omega_Sentinel_biped_Character_output.fbx.meta new file mode 100644 index 0000000..65a4c3c --- /dev/null +++ b/Assets/# Prototype/Models/Sentinel/Meshy_AI_Omega_Sentinel_biped_Character_output.fbx.meta @@ -0,0 +1,110 @@ +fileFormatVersion: 2 +guid: 37def8513ce134a6680fe2e2227c1499 +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/# Prototype/Models/Sentinel/Meshy_AI_Omega_Sentinel_biped_Meshy_AI_Meshy_Merged_Animations.fbx b/Assets/# Prototype/Models/Sentinel/Meshy_AI_Omega_Sentinel_biped_Meshy_AI_Meshy_Merged_Animations.fbx new file mode 100644 index 0000000..f4c3e78 --- /dev/null +++ b/Assets/# Prototype/Models/Sentinel/Meshy_AI_Omega_Sentinel_biped_Meshy_AI_Meshy_Merged_Animations.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e1d8a766d5e3e366b28f3bc4009ba8a557d4606aed2dfb0ff7f1e3c9718bc7be +size 9605708 diff --git a/Assets/# Prototype/Models/Sentinel/Meshy_AI_Omega_Sentinel_biped_Meshy_AI_Meshy_Merged_Animations.fbx.meta b/Assets/# Prototype/Models/Sentinel/Meshy_AI_Omega_Sentinel_biped_Meshy_AI_Meshy_Merged_Animations.fbx.meta new file mode 100644 index 0000000..8c08666 --- /dev/null +++ b/Assets/# Prototype/Models/Sentinel/Meshy_AI_Omega_Sentinel_biped_Meshy_AI_Meshy_Merged_Animations.fbx.meta @@ -0,0 +1,110 @@ +fileFormatVersion: 2 +guid: ba365bded320a496fb35a184dd00590d +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/# Prototype/Models/Sentinel/Meshy_AI_Omega_Sentinel_biped_texture_0.png b/Assets/# Prototype/Models/Sentinel/Meshy_AI_Omega_Sentinel_biped_texture_0.png new file mode 100644 index 0000000..53c5aad --- /dev/null +++ b/Assets/# Prototype/Models/Sentinel/Meshy_AI_Omega_Sentinel_biped_texture_0.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2df46fb678e5d1ee10767786dcd1e8310c153d91a790c7e0812422422a70f147 +size 8002250 diff --git a/Assets/# Prototype/Models/Sentinel/Meshy_AI_Omega_Sentinel_biped_texture_0.png.meta b/Assets/# Prototype/Models/Sentinel/Meshy_AI_Omega_Sentinel_biped_texture_0.png.meta new file mode 100644 index 0000000..7263853 --- /dev/null +++ b/Assets/# Prototype/Models/Sentinel/Meshy_AI_Omega_Sentinel_biped_texture_0.png.meta @@ -0,0 +1,156 @@ +fileFormatVersion: 2 +guid: 902e532758106440f99234d3a544c0b2 +TextureImporter: + internalIDToNameTable: + - first: + 213: 7577163799961485906 + second: Meshy_AI_Omega_Sentinel_biped_texture_0_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: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - 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: Meshy_AI_Omega_Sentinel_biped_texture_0_0 + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 2048 + height: 2048 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 25247ad945e772960800000000000000 + internalID: 7577163799961485906 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: + Meshy_AI_Omega_Sentinel_biped_texture_0_0: 7577163799961485906 + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/# Prototype/Models/Sentinel/Meshy_AI_Omega_Sentinel_biped_texture_0_metallic.png b/Assets/# Prototype/Models/Sentinel/Meshy_AI_Omega_Sentinel_biped_texture_0_metallic.png new file mode 100644 index 0000000..36964f1 --- /dev/null +++ b/Assets/# Prototype/Models/Sentinel/Meshy_AI_Omega_Sentinel_biped_texture_0_metallic.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7f88a6d6a2698b5c707fa1c4eff686ab215625c1fc90de14b7052e2da315f03f +size 9734 diff --git a/Assets/# Prototype/Models/Sentinel/Meshy_AI_Omega_Sentinel_biped_texture_0_metallic.png.meta b/Assets/# Prototype/Models/Sentinel/Meshy_AI_Omega_Sentinel_biped_texture_0_metallic.png.meta new file mode 100644 index 0000000..8509a15 --- /dev/null +++ b/Assets/# Prototype/Models/Sentinel/Meshy_AI_Omega_Sentinel_biped_texture_0_metallic.png.meta @@ -0,0 +1,156 @@ +fileFormatVersion: 2 +guid: 1582c76d04ac840fb972aab67799ec2e +TextureImporter: + internalIDToNameTable: + - first: + 213: -9103677635925538778 + second: Meshy_AI_Omega_Sentinel_biped_texture_0_metallic_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: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - 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: Meshy_AI_Omega_Sentinel_biped_texture_0_metallic_0 + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 2048 + height: 2048 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 6288df86c6d39a180800000000000000 + internalID: -9103677635925538778 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: + Meshy_AI_Omega_Sentinel_biped_texture_0_metallic_0: -9103677635925538778 + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/# Prototype/Models/Sentinel/Meshy_AI_Omega_Sentinel_biped_texture_0_normal.png b/Assets/# Prototype/Models/Sentinel/Meshy_AI_Omega_Sentinel_biped_texture_0_normal.png new file mode 100644 index 0000000..b2ee856 --- /dev/null +++ b/Assets/# Prototype/Models/Sentinel/Meshy_AI_Omega_Sentinel_biped_texture_0_normal.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5d63fa75ac27db0dbb016ec60e6834a99892aaa55ae1f2dac462c7dd2e8c617a +size 7383066 diff --git a/Assets/# Prototype/Models/Sentinel/Meshy_AI_Omega_Sentinel_biped_texture_0_normal.png.meta b/Assets/# Prototype/Models/Sentinel/Meshy_AI_Omega_Sentinel_biped_texture_0_normal.png.meta new file mode 100644 index 0000000..e83c0de --- /dev/null +++ b/Assets/# Prototype/Models/Sentinel/Meshy_AI_Omega_Sentinel_biped_texture_0_normal.png.meta @@ -0,0 +1,156 @@ +fileFormatVersion: 2 +guid: a06f8d2d60b12452998d4962f5a7dade +TextureImporter: + internalIDToNameTable: + - first: + 213: 7943302472694474650 + second: Meshy_AI_Omega_Sentinel_biped_texture_0_normal_0 + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 0 + 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: 0 + spriteTessellationDetail: -1 + textureType: 1 + 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: Meshy_AI_Omega_Sentinel_biped_texture_0_normal_0 + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 2048 + height: 2048 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: a97af6473874c3e60800000000000000 + internalID: 7943302472694474650 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: + Meshy_AI_Omega_Sentinel_biped_texture_0_normal_0: 7943302472694474650 + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/# Prototype/Models/Sentinel/Meshy_AI_Omega_Sentinel_biped_texture_0_roughness.png b/Assets/# Prototype/Models/Sentinel/Meshy_AI_Omega_Sentinel_biped_texture_0_roughness.png new file mode 100644 index 0000000..8c25616 --- /dev/null +++ b/Assets/# Prototype/Models/Sentinel/Meshy_AI_Omega_Sentinel_biped_texture_0_roughness.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eaca407890866fec03eae13bf0c446493731812201bb5e78d00fe5bf4117126d +size 1228087 diff --git a/Assets/# Prototype/Models/Sentinel/Meshy_AI_Omega_Sentinel_biped_texture_0_roughness.png.meta b/Assets/# Prototype/Models/Sentinel/Meshy_AI_Omega_Sentinel_biped_texture_0_roughness.png.meta new file mode 100644 index 0000000..6cf2c6e --- /dev/null +++ b/Assets/# Prototype/Models/Sentinel/Meshy_AI_Omega_Sentinel_biped_texture_0_roughness.png.meta @@ -0,0 +1,156 @@ +fileFormatVersion: 2 +guid: 36b861cf3ee8b4d71a59d68a338181e7 +TextureImporter: + internalIDToNameTable: + - first: + 213: -6492696357863934688 + second: Meshy_AI_Omega_Sentinel_biped_texture_0_roughness_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: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - 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: Meshy_AI_Omega_Sentinel_biped_texture_0_roughness_0 + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 2048 + height: 2048 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 0253c03ff0f45e5a0800000000000000 + internalID: -6492696357863934688 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: + Meshy_AI_Omega_Sentinel_biped_texture_0_roughness_0: -6492696357863934688 + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/# Prototype/Models/Sentinel/New Material.mat b/Assets/# Prototype/Models/Sentinel/New Material.mat new file mode 100644 index 0000000..4129d5b --- /dev/null +++ b/Assets/# Prototype/Models/Sentinel/New Material.mat @@ -0,0 +1,153 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-2954861376794719690 +MonoBehaviour: + m_ObjectHideFlags: 11 + 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: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Editor::UnityEditor.Rendering.Universal.AssetVersion + version: 10 +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: New Material + m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: + - _METALLICSPECGLOSSMAP + - _NORMALMAP + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: + RenderType: Opaque + disabledShaderPasses: + - MOTIONVECTORS + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _AlphaTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BaseMap: + m_Texture: {fileID: 2800000, guid: 902e532758106440f99234d3a544c0b2, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 2800000, guid: a06f8d2d60b12452998d4962f5a7dade, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 902e532758106440f99234d3a544c0b2, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MaskTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 2800000, guid: 1582c76d04ac840fb972aab67799ec2e, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_Lightmaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_LightmapsInd: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_ShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _AddPrecomputedVelocity: 0 + - _AlphaClip: 0 + - _AlphaToMask: 0 + - _Blend: 0 + - _BlendModePreserveSpecular: 1 + - _BumpScale: 1 + - _ClearCoatMask: 0 + - _ClearCoatSmoothness: 0 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailAlbedoMapScale: 1 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _DstBlendAlpha: 0 + - _EnableExternalAlpha: 0 + - _EnvironmentReflections: 1 + - _GlossMapScale: 0 + - _Glossiness: 0 + - _GlossyReflections: 0 + - _Metallic: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.005 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _Smoothness: 0.5 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _SrcBlendAlpha: 1 + - _Surface: 0 + - _WorkflowMode: 1 + - _XRMotionVectorsPass: 1 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 1, g: 1, b: 1, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _RendererColor: {r: 1, g: 1, b: 1, a: 1} + - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} + m_BuildTextureStacks: [] + m_AllowLocking: 1 diff --git a/Assets/# Prototype/Models/Sentinel/New Material.mat.meta b/Assets/# Prototype/Models/Sentinel/New Material.mat.meta new file mode 100644 index 0000000..71355e8 --- /dev/null +++ b/Assets/# Prototype/Models/Sentinel/New Material.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 836654da5ef594e9681f0691b0796349 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Tags/Physics.meta b/Assets/Resources/Tags/Physics.meta new file mode 100644 index 0000000..fea0d3a --- /dev/null +++ b/Assets/Resources/Tags/Physics.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ade7360364f7f4d32a26c72f5de5fb86 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Tags/Physics/physics.push-back-on-impact.asset b/Assets/Resources/Tags/Physics/physics.push-back-on-impact.asset new file mode 100644 index 0000000..7ef87d3 --- /dev/null +++ b/Assets/Resources/Tags/Physics/physics.push-back-on-impact.asset @@ -0,0 +1,15 @@ +%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: 7f055b2b567a4bd89bbd4f68d5bf7bfd, type: 3} + m_Name: physics.push-back-on-impact + m_EditorClassIdentifier: Assembly-CSharp::Intrepid.Core.Tags.PhysicsTag + code: physics.push-back-on-impact diff --git a/Assets/Resources/Tags/Physics/physics.push-back-on-impact.asset.meta b/Assets/Resources/Tags/Physics/physics.push-back-on-impact.asset.meta new file mode 100644 index 0000000..2c38ba0 --- /dev/null +++ b/Assets/Resources/Tags/Physics/physics.push-back-on-impact.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e71f321142fdf4983823d6f76332183d +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/5. Gameplay.unity b/Assets/Scenes/5. Gameplay.unity index c0253dd..b3ede7f 100644 --- a/Assets/Scenes/5. Gameplay.unity +++ b/Assets/Scenes/5. Gameplay.unity @@ -231,6 +231,79 @@ MeshFilter: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 95093373} m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &120209649 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 120209650} + - component: {fileID: 120209651} + m_Layer: 0 + m_Name: DashBreaking + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &120209650 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 120209649} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1809909214} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &120209651 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 120209649} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 10b8b1e0c3064df7881d4bc80d414264, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::Intrepid.Gameplay.Entities.Sentinel.StateMachine.States.SentinelStateDashBreaking + id: acbe0d75d1de471d93e4c56dd15b19dd + startState: 0 + dashBreaking: {fileID: 44099723154497190, guid: 208cb7d0ce6444ed7b55f4c4b4e632aa, type: 3} + speed: 5 + extraTime: 0.4 + speedCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: -1 + outSlope: -1 + tangentMode: 34 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: -1 + outSlope: -1 + tangentMode: 34 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 --- !u!1 &218819659 GameObject: m_ObjectHideFlags: 0 @@ -473,6 +546,38 @@ MeshFilter: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 237773309} m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &268037253 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 268037254} + m_Layer: 0 + m_Name: Sensors + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &268037254 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 268037253} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 539500808} + m_Father: {fileID: 1478155984} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &295562926 GameObject: m_ObjectHideFlags: 0 @@ -638,6 +743,7 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 320298439} + - component: {fileID: 320298440} m_Layer: 0 m_Name: Floor m_TagString: Untagged @@ -689,6 +795,33 @@ Transform: - {fileID: 744497484} m_Father: {fileID: 1187971236} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!54 &320298440 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 320298438} + serializedVersion: 5 + m_Mass: 1 + m_LinearDamping: 0 + m_AngularDamping: 0.05 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 + m_UseGravity: 0 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 126 + m_CollisionDetection: 0 --- !u!1 &347886466 GameObject: m_ObjectHideFlags: 0 @@ -736,8 +869,8 @@ MonoBehaviour: id: 8d7466b425f94746a40aabd3dda8c785 startState: 0 dash: {fileID: 3938472908730161291, guid: 208cb7d0ce6444ed7b55f4c4b4e632aa, type: 3} - speed: 30 - targetTime: 0.25 + speed: 35 + targetTime: 0.125 --- !u!1001 &367797782 PrefabInstance: m_ObjectHideFlags: 0 @@ -746,6 +879,18 @@ PrefabInstance: serializedVersion: 3 m_TransformParent: {fileID: 1532299329} m_Modifications: + - target: {fileID: -8679921383154817045, guid: 208cb7d0ce6444ed7b55f4c4b4e632aa, type: 3} + propertyPath: m_LocalScale.x + value: 0.75 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 208cb7d0ce6444ed7b55f4c4b4e632aa, type: 3} + propertyPath: m_LocalScale.y + value: 0.75 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 208cb7d0ce6444ed7b55f4c4b4e632aa, type: 3} + propertyPath: m_LocalScale.z + value: 0.75 + objectReference: {fileID: 0} - target: {fileID: -8679921383154817045, guid: 208cb7d0ce6444ed7b55f4c4b4e632aa, type: 3} propertyPath: m_LocalPosition.x value: 0 @@ -802,6 +947,10 @@ PrefabInstance: propertyPath: m_Name value: sentinel objectReference: {fileID: 0} + - target: {fileID: 919132149155446097, guid: 208cb7d0ce6444ed7b55f4c4b4e632aa, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} - target: {fileID: 1304202997708942189, guid: 208cb7d0ce6444ed7b55f4c4b4e632aa, type: 3} propertyPath: 'm_Materials.Array.data[0]' value: @@ -1415,7 +1564,7 @@ GameObject: - component: {fileID: 539500810} - component: {fileID: 539500809} m_Layer: 0 - m_Name: EntitySensor + m_Name: Interact m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -1429,12 +1578,12 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 539500807} serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 1478155984} + m_Father: {fileID: 268037254} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &539500809 MonoBehaviour: @@ -1448,6 +1597,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: c464392c6a5944d6805bcdbc8080bdd3, type: 3} m_Name: m_EditorClassIdentifier: Assembly-CSharp::Intrepid.Core.Entities.EntitySensor + id: 4be56a83d4ae41b5aa6364c94283e1d6 tags: - {fileID: 11400000, guid: 658e05d77a47d4e9591207114542f5fa, type: 2} behaviours: [] @@ -1950,6 +2100,7 @@ GameObject: - component: {fileID: 810748573} - component: {fileID: 810748576} - component: {fileID: 810748575} + - component: {fileID: 810748578} - component: {fileID: 810748574} - component: {fileID: 810748577} m_Layer: 0 @@ -2070,6 +2221,33 @@ MonoBehaviour: - {fileID: 810748575} - {fileID: 810748575} color: {r: 0.9433962, g: 0.22694907, b: 0.30825463, a: 1} +--- !u!54 &810748578 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 810748572} + serializedVersion: 5 + m_Mass: 1 + m_LinearDamping: 0 + m_AngularDamping: 0.05 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 + m_UseGravity: 0 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 126 + m_CollisionDetection: 0 --- !u!1 &848110827 GameObject: m_ObjectHideFlags: 0 @@ -2865,7 +3043,6 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 1187971236} - - component: {fileID: 1187971237} m_Layer: 0 m_Name: Structure m_TagString: Untagged @@ -2888,35 +3065,9 @@ Transform: m_Children: - {fileID: 810748573} - {fileID: 320298439} + - {fileID: 1578847814} m_Father: {fileID: 1943926653} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!54 &1187971237 -Rigidbody: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1187971235} - serializedVersion: 5 - m_Mass: 1 - m_LinearDamping: 0 - m_AngularDamping: 0.05 - m_CenterOfMass: {x: 0, y: 0, z: 0} - m_InertiaTensor: {x: 1, y: 1, z: 1} - m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} - m_IncludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_ExcludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_ImplicitCom: 1 - m_ImplicitTensor: 1 - m_UseGravity: 0 - m_IsKinematic: 0 - m_Interpolate: 0 - m_Constraints: 126 - m_CollisionDetection: 0 --- !u!1 &1223120086 GameObject: m_ObjectHideFlags: 0 @@ -3078,7 +3229,6 @@ MonoBehaviour: fallbackProjectionY: 0 useFollowTargetY: 1 projectionYSmoothTime: 0.08 - drawDebugProjection: 1 --- !u!114 &1223120094 MonoBehaviour: m_ObjectHideFlags: 0 @@ -3448,7 +3598,6 @@ GameObject: - component: {fileID: 1372692862} - component: {fileID: 1372692865} - component: {fileID: 1372692864} - - component: {fileID: 1372692863} m_Layer: 0 m_Name: BoundaryA m_TagString: Untagged @@ -3471,19 +3620,6 @@ Transform: m_Children: [] m_Father: {fileID: 1943926653} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1372692863 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1372692861} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 8141d03c55254ee5a7409fbf76ddff16, type: 3} - m_Name: - m_EditorClassIdentifier: Assembly-CSharp::Intrepid.Core.Camera.CameraBoundaryTrigger - boundary: {fileID: 1372692864} --- !u!114 &1372692864 MonoBehaviour: m_ObjectHideFlags: 0 @@ -3518,6 +3654,57 @@ BoxCollider: serializedVersion: 3 m_Size: {x: 24.054745, y: 1, z: 16.044468} m_Center: {x: -0.014335632, y: 0, z: 3.9807591} +--- !u!1 &1405163853 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1405163854} + - component: {fileID: 1405163855} + m_Layer: 0 + m_Name: Knockdown + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1405163854 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1405163853} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1809909214} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1405163855 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1405163853} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dec1fb14cc3847378a2e1ba30d8bf3bc, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::Intrepid.Gameplay.Entities.Sentinel.StateMachine.States.SentinelStateKnockdown + id: 8a107cf1a85d4e629cdfe07659f11c7e + startState: 0 + knockdown: {fileID: -4084983065073612718, guid: 208cb7d0ce6444ed7b55f4c4b4e632aa, type: 3} + knockout: {fileID: 7716892539185763080, guid: 208cb7d0ce6444ed7b55f4c4b4e632aa, type: 3} + KnockoutTimeMultiplier: 0.1 + knockdownTime: 0.1 + recoverTime: 0.5 --- !u!1 &1434619732 GameObject: m_ObjectHideFlags: 0 @@ -3640,7 +3827,7 @@ GameObject: m_Component: - component: {fileID: 1478155984} - component: {fileID: 1478155986} - - component: {fileID: 1478155987} + - component: {fileID: 1478155991} - component: {fileID: 1478155990} - component: {fileID: 1478155989} - component: {fileID: 1478155988} @@ -3665,7 +3852,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 539500808} + - {fileID: 268037254} - {fileID: 1532299329} m_Father: {fileID: 2054429927} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -3682,6 +3869,9 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: Assembly-CSharp::Intrepid.Gameplay.Entities.Sentinel.SentinelEntity id: 12727d5dd6614d1cadf3eb6c27885dcc + tags: + - {fileID: 11400000, guid: e71f321142fdf4983823d6f76332183d, type: 2} + behaviours: [] brain: {fileID: 1179841129} entitySensor: {fileID: 539500809} unityRigidbody: {fileID: 1478155986} @@ -3717,7 +3907,54 @@ Rigidbody: m_Interpolate: 1 m_Constraints: 112 m_CollisionDetection: 2 ---- !u!136 &1478155987 +--- !u!114 &1478155988 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1478155983} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1604079e599d4e28b9c8d5dc2e5a8120, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::Intrepid.Core.Entities.EntityMotorTopDown + groundMask: + serializedVersion: 2 + m_Bits: 1 + groundCheckHeight: 1 + groundCheckDistance: 3 + groundOffset: 0 + maxSlopeAngle: 45 + groundProbeRadius: 0.25 +--- !u!114 &1478155989 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1478155983} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 43e926bf69fb436e9e6f655e95780379, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::Intrepid.Core.Entities.EntityMotorPhysicsContact + maxContactNormals: 16 + minImpactDot: 0.7 +--- !u!114 &1478155990 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1478155983} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 739f753566e8428b9b35ba08f56ca935, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::Intrepid.Core.Entities.EntityMotorSmoothRotation + turnSpeed: 1440 +--- !u!136 &1478155991 CapsuleCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -3740,52 +3977,6 @@ CapsuleCollider: m_Height: 2 m_Direction: 1 m_Center: {x: 0, y: 1, z: 0} ---- !u!114 &1478155988 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1478155983} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1604079e599d4e28b9c8d5dc2e5a8120, type: 3} - m_Name: - m_EditorClassIdentifier: Assembly-CSharp::Intrepid.Core.Entities.EntityMotorTopDown - groundMask: - serializedVersion: 2 - m_Bits: 55 - groundCheckHeight: 1 - groundCheckDistance: 3 - groundOffset: 0 - maxSlopeAngle: 45 - groundProbeRadius: 0.25 ---- !u!114 &1478155989 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1478155983} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 43e926bf69fb436e9e6f655e95780379, type: 3} - m_Name: - m_EditorClassIdentifier: Assembly-CSharp::Intrepid.Core.Entities.EntityMotorPhysicsContact - maxContactNormals: 16 ---- !u!114 &1478155990 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1478155983} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 739f753566e8428b9b35ba08f56ca935, type: 3} - m_Name: - m_EditorClassIdentifier: Assembly-CSharp::Intrepid.Core.Entities.EntityMotorSmoothRotation - turnSpeed: 720 --- !u!1 &1524378542 GameObject: m_ObjectHideFlags: 0 @@ -3797,7 +3988,6 @@ GameObject: - component: {fileID: 1524378543} - component: {fileID: 1524378546} - component: {fileID: 1524378545} - - component: {fileID: 1524378544} m_Layer: 0 m_Name: BoundaryB m_TagString: Untagged @@ -3820,19 +4010,6 @@ Transform: m_Children: [] m_Father: {fileID: 1943926653} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1524378544 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1524378542} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 8141d03c55254ee5a7409fbf76ddff16, type: 3} - m_Name: - m_EditorClassIdentifier: Assembly-CSharp::Intrepid.Core.Camera.CameraBoundaryTrigger - boundary: {fileID: 1524378545} --- !u!114 &1524378545 MonoBehaviour: m_ObjectHideFlags: 0 @@ -4045,6 +4222,162 @@ MeshFilter: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1552570364} m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1578847813 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1578847814} + - component: {fileID: 1578847817} + - component: {fileID: 1578847816} + - component: {fileID: 1578847818} + - component: {fileID: 1578847820} + - component: {fileID: 1578847815} + m_Layer: 0 + m_Name: Wall + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1578847814 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1578847813} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 12, y: 1, z: 3.5} + m_LocalScale: {x: 1, y: 3, z: 11.712} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1187971236} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1578847815 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1578847813} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1578847816 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1578847813} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_MaskInteraction: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1578847817 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1578847813} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!114 &1578847818 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1578847813} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0a0ba32e2ebe4f2eb4f2e18c11be758d, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::__Prototype.Scripts.MeshColorSetter + meshRenderers: + - {fileID: 1578847816} + color: {r: 1, g: 0, b: 0.059297085, a: 1} +--- !u!54 &1578847820 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1578847813} + serializedVersion: 5 + m_Mass: 1000 + m_LinearDamping: 0 + m_AngularDamping: 0.05 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 + m_UseGravity: 0 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 126 + m_CollisionDetection: 0 --- !u!1 &1655424713 GameObject: m_ObjectHideFlags: 0 @@ -4482,6 +4815,9 @@ Transform: - {fileID: 1265844809} - {fileID: 1869388370} - {fileID: 347886467} + - {fileID: 2103483601} + - {fileID: 120209650} + - {fileID: 1405163854} m_Father: {fileID: 1179841130} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &1809909215 @@ -5409,6 +5745,55 @@ MonoBehaviour: enterBlendTime: 1 boundsBlendTime: 0.75 exitBlendTime: 0.5 +--- !u!1 &2103483600 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2103483601} + - component: {fileID: 2103483602} + m_Layer: 0 + m_Name: DashLanding + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2103483601 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2103483600} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1809909214} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &2103483602 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2103483600} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 712e903769ee4f049d72ece02d542f92, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::Intrepid.Gameplay.Entities.Sentinel.StateMachine.States.SentinelStateDashLanding + id: 0c17966dcd3f424a929486027fa54324 + startState: 0 + dashLanding: {fileID: 9206814923105168154, guid: 208cb7d0ce6444ed7b55f4c4b4e632aa, type: 3} + speed: 15 + targetTime: 0.2 --- !u!1 &2128748248 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Scripts/Intrepid/Core/Camera/CameraBoundarTrigger.cs b/Assets/Scripts/Intrepid/Core/Camera/CameraBoundarTrigger.cs deleted file mode 100644 index e0b734b..0000000 --- a/Assets/Scripts/Intrepid/Core/Camera/CameraBoundarTrigger.cs +++ /dev/null @@ -1,36 +0,0 @@ -using Intrepid.Core.Camera.Events; -using Intrepid.GameManagers; -using Intrepid.Utilities; -using UnityEngine; - -namespace Intrepid.Core.Camera -{ - [RequireComponent(typeof(Collider))] - public sealed class CameraBoundaryTrigger : MonoBehaviour - { - [GroupInjections, SerializeField] private CameraBoundary boundary; - - private void Reset() - { - boundary = GetComponentInParent(); - - var col = GetComponent(); - col.isTrigger = true; - } - - private void OnTriggerEnter(Collider other) - { - Proxy.Instance.EventBus.Raise(new CameraBoundaryEnterEvent - { - Boundary = boundary - }); - } - - private void OnTriggerExit(Collider other) - { - Proxy.Instance.EventBus.Raise(new CameraBoundaryExitEvent - { - Boundary = boundary - }); - } - }} \ No newline at end of file diff --git a/Assets/Scripts/Intrepid/Core/Camera/CameraBoundarTrigger.cs.meta b/Assets/Scripts/Intrepid/Core/Camera/CameraBoundarTrigger.cs.meta deleted file mode 100644 index 6df8095..0000000 --- a/Assets/Scripts/Intrepid/Core/Camera/CameraBoundarTrigger.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 8141d03c55254ee5a7409fbf76ddff16 -timeCreated: 1779803052 \ No newline at end of file diff --git a/Assets/Scripts/Intrepid/Core/Camera/CameraBoundary.cs b/Assets/Scripts/Intrepid/Core/Camera/CameraBoundary.cs index 1ca6901..4caa188 100644 --- a/Assets/Scripts/Intrepid/Core/Camera/CameraBoundary.cs +++ b/Assets/Scripts/Intrepid/Core/Camera/CameraBoundary.cs @@ -1,5 +1,11 @@ +using System; +using Intrepid.Core.Camera.Events; +using Intrepid.GameManagers; using Intrepid.Utilities; using UnityEngine; +#if UNITY_EDITOR +using UnityEditor; +#endif namespace Intrepid.Core.Camera { @@ -11,17 +17,135 @@ namespace Intrepid.Core.Camera public Bounds WorldBounds => boxCollider.bounds; + private void OnTriggerEnter(Collider other) + { + Proxy.Instance.EventBus.Raise(new CameraBoundaryEnterEvent + { + Boundary = this + }); + } + + private void OnTriggerExit(Collider other) + { + Proxy.Instance.EventBus.Raise(new CameraBoundaryExitEvent + { + Boundary = this + }); + } + #if UNITY_EDITOR - private void OnDrawGizmos() + private void OnDrawGizmosSelected() + { + if (boxCollider.IsNull()) return; + DrawBoxFill(); + DrawHatchedBoxXZ(); + DrawBoxWire(); + } + + private void DrawBoxFill() { var b = boxCollider.bounds; - - Gizmos.color = new Color(0f, 1f, 1f, 0.25f); - Gizmos.DrawCube(b.center, b.size); - Gizmos.color = Color.cyan; + Gizmos.color = new Color(1f, 0f, 1f, 0.10f); // alpha + Gizmos.DrawCube(b.center, b.size); + } + + private void DrawBoxWire() + { + var b = boxCollider.bounds; + + Gizmos.color = Color.magenta; Gizmos.DrawWireCube(b.center, b.size); } + + private void DrawHatchedBoxXZ() + { + const float hatchSpacing = .5f; + + Handles.color = new Color(1f, 0f, 1f, 0.65f); // alpha + + var size = boxCollider.size; + var center = boxCollider.center; + + var minX = center.x - size.x * 0.5f; + var maxX = center.x + size.x * 0.5f; + var minZ = center.z - size.z * 0.5f; + var maxZ = center.z + size.z * 0.5f; + var y = center.y; + + var previousMatrix = Handles.matrix; + Handles.matrix = boxCollider.transform.localToWorldMatrix; + + var minC = minX - maxZ; + var maxC = maxX - minZ; + + for (var c = minC; c <= maxC; c += hatchSpacing) + { + if (TryGetDiagonalSegment( + c, + minX, + maxX, + minZ, + maxZ, + y, + out var a, + out var b)) + { + Handles.DrawLine(a, b); + } + } + + Handles.matrix = previousMatrix; + } + + private static bool TryGetDiagonalSegment( + float c, + float minX, + float maxX, + float minZ, + float maxZ, + float y, + out Vector3 a, + out Vector3 b) + { + var points = new Vector3[4]; + var count = 0; + + var xAtMinZ = c + minZ; + if (xAtMinZ >= minX && xAtMinZ <= maxX) + { + points[count++] = new Vector3(xAtMinZ, y, minZ); + } + + var xAtMaxZ = c + maxZ; + if (xAtMaxZ >= minX && xAtMaxZ <= maxX) + { + points[count++] = new Vector3(xAtMaxZ, y, maxZ); + } + + var zAtMinX = minX - c; + if (zAtMinX >= minZ && zAtMinX <= maxZ) + { + points[count++] = new Vector3(minX, y, zAtMinX); + } + + var zAtMaxX = maxX - c; + if (zAtMaxX >= minZ && zAtMaxX <= maxZ) + { + points[count++] = new Vector3(maxX, y, zAtMaxX); + } + + if (count < 2) + { + a = default; + b = default; + return false; + } + + a = points[0]; + b = points[1]; + return true; + } #endif } } \ No newline at end of file diff --git a/Assets/Scripts/Intrepid/Core/Camera/CameraGroundProjectionConfinerExtension.cs b/Assets/Scripts/Intrepid/Core/Camera/CameraGroundProjectionConfinerExtension.cs index d65c513..3d7c6fa 100644 --- a/Assets/Scripts/Intrepid/Core/Camera/CameraGroundProjectionConfinerExtension.cs +++ b/Assets/Scripts/Intrepid/Core/Camera/CameraGroundProjectionConfinerExtension.cs @@ -7,15 +7,12 @@ namespace Intrepid.Core.Camera [DisallowMultipleComponent] public sealed class CameraGroundProjectionConfinerExtension : CinemachineExtension { - //[GroupConfigurations, SerializeField] private float groundY; [GroupConfigurations, SerializeField] private bool confineX = true; [GroupConfigurations, SerializeField] private bool confineZ = true; [GroupConfigurations, SerializeField] private float fallbackProjectionY; [GroupConfigurations, SerializeField] private bool useFollowTargetY = true; [GroupConfigurations, SerializeField] private float projectionYSmoothTime = 0.08f; - [GroupDebug, SerializeField] private bool drawDebugProjection = true; - private float currentProjectionY; private float projectionYVelocity; private bool hasProjectionY; @@ -201,8 +198,6 @@ namespace Intrepid.Core.Camera #if UNITY_EDITOR private void OnDrawGizmos() { - if (!drawDebugProjection) return; - var outputCamera = CameraSystem.Instance?.MainCamera; if (outputCamera is null) return; diff --git a/Assets/Scripts/Intrepid/Core/Entities/Entity.cs b/Assets/Scripts/Intrepid/Core/Entities/Entity.cs index eb524c9..b488a9d 100644 --- a/Assets/Scripts/Intrepid/Core/Entities/Entity.cs +++ b/Assets/Scripts/Intrepid/Core/Entities/Entity.cs @@ -1,18 +1,23 @@ +using System.Collections.Generic; +using System.Linq; using Intrepid.Core.Tags; using Intrepid.Core.Updatable; +using Intrepid.TagSystem; using Intrepid.Utilities; using Intrepid.Utilities.Updatable; using UnityEngine; namespace Intrepid.Core.Entities { - public abstract class Entity : Identification, IUpdatable + public abstract class Entity : AbstractTagBehaviour, IUpdatable { [GroupInjections, SerializeField] private EntityBrain brain; [GroupInjections, SerializeField] private EntitySensor entitySensor; protected EntityBrain EntityBrain => brain; + public EntitySensor EntitySensor => entitySensor; + protected void OnEnable() { UpdateManager.Instance.Add(this); @@ -22,6 +27,7 @@ namespace Intrepid.Core.Entities { UpdateManager.Instance?.Remove(Id); } + public virtual void UpdateFromUpdatable() { @@ -38,6 +44,16 @@ namespace Intrepid.Core.Entities EntityBrain.FixedUpdateFromUpdatable(); } + public bool ShouldBeTriggered(IEnumerable entity, IEnumerable physicsTags) + { + return entity.Contains(EntitySensor.EntityTag) && HasAnyTags(physicsTags); + } + + public bool ShouldNotBeTriggered(IEnumerable entities, IEnumerable physicsTags) + { + return !ShouldBeTriggered(entities, physicsTags); + } + public abstract void DeployEntity(Vector2 position); public abstract void RetreatEntity(); } diff --git a/Assets/Scripts/Intrepid/Core/Entities/EntityCollider.cs b/Assets/Scripts/Intrepid/Core/Entities/EntityCollider.cs new file mode 100644 index 0000000..08b4329 --- /dev/null +++ b/Assets/Scripts/Intrepid/Core/Entities/EntityCollider.cs @@ -0,0 +1,56 @@ +using System.Collections.Generic; +using Intrepid.Core.Tags; +using Intrepid.Utilities; +using Sirenix.OdinInspector; +using UnityEngine; + +namespace Intrepid.Core.Entities +{ + public abstract class EntityCollider : Identification + { + [GroupInjections, SerializeField] private Collider mainCollider; + [Title("Entity we are looking for")] + [GroupConfigurations, SerializeField, PropertySpace, PropertyOrder(10)] private List entities; + [Title("The physics which at least one should be accepted")] + [GroupConfigurations, SerializeField, PropertySpace, PropertyOrder(11)] private List physicsTags; + + protected Collider MainCollider => mainCollider; + protected bool IsEnabled { get; private set; } + + private void Awake() + { + Enable(); + } + + private void OnCollisionEnter(Collision collision) + { + if (!IsEnabled) return; + if (!collision.gameObject.TryGetComponent(out var entity)) return; + if (entity.ShouldNotBeTriggered(entities, physicsTags)) return; + WhenRaiseEnterEvent(collision, entity, physicsTags); + } + + protected void OnCollisionExit(Collision collision) + { + if (!IsEnabled) return; + if (!collision.gameObject.TryGetComponent(out var entity)) return; + if (entity.ShouldNotBeTriggered(entities, physicsTags)) return; + WhenRaiseExitEvent(collision, entity); + } + + public virtual void Enable() + { + IsEnabled = true; + MainCollider.enabled = true; + } + + public virtual void Disable() + { + IsEnabled = false; + MainCollider.enabled = false; + } + + protected abstract void WhenRaiseEnterEvent(Collision collision, Entity entity, List physicsTags); + protected abstract void WhenRaiseExitEvent(Collision collision, Entity entity); + } +} \ No newline at end of file diff --git a/Assets/Scripts/Intrepid/Core/Entities/EntityCollider.cs.meta b/Assets/Scripts/Intrepid/Core/Entities/EntityCollider.cs.meta new file mode 100644 index 0000000..62a342c --- /dev/null +++ b/Assets/Scripts/Intrepid/Core/Entities/EntityCollider.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: e58d96ae2c764d2e9c9612d474ce7188 +timeCreated: 1780477370 \ No newline at end of file diff --git a/Assets/Scripts/Intrepid/Core/Entities/EntityModelAnimation.cs b/Assets/Scripts/Intrepid/Core/Entities/EntityModelAnimation.cs index 7b7d52e..a6516c1 100644 --- a/Assets/Scripts/Intrepid/Core/Entities/EntityModelAnimation.cs +++ b/Assets/Scripts/Intrepid/Core/Entities/EntityModelAnimation.cs @@ -1,3 +1,4 @@ +using System; using Intrepid.Utilities; using UnityEngine; using UnityEngine.Animations; @@ -16,65 +17,102 @@ namespace Intrepid.Core.Entities private AnimationClipPlayable currentPlayable; private AnimationClipPlayable nextPlayable; - private AnimationClip currentClip; private AnimationClip nextClip; - private int currentInput = 0; + private int currentInput; private int nextInput = 1; - private bool isFading; private float fadeDuration; private float fadeElapsed; + + public bool IsCurrent(AnimationClip clip) + { + return clip.IsNotNull() + && CurrentClip == clip + && currentPlayable.IsValid(); + } - public AnimationClip CurrentClip => currentClip; + public bool IsFadingTo(AnimationClip clip) + { + return clip.IsNotNull() + && IsFading + && nextClip == clip + && nextPlayable.IsValid(); + } - public bool IsFading => isFading; + public bool IsPlaying(AnimationClip clip) + { + return IsCurrent(clip) || IsFadingTo(clip); + } + + public AnimationClip CurrentClip { get; private set; } - public bool IsPlaying => currentPlayable.IsValid(); + public bool IsFading { get; private set; } + + public bool IsValid => currentPlayable.IsValid(); public float Time { get { if (!currentPlayable.IsValid()) + { return 0f; + } return (float)currentPlayable.GetTime(); } } - public float Length => currentClip != null ? currentClip.length : 0f; + public float Length => CurrentClip?.length ?? 0f; public float NormalizedTime { get { if (Length <= 0f) + { return 0f; + } return Time / Length; } } + public bool IsDone + { + get + { + if (!currentPlayable.IsValid()) + { + return true; + } + + return currentPlayable.IsDone(); + } + } + + // Take consideration Looping public bool IsFinished { get { - if (currentClip == null) + if (CurrentClip is null) + { return true; + } - if (currentClip.isLooping) + if (CurrentClip.isLooping) + { return false; + } - return Time >= currentClip.length; + return NormalizedTime >= 1f; } } private void Awake() { - if (animator == null) - animator = GetComponentInChildren(); - graph = PlayableGraph.Create($"{name}_AnimationGraph"); graph.SetTimeUpdateMode(DirectorUpdateMode.GameTime); @@ -91,8 +129,7 @@ namespace Intrepid.Core.Entities public void Play(AnimationClip clip, float speed = 1f) { - if (clip == null) - return; + if (clip is null) return; ClearInput(0); ClearInput(1); @@ -100,7 +137,7 @@ namespace Intrepid.Core.Entities currentInput = 0; nextInput = 1; - currentClip = clip; + CurrentClip = clip; nextClip = null; currentPlayable = AnimationClipPlayable.Create(graph, clip); @@ -112,22 +149,23 @@ namespace Intrepid.Core.Entities mixer.SetInputWeight(currentInput, 1f); mixer.SetInputWeight(nextInput, 0f); - isFading = false; + IsFading = false; } public void CrossFade(AnimationClip clip, float fadeDuration, float speed = 1f) { - if (clip == null) - return; + if (clip is null) return; - if (!currentPlayable.IsValid() || currentClip == null || fadeDuration <= 0f) + if (!currentPlayable.IsValid() || CurrentClip is null || fadeDuration <= 0f) { Play(clip, speed); return; } - if (currentClip == clip && !isFading) + if (CurrentClip == clip && !IsFading) + { return; + } ClearInput(nextInput); @@ -143,23 +181,24 @@ namespace Intrepid.Core.Entities this.fadeDuration = Mathf.Max(0.0001f, fadeDuration); fadeElapsed = 0f; - isFading = true; + IsFading = true; } private void Update() { - if (!isFading) - return; + if (!IsFading) return; fadeElapsed += UnityEngine.Time.deltaTime; - float t = Mathf.Clamp01(fadeElapsed / fadeDuration); + var t = Mathf.Clamp01(fadeElapsed / fadeDuration); mixer.SetInputWeight(currentInput, 1f - t); mixer.SetInputWeight(nextInput, t); if (t >= 1f) + { CompleteFade(); + } } private void CompleteFade() @@ -167,7 +206,7 @@ namespace Intrepid.Core.Entities ClearInput(currentInput); currentPlayable = nextPlayable; - currentClip = nextClip; + CurrentClip = nextClip; nextPlayable = default; nextClip = null; @@ -177,7 +216,7 @@ namespace Intrepid.Core.Entities (currentInput, nextInput) = (nextInput, currentInput); - isFading = false; + IsFading = false; } public void Stop() @@ -188,15 +227,15 @@ namespace Intrepid.Core.Entities currentPlayable = default; nextPlayable = default; - currentClip = null; + CurrentClip = null; nextClip = null; - isFading = false; + IsFading = false; } private void ClearInput(int input) { - Playable playable = mixer.GetInput(input); + var playable = mixer.GetInput(input); if (playable.IsValid()) { @@ -210,7 +249,9 @@ namespace Intrepid.Core.Entities private void OnDestroy() { if (graph.IsValid()) + { graph.Destroy(); + } } } } \ No newline at end of file diff --git a/Assets/Scripts/Intrepid/Core/Entities/EntityMotorPhysicsContact.cs b/Assets/Scripts/Intrepid/Core/Entities/EntityMotorPhysicsContact.cs index 0a761f8..fdc7165 100644 --- a/Assets/Scripts/Intrepid/Core/Entities/EntityMotorPhysicsContact.cs +++ b/Assets/Scripts/Intrepid/Core/Entities/EntityMotorPhysicsContact.cs @@ -6,46 +6,35 @@ namespace Intrepid.Core.Entities public class EntityMotorPhysicsContact : MonoBehaviour { private const int PASSES = 2; - + private const float DUPLICATED_NORMAL_DOT = 0.98f; + private const float MIN_WALL_NORMAL_SQR_MAGNITUDE = 0.0001f; + [GroupConfigurations, SerializeField] private int maxContactNormals = 16; - - private int MaxContactNormals => maxContactNormals; + [GroupConfigurations, SerializeField] private float minImpactDot = 0.7f; + private Vector3[] ContactNormals { get; set; } private int ContactNormalCount { get; set; } + private int MaxContactNormals => maxContactNormals; + private void Awake() { ContactNormals = new Vector3[MaxContactNormals]; } - public void NormalizeCollision(Collision collision, float maxSlopeAngle) + public void RegisterCollisionContacts(Collision collision, float maxSlopeAngle) { for (var i = 0; i < collision.contactCount; i++) { - var contactNormal = collision.GetContact(i).normal; - - // if floor or slope is walkable, don't deal as a wall - if (Vector3.Angle(contactNormal, Vector3.up) <= maxSlopeAngle) + if (!TryGetBlockingWallNormal( + collision.GetContact(i).normal, + maxSlopeAngle, + out var wallNormal)) { continue; } - // just one more constraint (ceiling...) - if (contactNormal.y < -0.01f) - { - continue; - } - - // block walls on XZ only - var wallNormal = contactNormal; - wallNormal.y = 0f; - - if (wallNormal.sqrMagnitude <= 0.0001f) - { - continue; - } - - AddContactNormal(wallNormal.normalized); + AddContactNormal(wallNormal); } } @@ -61,30 +50,120 @@ namespace Intrepid.Core.Entities 0f, desiredVelocity.y ); - return RemoveBlockedVelocity(horizontalVelocity); + + return SubtractBlockedVelocity(horizontalVelocity); } - - private void AddContactNormal(Vector3 normal) + + public bool HasImpactAgainstRegisteredContacts( + Vector3 velocity, + float minSpeed, + out Vector3 bounceDirection) { - if (ContactNormalCount >= MaxContactNormals) + bounceDirection = Vector3.zero; + + velocity.y = 0f; + + if (velocity.sqrMagnitude < minSpeed * minSpeed) { - return; + return false; } - - // evict duplicated normals + + if (ContactNormalCount <= 0) + { + return false; + } + + var direction = velocity.normalized; + + var bestImpactDot = minImpactDot; + var bestNormal = Vector3.zero; + for (var i = 0; i < ContactNormalCount; i++) { - if (Vector3.Dot(ContactNormals[i], normal) > 0.98f) + var contactNormal = ContactNormals[i]; + + var impactDot = Vector3.Dot(direction, -contactNormal); + + if (impactDot < bestImpactDot) + { + continue; + } + + bestImpactDot = impactDot; + bestNormal = contactNormal; + } + + if (bestNormal == Vector3.zero) + { + return false; + } + + bounceDirection = Vector3.Reflect(direction, bestNormal); + bounceDirection.y = 0f; + + if (bounceDirection.sqrMagnitude <= 0.0001f) + { + bounceDirection = bestNormal; + } + else + { + bounceDirection.Normalize(); + } + + return true; + } + + private static bool TryGetBlockingWallNormal( + Vector3 contactNormal, + float maxSlopeAngle, + out Vector3 wallNormal) + { + wallNormal = default; + + // Floor or walkable slope. + if (Vector3.Angle(contactNormal, Vector3.up) <= maxSlopeAngle) + { + return false; + } + + // Ceiling. + if (contactNormal.y < -0.01f) + { + return false; + } + + // Wall blocking only on XZ. + contactNormal.y = 0f; + + if (contactNormal.sqrMagnitude <= MIN_WALL_NORMAL_SQR_MAGNITUDE) + { + return false; + } + + wallNormal = contactNormal.normalized; + return true; + } + + private void AddContactNormal(Vector3 normal) + { + for (var i = 0; i < ContactNormalCount; i++) + { + if (Vector3.Dot(ContactNormals[i], normal) > DUPLICATED_NORMAL_DOT) { return; } } + if (ContactNormalCount >= MaxContactNormals) + { + return; + } + ContactNormals[ContactNormalCount] = normal; ContactNormalCount++; } - private Vector3 RemoveBlockedVelocity(Vector3 velocity) + private Vector3 SubtractBlockedVelocity(Vector3 velocity) { for (var pass = 0; pass < PASSES; pass++) { @@ -92,12 +171,14 @@ namespace Intrepid.Core.Entities { var normal = ContactNormals[i]; var intoWall = Vector3.Dot(velocity, normal); + if (intoWall < 0f) { velocity -= normal * intoWall; } } } + return velocity; } } diff --git a/Assets/Scripts/Intrepid/Core/Entities/EntityMotorSmoothRotation.cs b/Assets/Scripts/Intrepid/Core/Entities/EntityMotorSmoothRotation.cs index 9e3ee94..fad0614 100644 --- a/Assets/Scripts/Intrepid/Core/Entities/EntityMotorSmoothRotation.cs +++ b/Assets/Scripts/Intrepid/Core/Entities/EntityMotorSmoothRotation.cs @@ -5,16 +5,16 @@ namespace Intrepid.Core.Entities { public class EntityMotorSmoothRotation : MonoBehaviour { - [GroupConfigurations, SerializeField] private float turnSpeed = 720f; + [GroupConfigurations, SerializeField] private float turnSpeed = 1440f; - public void TurnModel(Transform modelTransform, Vector3 desiredForward) + public void TurnModel(Transform entityTransform, Vector3 desiredForward) { if (desiredForward.sqrMagnitude <= 0.0001f) { return; } - modelTransform.rotation = Quaternion.RotateTowards( - modelTransform.rotation, + entityTransform.rotation = Quaternion.RotateTowards( + entityTransform.rotation, Quaternion.LookRotation(desiredForward, Vector3.up), turnSpeed * Time.deltaTime ); diff --git a/Assets/Scripts/Intrepid/Core/Entities/EntitySensor.cs b/Assets/Scripts/Intrepid/Core/Entities/EntitySensor.cs index d670d1c..c021ed7 100644 --- a/Assets/Scripts/Intrepid/Core/Entities/EntitySensor.cs +++ b/Assets/Scripts/Intrepid/Core/Entities/EntitySensor.cs @@ -14,12 +14,14 @@ namespace Intrepid.Core.Entities [Title("I am a...")] [GroupConfigurations, SerializeField] private EntityTag entityTag; + public Entity Entity { get; set; } public SphereCollider Collider { get; private set; } public EntityTag EntityTag => entityTag; public bool IsEnabled { get; private set; } private void Awake() { + Entity = GetComponentInParent(); Collider = GetComponent(); Collider.isTrigger = true; IsEnabled = true; diff --git a/Assets/Scripts/Intrepid/Core/Entities/EntityState.cs b/Assets/Scripts/Intrepid/Core/Entities/EntityState.cs index fdc7d23..a23d31f 100644 --- a/Assets/Scripts/Intrepid/Core/Entities/EntityState.cs +++ b/Assets/Scripts/Intrepid/Core/Entities/EntityState.cs @@ -19,7 +19,7 @@ namespace Intrepid.Core.Entities public abstract TKey GetStateKey(); public abstract TImplementation Implementation(); protected abstract void Subscriptions(); - protected abstract void RunOnEnter(ParameterStore parameterStore); + protected abstract void RunOnEnter(ParameterStore ps); protected abstract void RunOnExit(); protected void Subscribe(Action action) where TEvent : IEventBase diff --git a/Assets/Scripts/Intrepid/Core/Tags/BehaviourTag.cs b/Assets/Scripts/Intrepid/Core/Tags/BehaviourTag.cs index 5e0e3d2..1092c23 100644 --- a/Assets/Scripts/Intrepid/Core/Tags/BehaviourTag.cs +++ b/Assets/Scripts/Intrepid/Core/Tags/BehaviourTag.cs @@ -5,7 +5,7 @@ using UnityEngine; namespace Intrepid.Core.Tags { [Serializable] - [CreateAssetMenu(fileName = "New Behaviour Tag", menuName = "GON/Tag/Behaviour Tag")] + [CreateAssetMenu(fileName = "New Behaviour Tag", menuName = "GON/Tags/Behaviour Tag")] public class BehaviourTag : Tag { } diff --git a/Assets/Scripts/Intrepid/Core/Tags/EntityTag.cs b/Assets/Scripts/Intrepid/Core/Tags/EntityTag.cs index b665739..f3b75d1 100644 --- a/Assets/Scripts/Intrepid/Core/Tags/EntityTag.cs +++ b/Assets/Scripts/Intrepid/Core/Tags/EntityTag.cs @@ -5,7 +5,7 @@ using UnityEngine; namespace Intrepid.Core.Tags { [Serializable] - [CreateAssetMenu(fileName = "New Entity Tag", menuName = "GON/Tag/Entity Tag")] + [CreateAssetMenu(fileName = "New Entity Tag", menuName = "GON/Tags/Entity Tag")] public class EntityTag : Tag { } diff --git a/Assets/Scripts/Intrepid/Core/Tags/PhysicsTag.cs b/Assets/Scripts/Intrepid/Core/Tags/PhysicsTag.cs new file mode 100644 index 0000000..8af8730 --- /dev/null +++ b/Assets/Scripts/Intrepid/Core/Tags/PhysicsTag.cs @@ -0,0 +1,12 @@ +using System; +using Intrepid.TagSystem; +using UnityEngine; + +namespace Intrepid.Core.Tags +{ + [Serializable] + [CreateAssetMenu(fileName = "New Physics Tag", menuName = "GON/Tags/Physics Tag")] + public class PhysicsTag : Tag + { + } +} \ No newline at end of file diff --git a/Assets/Scripts/Intrepid/Core/Tags/PhysicsTag.cs.meta b/Assets/Scripts/Intrepid/Core/Tags/PhysicsTag.cs.meta new file mode 100644 index 0000000..4f13266 --- /dev/null +++ b/Assets/Scripts/Intrepid/Core/Tags/PhysicsTag.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 7f055b2b567a4bd89bbd4f68d5bf7bfd +timeCreated: 1780474720 \ No newline at end of file diff --git a/Assets/Scripts/Intrepid/Gameplay/Entities/Sentinel/SentinelBrain.cs b/Assets/Scripts/Intrepid/Gameplay/Entities/Sentinel/SentinelBrain.cs index 938a017..6f8dcfe 100644 --- a/Assets/Scripts/Intrepid/Gameplay/Entities/Sentinel/SentinelBrain.cs +++ b/Assets/Scripts/Intrepid/Gameplay/Entities/Sentinel/SentinelBrain.cs @@ -1,6 +1,7 @@ using Intrepid.Core.Entities; using Intrepid.Gameplay.Entities.Sentinel.StateMachine; using Intrepid.Integration.Input; +using Intrepid.Structures; namespace Intrepid.Gameplay.Entities.Sentinel { @@ -47,9 +48,9 @@ namespace Intrepid.Gameplay.Entities.Sentinel StateMachine.CurrentImplementation.RunOnFixedUpdate(); } - public void ChangeState(SentinelStateType stateType) + public void ChangeState(SentinelStateType stateType, params Parameter[] ps) { - StateMachine.ChangeState(stateType); + StateMachine.ChangeState(stateType, ps); } } } \ No newline at end of file diff --git a/Assets/Scripts/Intrepid/Gameplay/Entities/Sentinel/SentinelConstants.cs b/Assets/Scripts/Intrepid/Gameplay/Entities/Sentinel/SentinelConstants.cs new file mode 100644 index 0000000..9ed4a35 --- /dev/null +++ b/Assets/Scripts/Intrepid/Gameplay/Entities/Sentinel/SentinelConstants.cs @@ -0,0 +1,10 @@ +namespace Intrepid.Gameplay.Entities.Sentinel +{ + public sealed class SentinelConstants + { + public sealed class Parameters + { + public const string KnockdownForce = "KnockdownForce"; + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Intrepid/Gameplay/Entities/Sentinel/SentinelConstants.cs.meta b/Assets/Scripts/Intrepid/Gameplay/Entities/Sentinel/SentinelConstants.cs.meta new file mode 100644 index 0000000..03c82b4 --- /dev/null +++ b/Assets/Scripts/Intrepid/Gameplay/Entities/Sentinel/SentinelConstants.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 8a31da5e82e44a058712704a0258dae6 +timeCreated: 1780563700 \ No newline at end of file diff --git a/Assets/Scripts/Intrepid/Gameplay/Entities/Sentinel/SentinelEntity.cs b/Assets/Scripts/Intrepid/Gameplay/Entities/Sentinel/SentinelEntity.cs index 24339ce..22592c3 100644 --- a/Assets/Scripts/Intrepid/Gameplay/Entities/Sentinel/SentinelEntity.cs +++ b/Assets/Scripts/Intrepid/Gameplay/Entities/Sentinel/SentinelEntity.cs @@ -1,4 +1,7 @@ +using System; using Intrepid.Core.Entities; +using Intrepid.GameManagers; +using Intrepid.Gameplay.Messages.Events; using Intrepid.Utilities; using UnityEngine; @@ -14,14 +17,16 @@ namespace Intrepid.Gameplay.Entities.Sentinel [GroupInjections, SerializeField] private EntityMotorTopDown motorTopDown; private Vector3 _desiredForward = Vector3.forward; + private Vector3 _intendedDesiredVelocity = Vector3.zero; + private Rigidbody UnityRigidbody => unityRigidbody; - // private SentinelBrain Brain => EntityBrain as SentinelBrain; private EntityMotorSmoothRotation MotorSmoothRotation => motorSmoothRotation; - private EntityMotorPhysicsContact MotorPhysicsContact => motorPhysicsContact; + public EntityMotorPhysicsContact MotorPhysicsContact => motorPhysicsContact; private EntityMotorTopDown MotorTopDown => motorTopDown; public EntityModelAnimation ModelAnimation => modelAnimation; public Vector2 DesiredVelocity { get; set; } + public Vector3 LinearVelocity { get; private set; } public Vector2 Forward => new(_desiredForward.x, _desiredForward.z); public override void DeployEntity(Vector2 position) @@ -32,13 +37,9 @@ namespace Intrepid.Gameplay.Entities.Sentinel { } - public void ChangeModelAnimation(SentinelStateType stateType) - { - } - public void ChangeOrientation(Vector2 direction) { - if (direction.sqrMagnitude <= 0.0001f) + if (direction.sqrMagnitude <= 0.01f) { return; } @@ -51,21 +52,42 @@ namespace Intrepid.Gameplay.Entities.Sentinel public override void UpdateFromUpdatable() { - MotorSmoothRotation.TurnModel(modelTransform, _desiredForward); + modelTransform.rotation = Quaternion.LookRotation(_desiredForward, Vector3.up); + //MotorSmoothRotation.TurnModel(modelTransform, _desiredForward); base.UpdateFromUpdatable(); } public override void FixedUpdateFromUpdatable() { base.FixedUpdateFromUpdatable(); - var resolvedVelocity = MotorPhysicsContact.AdjustVelocityByContacts(DesiredVelocity); - MotorTopDown.Move(UnityRigidbody, resolvedVelocity); + _intendedDesiredVelocity = new Vector3(DesiredVelocity.x, 0, DesiredVelocity.y); + LinearVelocity = MotorPhysicsContact.AdjustVelocityByContacts(DesiredVelocity); + MotorTopDown.Move(UnityRigidbody, LinearVelocity); MotorPhysicsContact.ResetContactCounter(); } - private void OnCollisionStay(Collision other) + private void OnCollisionEnter(Collision collision) { - MotorPhysicsContact.NormalizeCollision(other, MotorTopDown.MaxSlopeAngle); + MotorPhysicsContact.RegisterCollisionContacts(collision, MotorTopDown.MaxSlopeAngle); + TryRaiseImpact(LinearVelocity); + } + + private void OnCollisionStay(Collision collision) + { + MotorPhysicsContact.RegisterCollisionContacts(collision, MotorTopDown.MaxSlopeAngle); + TryRaiseImpact(_intendedDesiredVelocity); + } + + private void TryRaiseImpact(Vector3 intendedVelocity) + { + if (MotorPhysicsContact.HasImpactAgainstRegisteredContacts(intendedVelocity, 25f, out var bounceDirection)) + { + var force = new Vector2(bounceDirection.x, bounceDirection.z) * intendedVelocity.magnitude; + Proxy.Instance.EventBus.Raise(new ForceBackOnImpactEvent + { + Force = force, + }); + } } } } \ No newline at end of file diff --git a/Assets/Scripts/Intrepid/Gameplay/Entities/Sentinel/SentinelStateType.cs b/Assets/Scripts/Intrepid/Gameplay/Entities/Sentinel/SentinelStateType.cs index a2b99a1..7879fe1 100644 --- a/Assets/Scripts/Intrepid/Gameplay/Entities/Sentinel/SentinelStateType.cs +++ b/Assets/Scripts/Intrepid/Gameplay/Entities/Sentinel/SentinelStateType.cs @@ -11,5 +11,12 @@ namespace Intrepid.Gameplay.Entities.Sentinel Run = 30, Dash = 40, + DashLanding = 41, + DashBreaking = 42, + + Knockdown = 80, + + Fall = 90, + FallLanding = 91, } } \ No newline at end of file diff --git a/Assets/Scripts/Intrepid/Gameplay/Entities/Sentinel/StateMachine/States/SentinelStateDash.cs b/Assets/Scripts/Intrepid/Gameplay/Entities/Sentinel/StateMachine/States/SentinelStateDash.cs index a67756b..e9ad6bf 100644 --- a/Assets/Scripts/Intrepid/Gameplay/Entities/Sentinel/StateMachine/States/SentinelStateDash.cs +++ b/Assets/Scripts/Intrepid/Gameplay/Entities/Sentinel/StateMachine/States/SentinelStateDash.cs @@ -1,3 +1,4 @@ +using Intrepid.Gameplay.Messages.Events; using Intrepid.Structures; using Intrepid.Utilities; using UnityEngine; @@ -8,7 +9,7 @@ namespace Intrepid.Gameplay.Entities.Sentinel.StateMachine.States { [GroupConfigurations, SerializeField] private AnimationClip dash; [GroupConfigurations, SerializeField, Range(0, 100)] private float speed = 30; - [GroupConfigurations, SerializeField, Range(0, 10)] private float targetTime = 1.5f; + [GroupConfigurations, SerializeField, Range(0, 10)] private float targetTime = .15f; private Timer Timer { get; } = new(); @@ -19,12 +20,17 @@ namespace Intrepid.Gameplay.Entities.Sentinel.StateMachine.States protected override void Subscriptions() { + Subscribe(e => + { + Brain.ChangeState(SentinelStateType.Knockdown, + Parameter.With(SentinelConstants.Parameters.KnockdownForce, e.Force)); + }); } protected override void RunOnEnter(ParameterStore parameterStore) { + Brain.Entity.ChangeOrientation(Brain.Inputs.Movement()); Brain.Entity.ModelAnimation.CrossFade(dash, 0.01f); - Brain.Entity.ChangeModelAnimation(SentinelStateType.Dash); Timer.Start(); } @@ -37,7 +43,7 @@ namespace Intrepid.Gameplay.Entities.Sentinel.StateMachine.States { if (Timer.IsNotRunning) { - Brain.ChangeState(SentinelStateType.Idle); + Brain.ChangeState(SentinelStateType.DashLanding); return; } Timer.Update(Time.deltaTime); diff --git a/Assets/Scripts/Intrepid/Gameplay/Entities/Sentinel/StateMachine/States/SentinelStateDashBreaking.cs b/Assets/Scripts/Intrepid/Gameplay/Entities/Sentinel/StateMachine/States/SentinelStateDashBreaking.cs new file mode 100644 index 0000000..d75afed --- /dev/null +++ b/Assets/Scripts/Intrepid/Gameplay/Entities/Sentinel/StateMachine/States/SentinelStateDashBreaking.cs @@ -0,0 +1,64 @@ +using Intrepid.Structures; +using Intrepid.Utilities; +using UnityEngine; + +namespace Intrepid.Gameplay.Entities.Sentinel.StateMachine.States +{ + public class SentinelStateDashBreaking : SentinelState + { + [GroupConfigurations, SerializeField] private AnimationClip dashBreaking; + [GroupConfigurations, SerializeField, Range(5, 30)] private float speed = 10; + [GroupConfigurations, SerializeField, Range(0, 2)] private float extraTime = 0.5f; + [GroupConfigurations, SerializeField] private AnimationCurve speedCurve; + + private Timer Timer { get; } = new(); + + public override SentinelStateType GetStateKey() + { + return SentinelStateType.DashBreaking; + } + + protected override void Subscriptions() + { + } + + protected override void RunOnEnter(ParameterStore parameterStore) + { + Brain.Entity.ModelAnimation.Play(dashBreaking); + Timer.Stop(); + } + + protected override void RunOnExit() + { + Brain.Entity.DesiredVelocity = Vector2.zero; + Timer.Stop(); + } + + public override void RunOnUpdate() + { + if (Brain.Entity.ModelAnimation.IsFinished) + { + if (Timer.IsNotRunning) + { + Brain.Entity.DesiredVelocity = Vector2.zero; + Timer.Start(); + return; + } + } + else + { + Brain.Entity.DesiredVelocity = Brain.Entity.Forward * speed; + } + + if (Timer.IsNotRunning) return; + Timer.Update(Time.deltaTime); + var evaluation = speedCurve.Evaluate((float) Timer.ElapsedTime / extraTime); + Brain.Entity.DesiredVelocity = Brain.Entity.Forward * (speed * evaluation); + if (Timer.Check(extraTime)) + { + Timer.Stop(); + Brain.ChangeState(SentinelStateType.Idle); + } + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Intrepid/Gameplay/Entities/Sentinel/StateMachine/States/SentinelStateDashBreaking.cs.meta b/Assets/Scripts/Intrepid/Gameplay/Entities/Sentinel/StateMachine/States/SentinelStateDashBreaking.cs.meta new file mode 100644 index 0000000..4ed42f6 --- /dev/null +++ b/Assets/Scripts/Intrepid/Gameplay/Entities/Sentinel/StateMachine/States/SentinelStateDashBreaking.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 10b8b1e0c3064df7881d4bc80d414264 +timeCreated: 1780466086 \ No newline at end of file diff --git a/Assets/Scripts/Intrepid/Gameplay/Entities/Sentinel/StateMachine/States/SentinelStateDashLanding.cs b/Assets/Scripts/Intrepid/Gameplay/Entities/Sentinel/StateMachine/States/SentinelStateDashLanding.cs new file mode 100644 index 0000000..849ba14 --- /dev/null +++ b/Assets/Scripts/Intrepid/Gameplay/Entities/Sentinel/StateMachine/States/SentinelStateDashLanding.cs @@ -0,0 +1,62 @@ +using Intrepid.Structures; +using Intrepid.Utilities; +using UnityEngine; + +namespace Intrepid.Gameplay.Entities.Sentinel.StateMachine.States +{ + public class SentinelStateDashLanding : SentinelState + { + [GroupConfigurations, SerializeField] private AnimationClip dashLanding; + [GroupConfigurations, SerializeField, Range(0, 30)] private float speed = 15; + [GroupConfigurations, SerializeField, Range(0, 10)] private float targetTime = .25f; + + private Timer Timer { get; } = new(); + + public override SentinelStateType GetStateKey() + { + return SentinelStateType.DashLanding; + } + + protected override void Subscriptions() + { + } + + protected override void RunOnEnter(ParameterStore parameterStore) + { + Brain.Entity.ModelAnimation.Play(dashLanding); + Timer.Start(); + } + + protected override void RunOnExit() + { + Timer.Stop(); + } + + public override void RunOnUpdate() + { + if (CheckDash()) return; + if (Timer.IsNotRunning) + { + Brain.ChangeState(SentinelStateType.DashBreaking); + return; + } + Timer.Update(Time.deltaTime); + if (Timer.Check(targetTime)) + { + Timer.Stop(); + return; + } + Brain.Entity.DesiredVelocity = Brain.Entity.Forward * speed; + } + + private bool CheckDash() + { + if (Brain.Inputs.Dash()) + { + Brain.ChangeState(SentinelStateType.Dash); + return true; + } + return false; + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Intrepid/Gameplay/Entities/Sentinel/StateMachine/States/SentinelStateDashLanding.cs.meta b/Assets/Scripts/Intrepid/Gameplay/Entities/Sentinel/StateMachine/States/SentinelStateDashLanding.cs.meta new file mode 100644 index 0000000..fe7a1f8 --- /dev/null +++ b/Assets/Scripts/Intrepid/Gameplay/Entities/Sentinel/StateMachine/States/SentinelStateDashLanding.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 712e903769ee4f049d72ece02d542f92 +timeCreated: 1780465689 \ No newline at end of file diff --git a/Assets/Scripts/Intrepid/Gameplay/Entities/Sentinel/StateMachine/States/SentinelStateIdle.cs b/Assets/Scripts/Intrepid/Gameplay/Entities/Sentinel/StateMachine/States/SentinelStateIdle.cs index 5ee0f31..6106f00 100644 --- a/Assets/Scripts/Intrepid/Gameplay/Entities/Sentinel/StateMachine/States/SentinelStateIdle.cs +++ b/Assets/Scripts/Intrepid/Gameplay/Entities/Sentinel/StateMachine/States/SentinelStateIdle.cs @@ -21,7 +21,6 @@ namespace Intrepid.Gameplay.Entities.Sentinel.StateMachine.States protected override void RunOnEnter(ParameterStore parameterStore) { Brain.Entity.ModelAnimation.CrossFade(idle, 0.2f); - Brain.Entity.ChangeModelAnimation(SentinelStateType.Idle); Brain.Entity.DesiredVelocity = Vector2.zero; } diff --git a/Assets/Scripts/Intrepid/Gameplay/Entities/Sentinel/StateMachine/States/SentinelStateKnockdown.cs b/Assets/Scripts/Intrepid/Gameplay/Entities/Sentinel/StateMachine/States/SentinelStateKnockdown.cs new file mode 100644 index 0000000..ab986a0 --- /dev/null +++ b/Assets/Scripts/Intrepid/Gameplay/Entities/Sentinel/StateMachine/States/SentinelStateKnockdown.cs @@ -0,0 +1,94 @@ +using Intrepid.Structures; +using Intrepid.Utilities; +using UnityEngine; + +namespace Intrepid.Gameplay.Entities.Sentinel.StateMachine.States +{ + public class SentinelStateKnockdown : SentinelState + { + [GroupConfigurations, SerializeField] private AnimationClip knockdown; + [GroupConfigurations, SerializeField] private AnimationClip knockout; + [GroupConfigurations, SerializeField] private float KnockoutTimeMultiplier = 0.1f; + [GroupConfigurations, SerializeField, Range(0, 3)] private float knockdownTime = 2.0f; + [GroupConfigurations, SerializeField, Range(0, 3)] private float recoverTime = 1.5f; + + private Vector2 KnockdownForce { get; set; } + private float KnockoutTime { get; set; } + private Timer KnockdownTimer { get; } = new(); + private Timer KnockoutTimer { get; } = new(); + private Timer RecoverTimer { get; } = new(); + + public override SentinelStateType GetStateKey() + { + return SentinelStateType.Knockdown; + } + + protected override void Subscriptions() + { + } + + protected override void RunOnEnter(ParameterStore ps) + { + Brain.Entity.ModelAnimation.CrossFade(knockdown, 0.1f); + KnockdownForce = ps.Get(SentinelConstants.Parameters.KnockdownForce); + Brain.Entity.ChangeOrientation(-KnockdownForce.normalized); + KnockoutTime = KnockdownForce.sqrMagnitude * KnockoutTimeMultiplier; + Brain.Entity.DesiredVelocity = KnockdownForce; + KnockdownTimer.Start(); + KnockoutTimer.Stop(); + RecoverTimer.Stop(); + } + + protected override void RunOnExit() + { + } + + public override void RunOnUpdate() + { + if (RecoverTimer.IsRunning) + { + RecoverTimer.Update(Timer.ScaledTime); + if (RecoverTimer.Check(recoverTime)) + { + RecoverTimer.Stop(); + Brain.ChangeState(SentinelStateType.Idle); + } + + return; + } + + if (KnockoutTimer.IsRunning) + { + KnockoutTimer.Update(Timer.ScaledTime); + if (KnockoutTimer.Check(recoverTime)) + { + KnockoutTimer.Stop(); + RecoverTimer.Start(); + } + + return; + } + + if (KnockdownTimer.IsNotRunning) + { + if (Brain.Entity.ModelAnimation.IsPlaying(knockout)) + { + if (Brain.Entity.ModelAnimation.IsFinished) + { + KnockoutTimer.Start(); + Brain.Entity.DesiredVelocity = Vector2.zero; + } + } + + return; + } + + KnockdownTimer.Update(Timer.ScaledTime); + if (KnockdownTimer.Check(knockdownTime)) + { + KnockdownTimer.Stop(); + Brain.Entity.ModelAnimation.CrossFade(knockout, 0.1f); + } + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Intrepid/Gameplay/Entities/Sentinel/StateMachine/States/SentinelStateKnockdown.cs.meta b/Assets/Scripts/Intrepid/Gameplay/Entities/Sentinel/StateMachine/States/SentinelStateKnockdown.cs.meta new file mode 100644 index 0000000..1624dca --- /dev/null +++ b/Assets/Scripts/Intrepid/Gameplay/Entities/Sentinel/StateMachine/States/SentinelStateKnockdown.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: dec1fb14cc3847378a2e1ba30d8bf3bc +timeCreated: 1780561717 \ No newline at end of file diff --git a/Assets/Scripts/Intrepid/Gameplay/Entities/Sentinel/StateMachine/States/SentinelStateRun.cs b/Assets/Scripts/Intrepid/Gameplay/Entities/Sentinel/StateMachine/States/SentinelStateRun.cs index 19c0de7..b6554c1 100644 --- a/Assets/Scripts/Intrepid/Gameplay/Entities/Sentinel/StateMachine/States/SentinelStateRun.cs +++ b/Assets/Scripts/Intrepid/Gameplay/Entities/Sentinel/StateMachine/States/SentinelStateRun.cs @@ -23,7 +23,6 @@ namespace Intrepid.Gameplay.Entities.Sentinel.StateMachine.States protected override void RunOnEnter(ParameterStore parameterStore) { Brain.Entity.ModelAnimation.CrossFade(run, 0.1f); - Brain.Entity.ChangeModelAnimation(SentinelStateType.Run); } protected override void RunOnExit() diff --git a/Assets/Scripts/Intrepid/Gameplay/Entities/Sentinel/StateMachine/States/SentinelStateWalk.cs b/Assets/Scripts/Intrepid/Gameplay/Entities/Sentinel/StateMachine/States/SentinelStateWalk.cs index 009c9e9..725219b 100644 --- a/Assets/Scripts/Intrepid/Gameplay/Entities/Sentinel/StateMachine/States/SentinelStateWalk.cs +++ b/Assets/Scripts/Intrepid/Gameplay/Entities/Sentinel/StateMachine/States/SentinelStateWalk.cs @@ -23,7 +23,6 @@ namespace Intrepid.Gameplay.Entities.Sentinel.StateMachine.States protected override void RunOnEnter(ParameterStore parameterStore) { Brain.Entity.ModelAnimation.CrossFade(walk, 0.15f); - Brain.Entity.ChangeModelAnimation(SentinelStateType.Walk); } protected override void RunOnExit() diff --git a/Assets/Scripts/Intrepid/Gameplay/Messages.meta b/Assets/Scripts/Intrepid/Gameplay/Messages.meta new file mode 100644 index 0000000..a275490 --- /dev/null +++ b/Assets/Scripts/Intrepid/Gameplay/Messages.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: ff892e2a13ea49c08ea9dca213fafb6a +timeCreated: 1780477050 \ No newline at end of file diff --git a/Assets/Scripts/Intrepid/Gameplay/Messages/Events.meta b/Assets/Scripts/Intrepid/Gameplay/Messages/Events.meta new file mode 100644 index 0000000..5066105 --- /dev/null +++ b/Assets/Scripts/Intrepid/Gameplay/Messages/Events.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: f4a9672231414939926d322b1d138287 +timeCreated: 1780477050 \ No newline at end of file diff --git a/Assets/Scripts/Intrepid/Gameplay/Messages/Events/ForceBackOnImpactEvent.cs b/Assets/Scripts/Intrepid/Gameplay/Messages/Events/ForceBackOnImpactEvent.cs new file mode 100644 index 0000000..5ea3840 --- /dev/null +++ b/Assets/Scripts/Intrepid/Gameplay/Messages/Events/ForceBackOnImpactEvent.cs @@ -0,0 +1,10 @@ +using Intrepid.SimpleEvents; +using UnityEngine; + +namespace Intrepid.Gameplay.Messages.Events +{ + public class ForceBackOnImpactEvent : IEventBase + { + public Vector2 Force { get; set; } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Intrepid/Gameplay/Messages/Events/ForceBackOnImpactEvent.cs.meta b/Assets/Scripts/Intrepid/Gameplay/Messages/Events/ForceBackOnImpactEvent.cs.meta new file mode 100644 index 0000000..1711e8f --- /dev/null +++ b/Assets/Scripts/Intrepid/Gameplay/Messages/Events/ForceBackOnImpactEvent.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 1bed4dda5bfe4399b9df5711bdcaf004 +timeCreated: 1780475778 \ No newline at end of file