예제 #1
0
        ///
        ///      6 ------------ 7
        ///    / |    3       / |
        ///  5 ------------ 8   |
        ///  |   |          |   |
        ///  | 5 |     6    | 2 |     ------8-----
        ///  |   |   1      |   |
        ///  |  2 ----------|-- 3
        ///  |/       4     | /     |       3      |
        ///  1 ------------ 4
        ///
        ///          6 ------6----- 5 ------2----- 8 -----10----- 7       -
        ///          |              |              |              |
        ///          |              |              |              |
        ///          5      5       1       1      3       2      11       6       |
        ///          |              |              |              |
        ///          |              |              |              |
        ///          2 ------7----- 1 ------4----- 4 ------12---- 3       -
        ///
        ///
        ///                         |       4      |
        ///
        ///
        ///                           ------9-----
        public bool GetClosestPointIfWeCan(Vector3 K, GravityOverrideCube cube, out Vector3 closestPoint)
        {
            closestPoint = Vector3.zero;

            bool canApply = CanApplyFaces(K, cube);

            if (!canApply)
            {
                return(false);
            }

            closestPoint = GetClosestPoint(K);
            return(true);
        }
예제 #2
0
        public static void ApplyModificationToCube(SerializedProperty cube, GravityOverrideCube datas)
        {
            cube.GetPropertie(nameof(datas.Face1)).boolValue = datas.Face1;
            cube.GetPropertie(nameof(datas.Face2)).boolValue = datas.Face2;
            cube.GetPropertie(nameof(datas.Face3)).boolValue = datas.Face3;
            cube.GetPropertie(nameof(datas.Face4)).boolValue = datas.Face4;
            cube.GetPropertie(nameof(datas.Face5)).boolValue = datas.Face5;
            cube.GetPropertie(nameof(datas.Face6)).boolValue = datas.Face6;

            cube.GetPropertie(nameof(datas.Line1)).boolValue  = datas.Line1;
            cube.GetPropertie(nameof(datas.Line2)).boolValue  = datas.Line2;
            cube.GetPropertie(nameof(datas.Line3)).boolValue  = datas.Line3;
            cube.GetPropertie(nameof(datas.Line4)).boolValue  = datas.Line4;
            cube.GetPropertie(nameof(datas.Line5)).boolValue  = datas.Line5;
            cube.GetPropertie(nameof(datas.Line6)).boolValue  = datas.Line6;
            cube.GetPropertie(nameof(datas.Line7)).boolValue  = datas.Line7;
            cube.GetPropertie(nameof(datas.Line8)).boolValue  = datas.Line8;
            cube.GetPropertie(nameof(datas.Line9)).boolValue  = datas.Line9;
            cube.GetPropertie(nameof(datas.Line10)).boolValue = datas.Line10;
            cube.GetPropertie(nameof(datas.Line11)).boolValue = datas.Line11;
            cube.GetPropertie(nameof(datas.Line12)).boolValue = datas.Line12;


            cube.GetPropertie(nameof(datas.Point1)).boolValue = datas.Point1;
            cube.GetPropertie(nameof(datas.Point2)).boolValue = datas.Point2;
            cube.GetPropertie(nameof(datas.Point3)).boolValue = datas.Point3;
            cube.GetPropertie(nameof(datas.Point4)).boolValue = datas.Point4;
            cube.GetPropertie(nameof(datas.Point5)).boolValue = datas.Point5;
            cube.GetPropertie(nameof(datas.Point6)).boolValue = datas.Point6;
            cube.GetPropertie(nameof(datas.Point7)).boolValue = datas.Point7;
            cube.GetPropertie(nameof(datas.Point8)).boolValue = datas.Point8;

            cube.GetPropertie("_canApplyGravityBordersAndFace1").boolValue = datas.CanApplyGravityBordersAndFace1;
            cube.GetPropertie("_canApplyGravityBordersAndFace2").boolValue = datas.CanApplyGravityBordersAndFace2;
            cube.GetPropertie("_canApplyGravityBordersAndFace3").boolValue = datas.CanApplyGravityBordersAndFace3;
            cube.GetPropertie("_canApplyGravityBordersAndFace4").boolValue = datas.CanApplyGravityBordersAndFace4;
            cube.GetPropertie("_canApplyGravityBordersAndFace5").boolValue = datas.CanApplyGravityBordersAndFace5;
            cube.GetPropertie("_canApplyGravityBordersAndFace6").boolValue = datas.CanApplyGravityBordersAndFace6;

            cube.GetPropertie("_canApplyGravity").boolValue = datas.CanApplyGravity;
        }
예제 #3
0
        private bool CanApplyFaces(Vector3 K, GravityOverrideCube cube)
        {
            bool isAboveFace1 = _face1.IsAbove(K);
            bool isAboveFace2 = _face2.IsAbove(K);
            bool isAboveFace3 = _face3.IsAbove(K);
            bool isAboveFace4 = _face4.IsAbove(K);
            bool isAboveFace5 = _face5.IsAbove(K);
            bool isAboveFace6 = _face6.IsAbove(K);

            if (!cube.Face1 && isAboveFace1 && !isAboveFace5 && !isAboveFace3 && !isAboveFace4 && !isAboveFace2)
            {
                return(false);
            }
            if (!cube.Face2 && isAboveFace2 && !isAboveFace1 && !isAboveFace3 && !isAboveFace6 && !isAboveFace4)
            {
                return(false);
            }
            if (!cube.Face3 && isAboveFace3 && !isAboveFace5 && !isAboveFace6 && !isAboveFace2 && !isAboveFace1)
            {
                return(false);
            }
            if (!cube.Face4 && isAboveFace4 && !isAboveFace1 && !isAboveFace5 && !isAboveFace6 && !isAboveFace2)
            {
                return(false);
            }
            if (!cube.Face5 && isAboveFace5 && !isAboveFace1 && !isAboveFace3 && !isAboveFace6 && !isAboveFace4)
            {
                return(false);
            }
            if (!cube.Face6 && isAboveFace6 && !isAboveFace5 && !isAboveFace3 && !isAboveFace2 && !isAboveFace4)
            {
                return(false);
            }
            if (!cube.Line1 && isAboveFace1 && isAboveFace5 && !isAboveFace3 && !isAboveFace4)
            {
                return(false);
            }
            if (!cube.Line2 && isAboveFace1 && isAboveFace3 && !isAboveFace5 && !isAboveFace2)
            {
                return(false);
            }
            if (!cube.Line3 && isAboveFace1 && isAboveFace2 && !isAboveFace3 && !isAboveFace4)
            {
                return(false);
            }
            if (!cube.Line4 && isAboveFace1 && isAboveFace4 && !isAboveFace5 && !isAboveFace2)
            {
                return(false);
            }
            if (!cube.Line5 && isAboveFace5 && isAboveFace6 && !isAboveFace3 && !isAboveFace4)
            {
                return(false);
            }
            if (!cube.Line6 && isAboveFace5 && isAboveFace3 && !isAboveFace6 && !isAboveFace1)
            {
                return(false);
            }
            if (!cube.Line7 && isAboveFace5 && isAboveFace4 && !isAboveFace6 && !isAboveFace1)
            {
                return(false);
            }
            if (!cube.Line8 && isAboveFace6 && isAboveFace3 && !isAboveFace2 && !isAboveFace5)
            {
                return(false);
            }
            if (!cube.Line9 && isAboveFace6 && isAboveFace4 && !isAboveFace2 && !isAboveFace5)
            {
                return(false);
            }
            if (!cube.Line10 && isAboveFace3 && isAboveFace2 && !isAboveFace1 && !isAboveFace6)
            {
                return(false);
            }
            if (!cube.Line11 && isAboveFace2 && isAboveFace6 && !isAboveFace3 && !isAboveFace4)
            {
                return(false);
            }
            if (!cube.Line12 && isAboveFace2 && isAboveFace4 && !isAboveFace1 && !isAboveFace6)
            {
                return(false);
            }
            if (!cube.Point1 && isAboveFace1 && isAboveFace5 && isAboveFace4)
            {
                return(false);
            }
            if (!cube.Point2 && isAboveFace5 && isAboveFace6 && isAboveFace4)
            {
                return(false);
            }
            if (!cube.Point3 && isAboveFace6 && isAboveFace2 && isAboveFace4)
            {
                return(false);
            }
            if (!cube.Point4 && isAboveFace1 && isAboveFace2 && isAboveFace4)
            {
                return(false);
            }
            if (!cube.Point5 && isAboveFace1 && isAboveFace3 && isAboveFace5)
            {
                return(false);
            }
            if (!cube.Point6 && isAboveFace3 && isAboveFace5 && isAboveFace6)
            {
                return(false);
            }
            if (!cube.Point7 && isAboveFace3 && isAboveFace6 && isAboveFace2)
            {
                return(false);
            }
            if (!cube.Point8 && isAboveFace1 && isAboveFace2 && isAboveFace3)
            {
                return(false);
            }
            return(true);
        }
예제 #4
0
        ///
        ///      6 ------------ 7
        ///    / |    3       / |
        ///  5 ------------ 8   |
        ///  |   |          |   |
        ///  | 5 |     6    | 2 |     ------8-----
        ///  |   |   1      |   |
        ///  |  2 ----------|-- 3
        ///  |/       4     | /     |       3      |
        ///  1 ------------ 4
        ///
        ///          6 ------6----- 5 ------2----- 8 -----10----- 7       -
        ///          |              |              |              |
        ///          |              |              |              |
        ///          5      5       1       1      3       2      11       6       |
        ///          |              |              |              |
        ///          |              |              |              |
        ///          2 ------7----- 1 ------4----- 4 ------12---- 3       -
        ///
        ///
        ///                         |       4      |
        ///
        ///
        ///                           ------9-----
        public static GravityOverrideCube DrawCube(ExtCube cube, GravityOverrideCube cubeGravity, Color color, out bool hasChanged)
        {
            hasChanged = false;
            bool changed = hasChanged;

            float sizeLine  = cube.LocalScale.magnitude / 35;
            float sizePoint = cube.LocalScale.magnitude / 30;

            Color colorQuad = new Color(color.r, color.g, color.b, color.a * 0.5f);
            Color colorLine = new Color(color.r, color.g, color.b, color.a * 0.8f);

            //we have to order the button from the point of view of the camera
            FloatRange[] facesArranged = ExtCube.GetOrdersOfFaceFromPoint(cube, ExtSceneView.GetSceneViewCameraTransform().position);
            for (int i = facesArranged.Length - 1; i >= 0; i--)
            {
                switch (facesArranged[i].Min)
                {
                case 1:
                    cubeGravity.Face1  = DrawQuadFace(new ExtQuad(cube.P1, cube.P5, cube.P8, cube.P4), cubeGravity.Face1, false, colorQuad, out changed); hasChanged = (changed) ? true : hasChanged;
                    cubeGravity.Line1  = DrawLineTrunk(cubeGravity.Line1, cube.P1, cube.P5, colorLine, sizeLine, out changed); hasChanged = (changed) ? true : hasChanged;
                    cubeGravity.Line2  = DrawLineTrunk(cubeGravity.Line2, cube.P5, cube.P8, colorLine, sizeLine, out changed); hasChanged = (changed) ? true : hasChanged;
                    cubeGravity.Line3  = DrawLineTrunk(cubeGravity.Line3, cube.P8, cube.P4, colorLine, sizeLine, out changed); hasChanged = (changed) ? true : hasChanged;
                    cubeGravity.Line4  = DrawLineTrunk(cubeGravity.Line4, cube.P4, cube.P1, colorLine, sizeLine, out changed); hasChanged = (changed) ? true : hasChanged;
                    cubeGravity.Point1 = DrawPoint(cubeGravity.Point1, cube.P1, color, sizePoint, out changed); hasChanged = (changed) ? true : hasChanged;
                    cubeGravity.Point5 = DrawPoint(cubeGravity.Point5, cube.P5, color, sizePoint, out changed); hasChanged = (changed) ? true : hasChanged;
                    cubeGravity.Point8 = DrawPoint(cubeGravity.Point8, cube.P8, color, sizePoint, out changed); hasChanged = (changed) ? true : hasChanged;
                    cubeGravity.Point4 = DrawPoint(cubeGravity.Point4, cube.P4, color, sizePoint, out changed); hasChanged = (changed) ? true : hasChanged;
                    break;

                case 2:
                    cubeGravity.Face2  = DrawQuadFace(new ExtQuad(cube.P4, cube.P8, cube.P7, cube.P3), cubeGravity.Face2, false, colorQuad, out changed); hasChanged = (changed) ? true : hasChanged;
                    cubeGravity.Line3  = DrawLineTrunk(cubeGravity.Line3, cube.P4, cube.P8, colorLine, sizeLine, out changed); hasChanged = (changed) ? true : hasChanged;
                    cubeGravity.Line10 = DrawLineTrunk(cubeGravity.Line10, cube.P8, cube.P7, colorLine, sizeLine, out changed); hasChanged = (changed) ? true : hasChanged;
                    cubeGravity.Line11 = DrawLineTrunk(cubeGravity.Line11, cube.P7, cube.P3, colorLine, sizeLine, out changed); hasChanged = (changed) ? true : hasChanged;
                    cubeGravity.Line12 = DrawLineTrunk(cubeGravity.Line12, cube.P3, cube.P4, colorLine, sizeLine, out changed); hasChanged = (changed) ? true : hasChanged;
                    cubeGravity.Point4 = DrawPoint(cubeGravity.Point4, cube.P4, color, sizePoint, out changed); hasChanged = (changed) ? true : hasChanged;
                    cubeGravity.Point8 = DrawPoint(cubeGravity.Point8, cube.P8, color, sizePoint, out changed); hasChanged = (changed) ? true : hasChanged;
                    cubeGravity.Point7 = DrawPoint(cubeGravity.Point7, cube.P7, color, sizePoint, out changed); hasChanged = (changed) ? true : hasChanged;
                    cubeGravity.Point3 = DrawPoint(cubeGravity.Point3, cube.P3, color, sizePoint, out changed); hasChanged = (changed) ? true : hasChanged;
                    break;

                case 3:
                    cubeGravity.Face3  = DrawQuadFace(new ExtQuad(cube.P5, cube.P6, cube.P7, cube.P8), cubeGravity.Face3, false, colorQuad, out changed); hasChanged = (changed) ? true : hasChanged;
                    cubeGravity.Line6  = DrawLineTrunk(cubeGravity.Line6, cube.P5, cube.P6, colorLine, sizeLine, out changed); hasChanged = (changed) ? true : hasChanged;
                    cubeGravity.Line8  = DrawLineTrunk(cubeGravity.Line8, cube.P6, cube.P7, colorLine, sizeLine, out changed); hasChanged = (changed) ? true : hasChanged;
                    cubeGravity.Line10 = DrawLineTrunk(cubeGravity.Line10, cube.P7, cube.P8, colorLine, sizeLine, out changed); hasChanged = (changed) ? true : hasChanged;
                    cubeGravity.Line2  = DrawLineTrunk(cubeGravity.Line2, cube.P5, cube.P8, colorLine, sizeLine, out changed); hasChanged = (changed) ? true : hasChanged;
                    cubeGravity.Point5 = DrawPoint(cubeGravity.Point5, cube.P5, color, sizePoint, out changed); hasChanged = (changed) ? true : hasChanged;
                    cubeGravity.Point6 = DrawPoint(cubeGravity.Point6, cube.P6, color, sizePoint, out changed); hasChanged = (changed) ? true : hasChanged;
                    cubeGravity.Point7 = DrawPoint(cubeGravity.Point7, cube.P7, color, sizePoint, out changed); hasChanged = (changed) ? true : hasChanged;
                    cubeGravity.Point8 = DrawPoint(cubeGravity.Point8, cube.P8, color, sizePoint, out changed); hasChanged = (changed) ? true : hasChanged;
                    break;

                case 4:
                    cubeGravity.Face4  = DrawQuadFace(new ExtQuad(cube.P2, cube.P1, cube.P4, cube.P3), cubeGravity.Face4, false, colorQuad, out changed); hasChanged = (changed) ? true : hasChanged;
                    cubeGravity.Line7  = DrawLineTrunk(cubeGravity.Line7, cube.P2, cube.P1, colorLine, sizeLine, out changed); hasChanged = (changed) ? true : hasChanged;
                    cubeGravity.Line4  = DrawLineTrunk(cubeGravity.Line4, cube.P1, cube.P4, colorLine, sizeLine, out changed); hasChanged = (changed) ? true : hasChanged;
                    cubeGravity.Line12 = DrawLineTrunk(cubeGravity.Line12, cube.P4, cube.P3, colorLine, sizeLine, out changed); hasChanged = (changed) ? true : hasChanged;
                    cubeGravity.Line9  = DrawLineTrunk(cubeGravity.Line9, cube.P2, cube.P3, colorLine, sizeLine, out changed); hasChanged = (changed) ? true : hasChanged;
                    cubeGravity.Point2 = DrawPoint(cubeGravity.Point2, cube.P2, color, sizePoint, out changed); hasChanged = (changed) ? true : hasChanged;
                    cubeGravity.Point1 = DrawPoint(cubeGravity.Point1, cube.P1, color, sizePoint, out changed); hasChanged = (changed) ? true : hasChanged;
                    cubeGravity.Point4 = DrawPoint(cubeGravity.Point4, cube.P4, color, sizePoint, out changed); hasChanged = (changed) ? true : hasChanged;
                    cubeGravity.Point3 = DrawPoint(cubeGravity.Point3, cube.P3, color, sizePoint, out changed); hasChanged = (changed) ? true : hasChanged;
                    break;

                case 5:
                    cubeGravity.Face5  = DrawQuadFace(new ExtQuad(cube.P2, cube.P6, cube.P5, cube.P1), cubeGravity.Face5, false, colorQuad, out changed); hasChanged = (changed) ? true : hasChanged;
                    cubeGravity.Line5  = DrawLineTrunk(cubeGravity.Line5, cube.P2, cube.P6, colorLine, sizeLine, out changed); hasChanged = (changed) ? true : hasChanged;
                    cubeGravity.Line6  = DrawLineTrunk(cubeGravity.Line6, cube.P6, cube.P5, colorLine, sizeLine, out changed); hasChanged = (changed) ? true : hasChanged;
                    cubeGravity.Line1  = DrawLineTrunk(cubeGravity.Line1, cube.P5, cube.P1, colorLine, sizeLine, out changed); hasChanged = (changed) ? true : hasChanged;
                    cubeGravity.Line7  = DrawLineTrunk(cubeGravity.Line7, cube.P1, cube.P2, colorLine, sizeLine, out changed); hasChanged = (changed) ? true : hasChanged;
                    cubeGravity.Point2 = DrawPoint(cubeGravity.Point2, cube.P2, color, sizePoint, out changed); hasChanged = (changed) ? true : hasChanged;
                    cubeGravity.Point6 = DrawPoint(cubeGravity.Point6, cube.P6, color, sizePoint, out changed); hasChanged = (changed) ? true : hasChanged;
                    cubeGravity.Point5 = DrawPoint(cubeGravity.Point5, cube.P5, color, sizePoint, out changed); hasChanged = (changed) ? true : hasChanged;
                    cubeGravity.Point1 = DrawPoint(cubeGravity.Point1, cube.P1, color, sizePoint, out changed); hasChanged = (changed) ? true : hasChanged;
                    break;

                case 6:
                    cubeGravity.Face6  = DrawQuadFace(new ExtQuad(cube.P3, cube.P7, cube.P6, cube.P2), cubeGravity.Face6, false, colorQuad, out changed); hasChanged = (changed) ? true : hasChanged;
                    cubeGravity.Line11 = DrawLineTrunk(cubeGravity.Line11, cube.P3, cube.P7, colorLine, sizeLine, out changed); hasChanged = (changed) ? true : hasChanged;
                    cubeGravity.Line8  = DrawLineTrunk(cubeGravity.Line8, cube.P7, cube.P6, colorLine, sizeLine, out changed); hasChanged = (changed) ? true : hasChanged;
                    cubeGravity.Line5  = DrawLineTrunk(cubeGravity.Line5, cube.P6, cube.P2, colorLine, sizeLine, out changed); hasChanged = (changed) ? true : hasChanged;
                    cubeGravity.Line9  = DrawLineTrunk(cubeGravity.Line9, cube.P3, cube.P2, colorLine, sizeLine, out changed); hasChanged = (changed) ? true : hasChanged;
                    cubeGravity.Point3 = DrawPoint(cubeGravity.Point3, cube.P3, color, sizePoint, out changed); hasChanged = (changed) ? true : hasChanged;
                    cubeGravity.Point7 = DrawPoint(cubeGravity.Point7, cube.P7, color, sizePoint, out changed); hasChanged = (changed) ? true : hasChanged;
                    cubeGravity.Point6 = DrawPoint(cubeGravity.Point6, cube.P6, color, sizePoint, out changed); hasChanged = (changed) ? true : hasChanged;
                    cubeGravity.Point2 = DrawPoint(cubeGravity.Point2, cube.P2, color, sizePoint, out changed); hasChanged = (changed) ? true : hasChanged;
                    break;
                }
            }
            return(cubeGravity);
        }