public void TokenToWorld(float longitudinal, float trasversal, out SBSVector3 pos, out SBSVector3 tang) #endif { switch (type) { case TokenType.Cross: case TokenType.Rect: #if UNITY_FLASH matWorld.MultiplyPoint3x4(SBSVector3.right * (trasversal * width * 0.5f) + SBSVector3.forward * (longitudinal * lengthOrRadius), pos); matWorld.MultiplyVector(SBSVector3.forward, tang); #else pos = matWorld.MultiplyPoint3x4(SBSVector3.right * (trasversal * width * 0.5f) + SBSVector3.forward * (longitudinal * lengthOrRadius)); tang = matWorld.MultiplyVector(SBSVector3.forward); #endif break; case TokenType.Curve: SBSVector3 center = (-curveDir * lengthOrRadius) * SBSVector3.right, offset = ((trasversal * width * 0.5f) + (curveDir * lengthOrRadius)) * SBSVector3.right; SBSMatrix4x4 matTr = SBSMatrix4x4.TRS(center, SBSQuaternion.identity, SBSVector3.one), matRot = SBSMatrix4x4.TRS(SBSVector3.zero, SBSQuaternion.AngleAxis(-arcAngle * curveDir * longitudinal, SBSVector3.up), SBSVector3.one); #if UNITY_FLASH (matWorld * matTr * matRot).MultiplyPoint3x4(offset, pos); (matWorld * matRot).MultiplyVector(SBSVector3.forward, tang); #else pos = (matWorld * matTr * matRot).MultiplyPoint3x4(offset); tang = (matWorld * matRot).MultiplyVector(SBSVector3.forward); #endif break; default: pos.x = pos.y = pos.z = 0.0f; tang.x = tang.y = tang.z = 0.0f; break; } }