コード例 #1
0
    // Generate houses based on noise height value
    private void GenerateHouses()
    {
        int   aboveGroundPlaceholderY  = 10;
        int   checkForEveryCoordinates = 50;
        float minNoiseHeight           = 0.05f;

        float[,] noiseMap = GenerateCityNoiseMap(this.mapWidth, this.mapHeight, this.offsets);

        for (int y = 0; y < mapHeight; y += checkForEveryCoordinates)
        {
            for (int x = 0; x < mapWidth; x += checkForEveryCoordinates)
            {
                // If the current location is within the noisemap position
                if (noiseMap[x, y] <= minNoiseHeight)
                {
                    Vector3 position = new Vector3(x + this.offsets.x, aboveGroundPlaceholderY, y + this.offsets.y);

                    // Get random building index from thhe list of buildings
                    GameObject building = buildingGenerator.Generate(position);
                    building.SetActive(false);

                    // Calculate bounds and calculate the houseposition for the center of the house, also get the correct Y value for the building
                    Bounds  houseBounds   = CalculateBounds(building);
                    Vector3 housePosition = PositionCorrection(position);

                    Vector3 tilePosition = new Vector3(this.offsets.x, 0, this.offsets.y);

                    // Get tile and check if it exists before making a house
                    Tile tile = WorldBuilder.GetTile(tilePosition);
                    // Check if valid position
                    if (tile != null && ValidHousePosition(housePosition, houseBounds))
                    {
                        building.transform.position = housePosition;
                        building.SetActive(true);

                        // Turn house with consistent random numbers
                        int     xRandomIndex   = terrainGenerator.RandomNumbers[(x + 1) * (y + 1) * Math.Abs((int)this.offsets.x) % terrainGenerator.RandomNumbers.Length];
                        int     zRandomIndex   = terrainGenerator.RandomNumbers[(x + 1) * (y + 1) * Math.Abs((int)this.offsets.y) % (terrainGenerator.RandomNumbers.Length - 1)];
                        Vector3 lookAtPosition = new Vector3(xRandomIndex, building.transform.position.y, zRandomIndex);
                        building.transform.LookAt(lookAtPosition);

                        // Add house to tile
                        tile.AddBuilding(building);
                    }
                    else
                    {
                        Destroy(building);
                    }
                }
            }
        }
    }
コード例 #2
0
    public static bool AddBuilding(Tile givenTile, string buildingType, Character builder)
    {
        Building newBuilding;

        switch (buildingType)
        {
        case "Farm":
            newBuilding = new Farm();
            break;

        case "LumberMill":
            newBuilding = new LumberMill();
            break;

        case "City":
            newBuilding = new City();
            break;

        case "Road":
            newBuilding = new Road();
            break;

        default:
            newBuilding = null;
            throw new KeyNotFoundException("The building type: " + buildingType + " does not exist and an attempt was made to create it");
        }

        if (newBuilding != null && builder.RulesDomain(givenTile.GetDomain()))
        {
            givenTile.AddBuilding(newBuilding);
            // DomainDictionary.GetDomain(givenTile.GetDomain()).AddBuilding(givenTile.GetPosition());
            return(true);
        }
        else
        {
            Debug.Log("You can't build " + newBuilding + " at " + givenTile.GetDomain());
            return(false);
        }
    }
コード例 #3
0
    public void AddBuilding(Tile givenTile, Character givenCharacter, string buildingType)
    {
        Building newBuilding;

        switch (buildingType)
        {
        case "Farm":
            newBuilding = new Farm();
            break;

        case "LumberMill":
            newBuilding = new LumberMill();
            break;

        case "City":
            newBuilding = new City();
            break;

        case "Road":
            newBuilding = new Road();
            break;

        default:
            newBuilding = null;
            Debug.Log("Building doesn't exist");
            break;
        }
        if (newBuilding != null && givenCharacter.RulesDomain(givenTile.GetDomain()))
        {
            givenTile.AddBuilding(newBuilding);
            throw new System.NotImplementedException();
            //DomainDictionary.GetDomain(givenTile.GetDomain()).AddBuilding(givenTile.GetPosition());
        }
        else
        {
            Debug.Log("You can't build " + newBuilding + " at " + givenTile.GetDomain());
        }
    }
コード例 #4
0
ファイル: Map.cs プロジェクト: Phiras55/EnviroNet
    public void AddComponentOnTile(Tile tile)
    {
        GameObject b        = Instantiate(buildingManager.GetPrefab(currentBuilding));
        Building   building = b.GetComponent <Building>();
        Tile       t2       = GetTile(FindTile(tile));

        Vector2 v1 = FindTile(currentTile);
        Vector2 v2 = FindTile(tile);

        Vector2 v = v1 - v2;


        switch (currentBuilding)
        {
        case BUILDING_TYPE.CABLE:
            if (v == new Vector2(1, 0))
            {
                tile.AddBuilding(building, DIRECTION.RIGHT, POSITION_TYPE.CENTER, true, false);
                currentTile.AddBuilding(building, DIRECTION.LEFT, POSITION_TYPE.CENTER, false, false);
            }
            if (v == new Vector2(0, -1))
            {
                tile.AddBuilding(building, DIRECTION.BOTTOM, POSITION_TYPE.CENTER, true, false);
                currentTile.AddBuilding(building, DIRECTION.TOP, POSITION_TYPE.CENTER, false, false);
            }
            if (v == new Vector2(-1, 0))
            {
                tile.AddBuilding(building, DIRECTION.LEFT, POSITION_TYPE.CENTER, true, false);
                currentTile.AddBuilding(building, DIRECTION.RIGHT, POSITION_TYPE.CENTER, false, false);
            }
            if (v == new Vector2(0, 1))
            {
                tile.AddBuilding(building, DIRECTION.TOP, POSITION_TYPE.CENTER, true, false);
                currentTile.AddBuilding(building, DIRECTION.BOTTOM, POSITION_TYPE.CENTER, false, false);
            }
            break;

        case BUILDING_TYPE.WIFI:
            if (v == new Vector2(1, 1))
            {
                tile.AddBuilding(building, DIRECTION.TOP_RIGHT, POSITION_TYPE.CENTER, true, false);
                currentTile.AddBuilding(building, DIRECTION.BOTTOM_LEFT, POSITION_TYPE.CENTER, false, false);
            }
            if (v == new Vector2(1, -1))
            {
                tile.AddBuilding(building, DIRECTION.BOTTOM_RIGHT, POSITION_TYPE.CENTER, true, false);
                currentTile.AddBuilding(building, DIRECTION.TOP_LEFT, POSITION_TYPE.CENTER, false, false);
            }
            if (v == new Vector2(-1, -1))
            {
                tile.AddBuilding(building, DIRECTION.BOTTOM_LEFT, POSITION_TYPE.CENTER, true, false);
                currentTile.AddBuilding(building, DIRECTION.TOP_RIGHT, POSITION_TYPE.CENTER, false, false);
            }
            if (v == new Vector2(-1, 1))
            {
                tile.AddBuilding(building, DIRECTION.TOP_LEFT, POSITION_TYPE.CENTER, true, false);
                currentTile.AddBuilding(building, DIRECTION.BOTTOM_RIGHT, POSITION_TYPE.CENTER, false, false);
            }
            break;

        case BUILDING_TYPE.LASER:
            if (v.x > 1 && v.y == 0)
            {
                tile.AddBuilding(building, DIRECTION.RIGHT, POSITION_TYPE.CENTER, true, false);
                currentTile.AddBuilding(building, DIRECTION.LEFT, POSITION_TYPE.CENTER, false, false);
            }
            if (v.x == 0 && v.y < -1)
            {
                tile.AddBuilding(building, DIRECTION.BOTTOM, POSITION_TYPE.CENTER, true, false);
                currentTile.AddBuilding(building, DIRECTION.TOP, POSITION_TYPE.CENTER, false, false);
            }
            if (v.x < -1 && v.y == 0)
            {
                tile.AddBuilding(building, DIRECTION.LEFT, POSITION_TYPE.CENTER, true, false);
                currentTile.AddBuilding(building, DIRECTION.RIGHT, POSITION_TYPE.CENTER, false, false);
            }
            if (v.x == 0 && v.y > 1)
            {
                tile.AddBuilding(building, DIRECTION.TOP, POSITION_TYPE.CENTER, true, false);
                currentTile.AddBuilding(building, DIRECTION.BOTTOM, POSITION_TYPE.CENTER, false, false);
            }
            break;

        case BUILDING_TYPE.SATELLITE:
            tile.AddBuilding(building, DIRECTION.CENTER, POSITION_TYPE.LEFT, true, false);
            currentTile.AddBuilding(building, DIRECTION.CENTER, POSITION_TYPE.RIGHT, false, false);
            break;
        }
    }