示例#1
0
文件: Way.cs 项目: Cdrix/SM
    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);
    }
示例#2
0
文件: Vertexer.cs 项目: Cdrix/SM
    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);
    }
示例#3
0
文件: Lot.cs 项目: Cdrix/SM
 //returns current index of this lot.
 public int IndexOfCurrentLotBeingHover(Vector3 objPos)
 {
     if (UMesh.Contains(objPos, squareStart, squareEnd))
     {
         return(Index);
     }
     return(-1);
 }
示例#4
0
    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);
    }
示例#5
0
    /// <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;
            }
        }
    }
示例#6
0
文件: SubPolyr.cs 项目: Cdrix/SM
    /// 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);
    }