add tools and stuffz

This commit is contained in:
Mister_Nebula 2021-11-10 09:12:05 +00:00
parent eadb232f7e
commit 0d3fd15585
7 changed files with 356 additions and 25 deletions

View File

@ -252,6 +252,8 @@
<Compile Include="Tools\ProbeLauncherTool\WorldObjects\QSBProbeLauncher.cs" />
<Compile Include="Tools\ProbeTool\ProbeCreator.cs" />
<Compile Include="Tools\SignalscopeTool\SignalscopeCreator.cs" />
<Compile Include="Tools\TranslatorTool\QSBNomaiTranslator.cs" />
<Compile Include="Tools\TranslatorTool\QSBNomaiTranslatorProp.cs" />
<Compile Include="Tools\TranslatorTool\TranslatorCreator.cs" />
<Compile Include="Utility\CustomRelativisticParticleSystem.cs" />
<Compile Include="RoastingSync\QSBMarshmallow.cs" />

View File

@ -228,7 +228,7 @@ namespace QSB.Syncs
ReparentAttachedObject(ReferenceTransform);
}
UpdateTransform();
oh rUpdateTransform();
base.Update();
}

View File

@ -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<MeshRenderer>().materials[0];
Props_HEA_Lightbulb_OFF_mat = GameObject.Find("Props_HEA_Probe_Prelaunch").GetComponent<MeshRenderer>().materials[1];
if (QSBSceneManager.CurrentScene == OWScene.SolarSystem)
{
Props_HEA_Lightbulb_mat = GameObject.Find("Props_HEA_Lantern (10)/Lantern_Lamp").GetComponent<MeshRenderer>().materials[0];

View File

@ -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)
{

View File

@ -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<QSBNomaiTranslatorProp>();
_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<NomaiText>();
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);
}
}
}

View File

@ -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<TranslatorTargetBeam>();
_scanBeams = transform.GetComponentsInChildren<TranslatorScanBeam>();
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;
}
}
}
}

View File

@ -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<NomaiTranslatorProp>());
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<NomaiTranslatorProp>();
var newProp = REMOTE_NomaiTranslatorProp.AddComponent<QSBNomaiTranslatorProp>();
newProp.TranslatorProp = REMOTE_TranslatorGroup.gameObject;
Object.Destroy(REMOTE_NomaiTranslatorProp.GetComponent<NomaiTranslatorProp>());
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<NomaiTranslator>();
var tool = translatorRoot.AddComponent<QSBTool>();
var oldTranslator = REMOTE_NomaiTranslatorProp.GetComponent<NomaiTranslator>();
var tool = REMOTE_NomaiTranslatorProp.AddComponent<QSBNomaiTranslator>();
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));
}
}
}