Lower zone body views from daemon render queries
This commit is contained in:
parent
857e404f5a
commit
2a8414aa10
4 changed files with 146 additions and 12 deletions
|
|
@ -985,6 +985,58 @@ public class DaemonRuntimeDocumentTests
|
|||
Assert.AreEqual(3.5, poses[1].GravityWaveSpeed, 0.0001);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void DaemonRenderQueriesPublishBodyViewsFromZoneSnapshot()
|
||||
{
|
||||
var zone = new AetheriaRuntimeZoneSnapshotCommit
|
||||
{
|
||||
Orbits = new[]
|
||||
{
|
||||
new AetheriaRuntimeOrbitSnapshotCommit
|
||||
{
|
||||
OrbitKey = "orbit:planet",
|
||||
FixedPositionX = 12,
|
||||
FixedPositionY = -8
|
||||
},
|
||||
new AetheriaRuntimeOrbitSnapshotCommit
|
||||
{
|
||||
OrbitKey = "orbit:belt",
|
||||
Distance = 30
|
||||
}
|
||||
},
|
||||
Bodies = new[]
|
||||
{
|
||||
new AetheriaRuntimeBodySnapshotCommit
|
||||
{
|
||||
BodyKey = "body:planet",
|
||||
OrbitKey = "orbit:planet",
|
||||
Kind = "planet",
|
||||
GravityInfluenceRadius = 40,
|
||||
GravityWellDepth = 7
|
||||
},
|
||||
new AetheriaRuntimeBodySnapshotCommit
|
||||
{
|
||||
BodyKey = "body:belt",
|
||||
OrbitKey = "orbit:belt",
|
||||
Kind = "asteroid_belt"
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var views = new List<AetheriaRuntimeDaemonBodyView>();
|
||||
var count = AetheriaRuntimeDaemonRenderQueries.QueryBodyViews(zone, views);
|
||||
|
||||
Assert.AreEqual(2, count);
|
||||
Assert.AreEqual("body:planet", views[0].Body.BodyKey);
|
||||
Assert.IsFalse(views[0].IsAsteroidBelt);
|
||||
Assert.AreEqual(12, views[0].Pose.CenterX, 0.0001);
|
||||
Assert.AreEqual(-8, views[0].Pose.CenterZ, 0.0001);
|
||||
Assert.AreEqual(40, views[0].Body.GravityInfluenceRadius, 0.0001);
|
||||
Assert.AreEqual(7, views[0].Body.GravityWellDepth, 0.0001);
|
||||
Assert.AreEqual("body:belt", views[1].Body.BodyKey);
|
||||
Assert.IsTrue(views[1].IsAsteroidBelt);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void DaemonRenderQueriesPublishAsteroidBeltPosesFromZoneSnapshot()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -85,6 +85,7 @@ public class ZoneRenderer : MonoBehaviour
|
|||
private bool _showAsteroidUI;
|
||||
private AetheriaRuntimeRunCheckpointCommit _daemonRunSnapshot;
|
||||
private AetheriaRuntimeZoneSnapshotCommit _daemonZoneSnapshot;
|
||||
private readonly List<AetheriaRuntimeDaemonBodyView> _daemonBodyViews = new List<AetheriaRuntimeDaemonBodyView>();
|
||||
private readonly List<AetheriaRuntimeDaemonBodyPose> _daemonBodyPoses = new List<AetheriaRuntimeDaemonBodyPose>();
|
||||
private readonly Dictionary<string, AetheriaRuntimeDaemonBodyPose> _daemonBodyPosesByBodyKey =
|
||||
new Dictionary<string, AetheriaRuntimeDaemonBodyPose>(StringComparer.Ordinal);
|
||||
|
|
@ -220,17 +221,17 @@ public class ZoneRenderer : MonoBehaviour
|
|||
{
|
||||
ClearZone();
|
||||
ApplyDaemonFrame(daemonZone, daemonRun);
|
||||
RefreshDaemonBodyViews();
|
||||
RefreshDaemonBodyPoses();
|
||||
RefreshDaemonAsteroidBeltPoses();
|
||||
var beltPosesByBodyKey = _daemonAsteroidBeltPoses
|
||||
.Where(pose => !string.IsNullOrWhiteSpace(pose.BodyKey))
|
||||
.ToDictionary(pose => pose.BodyKey, StringComparer.Ordinal);
|
||||
foreach (var body in daemonZone?.Bodies ?? Array.Empty<AetheriaRuntimeBodySnapshotCommit>())
|
||||
foreach (var bodyView in _daemonBodyViews)
|
||||
{
|
||||
if (body == null)
|
||||
continue;
|
||||
var body = bodyView.Body;
|
||||
|
||||
if (string.Equals(body.Kind ?? "", "asteroid_belt", StringComparison.OrdinalIgnoreCase))
|
||||
if (bodyView.IsAsteroidBelt)
|
||||
{
|
||||
if (beltPosesByBodyKey.TryGetValue(body.BodyKey ?? "", out var beltPose))
|
||||
LoadAsteroidBelt(beltPose);
|
||||
|
|
@ -467,12 +468,8 @@ public class ZoneRenderer : MonoBehaviour
|
|||
}
|
||||
|
||||
var bodyRadius = Settings.PlanetSettings.BodyRadius.Evaluate(mass) * (float)body.BodyRadiusMultiplier;
|
||||
var gravityWellRadius = body.GravityInfluenceRadius > 0
|
||||
? (float)body.GravityInfluenceRadius
|
||||
: Settings.PlanetSettings.GravityRadius.Evaluate(mass) * (float)body.GravityRadiusMultiplier;
|
||||
var gravityWellDepth = body.GravityWellDepth != 0
|
||||
? (float)body.GravityWellDepth
|
||||
: Settings.PlanetSettings.GravityDepth.Evaluate(mass) * (float)body.GravityDepthMultiplier;
|
||||
var gravityWellRadius = Mathf.Max(0f, (float)body.GravityInfluenceRadius);
|
||||
var gravityWellDepth = (float)body.GravityWellDepth;
|
||||
planet.Body.transform.localScale = bodyRadius * Vector3.one;
|
||||
planet.GravityWell.transform.localScale = gravityWellRadius * Vector3.one;
|
||||
// var depth = planetInstance.GravityWellDepth;
|
||||
|
|
@ -675,6 +672,11 @@ public class ZoneRenderer : MonoBehaviour
|
|||
// MinimapTintQuad.transform.position = gravPos - Vector3.up*10;
|
||||
}
|
||||
|
||||
private void RefreshDaemonBodyViews()
|
||||
{
|
||||
AetheriaRuntimeDaemonRenderQueries.QueryBodyViews(_daemonZoneSnapshot, _daemonBodyViews);
|
||||
}
|
||||
|
||||
private void RefreshDaemonBodyPoses()
|
||||
{
|
||||
AetheriaRuntimeDaemonRenderQueries.QueryBodyPoses(_daemonZoneSnapshot, _daemonBodyPoses);
|
||||
|
|
|
|||
Loading…
Reference in a new issue