Use layer util

This commit is contained in:
Nick 2023-03-18 16:48:31 -04:00
parent 7a2d3cc893
commit 851b4608c2
28 changed files with 184 additions and 162 deletions

View File

@ -1,4 +1,5 @@
using NewHorizons.External.Configs; using NewHorizons.External.Configs;
using NewHorizons.Utility.OWUtilities;
using UnityEngine; using UnityEngine;
namespace NewHorizons.Builder.Atmosphere namespace NewHorizons.Builder.Atmosphere
{ {
@ -8,7 +9,7 @@ namespace NewHorizons.Builder.Atmosphere
{ {
var airGO = new GameObject("Air"); var airGO = new GameObject("Air");
airGO.SetActive(false); airGO.SetActive(false);
airGO.layer = 17; airGO.layer = LayerUtilities.BasicEffectVolume;
airGO.transform.parent = sector?.transform ?? planetGO.transform; airGO.transform.parent = sector?.transform ?? planetGO.transform;
var sc = airGO.AddComponent<SphereCollider>(); var sc = airGO.AddComponent<SphereCollider>();

View File

@ -7,6 +7,7 @@ using UnityEngine;
using Logger = NewHorizons.Utility.Logger; using Logger = NewHorizons.Utility.Logger;
using System.Collections.Generic; using System.Collections.Generic;
using Tessellation; using Tessellation;
using NewHorizons.Utility.OWUtilities;
namespace NewHorizons.Builder.Atmosphere namespace NewHorizons.Builder.Atmosphere
{ {
@ -118,7 +119,7 @@ namespace NewHorizons.Builder.Atmosphere
GameObject cloudsFluidGO = new GameObject("CloudsFluid"); GameObject cloudsFluidGO = new GameObject("CloudsFluid");
cloudsFluidGO.SetActive(false); cloudsFluidGO.SetActive(false);
cloudsFluidGO.layer = 17; cloudsFluidGO.layer = LayerUtilities.BasicEffectVolume;
cloudsFluidGO.transform.parent = cloudsMainGO.transform; cloudsFluidGO.transform.parent = cloudsMainGO.transform;
SphereCollider fluidSC = cloudsFluidGO.AddComponent<SphereCollider>(); SphereCollider fluidSC = cloudsFluidGO.AddComponent<SphereCollider>();
@ -251,7 +252,7 @@ namespace NewHorizons.Builder.Atmosphere
if (atmo.clouds.unlit) if (atmo.clouds.unlit)
{ {
cloudsTopGO.layer = LayerMask.NameToLayer("IgnoreSun"); cloudsTopGO.layer = LayerUtilities.IgnoreSun;
} }
if (atmo.clouds.rotationSpeed != 0f) if (atmo.clouds.rotationSpeed != 0f)
@ -303,7 +304,7 @@ namespace NewHorizons.Builder.Atmosphere
{ {
GameObject tcrqcGO = new GameObject("TransparentCloudRenderQueueController"); GameObject tcrqcGO = new GameObject("TransparentCloudRenderQueueController");
tcrqcGO.transform.SetParent(cloudsTransparentGO.transform, false); tcrqcGO.transform.SetParent(cloudsTransparentGO.transform, false);
tcrqcGO.layer = LayerMask.NameToLayer("BasicEffectVolume"); tcrqcGO.layer = LayerUtilities.BasicEffectVolume;
var shape = tcrqcGO.AddComponent<SphereShape>(); var shape = tcrqcGO.AddComponent<SphereShape>();
shape.radius = 1; shape.radius = 1;

View File

@ -8,6 +8,7 @@ using NewHorizons.External.Modules;
using UnityEngine; using UnityEngine;
using Logger = NewHorizons.Utility.Logger; using Logger = NewHorizons.Utility.Logger;
using NewHorizons.Components.Volumes; using NewHorizons.Components.Volumes;
using NewHorizons.Utility.OWUtilities;
namespace NewHorizons.Builder.Body namespace NewHorizons.Builder.Body
{ {
@ -30,7 +31,7 @@ namespace NewHorizons.Builder.Body
ringVolume.transform.localPosition = Vector3.zero; ringVolume.transform.localPosition = Vector3.zero;
ringVolume.transform.localScale = Vector3.one; ringVolume.transform.localScale = Vector3.one;
ringVolume.transform.localRotation = Quaternion.identity; ringVolume.transform.localRotation = Quaternion.identity;
ringVolume.layer = LayerMask.NameToLayer("BasicEffectVolume"); ringVolume.layer = LayerUtilities.BasicEffectVolume;
var ringShape = ringVolume.AddComponent<RingShape>(); var ringShape = ringVolume.AddComponent<RingShape>();
ringShape.innerRadius = ring.innerRadius; ringShape.innerRadius = ring.innerRadius;

View File

@ -11,6 +11,7 @@ using System.Drawing;
using Color = UnityEngine.Color; using Color = UnityEngine.Color;
using NewHorizons.Components.Volumes; using NewHorizons.Components.Volumes;
using NewHorizons.Utility.OWMLUtilities; using NewHorizons.Utility.OWMLUtilities;
using NewHorizons.Utility.OWUtilities;
namespace NewHorizons.Builder.Body namespace NewHorizons.Builder.Body
{ {
@ -191,7 +192,7 @@ namespace NewHorizons.Builder.Body
if (hasDestructionVolume || targetStarSystem != null) if (hasDestructionVolume || targetStarSystem != null)
{ {
var destructionVolumeGO = new GameObject("DestructionVolume"); var destructionVolumeGO = new GameObject("DestructionVolume");
destructionVolumeGO.layer = LayerMask.NameToLayer("BasicEffectVolume"); destructionVolumeGO.layer = LayerUtilities.BasicEffectVolume;
destructionVolumeGO.transform.parent = singularity.transform; destructionVolumeGO.transform.parent = singularity.transform;
destructionVolumeGO.transform.localScale = Vector3.one; destructionVolumeGO.transform.localScale = Vector3.one;
destructionVolumeGO.transform.localPosition = Vector3.zero; destructionVolumeGO.transform.localPosition = Vector3.zero;

View File

@ -9,6 +9,7 @@ using OWML.Common;
using UnityEngine.InputSystem.XR; using UnityEngine.InputSystem.XR;
using System.Linq; using System.Linq;
using NewHorizons.Components.Stars; using NewHorizons.Components.Stars;
using NewHorizons.Utility.OWUtilities;
namespace NewHorizons.Builder.Body namespace NewHorizons.Builder.Body
{ {
@ -122,7 +123,7 @@ namespace NewHorizons.Builder.Body
heatVolume.transform.SetParent(starGO.transform, false); heatVolume.transform.SetParent(starGO.transform, false);
heatVolume.transform.localPosition = Vector3.zero; heatVolume.transform.localPosition = Vector3.zero;
heatVolume.transform.localScale = Vector3.one; heatVolume.transform.localScale = Vector3.one;
heatVolume.layer = LayerMask.NameToLayer("BasicEffectVolume"); heatVolume.layer = LayerUtilities.BasicEffectVolume;
heatVolume.AddComponent<SphereShape>().radius = 1.1f; heatVolume.AddComponent<SphereShape>().radius = 1.1f;
heatVolume.AddComponent<OWTriggerVolume>(); heatVolume.AddComponent<OWTriggerVolume>();
heatVolume.AddComponent<HeatHazardVolume>()._damagePerSecond = 20f; heatVolume.AddComponent<HeatHazardVolume>()._damagePerSecond = 20f;
@ -132,7 +133,7 @@ namespace NewHorizons.Builder.Body
deathVolume.transform.SetParent(starGO.transform, false); deathVolume.transform.SetParent(starGO.transform, false);
deathVolume.transform.localPosition = Vector3.zero; deathVolume.transform.localPosition = Vector3.zero;
deathVolume.transform.localScale = Vector3.one; deathVolume.transform.localScale = Vector3.one;
deathVolume.layer = LayerMask.NameToLayer("BasicEffectVolume"); deathVolume.layer = LayerUtilities.BasicEffectVolume;
var sphereCollider = deathVolume.AddComponent<SphereCollider>(); var sphereCollider = deathVolume.AddComponent<SphereCollider>();
sphereCollider.radius = 1f; sphereCollider.radius = 1f;
sphereCollider.isTrigger = true; sphereCollider.isTrigger = true;
@ -148,7 +149,7 @@ namespace NewHorizons.Builder.Body
planetDestructionVolume.transform.SetParent(starGO.transform, false); planetDestructionVolume.transform.SetParent(starGO.transform, false);
planetDestructionVolume.transform.localPosition = Vector3.zero; planetDestructionVolume.transform.localPosition = Vector3.zero;
planetDestructionVolume.transform.localScale = Vector3.one; planetDestructionVolume.transform.localScale = Vector3.one;
planetDestructionVolume.layer = LayerMask.NameToLayer("BasicEffectVolume"); planetDestructionVolume.layer = LayerUtilities.BasicEffectVolume;
var planetSphereCollider = planetDestructionVolume.AddComponent<SphereCollider>(); var planetSphereCollider = planetDestructionVolume.AddComponent<SphereCollider>();
planetSphereCollider.radius = 0.8f; planetSphereCollider.radius = 0.8f;
planetSphereCollider.isTrigger = true; planetSphereCollider.isTrigger = true;
@ -445,7 +446,7 @@ namespace NewHorizons.Builder.Body
supernovaWallAudio.transform.SetParent(supernovaGO.transform, false); supernovaWallAudio.transform.SetParent(supernovaGO.transform, false);
supernovaWallAudio.transform.localPosition = Vector3.zero; supernovaWallAudio.transform.localPosition = Vector3.zero;
supernovaWallAudio.transform.localScale = Vector3.one; supernovaWallAudio.transform.localScale = Vector3.one;
supernovaWallAudio.layer = LayerMask.NameToLayer("BasicEffectVolume"); supernovaWallAudio.layer = LayerUtilities.BasicEffectVolume;
var audioSource = supernovaWallAudio.AddComponent<AudioSource>(); var audioSource = supernovaWallAudio.AddComponent<AudioSource>();
audioSource.loop = true; audioSource.loop = true;
audioSource.maxDistance = 2000; audioSource.maxDistance = 2000;

View File

@ -4,6 +4,7 @@ using UnityEngine;
using NewHorizons.External.Modules.VariableSize; using NewHorizons.External.Modules.VariableSize;
using Tessellation; using Tessellation;
using NewHorizons.Utility.OWMLUtilities; using NewHorizons.Utility.OWMLUtilities;
using NewHorizons.Utility.OWUtilities;
namespace NewHorizons.Builder.Body namespace NewHorizons.Builder.Body
{ {
@ -53,7 +54,7 @@ namespace NewHorizons.Builder.Body
// Don't ignore sun when not under clouds // Don't ignore sun when not under clouds
waterGO.layer = 0; waterGO.layer = 0;
Delay.FireOnNextUpdate(() => { if (planetGO.FindChild("Sector/SunOverride") != null) waterGO.layer = 15; }); Delay.FireOnNextUpdate(() => { if (planetGO.FindChild("Sector/SunOverride") != null) waterGO.layer = LayerUtilities.IgnoreSun; });
TessellatedSphereRenderer TSR = waterGO.AddComponent<TessellatedSphereRenderer>(); TessellatedSphereRenderer TSR = waterGO.AddComponent<TessellatedSphereRenderer>();
TSR.tessellationMeshGroup = ScriptableObject.CreateInstance<MeshGroup>(); TSR.tessellationMeshGroup = ScriptableObject.CreateInstance<MeshGroup>();
@ -100,7 +101,7 @@ namespace NewHorizons.Builder.Body
var buoyancyObject = new GameObject("WaterVolume"); var buoyancyObject = new GameObject("WaterVolume");
buoyancyObject.transform.parent = waterGO.transform; buoyancyObject.transform.parent = waterGO.transform;
buoyancyObject.transform.localScale = Vector3.one; buoyancyObject.transform.localScale = Vector3.one;
buoyancyObject.layer = LayerMask.NameToLayer("BasicEffectVolume"); buoyancyObject.layer = LayerUtilities.BasicEffectVolume;
var sphereCollider = buoyancyObject.AddComponent<SphereCollider>(); var sphereCollider = buoyancyObject.AddComponent<SphereCollider>();
sphereCollider.radius = 1; sphereCollider.radius = 1;

View File

@ -1,6 +1,7 @@
using NewHorizons.Components.Orbital; using NewHorizons.Components.Orbital;
using NewHorizons.External.Configs; using NewHorizons.External.Configs;
using NewHorizons.Utility; using NewHorizons.Utility;
using NewHorizons.Utility.OWUtilities;
using System.Collections.Generic; using System.Collections.Generic;
using UnityEngine; using UnityEngine;
using Logger = NewHorizons.Utility.Logger; using Logger = NewHorizons.Utility.Logger;
@ -81,7 +82,7 @@ namespace NewHorizons.Builder.General
detectorGO.SetActive(false); detectorGO.SetActive(false);
detectorGO.transform.parent = planetGO.transform; detectorGO.transform.parent = planetGO.transform;
detectorGO.transform.localPosition = Vector3.zero; detectorGO.transform.localPosition = Vector3.zero;
detectorGO.layer = LayerMask.NameToLayer("BasicDetector"); detectorGO.layer = LayerUtilities.BasicDetector;
ConstantForceDetector forceDetector = detectorGO.AddComponent<ConstantForceDetector>(); ConstantForceDetector forceDetector = detectorGO.AddComponent<ConstantForceDetector>();
forceDetector._inheritElement0 = true; forceDetector._inheritElement0 = true;
@ -90,7 +91,7 @@ namespace NewHorizons.Builder.General
// For falling into sun // For falling into sun
if (!config.Base.invulnerableToSun && config.Star == null && config.FocalPoint == null) if (!config.Base.invulnerableToSun && config.Star == null && config.FocalPoint == null)
{ {
detectorGO.layer = LayerMask.NameToLayer("AdvancedDetector"); detectorGO.layer = LayerUtilities.AdvancedDetector;
var fluidDetector = detectorGO.AddComponent<DynamicFluidDetector>(); var fluidDetector = detectorGO.AddComponent<DynamicFluidDetector>();
var sphereCollider = detectorGO.AddComponent<SphereCollider>(); var sphereCollider = detectorGO.AddComponent<SphereCollider>();

View File

@ -1,5 +1,6 @@
using NewHorizons.External.Configs; using NewHorizons.External.Configs;
using NewHorizons.External.Modules; using NewHorizons.External.Modules;
using NewHorizons.Utility.OWUtilities;
using UnityEngine; using UnityEngine;
using Logger = NewHorizons.Utility.Logger; using Logger = NewHorizons.Utility.Logger;
namespace NewHorizons.Builder.General namespace NewHorizons.Builder.General
@ -23,7 +24,7 @@ namespace NewHorizons.Builder.General
var gravityGO = new GameObject("GravityWell"); var gravityGO = new GameObject("GravityWell");
gravityGO.transform.parent = planetGO.transform; gravityGO.transform.parent = planetGO.transform;
gravityGO.transform.localPosition = Vector3.zero; gravityGO.transform.localPosition = Vector3.zero;
gravityGO.layer = 17; gravityGO.layer = LayerUtilities.BasicEffectVolume;
gravityGO.SetActive(false); gravityGO.SetActive(false);
var SC = gravityGO.AddComponent<SphereCollider>(); var SC = gravityGO.AddComponent<SphereCollider>();

View File

@ -1,5 +1,6 @@
using NewHorizons.External.Configs; using NewHorizons.External.Configs;
using NewHorizons.External.Modules; using NewHorizons.External.Modules;
using NewHorizons.Utility.OWUtilities;
using UnityEngine; using UnityEngine;
namespace NewHorizons.Builder.General namespace NewHorizons.Builder.General
{ {
@ -12,7 +13,7 @@ namespace NewHorizons.Builder.General
var rfGO = new GameObject("RFVolume"); var rfGO = new GameObject("RFVolume");
rfGO.transform.parent = planetGO.transform; rfGO.transform.parent = planetGO.transform;
rfGO.transform.localPosition = Vector3.zero; rfGO.transform.localPosition = Vector3.zero;
rfGO.layer = 19; rfGO.layer = LayerUtilities.ReferenceFrameVolume;
rfGO.SetActive(false); rfGO.SetActive(false);
var SC = rfGO.AddComponent<SphereCollider>(); var SC = rfGO.AddComponent<SphereCollider>();

View File

@ -1,6 +1,7 @@
using NewHorizons.External.Modules; using NewHorizons.External.Modules;
using NewHorizons.Utility; using NewHorizons.Utility;
using NewHorizons.Utility.OWMLUtilities; using NewHorizons.Utility.OWMLUtilities;
using NewHorizons.Utility.OWUtilities;
using System; using System;
using System.Reflection; using System.Reflection;
using UnityEngine; using UnityEngine;
@ -17,7 +18,7 @@ namespace NewHorizons.Builder.General
{ {
GameObject spawnGO = new GameObject("PlayerSpawnPoint"); GameObject spawnGO = new GameObject("PlayerSpawnPoint");
spawnGO.transform.parent = planetGO.transform; spawnGO.transform.parent = planetGO.transform;
spawnGO.layer = 8; spawnGO.layer = LayerUtilities.PlayerSafetyCollider;
spawnGO.transform.localPosition = module.playerSpawnPoint; spawnGO.transform.localPosition = module.playerSpawnPoint;
@ -39,7 +40,7 @@ namespace NewHorizons.Builder.General
{ {
GameObject spawnGO = new GameObject("ShipSpawnPoint"); GameObject spawnGO = new GameObject("ShipSpawnPoint");
spawnGO.transform.parent = planetGO.transform; spawnGO.transform.parent = planetGO.transform;
spawnGO.layer = 8; spawnGO.layer = LayerUtilities.PlayerSafetyCollider;
spawnGO.transform.localPosition = module.shipSpawnPoint; spawnGO.transform.localPosition = module.shipSpawnPoint;
@ -70,7 +71,7 @@ namespace NewHorizons.Builder.General
Logger.LogVerbose("Overriding player spawn to be inside ship"); Logger.LogVerbose("Overriding player spawn to be inside ship");
GameObject playerSpawnGO = new GameObject("PlayerSpawnPoint"); GameObject playerSpawnGO = new GameObject("PlayerSpawnPoint");
playerSpawnGO.transform.parent = ship.transform; playerSpawnGO.transform.parent = ship.transform;
playerSpawnGO.layer = 8; playerSpawnGO.layer = LayerUtilities.PlayerSafetyCollider;
playerSpawnGO.transform.localPosition = new Vector3(0, 0, 0); playerSpawnGO.transform.localPosition = new Vector3(0, 0, 0);

View File

@ -7,6 +7,7 @@ using UnityEngine;
using NewHorizons.Utility; using NewHorizons.Utility;
using Logger = NewHorizons.Utility.Logger; using Logger = NewHorizons.Utility.Logger;
using NewHorizons.Components; using NewHorizons.Components;
using NewHorizons.Utility.OWUtilities;
namespace NewHorizons.Builder.Props namespace NewHorizons.Builder.Props
{ {
@ -103,7 +104,7 @@ namespace NewHorizons.Builder.Props
var conversationZone = new GameObject("ConversationZone"); var conversationZone = new GameObject("ConversationZone");
conversationZone.SetActive(false); conversationZone.SetActive(false);
conversationZone.layer = LayerMask.NameToLayer("Interactible"); conversationZone.layer = LayerUtilities.Interactible;
var sphere = conversationZone.AddComponent<SphereCollider>(); var sphere = conversationZone.AddComponent<SphereCollider>();
sphere.radius = info.radius; sphere.radius = info.radius;
@ -259,7 +260,7 @@ namespace NewHorizons.Builder.Props
var playerTrackingZone = new GameObject("PlayerTrackingZone"); var playerTrackingZone = new GameObject("PlayerTrackingZone");
playerTrackingZone.SetActive(false); playerTrackingZone.SetActive(false);
playerTrackingZone.layer = LayerMask.NameToLayer("BasicEffectVolume"); playerTrackingZone.layer = LayerUtilities.BasicEffectVolume;
playerTrackingZone.SetActive(false); playerTrackingZone.SetActive(false);
var sphereCollider = playerTrackingZone.AddComponent<SphereCollider>(); var sphereCollider = playerTrackingZone.AddComponent<SphereCollider>();

View File

@ -2,7 +2,7 @@ using HarmonyLib;
using NewHorizons.Components.Quantum; using NewHorizons.Components.Quantum;
using NewHorizons.External.Configs; using NewHorizons.External.Configs;
using NewHorizons.External.Modules; using NewHorizons.External.Modules;
using NewHorizons.Utility.UnityUtilities; using NewHorizons.Utility.Geometry;
using OWML.Common; using OWML.Common;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;

View File

@ -1,6 +1,7 @@
using NewHorizons.External.Modules; using NewHorizons.External.Modules;
using NewHorizons.Handlers; using NewHorizons.Handlers;
using NewHorizons.Utility; using NewHorizons.Utility;
using NewHorizons.Utility.OWUtilities;
using OWML.Common; using OWML.Common;
using System; using System;
using System.Linq; using System.Linq;
@ -86,7 +87,7 @@ namespace NewHorizons.Builder.Props
if (_shareStonePrefab == null) if (_shareStonePrefab == null)
{ {
GameObject stone = new GameObject("ShareStoneFallback"); GameObject stone = new GameObject("ShareStoneFallback");
stone.layer = LayerMask.NameToLayer("Interactible"); stone.layer = LayerUtilities.Interactible;
stone.SetActive(false); stone.SetActive(false);
SphereCollider sc = stone.AddComponent<SphereCollider>(); SphereCollider sc = stone.AddComponent<SphereCollider>();
sc.center = Vector3.zero; sc.center = Vector3.zero;

View File

@ -1,6 +1,7 @@
using NewHorizons.External.Modules; using NewHorizons.External.Modules;
using NewHorizons.Utility; using NewHorizons.Utility;
using NewHorizons.Utility.OWMLUtilities; using NewHorizons.Utility.OWMLUtilities;
using NewHorizons.Utility.OWUtilities;
using OWML.Common; using OWML.Common;
using OWML.Utils; using OWML.Utils;
using System.Collections.Generic; using System.Collections.Generic;
@ -130,7 +131,7 @@ namespace NewHorizons.Builder.Props
var pos = (Vector3)(info.position ?? Vector3.zero); var pos = (Vector3)(info.position ?? Vector3.zero);
if (info.isRelativeToParent) signalGO.transform.localPosition = pos; if (info.isRelativeToParent) signalGO.transform.localPosition = pos;
else signalGO.transform.position = planetGO.transform.TransformPoint(pos); else signalGO.transform.position = planetGO.transform.TransformPoint(pos);
signalGO.layer = LayerMask.NameToLayer("AdvancedEffectVolume"); signalGO.layer = LayerUtilities.AdvancedEffectVolume;
var source = signalGO.AddComponent<AudioSource>(); var source = signalGO.AddComponent<AudioSource>();
var owAudioSource = signalGO.AddComponent<OWAudioSource>(); var owAudioSource = signalGO.AddComponent<OWAudioSource>();

View File

@ -1,14 +1,13 @@
using NewHorizons.Utility.UnityUtilities; using NewHorizons.Utility.Geometry;
using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using UnityEngine; using UnityEngine;
using UnityEngine.Profiling;
using Logger = NewHorizons.Utility.Logger; using Logger = NewHorizons.Utility.Logger;
namespace NewHorizons.Builder.Props namespace NewHorizons.Builder.Props
{ {
public class NomaiTextArcArranger : MonoBehaviour { public class NomaiTextArcArranger : MonoBehaviour
{
private static int MAX_MOVE_DISTANCE = 2; private static int MAX_MOVE_DISTANCE = 2;
public List<SpiralManipulator> spirals = new List<SpiralManipulator>(); public List<SpiralManipulator> spirals = new List<SpiralManipulator>();
@ -77,18 +76,18 @@ namespace NewHorizons.Builder.Props
// push away from the edges // push away from the edges
var MAX_EDGE_PUSH_FORCE = 1; var MAX_EDGE_PUSH_FORCE = 1;
force += new Vector2(0, -1) * Mathf.Max(0, (s1.transform.localPosition.y + maxY)*(MAX_EDGE_PUSH_FORCE / maxY) - MAX_EDGE_PUSH_FORCE); force += new Vector2(0, -1) * Mathf.Max(0, (s1.transform.localPosition.y + maxY) * (MAX_EDGE_PUSH_FORCE / maxY) - MAX_EDGE_PUSH_FORCE);
force += new Vector2(0, 1) * Mathf.Max(0, (s1.transform.localPosition.y + minY)*(MAX_EDGE_PUSH_FORCE / minY) - MAX_EDGE_PUSH_FORCE); force += new Vector2(0, 1) * Mathf.Max(0, (s1.transform.localPosition.y + minY) * (MAX_EDGE_PUSH_FORCE / minY) - MAX_EDGE_PUSH_FORCE);
force += new Vector2(-1, 0) * Mathf.Max(0, (s1.transform.localPosition.x + maxX)*(MAX_EDGE_PUSH_FORCE / maxX) - MAX_EDGE_PUSH_FORCE); force += new Vector2(-1, 0) * Mathf.Max(0, (s1.transform.localPosition.x + maxX) * (MAX_EDGE_PUSH_FORCE / maxX) - MAX_EDGE_PUSH_FORCE);
force += new Vector2(1, 0) * Mathf.Max(0, (s1.transform.localPosition.x + minX)*(MAX_EDGE_PUSH_FORCE / minX) - MAX_EDGE_PUSH_FORCE); force += new Vector2(1, 0) * Mathf.Max(0, (s1.transform.localPosition.x + minX) * (MAX_EDGE_PUSH_FORCE / minX) - MAX_EDGE_PUSH_FORCE);
// push up just to make everything a little more pretty (this is not neccessary to get an arrangement that simply has no overlap/spirals exiting the bounds) // push up just to make everything a little more pretty (this is not neccessary to get an arrangement that simply has no overlap/spirals exiting the bounds)
force += new Vector2(0, 1) * 1; force += new Vector2(0, 1) * 1;
// renormalize the force magnitude (keeps force sizes reasonable, and improves stability in the case of small forces) // renormalize the force magnitude (keeps force sizes reasonable, and improves stability in the case of small forces)
var avg = 1; // the size of vector required to get a medium push var avg = 1; // the size of vector required to get a medium push
var scale = 0.75f; var scale = 0.75f;
force = force.normalized * scale * (1 / (1 + Mathf.Exp(avg-force.magnitude)) - 1 / (1 + Mathf.Exp(avg))); // apply a sigmoid-ish smoothing operation, so only giant forces actually move the spirals force = force.normalized * scale * (1 / (1 + Mathf.Exp(avg - force.magnitude)) - 1 / (1 + Mathf.Exp(avg))); // apply a sigmoid-ish smoothing operation, so only giant forces actually move the spirals
// if this is the root spiral, then rotate it instead of trying to move it // if this is the root spiral, then rotate it instead of trying to move it
if (s1.parent == null) if (s1.parent == null)
@ -96,7 +95,7 @@ namespace NewHorizons.Builder.Props
// this is the root spiral, so rotate instead of moving // this is the root spiral, so rotate instead of moving
var finalAngle = Mathf.Atan2(force.y, force.x); // root spiral is always at 0, 0 var finalAngle = Mathf.Atan2(force.y, force.x); // root spiral is always at 0, 0
var currentAngle = Mathf.Atan2(s1.center.y, s1.center.x); // root spiral is always at 0, 0 var currentAngle = Mathf.Atan2(s1.center.y, s1.center.x); // root spiral is always at 0, 0
s1.transform.localEulerAngles = new Vector3(0, 0, finalAngle-currentAngle); s1.transform.localEulerAngles = new Vector3(0, 0, finalAngle - currentAngle);
s1.UpdateChildren(); s1.UpdateChildren();
continue; continue;
@ -118,7 +117,8 @@ namespace NewHorizons.Builder.Props
point = spiral.parent.transform.TransformPoint(point); point = spiral.parent.transform.TransformPoint(point);
var dist = Vector2.Distance(point, idealPoint); var dist = Vector2.Distance(point, idealPoint);
if (dist < bestPointDistance) { if (dist < bestPointDistance)
{
bestPointDistance = dist; bestPointDistance = dist;
bestPointIndex = j; bestPointIndex = j;
} }
@ -165,12 +165,12 @@ namespace NewHorizons.Builder.Props
Queue<SpiralManipulator> frontierQueue = new Queue<SpiralManipulator>(); Queue<SpiralManipulator> frontierQueue = new Queue<SpiralManipulator>();
frontierQueue.Enqueue(root); frontierQueue.Enqueue(root);
while(frontierQueue.Count > 0) while (frontierQueue.Count > 0)
{ {
var spiral = frontierQueue.Dequeue(); var spiral = frontierQueue.Dequeue();
reverseToposortedSpirals.Add(spiral); reverseToposortedSpirals.Add(spiral);
foreach(var child in spiral.children) frontierQueue.Enqueue(child); foreach (var child in spiral.children) frontierQueue.Enqueue(child);
} }
reverseToposortedSpirals.Reverse(); reverseToposortedSpirals.Reverse();
@ -208,7 +208,7 @@ namespace NewHorizons.Builder.Props
foreach (var s2 in spirals) foreach (var s2 in spirals)
{ {
jndex++; jndex++;
if (SpiralsOverlap(s1, s2)) return new Vector2Int(index, jndex);; if (SpiralsOverlap(s1, s2)) return new Vector2Int(index, jndex); ;
} }
} }
@ -229,11 +229,11 @@ namespace NewHorizons.Builder.Props
if (s1.parent == s2) s1Points.RemoveAt(0); // don't consider the base points so that we can check if children overlap their parents if (s1.parent == s2) s1Points.RemoveAt(0); // don't consider the base points so that we can check if children overlap their parents
if (s2.parent == s1) s2Points.RemoveAt(0); // (note: the base point of a child is always exactly overlapping with one of the parent's points) if (s2.parent == s1) s2Points.RemoveAt(0); // (note: the base point of a child is always exactly overlapping with one of the parent's points)
foreach(var p1 in s1Points) foreach (var p1 in s1Points)
{ {
foreach(var p2 in s2Points) foreach (var p2 in s2Points)
{ {
if (Vector3.SqrMagnitude(p1-p2) <= thresholdForOverlap) return true; // s1 and s2 overlap if (Vector3.SqrMagnitude(p1 - p2) <= thresholdForOverlap) return true; // s1 and s2 overlap
} }
} }
@ -251,7 +251,8 @@ namespace NewHorizons.Builder.Props
.Select(p => spiral.transform.parent.InverseTransformPoint(p)) .Select(p => spiral.transform.parent.InverseTransformPoint(p))
.ToList(); .ToList();
foreach(var point in points) { foreach (var point in points)
{
if (point.x < minX || point.x > maxX || if (point.x < minX || point.x > maxX ||
point.y < minY || point.y > maxY) point.y < minY || point.y > maxY)
{ {
@ -264,19 +265,19 @@ namespace NewHorizons.Builder.Props
private bool AttemptToPushSpiralInBounds(SpiralManipulator s1, int start) private bool AttemptToPushSpiralInBounds(SpiralManipulator s1, int start)
{ {
var range = Mathf.Max(start-SpiralManipulator.MIN_PARENT_POINT, SpiralManipulator.MAX_PARENT_POINT-start); var range = Mathf.Max(start - SpiralManipulator.MIN_PARENT_POINT, SpiralManipulator.MAX_PARENT_POINT - start);
for (var i = 1; i <= range; i++) for (var i = 1; i <= range; i++)
{ {
if (start-i >= SpiralManipulator.MIN_PARENT_POINT) if (start - i >= SpiralManipulator.MIN_PARENT_POINT)
{ {
s1.PlaceOnParentPoint(start-i); s1.PlaceOnParentPoint(start - i);
if (!OutsideBounds(s1)) return true; if (!OutsideBounds(s1)) return true;
} }
if (start+i <= SpiralManipulator.MAX_PARENT_POINT) if (start + i <= SpiralManipulator.MAX_PARENT_POINT)
{ {
s1.PlaceOnParentPoint(start+i); s1.PlaceOnParentPoint(start + i);
if (!OutsideBounds(s1)) return true; if (!OutsideBounds(s1)) return true;
} }
} }
@ -296,7 +297,8 @@ namespace NewHorizons.Builder.Props
#endregion bounds handling #endregion bounds handling
} }
public class SpiralManipulator : MonoBehaviour { public class SpiralManipulator : MonoBehaviour
{
public SpiralManipulator parent; public SpiralManipulator parent;
public List<SpiralManipulator> children = new List<SpiralManipulator>(); public List<SpiralManipulator> children = new List<SpiralManipulator>();
@ -336,7 +338,8 @@ namespace NewHorizons.Builder.Props
#endregion properties #endregion properties
public SpiralManipulator AddChild(NomaiTextArcBuilder.SpiralProfile profile) { public SpiralManipulator AddChild(NomaiTextArcBuilder.SpiralProfile profile)
{
var child = NomaiTextArcArranger.CreateSpiral(profile, this.transform.parent.gameObject); var child = NomaiTextArcArranger.CreateSpiral(profile, this.transform.parent.gameObject);
var index = Random.Range(MIN_PARENT_POINT, MAX_PARENT_POINT); var index = Random.Range(MIN_PARENT_POINT, MAX_PARENT_POINT);
@ -356,17 +359,17 @@ namespace NewHorizons.Builder.Props
public void UpdateChildren() public void UpdateChildren()
{ {
foreach(var child in this.children) foreach (var child in this.children)
{ {
child.PlaceOnParentPoint(child._parentPointIndex); child.PlaceOnParentPoint(child._parentPointIndex);
} }
} }
public int PlaceOnParentPoint(int parentPointIndex, bool updateChildren=true) public int PlaceOnParentPoint(int parentPointIndex, bool updateChildren = true)
{ {
// validate // validate
var _points = parent.GetComponent<NomaiTextLine>().GetPoints(); var _points = parent.GetComponent<NomaiTextLine>().GetPoints();
parentPointIndex = Mathf.Max(0, Mathf.Min(parentPointIndex, _points.Length-1)); parentPointIndex = Mathf.Max(0, Mathf.Min(parentPointIndex, _points.Length - 1));
// track occupied points // track occupied points
if (this._parentPointIndex != -1) parent.pointsOccupiedByChildren.Remove(this._parentPointIndex); if (this._parentPointIndex != -1) parent.pointsOccupiedByChildren.Remove(this._parentPointIndex);
@ -374,7 +377,7 @@ namespace NewHorizons.Builder.Props
parent.pointsOccupiedByChildren.Add(parentPointIndex); parent.pointsOccupiedByChildren.Add(parentPointIndex);
// calculate the normal // calculate the normal
var normal = _points[Mathf.Min(parentPointIndex+1, _points.Length-1)] - _points[Mathf.Max(parentPointIndex-1, 0)]; var normal = _points[Mathf.Min(parentPointIndex + 1, _points.Length - 1)] - _points[Mathf.Max(parentPointIndex - 1, 0)];
if (parent.transform.localScale.x < 0) normal = new Vector3(normal.x, -normal.y, -normal.z); if (parent.transform.localScale.x < 0) normal = new Vector3(normal.x, -normal.y, -normal.z);
float rot = Mathf.Atan2(normal.y, normal.x) * Mathf.Rad2Deg; float rot = Mathf.Atan2(normal.y, normal.x) * Mathf.Rad2Deg;

View File

@ -1,20 +1,18 @@
using NewHorizons.External.Modules; using NewHorizons.External.Modules;
using NewHorizons.Handlers; using NewHorizons.Handlers;
using NewHorizons.Utility; using NewHorizons.Utility;
using OWML.Common; using NewHorizons.Utility.Geometry;
using NewHorizons.Utility.OWMLUtilities;
using Newtonsoft.Json;
using OWML.Utils;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Xml; using System.Xml;
using UnityEngine; using UnityEngine;
using Enum = System.Enum;
using Logger = NewHorizons.Utility.Logger; using Logger = NewHorizons.Utility.Logger;
using Random = UnityEngine.Random; using Random = UnityEngine.Random;
using OWML.Utils;
using Newtonsoft.Json;
using System;
using NewHorizons.Utility.OWMLUtilities;
using NewHorizons.Utility.UnityUtilities;
namespace NewHorizons.Builder.Props namespace NewHorizons.Builder.Props
{ {

View File

@ -1,5 +1,6 @@
using NewHorizons.Components.Achievement; using NewHorizons.Components.Achievement;
using NewHorizons.External.Modules; using NewHorizons.External.Modules;
using NewHorizons.Utility.OWUtilities;
using OWML.Common; using OWML.Common;
using UnityEngine; using UnityEngine;
using Logger = NewHorizons.Utility.Logger; using Logger = NewHorizons.Utility.Logger;
@ -122,7 +123,7 @@ namespace NewHorizons.Builder.ShipLog
private static void MakeObservable(GameObject go, Sector sector, VolumesModule.RevealVolumeInfo info, IModBehaviour mod) private static void MakeObservable(GameObject go, Sector sector, VolumesModule.RevealVolumeInfo info, IModBehaviour mod)
{ {
go.layer = LayerMask.NameToLayer("Interactible"); go.layer = LayerUtilities.Interactible;
var sphere = go.AddComponent<SphereCollider>(); var sphere = go.AddComponent<SphereCollider>();
sphere.radius = info.radius; sphere.radius = info.radius;

View File

@ -1,15 +1,15 @@
using NewHorizons.External.Configs; using NewHorizons.External.Configs;
using NewHorizons.Utility; using NewHorizons.Utility;
using NewHorizons.Utility.OWMLUtilities; using NewHorizons.Utility.OWMLUtilities;
using NewHorizons.Utility.OWUtilities;
using OWML.Common; using OWML.Common;
using System;
using UnityEngine; using UnityEngine;
using Logger = NewHorizons.Utility.Logger; using Logger = NewHorizons.Utility.Logger;
namespace NewHorizons.Builder.StarSystem namespace NewHorizons.Builder.StarSystem
{ {
public static class SkyboxBuilder public static class SkyboxBuilder
{ {
private static readonly int _skyboxLayer = LayerMask.NameToLayer("Skybox");
private static readonly Shader _unlitShader = Shader.Find("Unlit/Texture"); private static readonly Shader _unlitShader = Shader.Find("Unlit/Texture");
public static void Make(StarSystemConfig.SkyboxModule module, IModBehaviour mod) public static void Make(StarSystemConfig.SkyboxModule module, IModBehaviour mod)
@ -33,7 +33,7 @@ namespace NewHorizons.Builder.StarSystem
var skySphere = new GameObject("Sky Sphere"); var skySphere = new GameObject("Sky Sphere");
skySphere.transform.SetParent(skybox.transform, false); skySphere.transform.SetParent(skybox.transform, false);
skySphere.layer = _skyboxLayer; skySphere.layer = LayerUtilities.Skybox;
skySphere.transform.localScale = Vector3.one * 5f; skySphere.transform.localScale = Vector3.one * 5f;
BuildSkySphereFace(skySphere, "Right", Quaternion.Euler(0f, 90f, 0f), mesh, rightTex); BuildSkySphereFace(skySphere, "Right", Quaternion.Euler(0f, 90f, 0f), mesh, rightTex);
@ -56,7 +56,7 @@ namespace NewHorizons.Builder.StarSystem
var go = new GameObject(name) var go = new GameObject(name)
{ {
layer = _skyboxLayer layer = LayerUtilities.Skybox
}; };
var mf = go.AddComponent<MeshFilter>(); var mf = go.AddComponent<MeshFilter>();

View File

@ -1,5 +1,6 @@
using NewHorizons.External.Modules; using NewHorizons.External.Modules;
using NewHorizons.Utility; using NewHorizons.Utility;
using NewHorizons.Utility.OWUtilities;
using OWML.Common; using OWML.Common;
using OWML.Utils; using OWML.Utils;
using System; using System;
@ -42,7 +43,7 @@ namespace NewHorizons.Builder.Volumes
var pos = (Vector3)(info.position ?? Vector3.zero); var pos = (Vector3)(info.position ?? Vector3.zero);
if (info.isRelativeToParent) go.transform.localPosition = pos; if (info.isRelativeToParent) go.transform.localPosition = pos;
else go.transform.position = planetGO.transform.TransformPoint(pos); else go.transform.position = planetGO.transform.TransformPoint(pos);
go.layer = LayerMask.NameToLayer("AdvancedEffectVolume"); go.layer = LayerUtilities.AdvancedEffectVolume;
var audioSource = go.AddComponent<AudioSource>(); var audioSource = go.AddComponent<AudioSource>();

View File

@ -1,4 +1,5 @@
using NewHorizons.External.Modules; using NewHorizons.External.Modules;
using NewHorizons.Utility.OWUtilities;
using OWML.Common; using OWML.Common;
using OWML.Utils; using OWML.Utils;
using System; using System;
@ -39,7 +40,7 @@ namespace NewHorizons.Builder.Volumes
var pos = (Vector3)(info.position ?? Vector3.zero); var pos = (Vector3)(info.position ?? Vector3.zero);
if (info.isRelativeToParent) go.transform.localPosition = pos; if (info.isRelativeToParent) go.transform.localPosition = pos;
else go.transform.position = planetGO.transform.TransformPoint(pos); else go.transform.position = planetGO.transform.TransformPoint(pos);
go.layer = LayerMask.NameToLayer("BasicEffectVolume"); go.layer = LayerUtilities.BasicEffectVolume;
var shape = go.AddComponent<SphereShape>(); var shape = go.AddComponent<SphereShape>();
shape.radius = info.radius; shape.radius = info.radius;
@ -74,7 +75,7 @@ namespace NewHorizons.Builder.Volumes
var detectorGO = new GameObject("ConstantFluidDetector"); var detectorGO = new GameObject("ConstantFluidDetector");
detectorGO.transform.parent = go.transform; detectorGO.transform.parent = go.transform;
detectorGO.transform.localPosition = Vector3.zero; detectorGO.transform.localPosition = Vector3.zero;
detectorGO.layer = LayerMask.NameToLayer("BasicDetector"); detectorGO.layer = LayerUtilities.BasicDetector;
var detector = detectorGO.AddComponent<ConstantFluidDetector>(); var detector = detectorGO.AddComponent<ConstantFluidDetector>();
detector._onlyDetectableFluid = water; detector._onlyDetectableFluid = water;
detector._buoyancy.boundingRadius = 1; detector._buoyancy.boundingRadius = 1;

View File

@ -1,5 +1,6 @@
using NewHorizons.External.Modules; using NewHorizons.External.Modules;
using NewHorizons.Utility; using NewHorizons.Utility;
using NewHorizons.Utility.OWUtilities;
using OWML.Common; using OWML.Common;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@ -42,7 +43,7 @@ namespace NewHorizons.Builder.Volumes
var pos = (Vector3)(info.position ?? Vector3.zero); var pos = (Vector3)(info.position ?? Vector3.zero);
if (info.isRelativeToParent) go.transform.localPosition = pos; if (info.isRelativeToParent) go.transform.localPosition = pos;
else go.transform.position = planetGO.transform.TransformPoint(pos); else go.transform.position = planetGO.transform.TransformPoint(pos);
go.layer = LayerMask.NameToLayer("BasicEffectVolume"); go.layer = LayerUtilities.BasicEffectVolume;
var shape = go.AddComponent<SphereShape>(); var shape = go.AddComponent<SphereShape>();
shape.radius = info.radius; shape.radius = info.radius;

View File

@ -1,5 +1,6 @@
using NewHorizons.Components; using NewHorizons.Components;
using NewHorizons.External.Modules; using NewHorizons.External.Modules;
using NewHorizons.Utility.OWUtilities;
using UnityEngine; using UnityEngine;
using Logger = NewHorizons.Utility.Logger; using Logger = NewHorizons.Utility.Logger;
@ -35,7 +36,7 @@ namespace NewHorizons.Builder.Volumes
var pos = (Vector3)(info.position ?? Vector3.zero); var pos = (Vector3)(info.position ?? Vector3.zero);
if (info.isRelativeToParent) go.transform.localPosition = pos; if (info.isRelativeToParent) go.transform.localPosition = pos;
else go.transform.position = planetGO.transform.TransformPoint(pos); else go.transform.position = planetGO.transform.TransformPoint(pos);
go.layer = LayerMask.NameToLayer("BasicEffectVolume"); go.layer = LayerUtilities.BasicEffectVolume;
var collider = go.AddComponent<SphereCollider>(); var collider = go.AddComponent<SphereCollider>();
collider.isTrigger = true; collider.isTrigger = true;

View File

@ -1,5 +1,6 @@
using NewHorizons.Components; using NewHorizons.Components;
using NewHorizons.External.Modules; using NewHorizons.External.Modules;
using NewHorizons.Utility.OWUtilities;
using UnityEngine; using UnityEngine;
using Logger = NewHorizons.Utility.Logger; using Logger = NewHorizons.Utility.Logger;
@ -35,7 +36,7 @@ namespace NewHorizons.Builder.Volumes
var pos = (Vector3)(info.position ?? Vector3.zero); var pos = (Vector3)(info.position ?? Vector3.zero);
if (info.isRelativeToParent) go.transform.localPosition = pos; if (info.isRelativeToParent) go.transform.localPosition = pos;
else go.transform.position = planetGO.transform.TransformPoint(pos); else go.transform.position = planetGO.transform.TransformPoint(pos);
go.layer = LayerMask.NameToLayer("BasicEffectVolume"); go.layer = LayerUtilities.BasicEffectVolume;
var shape = go.AddComponent<SphereShape>(); var shape = go.AddComponent<SphereShape>();
shape.radius = info.radius; shape.radius = info.radius;

View File

@ -1,4 +1,5 @@
using NewHorizons.OtherMods.AchievementsPlus; using NewHorizons.OtherMods.AchievementsPlus;
using NewHorizons.Utility.OWUtilities;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
@ -20,7 +21,7 @@ namespace NewHorizons.Components.Achievement
private void Reset() private void Reset()
{ {
gameObject.layer = LayerMask.NameToLayer("Interactible"); gameObject.layer = LayerUtilities.Interactible;
} }
private void Awake() private void Awake()

View File

@ -1,4 +1,5 @@
using System.Collections; using NewHorizons.Utility.OWUtilities;
using System.Collections;
using UnityEngine; using UnityEngine;
namespace NewHorizons.Components; namespace NewHorizons.Components;
@ -38,7 +39,7 @@ public class AddPhysics : MonoBehaviour
var owRigidbody = bodyGo.AddComponent<OWRigidbody>(); var owRigidbody = bodyGo.AddComponent<OWRigidbody>();
owRigidbody._simulateInSector = Sector; owRigidbody._simulateInSector = Sector;
bodyGo.layer = LayerMask.NameToLayer("PhysicalDetector"); bodyGo.layer = LayerUtilities.PhysicalDetector;
bodyGo.tag = "DynamicPropDetector"; bodyGo.tag = "DynamicPropDetector";
// this collider is not included in groups. oh well // this collider is not included in groups. oh well
bodyGo.AddComponent<SphereCollider>().radius = Radius; bodyGo.AddComponent<SphereCollider>().radius = Radius;

View File

@ -16,6 +16,8 @@ using NewHorizons.OtherMods.VoiceActing;
using NewHorizons.Utility; using NewHorizons.Utility;
using NewHorizons.Utility.DebugMenu; using NewHorizons.Utility.DebugMenu;
using NewHorizons.Utility.DebugUtilities; using NewHorizons.Utility.DebugUtilities;
using NewHorizons.Utility.OWMLUtilities;
using NewHorizons.Utility.OWUtilities;
using OWML.Common; using OWML.Common;
using OWML.ModHelper; using OWML.ModHelper;
using OWML.Utils; using OWML.Utils;

View File

@ -1,7 +1,5 @@
using NewHorizons.Builder.Props;
using NewHorizons.External.Modules;
using NewHorizons.Handlers; using NewHorizons.Handlers;
using NewHorizons.Utility.UnityUtilities; using NewHorizons.Utility.Geometry;
using UnityEngine; using UnityEngine;
using UnityEngine.InputSystem; using UnityEngine.InputSystem;
@ -80,13 +78,13 @@ namespace NewHorizons.Utility.DebugUtilities
var normText = Vector3ToString(data.norm); var normText = Vector3ToString(data.norm);
var rotText = Vector3ToString(data.rot.eulerAngles); var rotText = Vector3ToString(data.rot.eulerAngles);
if(_surfaceSphere != null) GameObject.Destroy(_surfaceSphere); if (_surfaceSphere != null) GameObject.Destroy(_surfaceSphere);
if(_normalSphere1 != null) GameObject.Destroy(_normalSphere1); if (_normalSphere1 != null) GameObject.Destroy(_normalSphere1);
if(_normalSphere2 != null) GameObject.Destroy(_normalSphere2); if (_normalSphere2 != null) GameObject.Destroy(_normalSphere2);
if(_planeUpRightSphere != null) GameObject.Destroy(_planeUpRightSphere ); if (_planeUpRightSphere != null) GameObject.Destroy(_planeUpRightSphere);
if(_planeUpLeftSphere != null) GameObject.Destroy(_planeUpLeftSphere ); if (_planeUpLeftSphere != null) GameObject.Destroy(_planeUpLeftSphere);
if(_planeDownLeftSphere != null) GameObject.Destroy(_planeDownLeftSphere ); if (_planeDownLeftSphere != null) GameObject.Destroy(_planeDownLeftSphere);
if(_planeDownRightSphere != null) GameObject.Destroy(_planeDownRightSphere); if (_planeDownRightSphere != null) GameObject.Destroy(_planeDownRightSphere);
_surfaceSphere = AddDebugShape.AddSphere(data.hitBodyGameObject, 0.1f, Color.green); _surfaceSphere = AddDebugShape.AddSphere(data.hitBodyGameObject, 0.1f, Color.green);
_normalSphere1 = AddDebugShape.AddSphere(data.hitBodyGameObject, 0.01f, Color.red); _normalSphere1 = AddDebugShape.AddSphere(data.hitBodyGameObject, 0.01f, Color.red);
@ -99,18 +97,18 @@ namespace NewHorizons.Utility.DebugUtilities
// plane corners // plane corners
var planeSize = 0.5f; var planeSize = 0.5f;
var planePointSize = 0.05f; var planePointSize = 0.05f;
_planeUpRightSphere = AddDebugShape.AddSphere(data.hitBodyGameObject, planePointSize, Color.green); _planeUpRightSphere = AddDebugShape.AddSphere(data.hitBodyGameObject, planePointSize, Color.green);
_planeUpLeftSphere = AddDebugShape.AddSphere(data.hitBodyGameObject, planePointSize, Color.cyan) ; _planeUpLeftSphere = AddDebugShape.AddSphere(data.hitBodyGameObject, planePointSize, Color.cyan);
_planeDownLeftSphere = AddDebugShape.AddSphere(data.hitBodyGameObject, planePointSize, Color.blue) ; _planeDownLeftSphere = AddDebugShape.AddSphere(data.hitBodyGameObject, planePointSize, Color.blue);
_planeDownRightSphere = AddDebugShape.AddSphere(data.hitBodyGameObject, planePointSize, Color.cyan) ; _planeDownRightSphere = AddDebugShape.AddSphere(data.hitBodyGameObject, planePointSize, Color.cyan);
_planeUpRightSphere .transform.localPosition = data.plane.origin + data.plane.u*1*planeSize + data.plane.v*1*planeSize; _planeUpRightSphere.transform.localPosition = data.plane.origin + data.plane.u * 1 * planeSize + data.plane.v * 1 * planeSize;
_planeUpLeftSphere .transform.localPosition = data.plane.origin + data.plane.u*-1*planeSize + data.plane.v*1*planeSize; _planeUpLeftSphere.transform.localPosition = data.plane.origin + data.plane.u * -1 * planeSize + data.plane.v * 1 * planeSize;
_planeDownLeftSphere .transform.localPosition = data.plane.origin + data.plane.u*-1*planeSize + data.plane.v*-1*planeSize; _planeDownLeftSphere.transform.localPosition = data.plane.origin + data.plane.u * -1 * planeSize + data.plane.v * -1 * planeSize;
_planeDownRightSphere.transform.localPosition = data.plane.origin + data.plane.u*1*planeSize + data.plane.v*-1*planeSize; _planeDownRightSphere.transform.localPosition = data.plane.origin + data.plane.u * 1 * planeSize + data.plane.v * -1 * planeSize;
Logger.Log($"Raycast hit\n\n\"position\": {posText},\n\"rotation\": {rotText},\n\"normal\": {normText}\n\non collider [{data.colliderPath}] " + Logger.Log($"Raycast hit\n\n\"position\": {posText},\n\"rotation\": {rotText},\n\"normal\": {normText}\n\non collider [{data.colliderPath}] " +
(data.bodyPath != null? $"at rigidbody [{data.bodyPath}]" : "not attached to a rigidbody")); (data.bodyPath != null ? $"at rigidbody [{data.bodyPath}]" : "not attached to a rigidbody"));
} }
internal DebugRaycastData Raycast() internal DebugRaycastData Raycast()
{ {
@ -163,10 +161,10 @@ namespace NewHorizons.Utility.DebugUtilities
// stackoverflow.com/a/9605695 // stackoverflow.com/a/9605695
// I don't know exactly how this works, but I'm projecting a point that is located above the plane's origin, relative to the planet, onto the plane. this gets us our v vector // I don't know exactly how this works, but I'm projecting a point that is located above the plane's origin, relative to the planet, onto the plane. this gets us our v vector
var q = (2*U)-R; var q = (2 * U) - R;
var dist = Vector3.Dot(N, q); var dist = Vector3.Dot(N, q);
var v_raw = 2*U - dist*N; var v_raw = 2 * U - dist * N;
var v = (R-v_raw).normalized; var v = (R - v_raw).normalized;
var u = Vector3.Cross(N, v); var u = Vector3.Cross(N, v);

View File

@ -1,5 +1,5 @@
using UnityEngine; using UnityEngine;
namespace NewHorizons.Utility.UnityUtilities namespace NewHorizons.Utility.Geometry
{ {
public static class AddDebugShape public static class AddDebugShape
{ {