mirror of
https://github.com/Outer-Wilds-New-Horizons/new-horizons.git
synced 2025-12-11 20:15:44 +01:00
Planets now get destroyed in stars
This commit is contained in:
parent
a7b443c27e
commit
bd4a118ee8
@ -211,6 +211,8 @@ namespace NewHorizons.Builder.Body
|
||||
|
||||
var destructionVolume = child.gameObject.AddComponent<DestructionVolume>();
|
||||
destructionVolume._deathType = deathType;
|
||||
// Only stars should destroy planets
|
||||
destructionVolume._onlyAffectsPlayerAndShip = deathType != DeathType.Energy;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -108,6 +108,8 @@ namespace NewHorizons.Builder.Body
|
||||
deathVolume.transform.localPosition = Vector3.zero;
|
||||
deathVolume.transform.localScale = Vector3.one;
|
||||
deathVolume.GetComponent<SphereCollider>().radius = 1f;
|
||||
deathVolume.GetComponent<DestructionVolume>()._onlyAffectsPlayerAndShip = false;
|
||||
deathVolume.GetComponent<DestructionVolume>()._shrinkBodies = false;
|
||||
deathVolume.name = "DestructionVolume";
|
||||
|
||||
TessellatedSphereRenderer surface = sunSurface.GetComponent<TessellatedSphereRenderer>();
|
||||
|
||||
@ -8,28 +8,38 @@ using System.Reflection;
|
||||
using UnityEngine;
|
||||
using NewHorizons.Utility;
|
||||
using Logger = NewHorizons.Utility.Logger;
|
||||
using NewHorizons.External.Configs;
|
||||
|
||||
namespace NewHorizons.Builder.General
|
||||
{
|
||||
static class DetectorBuilder
|
||||
{
|
||||
public static GameObject Make(GameObject body, OWRigidbody OWRB, AstroObject primaryBody, AstroObject astroObject, bool inherit, bool destroyedBySun)
|
||||
public static GameObject Make(GameObject body, OWRigidbody OWRB, AstroObject primaryBody, AstroObject astroObject, IPlanetConfig config)
|
||||
{
|
||||
GameObject detectorGO = new GameObject("FieldDetector");
|
||||
detectorGO.SetActive(false);
|
||||
detectorGO.transform.parent = body.transform;
|
||||
detectorGO.transform.localPosition = Vector3.zero;
|
||||
detectorGO.layer = 20;
|
||||
detectorGO.layer = LayerMask.NameToLayer("BasicDetector");
|
||||
|
||||
ConstantForceDetector forceDetector = detectorGO.AddComponent<ConstantForceDetector>();
|
||||
forceDetector.SetValue("_inheritElement0", inherit);
|
||||
forceDetector.SetValue("_inheritElement0", true);
|
||||
OWRB.RegisterAttachedForceDetector(forceDetector);
|
||||
|
||||
// For falling into sun
|
||||
if(destroyedBySun)
|
||||
if(!config.Base.InvulnerableToSun && config.Star == null && config.FocalPoint == null)
|
||||
{
|
||||
detectorGO.layer = LayerMask.NameToLayer("AdvancedDetector");
|
||||
|
||||
var fluidDetector = detectorGO.AddComponent<DynamicFluidDetector>();
|
||||
// Could copy the splash from the interloper
|
||||
var sphereCollider = detectorGO.AddComponent<SphereCollider>();
|
||||
sphereCollider.radius = config.Base.SurfaceSize;
|
||||
|
||||
var owCollider = detectorGO.AddComponent<OWCollider>();
|
||||
|
||||
fluidDetector._collider = sphereCollider;
|
||||
|
||||
// Could copy the splash from the interloper as well some day
|
||||
}
|
||||
|
||||
GravityVolume parentGravityVolume = primaryBody?.GetAttachedOWRigidbody()?.GetAttachedGravityVolume();
|
||||
|
||||
@ -80,9 +80,9 @@ namespace NewHorizons.Builder.Props
|
||||
StreamingManager.LoadStreamingAssets(child.assetBundle);
|
||||
}
|
||||
|
||||
var detectorGO = DetectorBuilder.Make(raftObject, owRigidBody, ao, null, false, false);
|
||||
var fluidDetector = detectorGO.AddComponent<DynamicFluidDetector>();
|
||||
Main.Instance.ModHelper.Events.Unity.FireOnNextUpdate(() => fluidDetector._activeVolumes = new EffectVolume[] { body.GetComponentInChildren<RadialFluidVolume>() }.ToList());
|
||||
//var detectorGO = DetectorBuilder.Make(raftObject, owRigidBody, ao, null, false, false);
|
||||
//var fluidDetector = detectorGO.AddComponent<DynamicFluidDetector>();
|
||||
//Main.Instance.ModHelper.Events.Unity.FireOnNextUpdate(() => fluidDetector._activeVolumes = new EffectVolume[] { body.GetComponentInChildren<RadialFluidVolume>() }.ToList());
|
||||
|
||||
|
||||
var targetBodyAlignment = raftObject.AddComponent<AlignWithTargetBody>();
|
||||
|
||||
@ -23,5 +23,14 @@ namespace NewHorizons.Components
|
||||
var dist = (transform.position - target.position).magnitude;
|
||||
transform.localScale = new Vector3(num, dist/500f, num);
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
// The target or anchor could have been destroyed by a star
|
||||
if(!target.gameObject.activeInHierarchy || !anchor.gameObject.activeInHierarchy)
|
||||
{
|
||||
gameObject.SetActive(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,4 +1,5 @@
|
||||
using NewHorizons.Builder.General;
|
||||
using NewHorizons.External.Configs;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
@ -12,9 +13,13 @@ namespace NewHorizons.Components
|
||||
{
|
||||
public void Awake()
|
||||
{
|
||||
// TODO: eventually all bodies should have configs
|
||||
var config = new PlanetConfig(null);
|
||||
config.Base.SurfaceSize = 10f;
|
||||
|
||||
var detector = base.transform.GetComponentInChildren<DynamicForceDetector>();
|
||||
var ao = base.GetComponent<AstroObject>();
|
||||
var newDetector = DetectorBuilder.Make(base.gameObject, ao.GetAttachedOWRigidbody(), ao.GetPrimaryBody(), ao, true, false);
|
||||
var newDetector = DetectorBuilder.Make(base.gameObject, ao.GetAttachedOWRigidbody(), ao.GetPrimaryBody(), ao, config);
|
||||
newDetector.transform.parent = detector.transform.parent;
|
||||
GameObject.Destroy(detector);
|
||||
}
|
||||
|
||||
@ -23,5 +23,25 @@ namespace NewHorizons.Components.Orbital
|
||||
{
|
||||
FakeMassBody.SetActive(true);
|
||||
}
|
||||
|
||||
void Update()
|
||||
{
|
||||
// Secondary and primary must have been engulfed by a star
|
||||
if(!Primary.isActiveAndEnabled && !Secondary.isActiveAndEnabled)
|
||||
{
|
||||
ReferenceFrameTracker component = Locator.GetPlayerBody().GetComponent<ReferenceFrameTracker>();
|
||||
if (component.GetReferenceFrame(true) != null && component.GetReferenceFrame(true).GetOWRigidBody() == gameObject)
|
||||
{
|
||||
component.UntargetReferenceFrame();
|
||||
}
|
||||
MapMarker component2 = gameObject.GetComponent<MapMarker>();
|
||||
if (component2 != null)
|
||||
{
|
||||
component2.DisableMarker();
|
||||
}
|
||||
gameObject.SetActive(false);
|
||||
FakeMassBody.SetActive(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -274,7 +274,7 @@ namespace NewHorizons.Handlers
|
||||
|
||||
if (body.Config.Orbit.ShowOrbitLine && !body.Config.Orbit.IsStatic) OrbitlineBuilder.Make(body.Object, ao, body.Config.Orbit.IsMoon, body.Config);
|
||||
|
||||
if (!body.Config.Orbit.IsStatic) DetectorBuilder.Make(go, owRigidBody, primaryBody, ao, true, (body.Config.Star == null && !body.Config.Base.InvulnerableToSun));
|
||||
if (!body.Config.Orbit.IsStatic) DetectorBuilder.Make(go, owRigidBody, primaryBody, ao, body.Config);
|
||||
|
||||
if (ao.GetAstroObjectName() == AstroObject.Name.CustomString) AstroObjectLocator.RegisterCustomAstroObject(ao);
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user