/// <summary> /// NitroxTransform is always attached to an Entity /// </summary> public NitroxTransform(NitroxVector3 localPosition, NitroxQuaternion localRotation, NitroxVector3 scale, Entity entity) { LocalPosition = localPosition; LocalRotation = localRotation; LocalScale = scale; Entity = entity; }
public void ChangingTransformTest() { NitroxVector3 beforeLocalPosition = new NitroxVector3(15, 2, -7); NitroxQuaternion beforeRotation = NitroxQuaternion.FromEuler(45, 15, 1); NitroxVector3 beforeChildLocalPosition = new NitroxVector3(75, -10, 13.333f); NitroxQuaternion beforeChildRotation = NitroxQuaternion.FromEuler(75, 11, 5); NitroxVector3 setGlobalPosition = new NitroxVector3(34.62131f, 45.99337f, -10.77733f); NitroxQuaternion setGlobalRotation = new NitroxQuaternion(0.6743798f, 0.2302919f, 0.02638498f, 0.7010573f); NitroxVector3 afterLocalPosition = new NitroxVector3(17, 14, -13); NitroxQuaternion afterLocalRotation = NitroxQuaternion.FromEuler(60, 25, 0); NitroxVector3 afterChildGlobalPosition = new NitroxVector3(379.541f, 109.6675f, -167.4466f); NitroxQuaternion afterChildGlobalRotation = NitroxQuaternion.FromEuler(17.81689f, 187.7957f, 151.9425f); NitroxTransform grandchild3 = new NitroxTransform(beforeLocalPosition, beforeRotation, new NitroxVector3(2.5f, 2.5f, 2.5f), null); NitroxTransform grandgrandchild1 = new NitroxTransform(beforeChildLocalPosition, beforeChildRotation, new NitroxVector3(1, 1, 1), null); grandgrandchild1.SetParent(grandchild3, false); grandchild3.SetParent(child1, true); grandchild3.Position.Equals(beforeLocalPosition, TOLERANCE).Should().BeTrue($"Expected: {beforeLocalPosition} Found: {grandchild3.Position}"); grandchild3.Rotation.Equals(beforeRotation, TOLERANCE).Should().BeTrue($"Expected: {beforeRotation} Found: {grandchild3.Rotation}"); grandchild3.Position = setGlobalPosition; grandchild3.Rotation = setGlobalRotation; grandchild3.LocalPosition.Equals(afterLocalPosition, TOLERANCE).Should().BeTrue($"Expected: {afterLocalPosition} Found: {grandchild3.LocalPosition}"); grandchild3.LocalRotation.Equals(afterLocalRotation, TOLERANCE).Should().BeTrue($"Expected: {afterLocalRotation} Found: {grandchild3.LocalRotation}"); grandgrandchild1.Position.Equals(afterChildGlobalPosition, TOLERANCE).Should().BeTrue($"Expected: {afterChildGlobalPosition} Found: {grandgrandchild1.Position}"); grandgrandchild1.Rotation.Equals(afterChildGlobalRotation, TOLERANCE).Should().BeTrue($"Expected: {afterChildGlobalRotation} Found: {grandgrandchild1.Rotation}"); }
public InitialRemotePlayerData(PlayerContext playerContext, NitroxVector3 position, Optional <NitroxId> subRootId, List <NitroxTechType> equippedTechTypes) { PlayerContext = playerContext; Position = position; SubRootId = subRootId; EquippedTechTypes = equippedTechTypes; }
public static NitroxVector3 Normalize(NitroxVector3 value) { float ls = value.X * value.X + value.Y * value.Y + value.Z * value.Z; float length = Mathf.Sqrt(ls); return(new NitroxVector3(value.X / length, value.Y / length, value.Z / length)); }
public static NitroxVector3 Cross(NitroxVector3 vector1, NitroxVector3 vector2) { return(new NitroxVector3( vector1.Y * vector2.Z - vector1.Z * vector2.Y, vector1.Z * vector2.X - vector1.X * vector2.Z, vector1.X * vector2.Y - vector1.Y * vector2.X)); }
public static NitroxQuaternion LookRotation(NitroxVector3 forward, NitroxVector3 up) { NitroxVector3 vector = NitroxVector3.Normalize(forward); NitroxVector3 vector2 = NitroxVector3.Normalize(NitroxVector3.Cross(up, vector)); NitroxVector3 vector3 = NitroxVector3.Cross(vector, vector2); float m00 = vector2.X; float m01 = vector2.Y; float m02 = vector2.Z; float m10 = vector3.X; float m11 = vector3.Y; float m12 = vector3.Z; float m20 = vector.X; float m21 = vector.Y; float m22 = vector.Z; float num8 = (m00 + m11) + m22; NitroxQuaternion quaternion; if (num8 > 0f) { float num = Mathf.Sqrt(num8 + 1f); quaternion.W = num * 0.5f; num = 0.5f / num; quaternion.X = (m12 - m21) * num; quaternion.Y = (m20 - m02) * num; quaternion.Z = (m01 - m10) * num; return(quaternion); } if ((m00 >= m11) && (m00 >= m22)) { float num7 = Mathf.Sqrt(((1f + m00) - m11) - m22); float num4 = 0.5f / num7; quaternion.X = 0.5f * num7; quaternion.Y = (m01 + m10) * num4; quaternion.Z = (m02 + m20) * num4; quaternion.W = (m12 - m21) * num4; return(quaternion); } if (m11 > m22) { float num6 = Mathf.Sqrt(((1f + m11) - m00) - m22); float num3 = 0.5f / num6; quaternion.X = (m10 + m01) * num3; quaternion.Y = 0.5f * num6; quaternion.Z = (m21 + m12) * num3; quaternion.W = (m20 - m02) * num3; return(quaternion); } float num5 = Mathf.Sqrt(((1f + m22) - m00) - m11); float num2 = 0.5f / num5; quaternion.X = (m20 + m02) * num2; quaternion.Y = (m21 + m12) * num2; quaternion.Z = 0.5f * num5; quaternion.W = (m01 - m10) * num2; return(quaternion); }
public static NitroxMatrix4x4 TRS(NitroxVector3 localPos, NitroxQuaternion localRotation, NitroxVector3 localScale) { NitroxMatrix4x4 scaleMatrix = SetScale(localScale); NitroxMatrix4x4 rotationMatrix = SetRotation(localRotation); NitroxMatrix4x4 translationMatrix = SetTranslation(localPos); NitroxMatrix4x4 result = translationMatrix * rotationMatrix * scaleMatrix; return(result); }
public static void DecomposeMatrix(ref NitroxMatrix4x4 matrix, out NitroxVector3 localPosition, out NitroxQuaternion localRotation, out NitroxVector3 localScale) { NitroxMatrix4x4 before = new NitroxMatrix4x4(matrix); localScale = ExtractScale(ref matrix); localRotation = ExtractRotation(ref matrix); localPosition = ExtractTranslation(ref matrix); matrix = before; }
public void InitEscapePodModel(NitroxId id, NitroxVector3 location, NitroxId fabricatorId, NitroxId medicalFabricatorId, NitroxId storageContainerId, NitroxId radioId, bool damaged, bool radioDamaged) { Id = id; Location = location; FabricatorId = fabricatorId; MedicalFabricatorId = medicalFabricatorId; StorageContainerId = storageContainerId; RadioId = radioId; Damaged = damaged; RadioDamaged = radioDamaged; }
public AbsoluteEntityCell(NitroxVector3 worldSpace, int level) { Level = level; NitroxVector3 localPosition = (worldSpace + Map.Main.BatchDimensionCenter) / Map.Main.BatchSize; BatchId = Int3.Floor(localPosition); NitroxVector3 cell = (localPosition - BatchId) * GetCellsPerBlock(); CellId = Int3.Floor(new NitroxVector3(cell.X + 0.0001f, cell.Y + 0.0001f, cell.Z + 0.0001f)); }
public VehicleMovementData(NitroxTechType techType, NitroxId id, NitroxVector3 position, NitroxQuaternion rotation) { TechType = techType; Id = id; Position = position; Rotation = rotation; Velocity = NitroxVector3.Zero; AngularVelocity = NitroxVector3.Zero; SteeringWheelYaw = 0f; SteeringWheelPitch = 0f; AppliedThrottle = false; }
public VehicleMovementData(NitroxTechType techType, NitroxId id, NitroxVector3 position, NitroxQuaternion rotation, NitroxVector3 velocity, NitroxVector3 angularVelocity, float steeringWheelYaw, float steeringWheelPitch, bool appliedThrottle) { TechType = techType; Id = id; Position = position; Rotation = rotation; Velocity = velocity; AngularVelocity = angularVelocity; SteeringWheelYaw = steeringWheelYaw; SteeringWheelPitch = steeringWheelPitch; AppliedThrottle = appliedThrottle; }
public VehicleModel(NitroxTechType techType, NitroxId id, NitroxVector3 position, NitroxQuaternion rotation, IEnumerable <InteractiveChildObjectIdentifier> interactiveChildIdentifiers, Optional <NitroxId> dockingBayId, string name, NitroxVector3[] hsb, float health) { TechType = techType; Id = id; Position = position; Rotation = rotation; InteractiveChildIdentifiers = new ThreadSafeCollection <InteractiveChildObjectIdentifier>(interactiveChildIdentifiers); DockingBayId = dockingBayId; Name = name; HSB = hsb; Health = health; }
public Entity(NitroxVector3 position, NitroxQuaternion rotation, NitroxVector3 scale, NitroxTechType techType, int level, string classId, bool spawnedByServer, NitroxId waterParkId, byte[] serializedGameObject, bool existsInGlobalRoot, NitroxId id) { Transform = new NitroxTransform(position, rotation, scale, this); TechType = techType; Id = id; Level = level; ClassId = classId; SpawnedByServer = spawnedByServer; WaterParkId = waterParkId; SerializedGameObject = serializedGameObject; ExistsInGlobalRoot = existsInGlobalRoot; ExistingGameObjectChildIndex = null; }
public void TestToEuler() { NitroxVector3 euler1 = defaultVal.ToEuler(); NitroxVector3 euler2 = new NitroxQuaternion(0.5f, 0.5f, -0.5f, 0.5f).ToEuler(); NitroxVector3 euler3 = new NitroxQuaternion(-0.5f, 0.5f, -0.5f, -0.5f).ToEuler(); NitroxVector3 expectedResult1 = new NitroxVector3(45f, 300f, 255f); NitroxVector3 expectedResult1Other = new NitroxVector3(104.5108f, 50.75358f, 316.9205f); //defaultVal can be interpreted as both euler :shrug: NitroxVector3 expectedResult2 = new NitroxVector3(90f, 90f, 0f); NitroxVector3 expectedResult3 = new NitroxVector3(90f, 270f, 0f); (euler1.Equals(expectedResult1, TOLERANCE) || euler1.Equals(expectedResult1Other, TOLERANCE)).Should().BeTrue($"Expected: {expectedResult1} or {expectedResult1Other}- Found: {euler1}"); euler2.Equals(expectedResult2, TOLERANCE).Should().BeTrue($"Expected: {expectedResult2} - Found: {euler2}"); euler3.Equals(expectedResult3, TOLERANCE).Should().BeTrue($"Expected: {expectedResult3} - Found: {euler3}"); }
public void PositionTest() { NitroxVector3 rootResult = new NitroxVector3(1, 1, 1); NitroxVector3 child1Result = new NitroxVector3(6, 4, -5); NitroxVector3 child2Result = new NitroxVector3(12, 1, 0.5f); NitroxVector3 grandchild1Result = new NitroxVector3(28.82663f, 6.55587f, 31.11665f); NitroxVector3 grandchild2Result = new NitroxVector3(5.79976f, -2.040047f, 6.966463f); root.Position.Equals(rootResult, TOLERANCE).Should().BeTrue($"Expected: {rootResult} Found: {root.Position}"); child1.Position.Equals(child1Result, TOLERANCE).Should().BeTrue($"Expected: {child1Result} Found: {child1.Position}"); child2.Position.Equals(child2Result, TOLERANCE).Should().BeTrue($"Expected: {child2Result} Found: {child2.Position}"); grandchild1.Position.Equals(grandchild1Result, TOLERANCE).Should().BeTrue($"Expected: {grandchild1Result} Found: {grandchild1.Position}"); grandchild2.Position.Equals(grandchild2Result, TOLERANCE).Should().BeTrue($"Expected: {grandchild2Result} Found: {grandchild2.Position}"); }
public BasePiece(NitroxId id, NitroxVector3 itemPosition, NitroxQuaternion rotation, NitroxVector3 cameraPosition, NitroxQuaternion cameraRotation, NitroxTechType techType, Optional <NitroxId> parentId, bool isFurniture, Optional <RotationMetadata> rotationMetadata) { Id = id; ItemPosition = itemPosition; Rotation = rotation; TechType = techType; CameraPosition = cameraPosition; CameraRotation = cameraRotation; ParentId = parentId; IsFurniture = isFurniture; ConstructionAmount = 0.0f; ConstructionCompleted = false; RotationMetadata = rotationMetadata; Metadata = Optional.Empty; }
public NitroxVector3 MultiplyPoint(NitroxVector3 localPosition) { float x = M[0, 0] * localPosition.X + M[0, 1] * localPosition.Y + M[0, 2] * localPosition.Z + M[0, 3]; float y = M[1, 0] * localPosition.X + M[1, 1] * localPosition.Y + M[1, 2] * localPosition.Z + M[1, 3]; float z = M[2, 0] * localPosition.X + M[2, 1] * localPosition.Y + M[2, 2] * localPosition.Z + M[2, 3]; float w = M[3, 0] * localPosition.X + M[3, 1] * localPosition.Y + M[3, 2] * localPosition.Z + M[3, 3]; if (w == 1) { return(new NitroxVector3(x, y, z)); } else { NitroxVector3 vector = new NitroxVector3(x, y, z) / w; return(vector); } }
public static NitroxMatrix4x4 SetScale(NitroxVector3 localScale) { NitroxMatrix4x4 scaleMatrix; scaleMatrix.M = new float[4, 4]; scaleMatrix[0, 0] = 1f; scaleMatrix[1, 1] = 1f; scaleMatrix[2, 2] = 1f; scaleMatrix[3, 3] = 1f; scaleMatrix[0, 0] = localScale.X; scaleMatrix[1, 1] = localScale.Y; scaleMatrix[2, 2] = localScale.Z; return(scaleMatrix); }
public static NitroxMatrix4x4 SetTranslation(NitroxVector3 localPosition) { NitroxMatrix4x4 transMatrix; transMatrix.M = new float[4, 4]; transMatrix[0, 0] = 1f; transMatrix[1, 1] = 1f; transMatrix[2, 2] = 1f; transMatrix[3, 3] = 1f; transMatrix[0, 3] = localPosition.X; transMatrix[1, 3] = localPosition.Y; transMatrix[2, 3] = localPosition.Z; return(transMatrix); }
public Entity(NitroxVector3 localPosition, NitroxQuaternion localRotation, NitroxVector3 scale, NitroxTechType techType, int level, string classId, bool spawnedByServer, NitroxId id, int?existingGameObjectChildIndex, Entity parentEntity = null) { Transform = new NitroxTransform(localPosition, localRotation, scale, this); TechType = techType; Id = id; Level = level; ClassId = classId; SpawnedByServer = spawnedByServer; WaterParkId = null; SerializedGameObject = null; Metadata = null; ExistsInGlobalRoot = false; ExistingGameObjectChildIndex = existingGameObjectChildIndex; if (parentEntity != null) { ParentId = parentEntity.Id; Transform.SetParent(parentEntity.Transform); } }
public static NitroxVector3 ExtractScale(ref NitroxMatrix4x4 matrix) { NitroxVector3 scale; scale.X = NitroxVector3.Length(new NitroxVector3(matrix[0, 0], matrix[0, 1], matrix[0, 2])); scale.Y = NitroxVector3.Length(new NitroxVector3(matrix[1, 0], matrix[1, 1], matrix[1, 2])); scale.Z = NitroxVector3.Length(new NitroxVector3(matrix[2, 0], matrix[2, 1], matrix[2, 2])); matrix[0, 0] /= scale.X; matrix[0, 1] /= scale.X; matrix[0, 2] /= scale.X; matrix[1, 0] /= scale.Y; matrix[1, 1] /= scale.Y; matrix[1, 2] /= scale.Y; matrix[2, 0] /= scale.Z; matrix[2, 1] /= scale.Z; matrix[2, 2] /= scale.Z; return(scale); }
public static float Length(NitroxVector3 value) { float ls = value.X * value.X + value.Y * value.Y + value.Z * value.Z; return(Mathf.Sqrt(ls)); }
public BasePiece(NitroxId id, NitroxVector3 itemPosition, NitroxQuaternion rotation, NitroxVector3 cameraPosition, NitroxQuaternion cameraRotation, NitroxTechType techType, Optional <NitroxId> parentId, bool isFurniture, Optional <RotationMetadata> rotationMetadata, Optional <BasePieceMetadata> metadata) : this(id, itemPosition, rotation, cameraPosition, cameraRotation, techType, parentId, isFurniture, rotationMetadata) { Metadata = metadata; }