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(); }
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); }