diff --git a/Assets/Icons/outline_traffic_black_36dp.png b/Assets/Icons/outline_traffic_black_36dp.png new file mode 100644 index 0000000..31662f3 --- /dev/null +++ b/Assets/Icons/outline_traffic_black_36dp.png Binary files differ diff --git a/Assets/Icons/outline_traffic_black_36dp.png b/Assets/Icons/outline_traffic_black_36dp.png new file mode 100644 index 0000000..31662f3 --- /dev/null +++ b/Assets/Icons/outline_traffic_black_36dp.png Binary files differ diff --git a/Assets/Icons/outline_traffic_black_36dp.png.meta b/Assets/Icons/outline_traffic_black_36dp.png.meta new file mode 100644 index 0000000..9434332 --- /dev/null +++ b/Assets/Icons/outline_traffic_black_36dp.png.meta @@ -0,0 +1,120 @@ +fileFormatVersion: 2 +guid: 4e8073a61f7f5a442b1ea7addc3117d3 +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: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + 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: -1 + 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: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Icons/outline_traffic_black_36dp.png b/Assets/Icons/outline_traffic_black_36dp.png new file mode 100644 index 0000000..31662f3 --- /dev/null +++ b/Assets/Icons/outline_traffic_black_36dp.png Binary files differ diff --git a/Assets/Icons/outline_traffic_black_36dp.png.meta b/Assets/Icons/outline_traffic_black_36dp.png.meta new file mode 100644 index 0000000..9434332 --- /dev/null +++ b/Assets/Icons/outline_traffic_black_36dp.png.meta @@ -0,0 +1,120 @@ +fileFormatVersion: 2 +guid: 4e8073a61f7f5a442b1ea7addc3117d3 +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: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + 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: -1 + 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: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/SampleScene.unity b/Assets/Scenes/SampleScene.unity index f4c52dd..416d25d 100644 --- a/Assets/Scenes/SampleScene.unity +++ b/Assets/Scenes/SampleScene.unity @@ -229,8 +229,6 @@ carFrontalArea: 4 airDensity: 1.225 carMass: 1000 - carTorque: 300 - carWheelRadius: 0.25 carMesh: {fileID: -2432090755550338912, guid: 6358fc72c8f1a5645b372c8756ff9871, type: 3} carMaterial: {fileID: 2100000, guid: 55dd6bb7e89b75f4b9958b0b7bb7c5d2, type: 2} power: 1000 @@ -250,6 +248,142 @@ m_Father: {fileID: 0} m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &140411785 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 140411786} + - component: {fileID: 140411790} + - component: {fileID: 140411789} + - component: {fileID: 140411788} + - component: {fileID: 140411787} + m_Layer: 5 + m_Name: TrafficLightMode + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &140411786 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 140411785} + 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: 1044801290} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 144, y: 36} + m_SizeDelta: {x: 36, y: 36} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &140411787 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 140411785} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 93424ce963983d1449cd639ba857d364, type: 3} + m_Name: + m_EditorClassIdentifier: + config: {fileID: 128843415} + mode: 3 + index: 2 +--- !u!114 &140411788 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 140411785} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 140411789} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &140411789 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 140411785} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 4e8073a61f7f5a442b1ea7addc3117d3, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &140411790 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 140411785} + m_CullTransparentMesh: 1 --- !u!1 &267250012 GameObject: m_ObjectHideFlags: 0 @@ -345,7 +479,7 @@ - component: {fileID: 555903565} - component: {fileID: 555903564} m_Layer: 5 - m_Name: Button (2) + m_Name: Save m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -874,7 +1008,7 @@ - component: {fileID: 1022671482} - component: {fileID: 1022671485} m_Layer: 5 - m_Name: Button + m_Name: EditMode m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -1092,6 +1226,7 @@ - {fileID: 1621584772} - {fileID: 555903563} - {fileID: 1812881468} + - {fileID: 140411786} m_Father: {fileID: 0} m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -1243,7 +1378,7 @@ - component: {fileID: 1621584773} - component: {fileID: 1621584776} m_Layer: 5 - m_Name: Button (1) + m_Name: DeleteMode m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -1426,7 +1561,7 @@ - component: {fileID: 1812881470} - component: {fileID: 1812881469} m_Layer: 5 - m_Name: Button (3) + m_Name: Load m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 diff --git a/Assets/Icons/outline_traffic_black_36dp.png b/Assets/Icons/outline_traffic_black_36dp.png new file mode 100644 index 0000000..31662f3 --- /dev/null +++ b/Assets/Icons/outline_traffic_black_36dp.png Binary files differ diff --git a/Assets/Icons/outline_traffic_black_36dp.png.meta b/Assets/Icons/outline_traffic_black_36dp.png.meta new file mode 100644 index 0000000..9434332 --- /dev/null +++ b/Assets/Icons/outline_traffic_black_36dp.png.meta @@ -0,0 +1,120 @@ +fileFormatVersion: 2 +guid: 4e8073a61f7f5a442b1ea7addc3117d3 +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: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + 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: -1 + 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: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/SampleScene.unity b/Assets/Scenes/SampleScene.unity index f4c52dd..416d25d 100644 --- a/Assets/Scenes/SampleScene.unity +++ b/Assets/Scenes/SampleScene.unity @@ -229,8 +229,6 @@ carFrontalArea: 4 airDensity: 1.225 carMass: 1000 - carTorque: 300 - carWheelRadius: 0.25 carMesh: {fileID: -2432090755550338912, guid: 6358fc72c8f1a5645b372c8756ff9871, type: 3} carMaterial: {fileID: 2100000, guid: 55dd6bb7e89b75f4b9958b0b7bb7c5d2, type: 2} power: 1000 @@ -250,6 +248,142 @@ m_Father: {fileID: 0} m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &140411785 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 140411786} + - component: {fileID: 140411790} + - component: {fileID: 140411789} + - component: {fileID: 140411788} + - component: {fileID: 140411787} + m_Layer: 5 + m_Name: TrafficLightMode + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &140411786 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 140411785} + 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: 1044801290} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 144, y: 36} + m_SizeDelta: {x: 36, y: 36} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &140411787 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 140411785} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 93424ce963983d1449cd639ba857d364, type: 3} + m_Name: + m_EditorClassIdentifier: + config: {fileID: 128843415} + mode: 3 + index: 2 +--- !u!114 &140411788 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 140411785} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 140411789} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &140411789 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 140411785} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 4e8073a61f7f5a442b1ea7addc3117d3, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &140411790 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 140411785} + m_CullTransparentMesh: 1 --- !u!1 &267250012 GameObject: m_ObjectHideFlags: 0 @@ -345,7 +479,7 @@ - component: {fileID: 555903565} - component: {fileID: 555903564} m_Layer: 5 - m_Name: Button (2) + m_Name: Save m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -874,7 +1008,7 @@ - component: {fileID: 1022671482} - component: {fileID: 1022671485} m_Layer: 5 - m_Name: Button + m_Name: EditMode m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -1092,6 +1226,7 @@ - {fileID: 1621584772} - {fileID: 555903563} - {fileID: 1812881468} + - {fileID: 140411786} m_Father: {fileID: 0} m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -1243,7 +1378,7 @@ - component: {fileID: 1621584773} - component: {fileID: 1621584776} m_Layer: 5 - m_Name: Button (1) + m_Name: DeleteMode m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -1426,7 +1561,7 @@ - component: {fileID: 1812881470} - component: {fileID: 1812881469} m_Layer: 5 - m_Name: Button (3) + m_Name: Load m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 diff --git a/Assets/Scripts/Car/Car.cs b/Assets/Scripts/Car/Car.cs index 2b7a8f9..63de2a1 100644 --- a/Assets/Scripts/Car/Car.cs +++ b/Assets/Scripts/Car/Car.cs @@ -51,7 +51,7 @@ float sqrtAbyB = Mathf.Sqrt(A / B); float offset = Mathf.Atan(1f / sqrtAbyB * speed); brakingTime = offset; - brakingDistance = ((float)(Mathf.Log((float)System.Math.Cosh(sqrtAB * brakingTime - offset)) - + brakingDistance = ((float)(Mathf.Log((float)System.Math.Cosh(sqrtAB * brakingTime - offset)) - Mathf.Log((float)System.Math.Cosh(offset)))) / B; } @@ -88,9 +88,6 @@ if (roadIndex == route.roads.Count - 1) { return false; } - if (Vector3.Distance(position, car.position) > 5) { - return false; - } Road conflict = car.road; float otherDistance = conflict.path.length - car.roadPositon; for (int i = car.roadIndex; !this.route.roads.Contains(conflict) && i < car.route.roads.Count;) { @@ -126,7 +123,7 @@ } private bool isBraking() { - float stoppingDistance = Mathf.Max(brakingDistance, 1f); + float stoppingDistance = brakingDistance + 3f; Road currentRoad = road; float currentRoadPosition = roadPositon; int currentRoadIndex = roadIndex; @@ -145,6 +142,9 @@ if (needsBraking(totalDistance, getMaxSpeed(currentRoad, currentRoadPosition))) { return true; } + if (currentRoad.nodes[0] is CustomNode && !((CustomNode)currentRoad.nodes[0]).isPassable && needsBraking(totalDistance - 2f, 0f)) { + return true; + } } end: List carsToCheck = new List(); diff --git a/Assets/Icons/outline_traffic_black_36dp.png b/Assets/Icons/outline_traffic_black_36dp.png new file mode 100644 index 0000000..31662f3 --- /dev/null +++ b/Assets/Icons/outline_traffic_black_36dp.png Binary files differ diff --git a/Assets/Icons/outline_traffic_black_36dp.png.meta b/Assets/Icons/outline_traffic_black_36dp.png.meta new file mode 100644 index 0000000..9434332 --- /dev/null +++ b/Assets/Icons/outline_traffic_black_36dp.png.meta @@ -0,0 +1,120 @@ +fileFormatVersion: 2 +guid: 4e8073a61f7f5a442b1ea7addc3117d3 +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: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + 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: -1 + 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: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/SampleScene.unity b/Assets/Scenes/SampleScene.unity index f4c52dd..416d25d 100644 --- a/Assets/Scenes/SampleScene.unity +++ b/Assets/Scenes/SampleScene.unity @@ -229,8 +229,6 @@ carFrontalArea: 4 airDensity: 1.225 carMass: 1000 - carTorque: 300 - carWheelRadius: 0.25 carMesh: {fileID: -2432090755550338912, guid: 6358fc72c8f1a5645b372c8756ff9871, type: 3} carMaterial: {fileID: 2100000, guid: 55dd6bb7e89b75f4b9958b0b7bb7c5d2, type: 2} power: 1000 @@ -250,6 +248,142 @@ m_Father: {fileID: 0} m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &140411785 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 140411786} + - component: {fileID: 140411790} + - component: {fileID: 140411789} + - component: {fileID: 140411788} + - component: {fileID: 140411787} + m_Layer: 5 + m_Name: TrafficLightMode + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &140411786 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 140411785} + 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: 1044801290} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 144, y: 36} + m_SizeDelta: {x: 36, y: 36} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &140411787 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 140411785} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 93424ce963983d1449cd639ba857d364, type: 3} + m_Name: + m_EditorClassIdentifier: + config: {fileID: 128843415} + mode: 3 + index: 2 +--- !u!114 &140411788 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 140411785} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 140411789} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &140411789 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 140411785} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 4e8073a61f7f5a442b1ea7addc3117d3, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &140411790 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 140411785} + m_CullTransparentMesh: 1 --- !u!1 &267250012 GameObject: m_ObjectHideFlags: 0 @@ -345,7 +479,7 @@ - component: {fileID: 555903565} - component: {fileID: 555903564} m_Layer: 5 - m_Name: Button (2) + m_Name: Save m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -874,7 +1008,7 @@ - component: {fileID: 1022671482} - component: {fileID: 1022671485} m_Layer: 5 - m_Name: Button + m_Name: EditMode m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -1092,6 +1226,7 @@ - {fileID: 1621584772} - {fileID: 555903563} - {fileID: 1812881468} + - {fileID: 140411786} m_Father: {fileID: 0} m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -1243,7 +1378,7 @@ - component: {fileID: 1621584773} - component: {fileID: 1621584776} m_Layer: 5 - m_Name: Button (1) + m_Name: DeleteMode m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -1426,7 +1561,7 @@ - component: {fileID: 1812881470} - component: {fileID: 1812881469} m_Layer: 5 - m_Name: Button (3) + m_Name: Load m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 diff --git a/Assets/Scripts/Car/Car.cs b/Assets/Scripts/Car/Car.cs index 2b7a8f9..63de2a1 100644 --- a/Assets/Scripts/Car/Car.cs +++ b/Assets/Scripts/Car/Car.cs @@ -51,7 +51,7 @@ float sqrtAbyB = Mathf.Sqrt(A / B); float offset = Mathf.Atan(1f / sqrtAbyB * speed); brakingTime = offset; - brakingDistance = ((float)(Mathf.Log((float)System.Math.Cosh(sqrtAB * brakingTime - offset)) - + brakingDistance = ((float)(Mathf.Log((float)System.Math.Cosh(sqrtAB * brakingTime - offset)) - Mathf.Log((float)System.Math.Cosh(offset)))) / B; } @@ -88,9 +88,6 @@ if (roadIndex == route.roads.Count - 1) { return false; } - if (Vector3.Distance(position, car.position) > 5) { - return false; - } Road conflict = car.road; float otherDistance = conflict.path.length - car.roadPositon; for (int i = car.roadIndex; !this.route.roads.Contains(conflict) && i < car.route.roads.Count;) { @@ -126,7 +123,7 @@ } private bool isBraking() { - float stoppingDistance = Mathf.Max(brakingDistance, 1f); + float stoppingDistance = brakingDistance + 3f; Road currentRoad = road; float currentRoadPosition = roadPositon; int currentRoadIndex = roadIndex; @@ -145,6 +142,9 @@ if (needsBraking(totalDistance, getMaxSpeed(currentRoad, currentRoadPosition))) { return true; } + if (currentRoad.nodes[0] is CustomNode && !((CustomNode)currentRoad.nodes[0]).isPassable && needsBraking(totalDistance - 2f, 0f)) { + return true; + } } end: List carsToCheck = new List(); diff --git a/Assets/Scripts/Mode.cs b/Assets/Scripts/Mode.cs index a10f346..02f3457 100644 --- a/Assets/Scripts/Mode.cs +++ b/Assets/Scripts/Mode.cs @@ -5,5 +5,6 @@ public enum Mode { ClickButton, DrawRoad, - DeleteRoad + DeleteRoad, + TrafficLight, } diff --git a/Assets/Icons/outline_traffic_black_36dp.png b/Assets/Icons/outline_traffic_black_36dp.png new file mode 100644 index 0000000..31662f3 --- /dev/null +++ b/Assets/Icons/outline_traffic_black_36dp.png Binary files differ diff --git a/Assets/Icons/outline_traffic_black_36dp.png.meta b/Assets/Icons/outline_traffic_black_36dp.png.meta new file mode 100644 index 0000000..9434332 --- /dev/null +++ b/Assets/Icons/outline_traffic_black_36dp.png.meta @@ -0,0 +1,120 @@ +fileFormatVersion: 2 +guid: 4e8073a61f7f5a442b1ea7addc3117d3 +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: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + 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: -1 + 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: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/SampleScene.unity b/Assets/Scenes/SampleScene.unity index f4c52dd..416d25d 100644 --- a/Assets/Scenes/SampleScene.unity +++ b/Assets/Scenes/SampleScene.unity @@ -229,8 +229,6 @@ carFrontalArea: 4 airDensity: 1.225 carMass: 1000 - carTorque: 300 - carWheelRadius: 0.25 carMesh: {fileID: -2432090755550338912, guid: 6358fc72c8f1a5645b372c8756ff9871, type: 3} carMaterial: {fileID: 2100000, guid: 55dd6bb7e89b75f4b9958b0b7bb7c5d2, type: 2} power: 1000 @@ -250,6 +248,142 @@ m_Father: {fileID: 0} m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &140411785 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 140411786} + - component: {fileID: 140411790} + - component: {fileID: 140411789} + - component: {fileID: 140411788} + - component: {fileID: 140411787} + m_Layer: 5 + m_Name: TrafficLightMode + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &140411786 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 140411785} + 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: 1044801290} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 144, y: 36} + m_SizeDelta: {x: 36, y: 36} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &140411787 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 140411785} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 93424ce963983d1449cd639ba857d364, type: 3} + m_Name: + m_EditorClassIdentifier: + config: {fileID: 128843415} + mode: 3 + index: 2 +--- !u!114 &140411788 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 140411785} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 140411789} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &140411789 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 140411785} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 4e8073a61f7f5a442b1ea7addc3117d3, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &140411790 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 140411785} + m_CullTransparentMesh: 1 --- !u!1 &267250012 GameObject: m_ObjectHideFlags: 0 @@ -345,7 +479,7 @@ - component: {fileID: 555903565} - component: {fileID: 555903564} m_Layer: 5 - m_Name: Button (2) + m_Name: Save m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -874,7 +1008,7 @@ - component: {fileID: 1022671482} - component: {fileID: 1022671485} m_Layer: 5 - m_Name: Button + m_Name: EditMode m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -1092,6 +1226,7 @@ - {fileID: 1621584772} - {fileID: 555903563} - {fileID: 1812881468} + - {fileID: 140411786} m_Father: {fileID: 0} m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -1243,7 +1378,7 @@ - component: {fileID: 1621584773} - component: {fileID: 1621584776} m_Layer: 5 - m_Name: Button (1) + m_Name: DeleteMode m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -1426,7 +1561,7 @@ - component: {fileID: 1812881470} - component: {fileID: 1812881469} m_Layer: 5 - m_Name: Button (3) + m_Name: Load m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 diff --git a/Assets/Scripts/Car/Car.cs b/Assets/Scripts/Car/Car.cs index 2b7a8f9..63de2a1 100644 --- a/Assets/Scripts/Car/Car.cs +++ b/Assets/Scripts/Car/Car.cs @@ -51,7 +51,7 @@ float sqrtAbyB = Mathf.Sqrt(A / B); float offset = Mathf.Atan(1f / sqrtAbyB * speed); brakingTime = offset; - brakingDistance = ((float)(Mathf.Log((float)System.Math.Cosh(sqrtAB * brakingTime - offset)) - + brakingDistance = ((float)(Mathf.Log((float)System.Math.Cosh(sqrtAB * brakingTime - offset)) - Mathf.Log((float)System.Math.Cosh(offset)))) / B; } @@ -88,9 +88,6 @@ if (roadIndex == route.roads.Count - 1) { return false; } - if (Vector3.Distance(position, car.position) > 5) { - return false; - } Road conflict = car.road; float otherDistance = conflict.path.length - car.roadPositon; for (int i = car.roadIndex; !this.route.roads.Contains(conflict) && i < car.route.roads.Count;) { @@ -126,7 +123,7 @@ } private bool isBraking() { - float stoppingDistance = Mathf.Max(brakingDistance, 1f); + float stoppingDistance = brakingDistance + 3f; Road currentRoad = road; float currentRoadPosition = roadPositon; int currentRoadIndex = roadIndex; @@ -145,6 +142,9 @@ if (needsBraking(totalDistance, getMaxSpeed(currentRoad, currentRoadPosition))) { return true; } + if (currentRoad.nodes[0] is CustomNode && !((CustomNode)currentRoad.nodes[0]).isPassable && needsBraking(totalDistance - 2f, 0f)) { + return true; + } } end: List carsToCheck = new List(); diff --git a/Assets/Scripts/Mode.cs b/Assets/Scripts/Mode.cs index a10f346..02f3457 100644 --- a/Assets/Scripts/Mode.cs +++ b/Assets/Scripts/Mode.cs @@ -5,5 +5,6 @@ public enum Mode { ClickButton, DrawRoad, - DeleteRoad + DeleteRoad, + TrafficLight, } diff --git a/Assets/Scripts/Roads/Node/CustomNode.cs b/Assets/Scripts/Roads/Node/CustomNode.cs index acf79e5..bfb7082 100644 --- a/Assets/Scripts/Roads/Node/CustomNode.cs +++ b/Assets/Scripts/Roads/Node/CustomNode.cs @@ -3,6 +3,9 @@ using UnityEngine; public class CustomNode : Node { + public int lightPhase = 0; + public bool isPassable = true; + public CustomNode(Vector3 position, Transform parent, Config config): base(position, parent, config) { } diff --git a/Assets/Icons/outline_traffic_black_36dp.png b/Assets/Icons/outline_traffic_black_36dp.png new file mode 100644 index 0000000..31662f3 --- /dev/null +++ b/Assets/Icons/outline_traffic_black_36dp.png Binary files differ diff --git a/Assets/Icons/outline_traffic_black_36dp.png.meta b/Assets/Icons/outline_traffic_black_36dp.png.meta new file mode 100644 index 0000000..9434332 --- /dev/null +++ b/Assets/Icons/outline_traffic_black_36dp.png.meta @@ -0,0 +1,120 @@ +fileFormatVersion: 2 +guid: 4e8073a61f7f5a442b1ea7addc3117d3 +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: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + 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: -1 + 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: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/SampleScene.unity b/Assets/Scenes/SampleScene.unity index f4c52dd..416d25d 100644 --- a/Assets/Scenes/SampleScene.unity +++ b/Assets/Scenes/SampleScene.unity @@ -229,8 +229,6 @@ carFrontalArea: 4 airDensity: 1.225 carMass: 1000 - carTorque: 300 - carWheelRadius: 0.25 carMesh: {fileID: -2432090755550338912, guid: 6358fc72c8f1a5645b372c8756ff9871, type: 3} carMaterial: {fileID: 2100000, guid: 55dd6bb7e89b75f4b9958b0b7bb7c5d2, type: 2} power: 1000 @@ -250,6 +248,142 @@ m_Father: {fileID: 0} m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &140411785 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 140411786} + - component: {fileID: 140411790} + - component: {fileID: 140411789} + - component: {fileID: 140411788} + - component: {fileID: 140411787} + m_Layer: 5 + m_Name: TrafficLightMode + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &140411786 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 140411785} + 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: 1044801290} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 144, y: 36} + m_SizeDelta: {x: 36, y: 36} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &140411787 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 140411785} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 93424ce963983d1449cd639ba857d364, type: 3} + m_Name: + m_EditorClassIdentifier: + config: {fileID: 128843415} + mode: 3 + index: 2 +--- !u!114 &140411788 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 140411785} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 140411789} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &140411789 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 140411785} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 4e8073a61f7f5a442b1ea7addc3117d3, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &140411790 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 140411785} + m_CullTransparentMesh: 1 --- !u!1 &267250012 GameObject: m_ObjectHideFlags: 0 @@ -345,7 +479,7 @@ - component: {fileID: 555903565} - component: {fileID: 555903564} m_Layer: 5 - m_Name: Button (2) + m_Name: Save m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -874,7 +1008,7 @@ - component: {fileID: 1022671482} - component: {fileID: 1022671485} m_Layer: 5 - m_Name: Button + m_Name: EditMode m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -1092,6 +1226,7 @@ - {fileID: 1621584772} - {fileID: 555903563} - {fileID: 1812881468} + - {fileID: 140411786} m_Father: {fileID: 0} m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -1243,7 +1378,7 @@ - component: {fileID: 1621584773} - component: {fileID: 1621584776} m_Layer: 5 - m_Name: Button (1) + m_Name: DeleteMode m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -1426,7 +1561,7 @@ - component: {fileID: 1812881470} - component: {fileID: 1812881469} m_Layer: 5 - m_Name: Button (3) + m_Name: Load m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 diff --git a/Assets/Scripts/Car/Car.cs b/Assets/Scripts/Car/Car.cs index 2b7a8f9..63de2a1 100644 --- a/Assets/Scripts/Car/Car.cs +++ b/Assets/Scripts/Car/Car.cs @@ -51,7 +51,7 @@ float sqrtAbyB = Mathf.Sqrt(A / B); float offset = Mathf.Atan(1f / sqrtAbyB * speed); brakingTime = offset; - brakingDistance = ((float)(Mathf.Log((float)System.Math.Cosh(sqrtAB * brakingTime - offset)) - + brakingDistance = ((float)(Mathf.Log((float)System.Math.Cosh(sqrtAB * brakingTime - offset)) - Mathf.Log((float)System.Math.Cosh(offset)))) / B; } @@ -88,9 +88,6 @@ if (roadIndex == route.roads.Count - 1) { return false; } - if (Vector3.Distance(position, car.position) > 5) { - return false; - } Road conflict = car.road; float otherDistance = conflict.path.length - car.roadPositon; for (int i = car.roadIndex; !this.route.roads.Contains(conflict) && i < car.route.roads.Count;) { @@ -126,7 +123,7 @@ } private bool isBraking() { - float stoppingDistance = Mathf.Max(brakingDistance, 1f); + float stoppingDistance = brakingDistance + 3f; Road currentRoad = road; float currentRoadPosition = roadPositon; int currentRoadIndex = roadIndex; @@ -145,6 +142,9 @@ if (needsBraking(totalDistance, getMaxSpeed(currentRoad, currentRoadPosition))) { return true; } + if (currentRoad.nodes[0] is CustomNode && !((CustomNode)currentRoad.nodes[0]).isPassable && needsBraking(totalDistance - 2f, 0f)) { + return true; + } } end: List carsToCheck = new List(); diff --git a/Assets/Scripts/Mode.cs b/Assets/Scripts/Mode.cs index a10f346..02f3457 100644 --- a/Assets/Scripts/Mode.cs +++ b/Assets/Scripts/Mode.cs @@ -5,5 +5,6 @@ public enum Mode { ClickButton, DrawRoad, - DeleteRoad + DeleteRoad, + TrafficLight, } diff --git a/Assets/Scripts/Roads/Node/CustomNode.cs b/Assets/Scripts/Roads/Node/CustomNode.cs index acf79e5..bfb7082 100644 --- a/Assets/Scripts/Roads/Node/CustomNode.cs +++ b/Assets/Scripts/Roads/Node/CustomNode.cs @@ -3,6 +3,9 @@ using UnityEngine; public class CustomNode : Node { + public int lightPhase = 0; + public bool isPassable = true; + public CustomNode(Vector3 position, Transform parent, Config config): base(position, parent, config) { } diff --git a/Assets/Scripts/Roads/Roads.cs b/Assets/Scripts/Roads/Roads.cs index ec04f26..7c0a7c9 100644 --- a/Assets/Scripts/Roads/Roads.cs +++ b/Assets/Scripts/Roads/Roads.cs @@ -77,6 +77,36 @@ } } + private void handleTrafficLightEditing(Ray ray) { + RaycastHit hit; + if (!Physics.Raycast(ray, out hit, Mathf.Infinity, 1 << 7)) { + return; + } + NodeData nodeData = hit.transform.gameObject.GetComponent(); + if (nodeData == null) { + return; + } + Node node = nodeData.node; + if (!(node is CustomNode)) { + return; + } + CustomNode customNode = (CustomNode) node; + if (Input.GetAxis("Fire1") != 0.0f) { + if (drawMode == DrawMode.DragRoad) { + return; + } + drawMode = DrawMode.DragRoad; + Debug.Log(customNode.isPassable = !customNode.isPassable); + } else if (Input.GetAxis("Fire2") != 0.0f) { + if (drawMode == DrawMode.DragRoad) { + return; + } + drawMode = DrawMode.DragRoad; + } else { + drawMode = DrawMode.None; + } + } + public Vector3 snapGroundPosition(Vector3 position, float snapStrength, int interval) { float x = position.x, z = position.z; float xRounded = Mathf.Round(x / interval) * interval; @@ -101,6 +131,10 @@ } else if (config.mode == Mode.DeleteRoad) { handleRoadRemoving(ray); } + if (config.mode == Mode.TrafficLight) { + handleTrafficLightEditing(ray); + return; + } if (Input.GetAxis("Fire2") != 0.0f) { if (drawMode == DrawMode.None && Physics.Raycast(ray, out hit, Mathf.Infinity, 1 << 7)) { drawMode = DrawMode.DragRoad;