Lock handle when extracting object

This commit is contained in:
Oliver Booth 2022-12-04 17:42:13 +00:00
parent 9408e2a100
commit fde3508fc1
No known key found for this signature in database
GPG Key ID: 32A00B35503AF634
1 changed files with 28 additions and 20 deletions

View File

@ -144,29 +144,37 @@ public sealed partial class VirtualParadiseClient
private async Task<VirtualParadiseObject> ExtractObjectAsync(nint sender) private async Task<VirtualParadiseObject> ExtractObjectAsync(nint sender)
{ {
var type = (ObjectType)vp_int(sender, IntegerAttribute.ObjectType); ObjectType type;
int id = vp_int(sender, IntegerAttribute.ObjectId); int id;
int owner = vp_int(sender, IntegerAttribute.ObjectUserId); int owner;
double x = vp_double(sender, FloatAttribute.ObjectX);
double y = vp_double(sender, FloatAttribute.ObjectY);
double z = vp_double(sender, FloatAttribute.ObjectZ);
var position = new Vector3d(x, y, z);
float rotX = vp_float(sender, FloatAttribute.ObjectRotationX);
float rotY = vp_float(sender, FloatAttribute.ObjectRotationY);
float rotZ = vp_float(sender, FloatAttribute.ObjectRotationZ);
float angle = vp_float(sender, FloatAttribute.ObjectRotationAngle);
Quaternion rotation; Quaternion rotation;
Vector3d position;
if (double.IsPositiveInfinity(angle)) lock (Lock)
{ {
rotation = Quaternion.CreateFromYawPitchRoll(rotY, rotX, rotZ); type = (ObjectType)vp_int(sender, IntegerAttribute.ObjectType);
} id = vp_int(sender, IntegerAttribute.ObjectId);
else owner = vp_int(sender, IntegerAttribute.ObjectUserId);
{
var axis = new Vector3(rotX, rotY, rotZ); double x = vp_double(sender, FloatAttribute.ObjectX);
rotation = Quaternion.CreateFromAxisAngle(axis, angle); double y = vp_double(sender, FloatAttribute.ObjectY);
double z = vp_double(sender, FloatAttribute.ObjectZ);
position = new Vector3d(x, y, z);
float rotX = vp_float(sender, FloatAttribute.ObjectRotationX);
float rotY = vp_float(sender, FloatAttribute.ObjectRotationY);
float rotZ = vp_float(sender, FloatAttribute.ObjectRotationZ);
float angle = vp_float(sender, FloatAttribute.ObjectRotationAngle);
if (double.IsPositiveInfinity(angle))
{
rotation = Quaternion.CreateFromYawPitchRoll(rotY, rotX, rotZ);
}
else
{
var axis = new Vector3(rotX, rotY, rotZ);
rotation = Quaternion.CreateFromAxisAngle(axis, angle);
}
} }
VirtualParadiseObject virtualParadiseObject = type switch VirtualParadiseObject virtualParadiseObject = type switch