mirror of
https://github.com/oliverbooth/VpSharp
synced 2024-11-22 19:38:47 +00:00
Lock handle when extracting object
This commit is contained in:
parent
9408e2a100
commit
fde3508fc1
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user