Make VanishVolumes never use shapes (#1090)

## Bug fixes

- Fixed a bug where Vanish/DestructionVolumes no longer worked (they
were trying to use sphere shapes when they can only use sphere
colliders)
This commit is contained in:
xen-42 2025-04-25 12:12:12 -04:00 committed by GitHub
commit 824f7e6d64
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 17 additions and 4 deletions

View File

@ -13,7 +13,6 @@ using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using static NewHorizons.External.Modules.BrambleModule;
using static NewHorizons.External.Modules.SignalModule;
namespace NewHorizons.Builder.Props
{

View File

@ -1,4 +1,5 @@
using NewHorizons.External.Modules.Volumes.VolumeInfos;
using NewHorizons.Utility.OWML;
using UnityEngine;
namespace NewHorizons.Builder.Volumes
@ -7,9 +8,19 @@ namespace NewHorizons.Builder.Volumes
{
public static TVolume Make<TVolume>(GameObject planetGO, Sector sector, VanishVolumeInfo info) where TVolume : VanishVolume
{
if (info.shape != null && info.shape?.useShape == false)
{
NHLogger.LogError($"Destruction/VanishVolumes only support colliders. Affects planet [{planetGO.name}]. Set useShape to false.");
}
// VanishVolume is only compatible with sphere colliders
// If info.shape was null, it will still default to using a sphere with info.radius, just make sure it does so with a collider
info.shape ??= new();
info.shape.useShape = false;
var volume = VolumeBuilder.Make<TVolume>(planetGO, sector, info);
var collider = volume.gameObject.GetComponent<SphereCollider>();
var collider = volume.gameObject.GetComponent<Collider>();
volume._collider = collider;
volume._shrinkBodies = info.shrinkBodies;
volume._onlyAffectsPlayerAndShip = info.onlyAffectsPlayerRelatedBodies;

View File

@ -45,7 +45,7 @@ namespace NewHorizons.Builder.Volumes
return volume;
}
public static TVolume Make<TVolume>(GameObject planetGO, Sector sector, VolumeInfo info) where TVolume : MonoBehaviour //Could be BaseVolume but I need to create vanilla volumes too.
public static TVolume Make<TVolume>(GameObject planetGO, Sector sector, VolumeInfo info) where TVolume : MonoBehaviour // Could be BaseVolume but I need to create vanilla volumes too.
{
var go = GeneralPropBuilder.MakeNew(typeof(TVolume).Name, planetGO, sector, info);
return MakeExisting<TVolume>(go, planetGO, sector, info);

View File

@ -4,6 +4,9 @@ using System.ComponentModel;
namespace NewHorizons.External.Modules.Volumes.VolumeInfos
{
/// <summary>
/// Note: Only colliders work on vanish volumes!
/// </summary>
[JsonObject]
public class VanishVolumeInfo : VolumeInfo
{

View File

@ -4,7 +4,7 @@
"author": "xen, Bwc9876, JohnCorby, MegaPiggy, and friends",
"name": "New Horizons",
"uniqueName": "xen.NewHorizons",
"version": "1.28.1",
"version": "1.28.2",
"owmlVersion": "2.12.1",
"dependencies": [ "JohnCorby.VanillaFix", "xen.CommonCameraUtility", "dgarro.CustomShipLogModes" ],
"conflicts": [ "PacificEngine.OW_CommonResources" ],