diff --git a/Assets/Basic Assets/Square.png b/Assets/Basic Assets/Square.png new file mode 100755 index 0000000..8eb1b1e Binary files /dev/null and b/Assets/Basic Assets/Square.png differ diff --git a/Assets/Basic Assets/Square.png.meta b/Assets/Basic Assets/Square.png.meta new file mode 100755 index 0000000..3146e9f --- /dev/null +++ b/Assets/Basic Assets/Square.png.meta @@ -0,0 +1,138 @@ +fileFormatVersion: 2 +guid: f532ef47545d2004dbde7529a934f204 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + 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 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 0 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 4 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: 4 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: 4 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: 4 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: 4 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: + - - {x: -2, y: -2} + - {x: -2, y: 2} + - {x: 2, y: 2} + - {x: 2, y: -2} + physicsShape: + - - {x: -2, y: -2} + - {x: -2, y: 2} + - {x: 2, y: 2} + - {x: 2, y: -2} + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GUI Textures.meta b/Assets/GUI Textures.meta new file mode 100755 index 0000000..30f8168 --- /dev/null +++ b/Assets/GUI Textures.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b756b9be6f75d9243a1cad4468a34070 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/Anchor.prefab b/Assets/Prefabs/Anchor.prefab index 111caf6..5463da2 100755 --- a/Assets/Prefabs/Anchor.prefab +++ b/Assets/Prefabs/Anchor.prefab @@ -70,9 +70,9 @@ SpriteRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 791405367 - m_SortingLayer: 2 - m_SortingOrder: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 2 m_Sprite: {fileID: 21300000, guid: 0415f46fc23af284da343f01713b8c27, type: 3} m_Color: {r: 1, g: 0, b: 0, a: 1} m_FlipX: 0 @@ -96,8 +96,8 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: d38ff3984e75ad44398ee5927f8fbcf8, type: 3} m_Name: m_EditorClassIdentifier: - IsInput: 0 Name: + IsInput: 0 ScaleIncrease: 1.5 --- !u!58 &8643366489253547345 CircleCollider2D: @@ -114,4 +114,4 @@ CircleCollider2D: m_UsedByComposite: 0 m_Offset: {x: 0, y: 0} serializedVersion: 2 - m_Radius: 0.49999997 + m_Radius: 0.75 diff --git a/Assets/Prefabs/Cable.prefab b/Assets/Prefabs/Cable.prefab index 3a95d77..7d2f15d 100755 --- a/Assets/Prefabs/Cable.prefab +++ b/Assets/Prefabs/Cable.prefab @@ -69,9 +69,9 @@ LineRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 791405367 - m_SortingLayer: 2 - m_SortingOrder: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 1 m_Positions: - {x: 0, y: 0, z: 0} - {x: 0, y: 0, z: 0} diff --git a/Assets/Prefabs/Gates.meta b/Assets/Prefabs/Gates.meta new file mode 100755 index 0000000..20eb865 --- /dev/null +++ b/Assets/Prefabs/Gates.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a3eab2b02a43b8f4cb5c9cd3d84c21dc +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/NAND gate.prefab b/Assets/Prefabs/Gates/NAND gate.prefab similarity index 60% rename from Assets/Prefabs/NAND gate.prefab rename to Assets/Prefabs/Gates/NAND gate.prefab index 4d5e6ae..c240d26 100755 --- a/Assets/Prefabs/NAND gate.prefab +++ b/Assets/Prefabs/Gates/NAND gate.prefab @@ -9,8 +9,7 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 2070848596161447923} - - component: {fileID: 3023362318199728274} - - component: {fileID: 1147181935280608789} + - component: {fileID: 2637797866570093762} m_Layer: 0 m_Name: NAND gate m_TagString: Untagged @@ -32,61 +31,11 @@ Transform: - {fileID: 4810999900376905961} - {fileID: 118974315500811181} - {fileID: 555726995092159938} + - {fileID: 120012632069647147} m_Father: {fileID: 0} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!212 &3023362318199728274 -SpriteRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 347446582494478752} - m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 0 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: 73ddb2958e9cd451c82f37c26efa5eb0, 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: 0 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: -1993690767 - m_SortingLayer: 1 - m_SortingOrder: 0 - m_Sprite: {fileID: 3286163911610860551, guid: dd1159e4e096fd24695274a28f36162e, type: 3} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_FlipX: 0 - m_FlipY: 0 - m_DrawMode: 0 - m_Size: {x: 6, y: 5} - m_AdaptiveModeThreshold: 0.5 - m_SpriteTileMode: 0 - m_WasSpriteAssigned: 1 - m_MaskInteraction: 0 - m_SpriteSortPoint: 0 ---- !u!114 &1147181935280608789 +--- !u!114 &2637797866570093762 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -98,6 +47,173 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 4b336fb04307cae45953d977c01c393d, type: 3} m_Name: m_EditorClassIdentifier: + HasState: 0 + GateType: 6 +--- !u!60 &3161691366024547520 +PolygonCollider2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1856925445254163832} + m_Enabled: 1 + m_Density: 1 + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_UsedByEffector: 0 + m_UsedByComposite: 0 + m_Offset: {x: 0, y: 0} + m_SpriteTilingProperty: + border: {x: 0, y: 0, z: 0, w: 0} + pivot: {x: 0, y: 1} + oldSize: {x: 6, y: 5} + newSize: {x: 6, y: 5} + adaptiveTilingThreshold: 0.5 + drawMode: 0 + adaptiveTiling: 0 + m_AutoTiling: 0 + m_Points: + m_Paths: + - - {x: 3.09, y: -4.5099998} + - {x: 3.23, y: -4.46} + - {x: 3.49, y: -4.33} + - {x: 3.59, y: -4.27} + - {x: 3.76, y: -4.15} + - {x: 3.8899999, y: -4.04} + - {x: 4.0699997, y: -3.85} + - {x: 4.21, y: -3.6599998} + - {x: 4.31, y: -3.49} + - {x: 4.42, y: -3.26} + - {x: 4.49, y: -3} + - {x: 4.5099998, y: -2.8899999} + - {x: 4.5499997, y: -2.82} + - {x: 4.63, y: -2.8899999} + - {x: 4.7999997, y: -2.98} + - {x: 5.0099998, y: -2.97} + - {x: 5.1, y: -2.9399998} + - {x: 5.23, y: -2.85} + - {x: 5.3399997, y: -2.7} + - {x: 5.37, y: -2.61} + - {x: 5.37, y: -2.3899999} + - {x: 5.3399997, y: -2.3} + - {x: 5.25, y: -2.1699998} + - {x: 5.1, y: -2.06} + - {x: 4.99, y: -2.04} + - {x: 4.87, y: -2.03} + - {x: 4.7599998, y: -2.05} + - {x: 4.66, y: -2.09} + - {x: 4.52, y: -2.1599998} + - {x: 4.49, y: -2} + - {x: 4.42, y: -1.76} + - {x: 4.35, y: -1.5999999} + - {x: 4.25, y: -1.4} + - {x: 4.11, y: -1.1999999} + - {x: 4, y: -1.0699999} + - {x: 3.81, y: -0.89} + - {x: 3.72, y: -0.82} + - {x: 3.59, y: -0.72999996} + - {x: 3.34, y: -0.59999996} + - {x: 3.1999998, y: -0.53999996} + - {x: 3.01, y: -0.48} + - {x: 2.8, y: -0.42999998} + - {x: 2.6799998, y: -0.41} + - {x: 2.5, y: -0.39} + - {x: 2.29, y: -0.38} + - {x: 0.5, y: -0.38} + - {x: 0.48, y: -0.39999998} + - {x: 0.48, y: -4.6} + - {x: 0.5, y: -4.62} + - {x: 2.3, y: -4.62} + - {x: 2.5, y: -4.61} + - {x: 2.61, y: -4.6} + - {x: 2.75, y: -4.58} +--- !u!114 &5276010568307047601 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1856925445254163832} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 419a02bb4cfe59848a1f7677a1018aa3, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1001 &14861468116553427 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 2070848596161447923} + m_Modifications: + - target: {fileID: -9106680079924091400, guid: dd1159e4e096fd24695274a28f36162e, type: 3} + propertyPath: m_RootOrder + value: 3 + objectReference: {fileID: 0} + - target: {fileID: -9106680079924091400, guid: dd1159e4e096fd24695274a28f36162e, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -9106680079924091400, guid: dd1159e4e096fd24695274a28f36162e, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -9106680079924091400, guid: dd1159e4e096fd24695274a28f36162e, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -9106680079924091400, guid: dd1159e4e096fd24695274a28f36162e, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: -9106680079924091400, guid: dd1159e4e096fd24695274a28f36162e, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -9106680079924091400, guid: dd1159e4e096fd24695274a28f36162e, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -9106680079924091400, guid: dd1159e4e096fd24695274a28f36162e, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -9106680079924091400, guid: dd1159e4e096fd24695274a28f36162e, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -9106680079924091400, guid: dd1159e4e096fd24695274a28f36162e, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -9106680079924091400, guid: dd1159e4e096fd24695274a28f36162e, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -5415975035532293479, guid: dd1159e4e096fd24695274a28f36162e, type: 3} + propertyPath: m_SortingLayer + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -5415975035532293479, guid: dd1159e4e096fd24695274a28f36162e, type: 3} + propertyPath: m_SortingLayerID + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1869508105636651947, guid: dd1159e4e096fd24695274a28f36162e, type: 3} + propertyPath: m_Name + value: sprite + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 7243324766535440047, guid: dd1159e4e096fd24695274a28f36162e, type: 3} +--- !u!1 &1856925445254163832 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 1869508105636651947, guid: dd1159e4e096fd24695274a28f36162e, type: 3} + m_PrefabInstance: {fileID: 14861468116553427} + m_PrefabAsset: {fileID: 0} +--- !u!4 &120012632069647147 stripped +Transform: + m_CorrespondingSourceObject: {fileID: -9106680079924091400, guid: dd1159e4e096fd24695274a28f36162e, type: 3} + m_PrefabInstance: {fileID: 14861468116553427} + m_PrefabAsset: {fileID: 0} --- !u!1001 &3863004111573961202 PrefabInstance: m_ObjectHideFlags: 0 @@ -105,13 +221,17 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 2070848596161447923} m_Modifications: + - target: {fileID: -7307756874029176930, guid: d2ad1e1266d8af64ca87541a40be7e9f, type: 3} + propertyPath: Name + value: A + objectReference: {fileID: 0} - target: {fileID: -7307756874029176930, guid: d2ad1e1266d8af64ca87541a40be7e9f, type: 3} propertyPath: IsInput value: 1 objectReference: {fileID: 0} - target: {fileID: 1824742176375353076, guid: d2ad1e1266d8af64ca87541a40be7e9f, type: 3} propertyPath: m_Name - value: Anchor + value: A objectReference: {fileID: 0} - target: {fileID: 8599692958760628507, guid: d2ad1e1266d8af64ca87541a40be7e9f, type: 3} propertyPath: m_RootOrder @@ -171,9 +291,13 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 2070848596161447923} m_Modifications: + - target: {fileID: -7307756874029176930, guid: d2ad1e1266d8af64ca87541a40be7e9f, type: 3} + propertyPath: Name + value: Q + objectReference: {fileID: 0} - target: {fileID: 1824742176375353076, guid: d2ad1e1266d8af64ca87541a40be7e9f, type: 3} propertyPath: m_Name - value: Anchor (2) + value: Q objectReference: {fileID: 0} - target: {fileID: 8599692958760628507, guid: d2ad1e1266d8af64ca87541a40be7e9f, type: 3} propertyPath: m_RootOrder @@ -233,13 +357,17 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 2070848596161447923} m_Modifications: + - target: {fileID: -7307756874029176930, guid: d2ad1e1266d8af64ca87541a40be7e9f, type: 3} + propertyPath: Name + value: B + objectReference: {fileID: 0} - target: {fileID: -7307756874029176930, guid: d2ad1e1266d8af64ca87541a40be7e9f, type: 3} propertyPath: IsInput value: 1 objectReference: {fileID: 0} - target: {fileID: 1824742176375353076, guid: d2ad1e1266d8af64ca87541a40be7e9f, type: 3} propertyPath: m_Name - value: Anchor (1) + value: B objectReference: {fileID: 0} - target: {fileID: 8599692958760628507, guid: d2ad1e1266d8af64ca87541a40be7e9f, type: 3} propertyPath: m_RootOrder diff --git a/Assets/Prefabs/NAND gate.prefab.meta b/Assets/Prefabs/Gates/NAND gate.prefab.meta similarity index 100% rename from Assets/Prefabs/NAND gate.prefab.meta rename to Assets/Prefabs/Gates/NAND gate.prefab.meta diff --git a/Assets/SVG Assets/and.svg b/Assets/SVG Assets/and.svg index d321bfb..3b4ae46 100755 --- a/Assets/SVG Assets/and.svg +++ b/Assets/SVG Assets/and.svg @@ -29,9 +29,9 @@ - + \ No newline at end of file diff --git a/Assets/SVG Assets/and.svg.meta b/Assets/SVG Assets/and.svg.meta index 9ff0ef7..568ca49 100755 --- a/Assets/SVG Assets/and.svg.meta +++ b/Assets/SVG Assets/and.svg.meta @@ -14,7 +14,7 @@ ScriptedImporter: gradientResolution: 64 alignment: 1 customPivot: {x: 0, y: 0} - generatePhysicsShape: 0 + generatePhysicsShape: 1 viewportOptions: 1 preserveViewport: 0 advancedMode: 0 diff --git a/Assets/SVG Assets/buffer.svg b/Assets/SVG Assets/buffer.svg index 70bcf63..80fd9dc 100755 --- a/Assets/SVG Assets/buffer.svg +++ b/Assets/SVG Assets/buffer.svg @@ -29,8 +29,8 @@ - + \ No newline at end of file diff --git a/Assets/SVG Assets/buffer.svg.meta b/Assets/SVG Assets/buffer.svg.meta index cdf9cdb..692da47 100755 --- a/Assets/SVG Assets/buffer.svg.meta +++ b/Assets/SVG Assets/buffer.svg.meta @@ -14,7 +14,7 @@ ScriptedImporter: gradientResolution: 64 alignment: 1 customPivot: {x: 0, y: 0} - generatePhysicsShape: 0 + generatePhysicsShape: 1 viewportOptions: 1 preserveViewport: 0 advancedMode: 0 diff --git a/Assets/SVG Assets/nand.svg.meta b/Assets/SVG Assets/nand.svg.meta index 56b23f8..10997cd 100755 --- a/Assets/SVG Assets/nand.svg.meta +++ b/Assets/SVG Assets/nand.svg.meta @@ -14,7 +14,7 @@ ScriptedImporter: gradientResolution: 64 alignment: 1 customPivot: {x: 0, y: 0} - generatePhysicsShape: 0 + generatePhysicsShape: 1 viewportOptions: 1 preserveViewport: 0 advancedMode: 0 diff --git a/Assets/SVG Assets/nor.svg b/Assets/SVG Assets/nor.svg index 9b29cc8..aae9f70 100755 --- a/Assets/SVG Assets/nor.svg +++ b/Assets/SVG Assets/nor.svg @@ -30,9 +30,9 @@ - + \ No newline at end of file diff --git a/Assets/SVG Assets/nor.svg.meta b/Assets/SVG Assets/nor.svg.meta index 4e223aa..b584b88 100755 --- a/Assets/SVG Assets/nor.svg.meta +++ b/Assets/SVG Assets/nor.svg.meta @@ -14,7 +14,7 @@ ScriptedImporter: gradientResolution: 64 alignment: 1 customPivot: {x: 0, y: 0} - generatePhysicsShape: 0 + generatePhysicsShape: 1 viewportOptions: 1 preserveViewport: 0 advancedMode: 0 diff --git a/Assets/SVG Assets/not.svg b/Assets/SVG Assets/not.svg index 6449734..7f68b29 100755 --- a/Assets/SVG Assets/not.svg +++ b/Assets/SVG Assets/not.svg @@ -30,8 +30,8 @@ - + \ No newline at end of file diff --git a/Assets/SVG Assets/not.svg.meta b/Assets/SVG Assets/not.svg.meta index 8cd763b..f81e94b 100755 --- a/Assets/SVG Assets/not.svg.meta +++ b/Assets/SVG Assets/not.svg.meta @@ -14,7 +14,7 @@ ScriptedImporter: gradientResolution: 64 alignment: 1 customPivot: {x: 0, y: 0} - generatePhysicsShape: 0 + generatePhysicsShape: 1 viewportOptions: 1 preserveViewport: 0 advancedMode: 0 diff --git a/Assets/SVG Assets/or.svg b/Assets/SVG Assets/or.svg index b1561cf..6423db9 100755 --- a/Assets/SVG Assets/or.svg +++ b/Assets/SVG Assets/or.svg @@ -29,9 +29,9 @@ - + \ No newline at end of file diff --git a/Assets/SVG Assets/or.svg.meta b/Assets/SVG Assets/or.svg.meta index dea4a04..0733e38 100755 --- a/Assets/SVG Assets/or.svg.meta +++ b/Assets/SVG Assets/or.svg.meta @@ -14,7 +14,7 @@ ScriptedImporter: gradientResolution: 64 alignment: 1 customPivot: {x: 0, y: 0} - generatePhysicsShape: 0 + generatePhysicsShape: 1 viewportOptions: 1 preserveViewport: 0 advancedMode: 0 diff --git a/Assets/SVG Assets/xnor.svg b/Assets/SVG Assets/xnor.svg index dac3d36..7305dd8 100755 --- a/Assets/SVG Assets/xnor.svg +++ b/Assets/SVG Assets/xnor.svg @@ -33,9 +33,9 @@ - + \ No newline at end of file diff --git a/Assets/SVG Assets/xnor.svg.meta b/Assets/SVG Assets/xnor.svg.meta index 510a0d1..9e7a475 100755 --- a/Assets/SVG Assets/xnor.svg.meta +++ b/Assets/SVG Assets/xnor.svg.meta @@ -14,7 +14,7 @@ ScriptedImporter: gradientResolution: 64 alignment: 1 customPivot: {x: 0, y: 0} - generatePhysicsShape: 0 + generatePhysicsShape: 1 viewportOptions: 1 preserveViewport: 0 advancedMode: 0 diff --git a/Assets/SVG Assets/xor.svg b/Assets/SVG Assets/xor.svg index 2906bf0..a9ca095 100755 --- a/Assets/SVG Assets/xor.svg +++ b/Assets/SVG Assets/xor.svg @@ -32,9 +32,9 @@ - + \ No newline at end of file diff --git a/Assets/SVG Assets/xor.svg.meta b/Assets/SVG Assets/xor.svg.meta index be11193..56f199a 100755 --- a/Assets/SVG Assets/xor.svg.meta +++ b/Assets/SVG Assets/xor.svg.meta @@ -14,7 +14,7 @@ ScriptedImporter: gradientResolution: 64 alignment: 1 customPivot: {x: 0, y: 0} - generatePhysicsShape: 0 + generatePhysicsShape: 1 viewportOptions: 1 preserveViewport: 0 advancedMode: 0 diff --git a/Assets/Scenes/SampleScene.unity b/Assets/Scenes/Workspace.unity similarity index 59% rename from Assets/Scenes/SampleScene.unity rename to Assets/Scenes/Workspace.unity index b2944d0..df618b8 100755 --- a/Assets/Scenes/SampleScene.unity +++ b/Assets/Scenes/Workspace.unity @@ -123,6 +123,88 @@ NavMeshSettings: debug: m_Flags: 0 m_NavMeshData: {fileID: 0} +--- !u!1 &155822103 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 155822105} + - component: {fileID: 155822104} + m_Layer: 8 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!212 &155822104 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 155822103} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 7f247c265d325694a96c63ce0be3b314, 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: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_Sprite: {fileID: 21300000, guid: f532ef47545d2004dbde7529a934f204, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 1 + m_Size: {x: 100, y: 100} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 1 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 +--- !u!4 &155822105 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 155822103} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 10, y: 10, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &297330683 GameObject: m_ObjectHideFlags: 0 @@ -146,14 +228,15 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 297330683} - 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_Children: - {fileID: 1141755333} - {fileID: 2034233491} - m_Father: {fileID: 0} - m_RootOrder: 2 + - {fileID: 917919193} + m_Father: {fileID: 1741727034} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &519420028 GameObject: @@ -166,6 +249,7 @@ GameObject: - component: {fileID: 519420032} - component: {fileID: 519420031} - component: {fileID: 519420029} + - component: {fileID: 519420030} m_Layer: 0 m_Name: Main Camera m_TagString: MainCamera @@ -181,6 +265,22 @@ AudioListener: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 519420028} m_Enabled: 1 +--- !u!114 &519420030 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 519420028} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ad29b44c506923441adfb71b13f0f9dd, type: 3} + m_Name: + m_EditorClassIdentifier: + MinSize: 5 + MaxSize: 80 + ScrollSensitivity: 10 + Camera101: {fileID: 816332484} --- !u!20 &519420031 Camera: m_ObjectHideFlags: 0 @@ -190,7 +290,7 @@ Camera: m_GameObject: {fileID: 519420028} m_Enabled: 1 serializedVersion: 2 - m_ClearFlags: 2 + m_ClearFlags: 1 m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} m_projectionMatrixMode: 1 m_GateFitMode: 2 @@ -218,7 +318,7 @@ Camera: m_TargetDisplay: 0 m_TargetEye: 0 m_HDR: 1 - m_AllowMSAA: 0 + m_AllowMSAA: 1 m_AllowDynamicResolution: 0 m_ForceIntoRT: 0 m_OcclusionCulling: 0 @@ -231,12 +331,12 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 519420028} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: -10} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -20} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 1 + m_Father: {fileID: 1835199860} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &535412051 GameObject: @@ -248,6 +348,7 @@ GameObject: m_Component: - component: {fileID: 535412053} - component: {fileID: 535412052} + - component: {fileID: 535412054} m_Layer: 0 m_Name: GameManager m_TagString: Untagged @@ -286,6 +387,92 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &535412054 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 535412051} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 11e573998e532eb42bdb43b80953d23f, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &816332482 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 816332485} + - component: {fileID: 816332484} + m_Layer: 0 + m_Name: 101Camera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!20 &816332484 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 816332482} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 1 + orthographic size: 1 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &816332485 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 816332482} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1835199860} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1001 &840857165 PrefabInstance: m_ObjectHideFlags: 0 @@ -303,11 +490,11 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 2070848596161447923, guid: e13798a14679ee74fa71d11caea77e78, type: 3} propertyPath: m_LocalPosition.x - value: -8 + value: -10.11 objectReference: {fileID: 0} - target: {fileID: 2070848596161447923, guid: e13798a14679ee74fa71d11caea77e78, type: 3} propertyPath: m_LocalPosition.y - value: 1 + value: 2.82 objectReference: {fileID: 0} - target: {fileID: 2070848596161447923, guid: e13798a14679ee74fa71d11caea77e78, type: 3} propertyPath: m_LocalPosition.z @@ -343,11 +530,137 @@ PrefabInstance: objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e13798a14679ee74fa71d11caea77e78, type: 3} +--- !u!4 &917919193 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 2070848596161447923, guid: e13798a14679ee74fa71d11caea77e78, type: 3} + m_PrefabInstance: {fileID: 1721634386} + m_PrefabAsset: {fileID: 0} --- !u!4 &1141755333 stripped Transform: m_CorrespondingSourceObject: {fileID: 2070848596161447923, guid: e13798a14679ee74fa71d11caea77e78, type: 3} m_PrefabInstance: {fileID: 808953822019098548} m_PrefabAsset: {fileID: 0} +--- !u!1001 &1721634386 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 297330684} + m_Modifications: + - target: {fileID: 347446582494478752, guid: e13798a14679ee74fa71d11caea77e78, type: 3} + propertyPath: m_Name + value: NAND gate + objectReference: {fileID: 0} + - target: {fileID: 2070848596161447923, guid: e13798a14679ee74fa71d11caea77e78, type: 3} + propertyPath: m_RootOrder + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 2070848596161447923, guid: e13798a14679ee74fa71d11caea77e78, type: 3} + propertyPath: m_LocalPosition.x + value: -10.26 + objectReference: {fileID: 0} + - target: {fileID: 2070848596161447923, guid: e13798a14679ee74fa71d11caea77e78, type: 3} + propertyPath: m_LocalPosition.y + value: -4.53 + objectReference: {fileID: 0} + - target: {fileID: 2070848596161447923, guid: e13798a14679ee74fa71d11caea77e78, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2070848596161447923, guid: e13798a14679ee74fa71d11caea77e78, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2070848596161447923, guid: e13798a14679ee74fa71d11caea77e78, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2070848596161447923, guid: e13798a14679ee74fa71d11caea77e78, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2070848596161447923, guid: e13798a14679ee74fa71d11caea77e78, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2070848596161447923, guid: e13798a14679ee74fa71d11caea77e78, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2070848596161447923, guid: e13798a14679ee74fa71d11caea77e78, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2070848596161447923, guid: e13798a14679ee74fa71d11caea77e78, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: e13798a14679ee74fa71d11caea77e78, type: 3} +--- !u!1 &1741727033 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1741727034} + m_Layer: 0 + m_Name: Workspace + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1741727034 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1741727033} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 297330684} + - {fileID: 1929026276} + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1835199859 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1835199860} + m_Layer: 0 + m_Name: Cameras + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1835199860 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1835199859} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 519420032} + - {fileID: 816332485} + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1929026275 GameObject: m_ObjectHideFlags: 0 @@ -371,12 +684,12 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1929026275} - 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_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 3 + m_Father: {fileID: 1741727034} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!4 &2034233491 stripped Transform: diff --git a/Assets/Scenes/SampleScene.unity.meta b/Assets/Scenes/Workspace.unity.meta similarity index 100% rename from Assets/Scenes/SampleScene.unity.meta rename to Assets/Scenes/Workspace.unity.meta diff --git a/Assets/Scripts/Anchor.cs b/Assets/Scripts/Anchor.cs index cf3fde0..3315b12 100755 --- a/Assets/Scripts/Anchor.cs +++ b/Assets/Scripts/Anchor.cs @@ -3,96 +3,108 @@ using System.Collections.Generic; using System.Linq; using UnityEngine; -public class Anchor : MonoBehaviour +namespace UntitledLogicGame { - #region Unity Properties - - public bool IsInput; - public string Name; - public float ScaleIncrease; - - #endregion - - #region Public Properties - - public List Cables { get; set; } - public Gate Gate { get; set; } - public bool Activated + public class Anchor : MonoBehaviour { - get + #region Unity Properties + + public string Name; + public bool IsInput; + public float ScaleIncrease; + + #endregion + + #region Public Properties + + public List Cables { get; set; } + public Gate Gate { get; set; } + public bool Activated + { + get + { + if (IsInput) + return Cables.Count > 0 && Cables.First().Activated; + else + return _activated; + } + set + { + if (!IsInput) + _activated = value; + } + } + + #endregion + + #region Private Properties + + private Vector3 _scale; + private SpriteRenderer _sprite; + private bool _activated; + private bool? _lastActivated; + + #endregion + + #region Unity Methods + + // Start is called before the first frame update + private void Start() + { + Gate = GetComponentInParent(); + Utils.RandomName($"{Gate.GateType}_{Name}", gameObject); + _scale = transform.localScale; + _sprite = GetComponent(); + Cables = new List(); + } + + // Update is called once per frame + private void Update() + { + if (_lastActivated == null || _lastActivated != Activated) + { + _sprite.color = Activated ? GameManager.Instance.ActivatedColor : GameManager.Instance.DeadColor; + _lastActivated = Activated; + } + } + + private void OnMouseEnter() + { + transform.localScale = _scale * ScaleIncrease; + GameManager.Instance.CurrentAnchor = this; + } + + private void OnMouseExit() + { + transform.localScale = _scale; + if (Equals(GameManager.Instance.CurrentAnchor)) + GameManager.Instance.CurrentAnchor = null; + } + + private void OnDestroy() + { + foreach(var cable in Cables) + { + Destroy(cable.gameObject); + } + } + + #endregion + + #region Public Methods + + public bool HasInputAnchor(Anchor target) { if (IsInput) - return Cables.Count > 0 && Cables.First().Activated; + return Cables.Any(c => c.HasInputAnchor(target)); else - return _activated; - } - set - { - if (!IsInput) - _activated = value; + return Gate.HasInputAnchor(target); } + + #endregion + + #region Private Methods + + #endregion } - - #endregion - - #region Private Properties - - private Vector3 _scale; - private SpriteRenderer _sprite; - private bool _activated; - private bool? _lastActivated; - - #endregion - - #region Unity Methods - - // Start is called before the first frame update - private void Start() - { - Utils.RandomName("Anchor", gameObject); - _scale = transform.localScale; - _sprite = GetComponent(); - Cables = new List(); - Gate = GetComponentInParent(); - } - - // Update is called once per frame - private void Update() - { - if(_lastActivated == null || _lastActivated != Activated) - { - _sprite.color = Activated ? GameManager.Instance.ActivatedColor : GameManager.Instance.DeadColor; - } - } - - private void OnMouseEnter() - { - transform.localScale = _scale * ScaleIncrease; - GameManager.Instance.CurrentAnchor = this; - } - - private void OnMouseExit() - { - transform.localScale = _scale; - if(Equals(GameManager.Instance.CurrentAnchor)) - GameManager.Instance.CurrentAnchor = null; - } - - #endregion - - #region Public Methods - - public bool HasInputAnchor(Anchor target) - { - if (IsInput) - return Cables.Any(c => c.HasInputAnchor(target)); - else - return Gate.HasInputAnchor(target); - } - - #endregion - - #region Private Methods - - #endregion -} +} \ No newline at end of file diff --git a/Assets/Scripts/Cable.cs b/Assets/Scripts/Cable.cs index 3513ba0..40aca4a 100755 --- a/Assets/Scripts/Cable.cs +++ b/Assets/Scripts/Cable.cs @@ -1,104 +1,122 @@ using System.Collections; using System.Collections.Generic; +using System.Linq; using UnityEngine; -public class Cable : MonoBehaviour +namespace UntitledLogicGame { - #region Unity Properties - - #endregion - - #region Public Properties - - public Anchor StartAnchor + public class Cable : MonoBehaviour { - get => _startAnchor; - set - { - _startAnchor = value; - } - } - public Anchor EndAnchor - { - get => _endAnchor; - set - { - if (!value.IsInput) - { - _endAnchor = StartAnchor; - StartAnchor = value; - } - else - { - _endAnchor = value; - } + #region Unity Properties - if (StartAnchor.HasInputAnchor(EndAnchor)) + #endregion + + #region Public Properties + + public Anchor StartAnchor + { + get => _startAnchor; + set { - // Loop detected - Destroy(gameObject); - } - else - { - StartAnchor.Cables.Add(this); - EndAnchor.Cables = new List { this }; + _startAnchor = value; + if (value.IsInput) + { + if (value.Cables.Count > 0) + Destroy(value.Cables.First().gameObject); + } } } - } - public bool Activated => StartAnchor != null && !StartAnchor.IsInput && StartAnchor.Activated; - - #endregion - - #region Private Properties - - private Anchor _startAnchor; - private Anchor _endAnchor; - private LineRenderer _line; - private bool? _lastActivated; - - #endregion - - #region Unity Methods - - // Start is called before the first frame update - private void Start() - { - _line = GetComponent(); - Utils.RandomName("Cable", gameObject); - - } - - // Update is called once per frame - private void Update() - { - if (_lastActivated == null || _lastActivated != Activated) + public Anchor EndAnchor { - _line.startColor = Activated ? GameManager.Instance.ActivatedColor : GameManager.Instance.DeadColor; - _line.endColor = Activated ? GameManager.Instance.ActivatedColor : GameManager.Instance.DeadColor; + get => _endAnchor; + set + { + if (!value.IsInput) + { + _endAnchor = StartAnchor; + StartAnchor = value; + } + else + { + _endAnchor = value; + } + + if (StartAnchor.HasInputAnchor(EndAnchor)) + { + // Loop detected + Destroy(gameObject); + } + else + { + StartAnchor.Cables.Add(this); + if (EndAnchor.Cables.Count > 0) + Destroy(EndAnchor.Cables.First().gameObject); + EndAnchor.Cables = new List { this }; + } + } + } + public bool Activated => StartAnchor != null && !StartAnchor.IsInput && StartAnchor.Activated; + + #endregion + + #region Private Properties + + private Anchor _startAnchor; + private Anchor _endAnchor; + private LineRenderer _line; + private bool? _lastActivated; + + #endregion + + #region Unity Methods + + // Start is called before the first frame update + private void Start() + { + _line = GetComponent(); + Utils.RandomName("Cable", gameObject); + } - var mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition); - mousePos.z = 0f; - var startPos = StartAnchor == null ? mousePos : StartAnchor.transform.position; - var endPos = EndAnchor == null ? mousePos : EndAnchor.transform.position; - _line.positionCount = 2; - _line.SetPosition(0, startPos); - _line.SetPosition(1, endPos); + // Update is called once per frame + private void Update() + { + if (_lastActivated == null || _lastActivated != Activated) + { + _line.startColor = Activated ? GameManager.Instance.ActivatedColor : GameManager.Instance.DeadColor; + _line.endColor = Activated ? GameManager.Instance.ActivatedColor : GameManager.Instance.DeadColor; + _lastActivated = Activated; + } + + var startPos = StartAnchor == null ? MouseManager.MousePos : StartAnchor.transform.position; + var endPos = EndAnchor == null ? MouseManager.MousePos : EndAnchor.transform.position; + _line.positionCount = 2; + _line.SetPosition(0, startPos); + _line.SetPosition(1, endPos); + } + + private void OnDestroy() + { + if(StartAnchor != null) + StartAnchor.Cables.Remove(this); + if (EndAnchor != null) + EndAnchor.Cables.Remove(this); + } + + #endregion + + #region Public Methods + + public bool HasInputAnchor(Anchor target) + { + return StartAnchor.HasInputAnchor(target); + } + + #endregion + + #region Private Methods + + #endregion + } - - #endregion - - #region Public Methods - - public bool HasInputAnchor(Anchor target) - { - return StartAnchor.HasInputAnchor(target); - } - - #endregion - - #region Private Methods - - #endregion - -} +} \ No newline at end of file diff --git a/Assets/Scripts/CameraManager.cs b/Assets/Scripts/CameraManager.cs new file mode 100755 index 0000000..f43d9e8 --- /dev/null +++ b/Assets/Scripts/CameraManager.cs @@ -0,0 +1,71 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace UntitledLogicGame +{ + public class CameraManager : MonoBehaviour + { + #region Unity Properties + + [Header("Zooming")] + public int MinSize; + public int MaxSize; + public float ScrollSensitivity; + + [Header("Moving")] + public Camera Camera101; + + #endregion + + #region Public Properties + + #endregion + + #region Private Properties + + private Vector3 _startDragMousePos; + private Vector3? _startDragPos; + + #endregion + + #region Unity Methods + + private void FixedUpdate() + { + var size = Camera.main.orthographicSize; + size -= Input.GetAxis("Mouse ScrollWheel") * ScrollSensitivity; + size = Mathf.Clamp(size, MinSize, MaxSize); + Camera.main.orthographicSize = size; + Camera.main.transform.position = new Vector3(Camera.main.transform.position.x, Camera.main.transform.position.y, -size); + + if (Input.GetMouseButton(2)) + { + var mousePos = Camera101.ScreenToWorldPoint(Input.mousePosition); + mousePos.z = 0f; + + if (_startDragPos == null) + { + _startDragMousePos = mousePos; + _startDragPos = Camera.main.transform.position; + } + + Camera.main.transform.position = _startDragPos.Value - (mousePos - _startDragMousePos) * Camera.main.orthographicSize; + } + else if(_startDragPos != null) + { + _startDragPos = null; + } + } + + #endregion + + #region Public Methods + + #endregion + + #region Private Methods + + #endregion + } +} \ No newline at end of file diff --git a/Assets/Scripts/CameraManager.cs.meta b/Assets/Scripts/CameraManager.cs.meta new file mode 100755 index 0000000..b1ce6cc --- /dev/null +++ b/Assets/Scripts/CameraManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ad29b44c506923441adfb71b13f0f9dd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/GameManager.cs b/Assets/Scripts/GameManager.cs index 1bfdc57..bd39b82 100755 --- a/Assets/Scripts/GameManager.cs +++ b/Assets/Scripts/GameManager.cs @@ -2,84 +2,70 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; +using UntitledLogicGame.Gates; -public class GameManager : MonoBehaviour +namespace UntitledLogicGame { - #region Static Properties - - public static GameManager Instance { get; set; } - - #endregion - - #region Unity Properties - - [Header("Prefabs")] - public Cable CablePrefab; - - [Header("Groups")] - public Transform GatesGroup; - public Transform CablesGroup; - - [Header("Colors")] - public Color DeadColor; - public Color ActivatedColor; - - #endregion - - #region Public Properties - - public Anchor CurrentAnchor { get; set; } - - #endregion - - #region Private Properties - - private Cable _currentCable; - - #endregion - - #region Unity Methods - - // Start is called before the first frame update - private void Start() + public class GameManager : MonoBehaviour { - if (Instance != null) - throw new InvalidOperationException("More than one GameManager in scene"); - Instance = this; + #region Static Properties + + public static GameManager Instance { get; set; } + + #endregion + + #region Unity Properties + + [Header("Prefabs")] + public Cable CablePrefab; + + [Header("Groups")] + public Transform GatesGroup; + public Transform CablesGroup; + + [Header("Colors")] + public Color DeadColor; + public Color ActivatedColor; + + #endregion + + #region Public Properties + + public Anchor CurrentAnchor { get; set; } + + public Gate CurrentGate { get; set; } + + #endregion + + #region Private Properties + + #endregion + + #region Unity Methods + + // Start is called before the first frame update + private void Start() + { + if (Instance != null) + throw new InvalidOperationException("More than one GameManager in scene"); + Instance = this; + } + + // Update is called once per frame + private void Update() + { + + } + + #endregion + + #region Public Methods + + #endregion + + #region Private Methods + + #endregion } - // Update is called once per frame - private void Update() - { - if (Input.GetMouseButton(0)) - { - if (CurrentAnchor != null && _currentCable == null) - { - _currentCable = Instantiate(CablePrefab, CablesGroup, true); - _currentCable.StartAnchor = CurrentAnchor; - } - } - else if (_currentCable != null) - { - if (CurrentAnchor == null || _currentCable.StartAnchor.IsInput == CurrentAnchor.IsInput) - { - Destroy(_currentCable.gameObject); - } - else - { - _currentCable.EndAnchor = CurrentAnchor; - } - _currentCable = null; - } - } - - #endregion - - #region Public Methods - - #endregion - - #region Private Methods - - #endregion -} +} \ No newline at end of file diff --git a/Assets/Scripts/Gate.cs b/Assets/Scripts/Gate.cs index c2fd1e3..0234848 100755 --- a/Assets/Scripts/Gate.cs +++ b/Assets/Scripts/Gate.cs @@ -2,57 +2,72 @@ using System.Collections.Generic; using System.Linq; using UnityEngine; +using UntitledLogicGame.Gates; -public class Gate : MonoBehaviour +namespace UntitledLogicGame { - #region Unity Properties - - private bool HasState; - - #endregion - - #region Public Properties - - public List Anchors { get; set; } - public IEnumerable InputAnchors => Anchors.Where(a => a.IsInput); - public IEnumerable OutputAnchors => Anchors.Where(a => !a.IsInput); - - #endregion - - #region Private Properties - - #endregion - - #region Unity Methods - - private void Start() + public class Gate : MonoBehaviour { - Utils.RandomName("Gate", gameObject); - Anchors = GetComponentsInChildren().ToList(); - } + #region Unity Properties - // Update is called once per frame - private void Update() - { + public bool HasState; + public GateType GateType; + + #endregion + + #region Public Properties + + public List Anchors { get; set; } + public IEnumerable InputAnchors => Anchors.Where(a => a.IsInput); + public IEnumerable OutputAnchors => Anchors.Where(a => !a.IsInput); + + #endregion + + #region Private Properties + + private GateDefinition _definition; + private int _lastState = -1; + + #endregion + + #region Unity Methods + + private void Start() + { + Utils.RandomName(GateType.ToString(), gameObject); + Anchors = GetComponentsInChildren().ToList(); + _definition = GateDefinition.Get(GateType, this); + } + + // Update is called once per frame + private void Update() + { + var state = _definition.GetState(this).ToInt(); + if(state != _lastState) + { + _definition.Compute(this); + _lastState = state; + } + + } + + #endregion + + #region Public Methods + + public bool HasInputAnchor(Anchor target) + { + return !HasState && ( + InputAnchors.Contains(target) || + InputAnchors.Any(a => a.HasInputAnchor(target)) + ); + } + + #endregion + + #region Private Methods + + #endregion } - - #endregion - - #region Public Methods - - public bool HasInputAnchor(Anchor target) - { - return !HasState && ( - InputAnchors.Contains(target) || - InputAnchors.Any(a => a.HasInputAnchor(target)) - ); - } - - #endregion - - #region Private Methods - - #endregion - -} +} \ No newline at end of file diff --git a/Assets/Scripts/GateSprite.cs b/Assets/Scripts/GateSprite.cs new file mode 100755 index 0000000..d95e629 --- /dev/null +++ b/Assets/Scripts/GateSprite.cs @@ -0,0 +1,60 @@ +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; +using UntitledLogicGame.Gates; + +namespace UntitledLogicGame +{ + public class GateSprite : MonoBehaviour + { + #region Unity Properties + + #endregion + + #region Public Properties + + #endregion + + #region Private Properties + + private Gate _gate; + + #endregion + + #region Unity Methods + + private void Start() + { + _gate = GetComponentInParent(); + } + + // Update is called once per frame + private void Update() + { + + } + + private void OnMouseEnter() + { + GameManager.Instance.CurrentGate = _gate; + } + + private void OnMouseExit() + { + if (_gate.Equals(GameManager.Instance.CurrentGate)) + GameManager.Instance.CurrentGate = null; + } + + #endregion + + #region Public Methods + + #endregion + + #region Private Methods + + #endregion + + } +} \ No newline at end of file diff --git a/Assets/Scripts/GateSprite.cs.meta b/Assets/Scripts/GateSprite.cs.meta new file mode 100755 index 0000000..17e13a0 --- /dev/null +++ b/Assets/Scripts/GateSprite.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 419a02bb4cfe59848a1f7677a1018aa3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Gates.meta b/Assets/Scripts/Gates.meta new file mode 100755 index 0000000..c6717e4 --- /dev/null +++ b/Assets/Scripts/Gates.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 55a2af5530764a041ab519b9d3fa15a8 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Gates/GateDefinition.cs b/Assets/Scripts/Gates/GateDefinition.cs new file mode 100755 index 0000000..df78664 --- /dev/null +++ b/Assets/Scripts/Gates/GateDefinition.cs @@ -0,0 +1,252 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using UnityEngine; + +namespace UntitledLogicGame.Gates +{ + public enum GateType + { + None, + Buffer, + NOTGate, + ANDGate, + ORGate, + XORGate, + NANDGate, + NORGate, + XNORGate + } + + public abstract class GateDefinition + { + public abstract string[] Inputs { get; } + + public abstract string[] Outputs { get; } + + internal abstract Dictionary TruthTable { get; } + + private static Dictionary Definitions; + + private static void LoadAll() + { + Definitions = new Dictionary(); + foreach (var gateType in Enum.GetValues(typeof(GateType)).Cast()) + { + Type t = Type.GetType($"{typeof(GateDefinition).Namespace}.{gateType}", true); + Definitions[gateType] = (GateDefinition)t.GetConstructor(new Type[0]).Invoke(new object[0]); + } + } + + public static GateDefinition Get(GateType gateType, Gate gate) + { + if (gateType == GateType.None) + throw new InvalidOperationException("GateType is set to None"); + + if (Definitions == null) + LoadAll(); + + GateDefinition definition = Definitions[gateType]; + + foreach (var inputName in definition.Inputs) + { + if(!gate.InputAnchors.Any(a => a.Name.Equals(inputName))) + throw new InvalidOperationException($"Gate has no {inputName} input anchor"); + } + + foreach (var outputName in definition.Outputs) + { + if (!gate.OutputAnchors.Any(a => a.Name.Equals(outputName))) + throw new InvalidOperationException($"Gate has no {outputName} output anchor"); + } + + return definition; + } + + internal GateDefinition() + { + foreach(var key in TruthTable.Keys) + { + if (key.Length != Inputs.Length) + throw new InvalidOperationException($"{GetType()} invalid inputs ({key})"); + } + if(Inputs.Length != 0) + { + foreach (var key in Utils.AllBoolArrayValues(Inputs.Length).Select(b => new State(b))) + { + if (!TruthTable.Keys.Contains(key)) + throw new InvalidOperationException($"{GetType()} no outputs for ({key})"); + var values = TruthTable[key]; + if (values.Length != Outputs.Length) + throw new InvalidOperationException($"{GetType()} invalid outputs for ({key})"); + } + } + } + + public bool[] GetState(Gate gate) + { + return Inputs.Select(i => gate.InputAnchors.First(a => a.Name.Equals(i)).Activated).ToArray(); + } + + public void Compute(Gate gate) + { + State key = new State(GetState(gate)); + bool[] values = TruthTable[key].values; + foreach (var output in Outputs.Select((value, i) => new { i, value })) + { + gate.OutputAnchors.First(a => a.Name.Equals(output.value)).Activated = values[output.i]; + } + } + } + + internal class State + { + internal int Length => values.Length; + + internal bool[] values; + + public State(IEnumerable args) + { + values = args.ToArray(); + } + + public State(params bool[] args) + { + values = args; + } + + public override bool Equals(object obj) + { + return obj is State state && Enumerable.SequenceEqual(values, state.values); + } + + public override int GetHashCode() + { + //https://stackoverflow.com/questions/6832139/gethashcode-from-booleans-only + int hash = 17; + for (int index = 0; index < values.Length; index++) + hash = hash * 23 + values[index].GetHashCode(); + return hash; + } + + public override string ToString() + { + return string.Join(",", values); + } + } + + #region Gates + + internal class None : GateDefinition + { + public override string[] Inputs { get; } = new string[] { }; + public override string[] Outputs { get; } = new string[] { }; + internal override Dictionary TruthTable { get; } = new Dictionary + { + }; + } + + internal class Buffer : GateDefinition + { + public override string[] Inputs { get; } = new string[] { "A" }; + public override string[] Outputs { get; } = new string[] { "Q" }; + internal override Dictionary TruthTable { get; } = new Dictionary + { + { new State( false ), new State( false ) }, + { new State( true ), new State( true ) }, + }; + } + + internal class NOTGate : GateDefinition + { + public override string[] Inputs { get; } = new string[] { "A" }; + public override string[] Outputs { get; } = new string[] { "Q" }; + internal override Dictionary TruthTable { get; } = new Dictionary + { + { new State( false ), new State( true ) }, + { new State( true ), new State( false ) }, + }; + } + + internal class ANDGate : GateDefinition + { + public override string[] Inputs { get; } = new string[] { "A", "B" }; + public override string[] Outputs { get; } = new string[] { "Q" }; + internal override Dictionary TruthTable { get; } = new Dictionary + { + { new State( false, false ), new State( false ) }, + { new State( false, true ), new State( false ) }, + { new State( true, false ), new State( false ) }, + { new State( true, true ), new State( true ) }, + }; + } + + internal class ORGate : GateDefinition + { + public override string[] Inputs { get; } = new string[] { "A", "B" }; + public override string[] Outputs { get; } = new string[] { "Q" }; + internal override Dictionary TruthTable { get; } = new Dictionary + { + { new State( false, false ), new State( false ) }, + { new State( false, true ), new State( true ) }, + { new State( true, false ), new State( true ) }, + { new State( true, true ), new State( true ) }, + }; + } + + internal class XORGate : GateDefinition + { + public override string[] Inputs { get; } = new string[] { "A", "B" }; + public override string[] Outputs { get; } = new string[] { "Q" }; + internal override Dictionary TruthTable { get; } = new Dictionary + { + { new State( false, false ), new State( false ) }, + { new State( false, true ), new State( true ) }, + { new State( true, false ), new State( true ) }, + { new State( true, true ), new State( false ) }, + }; + } + + internal class NANDGate : GateDefinition + { + public override string[] Inputs { get; } = new string[]{ "A", "B" }; + public override string[] Outputs { get; } = new string[] { "Q" }; + internal override Dictionary TruthTable { get; } = new Dictionary + { + { new State( false, false ), new State( true ) }, + { new State( false, true ), new State( true ) }, + { new State( true, false ), new State( true ) }, + { new State( true, true ), new State( false ) }, + }; + } + + internal class NORGate : GateDefinition + { + public override string[] Inputs { get; } = new string[] { "A", "B" }; + public override string[] Outputs { get; } = new string[] { "Q" }; + internal override Dictionary TruthTable { get; } = new Dictionary + { + { new State( false, false ), new State( true ) }, + { new State( false, true ), new State( false ) }, + { new State( true, false ), new State( false ) }, + { new State( true, true ), new State( false ) }, + }; + } + + internal class XNORGate : GateDefinition + { + public override string[] Inputs { get; } = new string[] { "A", "B" }; + public override string[] Outputs { get; } = new string[] { "Q" }; + internal override Dictionary TruthTable { get; } = new Dictionary + { + { new State( false, false ), new State( true ) }, + { new State( false, true ), new State( false ) }, + { new State( true, false ), new State( false ) }, + { new State( true, true ), new State( true ) }, + }; + } + + #endregion +} diff --git a/Assets/Scripts/Gates/GateDefinition.cs.meta b/Assets/Scripts/Gates/GateDefinition.cs.meta new file mode 100755 index 0000000..c88f1d0 --- /dev/null +++ b/Assets/Scripts/Gates/GateDefinition.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d351d9e762a4bc64c8491ae8fabcdede +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/MouseManager.cs b/Assets/Scripts/MouseManager.cs new file mode 100755 index 0000000..b12d78c --- /dev/null +++ b/Assets/Scripts/MouseManager.cs @@ -0,0 +1,96 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace UntitledLogicGame +{ + public class MouseManager : MonoBehaviour + { + #region Unity Properties + + #endregion + + #region Public Properties + + public static Vector3 MousePos { get; set; } + + #endregion + + #region Private Properties + + private Cable _currentCable; + private Gate _currentGate; + private Vector3 _currentGateDelta; + + #endregion + + #region Unity Methods + + private void Start() + { + + } + + private void Update() + { + var mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition); + mousePos.z = 0f; + MousePos = mousePos; + + if (Input.GetMouseButton(0)) + { + if(_currentCable == null) + { + if (_currentGate != null) + { + _currentGate.transform.position = MousePos - _currentGateDelta; + } + else if (GameManager.Instance.CurrentAnchor != null) + { + _currentCable = Instantiate(GameManager.Instance.CablePrefab, GameManager.Instance.CablesGroup, true); + _currentCable.StartAnchor = GameManager.Instance.CurrentAnchor; + } + else if (GameManager.Instance.CurrentGate != null) + { + _currentGate = GameManager.Instance.CurrentGate; + _currentGateDelta = MousePos - _currentGate.transform.position; + foreach(var renderer in _currentGate.GetComponentsInChildren()) + { + renderer.sortingLayerName = "moving"; + } + } + } + } + else if (_currentCable != null) + { + if (GameManager.Instance.CurrentAnchor == null || _currentCable.StartAnchor.IsInput == GameManager.Instance.CurrentAnchor.IsInput) + { + Destroy(_currentCable.gameObject); + } + else + { + _currentCable.EndAnchor = GameManager.Instance.CurrentAnchor; + } + _currentCable = null; + } + else if(_currentGate != null) + { + foreach (var renderer in _currentGate.GetComponentsInChildren()) + { + renderer.sortingLayerName = "default"; + } + _currentGate = null; + } + } + + #endregion + + #region Public Methods + + #endregion + + #region Private Methods + + #endregion + } +} \ No newline at end of file diff --git a/Assets/Scripts/MouseManager.cs.meta b/Assets/Scripts/MouseManager.cs.meta new file mode 100755 index 0000000..25c83ca --- /dev/null +++ b/Assets/Scripts/MouseManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 11e573998e532eb42bdb43b80953d23f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Utils.cs b/Assets/Scripts/Utils.cs index 15e2bd0..f209722 100755 --- a/Assets/Scripts/Utils.cs +++ b/Assets/Scripts/Utils.cs @@ -1,25 +1,55 @@ -using System.Linq; +using System; +using System.Collections; +using System.Linq; using UnityEngine; +using Random = UnityEngine.Random; -public static class Utils +namespace UntitledLogicGame { - #region String Utils - - public static string RandomString(int length) + public static class Utils { - const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; - return new string(Enumerable.Repeat(chars, length) - .Select(s => s[Random.Range(0, s.Length)]).ToArray()); + #region String Utils + + public static string RandomString(int length) + { + const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; + return new string(Enumerable.Repeat(chars, length) + .Select(s => s[Random.Range(0, s.Length)]).ToArray()); + } + + #endregion + + #region Bool Utils + + public static bool[][] AllBoolArrayValues(int length) + { + int count = (int)Math.Pow(2, length); + return new ArrayList[count].Select((v, i) => i.ToBoolArray(length)).ToArray(); + } + + #endregion + + #region Unity Utils + + public static void RandomName(string prefix, GameObject obj) + { + obj.name = $"{prefix}_{RandomString(5)}"; + } + + #endregion } - #endregion - - #region Unity Utils - - public static void RandomName(string prefix, GameObject obj) + public static class Extensions { - obj.name = $"{prefix}_{RandomString(5)}"; - } + public static bool[] ToBoolArray(this int value, int length) + { + string str = Convert.ToString(value, 2).PadLeft(length, '0'); + return str.Select((x) => x == '1').ToArray(); + } - #endregion -} + public static int ToInt(this bool[] array) + { + return array.Select((v, i) => (v ? 1 : 0) << (array.Length - i - 1)).Sum(); + } + } +} \ No newline at end of file diff --git a/ProjectSettings/EditorBuildSettings.asset b/ProjectSettings/EditorBuildSettings.asset index 62c5a75..e1d9772 100755 --- a/ProjectSettings/EditorBuildSettings.asset +++ b/ProjectSettings/EditorBuildSettings.asset @@ -1,11 +1,11 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1045 &1 -EditorBuildSettings: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Scenes: - - enabled: 1 - path: Assets/Scenes/SampleScene.unity - guid: 2cda990e2423bbf4892e6590ba056729 - m_configObjects: {} +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1045 &1 +EditorBuildSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Scenes: + - enabled: 1 + path: Assets/Scenes/Workspace.unity + guid: 2cda990e2423bbf4892e6590ba056729 + m_configObjects: {} diff --git a/ProjectSettings/TagManager.asset b/ProjectSettings/TagManager.asset index eeaef21..fdce32b 100755 --- a/ProjectSettings/TagManager.asset +++ b/ProjectSettings/TagManager.asset @@ -13,7 +13,7 @@ TagManager: - UI - - - - + - Background Image - - - @@ -41,12 +41,6 @@ TagManager: - name: Default uniqueID: 0 locked: 0 - - name: gates + - name: moving uniqueID: 2301276529 locked: 0 - - name: wires - uniqueID: 791405367 - locked: 0 - - name: anchors - uniqueID: 1165454523 - locked: 0