mirror of
https://github.com/Outer-Wilds-New-Horizons/new-horizons.git
synced 2025-12-11 20:15:44 +01:00
Main to Dev
This commit is contained in:
commit
8ca0fd2986
2
.github/ISSUE_TEMPLATE/feature_request.yml
vendored
2
.github/ISSUE_TEMPLATE/feature_request.yml
vendored
@ -1,6 +1,6 @@
|
|||||||
name: Feature Request
|
name: Feature Request
|
||||||
description: Request a feature you'd like to see in a later release
|
description: Request a feature you'd like to see in a later release
|
||||||
labels: ["enhancement"]
|
labels: ["feature"]
|
||||||
body:
|
body:
|
||||||
- type: textarea
|
- type: textarea
|
||||||
id: feature
|
id: feature
|
||||||
|
|||||||
@ -12,13 +12,26 @@ namespace NewHorizons.Handlers
|
|||||||
{
|
{
|
||||||
public static AssetBundle VesselBundle { get; private set; }
|
public static AssetBundle VesselBundle { get; private set; }
|
||||||
public static GameObject VesselPrefab { get; private set; }
|
public static GameObject VesselPrefab { get; private set; }
|
||||||
|
public static GameObject VesselObject { get; private set; }
|
||||||
|
public static VesselWarpController WarpController { get; private set; }
|
||||||
|
|
||||||
internal static void Initialize()
|
private static SpawnPoint _vesselSpawnPoint;
|
||||||
|
public static SpawnPoint VesselSpawnPoint => _vesselSpawnPoint;
|
||||||
|
|
||||||
|
public static void Initialize()
|
||||||
{
|
{
|
||||||
VesselBundle = Main.Instance.ModHelper.Assets.LoadBundle("Assets/vessel.newhorizons");
|
VesselBundle = Instance.ModHelper.Assets.LoadBundle("Assets/vessel.newhorizons");
|
||||||
VesselPrefab = VesselBundle.LoadAsset<GameObject>("Vessel_Body");
|
VesselPrefab = VesselBundle.LoadAsset<GameObject>("Vessel_Body");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void LoadVessel()
|
||||||
|
{
|
||||||
|
if (Instance.IsWarpingFromVessel)
|
||||||
|
_vesselSpawnPoint = Instance.CurrentStarSystem == "SolarSystem" ? UpdateVessel() : CreateVessel();
|
||||||
|
else
|
||||||
|
_vesselSpawnPoint = SearchUtilities.Find("DB_VesselDimension_Body/Sector_VesselDimension").GetComponentInChildren<SpawnPoint>();
|
||||||
|
}
|
||||||
|
|
||||||
public static void OnReceiveWarpedBody(OWRigidbody warpedBody, NomaiWarpPlatform startPlatform, NomaiWarpPlatform targetPlatform)
|
public static void OnReceiveWarpedBody(OWRigidbody warpedBody, NomaiWarpPlatform startPlatform, NomaiWarpPlatform targetPlatform)
|
||||||
{
|
{
|
||||||
bool isPlayer = warpedBody.CompareTag("Player");
|
bool isPlayer = warpedBody.CompareTag("Player");
|
||||||
@ -36,41 +49,76 @@ namespace NewHorizons.Handlers
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void TeleportToVessel()
|
||||||
|
{
|
||||||
|
var playerSpawner = GameObject.FindObjectOfType<PlayerSpawner>();
|
||||||
|
playerSpawner.DebugWarp(_vesselSpawnPoint);
|
||||||
|
Builder.General.SpawnPointBuilder.SuitUp();
|
||||||
|
|
||||||
|
if (Instance.CurrentStarSystem == "SolarSystem")
|
||||||
|
{
|
||||||
|
// Deactivate village music because for some reason it still plays.
|
||||||
|
SearchUtilities.Find("TimberHearth_Body/Sector_TH/Sector_Village/Volumes_Village/MusicVolume_Village").GetComponent<VillageMusicVolume>().Deactivate();
|
||||||
|
|
||||||
|
// Loads it manually so the player doesn't start falling and then vessel loads in on them.
|
||||||
|
SectorStreaming ss = SearchUtilities.Find("DB_VesselDimension_Body/Sector_VesselDimension/Sector_Streaming").GetComponent<SectorStreaming>();
|
||||||
|
ss.enabled = true;
|
||||||
|
ss._streamingGroup.LoadRequiredAssets();
|
||||||
|
ss._streamingGroup.LoadRequiredColliders();
|
||||||
|
ss._streamingGroup.LoadGeneralAssets();
|
||||||
|
StreamingManager.loadingPriority = StreamingManager.LoadingPriority.High;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static EyeSpawnPoint CreateVessel()
|
public static EyeSpawnPoint CreateVessel()
|
||||||
{
|
{
|
||||||
var system = SystemDict[Instance.CurrentStarSystem];
|
var system = SystemDict[Instance.CurrentStarSystem];
|
||||||
|
|
||||||
Logger.Log("Checking for Vessel Prefab");
|
Logger.Log("Checking for Vessel Prefab");
|
||||||
if (VesselPrefab == null) return null;
|
if (VesselPrefab == null) return null;
|
||||||
|
|
||||||
Logger.Log("Creating Vessel");
|
Logger.Log("Creating Vessel");
|
||||||
var vesselObject = GameObject.Instantiate(VesselPrefab);
|
var vesselObject = GameObject.Instantiate(VesselPrefab);
|
||||||
|
VesselObject = vesselObject;
|
||||||
vesselObject.name = VesselPrefab.name;
|
vesselObject.name = VesselPrefab.name;
|
||||||
vesselObject.transform.parent = null;
|
vesselObject.transform.parent = null;
|
||||||
|
|
||||||
if (system.Config.vesselPosition != null)
|
if (system.Config.vesselPosition != null)
|
||||||
vesselObject.transform.position += system.Config.vesselPosition;
|
vesselObject.transform.position += system.Config.vesselPosition;
|
||||||
|
|
||||||
if (system.Config.vesselRotation != null)
|
if (system.Config.vesselRotation != null)
|
||||||
vesselObject.transform.eulerAngles = system.Config.vesselRotation;
|
vesselObject.transform.eulerAngles = system.Config.vesselRotation;
|
||||||
|
|
||||||
VesselWarpController vesselWarpController = vesselObject.GetComponentInChildren<VesselWarpController>(true);
|
VesselWarpController vesselWarpController = vesselObject.GetComponentInChildren<VesselWarpController>(true);
|
||||||
|
WarpController = vesselWarpController;
|
||||||
|
|
||||||
vesselWarpController._sourceWarpPlatform.transform.DestroyAllChildren();
|
vesselWarpController._sourceWarpPlatform.transform.DestroyAllChildren();
|
||||||
vesselWarpController._targetWarpPlatform.transform.DestroyAllChildren();
|
vesselWarpController._targetWarpPlatform.transform.DestroyAllChildren();
|
||||||
GameObject.Destroy(vesselWarpController._blackHole.transform.parent.gameObject);
|
GameObject.Destroy(vesselWarpController._blackHole.transform.parent.gameObject);
|
||||||
GameObject.Destroy(vesselWarpController._whiteHole.transform.parent.gameObject);
|
GameObject.Destroy(vesselWarpController._whiteHole.transform.parent.gameObject);
|
||||||
|
|
||||||
GameObject WarpPlatform = SearchUtilities.Find("DB_VesselDimension_Body/Sector_VesselDimension/Sector_VesselBridge/Interactibles_VesselBridge/WarpController/Prefab_NOM_WarpPlatform");
|
GameObject WarpPlatform = SearchUtilities.Find("DB_VesselDimension_Body/Sector_VesselDimension/Sector_VesselBridge/Interactibles_VesselBridge/WarpController/Prefab_NOM_WarpPlatform");
|
||||||
GameObject warpBH = WarpPlatform.transform.Find("BlackHole").gameObject;
|
GameObject warpBH = WarpPlatform.transform.Find("BlackHole").gameObject;
|
||||||
GameObject warpWH = WarpPlatform.transform.Find("WhiteHole").gameObject;
|
GameObject warpWH = WarpPlatform.transform.Find("WhiteHole").gameObject;
|
||||||
|
|
||||||
GameObject sourceBH = GameObject.Instantiate(warpBH, vesselWarpController._sourceWarpPlatform.transform, false);
|
GameObject sourceBH = GameObject.Instantiate(warpBH, vesselWarpController._sourceWarpPlatform.transform, false);
|
||||||
vesselWarpController._sourceWarpPlatform._blackHole = sourceBH.GetComponentInChildren<SingularityController>();
|
vesselWarpController._sourceWarpPlatform._blackHole = sourceBH.GetComponentInChildren<SingularityController>();
|
||||||
|
|
||||||
GameObject sourceWH = GameObject.Instantiate(warpWH, vesselWarpController._sourceWarpPlatform.transform, false);
|
GameObject sourceWH = GameObject.Instantiate(warpWH, vesselWarpController._sourceWarpPlatform.transform, false);
|
||||||
vesselWarpController._sourceWarpPlatform._whiteHole = sourceWH.GetComponentInChildren<SingularityController>();
|
vesselWarpController._sourceWarpPlatform._whiteHole = sourceWH.GetComponentInChildren<SingularityController>();
|
||||||
|
|
||||||
GameObject targetBH = GameObject.Instantiate(warpBH, vesselWarpController._targetWarpPlatform.transform, false);
|
GameObject targetBH = GameObject.Instantiate(warpBH, vesselWarpController._targetWarpPlatform.transform, false);
|
||||||
vesselWarpController._targetWarpPlatform._blackHole = targetBH.GetComponentInChildren<SingularityController>();
|
vesselWarpController._targetWarpPlatform._blackHole = targetBH.GetComponentInChildren<SingularityController>();
|
||||||
|
|
||||||
GameObject targetWH = GameObject.Instantiate(warpWH, vesselWarpController._targetWarpPlatform.transform, false);
|
GameObject targetWH = GameObject.Instantiate(warpWH, vesselWarpController._targetWarpPlatform.transform, false);
|
||||||
vesselWarpController._targetWarpPlatform._whiteHole = targetWH.GetComponentInChildren<SingularityController>();
|
vesselWarpController._targetWarpPlatform._whiteHole = targetWH.GetComponentInChildren<SingularityController>();
|
||||||
|
|
||||||
GameObject blackHole = SearchUtilities.Find("DB_VesselDimension_Body/Sector_VesselDimension/Sector_VesselBridge/Interactibles_VesselBridge/BlackHole");
|
GameObject blackHole = SearchUtilities.Find("DB_VesselDimension_Body/Sector_VesselDimension/Sector_VesselBridge/Interactibles_VesselBridge/BlackHole");
|
||||||
GameObject newBlackHole = GameObject.Instantiate(blackHole, vesselWarpController.transform.parent, false);
|
GameObject newBlackHole = GameObject.Instantiate(blackHole, vesselWarpController.transform.parent, false);
|
||||||
newBlackHole.name = "BlackHole";
|
newBlackHole.name = "BlackHole";
|
||||||
vesselWarpController._blackHole = newBlackHole.GetComponentInChildren<SingularityController>();
|
vesselWarpController._blackHole = newBlackHole.GetComponentInChildren<SingularityController>();
|
||||||
vesselWarpController._blackHoleOneShot = vesselWarpController._blackHole.transform.parent.Find("BlackHoleAudio_OneShot").GetComponent<OWAudioSource>();
|
vesselWarpController._blackHoleOneShot = vesselWarpController._blackHole.transform.parent.Find("BlackHoleAudio_OneShot").GetComponent<OWAudioSource>();
|
||||||
|
|
||||||
GameObject whiteHole = SearchUtilities.Find("DB_VesselDimension_Body/Sector_VesselDimension/Sector_VesselBridge/Interactibles_VesselBridge/WhiteHole");
|
GameObject whiteHole = SearchUtilities.Find("DB_VesselDimension_Body/Sector_VesselDimension/Sector_VesselBridge/Interactibles_VesselBridge/WhiteHole");
|
||||||
GameObject newWhiteHole = GameObject.Instantiate(whiteHole, vesselWarpController.transform.parent, false);
|
GameObject newWhiteHole = GameObject.Instantiate(whiteHole, vesselWarpController.transform.parent, false);
|
||||||
newWhiteHole.name = "WhiteHole";
|
newWhiteHole.name = "WhiteHole";
|
||||||
@ -78,28 +126,50 @@ namespace NewHorizons.Handlers
|
|||||||
vesselWarpController._whiteHoleOneShot = vesselWarpController._whiteHole.transform.parent.Find("WhiteHoleAudio_OneShot").GetComponent<OWAudioSource>();
|
vesselWarpController._whiteHoleOneShot = vesselWarpController._whiteHole.transform.parent.Find("WhiteHoleAudio_OneShot").GetComponent<OWAudioSource>();
|
||||||
|
|
||||||
vesselObject.SetActive(true);
|
vesselObject.SetActive(true);
|
||||||
|
|
||||||
vesselWarpController._targetWarpPlatform.OnReceiveWarpedBody += OnReceiveWarpedBody;
|
vesselWarpController._targetWarpPlatform.OnReceiveWarpedBody += OnReceiveWarpedBody;
|
||||||
|
|
||||||
if (system.Config.warpExitPosition != null)
|
if (system.Config.warpExitPosition != null)
|
||||||
vesselWarpController._targetWarpPlatform.transform.localPosition = system.Config.warpExitPosition;
|
vesselWarpController._targetWarpPlatform.transform.localPosition = system.Config.warpExitPosition;
|
||||||
|
|
||||||
if (system.Config.warpExitRotation != null)
|
if (system.Config.warpExitRotation != null)
|
||||||
vesselObject.transform.localEulerAngles = system.Config.warpExitRotation;
|
vesselObject.transform.localEulerAngles = system.Config.warpExitRotation;
|
||||||
vesselObject.GetComponent<MapMarker>()._labelID = (UITextType)TranslationHandler.AddUI("Vessel");
|
|
||||||
|
vesselObject.GetComponent<MapMarker>()._labelID = (UITextType)TranslationHandler.AddUI("VESSEL");
|
||||||
|
|
||||||
EyeSpawnPoint eyeSpawnPoint = vesselObject.GetComponentInChildren<EyeSpawnPoint>(true);
|
EyeSpawnPoint eyeSpawnPoint = vesselObject.GetComponentInChildren<EyeSpawnPoint>(true);
|
||||||
system.SpawnPoint = eyeSpawnPoint;
|
system.SpawnPoint = eyeSpawnPoint;
|
||||||
|
|
||||||
Instance.ModHelper.Events.Unity.FireOnNextUpdate(() => SetupWarpController(vesselWarpController));
|
Instance.ModHelper.Events.Unity.FireOnNextUpdate(() => SetupWarpController(vesselWarpController));
|
||||||
|
|
||||||
return eyeSpawnPoint;
|
return eyeSpawnPoint;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static SpawnPoint UpdateVessel()
|
public static SpawnPoint UpdateVessel()
|
||||||
{
|
{
|
||||||
var system = SystemDict[Instance.CurrentStarSystem];
|
var system = SystemDict[Instance.CurrentStarSystem];
|
||||||
|
|
||||||
|
Logger.Log("Updating DB Vessel");
|
||||||
var vectorSector = SearchUtilities.Find("DB_VesselDimension_Body/Sector_VesselDimension");
|
var vectorSector = SearchUtilities.Find("DB_VesselDimension_Body/Sector_VesselDimension");
|
||||||
|
VesselObject = vectorSector;
|
||||||
|
|
||||||
var spawnPoint = vectorSector.GetComponentInChildren<SpawnPoint>();
|
var spawnPoint = vectorSector.GetComponentInChildren<SpawnPoint>();
|
||||||
system.SpawnPoint = spawnPoint;
|
|
||||||
VesselWarpController vesselWarpController = vectorSector.GetComponentInChildren<VesselWarpController>(true);
|
VesselWarpController vesselWarpController = vectorSector.GetComponentInChildren<VesselWarpController>(true);
|
||||||
|
WarpController = vesselWarpController;
|
||||||
|
|
||||||
if (vesselWarpController._targetWarpPlatform != null)
|
if (vesselWarpController._targetWarpPlatform != null)
|
||||||
vesselWarpController._targetWarpPlatform.OnReceiveWarpedBody += OnReceiveWarpedBody;
|
vesselWarpController._targetWarpPlatform.OnReceiveWarpedBody += OnReceiveWarpedBody;
|
||||||
|
|
||||||
|
if (vesselWarpController._whiteHole == null)
|
||||||
|
{
|
||||||
|
GameObject whiteHole = SearchUtilities.Find("DB_VesselDimension_Body/Sector_VesselDimension/Sector_VesselBridge/Interactibles_VesselBridge/WhiteHole");
|
||||||
|
vesselWarpController._whiteHole = whiteHole.GetComponentInChildren<SingularityController>();
|
||||||
|
vesselWarpController._whiteHoleOneShot = vesselWarpController._whiteHole.transform.parent.Find("WhiteHoleAudio_OneShot").GetComponent<OWAudioSource>();
|
||||||
|
}
|
||||||
|
|
||||||
Instance.ModHelper.Events.Unity.FireOnNextUpdate(() => SetupWarpController(vesselWarpController, true));
|
Instance.ModHelper.Events.Unity.FireOnNextUpdate(() => SetupWarpController(vesselWarpController, true));
|
||||||
|
|
||||||
return spawnPoint;
|
return spawnPoint;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -57,9 +57,6 @@ namespace NewHorizons
|
|||||||
private bool _firstLoad = true;
|
private bool _firstLoad = true;
|
||||||
private ShipWarpController _shipWarpController;
|
private ShipWarpController _shipWarpController;
|
||||||
|
|
||||||
// Vessel
|
|
||||||
private SpawnPoint _vesselSpawnPoint;
|
|
||||||
|
|
||||||
// API events
|
// API events
|
||||||
public class StarSystemEvent : UnityEvent<string> { }
|
public class StarSystemEvent : UnityEvent<string> { }
|
||||||
public StarSystemEvent OnChangeStarSystem;
|
public StarSystemEvent OnChangeStarSystem;
|
||||||
@ -282,10 +279,7 @@ namespace NewHorizons
|
|||||||
AstroObjectLocator.Init();
|
AstroObjectLocator.Init();
|
||||||
OWAssetHandler.Init();
|
OWAssetHandler.Init();
|
||||||
PlanetCreationHandler.Init(BodyDict[CurrentStarSystem]);
|
PlanetCreationHandler.Init(BodyDict[CurrentStarSystem]);
|
||||||
if (IsWarpingFromVessel)
|
VesselWarpHandler.LoadVessel();
|
||||||
_vesselSpawnPoint = CurrentStarSystem == "SolarSystem" ? VesselWarpHandler.UpdateVessel() : VesselWarpHandler.CreateVessel();
|
|
||||||
else
|
|
||||||
_vesselSpawnPoint = SearchUtilities.Find("DB_VesselDimension_Body/Sector_VesselDimension").GetComponentInChildren<SpawnPoint>();
|
|
||||||
SystemCreationHandler.LoadSystem(SystemDict[CurrentStarSystem]);
|
SystemCreationHandler.LoadSystem(SystemDict[CurrentStarSystem]);
|
||||||
LoadTranslations(ModHelper.Manifest.ModFolderPath + "Assets/", this);
|
LoadTranslations(ModHelper.Manifest.ModFolderPath + "Assets/", this);
|
||||||
|
|
||||||
@ -297,7 +291,7 @@ namespace NewHorizons
|
|||||||
if (HasWarpDrive == true) EnableWarpDrive();
|
if (HasWarpDrive == true) EnableWarpDrive();
|
||||||
|
|
||||||
var shouldWarpInFromShip = IsWarpingFromShip && _shipWarpController != null;
|
var shouldWarpInFromShip = IsWarpingFromShip && _shipWarpController != null;
|
||||||
var shouldWarpInFromVessel = IsWarpingFromVessel && _vesselSpawnPoint != null;
|
var shouldWarpInFromVessel = IsWarpingFromVessel && VesselWarpHandler.VesselSpawnPoint != null;
|
||||||
Instance.ModHelper.Events.Unity.RunWhen(() => IsSystemReady, () => OnSystemReady(shouldWarpInFromShip, shouldWarpInFromVessel));
|
Instance.ModHelper.Events.Unity.RunWhen(() => IsSystemReady, () => OnSystemReady(shouldWarpInFromShip, shouldWarpInFromVessel));
|
||||||
|
|
||||||
IsWarpingFromShip = false;
|
IsWarpingFromShip = false;
|
||||||
@ -335,11 +329,7 @@ namespace NewHorizons
|
|||||||
// DebugArrow.CreateArrow(Locator.GetPlayerBody().gameObject); // This is for NH devs mostly. It shouldn't be active in debug mode for now. Someone should make a dev tools submenu for it though.
|
// DebugArrow.CreateArrow(Locator.GetPlayerBody().gameObject); // This is for NH devs mostly. It shouldn't be active in debug mode for now. Someone should make a dev tools submenu for it though.
|
||||||
|
|
||||||
if (shouldWarpInFromShip) _shipWarpController.WarpIn(WearingSuit);
|
if (shouldWarpInFromShip) _shipWarpController.WarpIn(WearingSuit);
|
||||||
else if (shouldWarpInFromVessel)
|
else if (shouldWarpInFromVessel) VesselWarpHandler.TeleportToVessel();
|
||||||
{
|
|
||||||
FindObjectOfType<PlayerSpawner>().DebugWarp(_vesselSpawnPoint);
|
|
||||||
Builder.General.SpawnPointBuilder.SuitUp();
|
|
||||||
}
|
|
||||||
else FindObjectOfType<PlayerSpawner>().DebugWarp(SystemDict[_currentStarSystem].SpawnPoint);
|
else FindObjectOfType<PlayerSpawner>().DebugWarp(SystemDict[_currentStarSystem].SpawnPoint);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -66,7 +66,6 @@ New Horizons was made with help from:
|
|||||||
- [Trifid](https://github.com/TerrificTrifid)
|
- [Trifid](https://github.com/TerrificTrifid)
|
||||||
- [Raicuparta](https://github.com/Raicuparta)
|
- [Raicuparta](https://github.com/Raicuparta)
|
||||||
- [jtsalomo](https://github.com/jtsalomo)
|
- [jtsalomo](https://github.com/jtsalomo)
|
||||||
|
|
||||||
- And the Outer Wilds modding server.
|
- And the Outer Wilds modding server.
|
||||||
|
|
||||||
Translation credits:
|
Translation credits:
|
||||||
|
|||||||
@ -491,7 +491,7 @@ Can be any of the following:
|
|||||||
|
|
||||||
#### Enter
|
#### Enter
|
||||||
|
|
||||||
When the player enters the trigger, reveal the facts
|
When the player or probe enters the trigger, reveal the facts
|
||||||
|
|
||||||
#### Observe
|
#### Observe
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user