diff --git a/.idea/.idea.Aetheria-Economy/.idea/contentModel.xml b/.idea/.idea.Aetheria-Economy/.idea/contentModel.xml
index 904cce64b..847167c23 100644
--- a/.idea/.idea.Aetheria-Economy/.idea/contentModel.xml
+++ b/.idea/.idea.Aetheria-Economy/.idea/contentModel.xml
@@ -1876,8 +1876,8 @@
+
-
diff --git a/Assembly-CSharp.csproj b/Assembly-CSharp.csproj
index f74e7030c..6cfc147f4 100644
--- a/Assembly-CSharp.csproj
+++ b/Assembly-CSharp.csproj
@@ -1020,8 +1020,8 @@
+
-
diff --git a/Assets/Scripts/ServerShared/BlueprintData.cs b/Assets/Scripts/ServerShared/BlueprintData.cs
index f77bc47a1..37736296d 100644
--- a/Assets/Scripts/ServerShared/BlueprintData.cs
+++ b/Assets/Scripts/ServerShared/BlueprintData.cs
@@ -34,7 +34,7 @@ public class BlueprintData : DatabaseEntry, INamedEntry
public float ResearchTime;
[InspectableDatabaseLink(typeof(BlueprintData)), JsonProperty("researchDependencies"), Key(9)]
- public Dictionary Dependencies = new Dictionary();
+ public List Dependencies = new List();
[IgnoreMember] public string EntryName
{
diff --git a/Assets/Scripts/StrategyGameManager.cs b/Assets/Scripts/StrategyGameManager.cs
index a3b8740aa..e6f2a9304 100644
--- a/Assets/Scripts/StrategyGameManager.cs
+++ b/Assets/Scripts/StrategyGameManager.cs
@@ -13,6 +13,8 @@ public class StrategyGameManager : MonoBehaviour
public TabGroup PrimaryTabGroup;
public TabButton GalaxyTabButton;
public TabButton ZoneTabButton;
+ public TabButton TechTabButton;
+ public TechTreeMsagl TechTree;
public Prototype GalaxyZonePrototype;
public Prototype GalaxyZoneLinkPrototype;
public MeshRenderer GalaxyBackground;
@@ -52,6 +54,7 @@ public class StrategyGameManager : MonoBehaviour
private float _galaxyOrthoSize = 50;
private Material _boundaryMaterial;
private Material _backgroundMaterial;
+ private bool _techLayoutGenerated;
void Start()
{
@@ -99,6 +102,15 @@ public class StrategyGameManager : MonoBehaviour
PopulateZone();
Camera.transform.position = -Vector3.forward;
}
+
+ if (_currentTab == TechTabButton)
+ {
+ if (!_techLayoutGenerated)
+ {
+ TechTree.Blueprints = _cache.GetAll().ToArray();
+ TechTree.GenerateTechs();
+ }
+ }
};
_boundaryMaterial = ZoneBoundary.material;
diff --git a/Assets/Scripts/TechTreeTestMsagl.cs b/Assets/Scripts/TechTreeMsagl.cs
similarity index 88%
rename from Assets/Scripts/TechTreeTestMsagl.cs
rename to Assets/Scripts/TechTreeMsagl.cs
index 322f5ace7..0bf9b9936 100644
--- a/Assets/Scripts/TechTreeTestMsagl.cs
+++ b/Assets/Scripts/TechTreeMsagl.cs
@@ -12,7 +12,7 @@ using Random = UnityEngine.Random;
using Unity.Mathematics;
using static Unity.Mathematics.math;
-public class TechTreeTestMsagl : MonoBehaviour
+public class TechTreeMsagl : MonoBehaviour
{
[Section("Assets")]
public string IconsPath;
@@ -69,6 +69,8 @@ public class TechTreeTestMsagl : MonoBehaviour
private List _arrowInstances = new List();
private Texture2D[] _icons;
+ public BlueprintData[] Blueprints { get; set; }
+
void Start()
{
_icons = Resources.LoadAll(IconsPath);
@@ -76,7 +78,7 @@ public class TechTreeTestMsagl : MonoBehaviour
void Update()
{
- if(Input.GetKeyDown(KeyCode.Space))
+ if(TestMode && Input.GetKeyDown(KeyCode.Space))
GenerateTechs();
}
@@ -111,7 +113,7 @@ public class TechTreeTestMsagl : MonoBehaviour
return region;
}
- void GenerateTechs()
+ public void GenerateTechs()
{
foreach (var instance in _ringInstances) instance.ReturnToPool();
_ringInstances.Clear();
@@ -126,32 +128,53 @@ public class TechTreeTestMsagl : MonoBehaviour
_arrowInstances.Clear();
var graph = new GeometryGraph();
-
- for (int i = 0; i < TechCount; i++)
+
+ if (TestMode)
{
- var node = NewNode(i);
- graph.Nodes.Add(node);
- if(i>SeedTechs) graph.Edges.Add(new Edge(graph.Nodes[Random.Range(max(0,i-RollingWindowSize),i-1)], node));
+ for (int i = 0; i < TechCount; i++)
+ {
+ var node = NewNode(i);
+ graph.Nodes.Add(node);
+ if(i>SeedTechs) graph.Edges.Add(new Edge(graph.Nodes[Random.Range(max(0,i-RollingWindowSize),i-1)], node));
+ }
+ foreach (var vertex in graph.Nodes.Where(v=>!graph.Edges.Any(e=>e.Source==v||e.Target==v)))
+ {
+ graph.Edges.Add(new Edge(vertex, graph.Nodes[Random.Range(0,TechCount-1)]));
+ }
}
- foreach (var vertex in graph.Nodes.Where(v=>!graph.Edges.Any(e=>e.Source==v||e.Target==v)))
+ else
{
- graph.Edges.Add(new Edge(vertex, graph.Nodes[Random.Range(0,TechCount-1)]));
+ var nodeMap = new Dictionary();
+ foreach (var blueprint in Blueprints)
+ {
+ var node = NewNode(blueprint);
+ nodeMap[blueprint] = node;
+ graph.Nodes.Add(node);
+ }
+
+ foreach (var targetBlueprint in Blueprints)
+ {
+ //foreach(var sourceBlueprint in Blueprints.Where(sb => targetBlueprint.Dependencies.Any(dep=>sb.ID==dep)))
+ }
}
var islands = graph.GetClusteredConnectedComponents();
var islandMap =
graph.Nodes.ToDictionary(n => n, n => islands.Find(c => c.Nodes.Any(cn => cn.UserData == n)));
-
- foreach (var island in islands)
+
+ if (TestMode)
{
- foreach (var node in island.Nodes)
+ foreach (var island in islands)
{
- var region = GetRegion(island, node, DependencyAncestorDepth, DependencyDepth);
- while (Random.value < MultipleDependencyProbability && region.Count > 0)
+ foreach (var node in island.Nodes)
{
- var dependency = region.RandomElement();
- graph.Edges.Add(new Edge(dependency.UserData as Node, node.UserData as Node));
- region.Remove(dependency);
+ var region = GetRegion(island, node, DependencyAncestorDepth, DependencyDepth);
+ while (Random.value < MultipleDependencyProbability && region.Count > 0)
+ {
+ var dependency = region.RandomElement();
+ graph.Edges.Add(new Edge(dependency.UserData as Node, node.UserData as Node));
+ region.Remove(dependency);
+ }
}
}
}
diff --git a/Assets/Scripts/TechTreeTestMsagl.cs.meta b/Assets/Scripts/TechTreeMsagl.cs.meta
similarity index 100%
rename from Assets/Scripts/TechTreeTestMsagl.cs.meta
rename to Assets/Scripts/TechTreeMsagl.cs.meta