コード例 #1
0
        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);
        }
コード例 #2
0
        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));
        }
コード例 #3
0
        // 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
        }
コード例 #4
0
 private void UpdateRotation()
 {
     transform.localRotation = Quaternion.Euler(GlobalCalulations.RoundVector(RotationStepRestriction, _NoneOffsettedRotation.Multiply(RotationOffset).eulerAngles));             // set rotation
 }
コード例 #5
0
        private Vector3 GetSnapPosition(Vector3 Position, Vector3 Offset = default(Vector3))
        {
            Vector3 GridPosition = GlobalCalulations.RoundXandZFloat(RestrictedScale, Position, Offset);

            return(GridPosition);
        }
コード例 #6
0
        // 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);
        }
コード例 #7
0
 public Vector3 GridBottom(float GridSize)
 {
     return(GlobalCalulations.RoundXandZFloat(GridSize, BottomMargin));
 }