1
0
mirror of https://github.com/soarqin/DSP_Mods_TO.git synced 2025-12-12 01:23:31 +08:00
This commit is contained in:
2023-12-29 21:01:00 +08:00
parent ae2a0c60ff
commit f3aeb7289c
2 changed files with 134 additions and 156 deletions

View File

@@ -1,4 +1,5 @@
using CruiseAssist.Commons;
using CruiseAssist.UI;
using HarmonyLib;
namespace CruiseAssist.Patches;
@@ -13,6 +14,7 @@ internal class Patch_GameMain
ConfigManager.CheckConfig(ConfigManager.Step.GameMainBegin);
CruiseAssistPlugin.Extensions.ForEach(delegate(ICruiseAssistExtensionAPI extension)
{
CruiseAssistStarListUI.OnReset();
extension.CheckConfig(ConfigManager.Step.GameMainBegin.ToString());
});
}

View File

@@ -1,7 +1,8 @@
using System.Linq;
using System;
using System.Collections.Generic;
using System.Linq;
using HarmonyLib;
using UnityEngine;
using CruiseAssist.Commons;
using JetBrains.Annotations;
namespace CruiseAssist.UI;
@@ -153,9 +154,11 @@ public static class CruiseAssistStarListUI
switch (ListSelected)
{
case 0:
UpdateStarPlanetList();
var localStar = GameMain.localStar;
var selectTargetStar = CruiseAssistPlugin.SelectTargetStar;
GameMain.galaxy.stars.Select(star => new Tuple<StarData, double>(star, (star.uPosition - GameMain.mainPlayer.uPosition).magnitude)).OrderBy(tuple => tuple.Item2).Do(delegate(Tuple<StarData, double> tuple)
var targetStarId = selectTargetStar == null ? -1 : selectTargetStar.id;
GameMain.galaxy.stars.Select(star => new Commons.Tuple<StarData, double>(star, (star.uPosition - GameMain.mainPlayer.uPosition).magnitude)).OrderBy(tuple => tuple.Item2).Do(delegate(Commons.Tuple<StarData, double> tuple)
{
var star = tuple.Item1;
var range = tuple.Item2;
@@ -167,7 +170,7 @@ public static class CruiseAssistStarListUI
}
else
{
if (selectTargetStar != null && star.id == selectTargetStar.id && GameMain.history.universeObserveLevel >= (range >= 14400000.0 ? 4 : 3))
if (star.id == targetStarId && GameMain.history.universeObserveLevel >= (range >= 14400000.0 ? 4 : 3))
{
ok = true;
}
@@ -175,7 +178,7 @@ public static class CruiseAssistStarListUI
if (ok)
{
star.planets.Select(planet => new Tuple<PlanetData, double>(planet, (planet.uPosition - GameMain.mainPlayer.uPosition).magnitude)).AddItem(new Tuple<PlanetData, double>(null, (star.uPosition - GameMain.mainPlayer.uPosition).magnitude)).OrderBy(tuple2 => tuple2.Item2).Do(delegate(Tuple<PlanetData, double> tuple2)
star.planets.Select(planet => new Commons.Tuple<PlanetData, double>(planet, (planet.uPosition - GameMain.mainPlayer.uPosition).magnitude)).AddItem(new Commons.Tuple<PlanetData, double>(null, (star.uPosition - GameMain.mainPlayer.uPosition).magnitude)).OrderBy(tuple2 => tuple2.Item2).Do(delegate(Commons.Tuple<PlanetData, double> tuple2)
{
GUILayout.BeginHorizontal();
var planetData = tuple2.Item1;
@@ -432,6 +435,8 @@ public static class CruiseAssistStarListUI
public static void SelectStar(StarData star, PlanetData planet)
{
if (star == CruiseAssistPlugin.SelectTargetStar && planet == CruiseAssistPlugin.SelectTargetPlanet) return;
_planets = null;
CruiseAssistPlugin.SelectTargetStar = star;
CruiseAssistPlugin.SelectTargetPlanet = planet;
var uiGame = UIRoot.instance.uiGame;
@@ -482,7 +487,6 @@ public static class CruiseAssistStarListUI
private static void UIStarmap_OnStarClick(UIStarmap starmap, UIStarmapStar star)
{
var traverse = Traverse.Create(starmap);
if (starmap.focusStar != star)
{
if (starmap.viewPlanet != null || (starmap.viewStar != null && star.star != starmap.viewStar))
@@ -491,14 +495,13 @@ public static class CruiseAssistStarListUI
}
starmap.focusPlanet = null;
starmap.focusStar = star;
traverse.Field("_lastClickTime").SetValue(0.0);
starmap._lastClickTime = 0.0;
}
traverse.Field("forceUpdateCursorView").SetValue(true);
starmap.forceUpdateCursorView = true;
}
private static void UIStarmap_OnPlanetClick(UIStarmap starmap, UIStarmapPlanet planet)
{
var traverse = Traverse.Create(starmap);
if (starmap.focusPlanet != planet)
{
if ((starmap.viewPlanet != null && planet.planet != starmap.viewPlanet) || starmap.viewStar != null)
@@ -507,186 +510,159 @@ public static class CruiseAssistStarListUI
}
starmap.focusPlanet = planet;
starmap.focusStar = null;
traverse.Field("_lastClickTime").SetValue(0.0);
starmap._lastClickTime= 0.0;
}
starmap.forceUpdateCursorView = true;
}
public static void OnReset()
{
_planets = null;
_stars = null;
_nextCheckTick = 0;
_lastLocalStar = null;
_lastLocalPlanet = null;
_lastPlayerPos = VectorLF3.zero;
GameMain.history.onFunctionUnlocked += OnObserveUpgradeUnlocked;
}
private static void OnObserveUpgradeUnlocked(int func, double value, int _)
{
var num = (int)(value > 0.0 ? value + 0.5 : value - 0.5);
if (func == 23 && num > 2)
{
_planets = null;
}
traverse.Field("forceUpdateCursorView").SetValue(true);
}
public static void UpdateStarPlanetList()
{
var gameMain = GameMain.instance;
if (gameMain == null) return;
var recheck = gameMain.timei >= _nextCheckTick;
var gameData = GameMain.data;
if (gameData == null) return;
if (_stars == null) LoadAllStars();
if (_planets == null) LoadCurrentStarPlanets();
var localPlanet = gameData.localPlanet;
if (!recheck && localPlanet != _lastLocalPlanet)
{
recheck = true;
}
var localStar = gameData.localStar;
var mainPlayer = GameMain.mainPlayer;
if (!recheck && localStar == _lastLocalStar && (mainPlayer.uPosition - _lastPlayerPos).sqrMagnitude < 2000.0 * 2000.0)
var mainPlayer = gameData.mainPlayer;
if (localPlanet != null && localPlanet == _lastLocalPlanet)
{
if (gameMain.timei < _nextCheckTick) return;
SortPlanets();
_nextCheckTick = gameMain.timei + 300;
return;
}
_nextCheckTick = gameMain.timei + 300;
_lastLocalPlanet = localPlanet;
_lastLocalStar = localStar;
_lastPlayerPos = mainPlayer.uPosition;
var selectTargetStar = CruiseAssistPlugin.SelectTargetStar;
var selectTargetPlanet = CruiseAssistPlugin.SelectTargetPlanet;
GameMain.galaxy.stars.Select(star => new Tuple<StarData, double>(star, (star.uPosition - mainPlayer.uPosition).magnitude)).OrderBy(tuple => tuple.Item2).Do(delegate(Tuple<StarData, double> tuple)
SortPlanets();
_nextCheckTick = gameMain.timei + 300;
var localStar = gameData.localStar;
if (localStar == _lastLocalStar)
{
var star = tuple.Item1;
var range = tuple.Item2;
var starName = CruiseAssistPlugin.GetStarName(star);
var ok = false;
if (localStar != null && star.id == localStar.id)
{
ok = true;
}
else
{
if (selectTargetStar != null && star.id == selectTargetStar.id && GameMain.history.universeObserveLevel >= (range >= 14400000.0 ? 4 : 3))
{
ok = true;
}
}
if (ok)
{
star.planets.Select(planet => new Tuple<PlanetData, double>(planet, (planet.uPosition - mainPlayer.uPosition).magnitude)).AddItem(new Tuple<PlanetData, double>(null, (star.uPosition - mainPlayer.uPosition).magnitude)).OrderBy(tuple2 => tuple2.Item2).Do(delegate(Tuple<PlanetData, double> tuple2)
{
GUILayout.BeginHorizontal();
var planetData = tuple2.Item1;
var distance = tuple2.Item2;
_nameLabelStyle.normal.textColor = Color.white;
_nRangeLabelStyle.normal.textColor = Color.white;
float height;
if (planetData == null)
{
if (selectTargetPlanet == null && selectTargetStar != null && star.id == selectTargetStar.id)
{
_nameLabelStyle.normal.textColor = Color.cyan;
_nRangeLabelStyle.normal.textColor = Color.cyan;
}
var name = starName;
if (CruiseAssistPlugin.Conf.MarkVisitedFlag)
{
name = (star.planets.Where(p => p.factory != null).Count() > 0 ? VisitedMark : NonVisitMark) + name;
}
GUILayout.Label(name, _nameLabelStyle);
height = _nameLabelStyle.CalcHeight(new GUIContent(name), _nameLabelStyle.fixedWidth);
}
else
{
if (selectTargetPlanet != null && planetData.id == selectTargetPlanet.id)
{
_nameLabelStyle.normal.textColor = Color.cyan;
_nRangeLabelStyle.normal.textColor = Color.cyan;
}
var name = starName + " - " + CruiseAssistPlugin.GetPlanetName(planetData);
if (CruiseAssistPlugin.Conf.MarkVisitedFlag)
{
name = (planetData.factory != null ? VisitedMark : NonVisitMark) + name;
}
GUILayout.Label(name, _nameLabelStyle);
height = _nameLabelStyle.CalcHeight(new GUIContent(name), _nameLabelStyle.fixedWidth);
}
GUILayout.FlexibleSpace();
GUILayout.Label(CruiseAssistMainUI.RangeToString(planetData == null ? range : distance), height < 30f ? _nRangeLabelStyle : _hRangeLabelStyle);
if (GUILayout.Button(ActionSelected[ListSelected] == 0 ? "SET" : planetData == null ? "-" : CruiseAssistPlugin.Bookmark.Contains(planetData.id) ? "DEL" : "ADD", height < 30f ? _nActionButtonStyle : _hActionButtonStyle))
{
VFAudio.Create("ui-click-0", null, Vector3.zero, true);
if (ActionSelected[ListSelected] == 0)
{
SelectStar(star, planetData);
var closeStarListWhenSetTargetPlanetFlag = CruiseAssistPlugin.Conf.CloseStarListWhenSetTargetPlanetFlag;
if (closeStarListWhenSetTargetPlanetFlag)
{
Show[_wIdx] = false;
}
}
else
{
if (planetData != null)
{
if (CruiseAssistPlugin.Bookmark.Contains(planetData.id))
{
CruiseAssistPlugin.Bookmark.Remove(planetData.id);
}
else
{
if (CruiseAssistPlugin.Bookmark.Count <= 128)
{
CruiseAssistPlugin.Bookmark.Add(planetData.id);
CruiseAssistMainUI.NextCheckGameTick = GameMain.gameTick + 300L;
}
}
}
}
}
GUILayout.EndHorizontal();
});
}
else
{
GUILayout.BeginHorizontal();
_nameLabelStyle.normal.textColor = Color.white;
_nRangeLabelStyle.normal.textColor = Color.white;
if (selectTargetStar != null && star.id == selectTargetStar.id)
{
_nameLabelStyle.normal.textColor = Color.cyan;
_nRangeLabelStyle.normal.textColor = Color.cyan;
}
var name = starName;
if (CruiseAssistPlugin.Conf.MarkVisitedFlag)
{
name = (star.planets.Count(p => p.factory != null) > 0 ? VisitedMark : NonVisitMark) + name;
}
GUILayout.Label(name, _nameLabelStyle);
var height = _nameLabelStyle.CalcHeight(new GUIContent(name), _nameLabelStyle.fixedWidth);
GUILayout.FlexibleSpace();
GUILayout.Label(CruiseAssistMainUI.RangeToString(range), height < 30f ? _nRangeLabelStyle : _hRangeLabelStyle);
if (GUILayout.Button(ActionSelected[ListSelected] == 0 ? "SET" : "-", height < 30f ? _nActionButtonStyle : _hActionButtonStyle))
{
VFAudio.Create("ui-click-0", null, Vector3.zero, true);
if (ActionSelected[ListSelected] == 0)
{
SelectStar(star, null);
}
}
GUILayout.EndHorizontal();
}
});
if ((mainPlayer.uPosition - _lastPlayerPos).sqrMagnitude < 2000.0 * 2000.0)
return;
}
else
{
_lastLocalStar = localStar;
if (localStar != null)
LoadCurrentStarPlanets();
}
SortStars();
}
private struct StarInfo
private static void LoadAllStars()
{
_stars = [];
var uPos = GameMain.mainPlayer.uPosition;
foreach (var star in GameMain.galaxy.stars)
{
if (star == null) continue;
var visted = CruiseAssistPlugin.Conf.MarkVisitedFlag && star.planets.Count(p => p.factory != null) > 0;
_stars.Add(new StarInfo
{
Data = star,
Name = (visted ? VisitedMark : NonVisitMark) + CruiseAssistPlugin.GetStarName(star),
Range = (star.uPosition - uPos).magnitude,
Visited = visted
});
}
}
private static void LoadCurrentStarPlanets()
{
_planets = [];
var localStar = GameMain.localStar;
VectorLF3 uPos;
if (localStar != null)
{
uPos = GameMain.mainPlayer.uPosition;
foreach (var planet in localStar.planets)
{
if (planet == null) continue;
var visted = CruiseAssistPlugin.Conf.MarkVisitedFlag && planet.factory != null;
_planets.Add(new PlanetInfo
{
Data = planet,
Name = (visted ? VisitedMark : NonVisitMark) + CruiseAssistPlugin.GetPlanetName(planet),
Range = (planet.uPosition - uPos).magnitude,
Visited = visted
});
}
}
var selectedStar = CruiseAssistPlugin.SelectTargetStar;
if (selectedStar == null || selectedStar == localStar) return;
uPos = GameMain.mainPlayer.uPosition;
var range = (selectedStar.uPosition - uPos).magnitude;
if (GameMain.history.universeObserveLevel < (range >= 14400000.0 ? 4 : 3)) return;
foreach (var planet in selectedStar.planets)
{
if (planet == null) continue;
var visted = CruiseAssistPlugin.Conf.MarkVisitedFlag && planet.factory != null;
_planets.Add(new PlanetInfo
{
Data = planet,
Name = (visted ? VisitedMark : NonVisitMark) + CruiseAssistPlugin.GetPlanetName(planet),
Range = (planet.uPosition - uPos).magnitude,
Visited = visted
});
}
}
private static void SortStars()
{
_stars.Sort((s1, s2) => s1.Range.CompareTo(s2.Range));
}
private static void SortPlanets()
{
_planets.Sort((p1, p2) => p1.Range.CompareTo(p2.Range));
}
private class StarInfo
{
public StarData Data;
public string Name;
public double sqrDistance;
public double Range;
public bool Visited;
}
private struct PlanetInfo
private class PlanetInfo
{
public PlanetData Data;
public string Name;
public double sqrDistance;
public double Range;
public bool Visited;
}
private static StarInfo[] _stars = [];
private static PlanetInfo[] _planets = [];
private static List<StarInfo> _stars;
private static List<PlanetInfo> _planets;
private static long _nextCheckTick;
private static StarData _lastLocalStar;
private static PlanetData _lastLocalPlanet;
private static VectorLF3 _lastPlayerPos = VectorLF3.zero;
private static long _nextCheckTick;
private static int _wIdx;
public const float WindowWidth = 400f;
public const float WindowHeight = 480f;