private void RecalculateOnOffPositions(ObscurePillar unused) { if (ObscurePillar.activePillar == null) { onAngle = null; offAngle = null; return; } Vector3[] bounds = new Vector3[] { thisRenderer.GetRendererBounds().min, thisRenderer.GetRendererBounds().max }; Vector3[] corners = new Vector3[] { new Vector3(bounds[0].x, bounds[0].y, bounds[0].z), new Vector3(bounds[0].x, bounds[0].y, bounds[1].z), new Vector3(bounds[0].x, bounds[1].y, bounds[0].z), new Vector3(bounds[0].x, bounds[1].y, bounds[1].z), new Vector3(bounds[1].x, bounds[0].y, bounds[0].z), new Vector3(bounds[1].x, bounds[0].y, bounds[1].z), new Vector3(bounds[1].x, bounds[1].y, bounds[0].z), new Vector3(bounds[1].x, bounds[1].y, bounds[1].z) }; Vector3 centerOfObject = thisRenderer.GetRendererBounds().center; Angle baseAngle = PolarCoordinate.CartesianToPolar(centerOfObject - ObscurePillar.activePillar.transform.position).angle; onAngle = Angle.Radians(baseAngle.radians + .001f); offAngle = Angle.Radians(baseAngle.radians); foreach (var corner in corners) { PolarCoordinate cornerPolar = PolarCoordinate.CartesianToPolar(corner - ObscurePillar.activePillar.transform.position); if (!Angle.IsAngleBetween(cornerPolar.angle, offAngle, onAngle)) { Angle replaceOn = Angle.AngleBetween(cornerPolar.angle, offAngle); Angle replaceOff = Angle.AngleBetween(cornerPolar.angle, onAngle); if (replaceOn.radians > replaceOff.radians) { onAngle = cornerPolar.angle; } else { offAngle = cornerPolar.angle; } } } onAngle.Reverse(); offAngle.Reverse(); }
private void RecalculateOnOffPositions() { if (overrideOnOffAngles) { return; } if (renderers.Length == 0) { Debug.LogError("No renderers found for: " + gameObject.name, gameObject); enabled = false; return; } if (DimensionPillar.activePillar == null) { onAngle = null; offAngle = null; return; } List <Bounds> allRendererBounds = new List <Bounds>(); // new Vector3[] { renderers[0].GetRendererBounds().min, renderers[0].GetRendererBounds().max }; foreach (var r in renderers) { allRendererBounds.Add(r.GetRendererBounds()); } Vector3 min = new Vector3(allRendererBounds.Min(b => b.min.x), 0, allRendererBounds.Min(b => b.min.z)); Vector3 max = new Vector3(allRendererBounds.Max(b => b.max.x), 0, allRendererBounds.Max(b => b.max.z)); Vector3[] corners = new Vector3[] { new Vector3(min.x, min.y, min.z), new Vector3(min.x, min.y, max.z), new Vector3(max.x, min.y, min.z), new Vector3(max.x, min.y, max.z), }; Vector3 centerOfObject = (min + max) / 2f; centralAngle = DimensionPillar.activePillar.PillarAngleOfPoint(centerOfObject); onAngle = Angle.Radians(centralAngle.radians - .001f); offAngle = Angle.Radians(centralAngle.radians); foreach (var corner in corners) { Angle cornerAngle = DimensionPillar.activePillar.PillarAngleOfPoint(corner); if (!Angle.IsAngleBetween(cornerAngle, onAngle, offAngle)) { Angle replaceOn = Angle.AngleBetween(cornerAngle, offAngle); Angle replaceOff = Angle.AngleBetween(cornerAngle, onAngle); if (replaceOn.radians > replaceOff.radians) { onAngle = cornerAngle; } else { offAngle = cornerAngle; } } } onAngle.Reverse(); offAngle.Reverse(); }