diff --git a/Assets/Prefabs/Defect Detector.prefab b/Assets/Prefabs/Defect Detector.prefab new file mode 100644 index 0000000..0954360 --- /dev/null +++ b/Assets/Prefabs/Defect Detector.prefab @@ -0,0 +1,447 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &252955488197154210 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 743343660021192500} + - component: {fileID: 5143998558000999716} + - component: {fileID: 4251451863005836050} + - component: {fileID: 7252100960486772379} + m_Layer: 0 + m_Name: Cube (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &743343660021192500 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 252955488197154210} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.000000029802322, y: 0.5625, z: 0.00000017881393} + m_LocalScale: {x: 0.75, y: 0.125, z: 1.7500126} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 418972016787197328} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &5143998558000999716 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 252955488197154210} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &4251451863005836050 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 252955488197154210} + 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_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + 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_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &7252100960486772379 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 252955488197154210} + 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!1 &4839257370682851236 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3297724367138532451} + - component: {fileID: 9092225193248358941} + - component: {fileID: 5650687160744835474} + - component: {fileID: 4016048796068961818} + m_Layer: 0 + m_Name: Cube (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3297724367138532451 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4839257370682851236} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.000000014901161, y: 0, z: -0.75} + m_LocalScale: {x: 0.75, y: 1, z: 0.25001252} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 418972016787197328} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &9092225193248358941 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4839257370682851236} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &5650687160744835474 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4839257370682851236} + 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_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + 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_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &4016048796068961818 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4839257370682851236} + 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!1 &8140899253408661228 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 418972016787197328} + - component: {fileID: 8499163723211625772} + - component: {fileID: 3988703939439567087} + - component: {fileID: 9052827441617330997} + - component: {fileID: 8967374450020560052} + m_Layer: 0 + m_Name: Defect Detector + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &418972016787197328 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8140899253408661228} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.125, y: 0.75, z: -0.375} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2119179403709042533} + - {fileID: 743343660021192500} + - {fileID: 3297724367138532451} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &8499163723211625772 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8140899253408661228} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: af3e57595c24e7b4dbb6f7f44db23525, type: 3} + m_Name: + m_EditorClassIdentifier: + Size: + x: 3 + y: 4 + z: 7 + CenterOffset: + x: 0 + y: 0 + z: 0 + cachedSize: + x: 3 + y: 4 + z: 7 + cachedOffset: + x: 0 + y: 0 + z: 0 +--- !u!65 &3988703939439567087 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8140899253408661228} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 1 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 0.75, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &9052827441617330997 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8140899253408661228} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e00ad13b6427460abe6c3aec6566b6e5, type: 3} + m_Name: + m_EditorClassIdentifier: + AlarmEvent: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 8967374450020560052} + m_TargetAssemblyTypeName: AudioAlarm, Assembly-CSharp + m_MethodName: PlayAlarm + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + FalsePositiveChance: 0 + FalseNegativeChance: 0 + _detectedDefects: [] +--- !u!114 &8967374450020560052 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8140899253408661228} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c996d1be4ecb4e8d92bc4344f7f98854, type: 3} + m_Name: + m_EditorClassIdentifier: + Duration: 0 +--- !u!1 &8680690869305499051 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2119179403709042533} + - component: {fileID: 3293368558078158425} + - component: {fileID: 8192309583424653981} + - component: {fileID: 6638011114874848388} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2119179403709042533 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8680690869305499051} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.000000014901161, y: 0, z: 0.75} + m_LocalScale: {x: 0.75, y: 1, z: 0.25001252} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 418972016787197328} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &3293368558078158425 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8680690869305499051} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &8192309583424653981 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8680690869305499051} + 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_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + 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_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &6638011114874848388 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8680690869305499051} + 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} diff --git a/Assets/Prefabs/Defect Detector.prefab.meta b/Assets/Prefabs/Defect Detector.prefab.meta new file mode 100644 index 0000000..f1c22c5 --- /dev/null +++ b/Assets/Prefabs/Defect Detector.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 164bcef21fc47d947ac09a8922e04c53 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Machines/AudioAlarm.cs b/Assets/Scripts/Machines/AudioAlarm.cs new file mode 100644 index 0000000..c45eefb --- /dev/null +++ b/Assets/Scripts/Machines/AudioAlarm.cs @@ -0,0 +1,13 @@ +using UnityEngine; + +public class AudioAlarm : MonoBehaviour +{ + public float Duration; + + private bool _isPlaying; + + public void PlayAlarm() + { + Debug.Log("Playing alarm"); + } +} \ No newline at end of file diff --git a/Assets/Scripts/Machines/AudioAlarm.cs.meta b/Assets/Scripts/Machines/AudioAlarm.cs.meta new file mode 100644 index 0000000..9c43040 --- /dev/null +++ b/Assets/Scripts/Machines/AudioAlarm.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: c996d1be4ecb4e8d92bc4344f7f98854 +timeCreated: 1723921340 \ No newline at end of file diff --git a/Assets/Scripts/Machines/StationaryDefectDetector.cs b/Assets/Scripts/Machines/StationaryDefectDetector.cs new file mode 100644 index 0000000..f82a818 --- /dev/null +++ b/Assets/Scripts/Machines/StationaryDefectDetector.cs @@ -0,0 +1,59 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Events; + +public class StationaryDefectDetector : MonoBehaviour +{ + public UnityEvent AlarmEvent; + + [Range(0, 100)] + public int FalsePositiveChance; + [Range(0, 100)] + public int FalseNegativeChance; + + public List _detectedDefects; + + private void OnTriggerEnter(Collider other) + { + if (other.TryGetComponent(out Product product)) + { + if (_detectedDefects.Contains(product)) + { + return; + } + + _detectedDefects.Add(product); + + if (other.TryGetComponent(out DefectiveProduct defectiveProduct)) + { + var falseNegativeRoll = Random.Range(0, 100); + + if (falseNegativeRoll > FalseNegativeChance) + { + AlarmEvent.Invoke(); + } + } + else + { + var falsePositiveRoll = Random.Range(0, 100); + + if (falsePositiveRoll < FalsePositiveChance) + { + AlarmEvent.Invoke(); + } + } + } + } + + private void OnTriggerExit(Collider other) + { + if (other.TryGetComponent(out DefectiveProduct product)) + { + if (_detectedDefects.Contains(product)) + { + _detectedDefects.Remove(product); + } + } + } +} diff --git a/Assets/Scripts/Machines/StationaryDefectDetector.cs.meta b/Assets/Scripts/Machines/StationaryDefectDetector.cs.meta new file mode 100644 index 0000000..7941de9 --- /dev/null +++ b/Assets/Scripts/Machines/StationaryDefectDetector.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: e00ad13b6427460abe6c3aec6566b6e5 +timeCreated: 1723920624 \ No newline at end of file diff --git a/Assets/Scripts/Products/ProductDescription.cs b/Assets/Scripts/Products/ProductDescription.cs index e8c5ca9..37d1bca 100644 --- a/Assets/Scripts/Products/ProductDescription.cs +++ b/Assets/Scripts/Products/ProductDescription.cs @@ -17,14 +17,14 @@ public class ProductDescription : ScriptableObject public GameObject GetRandomProduct() { - float randomValue = Random.value; + float randomValue = Random.Range(0, 100); float sum = 0; for (var i = 0; i < Products.Length; i++) { var product = Products[i]; - sum += product.Probability / 100f; + sum += product.Probability; if (randomValue <= sum) { return product.Prefab;