From 0d3fd1558542aeddac9dfba83eb08b958d718c5d Mon Sep 17 00:00:00 2001
From: Mister_Nebula <41904486+misternebula@users.noreply.github.com>
Date: Wed, 10 Nov 2021 09:12:05 +0000
Subject: [PATCH] add tools and stuffz
---
QSB/QSB.csproj | 2 +
QSB/Syncs/SyncBase.cs | 2 +-
QSB/Tools/PlayerToolsManager.cs | 2 +
QSB/Tools/QSBTool.cs | 4 +-
.../TranslatorTool/QSBNomaiTranslator.cs | 172 ++++++++++++++++++
.../TranslatorTool/QSBNomaiTranslatorProp.cs | 149 +++++++++++++++
QSB/Tools/TranslatorTool/TranslatorCreator.cs | 50 ++---
7 files changed, 356 insertions(+), 25 deletions(-)
create mode 100644 QSB/Tools/TranslatorTool/QSBNomaiTranslator.cs
create mode 100644 QSB/Tools/TranslatorTool/QSBNomaiTranslatorProp.cs
diff --git a/QSB/QSB.csproj b/QSB/QSB.csproj
index b2f1c2ce..23c6b54c 100644
--- a/QSB/QSB.csproj
+++ b/QSB/QSB.csproj
@@ -252,6 +252,8 @@
+
+
diff --git a/QSB/Syncs/SyncBase.cs b/QSB/Syncs/SyncBase.cs
index 988231d3..9628d248 100644
--- a/QSB/Syncs/SyncBase.cs
+++ b/QSB/Syncs/SyncBase.cs
@@ -228,7 +228,7 @@ namespace QSB.Syncs
ReparentAttachedObject(ReferenceTransform);
}
- UpdateTransform();
+ oh rUpdateTransform();
base.Update();
}
diff --git a/QSB/Tools/PlayerToolsManager.cs b/QSB/Tools/PlayerToolsManager.cs
index eab24ce1..eb7fc62b 100644
--- a/QSB/Tools/PlayerToolsManager.cs
+++ b/QSB/Tools/PlayerToolsManager.cs
@@ -15,6 +15,7 @@ namespace QSB.Tools
public static Material Props_HEA_PlayerTool_mat;
public static Material Props_HEA_Lightbulb_mat;
public static Material Props_HEA_Lightbulb_OFF_mat;
+ public static Material Structure_HEA_PlayerShip_Screens_mat;
public static void Init(Transform playerCamera)
{
@@ -22,6 +23,7 @@ namespace QSB.Tools
Props_HEA_PlayerTool_mat = GameObject.Find("Props_HEA_ProbeLauncher_ProbeCamera/ProbeLauncherChassis").GetComponent().materials[0];
Props_HEA_Lightbulb_OFF_mat = GameObject.Find("Props_HEA_Probe_Prelaunch").GetComponent().materials[1];
+
if (QSBSceneManager.CurrentScene == OWScene.SolarSystem)
{
Props_HEA_Lightbulb_mat = GameObject.Find("Props_HEA_Lantern (10)/Lantern_Lamp").GetComponent().materials[0];
diff --git a/QSB/Tools/QSBTool.cs b/QSB/Tools/QSBTool.cs
index 08d15018..1a001d99 100644
--- a/QSB/Tools/QSBTool.cs
+++ b/QSB/Tools/QSBTool.cs
@@ -31,8 +31,8 @@ namespace QSB.Tools
set => _arrivalDegrees = value;
}
- public void OnEnable() => ToolGameObject?.SetActive(true);
- public void OnDisable() => ToolGameObject?.SetActive(false);
+ public virtual void OnEnable() => ToolGameObject?.SetActive(true);
+ public virtual void OnDisable() => ToolGameObject?.SetActive(false);
public void ChangeEquipState(bool equipState)
{
diff --git a/QSB/Tools/TranslatorTool/QSBNomaiTranslator.cs b/QSB/Tools/TranslatorTool/QSBNomaiTranslator.cs
new file mode 100644
index 00000000..dfe58ff5
--- /dev/null
+++ b/QSB/Tools/TranslatorTool/QSBNomaiTranslator.cs
@@ -0,0 +1,172 @@
+using QSB.Utility;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using UnityEngine;
+
+namespace QSB.Tools.TranslatorTool
+{
+ class QSBNomaiTranslator : QSBTool
+ {
+ public static float distToClosestTextCenter = 1f;
+
+ public const float MAX_INTERACT_RANGE = 25f;
+
+ public Transform RaycastTransform;
+ private Collider _lastHitCollider;
+ private QSBNomaiTranslatorProp _translatorProp;
+ private NomaiText _currentNomaiText;
+ private NomaiTextLine _lastHighlightedTextLine;
+ private bool _lastLineWasTranslated;
+ private bool _lastLineLocked;
+ private float _lastLineDist;
+
+ private void Awake()
+ {
+ DebugLog.DebugWrite($"Awake.");
+ _lastHitCollider = null;
+ _translatorProp = this.GetRequiredComponentInChildren();
+ _currentNomaiText = null;
+ }
+
+ public override void OnDisable()
+ {
+ _translatorProp.OnFinishUnequipAnimation();
+ }
+
+ public override void EquipTool()
+ {
+ DebugLog.DebugWrite($"Equip.");
+ base.EquipTool();
+ _translatorProp.OnEquipTool();
+ }
+
+ public override void UnequipTool()
+ {
+ DebugLog.DebugWrite($"Unequip.");
+ base.UnequipTool();
+ _translatorProp.OnUnequipTool();
+ }
+
+ public override void Update()
+ {
+ base.Update();
+ if (!_isEquipped)
+ {
+ return;
+ }
+
+ distToClosestTextCenter = 1f;
+ var tooCloseToTarget = false;
+ var num = float.MaxValue;
+ if (Physics.Raycast(RaycastTransform.position, RaycastTransform.forward, out var raycastHit, 25f, OWLayerMask.blockableInteractMask))
+ {
+ _lastHitCollider = raycastHit.collider;
+ _currentNomaiText = _lastHitCollider.GetComponent();
+ if (_currentNomaiText != null)
+ {
+ DebugLog.DebugWrite($"Found Nomai text.");
+ }
+
+ if (_currentNomaiText != null && !_currentNomaiText.CheckAllowFocus(raycastHit.distance, RaycastTransform.forward))
+ {
+ DebugLog.DebugWrite($"This text doesn't allow focus.");
+ _currentNomaiText = null;
+ }
+ num = raycastHit.distance;
+ }
+ else
+ {
+ _lastHitCollider = null;
+ _currentNomaiText = null;
+ }
+
+ if (_currentNomaiText != null)
+ {
+ tooCloseToTarget = (num < _currentNomaiText.GetMinimumReadableDistance());
+
+ if (_currentNomaiText is NomaiWallText)
+ {
+ DebugLog.DebugWrite($"Wall text.");
+ var nomaiTextLine = (_currentNomaiText as NomaiWallText).GetClosestTextLineByCenter(raycastHit.point);
+ if (_lastLineLocked)
+ {
+ var distToCenter = _lastHighlightedTextLine.GetDistToCenter(raycastHit.point);
+ if (distToCenter > _lastLineDist + 0.1f)
+ {
+ _lastHighlightedTextLine = nomaiTextLine;
+ _lastLineWasTranslated = (nomaiTextLine != null && nomaiTextLine.IsTranslated());
+ _lastLineLocked = false;
+ }
+ else
+ {
+ nomaiTextLine = _lastHighlightedTextLine;
+ }
+
+ if (distToCenter < _lastLineDist)
+ {
+ _lastLineDist = distToCenter;
+ }
+ }
+ else if (_lastHighlightedTextLine != null && _lastHighlightedTextLine.IsTranslated() && !_lastLineWasTranslated)
+ {
+ _lastLineWasTranslated = true;
+ _lastLineDist = _lastHighlightedTextLine.GetDistToCenter(raycastHit.point);
+ _lastLineLocked = true;
+ }
+ else
+ {
+ _lastHighlightedTextLine = nomaiTextLine;
+ _lastLineWasTranslated = (nomaiTextLine != null && nomaiTextLine.IsTranslated());
+ }
+
+ if (nomaiTextLine && !nomaiTextLine.IsHidden() && nomaiTextLine.IsActive())
+ {
+ distToClosestTextCenter = Vector3.Distance(raycastHit.point, nomaiTextLine.GetWorldCenter());
+ _translatorProp.SetNomaiTextLine(nomaiTextLine);
+ }
+ else
+ {
+ _translatorProp.ClearNomaiTextLine();
+ _lastHighlightedTextLine = null;
+ _lastLineWasTranslated = false;
+ _lastLineLocked = false;
+ }
+ }
+ else if (_currentNomaiText is NomaiComputer)
+ {
+ DebugLog.DebugWrite($"Nomai Computer");
+ var closestRing = (_currentNomaiText as NomaiComputer).GetClosestRing(raycastHit.point, out var num2);
+ if (closestRing)
+ {
+ distToClosestTextCenter = Mathf.Min(num2 * 2f, 1f);
+ _translatorProp.SetNomaiComputerRing(closestRing);
+ }
+ }
+ else if (_currentNomaiText is NomaiVesselComputer)
+ {
+ var closestRing2 = (_currentNomaiText as NomaiVesselComputer).GetClosestRing(raycastHit.point, out var num3);
+ if (closestRing2)
+ {
+ distToClosestTextCenter = Mathf.Min(num3 * 2f, 1f);
+ _translatorProp.SetNomaiVesselComputerRing(closestRing2);
+ }
+ }
+ else if (_currentNomaiText is GhostWallText)
+ {
+ var ghostWallText = _currentNomaiText as GhostWallText;
+ _translatorProp.SetNomaiTextLine(ghostWallText.GetTextLine());
+ }
+ }
+ else
+ {
+ _translatorProp.ClearNomaiTextLine();
+ _translatorProp.ClearNomaiComputerRing();
+ _translatorProp.ClearNomaiVesselComputerRing();
+ }
+
+ _translatorProp.SetTooCloseToTarget(tooCloseToTarget);
+ }
+ }
+}
diff --git a/QSB/Tools/TranslatorTool/QSBNomaiTranslatorProp.cs b/QSB/Tools/TranslatorTool/QSBNomaiTranslatorProp.cs
new file mode 100644
index 00000000..dee0c1f0
--- /dev/null
+++ b/QSB/Tools/TranslatorTool/QSBNomaiTranslatorProp.cs
@@ -0,0 +1,149 @@
+using QSB.Utility;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using UnityEngine;
+using UnityEngine.UI;
+
+namespace QSB.Tools.TranslatorTool
+{
+ class QSBNomaiTranslatorProp : MonoBehaviour
+ {
+ public GameObject TranslatorProp;
+
+ private TranslatorTargetBeam _targetBeam;
+ private TranslatorScanBeam[] _scanBeams;
+ private bool _isTranslating;
+
+ private void Awake()
+ {
+ DebugLog.DebugWrite($"Awake.");
+ _targetBeam = transform.GetComponentInChildren();
+ _scanBeams = transform.GetComponentsInChildren();
+ for (var i = 0; i < _scanBeams.Length; i++)
+ {
+ _scanBeams[i].enabled = false;
+ }
+ TranslatorProp.SetActive(false);
+ }
+
+ private void Start()
+ {
+ DebugLog.DebugWrite($"Start.");
+ enabled = false;
+ }
+
+ public void OnEquipTool()
+ {
+ DebugLog.DebugWrite($"OnEquipTool.");
+ enabled = true;
+ if (_targetBeam)
+ {
+ _targetBeam.Activate();
+ }
+ for (var i = 0; i < _scanBeams.Length; i++)
+ {
+ _scanBeams[i].enabled = true;
+ }
+ TranslatorProp.SetActive(true);
+ }
+
+ public void OnUnequipTool()
+ {
+ DebugLog.DebugWrite($"On unequip tool.");
+ enabled = false;
+ StopTranslating();
+ }
+
+ public void OnFinishUnequipAnimation()
+ {
+ DebugLog.DebugWrite($"On finish unequip animation.");
+
+ if (_targetBeam)
+ {
+ _targetBeam.Deactivate();
+ }
+
+ for (var i = 0; i < _scanBeams.Length; i++)
+ {
+ _scanBeams[i].enabled = false;
+ }
+ TranslatorProp.SetActive(false);
+ }
+
+ public void SetTooCloseToTarget(bool value)
+ {
+ for (var i = 0; i < _scanBeams.Length; i++)
+ {
+ _scanBeams[i].SetTooCloseToTarget(value);
+ }
+ }
+
+ public void SetNomaiTextLine(NomaiTextLine line)
+ {
+ DebugLog.DebugWrite($"Set Nomai Text Line.");
+
+ for (var i = 0; i < _scanBeams.Length; i++)
+ {
+ _scanBeams[i].SetNomaiTextLine(line);
+ _scanBeams[i].SetNomaiComputerRing(null);
+ _scanBeams[i].SetNomaiVesselComputerRing(null);
+ }
+ }
+
+ public void ClearNomaiTextLine()
+ {
+ for (var i = 0; i < _scanBeams.Length; i++)
+ {
+ _scanBeams[i].SetNomaiTextLine(null);
+ }
+ }
+
+ public void SetNomaiComputerRing(NomaiComputerRing ring)
+ {
+ DebugLog.DebugWrite($"Set nomai computer ring.");
+ for (var i = 0; i < _scanBeams.Length; i++)
+ {
+ _scanBeams[i].SetNomaiTextLine(null);
+ _scanBeams[i].SetNomaiComputerRing(ring);
+ _scanBeams[i].SetNomaiVesselComputerRing(null);
+ }
+ }
+
+ public void ClearNomaiComputerRing()
+ {
+ for (var i = 0; i < _scanBeams.Length; i++)
+ {
+ _scanBeams[i].SetNomaiComputerRing(null);
+ }
+ }
+
+ public void SetNomaiVesselComputerRing(NomaiVesselComputerRing ring)
+ {
+ for (var i = 0; i < _scanBeams.Length; i++)
+ {
+ _scanBeams[i].SetNomaiTextLine(null);
+ _scanBeams[i].SetNomaiComputerRing(null);
+ _scanBeams[i].SetNomaiVesselComputerRing(ring);
+ }
+ }
+
+ public void ClearNomaiVesselComputerRing()
+ {
+ for (var i = 0; i < _scanBeams.Length; i++)
+ {
+ _scanBeams[i].SetNomaiVesselComputerRing(null);
+ }
+ }
+
+ private void StopTranslating()
+ {
+ DebugLog.DebugWrite($"Stop Translating.");
+ if (_isTranslating)
+ {
+ _isTranslating = false;
+ }
+ }
+ }
+}
diff --git a/QSB/Tools/TranslatorTool/TranslatorCreator.cs b/QSB/Tools/TranslatorTool/TranslatorCreator.cs
index d46586cb..94a27bb1 100644
--- a/QSB/Tools/TranslatorTool/TranslatorCreator.cs
+++ b/QSB/Tools/TranslatorTool/TranslatorCreator.cs
@@ -9,42 +9,48 @@ namespace QSB.Tools.TranslatorTool
internal static void CreateTranslator(Transform cameraBody)
{
- var original = GameObject.Find("NomaiTranslatorProp");
+ var NomaiTranslatorProp = GameObject.Find("NomaiTranslatorProp");
- var translatorRoot = original.InstantiateInactive();
- translatorRoot.name = "REMOTE_NomaiTranslatorProp";
+ var REMOTE_NomaiTranslatorProp = NomaiTranslatorProp.InstantiateInactive();
+ REMOTE_NomaiTranslatorProp.name = "REMOTE_NomaiTranslatorProp";
- var group = translatorRoot.transform.Find("TranslatorGroup");
- var model = group.Find("Props_HEA_Translator");
+ var REMOTE_TranslatorGroup = REMOTE_NomaiTranslatorProp.transform.Find("TranslatorGroup");
+ var REMOTE_Props_HEA_Translator = REMOTE_TranslatorGroup.Find("Props_HEA_Translator");
- Object.Destroy(translatorRoot.GetComponent());
- Object.Destroy(group.Find("Canvas").gameObject);
- Object.Destroy(group.Find("Lighting").gameObject);
- Object.Destroy(group.Find("TranslatorBeams").gameObject);
- Object.Destroy(model.Find("Props_HEA_Translator_Pivot_RotatingPart")
+ var oldProp = REMOTE_NomaiTranslatorProp.GetComponent();
+ var newProp = REMOTE_NomaiTranslatorProp.AddComponent();
+ newProp.TranslatorProp = REMOTE_TranslatorGroup.gameObject;
+
+ Object.Destroy(REMOTE_NomaiTranslatorProp.GetComponent());
+ Object.Destroy(REMOTE_TranslatorGroup.Find("Canvas").gameObject);
+ //Object.Destroy(REMOTE_TranslatorGroup.Find("Lighting").gameObject);
+ //Object.Destroy(REMOTE_TranslatorGroup.Find("TranslatorBeams").gameObject);
+ Object.Destroy(REMOTE_Props_HEA_Translator.Find("Props_HEA_Translator_Pivot_RotatingPart")
.Find("Props_HEA_Translator_RotatingPart")
.Find("Props_HEA_Translator_RotatingPart_Prepass").gameObject);
- Object.Destroy(model.Find("Props_HEA_Translator_Prepass").gameObject);
+ Object.Destroy(REMOTE_Props_HEA_Translator.Find("Props_HEA_Translator_Prepass").gameObject);
- var oldTranslator = translatorRoot.GetComponent();
- var tool = translatorRoot.AddComponent();
+ var oldTranslator = REMOTE_NomaiTranslatorProp.GetComponent();
+ var tool = REMOTE_NomaiTranslatorProp.AddComponent();
tool.MoveSpring = oldTranslator._moveSpring;
tool.StowTransform = PlayerToolsManager.StowTransform;
tool.HoldTransform = PlayerToolsManager.HoldTransform;
tool.ArrivalDegrees = 5f;
tool.Type = ToolType.Translator;
- tool.ToolGameObject = group.gameObject;
+ tool.ToolGameObject = REMOTE_TranslatorGroup.gameObject;
+ tool.RaycastTransform = cameraBody;
Object.Destroy(oldTranslator);
- PlayerToolsManager.GetRenderer(translatorRoot, "Props_HEA_Translator_Geo").material = PlayerToolsManager.Props_HEA_PlayerTool_mat;
- PlayerToolsManager.GetRenderer(translatorRoot, "Props_HEA_Translator_RotatingPart").material = PlayerToolsManager.Props_HEA_PlayerTool_mat;
- PlayerToolsManager.GetRenderer(translatorRoot, "Props_HEA_Translator_Button_L").material = PlayerToolsManager.Props_HEA_Lightbulb_mat;
- PlayerToolsManager.GetRenderer(translatorRoot, "Props_HEA_Translator_Button_R").material = PlayerToolsManager.Props_HEA_Lightbulb_mat;
+ PlayerToolsManager.GetRenderer(REMOTE_NomaiTranslatorProp, "Props_HEA_Translator_Screen").material = PlayerToolsManager.Structure_HEA_PlayerShip_Screens_mat;
+ PlayerToolsManager.GetRenderer(REMOTE_NomaiTranslatorProp, "Props_HEA_Translator_Geo").material = PlayerToolsManager.Props_HEA_PlayerTool_mat;
+ PlayerToolsManager.GetRenderer(REMOTE_NomaiTranslatorProp, "Props_HEA_Translator_RotatingPart").material = PlayerToolsManager.Props_HEA_PlayerTool_mat;
+ PlayerToolsManager.GetRenderer(REMOTE_NomaiTranslatorProp, "Props_HEA_Translator_Button_L").material = PlayerToolsManager.Props_HEA_Lightbulb_mat;
+ PlayerToolsManager.GetRenderer(REMOTE_NomaiTranslatorProp, "Props_HEA_Translator_Button_R").material = PlayerToolsManager.Props_HEA_Lightbulb_mat;
- translatorRoot.transform.parent = cameraBody;
- translatorRoot.transform.localPosition = Vector3.zero;
- translatorRoot.transform.localScale = TranslatorScale;
- QSBCore.UnityEvents.FireOnNextUpdate(() => translatorRoot.SetActive(true));
+ REMOTE_NomaiTranslatorProp.transform.parent = cameraBody;
+ REMOTE_NomaiTranslatorProp.transform.localPosition = Vector3.zero;
+ REMOTE_NomaiTranslatorProp.transform.localScale = TranslatorScale;
+ QSBCore.UnityEvents.FireOnNextUpdate(() => REMOTE_NomaiTranslatorProp.SetActive(true));
}
}
}