mirror of
https://github.com/copyrighttxt/watrbx-game-engine.git
synced 2026-09-07 13:57:48 +00:00
GEEKING
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
/* Copyright 2003-2005 ROBLOX Corporation, All Rights Reserved */
|
||||
#include "stdafx.h"
|
||||
|
||||
#include "V8World/RigidJoint.h"
|
||||
#include "V8World/Primitive.h"
|
||||
|
||||
DYNAMIC_FASTFLAG(OrthonormalizeJointCoords)
|
||||
|
||||
namespace RBX {
|
||||
|
||||
bool RigidJoint::isAligned()
|
||||
{
|
||||
CoordinateFrame c0World = getPrimitive(0)->getCoordinateFrame() * jointCoord0;
|
||||
CoordinateFrame c1World = getPrimitive(1)->getCoordinateFrame() * jointCoord1;
|
||||
return Math::fuzzyEq(c0World, c1World);
|
||||
}
|
||||
|
||||
CoordinateFrame RigidJoint::align(Primitive* pMove, Primitive* pStay)
|
||||
{
|
||||
const CoordinateFrame& cMove = (pMove == getPrimitive(0)) ? jointCoord0 : jointCoord1;
|
||||
const CoordinateFrame& cStay = (pStay == getPrimitive(0)) ? jointCoord0 : jointCoord1;
|
||||
|
||||
CoordinateFrame jointWorld = pStay->getCoordinateFrame() * cStay;
|
||||
return jointWorld * cMove.inverse();
|
||||
}
|
||||
|
||||
CoordinateFrame RigidJoint::getChildInParent(Primitive* parent, Primitive* child)
|
||||
{
|
||||
const CoordinateFrame& cParent = (parent == getPrimitive(0)) ? jointCoord0 : jointCoord1;
|
||||
const CoordinateFrame& cChild = (child == getPrimitive(0)) ? jointCoord0 : jointCoord1;
|
||||
|
||||
// Note - we saw this return a non-ortho matrix once
|
||||
CoordinateFrame answer = cParent * cChild.inverse();
|
||||
Math::orthonormalizeIfNecessary(answer.rotation);
|
||||
return answer;
|
||||
}
|
||||
|
||||
|
||||
void RigidJoint::faceIdToCoords(
|
||||
Primitive* p0,
|
||||
Primitive* p1,
|
||||
NormalId nId0,
|
||||
NormalId nId1,
|
||||
CoordinateFrame& c0,
|
||||
CoordinateFrame& c1)
|
||||
{
|
||||
c0 = p0->getFaceCoordInObject(nId0);
|
||||
if (DFFlag::OrthonormalizeJointCoords)
|
||||
Math::orthonormalizeIfNecessary(c0.rotation);
|
||||
CoordinateFrame worldC = p0->getCoordinateFrame() * c0;
|
||||
c1 = p1->getCoordinateFrame().toObjectSpace(worldC);
|
||||
if (DFFlag::OrthonormalizeJointCoords)
|
||||
Math::orthonormalizeIfNecessary(c1.rotation);
|
||||
}
|
||||
|
||||
|
||||
} // namespace
|
||||
Reference in New Issue
Block a user