From 7d176f4dc37129ee5bab2ac8c3dbda57bc84345e Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Sun, 14 Jun 2026 19:43:48 +0100 Subject: [PATCH] Move orbit geometry onto runtime owner --- .voidbot/state/aetheria.cc | Bin 86298 -> 85672 bytes Assets/Scripts/ServerShared/Zone.cs | 10 ++++++++-- Assets/Scripts/ServerShared/ZoneData.cs | 5 ----- Assets/Scripts/ServerShared/ZoneGenerator.cs | 2 +- docs/aetheria-perfect-machine-map.md | 3 +++ 5 files changed, 12 insertions(+), 8 deletions(-) diff --git a/.voidbot/state/aetheria.cc b/.voidbot/state/aetheria.cc index 0e364245b49442b2f2ff9f983148147591e2e669..4a9172957e084af424125449d86495b0b08c478d 100644 GIT binary patch delta 1227 zcmZWp&1(}u6leP3M@vP~B6xbeCtv98D9;F`pXZRmD`%sYJjgZFp2M?tsmkXhBtQ8^VqvRTLDDK8$x} zgEISQZ#5bS+uT9$T#G7{mw`%!f-?)0ppL9^VR!v=EU2Nro+>Ut>~M)nAxM{+%&CFH zTVT>gBfe)T0)+W45Dte1cWNj=(~wZXI&CsNi|WZtfLIaLwb<}KyAt#&`yDan<~^$TNO$ZI8aeMTP(73^})R^y?0y3$ck{Q&k7u zmwdMbbzKzFfRd*vAef$#AnV*~SfQOE31hK~@&C-Yr`+I};w>t)h+D3fGQxg4kr7QU zH1EK^*#0UtwVMnjFs(OI3wRZ9)7A3>Q#&fqnx^a@EReJQy_;liVLnnmG&1ozG%}eS z1ZyJAQ=G6UAxs(m?*+1$&v)i`vY~I+(bD{t&aM9)?rLwKpQh z7i=;M9TQivDtG;{0?Cs{{=)((TxsUrXdkQp#n6(tdfF9GpyRxs87z CE?jIbE?nAvJ2+YVH1pQbviN*u(MJv*u6-7Z2S*lWR_@SJCaPK_ktUn1G7)w8djz*vj|iyMV!;* zAN%dGCP$ug)f) zlX>6Li;^ks=C7MjxcOD~B&@2Rh-n+VCt^)laW!lS)R113Mw4PIe~=~;Z3scTq< zSuMrFz(Mw!pE|BA5WN>X>vwvMD{h$6rfOsoUyV5Hgp?E^tK-j9K0wV{(dki3$Gy?a zHV>-@UY=VHPWN9?!u2R*E=p1zb99x00v2@9(H?pad&otAK@pDy$`7y@bV;k$@-&pa zM*HQ2nT%rXuyqP^A!8D@A{C>3CPhprj2>O?Jc?+x!t?U(U@TOsSAz~ZfI~&tp00c< z5>m#ZJqCD@)$ojAOL1}Yn?(PwRO_ zsR+^_$Rx)&s45wfkG5Hn@U>cswT`GOTvEe+0MxLNC{H<%_f*lw^T{_-^Ctu{hr|Jl z&Ci*N5^Xkl$G-FK)u6q8W$G|fL^oA)&08O1pLb`A2d|zfZ(j+{?CjLDSJWQYQO)!D z0mni1e+zZO-3w?ay;?}cUw@t|9{>IP)|M}_$yE#_{o2QwUe&KP1*SPXlJ4LLjL?}V zGrC*FuMeFsKDc}$+}Oe)NLhw}NE>L#ABORm!?Orc56)sGh<#kqjzB|Fqyjhtcia4u z?~B;e&9A(u*7bdH^QF_}cPqhDL8ts}C1}n5j|%1TYVbwz;nm~8Z1MEpPo9|2Lize? zFuPvV8V1=1vKvxtHqPdexk@d0Iz)&k8 z?`Rw`tU5}3n;a)eiK?T>aL{<+b3=+O%}83choHE%@<~k?rF4Kh=(&k^lez diff --git a/Assets/Scripts/ServerShared/Zone.cs b/Assets/Scripts/ServerShared/Zone.cs index 32ac98b19..450025d73 100644 --- a/Assets/Scripts/ServerShared/Zone.cs +++ b/Assets/Scripts/ServerShared/Zone.cs @@ -153,7 +153,7 @@ public class Zone if (orbit.Period > .01f) { var phase = (float) frac(_time / orbit.Period); - pos = OrbitData.Evaluate(frac(phase + orbit.Phase)) * orbit.Distance; + pos = Orbit.Evaluate(frac(phase + orbit.Phase)) * orbit.Distance; if (float.IsNaN(pos.x)) { @@ -221,7 +221,7 @@ public class Zone else size = Settings.AsteroidSize.Evaluate(asteroid.Size); var rot = (float) (_time * asteroid.RotationSpeed % (PI * 2)); - var pos = OrbitData.Evaluate((float) frac(_time / Settings.OrbitPeriod.Evaluate(asteroid.Distance) + + var pos = Orbit.Evaluate((float) frac(_time / Settings.OrbitPeriod.Evaluate(asteroid.Distance) + asteroid.Phase)) * asteroid.Distance + belt.NewOrbitPosition; //belt.NewPositions[i] = float3(pos.x, GetHeight(pos) + Settings.AsteroidVerticalOffset, pos.y); belt.NewTransforms[i] = float4(pos.x, pos.y, rot, size); @@ -552,6 +552,12 @@ public class Orbit public float2 PreviousPosition = float2.zero; public float Period; + public static float2 Evaluate(float phase) + { + phase *= PI * 2; + return new float2(cos(phase), sin(phase)); + } + public Orbit(PlanetSettings settings, OrbitData data) { ID = data.ID; diff --git a/Assets/Scripts/ServerShared/ZoneData.cs b/Assets/Scripts/ServerShared/ZoneData.cs index 697b7f3ce..e2636c1bc 100644 --- a/Assets/Scripts/ServerShared/ZoneData.cs +++ b/Assets/Scripts/ServerShared/ZoneData.cs @@ -115,9 +115,4 @@ public class OrbitData public float2 FixedPosition = float2.zero; - public static float2 Evaluate(float phase) - { - phase *= PI * 2; - return new float2(cos(phase), sin(phase)); - } } diff --git a/Assets/Scripts/ServerShared/ZoneGenerator.cs b/Assets/Scripts/ServerShared/ZoneGenerator.cs index 85ae1bc8a..c537c1603 100644 --- a/Assets/Scripts/ServerShared/ZoneGenerator.cs +++ b/Assets/Scripts/ServerShared/ZoneGenerator.cs @@ -511,7 +511,7 @@ public class GeneratorPlanet var p0 = new float2(0, dist); // Position of second child - var p1 = OrbitData.Evaluate(1.0f / vertices) * dist; + var p1 = Orbit.Evaluate(1.0f / vertices) * dist; // Maximum child distance is half the distance to the neighbor minus the neighbor's radius var p0ChildDist = (distance(p0, p1) * proportion - Settings.PlanetSafetyRadius.Evaluate(sharedMass * (1 - proportion))) * .75f; diff --git a/docs/aetheria-perfect-machine-map.md b/docs/aetheria-perfect-machine-map.md index 85d80b669..420c15687 100644 --- a/docs/aetheria-perfect-machine-map.md +++ b/docs/aetheria-perfect-machine-map.md @@ -1028,6 +1028,9 @@ First Aetheria surfaces to publish: `OrbitData`; `Zone`, `ActionGameManager`, and `ZoneRenderer` consume `Orbit` runtime properties, and the old `Orbit.ToData()` construction capture bridge is deleted. + - Done: move orbit phase evaluation off `OrbitData`; runtime zone updates, + asteroid transforms, and generator rosette spacing now use `Orbit.Evaluate`, + leaving `OrbitData` as a construction row only. - Done: move live asteroid-belt simulation, scanning, and mesh setup reads off `AsteroidBeltData`; `Zone`, `ResourceScanner`, and `AsteroidBeltUI` consume `AsteroidBelt` runtime asteroid/resource/orbit properties, and