Performance: time-sliced checks for idle objects, fewer allocations, rarer damage checks for parked cars
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
+9
-2
@@ -129,6 +129,8 @@ namespace MSCO
|
||||
|
||||
float loadTime;
|
||||
float nextScan;
|
||||
int frame;
|
||||
readonly List<SyncedBody> drivenList = new List<SyncedBody>();
|
||||
float sendTimer;
|
||||
|
||||
FsmGameObject pickedObject;
|
||||
@@ -191,7 +193,8 @@ namespace MSCO
|
||||
/// <summary>Fahrzeuge, die gerade ein anderer Spieler aktiv fährt.</summary>
|
||||
public List<SyncedBody> RemoteDrivenVehicles()
|
||||
{
|
||||
var list = new List<SyncedBody>();
|
||||
var list = drivenList; // wird jedes Frame gebraucht: Liste wiederverwenden
|
||||
list.Clear();
|
||||
foreach (SyncedBody b in byId.Values)
|
||||
if (b.IsVehicle && IsRemoteOwned(b) && b.OwnerActive && b.Rb != null) list.Add(b);
|
||||
return list;
|
||||
@@ -296,8 +299,12 @@ namespace MSCO
|
||||
bool motionClaimAllowed = Time.time - loadTime > MotionClaimGrace;
|
||||
|
||||
removeList.Clear();
|
||||
frame++;
|
||||
foreach (SyncedBody b in byId.Values)
|
||||
{
|
||||
// Leistung: freie Objekte (der Großteil, meist liegen sie nur herum) nur jedes 4. Frame prüfen -
|
||||
// eigene, fremde, gehaltene und gefahrene jedes Frame
|
||||
if (b.OwnerId == SyncedBody.NoOwner && ((b.Id ^ frame) & 3) != 0 && b != held && b != driven) continue;
|
||||
if (b.Rb == null)
|
||||
{
|
||||
// Ganzes Objekt weg (gegessen, getrunken, verbraucht) - nicht nur der Rigidbody (Teil angebaut).
|
||||
@@ -471,7 +478,7 @@ namespace MSCO
|
||||
|
||||
void HoldParts(SyncedBody b)
|
||||
{
|
||||
b.NextPartScan = Time.time + 1f; // später angebaute Teile ebenfalls
|
||||
b.NextPartScan = Time.time + 2f; // später angebaute Teile ebenfalls
|
||||
if (b.HeldJoints == null) b.HeldJoints = new Dictionary<Joint, Vector2>();
|
||||
foreach (Joint j in b.Rb.GetComponentsInChildren<Joint>(true))
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user