mirror of
https://github.com/misternebula/quantum-space-buddies.git
synced 2025-02-21 00:39:53 +00:00
add tools and stuffz
This commit is contained in:
parent
eadb232f7e
commit
0d3fd15585
@ -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" />
|
||||
|
@ -228,7 +228,7 @@ namespace QSB.Syncs
|
||||
ReparentAttachedObject(ReferenceTransform);
|
||||
}
|
||||
|
||||
UpdateTransform();
|
||||
oh rUpdateTransform();
|
||||
|
||||
base.Update();
|
||||
}
|
||||
|
@ -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];
|
||||
|
@ -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)
|
||||
{
|
||||
|
172
QSB/Tools/TranslatorTool/QSBNomaiTranslator.cs
Normal file
172
QSB/Tools/TranslatorTool/QSBNomaiTranslator.cs
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
149
QSB/Tools/TranslatorTool/QSBNomaiTranslatorProp.cs
Normal file
149
QSB/Tools/TranslatorTool/QSBNomaiTranslatorProp.cs
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user