add sound sync

This commit is contained in:
Mister_Nebula 2021-12-14 22:53:53 +00:00
parent 23e4622410
commit fdf88e0cb3
10 changed files with 150 additions and 24 deletions

View File

@ -0,0 +1,24 @@
using QSB.Utility;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;
namespace QSB.Audio
{
internal class PlayerAudioManager
{
public static QSBPlayerAudioController InitRemote(Transform playerBody)
{
DebugLog.DebugWrite($"InitRemote {playerBody.name}");
var REMOTE_Audio_Player = new GameObject("REMOTE_Audio_Player");
REMOTE_Audio_Player.transform.parent = playerBody;
REMOTE_Audio_Player.transform.localPosition = Vector3.zero;
REMOTE_Audio_Player.transform.localScale = Vector3.one;
return REMOTE_Audio_Player.AddComponent<QSBPlayerAudioController>();
}
}
}

View File

@ -0,0 +1,75 @@
using QSB.Utility;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;
namespace QSB.Audio
{
public class QSBPlayerAudioController : MonoBehaviour
{
//public OWAudioSource _oneShotSource;
public OWAudioSource _oneShotExternalSource;
//public OWAudioSource _mapTrackSource;
public OWAudioSource _repairToolSource;
//public OWAudioSource _translatorSource;
//public OWAudioSource _damageAudioSource;
//public OWAudioSource _damageAudioSourceExternal;
//public OWAudioSource _notificationAudio;
//public OWAudioSource _fluidVolumeSource;
//public OWAudioSource _forceVolumeAudio;
//public OWAudioSource _oxygenLeakSource;
//public OWAudioSource _recorderLoopSource;
//public NomaiTextRevealAudioController[] _nomaiTextAudioControllers;
private void Start()
{
DebugLog.DebugWrite($"START");
_oneShotExternalSource = CreateBaseAudio("OneShotAudio_PlayerExternal", false, 0, 1, AudioType.None, OWAudioMixer.TrackName.Player_External, false);
_repairToolSource = CreateBaseAudio("RepairToolAudio", true, 128, 0.5f, AudioType.None, OWAudioMixer.TrackName.Player_External, false);
}
public void PlayEquipTool()
=> _oneShotExternalSource.PlayOneShot(AudioType.ToolTranslatorEquip, 1f);
public void PlayUnequipTool()
=> _oneShotExternalSource.PlayOneShot(AudioType.ToolTranslatorUnequip, 1f);
private OWAudioSource CreateBaseAudio(
string name,
bool loop,
int priority,
float volume,
AudioType audioLibraryClip,
OWAudioMixer.TrackName track,
bool randomize)
{
DebugLog.DebugWrite($"createBaseAudio {name}");
var go = new GameObject(name);
go.transform.parent = transform;
go.transform.localPosition = Vector3.zero;
go.transform.localScale = Vector3.one;
var audioSource = go.AddComponent<AudioSource>();
audioSource.mute = false;
audioSource.bypassEffects = false;
audioSource.bypassListenerEffects = false;
audioSource.bypassReverbZones = false;
audioSource.playOnAwake = false;
audioSource.loop = loop;
audioSource.priority = priority;
audioSource.volume = volume;
audioSource.spatialBlend = 1f;
var owAudioSource = go.AddComponent<OWAudioSource>();
owAudioSource._audioLibraryClip = audioLibraryClip;
owAudioSource._clipSelectionOnPlay = OWAudioSource.ClipSelectionOnPlay.RANDOM;
owAudioSource._track = track;
owAudioSource._randomizePlayheadOnAwake = randomize;
return owAudioSource;
}
}
}

View File

@ -1,6 +1,7 @@
using OWML.Common;
using QSB.Animation.Player;
using QSB.Animation.Player.Thrusters;
using QSB.Audio;
using QSB.CampfireSync.WorldObjects;
using QSB.ClientServerStateSync;
using QSB.Events;
@ -130,6 +131,7 @@ namespace QSB.Player
public bool SignalscopeEquipped { get; set; }
public bool TranslatorEquipped { get; set; }
public bool ProbeActive { get; set; }
public QSBPlayerAudioController AudioController { get; set; }
// Local only
public PlayerProbeLauncher LocalProbeLauncher

View File

@ -1,5 +1,6 @@
using OWML.Utils;
using QSB.Animation.Player;
using QSB.Audio;
using QSB.Events;
using QSB.Instruments;
using QSB.RoastingSync;
@ -173,12 +174,12 @@ namespace QSB.Player.TransformSync
REMOTE_Player_Body.AddComponent<PlayerMapMarker>().PlayerName = Player.Name;
Player.AudioController = PlayerAudioManager.InitRemote(REMOTE_Player_Body.transform);
/*
* SET UP PLAYER CAMERA
*/
PlayerToolsManager.InitRemote(REMOTE_PlayerCamera.transform);
var camera = REMOTE_PlayerCamera.AddComponent<Camera>();
camera.enabled = false;
var owcamera = REMOTE_PlayerCamera.AddComponent<OWCamera>();
@ -189,6 +190,8 @@ namespace QSB.Player.TransformSync
Player.CameraBody = REMOTE_PlayerCamera;
_visibleCameraRoot = REMOTE_PlayerCamera.transform;
PlayerToolsManager.InitRemote(Player);
/*
* SET UP ROASTING STICK
*/

View File

@ -1,4 +1,5 @@
using UnityEngine;
using QSB.Player;
using UnityEngine;
namespace QSB.Tools.FlashlightTool
{
@ -6,7 +7,7 @@ namespace QSB.Tools.FlashlightTool
{
private static readonly Vector3 FlashlightOffset = new(0.7196316f, -0.2697681f, 0.3769455f);
internal static void CreateFlashlight(Transform cameraBody)
internal static void CreateFlashlight(PlayerInfo player)
{
var flashlightRoot = Object.Instantiate(GameObject.Find("FlashlightRoot"));
flashlightRoot.name = "REMOTE_FlashlightRoot";
@ -17,7 +18,7 @@ namespace QSB.Tools.FlashlightTool
component.Init(oldComponent);
oldComponent.enabled = false;
flashlightRoot.transform.parent = cameraBody;
flashlightRoot.transform.parent = player.CameraBody.transform;
flashlightRoot.transform.localPosition = FlashlightOffset;
flashlightRoot.SetActive(true);
}

View File

@ -1,4 +1,5 @@
using QSB.Tools.FlashlightTool;
using QSB.Player;
using QSB.Tools.FlashlightTool;
using QSB.Tools.ProbeLauncherTool;
using QSB.Tools.SignalscopeTool;
using QSB.Tools.TranslatorTool;
@ -19,11 +20,11 @@ namespace QSB.Tools
public static Material Props_HEA_Lightbulb_OFF_mat;
public static Material Structure_HEA_PlayerShip_Screens_mat;
public static void InitRemote(Transform playerCamera)
public static void InitRemote(PlayerInfo player)
{
try
{
CreateStowTransforms(playerCamera);
CreateStowTransforms(player.CameraBody.transform);
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];
@ -48,10 +49,10 @@ namespace QSB.Tools
DebugLog.ToConsole($"Error when trying to find materials : {ex}", OWML.Common.MessageType.Error);
}
FlashlightCreator.CreateFlashlight(playerCamera);
SignalscopeCreator.CreateSignalscope(playerCamera);
ProbeLauncherCreator.CreateProbeLauncher(playerCamera);
TranslatorCreator.CreateTranslator(playerCamera);
FlashlightCreator.CreateFlashlight(player);
SignalscopeCreator.CreateSignalscope(player);
ProbeLauncherCreator.CreateProbeLauncher(player);
TranslatorCreator.CreateTranslator(player);
}
public static void InitLocal()

View File

@ -1,4 +1,5 @@
using UnityEngine;
using QSB.Player;
using UnityEngine;
using UnityEngine.Rendering;
namespace QSB.Tools.ProbeLauncherTool
@ -7,7 +8,7 @@ namespace QSB.Tools.ProbeLauncherTool
{
private static readonly Vector3 ProbeLauncherOffset = new(0.5745087f, -0.26f, 0.4453125f);
internal static void CreateProbeLauncher(Transform cameraBody)
internal static void CreateProbeLauncher(PlayerInfo player)
{
var ProbeLauncher = GameObject.Find("PlayerCamera/ProbeLauncher");
@ -29,7 +30,7 @@ namespace QSB.Tools.ProbeLauncherTool
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;
effects._owAudioSource = player.AudioController._repairToolSource;
var recallEffect = REMOTE_Props_HEA_ProbeLauncher.Find("RecallEffect");
@ -71,11 +72,12 @@ namespace QSB.Tools.ProbeLauncherTool
tool.ArrivalDegrees = 5f;
tool.Type = ToolType.ProbeLauncher;
tool.ToolGameObject = REMOTE_Props_HEA_ProbeLauncher.gameObject;
tool.Player = player;
tool.PreLaunchProbeProxy = preLaunchProbe.gameObject;
tool.ProbeRetrievalEffect = recallEffect.GetComponent<SingularityWarpEffect>();
tool.Effects = effects;
REMOTE_ProbeLauncher.transform.parent = cameraBody;
REMOTE_ProbeLauncher.transform.parent = player.CameraBody.transform;
REMOTE_ProbeLauncher.transform.localPosition = ProbeLauncherOffset;
//QSBCore.UnityEvents.FireInNUpdates(() => REMOTE_ProbeLauncher.SetActive(true), 5);

View File

@ -1,9 +1,11 @@
using UnityEngine;
using QSB.Player;
using UnityEngine;
namespace QSB.Tools
{
public class QSBTool : PlayerTool
{
public PlayerInfo Player { get; set; }
public ToolType Type { get; set; }
public GameObject ToolGameObject { get; set; }
@ -44,5 +46,17 @@ namespace QSB.Tools
UnequipTool();
}
public override void EquipTool()
{
base.EquipTool();
Player.AudioController.PlayEquipTool();
}
public override void UnequipTool()
{
base.UnequipTool();
Player.AudioController.PlayUnequipTool();
}
}
}

View File

@ -1,4 +1,5 @@
using UnityEngine;
using QSB.Player;
using UnityEngine;
using UnityEngine.Rendering;
namespace QSB.Tools.SignalscopeTool
@ -7,7 +8,7 @@ namespace QSB.Tools.SignalscopeTool
{
private static readonly Vector3 SignalscopeScale = new(1.5f, 1.5f, 1.5f);
internal static void CreateSignalscope(Transform cameraBody)
internal static void CreateSignalscope(PlayerInfo player)
{
var signalscopeRoot = Object.Instantiate(GameObject.Find("Signalscope"));
signalscopeRoot.name = "REMOTE_Signalscope";
@ -26,12 +27,13 @@ namespace QSB.Tools.SignalscopeTool
tool.ArrivalDegrees = 5f;
tool.Type = ToolType.Signalscope;
tool.ToolGameObject = Props_HEA_Signalscope.gameObject;
tool.Player = player;
oldSignalscope.enabled = false;
Props_HEA_Signalscope.GetComponent<MeshRenderer>().material = PlayerToolsManager.Props_HEA_PlayerTool_mat;
Props_HEA_Signalscope.GetComponent<MeshRenderer>().shadowCastingMode = ShadowCastingMode.On;
signalscopeRoot.transform.parent = cameraBody;
signalscopeRoot.transform.parent = player.CameraBody.transform;
signalscopeRoot.transform.localPosition = Vector3.zero;
signalscopeRoot.transform.localScale = SignalscopeScale;
signalscopeRoot.SetActive(true);

View File

@ -1,4 +1,5 @@
using QSB.Utility;
using QSB.Player;
using QSB.Utility;
using UnityEngine;
using UnityEngine.Rendering;
@ -8,7 +9,7 @@ namespace QSB.Tools.TranslatorTool
{
private static readonly Vector3 TranslatorScale = new(0.75f, 0.75f, 0.75f);
internal static void CreateTranslator(Transform cameraBody)
internal static void CreateTranslator(PlayerInfo player)
{
var NomaiTranslatorProp = GameObject.Find("NomaiTranslatorProp");
@ -51,7 +52,8 @@ namespace QSB.Tools.TranslatorTool
tool.ArrivalDegrees = 5f;
tool.Type = ToolType.Translator;
tool.ToolGameObject = REMOTE_TranslatorGroup.gameObject;
tool.RaycastTransform = cameraBody;
tool.Player = player;
tool.RaycastTransform = player.CameraBody.transform;
Object.Destroy(oldTranslator);
PlayerToolsManager.GetRenderer(REMOTE_NomaiTranslatorProp, "Props_HEA_Translator_Screen").material = PlayerToolsManager.Structure_HEA_PlayerShip_Screens_mat;
@ -65,7 +67,7 @@ namespace QSB.Tools.TranslatorTool
PlayerToolsManager.GetRenderer(REMOTE_NomaiTranslatorProp, "Props_HEA_Translator_Button_R").material = PlayerToolsManager.Props_HEA_Lightbulb_mat;
PlayerToolsManager.GetRenderer(REMOTE_NomaiTranslatorProp, "Props_HEA_Translator_Button_R").shadowCastingMode = ShadowCastingMode.On;
REMOTE_NomaiTranslatorProp.transform.parent = cameraBody;
REMOTE_NomaiTranslatorProp.transform.parent = player.CameraBody.transform;
REMOTE_NomaiTranslatorProp.transform.localPosition = Vector3.zero;
REMOTE_NomaiTranslatorProp.transform.localScale = TranslatorScale;
QSBCore.UnityEvents.FireInNUpdates(() => REMOTE_NomaiTranslatorProp.SetActive(true), 5);