Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions Game.Server/Physics.cs
Original file line number Diff line number Diff line change
Expand Up @@ -49,8 +49,8 @@ public static float PhysGetEntityMass(BaseEntity entity) {

class SkipKeys : IVPhysicsKeyHandler
{
public void ParseKeyValue<T>(T data, ReadOnlySpan<char> key, ReadOnlySpan<char> value) { }
public void SetDefaults<T>(T data) { }
public void ParseKeyValue<T>(ref T data, ReadOnlySpan<char> key, ReadOnlySpan<char> value) { }
public void SetDefaults<T>(ref T data) { }
}

public static void PhysSolidOverride(ref Solid solid, string? overrideScript) {
Expand Down
4 changes: 2 additions & 2 deletions Source.Common/VCollideParse.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,8 @@ public struct Fluid

public interface IVPhysicsKeyHandler
{
void ParseKeyValue<T>(T data, ReadOnlySpan<char> pKey, ReadOnlySpan<char> pValue);
void SetDefaults<T>(T data);
void ParseKeyValue<T>(ref T data, ReadOnlySpan<char> pKey, ReadOnlySpan<char> pValue);
void SetDefaults<T>(ref T data);
}

public interface IVPhysicsKeyParser
Expand Down
22 changes: 11 additions & 11 deletions Source.Physics/VPhysicsKeyParser.cs
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ static void CopyString(Span<char> dest, ReadOnlySpan<char> src) {
}

public void ParseSolid(ref Solid solid, IVPhysicsKeyHandler? unknownKeyHandler) {
unknownKeyHandler?.SetDefaults(solid);
unknownKeyHandler?.SetDefaults(ref solid);

for (KeyValues? prop = CurrentBlock?.GetFirstSubKey(); prop != null; prop = prop.GetNextKey()) {
ReadOnlySpan<char> value = prop.GetString();
Expand All @@ -124,7 +124,7 @@ public void ParseSolid(ref Solid solid, IVPhysicsKeyHandler? unknownKeyHandler)
case "inertia": solid.Params.Inertia = prop.GetFloat(); break;
case "rotinertialimit": solid.Params.RotInertiaLimit = prop.GetFloat(); break;
case "volume": solid.Params.Volume = prop.GetFloat(); break;
default: unknownKeyHandler?.ParseKeyValue(solid, prop.Name, value); break;
default: unknownKeyHandler?.ParseKeyValue(ref solid, prop.Name, value); break;
}
}

Expand All @@ -133,7 +133,7 @@ public void ParseSolid(ref Solid solid, IVPhysicsKeyHandler? unknownKeyHandler)

public void ParseFluid(ref Fluid fluid, IVPhysicsKeyHandler? unknownKeyHandler) {
if (unknownKeyHandler != null)
unknownKeyHandler.SetDefaults(fluid);
unknownKeyHandler.SetDefaults(ref fluid);
else {
fluid = default;
CopyString(fluid.SurfaceProp, "water");
Expand All @@ -148,7 +148,7 @@ public void ParseFluid(ref Fluid fluid, IVPhysicsKeyHandler? unknownKeyHandler)
case "surfaceplane": fluid.Params.SurfacePlane = ParseVector4(value); break;
case "currentvelocity": fluid.Params.CurrentVelocity = ParseVector(value); break;
case "contents": fluid.Params.Contents = (Contents)prop.GetInt(); break;
default: unknownKeyHandler?.ParseKeyValue(fluid, prop.Name, value); break;
default: unknownKeyHandler?.ParseKeyValue(ref fluid, prop.Name, value); break;
}
}

Expand All @@ -157,7 +157,7 @@ public void ParseFluid(ref Fluid fluid, IVPhysicsKeyHandler? unknownKeyHandler)

public void ParseRagdollConstraint(ref ConstraintRagdollParams constraint, IVPhysicsKeyHandler? unknownKeyHandler) {
if (unknownKeyHandler != null)
unknownKeyHandler.SetDefaults(constraint);
unknownKeyHandler.SetDefaults(ref constraint);
else {
constraint = default;
constraint.ChildIndex = -1;
Expand Down Expand Up @@ -189,7 +189,7 @@ public void ParseRagdollConstraint(ref ConstraintRagdollParams constraint, IVPhy
constraint.Axes[2].Torque = prop.GetFloat();
constraint.Axes[2].AngularVelocity = 0;
break;
default: unknownKeyHandler?.ParseKeyValue(constraint, prop.Name, value); break;
default: unknownKeyHandler?.ParseKeyValue(ref constraint, prop.Name, value); break;
}
}

Expand All @@ -208,18 +208,18 @@ public void ParseSurfaceTable(Span<nint> table, IVPhysicsKeyHandler? unknownKeyH
NextBlock();
}

static void ParseCustomRecursive(KeyValues kv, object? custom, IVPhysicsKeyHandler? unknownKeyHandler) {
static void ParseCustomRecursive(KeyValues kv, ref object? custom, IVPhysicsKeyHandler? unknownKeyHandler) {
for (KeyValues? prop = kv.GetFirstSubKey(); prop != null; prop = prop.GetNextKey()) {
unknownKeyHandler?.ParseKeyValue(custom, prop.Name, prop.GetString());
ParseCustomRecursive(prop, custom, unknownKeyHandler);
unknownKeyHandler?.ParseKeyValue(ref custom, prop.Name, prop.GetString());
ParseCustomRecursive(prop, ref custom, unknownKeyHandler);
}
}

public void ParseCustom(ref object? custom, IVPhysicsKeyHandler? unknownKeyHandler) {
unknownKeyHandler?.SetDefaults(custom);
unknownKeyHandler?.SetDefaults(ref custom);

if (CurrentBlock != null)
ParseCustomRecursive(CurrentBlock, custom, unknownKeyHandler);
ParseCustomRecursive(CurrentBlock, ref custom, unknownKeyHandler);

NextBlock();
}
Expand Down
Loading