Exemplo n.º 1
0
    public void Generate()
    {
        ObjBuilder.tileSize = 10;
        var floor = ObjBuilder.AddNode("floorRoot", transform);
        int w     = Random.Range(minSize, maxSize);
        int h     = Random.Range(minSize, maxSize);

        ObjBuilder.AddPlane(floorPrefab, floor, w, h);

        var wall = ObjBuilder.AddNode("wallRoot", transform);

        var Nwall = ObjBuilder.AddNode("wall", wall);
        var gos   = ObjBuilder.AddWall(wallPrefab, Nwall, w, 1);

        var Swall = ObjBuilder.AddNode("wall", wall);

        Swall.Translate(new Vector3((w + 1) * ObjBuilder.tileSize, 0, h * ObjBuilder.tileSize));
        ObjBuilder.AdjFace(Swall, ObjBuilder.FaceToward.S);
        ObjBuilder.AddWall(wallPrefab, Swall, w, 1);

        var Ewall = ObjBuilder.AddNode("wall", wall);

        Ewall.Translate(new Vector3((w + 1) * ObjBuilder.tileSize, 0, -ObjBuilder.tileSize));
        ObjBuilder.AdjFace(Ewall, ObjBuilder.FaceToward.W);
        ObjBuilder.AddWall(wallPrefab, Ewall, h, 1);

        var Wwall = ObjBuilder.AddNode("wall", wall);

        Wwall.Translate(ObjBuilder.tileSize, 0, (h) * ObjBuilder.tileSize);
        ObjBuilder.AdjFace(Wwall, ObjBuilder.FaceToward.E);
        ObjBuilder.AddWall(wallPrefab, Wwall, h, 1);
    }
Exemplo n.º 2
0
 //public GameObject torch;
 public void AddWall2(GameObject obj, Transform parent, int length, int height = 2)
 {
     for (int h = 0; h < height; h++)
     {
         ObjBuilder.AddObj(cornerWall, new Vector3Int(-1, h, 0), parent);
         for (int i = 0; i < length; i++)
         {
             if ((h == 0) && (i == length / 2))
             {
                 var door = ObjBuilder.AddObj(doorPrefab, new Vector3(i, h, 0), parent);
                 door.transform.Translate(new Vector3(-tileSize / 2, 0, 0));
             }
             else
             {
                 var wall = ObjBuilder.AddObj(obj, new Vector3(i, h, 0), parent);
                 if ((h > 0) && (i % 2 == 1))
                 {
                     //Instantiate(torch, wall.transform);
                 }
                 if (Random.value < 0.3f)
                 {
                     if (h == 0)
                     {
                         //Instantiate(墙角死人, wall.transform).transform.Translate(2.5f, 0.1f, 0.5f); ;
                     }
                     else
                     {
                         //Instantiate(墙上死人, wall.transform).transform.Translate(2.5f, 1.5f, 0.5f);
                     }
                 }
             }
         }
     }
 }
Exemplo n.º 3
0
    public Vector3Int AddCorridor(Vector3Int pos, int width = 0, int length = 3, FaceToward face = FaceToward.S)
    {
        var corridorRoot = ObjBuilder.AddNode("Corridor", dungeonRoot, new Vector3Int((int)(pos.x), (int)(pos.z), (int)(pos.y)));
        var floorRoot    = ObjBuilder.AddNode("Floor", corridorRoot);

        for (int row = 0; row < length; row++)
        {
            for (int col = -width; col <= width; col++)
            {
                AddFloor(new Vector3(col, 0, row), floorRoot);
            }
        }
        var wallRoot = ObjBuilder.AddNode("Wall", corridorRoot);

        for (int i = 0; i < length; i++)
        {
            AddWall(wallPrefab, new Vector3Int(-width, 0, i), wallRoot, FaceToward.E);
            AddWall(wallPrefab, new Vector3Int(width + 1, 0, i), wallRoot, FaceToward.W);
        }
        ObjBuilder.AdjFace(corridorRoot, face);
        switch (face)
        {
        case ObjBuilder.FaceToward.S: return(pos + Vector3Int.down * length);

        case ObjBuilder.FaceToward.N: return(pos + Vector3Int.up * length);

        case ObjBuilder.FaceToward.E: return(pos + Vector3Int.right * length);

        case ObjBuilder.FaceToward.W: return(pos + Vector3Int.left * length);
        }
        return(pos);
    }
        public void SetOptions()
        {
            MenuOptions.Add("1. Cancel");

            StoreList = new List <AStore>();
            StoreList = ObjBuilder.BuildStores(DataAccessor.GetStores());
            var i = 1;

            foreach (var store in StoreList)
            {
                i += 1;
                MenuOptions.Add($"{i}. {store.Name}");
            }
        }
Exemplo n.º 5
0
        private Func <object> GetTestFunc(RunTestOperation op)
        {
            var classParts  = op.ClassName.split(".");
            var currentPart = window.self[classParts[0]];

            for (int i = 1; i < classParts.length; i++)
            {
                currentPart = currentPart[classParts[i]];
            }

            Action ctor     = (Action)currentPart;
            var    instance = ObjBuilder.Create(ctor)();

            return((Func <object>)instance[op.MethodName]);
        }
Exemplo n.º 6
0
    public void Generator()
    {
        grid = new Grid2DInt(mapSize, mapSize);
        grid.Load();

        var border = WaterShed.Run <int>(grid.GetGrid(), Vector2Int.zero, 0, 1);

        Grid2D <byte> tmpGrid = Grid2D <byte> .Create(grid.Width, grid.Height, 0);

        Grid2D <int> src = Grid2D <int> .Create(grid.Width, grid.Height, 255);

        src.data = grid.data;

        var allfloor = ObjBuilder.AddNode("Floor", transform);
        var allWall  = ObjBuilder.AddNode("Wall", transform);

        for (int y = 0; y < grid.Height; y++)
        {
            for (int x = 0; x < grid.Width; x++)
            {
                if (grid[x, y] == 255)
                {
                    var pos   = new Vector3(x, 0, y);
                    var floor = ObjBuilder.AddNode("floor", allfloor, pos);
                    //ObjBuilder.AddObject(floorPack.get(), new Vector3(floorOffset.x, 0, floorOffset.y), floor);
                    var f = ObjBuilder.AddObj(floorPack.get(), Vector3.zero, floor);
                    ObjBuilder.AdjFace2(f.transform, (ObjBuilder.FaceToward)Random.Range(0, 4));
                    tmpGrid[x, y] = 1;


                    //ToDoAddWall;
                    if (grid.Is(new Vector2Int(x, y) + Vector2Int.up, 0))
                    {
                        if (border.Is(new Vector2Int(x, y) + Vector2Int.up, 1))
                        {
                            var wall = ObjBuilder.AddObj(caveWall, pos + new Vector3(0, 0, .5f), allWall.transform);
                            wall.transform.Rotate(new Vector3(0, 180, 0));
                            tmpGrid[x, y] = 2;
                        }
                    }
                    if (grid.Is(new Vector2Int(x, y) + Vector2Int.down, 0))
                    {
                        if (border.Is(new Vector2Int(x, y) + Vector2Int.down, 1))
                        {
                            var wall = ObjBuilder.AddObj(caveWall, pos + new Vector3(0, 0, -.5f), allWall.transform);
                            tmpGrid[x, y] = 3;
                        }
                    }
                    if (grid.Is(new Vector2Int(x, y) + Vector2Int.left, 0))
                    {
                        if (border.Is(new Vector2Int(x, y) + Vector2Int.left, 1))
                        {
                            var wall = ObjBuilder.AddObj(caveWall, pos + new Vector3(-.5f, 0, 0), allWall.transform);
                            wall.transform.Rotate(new Vector3(0, 90, 0));
                            tmpGrid[x, y] = 4;
                        }
                    }
                    if (grid.Is(new Vector2Int(x, y) + Vector2Int.right, 0))
                    {
                        if (border.Is(new Vector2Int(x, y) + Vector2Int.right, 1))
                        {
                            var wall = ObjBuilder.AddObj(caveWall, pos + new Vector3(.5f, 0, 0), allWall.transform);
                            wall.transform.Rotate(new Vector3(0, -90, 0));
                            tmpGrid[x, y] = 5;
                        }
                    }
                }
                else
                {
                    if (grid.Is(new Vector2Int(x, y) + Vector2Int.up, 255) &&
                        grid.Is(new Vector2Int(x, y) + Vector2Int.down, 255) &&
                        grid.Is(new Vector2Int(x, y) + Vector2Int.left, 255) &&
                        grid.Is(new Vector2Int(x, y) + Vector2Int.right, 255))
                    {
                        var floor = ObjBuilder.AddNode("floor", allfloor, new Vector3(x, 0, y));
                        ObjBuilder.AddObj(floorPack.get(), new Vector3(floorOffset.x, 0, floorOffset.y), floor);
                        tmpGrid[x, y] = 6;
                    }
                }
            }
        }
        var renders = allfloor.GetComponentsInChildren <MeshRenderer>();

        foreach (var r in renders)
        {
            r.gameObject.AddComponent <MeshCollider>().convex = true;
            if (Random.value < lavaRate)
            {
                r.material = material;
                var l = Instantiate(light, r.transform);
                l.transform.Translate(new Vector3(-tileSize / 2, 0, tileSize / 2));
            }
            r.material.color = new Color(0.3f, 0.3f, 0.3f, 1);
        }

        for (int raw = 0; raw < tmpGrid.Height; raw++)
        {
            for (int col = 0; col < tmpGrid.Width; col++)
            {
                var pos = new Vector3(col, 0, raw);
                if (tmpGrid[col, raw] == 6)
                {
                    ObjBuilder.AddObj(centerCorner, pos, transform);
                }
                if (tmpGrid[col, raw] == 1)
                {
                    if (Random.value < .6f)
                    {
                        var misc = ObjBuilder.AddObj(floorMisc.get(), pos, transform);
                        misc.transform.Translate(new Vector3(Random.Range(-1f, 1f), 0, Random.Range(-1f, 1f)) * tileSize / 2);
                    }
                }
            }
        }
    }
Exemplo n.º 7
0
    //public GameObject 墙角死人;
    //public GameObject 墙上死人;
    //public GameObject 地上死人;

    public void AddRoom(DungeonRoom room)
    {
        var roomRoot = ObjBuilder.AddNode("Room", dungeonRoot, room.position);

        var floorRoot = ObjBuilder.AddNode("Floor", roomRoot);

        for (int row = -room.size.y; row <= room.size.y; row++)
        {
            for (int col = -room.size.x; col <= room.size.x; col++)
            {
                var floor = AddFloor(new Vector3(col, 0, row), floorRoot);
                if ((row % 3 == 0) && (col % 2 == 0))
                {
                    var light = Instantiate(光源, floor.transform);
                    light.transform.Translate(new Vector3(-tileSize / 2, 0, tileSize / 2));
                }
                else
                {
                    if (Random.value < 0.3f)
                    {
                        //var dead = Instantiate(地上死人, floor.transform);
                        //dead.transform.Translate(new Vector3(-tileSize / 2, 0.1f, tileSize/ 2));
                        //dead.transform.Rotate(new Vector3(0, Random.Range(-180, 180), 0));
                    }
                }
            }
        }
        //Add Wall
        var wallRoot = ObjBuilder.AddNode("Wall", roomRoot);

        var nRoot = ObjBuilder.AddNode("N", wallRoot);

        nRoot.Translate(new Vector3(-room.size.x * tileSize, 0, -room.size.y * tileSize));
        var sRoot = ObjBuilder.AddNode("S", wallRoot);

        sRoot.Translate(new Vector3(room.size.x * tileSize, 0, (room.size.y + 1) * tileSize));
        AdjFace(sRoot, FaceToward.S);
        var eRoot = ObjBuilder.AddNode("E", wallRoot);

        eRoot.Translate(new Vector3(-room.size.x * tileSize, 0, room.size.y * tileSize));
        AdjFace(eRoot, FaceToward.E);


        var wRoot = ObjBuilder.AddNode("W", wallRoot);

        wRoot.Translate(new Vector3((room.size.x + 1) * tileSize, 0, -room.size.y * tileSize));
        AdjFace(wRoot, FaceToward.W);
        AddWall2(wallPrefab, nRoot, room.size.x * 2 + 1, room.size.z);
        AddWall2(wallPrefab, sRoot, room.size.x * 2 + 1, room.size.z);
        AddWall2(wallPrefab, eRoot, room.size.y * 2 + 1, room.size.z);
        AddWall2(wallPrefab, wRoot, room.size.y * 2 + 1, room.size.z);

        var miscRoot = ObjBuilder.AddNode("Misc", roomRoot);

        for (int row = 1; row < room.size.y - 1; row++)
        {
            for (int col = 1; col < room.size.x - 1; col++)
            {
                if (Random.value < 0.1f)
                {
                    //AddMisc(wallGroundPrefab.get(), new Vector3Int(col, row, 0), floorRoot);
                }
            }
        }
    }
Exemplo n.º 8
0
 GameObject AddFloor(Vector3 pos, Transform parent)
 {
     return(ObjBuilder.AddObj(floorPack.get(), pos, parent));
 }