All pastes #916736 Raw Edit

Unnamed

public text v1 · immutable
#916736 ·published 2008-02-24 21:49 UTC
rendered paste body
NxaJoint^ NxaRevoluteJointDescription::CreateJoint(NxScene* scenePtr)
{
	NxRevoluteJointDesc revoluteDesc;

	//JointDescription Stuff
	revoluteDesc.actor[0] = Actor[0]->nxActor;
	revoluteDesc.actor[1] = Actor[1]->nxActor;
	revoluteDesc.localAnchor[0] = NxaMath::Vector3XNAToPhysX(LocalAnchor[0]);
	revoluteDesc.localAnchor[1] = NxaMath::Vector3XNAToPhysX(LocalAnchor[1]);
	revoluteDesc.localAxis[0] = NxaMath::Vector3XNAToPhysX(LocalAxis[0]);
	revoluteDesc.localAxis[1] = NxaMath::Vector3XNAToPhysX(LocalAxis[1]);
	revoluteDesc.localNormal[0] = NxaMath::Vector3XNAToPhysX(LocalNormal[0]);
	revoluteDesc.localNormal[1] = NxaMath::Vector3XNAToPhysX(LocalNormal[1]);
	revoluteDesc.maxForce = MaxForce;
	revoluteDesc.maxTorque = MaxTorque;
	revoluteDesc.jointFlags = (NxU32)JointFlags;

	//RevoluteJointDescription Stuff
	revoluteDesc.limit = Limit.ConvertToNative();
	revoluteDesc.motor = Motor.ConvertToNative();
	revoluteDesc.spring = Spring.ConvertToNative();
	revoluteDesc.projectionDistance = ProjectionDistance;
	revoluteDesc.projectionAngle = ProjectionAngle;
	revoluteDesc.flags = (NxU32)Flags;
	revoluteDesc.projectionMode = (NxJointProjectionMode)ProjectionMode;

	NxJoint* jointPtr = scenePtr->createJoint(revoluteDesc);
	return NxaJoint::CreateFromPointer(jointPtr);
}

// Reflector

internal override unsafe NxaJoint CreateJoint(NxScene* scenePtr)
{
    NxRevoluteJointDesc revoluteDesc;
    *((int*) &revoluteDesc) = &??_7NxJointDesc@@6B@;
    *((int*) (&revoluteDesc + 4)) = 1;
    int num8 = 0;
    int num6 = ((int) &revoluteDesc) + 0x40;
    int num5 = ((int) &revoluteDesc) + 0x10;
    int num4 = ((int) &revoluteDesc) + 40;
    do
    {
        (num8 * 4)[((int) &revoluteDesc) + 8] = 0;
        num4[0] = 0f;
        num4[4] = 0f;
        num4[8] = 1f;
        num5[0] = 1f;
        num5[4] = 0f;
        num5[8] = 0f;
        num6[8] = 0f;
        num6[4] = 0f;
        num6[0] = 0f;
        num8++;
        num4 += 12;
        num5 += 12;
        num6 += 12;
    }
    while (num8 < 2);
    *((float*) (&revoluteDesc + 0x58)) = float.MaxValue;
    *((float*) (&revoluteDesc + 0x5c)) = float.MaxValue;
    *((int*) (&revoluteDesc + 0x60)) = 0;
    *((int*) (&revoluteDesc + 100)) = 0;
    *((int*) (&revoluteDesc + 0x68)) = 2;
    try
    {
        *((int*) &revoluteDesc) = &??_7NxRevoluteJointDesc@@6B@;
        *((float*) (&revoluteDesc + 0x6c)) = 0f;
        *((float*) (&revoluteDesc + 0x70)) = 0f;
        *((float*) (&revoluteDesc + 0x74)) = 1f;
        *((float*) (&revoluteDesc + 120)) = 0f;
        *((float*) (&revoluteDesc + 0x7c)) = 0f;
        *((float*) (&revoluteDesc + 0x80)) = 1f;
        *((float*) (&revoluteDesc + 0x84)) = float.MaxValue;
        *((float*) (&revoluteDesc + 0x88)) = 0f;
        *((int*) (&revoluteDesc + 140)) = 0;
        *((float*) (&revoluteDesc + 0x90)) = 0f;
        *((float*) (&revoluteDesc + 0x94)) = 0f;
        *((float*) (&revoluteDesc + 0x98)) = 0f;
        int num7 = 0;
        int num3 = ((int) &revoluteDesc) + 0x40;
        int num2 = ((int) &revoluteDesc) + 0x10;
        int num = ((int) &revoluteDesc) + 40;
        do
        {
            (num7 * 4)[((int) &revoluteDesc) + 8] = 0;
            num[0] = 0f;
            num[4] = 0f;
            num[8] = 1f;
            num2[0] = 1f;
            num2[4] = 0f;
            num2[8] = 0f;
            num3[8] = 0f;
            num3[4] = 0f;
            num3[0] = 0f;
            num7++;
            num += 12;
            num2 += 12;
            num3 += 12;
        }
        while (num7 < 2);
        *((float*) (&revoluteDesc + 0x58)) = float.MaxValue;
        *((float*) (&revoluteDesc + 0x5c)) = float.MaxValue;
        *((int*) (&revoluteDesc + 0x60)) = 0;
        *((int*) (&revoluteDesc + 100)) = 0;
        *((int*) (&revoluteDesc + 0x68)) = 2;
        *((float*) (&revoluteDesc + 0x9c)) = 1f;
        *((float*) (&revoluteDesc + 160)) = 0.0872f;
        *((int*) (&revoluteDesc + 0xa4)) = 0;
        *((int*) (&revoluteDesc + 0xa8)) = 0;
    }
    fault
    {
        ___CxxCallUnwindDtor(NxJointDesc.{dtor}, (void*) &revoluteDesc);
    }
    try
    {
        NxSpringDesc desc;
        NxMotorDesc desc2;
        NxJointLimitPairDesc desc3;
        NxVec3 vec;
        NxVec3 vec2;
        NxVec3 vec3;
        NxVec3 vec4;
        NxVec3 vec5;
        NxVec3 vec6;
        NxaActor[] actor = base.Actor;
        *((int*) (&revoluteDesc + 8)) = actor[0].nxActor;
        *((int*) (&revoluteDesc + 12)) = actor[1].nxActor;
        NxVec3 modopt(IsConst)* modopt(IsImplicitlyDereferenced) vecPtr6 = NxaMath.Vector3XNAToPhysX(&vec6, ref base.LocalAnchor[0]);
        *((float*) (&revoluteDesc + 0x40)) = vecPtr6[0];
        *((float*) (&revoluteDesc + 0x44)) = vecPtr6[4];
        *((float*) (&revoluteDesc + 0x48)) = vecPtr6[8];
        NxVec3 modopt(IsConst)* modopt(IsImplicitlyDereferenced) vecPtr5 = NxaMath.Vector3XNAToPhysX(&vec5, ref base.LocalAnchor[1]);
        *((float*) (&revoluteDesc + 0x4c)) = vecPtr5[0];
        *((float*) (&revoluteDesc + 80)) = vecPtr5[4];
        *((float*) (&revoluteDesc + 0x54)) = vecPtr5[8];
        NxVec3 modopt(IsConst)* modopt(IsImplicitlyDereferenced) vecPtr4 = NxaMath.Vector3XNAToPhysX(&vec4, ref base.LocalAxis[0]);
        *((float*) (&revoluteDesc + 40)) = vecPtr4[0];
        *((float*) (&revoluteDesc + 0x2c)) = vecPtr4[4];
        *((float*) (&revoluteDesc + 0x30)) = vecPtr4[8];
        NxVec3 modopt(IsConst)* modopt(IsImplicitlyDereferenced) vecPtr3 = NxaMath.Vector3XNAToPhysX(&vec3, ref base.LocalAxis[1]);
        *((float*) (&revoluteDesc + 0x34)) = vecPtr3[0];
        *((float*) (&revoluteDesc + 0x38)) = vecPtr3[4];
        *((float*) (&revoluteDesc + 60)) = vecPtr3[8];
        NxVec3 modopt(IsConst)* modopt(IsImplicitlyDereferenced) vecPtr2 = NxaMath.Vector3XNAToPhysX(&vec2, ref base.LocalNormal[0]);
        *((float*) (&revoluteDesc + 0x10)) = vecPtr2[0];
        *((float*) (&revoluteDesc + 20)) = vecPtr2[4];
        *((float*) (&revoluteDesc + 0x18)) = vecPtr2[8];
        NxVec3 modopt(IsConst)* modopt(IsImplicitlyDereferenced) vecPtr = NxaMath.Vector3XNAToPhysX(&vec, ref base.LocalNormal[1]);
        *((float*) (&revoluteDesc + 0x1c)) = vecPtr[0];
        *((float*) (&revoluteDesc + 0x20)) = vecPtr[4];
        *((float*) (&revoluteDesc + 0x24)) = vecPtr[8];
        *((float*) (&revoluteDesc + 0x58)) = base.MaxForce;
        *((float*) (&revoluteDesc + 0x5c)) = base.MaxTorque;
        *((int*) (&revoluteDesc + 0x68)) = base.JointFlags;
        NxJointLimitPairDesc* descPtr = this.Limit.ConvertToNative(&desc3);
        memcpy(descPtr, (&revoluteDesc + 0x6c), 0x18);
        NxaMotorDescription modopt(IsConst) motor = this.Motor;
        float velocityTarget = motor.VelocityTarget;
        float maxForce = motor.MaxForce;
        int freeSpin = (int) motor.FreeSpin;
        *((float*) &desc2) = velocityTarget;
        *((float*) (&desc2 + 4)) = maxForce;
        *((int*) (&desc2 + 8)) = freeSpin;
        memcpy(&desc2, (&revoluteDesc + 0x84), 12);
        NxaSpringDescription modopt(IsConst) spring = this.Spring;
        float num11 = spring.Spring;
        float damper = spring.Damper;
        float targetValue = spring.TargetValue;
        *((float*) &desc) = num11;
        *((float*) (&desc + 4)) = damper;
        *((float*) (&desc + 8)) = targetValue;
        memcpy(&desc, (&revoluteDesc + 0x90), 12);
        *((float*) (&revoluteDesc + 0x9c)) = this.ProjectionDistance;
        *((float*) (&revoluteDesc + 160)) = this.ProjectionAngle;
        *((int*) (&revoluteDesc + 0xa4)) = this.Flags;
        *((int*) (&revoluteDesc + 0xa8)) = this.ProjectionMode;
        return NxaJoint.CreateFromPointer((NxJoint*) **(((int*) scenePtr))[0x24](scenePtr, &revoluteDesc));
    }
    fault
    {
        ___CxxCallUnwindDtor(NxRevoluteJointDesc.{dtor}, (void*) &revoluteDesc);
    }
}