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