Exemplo n.º 1
0
    public TerrainChunk CreateMesh()
    {
        GameObject chunkObject = MeshGenerator.CreateEmptyObject("TerrainChunk", "Ground");

        MeshGenerator.ApplyMesh(chunkObject, Vertices, Triangles, MaterialHandler.Instance.TerrainColor);

        TerrainChunk chunk = chunkObject.AddComponent <TerrainChunk>();

        return(chunk);
    }
    void GenerateMap()
    {
        Map map = new Map(mapWidth, mapHeight);

        RandomFillMap(map);

        for (int i = 0; i < smoothingIterations; i++)
        {
            SmoothMap(map);
        }

        if (fillThreshold > 0)
        {
            RemoveSmallRegions(map, 1, 0);
        }


        MeshGenerator meshGen      = GetComponent <MeshGenerator>();
        Map           tileMap      = meshGen.GenerateMap(map);
        Map           tileSheetMap = new Map(tileMap.Width, tileMap.Height);
        Map           edgeMap      = GenerateEdgeMap(tileMap, 0, 15);

        List <List <Coord> > landRegions = GetRegions(tileMap, 0);

        foreach (List <Coord> region in landRegions)
        {
            foreach (Coord coord in region)
            {
                byte tileByteAddress = edgeMap.ActiveNeighborByte(coord.X, coord.Y, 1);
                if (edgeMap.IsInRange(coord.X, coord.Y) && edgeMap.ActiveNeighborCount(coord.X, coord.Y, 1) > 0)
                {
                    tileMap[coord.X, coord.Y]      = tileByteAddress;
                    tileSheetMap[coord.X, coord.Y] = 1;
                }
            }
        }

        gizmoMap = edgeMap;
        meshGen.ApplyTileMap(tileSheetMap, tileMap);
        meshGen.ApplyMesh();
    }
Exemplo n.º 3
0
    private void TriangulateChunk()
    {
        grass.ClearMesh();
        fog.ClearMesh();
        liquid.ClearMesh();
        foundation.ClearMesh();
        structure.ClearMesh();
        ceiling.ClearMesh();
        ceilingMask.ClearMesh();

        for (int i = 0; i < cells.Length; i++)
        {
            TriangulateCell(cells[i]);
        }

        grass.ApplyMesh();
        fog.ApplyMesh();
        liquid.ApplyMesh();
        foundation.ApplyMesh();
        structure.ApplyMesh();
        ceiling.ApplyMesh();
        ceilingMask.ApplyMesh();
    }
    public static WagonFloor GenerateWagonFloor()
    {
        GameObject floorObject = MeshGenerator.CreateEmptyObject("Floor", "Train");

        Vector3[] vertices  = new Vector3[0];
        int[]     triangles = new int[0];

        float left  = -Wagon.Width / 2;
        float right = Wagon.Width / 2;
        float front = 0f;
        float back  = Wagon.Length;
        float bot   = 0f;
        float top   = WagonFloor.FloorHeight;

        MeshGenerator.AddCube(ref vertices, ref triangles, left, right, front, back, top, bot);
        MeshGenerator.ApplyMesh(floorObject, vertices, triangles, MaterialHandler.Instance.DefaultColor);

        WagonFloor floor = floorObject.AddComponent <WagonFloor>();

        floor.Init(null);

        return(floor);
    }
    private static void GeneratePlank(GameObject segmentObject, RailPathPoint p1, RailPathPoint p2, RailSettings settings, Vector3 toVector, Vector3 toVectorPpc)
    {
        GameObject plankObject = MeshGenerator.CreateEmptyObject("Plank", "Ground", segmentObject.transform);

        Vector3[] vertices  = new Vector3[0];
        int[]     triangles = new int[0];

        Vector3 frontOrigin  = p1.Position + toVector / 3f;
        Vector3 backOrigin   = p1.Position + toVector / 3f * 2f;
        Vector3 heightOffset = new Vector3(0f, settings.PlankHeight, 0f);

        Vector3 leftBackTop   = backOrigin - (toVectorPpc * settings.PlankWidth / 2f) + heightOffset;
        Vector3 rightBackTop  = backOrigin + (toVectorPpc * settings.PlankWidth / 2f) + heightOffset;
        Vector3 rightFrontTop = frontOrigin + (toVectorPpc * settings.PlankWidth / 2f) + heightOffset;
        Vector3 leftFrontTop  = frontOrigin - (toVectorPpc * settings.PlankWidth / 2f) + heightOffset;

        Vector3 leftBackBot   = backOrigin - (toVectorPpc * settings.PlankWidth / 2f);
        Vector3 rightBackBot  = backOrigin + (toVectorPpc * settings.PlankWidth / 2f);
        Vector3 rightFrontBot = frontOrigin + (toVectorPpc * settings.PlankWidth / 2f);
        Vector3 leftFrontBot  = frontOrigin - (toVectorPpc * settings.PlankWidth / 2f);

        MeshGenerator.AddCuboid(ref vertices, ref triangles, leftBackTop, rightBackTop, rightFrontTop, leftFrontTop, leftBackBot, rightBackBot, rightFrontBot, leftFrontBot);
        MeshGenerator.ApplyMesh(plankObject, vertices, triangles, MaterialHandler.Instance.RailPlankColor);
    }