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