Example #1
0
        public void Generate()
        {
            float apothem = 0.5f * unit / Mathf.Tan(Mathf.PI / nSides);

            apex     = GeoObjConstruction.iPoint(spawnPoint.position + unit * Vector3.up);
            basePoly = GeoObjConstruction.rPoly(nSides, apothem, spawnPoint.position);
            dPyramid = GeoObjConstruction.dPyramid(basePoly, apex);

            if (prism)
            {
                dPyramid.sides.ForEach(p => p.LeapInteraction = false);
                dPyramid.sides.ForEach(p => p.transform.GetChild(0).gameObject.SetActive(false));

                iPrism = GeoObjConstruction.iPrism(basePoly, spawnPoint.position + unit * Vector3.up);
                iPrism.LeapInteraction = false;

                iPrism.sides.ForEach(p => GeoObjConstruction.dPyramid(p, apex).sides.ForEach(q => q.LeapInteraction = false));
                iPrism.sides.ForEach(p => p.LeapInteraction = false);

                iPrism.bases.ForEach(p => p.pointList.ForEach(q => q.LeapInteraction = false));
                iPrism.bases.ForEach(p => p.pointList.ForEach(q => q.GetComponent <MeshRenderer>().enabled = false));

                HW_GeoSolver.ins.AddDependence(basePoly2, apex);

                apex.GetComponent <InteractionBehaviour>().OnGraspedMovement += updateFigure;
            }
            else
            {
                HW_GeoSolver.ins.removeComponent(basePoly2);
                //iPrism.geoManager.removeComponent(iPrism.transform);
            }
            thisAS.clip = successClip;
            thisAS.Play();
        }
Example #2
0
        public static DependentPyramid dPyramid(AbstractPolygon basePoly, AbstractPoint apex)
        {
            DependentPyramid pyramid = DependentPyramid.Constructor();

            pyramid.basePolygon = basePoly;
            pyramid.apex        = apex;

            List <AbstractPolygon> sideList = new List <AbstractPolygon>();

            foreach (AbstractLineSegment baseLine in basePoly.lineList)
            {
                if (baseLine.GetComponent <InteractableLineSegment>() != null)
                {
                    List <AbstractPoint>       vertexList = new List <AbstractPoint>();
                    List <AbstractLineSegment> lineList   = new List <AbstractLineSegment>();

                    vertexList.Add(apex);
                    vertexList.Add(baseLine.GetComponent <InteractableLineSegment>().point1);
                    vertexList.Add(baseLine.GetComponent <InteractableLineSegment>().point2);

                    lineList.Add(baseLine);
                    lineList.Add(iLineSegment(apex, baseLine.GetComponent <InteractableLineSegment>().point1));
                    lineList.Add(iLineSegment(apex, baseLine.GetComponent <InteractableLineSegment>().point2));

                    sideList.Add(dPolygon(lineList, vertexList));
                }
                else
                {
                    List <AbstractPoint>       vertexList = new List <AbstractPoint>();
                    List <AbstractLineSegment> lineList   = new List <AbstractLineSegment>();

                    vertexList.Add(apex);
                    vertexList.Add(baseLine.GetComponent <DependentLineSegment>().point1);
                    vertexList.Add(baseLine.GetComponent <DependentLineSegment>().point2);

                    lineList.Add(baseLine);
                    lineList.Add(iLineSegment(apex, baseLine.GetComponent <DependentLineSegment>().point1));
                    lineList.Add(iLineSegment(apex, baseLine.GetComponent <DependentLineSegment>().point2));

                    sideList.Add(dPolygon(lineList, vertexList));
                }
            }

            pyramid.sides = sideList;

            HW_GeoSolver.ins.AddDependence(pyramid, basePoly);//This dependency must be first on the list for XMLManager Loading to operate correctly

            foreach (AbstractPolygon poly in sideList)
            {
                HW_GeoSolver.ins.AddDependence(pyramid, poly);
            }

            return(pyramid);
        }