Passenger/driver sit still in moving cars: seat pose sent relative to the vehicle (backward-compatible), no backward pull; remote cars/traffic extrapolate in physics time and interpolate; UI polish (shadows, borders, gradient buttons, server list hover, fill bars, colored ping)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
33a415139b
commit
ce2fbdfc10
+27
-4
@@ -77,6 +77,12 @@ namespace MSCO
|
||||
public Quaternion HeldLocalRot; // relativ zur Kamera
|
||||
public bool Seated; // fährt oder sitzt als Beifahrer
|
||||
public float FeetY; // Bodenhöhe unter dem Spieler (für Ducken/Lehnen der Figur)
|
||||
// Im Fahrzeug: Kopf und Blick relativ zum Fahrzeug (ID des SyncedBody, 0 = nicht im Fahrzeug). Damit sitzt die
|
||||
// Figur beim anderen fest auf dem Sitz, statt in Weltkoordinaten hinter dem fahrenden Auto herzuhinken.
|
||||
// Steht am Ende der Nachricht: ältere Versionen und der Server lesen es einfach nicht mit.
|
||||
public int SeatId;
|
||||
public Vector3 SeatHead;
|
||||
public Quaternion SeatView;
|
||||
|
||||
public byte[] Serialize()
|
||||
{
|
||||
@@ -90,9 +96,15 @@ namespace MSCO
|
||||
w.Write(s.Seated);
|
||||
w.Write(s.FeetY);
|
||||
w.Write(s.HeldId);
|
||||
if (s.HeldId == 0) return;
|
||||
Write(w, s.HeldLocalPos);
|
||||
Write(w, s.HeldLocalRot);
|
||||
if (s.HeldId != 0)
|
||||
{
|
||||
Write(w, s.HeldLocalPos);
|
||||
Write(w, s.HeldLocalRot);
|
||||
}
|
||||
w.Write(s.SeatId);
|
||||
if (s.SeatId == 0) return;
|
||||
Write(w, s.SeatHead);
|
||||
Write(w, s.SeatView);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -107,13 +119,24 @@ namespace MSCO
|
||||
Seated = r.ReadBoolean(),
|
||||
FeetY = r.ReadSingle(),
|
||||
HeldId = r.ReadInt32(),
|
||||
HeldLocalRot = Quaternion.identity
|
||||
HeldLocalRot = Quaternion.identity,
|
||||
SeatView = Quaternion.identity
|
||||
};
|
||||
if (s.HeldId != 0)
|
||||
{
|
||||
s.HeldLocalPos = ReadVector(r);
|
||||
s.HeldLocalRot = ReadQuaternion(r);
|
||||
}
|
||||
// Ältere Versionen senden keinen Sitz
|
||||
if (r.BaseStream.Length - r.BaseStream.Position >= 4)
|
||||
{
|
||||
s.SeatId = r.ReadInt32();
|
||||
if (s.SeatId != 0)
|
||||
{
|
||||
s.SeatHead = ReadVector(r);
|
||||
s.SeatView = ReadQuaternion(r);
|
||||
}
|
||||
}
|
||||
return s;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user