public static Vector3[] DirectionToWorldDirection(Vector3[] Directions, Quaternion LocalRotation) { int Rotation = GlobalCalulations.RoundToWholeNumbers(90f, LocalRotation.eulerAngles.y); Quaternion OffsetRotation = Quaternion.Euler(0, Rotation, 0); // calcualte offset rotation for (int i = 0; i < Directions.Length; i++) { Directions [i] = OffsetRotation * Directions [i]; } // offset vectors return(Directions); }
public static ConnectionDirection[] ConnectionToWorldConnection(ConnectionDirection[] ConnectionDirections, Quaternion LocalRotation) { int Rotation = GlobalCalulations.RoundToWholeNumbers(90f, LocalRotation.eulerAngles.y); Quaternion OffsetRotation = Quaternion.Euler(0, Rotation, 0); // calcualte offset rotation Vector3[] Vectors = ModularPieceExtensions.DirectionsToVectors(ConnectionDirections.ToArray()); // convert to vector3 array for (int i = 0; i < Vectors.Length; i++) { Vectors [i] = OffsetRotation * Vectors [i]; } // offset vectors return(ModularPieceExtensions.VectorsToDirections(Vectors)); }
// actions axis private void Position(Vector3 IdentityAxis) { Quaternion Rotation = (LocalSpace) ? LocalMover.transform.rotation : Quaternion.identity; Vector3 Forward = LocalMover.transform.forward; Vector3 Centerd = WorldMousePosition - StartPosition; Vector3 WorldOffset = Vector3.Scale(Centerd.ToWorldRotationFull(Rotation, Vector3.zero), IdentityAxis); // world offset Vector3 LocalOffset = WorldOffset.ToLocalRotationFull(Rotation, Vector3.zero); TempPosition = StartPosition + LocalOffset; // set temp position // round to restricted grid position GridTempPosition = (_PositionGridRestriction > 0)?GlobalCalulations.RoundVectorLocal (_PositionGridRestriction, TempPosition, LocalForward, StartPosition):TempPosition; OnPositionChanged(); // update position }
private void UpdateRotation() { transform.localRotation = Quaternion.Euler(GlobalCalulations.RoundVector(RotationStepRestriction, _NoneOffsettedRotation.Multiply(RotationOffset).eulerAngles)); // set rotation }
private Vector3 GetSnapPosition(Vector3 Position, Vector3 Offset = default(Vector3)) { Vector3 GridPosition = GlobalCalulations.RoundXandZFloat(RestrictedScale, Position, Offset); return(GridPosition); }
// Grid snap positions private Vector3 GetSnapPosition(Vector3 Position, Quaternion Rotation, Vector3 Offset = default(Vector3)) { Vector3 GridPosition = GlobalCalulations.RoundXandZLocal(RestrictedScale, Position, Rotation * Vector3.forward, GridCenter, Offset); // calculate offsetted grid point return(GridPosition); }
public Vector3 GridBottom(float GridSize) { return(GlobalCalulations.RoundXandZFloat(GridSize, BottomMargin)); }