mirror of
https://github.com/misternebula/quantum-space-buddies.git
synced 2025-02-10 03:40:01 +00:00
Merge branch 'dev' into meteors
This commit is contained in:
commit
0949924f59
1
QSB.sln
1
QSB.sln
@ -17,6 +17,7 @@ EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{2569F98D-F671-42AA-82DE-505B05CDCEF2}"
|
||||
ProjectSection(SolutionItems) = preProject
|
||||
.gitignore = .gitignore
|
||||
Directory.Build.targets = Directory.Build.targets
|
||||
LICENSE = LICENSE
|
||||
README.md = README.md
|
||||
EndProjectSection
|
||||
|
@ -5,10 +5,7 @@ using QSB.Patches;
|
||||
using QSB.Player;
|
||||
using QSB.Utility;
|
||||
using QSB.WorldSync;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using UnityEngine;
|
||||
|
||||
namespace QSB.Animation.NPC.Patches
|
||||
|
@ -22,7 +22,7 @@ namespace QSB.Animation.Player.Events
|
||||
public override void OnReceiveRemote(bool server, AnimationTriggerMessage message)
|
||||
{
|
||||
var animationSync = QSBPlayerManager.GetSyncObject<AnimationSync>(message.AttachedNetId);
|
||||
if (!QSBCore.WorldObjectsReady || animationSync != null)
|
||||
if (!QSBCore.WorldObjectsReady || animationSync == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
@ -3,11 +3,8 @@ using QSB.WorldSync;
|
||||
|
||||
namespace QSB.EchoesOfTheEye.AirlockSync
|
||||
{
|
||||
class AirlockManager : WorldObjectManager
|
||||
internal class AirlockManager : WorldObjectManager
|
||||
{
|
||||
protected override void RebuildWorldObjects(OWScene scene)
|
||||
{
|
||||
QSBWorldSync.Init<QSBGhostAirlock, GhostAirlock>();
|
||||
}
|
||||
protected override void RebuildWorldObjects(OWScene scene) => QSBWorldSync.Init<QSBGhostAirlock, GhostAirlock>();
|
||||
}
|
||||
}
|
||||
|
@ -1,12 +1,8 @@
|
||||
using QSB.WorldSync;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace QSB.EchoesOfTheEye.AirlockSync.WorldObjects
|
||||
{
|
||||
class QSBGhostAirlock : WorldObject<GhostAirlock>
|
||||
internal class QSBGhostAirlock : WorldObject<GhostAirlock>
|
||||
{
|
||||
public override void Init(GhostAirlock airlock, int id)
|
||||
{
|
||||
|
@ -3,11 +3,8 @@ using QSB.WorldSync;
|
||||
|
||||
namespace QSB.EchoesOfTheEye.LightSensorSync
|
||||
{
|
||||
class LightSensorManager : WorldObjectManager
|
||||
internal class LightSensorManager : WorldObjectManager
|
||||
{
|
||||
protected override void RebuildWorldObjects(OWScene scene)
|
||||
{
|
||||
QSBWorldSync.Init<QSBSingleLightSensor, SingleLightSensor>();
|
||||
}
|
||||
protected override void RebuildWorldObjects(OWScene scene) => QSBWorldSync.Init<QSBSingleLightSensor, SingleLightSensor>();
|
||||
}
|
||||
}
|
||||
|
@ -1,17 +1,14 @@
|
||||
using HarmonyLib;
|
||||
using QSB.Patches;
|
||||
using QSB.Player;
|
||||
using QSB.Tools;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using QSB.Tools.FlashlightTool;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using UnityEngine;
|
||||
|
||||
namespace QSB.EchoesOfTheEye.LightSensorSync.Patches
|
||||
{
|
||||
[HarmonyPatch]
|
||||
class LightSensorPatches : QSBPatch
|
||||
internal class LightSensorPatches : QSBPatch
|
||||
{
|
||||
public override QSBPatchTypes Type => QSBPatchTypes.OnClientConnect;
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
namespace QSB.EchoesOfTheEye.LightSensorSync.WorldObjects
|
||||
{
|
||||
class QSBSingleLightSensor : WorldObject<SingleLightSensor>
|
||||
internal class QSBSingleLightSensor : WorldObject<SingleLightSensor>
|
||||
{
|
||||
public override void Init(SingleLightSensor sensor, int id)
|
||||
{
|
||||
|
@ -12,7 +12,6 @@ using QSB.ItemSync.Events;
|
||||
using QSB.LogSync.Events;
|
||||
using QSB.OrbSync.Events;
|
||||
using QSB.Player.Events;
|
||||
using QSB.ProbeSync.Events;
|
||||
using QSB.QuantumSync.Events;
|
||||
using QSB.RoastingSync.Events;
|
||||
using QSB.SatelliteSync.Events;
|
||||
@ -21,8 +20,11 @@ using QSB.ShipSync.Events.Component;
|
||||
using QSB.ShipSync.Events.Hull;
|
||||
using QSB.StatueSync.Events;
|
||||
using QSB.TimeSync.Events;
|
||||
using QSB.Tools.Events;
|
||||
using QSB.Tools.FlashlightTool.Events;
|
||||
using QSB.Tools.ProbeLauncherTool.Events;
|
||||
using QSB.Tools.ProbeTool.Events;
|
||||
using QSB.Tools.SignalscopeTool.Events;
|
||||
using QSB.Tools.TranslatorTool.Events;
|
||||
using QSB.TranslationSync.Events;
|
||||
using QSB.Anglerfish.Events;
|
||||
using QSB.Utility;
|
||||
|
@ -1,5 +1,4 @@
|
||||
using QSB.Events;
|
||||
using QSB.ItemSync.WorldObjects;
|
||||
using QSB.ItemSync.WorldObjects.Items;
|
||||
using QSB.ItemSync.WorldObjects.Sockets;
|
||||
using QSB.Player;
|
||||
|
@ -1,5 +1,4 @@
|
||||
using OWML.Utils;
|
||||
using QSB.ItemSync.WorldObjects.Sockets;
|
||||
using QSB.ItemSync.WorldObjects.Sockets;
|
||||
using QSB.Player;
|
||||
using QSB.SectorSync.WorldObjects;
|
||||
using QSB.Utility;
|
||||
|
@ -1,6 +1,6 @@
|
||||
namespace QSB.ItemSync.WorldObjects.Items
|
||||
{
|
||||
class QSBSimpleLanternItem : QSBOWItem<SimpleLanternItem>
|
||||
internal class QSBSimpleLanternItem : QSBOWItem<SimpleLanternItem>
|
||||
{
|
||||
public override void Init(SimpleLanternItem attachedObject, int id)
|
||||
{
|
||||
|
@ -1,6 +1,6 @@
|
||||
namespace QSB.ItemSync.WorldObjects.Items
|
||||
{
|
||||
class QSBSlideReelItem : QSBOWItem<SlideReelItem>
|
||||
internal class QSBSlideReelItem : QSBOWItem<SlideReelItem>
|
||||
{
|
||||
public override void Init(SlideReelItem attachedObject, int id)
|
||||
{
|
||||
|
@ -1,9 +1,4 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace QSB.ItemSync.WorldObjects.Sockets
|
||||
namespace QSB.ItemSync.WorldObjects.Sockets
|
||||
{
|
||||
internal class QSBSlideProjectorSocket : QSBOWItemDoubleSocket<SlideProjectorSocket>
|
||||
{
|
||||
|
@ -1,9 +1,4 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace QSB.ItemSync.WorldObjects.Sockets
|
||||
namespace QSB.ItemSync.WorldObjects.Sockets
|
||||
{
|
||||
internal class QSBSlideReelSocket : QSBOWItemSocket<SlideReelSocket>
|
||||
{
|
||||
|
@ -5,12 +5,12 @@ using QSB.Animation.Patches;
|
||||
using QSB.CampfireSync.Patches;
|
||||
using QSB.ConversationSync.Patches;
|
||||
using QSB.DeathSync.Patches;
|
||||
using QSB.EchoesOfTheEye.LightSensorSync.Patches;
|
||||
using QSB.ElevatorSync.Patches;
|
||||
using QSB.FrequencySync.Patches;
|
||||
using QSB.GeyserSync.Patches;
|
||||
using QSB.Inputs.Patches;
|
||||
using QSB.ItemSync.Patches;
|
||||
using QSB.EchoesOfTheEye.LightSensorSync.Patches;
|
||||
using QSB.LogSync.Patches;
|
||||
using QSB.OrbSync.Patches;
|
||||
using QSB.Player.Patches;
|
||||
|
@ -3,14 +3,14 @@ using QSB.Animation.Player;
|
||||
using QSB.Animation.Player.Thrusters;
|
||||
using QSB.CampfireSync.WorldObjects;
|
||||
using QSB.ClientServerStateSync;
|
||||
using QSB.ItemSync.WorldObjects;
|
||||
using QSB.ItemSync.WorldObjects.Items;
|
||||
using QSB.Player.TransformSync;
|
||||
using QSB.ProbeSync;
|
||||
using QSB.QuantumSync;
|
||||
using QSB.RoastingSync;
|
||||
using QSB.Tools;
|
||||
using QSB.Tools.FlashlightTool;
|
||||
using QSB.Tools.ProbeLauncherTool;
|
||||
using QSB.Tools.ProbeTool;
|
||||
using QSB.Utility;
|
||||
using System.Linq;
|
||||
using UnityEngine;
|
||||
|
@ -2,7 +2,7 @@
|
||||
using QSB.ItemSync.WorldObjects.Items;
|
||||
using QSB.Player.Events;
|
||||
using QSB.Player.TransformSync;
|
||||
using QSB.Tools;
|
||||
using QSB.Tools.FlashlightTool;
|
||||
using QSB.Utility;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
@ -187,13 +187,13 @@
|
||||
<Compile Include="PoolSync\Patches\PoolPatches.cs" />
|
||||
<Compile Include="PoolSync\PoolManager.cs" />
|
||||
<Compile Include="Inputs\QSBInputManager.cs" />
|
||||
<Compile Include="ProbeSync\Events\PlayerProbeEvent.cs" />
|
||||
<Compile Include="ProbeSync\Events\ProbeStartRetrieveEvent.cs" />
|
||||
<Compile Include="ProbeSync\ProbeEvent.cs" />
|
||||
<Compile Include="ProbeSync\ProbeListener.cs" />
|
||||
<Compile Include="ProbeSync\QSBProbeEffects.cs" />
|
||||
<Compile Include="ProbeSync\QSBProbeLantern.cs" />
|
||||
<Compile Include="ProbeSync\QSBProbeSpotlight.cs" />
|
||||
<Compile Include="Tools\ProbeTool\Events\PlayerProbeEvent.cs" />
|
||||
<Compile Include="Tools\ProbeTool\Events\ProbeStartRetrieveEvent.cs" />
|
||||
<Compile Include="Tools\ProbeTool\ProbeEvent.cs" />
|
||||
<Compile Include="Tools\ProbeTool\ProbeListener.cs" />
|
||||
<Compile Include="Tools\ProbeTool\QSBProbeEffects.cs" />
|
||||
<Compile Include="Tools\ProbeTool\QSBProbeLantern.cs" />
|
||||
<Compile Include="Tools\ProbeTool\QSBProbeSpotlight.cs" />
|
||||
<Compile Include="Patches\QSBPatch.cs" />
|
||||
<Compile Include="Patches\QSBPatchTypes.cs" />
|
||||
<Compile Include="QSBSceneManager.cs" />
|
||||
@ -257,15 +257,23 @@
|
||||
<Compile Include="TimeSync\FastForwardReason.cs" />
|
||||
<Compile Include="TimeSync\Patches\TimePatches.cs" />
|
||||
<Compile Include="TimeSync\PauseReason.cs" />
|
||||
<Compile Include="Tools\FlashlightTool\FlashlightCreator.cs" />
|
||||
<Compile Include="Tools\ProbeLauncherTool\Events\LaunchProbeEvent.cs" />
|
||||
<Compile Include="Tools\ProbeLauncherTool\Events\PlayerLaunchProbeEvent.cs" />
|
||||
<Compile Include="Tools\ProbeLauncherTool\Events\PlayerRetrieveProbeEvent.cs" />
|
||||
<Compile Include="Tools\ProbeLauncherTool\Events\RetrieveProbeEvent.cs" />
|
||||
<Compile Include="Tools\ProbeLauncherTool\Patches\LauncherPatches.cs" />
|
||||
<Compile Include="Tools\ProbeLauncherTool\ProbeLauncherCreator.cs" />
|
||||
<Compile Include="Tools\ProbeLauncherTool\ProbeLauncherListener.cs" />
|
||||
<Compile Include="Tools\ProbeLauncherTool\ProbeLauncherManager.cs" />
|
||||
<Compile Include="Tools\ProbeLauncherTool\QSBProbeLauncherTool.cs" />
|
||||
<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\QSBTranslatorScanBeam.cs" />
|
||||
<Compile Include="Tools\TranslatorTool\TranslatorCreator.cs" />
|
||||
<Compile Include="Utility\CustomRelativisticParticleSystem.cs" />
|
||||
<Compile Include="RoastingSync\QSBMarshmallow.cs" />
|
||||
<Compile Include="RoastingSync\Events\EnterExitRoastingEvent.cs" />
|
||||
@ -292,7 +300,7 @@
|
||||
<Compile Include="TranslationSync\Patches\SpiralPatches.cs" />
|
||||
<Compile Include="TimeSync\TimeSyncType.cs" />
|
||||
<Compile Include="TimeSync\TimeSyncUI.cs" />
|
||||
<Compile Include="Tools\Events\PlayerFlashlightEvent.cs" />
|
||||
<Compile Include="Tools\FlashlightTool\Events\PlayerFlashlightEvent.cs" />
|
||||
<Compile Include="Player\Events\PlayerJoinEvent.cs" />
|
||||
<Compile Include="Player\Events\PlayerReadyEvent.cs" />
|
||||
<Compile Include="Animation\Player\Events\PlayerSuitEvent.cs" />
|
||||
@ -301,8 +309,8 @@
|
||||
<Compile Include="GeyserSync\GeyserManager.cs" />
|
||||
<Compile Include="GeyserSync\WorldObjects\QSBGeyser.cs" />
|
||||
<Compile Include="Tools\ProbeLauncherTool\Events\EquipProbeLauncherEvent.cs" />
|
||||
<Compile Include="Tools\Events\PlayerSignalscopeEvent.cs" />
|
||||
<Compile Include="Tools\Events\PlayerTranslatorEvent.cs" />
|
||||
<Compile Include="Tools\SignalscopeTool\Events\PlayerSignalscopeEvent.cs" />
|
||||
<Compile Include="Tools\TranslatorTool\Events\PlayerTranslatorEvent.cs" />
|
||||
<Compile Include="Events\QSBEvent.cs" />
|
||||
<Compile Include="Player\Events\PlayerJoinMessage.cs" />
|
||||
<Compile Include="Messaging\ToggleMessage.cs" />
|
||||
@ -334,11 +342,11 @@
|
||||
<Compile Include="WorldSync\Events\BoolWorldObjectMessage.cs" />
|
||||
<Compile Include="WorldSync\Events\EnumWorldObjectMessage.cs" />
|
||||
<Compile Include="WorldSync\Events\WorldObjectMessage.cs" />
|
||||
<Compile Include="Tools\QSBFlashlight.cs" />
|
||||
<Compile Include="ProbeSync\QSBProbe.cs" />
|
||||
<Compile Include="Tools\FlashlightTool\QSBFlashlight.cs" />
|
||||
<Compile Include="Tools\ProbeTool\QSBProbe.cs" />
|
||||
<Compile Include="Tools\QSBTool.cs" />
|
||||
<Compile Include="Tools\ToolType.cs" />
|
||||
<Compile Include="ProbeSync\TransformSync\PlayerProbeSync.cs" />
|
||||
<Compile Include="Tools\ProbeTool\TransformSync\PlayerProbeSync.cs" />
|
||||
<Compile Include="Utility\DebugActions.cs" />
|
||||
<Compile Include="Events\QSBEventManager.cs" />
|
||||
<Compile Include="DeathSync\Necronomicon.cs" />
|
||||
@ -479,4 +487,4 @@ xcopy /y "$(ProjectDir)\lib" "$(OwmlDir)\Mods\$(ProjectName)"</PostBuildEvent>
|
||||
<UserProperties manifest_1json__JsonSchema="" />
|
||||
</VisualStudio>
|
||||
</ProjectExtensions>
|
||||
</Project>
|
||||
</Project>
|
@ -6,11 +6,11 @@ using QSB.CampfireSync;
|
||||
using QSB.ConversationSync;
|
||||
using QSB.DeathSync;
|
||||
using QSB.EchoesOfTheEye.AirlockSync;
|
||||
using QSB.EchoesOfTheEye.LightSensorSync;
|
||||
using QSB.ElevatorSync;
|
||||
using QSB.GeyserSync;
|
||||
using QSB.Inputs;
|
||||
using QSB.ItemSync;
|
||||
using QSB.EchoesOfTheEye.LightSensorSync;
|
||||
using QSB.Menus;
|
||||
using QSB.OrbSync;
|
||||
using QSB.Patches;
|
||||
|
@ -11,10 +11,10 @@ using QSB.Patches;
|
||||
using QSB.Player;
|
||||
using QSB.Player.TransformSync;
|
||||
using QSB.PoolSync;
|
||||
using QSB.ProbeSync.TransformSync;
|
||||
using QSB.ShipSync.TransformSync;
|
||||
using QSB.Anglerfish.TransformSync;
|
||||
using QSB.TimeSync;
|
||||
using QSB.Tools.ProbeTool.TransformSync;
|
||||
using QSB.Utility;
|
||||
using QSB.WorldSync;
|
||||
using QuantumUNET;
|
||||
@ -226,6 +226,11 @@ namespace QSB
|
||||
NomaiOrbTransformSync.OrbTransformSyncs.Clear();
|
||||
QSBWorldSync.OldDialogueTrees.Clear();
|
||||
|
||||
if (WakeUpSync.LocalInstance != null)
|
||||
{
|
||||
WakeUpSync.LocalInstance.OnDisconnect();
|
||||
}
|
||||
|
||||
if (_everConnected)
|
||||
{
|
||||
var specificType = QNetworkServer.active ? QSBPatchTypes.OnServerClientConnect : QSBPatchTypes.OnNonServerClientConnect;
|
||||
|
@ -2,7 +2,6 @@
|
||||
using QSB.Events;
|
||||
using QSB.Player;
|
||||
using QSB.QuantumSync.WorldObjects;
|
||||
using QSB.Syncs;
|
||||
using QSB.Utility;
|
||||
using QSB.WorldSync;
|
||||
using System;
|
||||
|
@ -3,7 +3,7 @@ using QSB.Messaging;
|
||||
|
||||
namespace QSB.SatelliteSync.Events
|
||||
{
|
||||
class SatelliteProjectorEvent : QSBEvent<BoolMessage>
|
||||
internal class SatelliteProjectorEvent : QSBEvent<BoolMessage>
|
||||
{
|
||||
public override EventType Type => EventType.SatelliteProjector;
|
||||
|
||||
|
@ -1,25 +1,15 @@
|
||||
using QSB.Events;
|
||||
using QSB.Messaging;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace QSB.SatelliteSync.Events
|
||||
{
|
||||
class SatelliteProjectorSnapshotEvent : QSBEvent<BoolMessage>
|
||||
internal class SatelliteProjectorSnapshotEvent : QSBEvent<BoolMessage>
|
||||
{
|
||||
public override EventType Type => EventType.SatelliteProjectorSnapshot;
|
||||
|
||||
public override void SetupListener()
|
||||
{
|
||||
GlobalMessenger<bool>.AddListener(EventNames.QSBSatelliteSnapshot, (bool forward) => Handler(forward));
|
||||
}
|
||||
public override void SetupListener() => GlobalMessenger<bool>.AddListener(EventNames.QSBSatelliteSnapshot, (bool forward) => Handler(forward));
|
||||
|
||||
public override void CloseListener()
|
||||
{
|
||||
GlobalMessenger<bool>.RemoveListener(EventNames.QSBSatelliteSnapshot, (bool forward) => Handler(forward));
|
||||
}
|
||||
public override void CloseListener() => GlobalMessenger<bool>.RemoveListener(EventNames.QSBSatelliteSnapshot, (bool forward) => Handler(forward));
|
||||
|
||||
private void Handler(bool forward) => SendEvent(CreateMessage(forward));
|
||||
|
||||
|
@ -6,7 +6,7 @@ using UnityEngine;
|
||||
namespace QSB.SatelliteSync.Patches
|
||||
{
|
||||
[HarmonyPatch]
|
||||
class SatelliteProjectorPatches : QSBPatch
|
||||
internal class SatelliteProjectorPatches : QSBPatch
|
||||
{
|
||||
public override QSBPatchTypes Type => QSBPatchTypes.OnClientConnect;
|
||||
|
||||
|
@ -1,10 +1,9 @@
|
||||
using QSB.Utility;
|
||||
using System.Linq;
|
||||
using System.Linq;
|
||||
using UnityEngine;
|
||||
|
||||
namespace QSB.SatelliteSync
|
||||
{
|
||||
class SatelliteProjectorManager : MonoBehaviour
|
||||
internal class SatelliteProjectorManager : MonoBehaviour
|
||||
{
|
||||
public static SatelliteProjectorManager Instance { get; private set; }
|
||||
|
||||
@ -16,10 +15,7 @@ namespace QSB.SatelliteSync
|
||||
QSBSceneManager.OnUniverseSceneLoaded += OnSceneLoaded;
|
||||
}
|
||||
|
||||
public void OnDestroy()
|
||||
{
|
||||
QSBSceneManager.OnUniverseSceneLoaded -= OnSceneLoaded;
|
||||
}
|
||||
public void OnDestroy() => QSBSceneManager.OnUniverseSceneLoaded -= OnSceneLoaded;
|
||||
|
||||
private void OnSceneLoaded(OWScene oldScene, OWScene newScene)
|
||||
{
|
||||
|
@ -36,6 +36,22 @@ namespace QSB.TimeSync
|
||||
|
||||
public override void OnStartLocalPlayer() => LocalInstance = this;
|
||||
|
||||
public void OnDisconnect()
|
||||
{
|
||||
OWTime.SetTimeScale(1f);
|
||||
OWTime.SetMaxDeltaTime(0.06666667f);
|
||||
OWTime.SetFixedTimestep(0.01666667f);
|
||||
Locator.GetActiveCamera().enabled = true;
|
||||
CurrentState = State.NotLoaded;
|
||||
CurrentReason = null;
|
||||
|
||||
Physics.SyncTransforms();
|
||||
SpinnerUI.Hide();
|
||||
TimeSyncUI.Stop();
|
||||
|
||||
QSBInputManager.Instance.SetInputsEnabled(true);
|
||||
}
|
||||
|
||||
public void Start()
|
||||
{
|
||||
if (!IsLocalPlayer)
|
||||
|
@ -2,7 +2,7 @@
|
||||
using QSB.Messaging;
|
||||
using QSB.Player;
|
||||
|
||||
namespace QSB.Tools.Events
|
||||
namespace QSB.Tools.FlashlightTool.Events
|
||||
{
|
||||
public class PlayerFlashlightEvent : QSBEvent<ToggleMessage>
|
||||
{
|
25
QSB/Tools/FlashlightTool/FlashlightCreator.cs
Normal file
25
QSB/Tools/FlashlightTool/FlashlightCreator.cs
Normal file
@ -0,0 +1,25 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace QSB.Tools.FlashlightTool
|
||||
{
|
||||
internal static class FlashlightCreator
|
||||
{
|
||||
private static readonly Vector3 FlashlightOffset = new Vector3(0.7196316f, -0.2697681f, 0.3769455f);
|
||||
|
||||
internal static void CreateFlashlight(Transform cameraBody)
|
||||
{
|
||||
var flashlightRoot = Object.Instantiate(GameObject.Find("FlashlightRoot"));
|
||||
flashlightRoot.name = "REMOTE_FlashlightRoot";
|
||||
flashlightRoot.SetActive(false);
|
||||
var oldComponent = flashlightRoot.GetComponent<Flashlight>();
|
||||
var component = flashlightRoot.AddComponent<QSBFlashlight>();
|
||||
|
||||
component.Init(oldComponent);
|
||||
oldComponent.enabled = false;
|
||||
|
||||
flashlightRoot.transform.parent = cameraBody;
|
||||
flashlightRoot.transform.localPosition = FlashlightOffset;
|
||||
flashlightRoot.SetActive(true);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,7 +1,6 @@
|
||||
using OWML.Utils;
|
||||
using UnityEngine;
|
||||
using UnityEngine;
|
||||
|
||||
namespace QSB.Tools
|
||||
namespace QSB.Tools.FlashlightTool
|
||||
{
|
||||
public class QSBFlashlight : MonoBehaviour, ILightSource
|
||||
{
|
@ -1,26 +1,21 @@
|
||||
using OWML.Utils;
|
||||
using QSB.Player;
|
||||
using QSB.ProbeSync;
|
||||
using QSB.Tools.FlashlightTool;
|
||||
using QSB.Tools.ProbeLauncherTool;
|
||||
using QSB.Utility;
|
||||
using QSB.Tools.SignalscopeTool;
|
||||
using QSB.Tools.TranslatorTool;
|
||||
using System.Linq;
|
||||
using UnityEngine;
|
||||
using UnityEngine.PostProcessing;
|
||||
|
||||
namespace QSB.Tools
|
||||
{
|
||||
public class PlayerToolsManager
|
||||
{
|
||||
private static Transform _toolStowTransform;
|
||||
private static Transform _toolHoldTransform;
|
||||
private static Material Props_HEA_PlayerTool_mat;
|
||||
private static Material Props_HEA_Lightbulb_mat;
|
||||
private static Material Props_HEA_Lightbulb_OFF_mat;
|
||||
public static Transform StowTransform;
|
||||
public static Transform HoldTransform;
|
||||
|
||||
private static readonly Vector3 FlashlightOffset = new Vector3(0.7196316f, -0.2697681f, 0.3769455f);
|
||||
private static readonly Vector3 ProbeLauncherOffset = new Vector3(0.5745087f, -0.26f, 0.4453125f);
|
||||
private static readonly Vector3 SignalscopeScale = new Vector3(1.5f, 1.5f, 1.5f);
|
||||
private static readonly Vector3 TranslatorScale = new Vector3(0.75f, 0.75f, 0.75f);
|
||||
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)
|
||||
{
|
||||
@ -28,8 +23,10 @@ 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)
|
||||
{
|
||||
Structure_HEA_PlayerShip_Screens_mat = GameObject.Find("ProbeScreen (1)/ProbeScreenPivot/ProbeScreen").GetComponent<MeshRenderer>().materials[2];
|
||||
Props_HEA_Lightbulb_mat = GameObject.Find("Props_HEA_Lantern (10)/Lantern_Lamp").GetComponent<MeshRenderer>().materials[0];
|
||||
Props_HEA_Lightbulb_OFF_mat = GameObject.Find("NomaiResearchExhibit/Props_HEA_Probe_STATIC").GetComponent<MeshRenderer>().materials[1];
|
||||
}
|
||||
@ -39,146 +36,25 @@ namespace QSB.Tools
|
||||
|
||||
// BUG : uhhhhh fuckin' uhhhhhhhh (find a material)
|
||||
Props_HEA_Lightbulb_OFF_mat = null;
|
||||
Structure_HEA_PlayerShip_Screens_mat = null;
|
||||
}
|
||||
|
||||
CreateFlashlight(playerCamera);
|
||||
CreateSignalscope(playerCamera);
|
||||
CreateProbeLauncher(playerCamera);
|
||||
CreateTranslator(playerCamera);
|
||||
}
|
||||
|
||||
public static void CreateProbe(Transform newProbe, PlayerInfo player)
|
||||
{
|
||||
var qsbProbe = newProbe.gameObject.AddComponent<QSBProbe>();
|
||||
player.Probe = qsbProbe;
|
||||
qsbProbe.SetOwner(player);
|
||||
|
||||
// Probe_Body
|
||||
Object.Destroy(newProbe.GetComponent<ProbeAnchor>());
|
||||
Object.Destroy(newProbe.GetComponent<AlignWithFluid>());
|
||||
Object.Destroy(newProbe.GetComponent<MapMarker>());
|
||||
Object.Destroy(newProbe.GetComponent<ProbeSeeking>());
|
||||
Object.Destroy(newProbe.GetComponent<SurveyorProbe>());
|
||||
Object.Destroy(newProbe.GetComponent<ProbeHUDMarker>());
|
||||
Object.Destroy(newProbe.GetComponent<LightFlickerController>());
|
||||
Object.Destroy(newProbe.GetComponent<OWRigidbody>());
|
||||
Object.Destroy(newProbe.GetComponent<Rigidbody>());
|
||||
Object.Destroy(newProbe.GetComponent<CenterOfTheUniverseOffsetApplier>());
|
||||
|
||||
// ProbeDetector
|
||||
//Object.Destroy(newProbe.Find("ProbeDetector").gameObject);
|
||||
var probeDetector = newProbe.Find("ProbeDetector").gameObject;
|
||||
Object.Destroy(probeDetector.GetComponent<ForceApplier>());
|
||||
Object.Destroy(probeDetector.GetComponent<ProbeFluidDetector>());
|
||||
Object.Destroy(probeDetector.GetComponent<AlignmentForceDetector>());
|
||||
|
||||
// CameraPivot
|
||||
var cameraPivot = newProbe.Find("CameraPivot");
|
||||
Object.Destroy(cameraPivot.GetComponent<ProbeHorizonTracker>());
|
||||
|
||||
// TODO : Sync probe animations
|
||||
|
||||
// CameraPivot/Geometry/Props_HEA_Probe_ANIM
|
||||
var animRoot = cameraPivot.Find("Geometry").Find("Props_HEA_Probe_ANIM");
|
||||
Object.Destroy(animRoot.GetComponent<ProbeAnimatorController>());
|
||||
Object.Destroy(animRoot.GetComponent<Animator>());
|
||||
|
||||
// TODO : Set up QSB cameras for these two cameras - that's why im not just destroying the GOs here
|
||||
|
||||
// CameraPivot/ForwardCamera
|
||||
var forwardCamera = cameraPivot.Find("ForwardCamera");
|
||||
Object.Destroy(forwardCamera.GetComponent<PostProcessingBehaviour>());
|
||||
Object.Destroy(forwardCamera.GetComponent<NoiseImageEffect>());
|
||||
Object.Destroy(forwardCamera.GetComponent<PlanetaryFogImageEffect>());
|
||||
Object.Destroy(forwardCamera.GetComponent<ProbeCamera>());
|
||||
Object.Destroy(forwardCamera.GetComponent<OWCamera>());
|
||||
Object.Destroy(forwardCamera.GetComponent<Camera>());
|
||||
var oldForwardSpotlight = forwardCamera.GetComponent<ProbeSpotlight>();
|
||||
var newForwardSpotlight = forwardCamera.gameObject.AddComponent<QSBProbeSpotlight>();
|
||||
newForwardSpotlight._id = oldForwardSpotlight.GetValue<ProbeCamera.ID>("_id");
|
||||
newForwardSpotlight._fadeInLength = oldForwardSpotlight.GetValue<float>("_fadeInLength");
|
||||
newForwardSpotlight._intensity = 0.8f;
|
||||
Object.Destroy(oldForwardSpotlight);
|
||||
|
||||
// CameraPivot/RotatingCameraPivot/RotatingCamera
|
||||
var rotatingCamera = cameraPivot.Find("RotatingCameraPivot").Find("RotatingCamera");
|
||||
Object.Destroy(rotatingCamera.GetComponent<PostProcessingBehaviour>());
|
||||
Object.Destroy(rotatingCamera.GetComponent<NoiseImageEffect>());
|
||||
Object.Destroy(rotatingCamera.GetComponent<PlanetaryFogImageEffect>());
|
||||
Object.Destroy(rotatingCamera.GetComponent<ProbeCamera>());
|
||||
Object.Destroy(rotatingCamera.GetComponent<OWCamera>());
|
||||
Object.Destroy(rotatingCamera.GetComponent<Camera>());
|
||||
|
||||
// ProbeEffects
|
||||
var probeEffects = newProbe.Find("ProbeEffects");
|
||||
var oldEffects = probeEffects.GetComponent<ProbeEffects>();
|
||||
var newEffects = probeEffects.gameObject.AddComponent<QSBProbeEffects>();
|
||||
newEffects._flightLoopAudio = oldEffects.GetValue<OWAudioSource>("_flightLoopAudio");
|
||||
newEffects._anchorAudio = oldEffects.GetValue<OWAudioSource>("_anchorAudio");
|
||||
newEffects._anchorParticles = oldEffects.GetValue<ParticleSystem>("_anchorParticles");
|
||||
Object.Destroy(oldEffects);
|
||||
|
||||
Object.Destroy(probeEffects.Find("CloudsEffectBubble").gameObject);
|
||||
Object.Destroy(probeEffects.Find("SandEffectBubble").gameObject);
|
||||
Object.Destroy(probeEffects.Find("ProbeElectricityEffect").gameObject);
|
||||
|
||||
// AmbientLight_Probe
|
||||
var ambientLight = newProbe.Find("AmbientLight_Probe");
|
||||
var oldAmbLantern = ambientLight.GetComponent<ProbeLantern>();
|
||||
var newAmbLantern = ambientLight.gameObject.AddComponent<QSBProbeLantern>();
|
||||
newAmbLantern._fadeInDuration = oldAmbLantern.GetValue<float>("_fadeInDuration");
|
||||
newAmbLantern._fadeInCurve = oldAmbLantern.GetValue<AnimationCurve>("_fadeInCurve");
|
||||
newAmbLantern._fadeOutCurve = oldAmbLantern.GetValue<AnimationCurve>("_fadeOutCurve");
|
||||
newAmbLantern._emissiveRenderer = oldAmbLantern.GetValue<OWEmissiveRenderer>("_emissiveRenderer");
|
||||
newAmbLantern._originalRange = 60f;
|
||||
Object.Destroy(oldAmbLantern);
|
||||
|
||||
// Lantern
|
||||
var lantern = newProbe.Find("Lantern");
|
||||
var oldLantern = lantern.GetComponent<ProbeLantern>();
|
||||
var newLantern = lantern.gameObject.AddComponent<QSBProbeLantern>();
|
||||
newLantern._fadeInDuration = oldLantern.GetValue<float>("_fadeInDuration");
|
||||
newLantern._fadeInCurve = oldLantern.GetValue<AnimationCurve>("_fadeInCurve");
|
||||
newLantern._fadeOutCurve = oldLantern.GetValue<AnimationCurve>("_fadeOutCurve");
|
||||
newLantern._emissiveRenderer = oldLantern.GetValue<OWEmissiveRenderer>("_emissiveRenderer");
|
||||
newLantern._originalRange = 35f;
|
||||
Object.Destroy(oldLantern);
|
||||
|
||||
// RearCamera
|
||||
var rearCamera = newProbe.Find("RearCamera");
|
||||
Object.Destroy(rearCamera.GetComponent<PostProcessingBehaviour>());
|
||||
Object.Destroy(rearCamera.GetComponent<NoiseImageEffect>());
|
||||
Object.Destroy(rearCamera.GetComponent<PlanetaryFogImageEffect>());
|
||||
Object.Destroy(rearCamera.GetComponent<ProbeCamera>());
|
||||
Object.Destroy(rearCamera.GetComponent<OWCamera>());
|
||||
Object.Destroy(rearCamera.GetComponent<Camera>());
|
||||
var oldRearSpotlight = rearCamera.GetComponent<ProbeSpotlight>();
|
||||
var newRearSpotlight = rearCamera.gameObject.AddComponent<QSBProbeSpotlight>();
|
||||
newRearSpotlight._id = oldRearSpotlight.GetValue<ProbeCamera.ID>("_id");
|
||||
newRearSpotlight._fadeInLength = oldRearSpotlight.GetValue<float>("_fadeInLength");
|
||||
newRearSpotlight._intensity = 0.8f;
|
||||
Object.Destroy(oldRearSpotlight);
|
||||
|
||||
// PlaneOffsetMarker_Probe
|
||||
Object.Destroy(newProbe.Find("PlaneOffsetMarker_Probe").gameObject);
|
||||
|
||||
newProbe.Find("RecallEffect").gameObject.GetComponent<SingularityController>().enabled = true;
|
||||
newProbe.Find("RecallEffect").gameObject.GetComponent<SingularityWarpEffect>().enabled = true;
|
||||
newProbe.Find("RecallEffect").name = "RemoteProbeRecallEffect";
|
||||
|
||||
newProbe.gameObject.SetActive(true);
|
||||
FlashlightCreator.CreateFlashlight(playerCamera);
|
||||
SignalscopeCreator.CreateSignalscope(playerCamera);
|
||||
ProbeLauncherCreator.CreateProbeLauncher(playerCamera);
|
||||
TranslatorCreator.CreateTranslator(playerCamera);
|
||||
}
|
||||
|
||||
private static void CreateStowTransforms(Transform cameraBody)
|
||||
{
|
||||
var stow = new GameObject("REMOTE_ToolStowTransform");
|
||||
_toolStowTransform = stow.transform;
|
||||
StowTransform = stow.transform;
|
||||
stow.transform.parent = cameraBody;
|
||||
stow.transform.localPosition = Vector3.zero;
|
||||
stow.transform.localRotation = Quaternion.Euler(45f, 0f, 0f);
|
||||
|
||||
var hold = new GameObject("REMOTE_ToolHoldTransform");
|
||||
_toolHoldTransform = hold.transform;
|
||||
HoldTransform = hold.transform;
|
||||
hold.transform.parent = cameraBody;
|
||||
hold.transform.localPosition = Vector3.zero;
|
||||
hold.transform.localRotation = Quaternion.Euler(0f, 0f, 0f);
|
||||
@ -238,159 +114,7 @@ namespace QSB.Tools
|
||||
visionTorch.transform.localScale = new Vector3(0.33f, 0.33f, 0.33f);
|
||||
}
|
||||
|
||||
private static void CreateFlashlight(Transform cameraBody)
|
||||
{
|
||||
var flashlightRoot = Object.Instantiate(GameObject.Find("FlashlightRoot"));
|
||||
flashlightRoot.name = "REMOTE_FlashlightRoot";
|
||||
flashlightRoot.SetActive(false);
|
||||
var oldComponent = flashlightRoot.GetComponent<Flashlight>();
|
||||
var component = flashlightRoot.AddComponent<QSBFlashlight>();
|
||||
|
||||
component.Init(oldComponent);
|
||||
oldComponent.enabled = false;
|
||||
|
||||
flashlightRoot.transform.parent = cameraBody;
|
||||
flashlightRoot.transform.localPosition = FlashlightOffset;
|
||||
flashlightRoot.SetActive(true);
|
||||
}
|
||||
|
||||
private static void CreateSignalscope(Transform cameraBody)
|
||||
{
|
||||
var signalscopeRoot = Object.Instantiate(GameObject.Find("Signalscope"));
|
||||
signalscopeRoot.name = "REMOTE_Signalscope";
|
||||
signalscopeRoot.SetActive(false);
|
||||
|
||||
Object.Destroy(signalscopeRoot.GetComponent<SignalscopePromptController>());
|
||||
Object.Destroy(signalscopeRoot.transform.Find("Props_HEA_Signalscope")
|
||||
.Find("Props_HEA_Signalscope_Prepass").gameObject);
|
||||
|
||||
var oldSignalscope = signalscopeRoot.GetComponent<Signalscope>();
|
||||
var tool = signalscopeRoot.AddComponent<QSBTool>();
|
||||
tool.MoveSpring = oldSignalscope.GetValue<DampedSpringQuat>("_moveSpring");
|
||||
tool.StowTransform = _toolStowTransform;
|
||||
tool.HoldTransform = _toolHoldTransform;
|
||||
tool.ArrivalDegrees = 5f;
|
||||
tool.Type = ToolType.Signalscope;
|
||||
tool.ToolGameObject = signalscopeRoot.transform.Find("Props_HEA_Signalscope").gameObject;
|
||||
oldSignalscope.enabled = false;
|
||||
|
||||
GetRenderer(signalscopeRoot, "Props_HEA_Signalscope").material = Props_HEA_PlayerTool_mat;
|
||||
|
||||
signalscopeRoot.transform.parent = cameraBody;
|
||||
signalscopeRoot.transform.localPosition = Vector3.zero;
|
||||
signalscopeRoot.transform.localScale = SignalscopeScale;
|
||||
signalscopeRoot.SetActive(true);
|
||||
}
|
||||
|
||||
private static void CreateTranslator(Transform cameraBody)
|
||||
{
|
||||
var original = GameObject.Find("NomaiTranslatorProp");
|
||||
|
||||
var translatorRoot = original.InstantiateInactive();
|
||||
translatorRoot.name = "REMOTE_NomaiTranslatorProp";
|
||||
|
||||
var group = translatorRoot.transform.Find("TranslatorGroup");
|
||||
var model = group.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")
|
||||
.Find("Props_HEA_Translator_RotatingPart")
|
||||
.Find("Props_HEA_Translator_RotatingPart_Prepass").gameObject);
|
||||
Object.Destroy(model.Find("Props_HEA_Translator_Prepass").gameObject);
|
||||
|
||||
var oldTranslator = translatorRoot.GetComponent<NomaiTranslator>();
|
||||
var tool = translatorRoot.AddComponent<QSBTool>();
|
||||
tool.MoveSpring = oldTranslator.GetValue<DampedSpringQuat>("_moveSpring");
|
||||
tool.StowTransform = _toolStowTransform;
|
||||
tool.HoldTransform = _toolHoldTransform;
|
||||
tool.ArrivalDegrees = 5f;
|
||||
tool.Type = ToolType.Translator;
|
||||
tool.ToolGameObject = group.gameObject;
|
||||
Object.Destroy(oldTranslator);
|
||||
|
||||
GetRenderer(translatorRoot, "Props_HEA_Translator_Geo").material = Props_HEA_PlayerTool_mat;
|
||||
GetRenderer(translatorRoot, "Props_HEA_Translator_RotatingPart").material = Props_HEA_PlayerTool_mat;
|
||||
GetRenderer(translatorRoot, "Props_HEA_Translator_Button_L").material = Props_HEA_Lightbulb_mat;
|
||||
GetRenderer(translatorRoot, "Props_HEA_Translator_Button_R").material = Props_HEA_Lightbulb_mat;
|
||||
|
||||
translatorRoot.transform.parent = cameraBody;
|
||||
translatorRoot.transform.localPosition = Vector3.zero;
|
||||
translatorRoot.transform.localScale = TranslatorScale;
|
||||
QSBCore.UnityEvents.FireOnNextUpdate(() => translatorRoot.SetActive(true));
|
||||
}
|
||||
|
||||
private static void CreateProbeLauncher(Transform cameraBody)
|
||||
{
|
||||
var ProbeLauncher = GameObject.Find("PlayerCamera/ProbeLauncher");
|
||||
|
||||
// Create new ProbeLauncher
|
||||
var REMOTE_ProbeLauncher = new GameObject("REMOTE_ProbeLauncher");
|
||||
REMOTE_ProbeLauncher.SetActive(false);
|
||||
|
||||
// Copy children of ProbeLauncher
|
||||
var Props_HEA_ProbeLauncher = ProbeLauncher.transform.Find("Props_HEA_ProbeLauncher");
|
||||
var REMOTE_Props_HEA_ProbeLauncher = Object.Instantiate(Props_HEA_ProbeLauncher, REMOTE_ProbeLauncher.transform, false);
|
||||
|
||||
var LaunchParticleEffect_Underwater = ProbeLauncher.transform.Find("LaunchParticleEffect_Underwater");
|
||||
var REMOTE_LaunchParticleEffect_Underwater = Object.Instantiate(LaunchParticleEffect_Underwater, REMOTE_ProbeLauncher.transform, false);
|
||||
|
||||
var LaunchParticleEffect = ProbeLauncher.transform.Find("LaunchParticleEffect");
|
||||
var REMOTE_LaunchParticleEffect = Object.Instantiate(LaunchParticleEffect, REMOTE_ProbeLauncher.transform, false);
|
||||
|
||||
// Set up effects
|
||||
var effects = REMOTE_ProbeLauncher.AddComponent<ProbeLauncherEffects>();
|
||||
effects.SetValue("_launchParticles", REMOTE_LaunchParticleEffect.GetComponent<ParticleSystem>());
|
||||
effects.SetValue("_underwaterLaunchParticles", REMOTE_LaunchParticleEffect_Underwater.GetComponent<ParticleSystem>());
|
||||
effects.SetValue("_owAudioSource", ProbeLauncher.GetComponent<ProbeLauncherEffects>().GetValue<OWAudioSource>("_owAudioSource"));
|
||||
|
||||
var recallEffect = REMOTE_Props_HEA_ProbeLauncher.Find("RecallEffect");
|
||||
|
||||
REMOTE_Props_HEA_ProbeLauncher.Find("PressureGauge_Arrow").GetComponent<MeshRenderer>().material = Props_HEA_PlayerTool_mat;
|
||||
REMOTE_Props_HEA_ProbeLauncher.Find("ProbeLauncherChassis").GetComponent<MeshRenderer>().material = Props_HEA_PlayerTool_mat;
|
||||
Object.Destroy(REMOTE_Props_HEA_ProbeLauncher.Find("Props_HEA_ProbeLauncher_Prepass").gameObject);
|
||||
|
||||
var preLaunchProbe = REMOTE_Props_HEA_ProbeLauncher.Find("Props_HEA_Probe_Prelaunch");
|
||||
Object.Destroy(preLaunchProbe.Find("Props_HEA_Probe_Prelaunch_Prepass").gameObject);
|
||||
|
||||
// fuck you unity
|
||||
var materials = preLaunchProbe.GetComponent<MeshRenderer>().materials;
|
||||
materials[0] = Props_HEA_PlayerTool_mat;
|
||||
materials[1] = Props_HEA_Lightbulb_OFF_mat;
|
||||
preLaunchProbe.GetComponent<MeshRenderer>().materials = materials;
|
||||
|
||||
var tool = REMOTE_ProbeLauncher.AddComponent<QSBProbeLauncherTool>();
|
||||
var spring = new DampedSpringQuat
|
||||
{
|
||||
velocity = Vector4.zero,
|
||||
settings = new DampedSpringSettings
|
||||
{
|
||||
springConstant = 50f,
|
||||
dampingCoefficient = 8.485282f,
|
||||
mass = 1
|
||||
}
|
||||
};
|
||||
|
||||
tool.MoveSpring = spring;
|
||||
tool.StowTransform = _toolStowTransform;
|
||||
tool.HoldTransform = _toolHoldTransform;
|
||||
tool.ArrivalDegrees = 5f;
|
||||
tool.Type = ToolType.ProbeLauncher;
|
||||
tool.ToolGameObject = REMOTE_Props_HEA_ProbeLauncher.gameObject;
|
||||
tool.PreLaunchProbeProxy = preLaunchProbe.gameObject;
|
||||
tool.ProbeRetrievalEffect = recallEffect.GetComponent<SingularityWarpEffect>();
|
||||
tool.Effects = effects;
|
||||
|
||||
REMOTE_ProbeLauncher.transform.parent = cameraBody;
|
||||
REMOTE_ProbeLauncher.transform.localPosition = ProbeLauncherOffset;
|
||||
|
||||
//QSBCore.UnityEvents.FireInNUpdates(() => REMOTE_ProbeLauncher.SetActive(true), 5);
|
||||
REMOTE_ProbeLauncher.SetActive(true);
|
||||
}
|
||||
|
||||
private static MeshRenderer GetRenderer(GameObject root, string gameObjectName) =>
|
||||
internal static MeshRenderer GetRenderer(GameObject root, string gameObjectName) =>
|
||||
root.GetComponentsInChildren<MeshRenderer>(true).First(x => x.name == gameObjectName);
|
||||
}
|
||||
}
|
77
QSB/Tools/ProbeLauncherTool/ProbeLauncherCreator.cs
Normal file
77
QSB/Tools/ProbeLauncherTool/ProbeLauncherCreator.cs
Normal file
@ -0,0 +1,77 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace QSB.Tools.ProbeLauncherTool
|
||||
{
|
||||
internal static class ProbeLauncherCreator
|
||||
{
|
||||
private static readonly Vector3 ProbeLauncherOffset = new Vector3(0.5745087f, -0.26f, 0.4453125f);
|
||||
|
||||
internal static void CreateProbeLauncher(Transform cameraBody)
|
||||
{
|
||||
var ProbeLauncher = GameObject.Find("PlayerCamera/ProbeLauncher");
|
||||
|
||||
// Create new ProbeLauncher
|
||||
var REMOTE_ProbeLauncher = new GameObject("REMOTE_ProbeLauncher");
|
||||
REMOTE_ProbeLauncher.SetActive(false);
|
||||
|
||||
// Copy children of ProbeLauncher
|
||||
var Props_HEA_ProbeLauncher = ProbeLauncher.transform.Find("Props_HEA_ProbeLauncher");
|
||||
var REMOTE_Props_HEA_ProbeLauncher = Object.Instantiate(Props_HEA_ProbeLauncher, REMOTE_ProbeLauncher.transform, false);
|
||||
|
||||
var LaunchParticleEffect_Underwater = ProbeLauncher.transform.Find("LaunchParticleEffect_Underwater");
|
||||
var REMOTE_LaunchParticleEffect_Underwater = Object.Instantiate(LaunchParticleEffect_Underwater, REMOTE_ProbeLauncher.transform, false);
|
||||
|
||||
var LaunchParticleEffect = ProbeLauncher.transform.Find("LaunchParticleEffect");
|
||||
var REMOTE_LaunchParticleEffect = Object.Instantiate(LaunchParticleEffect, REMOTE_ProbeLauncher.transform, false);
|
||||
|
||||
// Set up effects
|
||||
var effects = REMOTE_ProbeLauncher.AddComponent<ProbeLauncherEffects>();
|
||||
effects._launchParticles = REMOTE_LaunchParticleEffect.GetComponent<ParticleSystem>();
|
||||
effects._underwaterLaunchParticles = REMOTE_LaunchParticleEffect_Underwater.GetComponent<ParticleSystem>();
|
||||
effects._owAudioSource = ProbeLauncher.GetComponent<ProbeLauncherEffects>()._owAudioSource;
|
||||
|
||||
var recallEffect = REMOTE_Props_HEA_ProbeLauncher.Find("RecallEffect");
|
||||
|
||||
REMOTE_Props_HEA_ProbeLauncher.Find("PressureGauge_Arrow").GetComponent<MeshRenderer>().material = PlayerToolsManager.Props_HEA_PlayerTool_mat;
|
||||
REMOTE_Props_HEA_ProbeLauncher.Find("ProbeLauncherChassis").GetComponent<MeshRenderer>().material = PlayerToolsManager.Props_HEA_PlayerTool_mat;
|
||||
Object.Destroy(REMOTE_Props_HEA_ProbeLauncher.Find("Props_HEA_ProbeLauncher_Prepass").gameObject);
|
||||
|
||||
var preLaunchProbe = REMOTE_Props_HEA_ProbeLauncher.Find("Props_HEA_Probe_Prelaunch");
|
||||
Object.Destroy(preLaunchProbe.Find("Props_HEA_Probe_Prelaunch_Prepass").gameObject);
|
||||
|
||||
// fuck you unity
|
||||
var materials = preLaunchProbe.GetComponent<MeshRenderer>().materials;
|
||||
materials[0] = PlayerToolsManager.Props_HEA_PlayerTool_mat;
|
||||
materials[1] = PlayerToolsManager.Props_HEA_Lightbulb_OFF_mat;
|
||||
preLaunchProbe.GetComponent<MeshRenderer>().materials = materials;
|
||||
|
||||
var tool = REMOTE_ProbeLauncher.AddComponent<QSBProbeLauncherTool>();
|
||||
var spring = new DampedSpringQuat
|
||||
{
|
||||
velocity = Vector4.zero,
|
||||
settings = new DampedSpringSettings
|
||||
{
|
||||
springConstant = 50f,
|
||||
dampingCoefficient = 8.485282f,
|
||||
mass = 1
|
||||
}
|
||||
};
|
||||
|
||||
tool.MoveSpring = spring;
|
||||
tool.StowTransform = PlayerToolsManager.StowTransform;
|
||||
tool.HoldTransform = PlayerToolsManager.HoldTransform;
|
||||
tool.ArrivalDegrees = 5f;
|
||||
tool.Type = ToolType.ProbeLauncher;
|
||||
tool.ToolGameObject = REMOTE_Props_HEA_ProbeLauncher.gameObject;
|
||||
tool.PreLaunchProbeProxy = preLaunchProbe.gameObject;
|
||||
tool.ProbeRetrievalEffect = recallEffect.GetComponent<SingularityWarpEffect>();
|
||||
tool.Effects = effects;
|
||||
|
||||
REMOTE_ProbeLauncher.transform.parent = cameraBody;
|
||||
REMOTE_ProbeLauncher.transform.localPosition = ProbeLauncherOffset;
|
||||
|
||||
//QSBCore.UnityEvents.FireInNUpdates(() => REMOTE_ProbeLauncher.SetActive(true), 5);
|
||||
REMOTE_ProbeLauncher.SetActive(true);
|
||||
}
|
||||
}
|
||||
}
|
@ -2,7 +2,7 @@
|
||||
using QSB.Messaging;
|
||||
using QSB.Player;
|
||||
|
||||
namespace QSB.ProbeSync.Events
|
||||
namespace QSB.Tools.ProbeTool.Events
|
||||
{
|
||||
internal class PlayerProbeEvent : QSBEvent<EnumMessage<ProbeEvent>>
|
||||
{
|
@ -2,7 +2,7 @@
|
||||
using QSB.Messaging;
|
||||
using QSB.Player;
|
||||
|
||||
namespace QSB.ProbeSync.Events
|
||||
namespace QSB.Tools.ProbeTool.Events
|
||||
{
|
||||
internal class ProbeStartRetrieveEvent : QSBEvent<FloatMessage>
|
||||
{
|
131
QSB/Tools/ProbeTool/ProbeCreator.cs
Normal file
131
QSB/Tools/ProbeTool/ProbeCreator.cs
Normal file
@ -0,0 +1,131 @@
|
||||
using QSB.Player;
|
||||
using UnityEngine;
|
||||
using UnityEngine.PostProcessing;
|
||||
|
||||
namespace QSB.Tools.ProbeTool
|
||||
{
|
||||
internal static class ProbeCreator
|
||||
{
|
||||
public static void CreateProbe(Transform newProbe, PlayerInfo player)
|
||||
{
|
||||
var qsbProbe = newProbe.gameObject.AddComponent<QSBProbe>();
|
||||
player.Probe = qsbProbe;
|
||||
qsbProbe.SetOwner(player);
|
||||
|
||||
// Probe_Body
|
||||
Object.Destroy(newProbe.GetComponent<ProbeAnchor>());
|
||||
Object.Destroy(newProbe.GetComponent<AlignWithFluid>());
|
||||
Object.Destroy(newProbe.GetComponent<MapMarker>());
|
||||
Object.Destroy(newProbe.GetComponent<ProbeSeeking>());
|
||||
Object.Destroy(newProbe.GetComponent<SurveyorProbe>());
|
||||
Object.Destroy(newProbe.GetComponent<ProbeHUDMarker>());
|
||||
Object.Destroy(newProbe.GetComponent<LightFlickerController>());
|
||||
Object.Destroy(newProbe.GetComponent<OWRigidbody>());
|
||||
Object.Destroy(newProbe.GetComponent<Rigidbody>());
|
||||
Object.Destroy(newProbe.GetComponent<CenterOfTheUniverseOffsetApplier>());
|
||||
|
||||
// ProbeDetector
|
||||
//Object.Destroy(newProbe.Find("ProbeDetector").gameObject);
|
||||
var probeDetector = newProbe.Find("ProbeDetector").gameObject;
|
||||
Object.Destroy(probeDetector.GetComponent<ForceApplier>());
|
||||
Object.Destroy(probeDetector.GetComponent<ProbeFluidDetector>());
|
||||
Object.Destroy(probeDetector.GetComponent<AlignmentForceDetector>());
|
||||
|
||||
// CameraPivot
|
||||
var cameraPivot = newProbe.Find("CameraPivot");
|
||||
Object.Destroy(cameraPivot.GetComponent<ProbeHorizonTracker>());
|
||||
|
||||
// TODO : Sync probe animations
|
||||
|
||||
// CameraPivot/Geometry/Props_HEA_Probe_ANIM
|
||||
var animRoot = cameraPivot.Find("Geometry").Find("Props_HEA_Probe_ANIM");
|
||||
Object.Destroy(animRoot.GetComponent<ProbeAnimatorController>());
|
||||
Object.Destroy(animRoot.GetComponent<Animator>());
|
||||
|
||||
// TODO : Set up QSB cameras for these two cameras - that's why im not just destroying the GOs here
|
||||
|
||||
// CameraPivot/ForwardCamera
|
||||
var forwardCamera = cameraPivot.Find("ForwardCamera");
|
||||
Object.Destroy(forwardCamera.GetComponent<PostProcessingBehaviour>());
|
||||
Object.Destroy(forwardCamera.GetComponent<NoiseImageEffect>());
|
||||
Object.Destroy(forwardCamera.GetComponent<PlanetaryFogImageEffect>());
|
||||
Object.Destroy(forwardCamera.GetComponent<ProbeCamera>());
|
||||
Object.Destroy(forwardCamera.GetComponent<OWCamera>());
|
||||
Object.Destroy(forwardCamera.GetComponent<Camera>());
|
||||
var oldForwardSpotlight = forwardCamera.GetComponent<ProbeSpotlight>();
|
||||
var newForwardSpotlight = forwardCamera.gameObject.AddComponent<QSBProbeSpotlight>();
|
||||
newForwardSpotlight._id = oldForwardSpotlight._id;
|
||||
newForwardSpotlight._fadeInLength = oldForwardSpotlight._fadeInLength;
|
||||
newForwardSpotlight._intensity = 0.8f;
|
||||
Object.Destroy(oldForwardSpotlight);
|
||||
|
||||
// CameraPivot/RotatingCameraPivot/RotatingCamera
|
||||
var rotatingCamera = cameraPivot.Find("RotatingCameraPivot").Find("RotatingCamera");
|
||||
Object.Destroy(rotatingCamera.GetComponent<PostProcessingBehaviour>());
|
||||
Object.Destroy(rotatingCamera.GetComponent<NoiseImageEffect>());
|
||||
Object.Destroy(rotatingCamera.GetComponent<PlanetaryFogImageEffect>());
|
||||
Object.Destroy(rotatingCamera.GetComponent<ProbeCamera>());
|
||||
Object.Destroy(rotatingCamera.GetComponent<OWCamera>());
|
||||
Object.Destroy(rotatingCamera.GetComponent<Camera>());
|
||||
|
||||
// ProbeEffects
|
||||
var probeEffects = newProbe.Find("ProbeEffects");
|
||||
var oldEffects = probeEffects.GetComponent<ProbeEffects>();
|
||||
var newEffects = probeEffects.gameObject.AddComponent<QSBProbeEffects>();
|
||||
newEffects._flightLoopAudio = oldEffects._flightLoopAudio;
|
||||
newEffects._anchorAudio = oldEffects._anchorAudio;
|
||||
newEffects._anchorParticles = oldEffects._anchorParticles;
|
||||
Object.Destroy(oldEffects);
|
||||
|
||||
Object.Destroy(probeEffects.Find("CloudsEffectBubble").gameObject);
|
||||
Object.Destroy(probeEffects.Find("SandEffectBubble").gameObject);
|
||||
Object.Destroy(probeEffects.Find("ProbeElectricityEffect").gameObject);
|
||||
|
||||
// AmbientLight_Probe
|
||||
var ambientLight = newProbe.Find("AmbientLight_Probe");
|
||||
var oldAmbLantern = ambientLight.GetComponent<ProbeLantern>();
|
||||
var newAmbLantern = ambientLight.gameObject.AddComponent<QSBProbeLantern>();
|
||||
newAmbLantern._fadeInDuration = oldAmbLantern._fadeInDuration;
|
||||
newAmbLantern._fadeInCurve = oldAmbLantern._fadeInCurve;
|
||||
newAmbLantern._fadeOutCurve = oldAmbLantern._fadeOutCurve;
|
||||
newAmbLantern._emissiveRenderer = oldAmbLantern._emissiveRenderer;
|
||||
newAmbLantern._originalRange = 60f;
|
||||
Object.Destroy(oldAmbLantern);
|
||||
|
||||
// Lantern
|
||||
var lantern = newProbe.Find("Lantern");
|
||||
var oldLantern = lantern.GetComponent<ProbeLantern>();
|
||||
var newLantern = lantern.gameObject.AddComponent<QSBProbeLantern>();
|
||||
newLantern._fadeInDuration = oldLantern._fadeInDuration;
|
||||
newLantern._fadeInCurve = oldLantern._fadeInCurve;
|
||||
newLantern._fadeOutCurve = oldLantern._fadeOutCurve;
|
||||
newLantern._emissiveRenderer = oldLantern._emissiveRenderer;
|
||||
newLantern._originalRange = 35f;
|
||||
Object.Destroy(oldLantern);
|
||||
|
||||
// RearCamera
|
||||
var rearCamera = newProbe.Find("RearCamera");
|
||||
Object.Destroy(rearCamera.GetComponent<PostProcessingBehaviour>());
|
||||
Object.Destroy(rearCamera.GetComponent<NoiseImageEffect>());
|
||||
Object.Destroy(rearCamera.GetComponent<PlanetaryFogImageEffect>());
|
||||
Object.Destroy(rearCamera.GetComponent<ProbeCamera>());
|
||||
Object.Destroy(rearCamera.GetComponent<OWCamera>());
|
||||
Object.Destroy(rearCamera.GetComponent<Camera>());
|
||||
var oldRearSpotlight = rearCamera.GetComponent<ProbeSpotlight>();
|
||||
var newRearSpotlight = rearCamera.gameObject.AddComponent<QSBProbeSpotlight>();
|
||||
newRearSpotlight._id = oldRearSpotlight._id;
|
||||
newRearSpotlight._fadeInLength = oldRearSpotlight._fadeInLength;
|
||||
newRearSpotlight._intensity = 0.8f;
|
||||
Object.Destroy(oldRearSpotlight);
|
||||
|
||||
// PlaneOffsetMarker_Probe
|
||||
Object.Destroy(newProbe.Find("PlaneOffsetMarker_Probe").gameObject);
|
||||
|
||||
newProbe.Find("RecallEffect").gameObject.GetComponent<SingularityController>().enabled = true;
|
||||
newProbe.Find("RecallEffect").gameObject.GetComponent<SingularityWarpEffect>().enabled = true;
|
||||
newProbe.Find("RecallEffect").name = "RemoteProbeRecallEffect";
|
||||
|
||||
newProbe.gameObject.SetActive(true);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
namespace QSB.ProbeSync
|
||||
namespace QSB.Tools.ProbeTool
|
||||
{
|
||||
public enum ProbeEvent
|
||||
{
|
@ -1,7 +1,7 @@
|
||||
using QSB.Events;
|
||||
using UnityEngine;
|
||||
|
||||
namespace QSB.ProbeSync
|
||||
namespace QSB.Tools.ProbeTool
|
||||
{
|
||||
internal class ProbeListener : MonoBehaviour
|
||||
{
|
@ -2,7 +2,7 @@
|
||||
using QSB.Utility;
|
||||
using UnityEngine;
|
||||
|
||||
namespace QSB.ProbeSync
|
||||
namespace QSB.Tools.ProbeTool
|
||||
{
|
||||
public class QSBProbe : MonoBehaviour
|
||||
{
|
@ -2,7 +2,7 @@
|
||||
using System.Linq;
|
||||
using UnityEngine;
|
||||
|
||||
namespace QSB.ProbeSync
|
||||
namespace QSB.Tools.ProbeTool
|
||||
{
|
||||
internal class QSBProbeEffects : MonoBehaviour
|
||||
{
|
@ -2,7 +2,7 @@
|
||||
using System.Linq;
|
||||
using UnityEngine;
|
||||
|
||||
namespace QSB.ProbeSync
|
||||
namespace QSB.Tools.ProbeTool
|
||||
{
|
||||
internal class QSBProbeLantern : MonoBehaviour
|
||||
{
|
@ -2,7 +2,7 @@
|
||||
using System.Linq;
|
||||
using UnityEngine;
|
||||
|
||||
namespace QSB.ProbeSync
|
||||
namespace QSB.Tools.ProbeTool
|
||||
{
|
||||
internal class QSBProbeSpotlight : MonoBehaviour
|
||||
{
|
@ -2,13 +2,12 @@
|
||||
using OWML.Utils;
|
||||
using QSB.SectorSync;
|
||||
using QSB.Syncs.Sectored.Transforms;
|
||||
using QSB.Tools;
|
||||
using QSB.Tools.ProbeLauncherTool;
|
||||
using QSB.Utility;
|
||||
using QSB.WorldSync;
|
||||
using UnityEngine;
|
||||
|
||||
namespace QSB.ProbeSync.TransformSync
|
||||
namespace QSB.Tools.ProbeTool.TransformSync
|
||||
{
|
||||
public class PlayerProbeSync : SectoredTransformSync
|
||||
{
|
||||
@ -58,7 +57,7 @@ namespace QSB.ProbeSync.TransformSync
|
||||
|
||||
body.name = "RemoteProbeTransform";
|
||||
|
||||
PlayerToolsManager.CreateProbe(body, Player);
|
||||
ProbeCreator.CreateProbe(body, Player);
|
||||
|
||||
Player.ProbeBody = body.gameObject;
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -2,7 +2,7 @@
|
||||
using QSB.Messaging;
|
||||
using QSB.Player;
|
||||
|
||||
namespace QSB.Tools.Events
|
||||
namespace QSB.Tools.SignalscopeTool.Events
|
||||
{
|
||||
public class PlayerSignalscopeEvent : QSBEvent<ToggleMessage>
|
||||
{
|
37
QSB/Tools/SignalscopeTool/SignalscopeCreator.cs
Normal file
37
QSB/Tools/SignalscopeTool/SignalscopeCreator.cs
Normal file
@ -0,0 +1,37 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace QSB.Tools.SignalscopeTool
|
||||
{
|
||||
internal static class SignalscopeCreator
|
||||
{
|
||||
private static readonly Vector3 SignalscopeScale = new Vector3(1.5f, 1.5f, 1.5f);
|
||||
|
||||
internal static void CreateSignalscope(Transform cameraBody)
|
||||
{
|
||||
var signalscopeRoot = Object.Instantiate(GameObject.Find("Signalscope"));
|
||||
signalscopeRoot.name = "REMOTE_Signalscope";
|
||||
signalscopeRoot.SetActive(false);
|
||||
|
||||
Object.Destroy(signalscopeRoot.GetComponent<SignalscopePromptController>());
|
||||
Object.Destroy(signalscopeRoot.transform.Find("Props_HEA_Signalscope")
|
||||
.Find("Props_HEA_Signalscope_Prepass").gameObject);
|
||||
|
||||
var oldSignalscope = signalscopeRoot.GetComponent<Signalscope>();
|
||||
var tool = signalscopeRoot.AddComponent<QSBTool>();
|
||||
tool.MoveSpring = oldSignalscope._moveSpring;
|
||||
tool.StowTransform = PlayerToolsManager.StowTransform;
|
||||
tool.HoldTransform = PlayerToolsManager.HoldTransform;
|
||||
tool.ArrivalDegrees = 5f;
|
||||
tool.Type = ToolType.Signalscope;
|
||||
tool.ToolGameObject = signalscopeRoot.transform.Find("Props_HEA_Signalscope").gameObject;
|
||||
oldSignalscope.enabled = false;
|
||||
|
||||
PlayerToolsManager.GetRenderer(signalscopeRoot, "Props_HEA_Signalscope").material = PlayerToolsManager.Props_HEA_PlayerTool_mat;
|
||||
|
||||
signalscopeRoot.transform.parent = cameraBody;
|
||||
signalscopeRoot.transform.localPosition = Vector3.zero;
|
||||
signalscopeRoot.transform.localScale = SignalscopeScale;
|
||||
signalscopeRoot.SetActive(true);
|
||||
}
|
||||
}
|
||||
}
|
@ -2,7 +2,7 @@
|
||||
using QSB.Messaging;
|
||||
using QSB.Player;
|
||||
|
||||
namespace QSB.Tools.Events
|
||||
namespace QSB.Tools.TranslatorTool.Events
|
||||
{
|
||||
public class PlayerTranslatorEvent : QSBEvent<ToggleMessage>
|
||||
{
|
163
QSB/Tools/TranslatorTool/QSBNomaiTranslator.cs
Normal file
163
QSB/Tools/TranslatorTool/QSBNomaiTranslator.cs
Normal file
@ -0,0 +1,163 @@
|
||||
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()
|
||||
{
|
||||
_lastHitCollider = null;
|
||||
_translatorProp = this.GetRequiredComponentInChildren<QSBNomaiTranslatorProp>();
|
||||
_currentNomaiText = null;
|
||||
}
|
||||
|
||||
public override void OnDisable()
|
||||
{
|
||||
_translatorProp.OnFinishUnequipAnimation();
|
||||
}
|
||||
|
||||
public override void EquipTool()
|
||||
{
|
||||
base.EquipTool();
|
||||
_translatorProp.OnEquipTool();
|
||||
}
|
||||
|
||||
public override void UnequipTool()
|
||||
{
|
||||
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 && !_currentNomaiText.CheckAllowFocus(raycastHit.distance, RaycastTransform.forward))
|
||||
{
|
||||
_currentNomaiText = null;
|
||||
}
|
||||
|
||||
num = raycastHit.distance;
|
||||
}
|
||||
else
|
||||
{
|
||||
_lastHitCollider = null;
|
||||
_currentNomaiText = null;
|
||||
}
|
||||
|
||||
if (_currentNomaiText != null)
|
||||
{
|
||||
tooCloseToTarget = (num < _currentNomaiText.GetMinimumReadableDistance());
|
||||
|
||||
if (_currentNomaiText is NomaiWallText)
|
||||
{
|
||||
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)
|
||||
{
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
181
QSB/Tools/TranslatorTool/QSBNomaiTranslatorProp.cs
Normal file
181
QSB/Tools/TranslatorTool/QSBNomaiTranslatorProp.cs
Normal file
@ -0,0 +1,181 @@
|
||||
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
|
||||
{
|
||||
private static MaterialPropertyBlock s_matPropBlock;
|
||||
private static int s_propID_EmissionColor;
|
||||
|
||||
public GameObject TranslatorProp;
|
||||
public MeshRenderer _leftPageArrowRenderer;
|
||||
public MeshRenderer _rightPageArrowRenderer;
|
||||
public Color _baseEmissionColor;
|
||||
|
||||
private TranslatorTargetBeam _targetBeam;
|
||||
private QSBTranslatorScanBeam[] _scanBeams;
|
||||
private bool _isTranslating;
|
||||
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
_targetBeam = transform.GetComponentInChildren<TranslatorTargetBeam>();
|
||||
|
||||
if (s_matPropBlock == null)
|
||||
{
|
||||
s_matPropBlock = new MaterialPropertyBlock();
|
||||
s_propID_EmissionColor = Shader.PropertyToID("_EmissionColor");
|
||||
}
|
||||
|
||||
TurnOffArrowEmission();
|
||||
|
||||
TranslatorProp.SetActive(false);
|
||||
}
|
||||
|
||||
private void Start()
|
||||
{
|
||||
_scanBeams = transform.GetComponentsInChildren<QSBTranslatorScanBeam>();
|
||||
for (var i = 0; i < _scanBeams.Length; i++)
|
||||
{
|
||||
_scanBeams[i].enabled = false;
|
||||
}
|
||||
|
||||
enabled = false;
|
||||
}
|
||||
|
||||
private void TurnOffArrowEmission()
|
||||
{
|
||||
if (_leftPageArrowRenderer != null)
|
||||
{
|
||||
SetMaterialEmissionEnabled(_leftPageArrowRenderer, false);
|
||||
}
|
||||
if (_rightPageArrowRenderer != null)
|
||||
{
|
||||
SetMaterialEmissionEnabled(_rightPageArrowRenderer, false);
|
||||
}
|
||||
}
|
||||
|
||||
private void SetMaterialEmissionEnabled(MeshRenderer emissiveRenderer, bool emissionEnabled)
|
||||
{
|
||||
if (emissionEnabled)
|
||||
{
|
||||
s_matPropBlock.SetColor(s_propID_EmissionColor, _baseEmissionColor * 1f);
|
||||
emissiveRenderer.SetPropertyBlock(s_matPropBlock);
|
||||
return;
|
||||
}
|
||||
s_matPropBlock.SetColor(s_propID_EmissionColor, _baseEmissionColor * 0f);
|
||||
emissiveRenderer.SetPropertyBlock(s_matPropBlock);
|
||||
}
|
||||
|
||||
public void 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()
|
||||
{
|
||||
enabled = false;
|
||||
StopTranslating();
|
||||
TurnOffArrowEmission();
|
||||
}
|
||||
|
||||
public void OnFinishUnequipAnimation()
|
||||
{
|
||||
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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
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()
|
||||
{
|
||||
if (_isTranslating)
|
||||
{
|
||||
_isTranslating = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
233
QSB/Tools/TranslatorTool/QSBTranslatorScanBeam.cs
Normal file
233
QSB/Tools/TranslatorTool/QSBTranslatorScanBeam.cs
Normal file
@ -0,0 +1,233 @@
|
||||
using QSB.Utility;
|
||||
using System;
|
||||
using UnityEngine;
|
||||
|
||||
namespace QSB.Tools.TranslatorTool
|
||||
{
|
||||
class QSBTranslatorScanBeam : MonoBehaviour
|
||||
{
|
||||
public Renderer _projectorRenderer;
|
||||
public Renderer _lightVolumeRenderer;
|
||||
|
||||
const float _focusedBeamWidth = 0.25f;
|
||||
const float _maxBeamWidth = 1f;
|
||||
const float _maxBeamLength = 10f;
|
||||
const float _scanOffset = 0f;
|
||||
const float _switchLength = 0.33f;
|
||||
const float _fadeLength = 0.66f;
|
||||
|
||||
public float _scanSpeed = 1f;
|
||||
public readonly Color _baseProjectorColor = new Color(0.3545942f, 2.206932f, 4.594794f, 1f);
|
||||
public readonly Color _baseLightColor = new Color(0.1301365f, 0.2158605f, 0.6239606f, 1f);
|
||||
public Quaternion _baseRotation;
|
||||
|
||||
private bool _tooCloseToTarget;
|
||||
private NomaiTextLine _nomaiTextLine;
|
||||
private NomaiComputerRing _nomaiComputerRing;
|
||||
private NomaiVesselComputerRing _nomaiVesselComputerRing;
|
||||
private float _scanTime;
|
||||
private float _switchTime;
|
||||
private Quaternion _prevRotation;
|
||||
private Vector3 _prevScale;
|
||||
private float _fade;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
_tooCloseToTarget = false;
|
||||
_prevRotation = Quaternion.identity;
|
||||
_prevScale = new Vector3(_maxBeamWidth, _maxBeamWidth, _maxBeamLength);
|
||||
_fade = 0f;
|
||||
|
||||
if (_projectorRenderer != null)
|
||||
{
|
||||
_projectorRenderer.material.SetAlpha(0f);
|
||||
_projectorRenderer.enabled = false;
|
||||
}
|
||||
|
||||
if (_lightVolumeRenderer != null)
|
||||
{
|
||||
_lightVolumeRenderer.material.SetAlpha(0f);
|
||||
_lightVolumeRenderer.enabled = false;
|
||||
}
|
||||
}
|
||||
|
||||
private void OnDisable()
|
||||
{
|
||||
_tooCloseToTarget = false;
|
||||
_nomaiTextLine = null;
|
||||
_prevRotation = Quaternion.identity;
|
||||
_prevScale = new Vector3(_maxBeamWidth, _maxBeamWidth, _maxBeamLength);
|
||||
_fade = 0f;
|
||||
if (_projectorRenderer != null)
|
||||
{
|
||||
_projectorRenderer.material.SetAlpha(0f);
|
||||
_projectorRenderer.enabled = false;
|
||||
}
|
||||
|
||||
if (_lightVolumeRenderer != null)
|
||||
{
|
||||
_lightVolumeRenderer.material.SetAlpha(0f);
|
||||
_lightVolumeRenderer.enabled = false;
|
||||
}
|
||||
|
||||
transform.localRotation = _baseRotation;
|
||||
transform.localScale = _prevScale;
|
||||
}
|
||||
|
||||
public bool IsSwitching()
|
||||
=> _switchTime < 1f;
|
||||
|
||||
private void OnRenderObject()
|
||||
{
|
||||
if (!QSBCore.WorldObjectsReady || !QSBCore.DebugMode || !QSBCore.ShowLinesInDebug)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Popcron.Gizmos.Line(transform.position, transform.position + transform.forward);
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
if (_nomaiTextLine != null && !_tooCloseToTarget)
|
||||
{
|
||||
_switchTime = Mathf.MoveTowards(_switchTime, 1f, Time.deltaTime / _switchLength);
|
||||
var smoothedSwitchTime = Mathf.SmoothStep(0f, 1f, _switchTime);
|
||||
_scanTime += Time.deltaTime * _scanSpeed;
|
||||
var num = Mathf.Cos(_scanTime + _scanOffset) * 0.5f + 0.5f;
|
||||
var pointAlongLine = _nomaiTextLine.GetPointAlongLine(num);
|
||||
var rhs = _nomaiTextLine.GetPointAlongLine(num + 0.1f) - _nomaiTextLine.GetPointAlongLine(num - 0.1f);
|
||||
var vector = pointAlongLine - transform.position;
|
||||
var upwards = Vector3.Cross(vector, rhs);
|
||||
var distance = Vector3.Distance(transform.position, pointAlongLine);
|
||||
var q = Quaternion.LookRotation(vector, upwards);
|
||||
var scanningRotation = transform.parent.InverseTransformRotation(q);
|
||||
transform.localRotation = Quaternion.Lerp(_prevRotation, scanningRotation, smoothedSwitchTime);
|
||||
transform.localScale = Vector3.Lerp(_prevScale, new Vector3(_focusedBeamWidth, _focusedBeamWidth, 1f + distance), smoothedSwitchTime);
|
||||
}
|
||||
else if (_nomaiComputerRing != null && !_tooCloseToTarget)
|
||||
{
|
||||
_switchTime = Mathf.MoveTowards(_switchTime, 1f, Time.deltaTime / _switchLength);
|
||||
var t2 = Mathf.SmoothStep(0f, 1f, _switchTime);
|
||||
_scanTime += Time.deltaTime * _scanSpeed;
|
||||
var t3 = Mathf.Cos(_scanTime + _scanOffset) * 0.5f + 0.5f;
|
||||
t3 = Mathf.Lerp(0.25f, 0.75f, t3);
|
||||
var pointOnRing = _nomaiComputerRing.GetPointOnRing(t3, transform.position);
|
||||
var forward = pointOnRing - transform.position;
|
||||
var up = _nomaiComputerRing.transform.up;
|
||||
var num3 = Vector3.Distance(transform.position, pointOnRing);
|
||||
var q2 = Quaternion.LookRotation(forward, up);
|
||||
var b2 = transform.parent.InverseTransformRotation(q2);
|
||||
transform.localRotation = Quaternion.Lerp(_prevRotation, b2, t2);
|
||||
transform.localScale = Vector3.Lerp(_prevScale, new Vector3(_focusedBeamWidth, _focusedBeamWidth, 1f + num3), t2);
|
||||
}
|
||||
else if (_nomaiVesselComputerRing != null && !_tooCloseToTarget)
|
||||
{
|
||||
_switchTime = Mathf.MoveTowards(_switchTime, 1f, Time.deltaTime / _switchLength);
|
||||
var smoothedSwitchTime = Mathf.SmoothStep(0f, 1f, _switchTime);
|
||||
|
||||
_scanTime += Time.deltaTime * _scanSpeed;
|
||||
var t5 = Mathf.Cos(_scanTime + _scanOffset) * 0.5f + 0.5f;
|
||||
t5 = Mathf.Lerp(0.25f, 0.75f, t5);
|
||||
var pointOnRing2 = _nomaiVesselComputerRing.GetPointOnRing(t5, transform.position);
|
||||
var forward2 = pointOnRing2 - transform.position;
|
||||
var up2 = _nomaiVesselComputerRing.transform.up;
|
||||
var num4 = Vector3.Distance(transform.position, pointOnRing2);
|
||||
var q3 = Quaternion.LookRotation(forward2, up2);
|
||||
var b3 = transform.parent.InverseTransformRotation(q3);
|
||||
transform.localRotation = Quaternion.Lerp(_prevRotation, b3, smoothedSwitchTime);
|
||||
transform.localScale = Vector3.Lerp(_prevScale, new Vector3(_focusedBeamWidth, _focusedBeamWidth, 1f + num4), smoothedSwitchTime);
|
||||
}
|
||||
else
|
||||
{
|
||||
_switchTime = Mathf.MoveTowards(_switchTime, 1f, Time.deltaTime / _fadeLength);
|
||||
var t6 = Mathf.SmoothStep(0f, 1f, _switchTime * (2f - _switchTime));
|
||||
transform.localRotation = Quaternion.Lerp(_prevRotation, _baseRotation, _switchTime);
|
||||
transform.localScale = Vector3.Lerp(_prevScale, new Vector3(_maxBeamWidth, _maxBeamWidth, _maxBeamLength), t6);
|
||||
}
|
||||
|
||||
var flag = !_tooCloseToTarget && (_nomaiTextLine != null || _nomaiComputerRing != null || _nomaiVesselComputerRing != null);
|
||||
|
||||
_fade = Mathf.MoveTowards(
|
||||
_fade,
|
||||
flag
|
||||
? 1f
|
||||
: 0f,
|
||||
Time.deltaTime / _fadeLength * (_tooCloseToTarget
|
||||
? 3f
|
||||
: 1f));
|
||||
|
||||
if (_projectorRenderer != null)
|
||||
{
|
||||
var shouldBeOn = _fade > 0f;
|
||||
if (_projectorRenderer.enabled != shouldBeOn)
|
||||
{
|
||||
_projectorRenderer.enabled = shouldBeOn;
|
||||
}
|
||||
|
||||
if (_projectorRenderer.enabled)
|
||||
{
|
||||
_projectorRenderer.material.SetAlpha(_fade * _fade * _baseProjectorColor.a);
|
||||
}
|
||||
}
|
||||
|
||||
if (_lightVolumeRenderer != null)
|
||||
{
|
||||
var shouldBeOn = _fade > 0f;
|
||||
if (_lightVolumeRenderer.enabled != shouldBeOn)
|
||||
{
|
||||
_lightVolumeRenderer.enabled = shouldBeOn;
|
||||
}
|
||||
|
||||
if (_lightVolumeRenderer.enabled)
|
||||
{
|
||||
_lightVolumeRenderer.material.SetAlpha(_fade * _fade * _baseLightColor.a);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void SetTooCloseToTarget(bool tooClose)
|
||||
{
|
||||
if (_tooCloseToTarget != tooClose)
|
||||
{
|
||||
_tooCloseToTarget = tooClose;
|
||||
_switchTime = 0f;
|
||||
_prevRotation = transform.localRotation;
|
||||
_prevScale = transform.localScale;
|
||||
}
|
||||
}
|
||||
|
||||
public void SetNomaiTextLine(NomaiTextLine line)
|
||||
{
|
||||
if (_nomaiTextLine != line)
|
||||
{
|
||||
_switchTime = 0f;
|
||||
_nomaiTextLine = line;
|
||||
_prevRotation = transform.localRotation;
|
||||
_prevScale = transform.localScale;
|
||||
}
|
||||
}
|
||||
|
||||
public void SetNomaiComputerRing(NomaiComputerRing ring)
|
||||
{
|
||||
if (_nomaiComputerRing != ring)
|
||||
{
|
||||
_switchTime = 0f;
|
||||
_nomaiComputerRing = ring;
|
||||
_prevRotation = transform.localRotation;
|
||||
_prevScale = transform.localScale;
|
||||
}
|
||||
}
|
||||
|
||||
public void SetNomaiVesselComputerRing(NomaiVesselComputerRing ring)
|
||||
{
|
||||
if (_nomaiVesselComputerRing != ring)
|
||||
{
|
||||
_switchTime = 0f;
|
||||
_nomaiVesselComputerRing = ring;
|
||||
_prevRotation = transform.localRotation;
|
||||
_prevScale = transform.localScale;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
71
QSB/Tools/TranslatorTool/TranslatorCreator.cs
Normal file
71
QSB/Tools/TranslatorTool/TranslatorCreator.cs
Normal file
@ -0,0 +1,71 @@
|
||||
using QSB.Utility;
|
||||
using UnityEngine;
|
||||
|
||||
namespace QSB.Tools.TranslatorTool
|
||||
{
|
||||
internal static class TranslatorCreator
|
||||
{
|
||||
private static readonly Vector3 TranslatorScale = new Vector3(0.75f, 0.75f, 0.75f);
|
||||
|
||||
internal static void CreateTranslator(Transform cameraBody)
|
||||
{
|
||||
var NomaiTranslatorProp = GameObject.Find("NomaiTranslatorProp");
|
||||
|
||||
var REMOTE_NomaiTranslatorProp = NomaiTranslatorProp.InstantiateInactive();
|
||||
REMOTE_NomaiTranslatorProp.name = "REMOTE_NomaiTranslatorProp";
|
||||
|
||||
var REMOTE_TranslatorGroup = REMOTE_NomaiTranslatorProp.transform.Find("TranslatorGroup");
|
||||
var REMOTE_Props_HEA_Translator = REMOTE_TranslatorGroup.Find("Props_HEA_Translator");
|
||||
|
||||
|
||||
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(REMOTE_Props_HEA_Translator.Find("Props_HEA_Translator_Prepass").gameObject);
|
||||
|
||||
foreach (Transform scanBeam in REMOTE_TranslatorGroup.Find("TranslatorBeams"))
|
||||
{
|
||||
var oldBeam = scanBeam.GetComponent<TranslatorScanBeam>();
|
||||
var newBeam = scanBeam.gameObject.AddComponent<QSBTranslatorScanBeam>();
|
||||
newBeam._projectorRenderer = oldBeam._projectorRenderer;
|
||||
newBeam._lightVolumeRenderer = oldBeam._lightVolumeRenderer;
|
||||
newBeam._scanSpeed = oldBeam._scanSpeed;
|
||||
newBeam._baseRotation = oldBeam._baseRotation;
|
||||
Object.Destroy(oldBeam);
|
||||
}
|
||||
|
||||
var oldProp = REMOTE_NomaiTranslatorProp.GetComponent<NomaiTranslatorProp>();
|
||||
var newProp = REMOTE_NomaiTranslatorProp.AddComponent<QSBNomaiTranslatorProp>();
|
||||
newProp.TranslatorProp = REMOTE_TranslatorGroup.gameObject;
|
||||
newProp._leftPageArrowRenderer = oldProp._leftPageArrowRenderer;
|
||||
newProp._rightPageArrowRenderer = oldProp._rightPageArrowRenderer;
|
||||
newProp._baseEmissionColor = oldProp._baseEmissionColor;
|
||||
Object.Destroy(oldProp);
|
||||
|
||||
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 = REMOTE_TranslatorGroup.gameObject;
|
||||
tool.RaycastTransform = cameraBody;
|
||||
Object.Destroy(oldTranslator);
|
||||
|
||||
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;
|
||||
|
||||
REMOTE_NomaiTranslatorProp.transform.parent = cameraBody;
|
||||
REMOTE_NomaiTranslatorProp.transform.localPosition = Vector3.zero;
|
||||
REMOTE_NomaiTranslatorProp.transform.localScale = TranslatorScale;
|
||||
QSBCore.UnityEvents.FireInNUpdates(() => REMOTE_NomaiTranslatorProp.SetActive(true), 5);
|
||||
}
|
||||
}
|
||||
}
|
@ -66,7 +66,7 @@ namespace QSB.WorldSync
|
||||
return default;
|
||||
}
|
||||
|
||||
return (IWorldObject)returnObject;
|
||||
return returnObject;
|
||||
}
|
||||
|
||||
public static TWorldObject GetWorldFromUnity<TWorldObject>(MonoBehaviour unityObject)
|
||||
|
16
README.md
16
README.md
@ -153,13 +153,12 @@ Note - _nebula has no idea how Hamachi works and has never used it, so don't ask
|
||||
- [Download the Outer Wilds Mod Manager](https://github.com/raicuparta/ow-mod-manager) and install it anywhere you like;
|
||||
- Install OWML using the Mod Manager
|
||||
- Clone QSB's source
|
||||
- Open the file `QSB/QSB.csproj.user` in your favorite text editor
|
||||
- Open the file `Director.Build.targets` in your favorite text editor
|
||||
- Edit the entry `<GameDir>` to point to the directory where Outer Wilds is installed
|
||||
- Edit the entry `<OwmlDir>` to point to your OWML directory (it is installed inside the Mod Manager directory)
|
||||
- Do the same for `QuantumUNET/QuantumUNET.csproj.user` and `QSBTests/QSBTests.csproj.user`
|
||||
- Open the project solution file `QSB.sln` in Visual Studio
|
||||
- If needed, right click `References` in the Solution Explorer > Manage NuGet Packages > Update OWML to fix missing references
|
||||
- Run this to stop tracking QSB.csproj.user: ```git update-index --skip-worktree QSB/QSB.csproj.user``` (and do the same for the other .user files)
|
||||
- Run this to stop tracking Director.Build.targets: ```git update-index --skip-worktree Director.Build.targets```
|
||||
|
||||
To fix the references, right click "References" in the Solution Explorer > "Add Reference", and add all the missing DLLs (references with yellow warning icon). You can find these DLLs in the game's directory (`OuterWilds\OuterWilds_Data\Managed`);
|
||||
|
||||
@ -199,13 +198,22 @@ It is also recommended to lower all graphics settings to minimum, be in windowed
|
||||
|
||||
## Authors and Special Thanks
|
||||
|
||||
### Authors
|
||||
|
||||
- [\_nebula](https://github.com/misternebula) - Developer of v0.3 onwards
|
||||
- [AmazingAlek](https://github.com/amazingalek) - On-and-off developer and sometimes code tidy-er
|
||||
- [Raicuparta](https://github.com/Raicuparta) - Developer of v0.1 - v0.2
|
||||
|
||||
### Contributers
|
||||
|
||||
- [ShoosGun](https://github.com/ShoosGun)
|
||||
- [Chris Yeninas](https://github.com/PhantomGamers)
|
||||
|
||||
### Special Thanks
|
||||
- Thanks to Logan Ver Hoef for help with the game code.
|
||||
- Thanks to all the people in the Outer Wilds Discord for helping in public tests.
|
||||
- Special thanks (and apologies) to all the people in the #modding channel, which I (_nebula) have been using as a virtual [rubber duck.](https://en.wikipedia.org/wiki/Rubber_duck_debugging)
|
||||
|
||||
## Help / Discuss development / Whatever
|
||||
|
||||
[Join the unofficial Outer Wilds Discord](https://discord.gg/Sftcc9Z), we have a nice `#modding` channel where you can discuss all types of things.
|
||||
[Join the unofficial Outer Wilds Discord](https://discord.gg/Sftcc9Z), we have a nice `#modding-support` channel for any mod help, and a `#modding` channel to discuss modding!
|
||||
|
Loading…
x
Reference in New Issue
Block a user