diff --git a/.idea/.idea.Aetheria-Economy/.idea/contentModel.xml b/.idea/.idea.Aetheria-Economy/.idea/contentModel.xml
index 4cc1c992f..3f7010721 100644
--- a/.idea/.idea.Aetheria-Economy/.idea/contentModel.xml
+++ b/.idea/.idea.Aetheria-Economy/.idea/contentModel.xml
@@ -1278,6 +1278,7 @@
+
diff --git a/Assembly-CSharp.csproj b/Assembly-CSharp.csproj
index fe5ca3abb..690530951 100644
--- a/Assembly-CSharp.csproj
+++ b/Assembly-CSharp.csproj
@@ -524,6 +524,7 @@
+
diff --git a/Assets/Materials/Tech Arrow.mat b/Assets/Materials/Tech Arrow.mat
new file mode 100644
index 000000000..116a5a112
--- /dev/null
+++ b/Assets/Materials/Tech Arrow.mat
@@ -0,0 +1,98 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+ serializedVersion: 6
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: Tech Arrow
+ m_Shader: {fileID: 203, guid: 0000000000000000f000000000000000, type: 0}
+ m_ShaderKeywords:
+ m_LightmapFlags: 0
+ m_EnableInstancingVariants: 0
+ m_DoubleSidedGI: 0
+ m_CustomRenderQueue: -1
+ stringTagMap: {}
+ disabledShaderPasses: []
+ m_SavedProperties:
+ serializedVersion: 3
+ m_TexEnvs:
+ - _BumpMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailAlbedoMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailMask:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailNormalMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _EmissionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MainTex:
+ m_Texture: {fileID: 2800000, guid: 2108d278f9e8734469689c30c590ef76, type: 3}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MetallicGlossMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _OcclusionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _ParallaxMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ m_Floats:
+ - _BlendOp: 0
+ - _BumpScale: 1
+ - _CameraFadingEnabled: 0
+ - _CameraFarFadeDistance: 2
+ - _CameraNearFadeDistance: 1
+ - _ColorMode: 0
+ - _Cull: 2
+ - _Cutoff: 0.5
+ - _DetailNormalMapScale: 1
+ - _DistortionBlend: 0.5
+ - _DistortionEnabled: 0
+ - _DistortionStrength: 1
+ - _DistortionStrengthScaled: 0
+ - _DstBlend: 0
+ - _EmissionEnabled: 0
+ - _FlipbookMode: 0
+ - _GlossMapScale: 1
+ - _Glossiness: 0.5
+ - _GlossyReflections: 1
+ - _InvFade: 1
+ - _LightingEnabled: 0
+ - _Metallic: 0
+ - _Mode: 0
+ - _OcclusionStrength: 1
+ - _Parallax: 0.02
+ - _SmoothnessTextureChannel: 0
+ - _SoftParticlesEnabled: 0
+ - _SoftParticlesFarFadeDistance: 1
+ - _SoftParticlesNearFadeDistance: 0
+ - _SpecularHighlights: 1
+ - _SrcBlend: 1
+ - _UVSec: 0
+ - _ZWrite: 1
+ m_Colors:
+ - _CameraFadeParams: {r: 0, g: Infinity, b: 0, a: 0}
+ - _Color: {r: 1, g: 1, b: 1, a: 1}
+ - _ColorAddSubDiff: {r: 0, g: 0, b: 0, a: 0}
+ - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
+ - _SoftParticleFadeParams: {r: 0, g: 0, b: 0, a: 0}
+ - _TintColor: {r: 0.09800005, g: 0.47383344, b: 1, a: 1}
diff --git a/Assets/Materials/Tech Arrow.mat.meta b/Assets/Materials/Tech Arrow.mat.meta
new file mode 100644
index 000000000..f7f2aba7e
--- /dev/null
+++ b/Assets/Materials/Tech Arrow.mat.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 2a2ec810cb24ddb4d869e73fe8a1510a
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 2100000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Materials/Tech Line.mat b/Assets/Materials/Tech Line.mat
index 2d37f4b24..2b9358b13 100644
--- a/Assets/Materials/Tech Line.mat
+++ b/Assets/Materials/Tech Line.mat
@@ -8,7 +8,7 @@ Material:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Tech Line
- m_Shader: {fileID: 203, guid: 0000000000000000f000000000000000, type: 0}
+ m_Shader: {fileID: 200, guid: 0000000000000000f000000000000000, type: 0}
m_ShaderKeywords:
m_LightmapFlags: 0
m_EnableInstancingVariants: 0
@@ -95,4 +95,4 @@ Material:
- _ColorAddSubDiff: {r: 0, g: 0, b: 0, a: 0}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
- _SoftParticleFadeParams: {r: 0, g: 0, b: 0, a: 0}
- - _TintColor: {r: 1, g: 1, b: 1, a: 1}
+ - _TintColor: {r: 1, g: 1, b: 1, a: 0.5019608}
diff --git a/Assets/Materials/Tech Node Stroke.mat b/Assets/Materials/Tech Node Stroke.mat
index 0cb0558b9..026a8a416 100644
--- a/Assets/Materials/Tech Node Stroke.mat
+++ b/Assets/Materials/Tech Node Stroke.mat
@@ -76,4 +76,4 @@ Material:
m_Colors:
- _Color: {r: 1, g: 1, b: 1, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
- - _TintColor: {r: 0.5019608, g: 0.5019608, b: 0.5019608, a: 1}
+ - _TintColor: {r: 0.503, g: 0.503, b: 0.503, a: 1}
diff --git a/Assets/Resources/Sprites/Icons/Stroked/Arrow.png b/Assets/Resources/Sprites/Icons/Stroked/Arrow.png
new file mode 100644
index 000000000..ab2eff247
--- /dev/null
+++ b/Assets/Resources/Sprites/Icons/Stroked/Arrow.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a5ccaefae8b78b658193fa1de41c2aa943f3fe9e629e65a7f6fc9229d2ef1a6f
+size 4179
diff --git a/Assets/Resources/Sprites/Icons/Stroked/Arrow.png.meta b/Assets/Resources/Sprites/Icons/Stroked/Arrow.png.meta
new file mode 100644
index 000000000..306f8afaf
--- /dev/null
+++ b/Assets/Resources/Sprites/Icons/Stroked/Arrow.png.meta
@@ -0,0 +1,110 @@
+fileFormatVersion: 2
+guid: 2108d278f9e8734469689c30c590ef76
+TextureImporter:
+ fileIDToRecycleName: {}
+ externalObjects: {}
+ serializedVersion: 9
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ 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
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: 1
+ wrapV: 1
+ wrapW: 1
+ 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
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ platformSettings:
+ - serializedVersion: 2
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 64
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ - serializedVersion: 2
+ buildTarget: Standalone
+ maxTextureSize: 64
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ - serializedVersion: 2
+ buildTarget: WebGL
+ maxTextureSize: 64
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID: a122cda7ba7cb784c99317d4116e382d
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scenes/Main.unity b/Assets/Scenes/Main.unity
index 11a68cc2b..a38f4124c 100644
--- a/Assets/Scenes/Main.unity
+++ b/Assets/Scenes/Main.unity
@@ -10462,7 +10462,7 @@ Transform:
- {fileID: 874726172}
- {fileID: 904172349}
m_Father: {fileID: 712278634}
- m_RootOrder: 1
+ m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &586612707
MonoBehaviour:
@@ -10478,6 +10478,8 @@ MonoBehaviour:
m_EditorClassIdentifier:
Label: {fileID: 904172350}
Icon: {fileID: 874726173}
+ Fill: {fileID: 555365874}
+ Glow: {fileID: 1343232809}
--- !u!114 &586612708
MonoBehaviour:
m_ObjectHideFlags: 0
@@ -13800,7 +13802,7 @@ Transform:
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 712278634}
- m_RootOrder: 2
+ m_RootOrder: 3
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &680383218
MonoBehaviour:
@@ -13877,7 +13879,7 @@ LineRenderer:
m_Curve:
- serializedVersion: 3
time: 0
- value: 0.067736894
+ value: 0.20457771
inSlope: 0
outSlope: 0
tangentMode: 0
@@ -14318,25 +14320,47 @@ MonoBehaviour:
Tech: {fileID: 586612708}
Link: {fileID: 1941419275}
RadialLink: {fileID: 1417816149}
+ Arrow: {fileID: 1083812776}
Algorithm: 1
- TechCount: 50
- SeedTechs: 5
+ TechCount: 1000
+ SeedTechs: 15
+ RollingWindowSize: 50
+ EliminateIslands: 0
DisconnectedMultiplier: 2
K: 0.25
LengthFactor: 1
- Iterations: 250
+ Iterations: 100
LayerDistance: 1
- VertexDistance: 1
+ VertexDistance: 0.1
WidthPerHeight: 1
PositionMode: -1
Radial: 1
+ MinimizeEdgeLength: 0
+ OptimizeWidth: 0
Sections: 360
PaddingRadians: 3.14
- StartTier: 3
- Scale: 1.5
+ StartTier: 10
+ Scale: 2
LinkPoints: 32
LinkDepth: 5
+ LinkTargetDistance: 0.75
RingDepth: 6
+ ArrowDepth: 3
+ Saturation: 0.95
+ HueMin: 0.5
+ HueMax: 1
+ Brightness: 1
+ RingInnerSaturation: 1
+ RingOuterSaturation: 0.25
+ RingInnerBrightness: 1
+ RingOuterBrightness: 0.1
+ RingColorKeys: 8
+ FillOpacity: 0.15
+ GlowOpacity: 0.6
+ TechFillMaterial: {fileID: 2100000, guid: c3c13ba00125fdf4c92bd96210dc7230, type: 2}
+ TechGlowMaterial: {fileID: 2100000, guid: 1426b25e088759647b77658321197be7, type: 2}
+ TechArrowMaterial: {fileID: 2100000, guid: 2a2ec810cb24ddb4d869e73fe8a1510a, type: 2}
+ TechLinkMaterial: {fileID: 2100000, guid: 67e23cda35beab546a57003dd2d33de1, type: 2}
--- !u!114 &712278633
MonoBehaviour:
m_ObjectHideFlags: 0
@@ -14362,6 +14386,7 @@ Transform:
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children:
+ - {fileID: 1083812780}
- {fileID: 1941419274}
- {fileID: 586612706}
- {fileID: 680383217}
@@ -21345,6 +21370,110 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1081687107}
m_CullTransparentMesh: 0
+--- !u!1 &1083812775
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1083812780}
+ - component: {fileID: 1083812779}
+ - component: {fileID: 1083812778}
+ - component: {fileID: 1083812776}
+ - component: {fileID: 1083812777}
+ m_Layer: 0
+ m_Name: Arrow
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!114 &1083812776
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1083812775}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 1281fe44325f9b548aa42dc331b17266, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+--- !u!114 &1083812777
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1083812775}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: d54298fa75eb6304489e19a84af3413f, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ Icon: {fileID: 1083812778}
+--- !u!23 &1083812778
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1083812775}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 2100000, guid: 2a2ec810cb24ddb4d869e73fe8a1510a, type: 2}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 0
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+--- !u!33 &1083812779
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1083812775}
+ m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!4 &1083812780
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1083812775}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: -4, y: 0, z: 1}
+ m_LocalScale: {x: 0.66, y: 0.66, z: 1}
+ m_Children: []
+ m_Father: {fileID: 712278634}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1084879508
GameObject:
m_ObjectHideFlags: 0
@@ -28301,7 +28430,7 @@ Transform:
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 712278634}
- m_RootOrder: 3
+ m_RootOrder: 4
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1424588006
GameObject:
@@ -36507,7 +36636,6 @@ GameObject:
- component: {fileID: 1813193644}
- component: {fileID: 1813193647}
- component: {fileID: 1813193646}
- - component: {fileID: 1813193645}
m_Layer: 0
m_Name: Quad
m_TagString: Untagged
@@ -36529,20 +36657,6 @@ Transform:
m_Father: {fileID: 1941419274}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!64 &1813193645
-MeshCollider:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 1813193643}
- m_Material: {fileID: 0}
- m_IsTrigger: 0
- m_Enabled: 1
- serializedVersion: 3
- m_Convex: 0
- m_CookingOptions: 14
- m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0}
--- !u!23 &1813193646
MeshRenderer:
m_ObjectHideFlags: 0
@@ -39878,7 +39992,7 @@ Transform:
m_Children:
- {fileID: 1813193644}
m_Father: {fileID: 712278634}
- m_RootOrder: 0
+ m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1941419275
MonoBehaviour:
diff --git a/Assets/Scripts/Galaxy.cs b/Assets/Scripts/Galaxy.cs
index ff8e6ad17..70b9aa9d5 100644
--- a/Assets/Scripts/Galaxy.cs
+++ b/Assets/Scripts/Galaxy.cs
@@ -6,6 +6,7 @@ using System.Linq;
using UnityEngine;
using NaughtyAttributes;
using JM.LinqFaster;
+using QuickGraph;
using Unity.Mathematics;
using static Unity.Mathematics.math;
using static Unity.Mathematics.noise;
diff --git a/Assets/Scripts/ServerShared/Extensions.cs b/Assets/Scripts/ServerShared/Extensions.cs
index 66b82679a..7a8138f1b 100644
--- a/Assets/Scripts/ServerShared/Extensions.cs
+++ b/Assets/Scripts/ServerShared/Extensions.cs
@@ -6,6 +6,7 @@ using System.Reflection;
using System.Text.RegularExpressions;
using LiteNetLib;
using MessagePack;
+using QuickGraph;
using Unity.Mathematics;
using static Unity.Mathematics.math;
using Random = Unity.Mathematics.Random;
@@ -291,6 +292,42 @@ public static class ObjectExtensions
return (r2.x + r2.width >= r1.x && r2.x <= r1.x + r1.width) &&
(r2.y + r2.height >= r1.y && r2.y <= r1.y + r1.height);
}
+
+ public static IEnumerable FindPath(this IEnumerable> data, T source, T target, Func costFunction, bool bestFirst = true) where T : class
+ {
+ List> members = new List>{new DijkstraVertex{Vertex = source}};
+ List searched = new List();
+ while (true)
+ {
+ var v = members.Where(m=>!searched.Contains(m.Vertex)).OrderBy(m=>bestFirst?m.Heuristic:m.Cost).FirstOrDefault();
+ if (v == null) return null; // No vertices left unsearched
+ if (v.Vertex == target)
+ {
+ Stack> path = new Stack>();
+ path.Push(v);
+ while(path.Peek().Parent!=null)
+ path.Push(path.Peek().Parent);
+ return path.Select(dv => dv.Vertex).ToList();
+ }
+ members.AddRange(data.Where(l => l.Source == v.Vertex).Select(l => l.Target).Concat(data.Where(l => l.Target == v.Vertex).Select(l => l.Source))
+ .Where(n => members.All(m => m.Vertex != n)).Select(n =>
+ {
+ var c = new DijkstraVertex {Parent = v, Vertex = n, Cost = v.Cost + costFunction(v.Vertex,n)};
+ if (bestFirst)
+ c.Heuristic = c.Cost + costFunction(c.Vertex,target);
+ return c;
+ }));
+ searched.Add(v.Vertex);
+ }
+ }
+
+ class DijkstraVertex
+ {
+ public double Cost;
+ public double Heuristic;
+ public DijkstraVertex Parent;
+ public T Vertex;
+ }
}
public class ReferenceEqualityComparer : EqualityComparer