private List <Lot> FindTheLots(List <Vector3> pathP) { List <Lot> lots = Program.gameScene.controllerMain.MeshController.Malla.Lots; List <Vector3> firstAndSecondPoints = ReturnFirstAndLastPointOnShore(pathP, 0.3f, pathP[0].y); UVisHelp.CreateHelpers(firstAndSecondPoints, Root.redSphereHelp); List <int> indexes = UMesh.ReturnIndexesContainDistinct(firstAndSecondPoints, lots); string msg = ""; for (int i = 0; i < indexes.Count; i++) { msg += indexes[i] + "\n"; } print(msg + "Count:" + indexes.Count); List <Lot> res = new List <Lot>(); for (int i = 0; i < indexes.Count; i++) { for (int j = 0; j < lots.Count; j++) { if (lots[j].Index == indexes[i]) { res.Add(lots[j]); } } } return(res); }
public List <Vector3> UpdateCurrentVertices(Malla mallaPass, int columns, int rows, float stepX, float stepZ, RaycastHit hitMouseOnTerrain) { if (mallaPass.Lots.Count == 0) { print("Malla pass had not lots assgined"); return(new List <Vector3>()); } //for GC var indexMiddle = UMesh.ReturnIndexContain(hitMouseOnTerrain.point, mallaPass.Lots); if (IsOnBankAlready(indexMiddle)) { return(_vertexBank[indexMiddle]); } List <Vector3> objects = new List <Vector3>(); objects = UMesh.ReturnThePos(hitMouseOnTerrain.point, stepX, stepZ, columns, rows); _indexesHover = UMesh.ReturnIndexesContain(objects, mallaPass.Lots); var res = UMesh.ReturnCurrentLotsVertex(IndexesHover, mallaPass.Lots); AddToBank(indexMiddle, res); return(res); }
//returns current index of this lot. public int IndexOfCurrentLotBeingHover(Vector3 objPos) { if (UMesh.Contains(objPos, squareStart, squareEnd)) { return(Index); } return(-1); }
bool ComplyWithTerraRules(Vector3 toEval) { bool isOnTheStartZone = UMesh.Contains(toEval, voidNWCorner, voidSECorner); bool regionContainTerraCry = MeshController.CrystalManager1.DoesMyRegionHasTerraCrystal(toEval); bool isHasMinHeight = toEval.y > minHeightToSpawn; bool isLowerThanMaxHeight = toEval.y < maxHeightToSpawn; return(!isOnTheStartZone && !regionContainTerraCry && isHasMinHeight && isLowerThanMaxHeight); }
/// <summary> /// Spawns specific type of object /// </summary> /// <param name="typePass">type of object</param> /// <param name="amountToSpawn">how many will spawn</param> void SpawnObj(H typePass, int amountToSpawn) { if (!isSpawned) { if (p.MeshController.AllVertexs.Count > 0) { List <Vector3> AllVertexs = p.MeshController.AllVertexs; //print(AllVertexs.Count + ".|AllVertexs.count"); if (usedVertexPos == null) { usedVertexPos = new bool[AllVertexs.Count]; } for (int i = 0; i < amountToSpawn; i++) { int index = rand.Next(0, AllVertexs.Count); //print(index + " index"); //this is where I ask for a root and will return me a random string root int rootToSpawnIndex = ReturnRandomRootIndex(typePass); bool isOnTheStartZone = UMesh.Contains(AllVertexs[index], voidNWCorner, voidSECorner); bool regionContainTerraCry = MeshController.CrystalManager1.DoesMyRegionHasTerraCrystal(AllVertexs[index]); bool isHasMinHeight = AllVertexs[index].y > minHeightToSpawn; bool isLowerThanMaxHeight = AllVertexs[index].y < maxHeightToSpawn; if (isHasMinHeight && isLowerThanMaxHeight && !usedVertexPos[index] && !isOnTheStartZone && !regionContainTerraCry) { Vector3 finaPos = ReturnIniPosOfSpawn(typePass, AllVertexs[index], 0); CreateObjAndAddToMainList(typePass, finaPos, rootToSpawnIndex, index); } else { //todo fix //showing rejected positions //UVisHelp.CreateText(AllVertexs[index], index + ""); //Debug.Log("terra: " + index + "." + isOnTheStartZone + "." + regionContainTerraCry + "." + // isHasMinHeight + "." + isLowerThanMaxHeight + "." + !usedVertexPos[index]); i--; } } isSpawned = true; } } }
/// Creates a list for the selected sub polygons given the columns and rows List <Vector3> CreateListSelected(ref List <Vector3> objsHitTerrain, int columns, int rows, Vector3 iniHit, SubDivider subDivide, bool isMouseOnTerrain, Vertexer vertex, UPoly poly, List <Vector3> currentHoverVertices) { objsHitTerrain = UMesh.ReturnThePos(iniHit, subDivide.XSubStep, subDivide.ZSubStep, columns, rows); List <Vector3> res = new List <Vector3>(); for (int i = 0; i < objsHitTerrain.Count; i++) { res = UList.AddOneListToList(res, CreateOneSubPoly(objsHitTerrain[i], isMouseOnTerrain, vertex, subDivide, poly, currentHoverVertices)); } //still needs to eliminate duplicates return(res); }