Esempio n. 1
0
    public void ButtonClicked(FacilitiesTileType type)
    {
        Vector3Int pos = lastTileClicked.LocalPlace;

        // builds new tile
        GameTiles.instance.BuildFacility(type, pos);

        // close dialog box
        var dialogBox = gameObject.GetComponent <BuildDialogBoxAPI>();

        dialogBox.Enabled(false);
    }
Esempio n. 2
0
    public FacilitiesTileType FindTypeByName(string name)
    {
        FacilitiesTileType returnType = null;

        foreach (FacilitiesTileType type in tileTypes)
        {
            if (type.Name == name)
            {
                returnType = type;
                break;
            }
        }
        return(returnType);
    }
Esempio n. 3
0
    public FacilitiesTileType FindType(string spriteName)
    {
        /* finds the type of a certain tile based on its sprite name
         * returns null if there is no type corresponding to the given name */

        FacilitiesTileType returnType = null;

        for (int i = 0; i < tileTypes.Length; i++)
        {
            var type = tileTypes[i];

            if (spriteName == type.SpriteName)
            {
                returnType = type;
                break;
            }
        }
        return(returnType);
    }
Esempio n. 4
0
 public void SetType(FacilitiesTileType type)
 {
     m_type = type;
 }
Esempio n. 5
0
    public void GetWorldTiles()
    {
        /* initialize tiles dictionaries */

        environmentTiles = new Dictionary <Vector3Int, EnvironmentTile>();
        facilitiesTiles  = new Dictionary <Vector3Int, FacilityTile>();


        // Get types
        EnvironmentTileTypeRoot environmentRoot = GetEnvironmentTypes();
        FacilitiesTileTypeRoot  facilitiesRoot  = GetFacilitiesTypes();

        // Generate resource names lists from the first type that is in our types lists
        foreach (KeyValuePair <string, int> type in environmentRoot.tileTypes[0].GenerateResourcesDictionary())
        {
            EnvironmentResourceNames.Add(type.Key);
        }
        foreach (KeyValuePair <string, int> type in facilitiesRoot.tileTypes[0].GenerateResourcesDictionary())
        {
            FacilitiesResourceNames.Add(type.Key);
        }

        // Add game tiles to our tile dictionary for further referencing, should it be the case (spoiler alert: it will!)
        // iterate through all tiles in the tilemap
        foreach (Vector3Int pos in environmentTilemap.cellBounds.allPositionsWithin)
        {
            var localPlace = new Vector3Int(pos.x, pos.y, pos.z);

            // ENVIRONMENT TILES
            // if there is a tile here...
            if (environmentTilemap.HasTile(localPlace))
            {
                // Find its type according to our parsed JSON data
                var TileBase = environmentTilemap.GetTile(localPlace);
                EnvironmentTileType tileType = environmentRoot.FindType(environmentTilemap.GetSprite(localPlace).name);                 // find the type of this tile by the name of its sprite

                // Assign type defined variables to actual tile representation that is to be stored in our dictionary of tiles
                var environmentTile = new EnvironmentTile
                {
                    LocalPlace    = localPlace,
                    TileBase      = environmentTilemap.GetTile(localPlace),
                    TilemapMember = environmentTilemap,

                    // Amount of resources available in this tile
                    Name      = tileType.Name,
                    Resources = tileType.GenerateResourcesDictionary()
                };

                // add the tile representation to our dictionnary of tiles
                environmentTiles.Add(environmentTile.LocalPlace, environmentTile);
            }
            // FACILITY TILES
            if (facilitiesTilemap.HasTile(localPlace))
            {
                var TileBase = facilitiesTilemap.GetTile(localPlace);
                FacilitiesTileType tileType  = facilitiesRoot.FindType(TileBase.name);                // find the type of this tile by the name of its sprite
                HealthBar          healthBar = null;
                Cross cross = null;

                if (tileType.Extractor)
                {
                    // Attach healthbar if facility is an extractor

                    var bar = Instantiate(healthBarTemplate);
                    bar.SetActive(true);
                    HealthBar script = bar.GetComponent <HealthBar>();
                    script.MoveTo(localPlace);
                    healthBar = script;
                }

                // Attach cross
                var crossInstance = Instantiate(crossTemplate);
                cross = crossInstance.GetComponent <Cross>();
                cross.MoveTo(localPlace);
                crossInstance.SetActive(false);

                var facilityTile = new FacilityTile
                {
                    LocalPlace    = localPlace,
                    TileBase      = facilitiesTilemap.GetTile(localPlace),
                    TilemapMember = facilitiesTilemap,

                    // Here, we represent consumption by negative values for its resource
                    // and we represent production by positive values
                    Name            = tileType.Name,
                    Resources       = tileType.GenerateResourcesDictionary(),
                    Extractor       = tileType.Extractor,
                    HealthBar       = healthBar,
                    PollutionRadius = tileType.PollutionRadius
                };

                if (facilityTile.PollutionRadius > 0)
                {
                    ApplyPollution(facilityTile);
                }

                facilitiesTiles.Add(facilityTile.LocalPlace, facilityTile);
            }
        }
    }
Esempio n. 6
0
    public List <EnvironmentTile> GetPossibleCityTiles()
    {
        List <EnvironmentTile> possibleLocations = new List <EnvironmentTile>();

        // find by sprite name... I know it's not very elegant
        FacilitiesTileType cityType = GetFacilitiesTypes().FindType("Tileset_facilities_0");

        var existingCities = GetCities();

        // if first city, check all the tiles that are buildable for a city in the map
        if (existingCities.Count == 0)
        {
            foreach (KeyValuePair <Vector3Int, EnvironmentTile> environmentEntry in environmentTiles)
            {
                // initialize loop variables
                var             position = environmentEntry.Key;
                EnvironmentTile eTile    = environmentEntry.Value;

                if (cityType.IsBuildable(eTile).isBuildable)
                {
                    possibleLocations.Add(eTile);
                }
            }
        }
        // if there is at least one city existing, restrain search to adjacent tiles
        else
        {
            List <Vector3Int> positionsChecked = new List <Vector3Int>();

            foreach (KeyValuePair <Vector3Int, FacilityTile> entry in existingCities)
            {
                var cityPos = entry.Key;
                var city    = entry.Value;

                //for all adjacent tiles to this one
                for (int x = -1; x <= 1; x++)
                {
                    for (int y = -1; y <= 1; y++)
                    {
                        // restrict to only directly adjacent tiles (with a side touching)
                        if (GameSystem.xor(Mathf.Abs(x) == 1, Mathf.Abs(y) == 1) && !(x == 0 && y == 0))
                        {
                            Vector3Int currPos = new Vector3Int(cityPos.x + x, cityPos.y + y, cityPos.z);

                            if (!positionsChecked.Contains(currPos))
                            {
                                // Add this position to our list of already checked tiles in order to avoid redundant checks
                                positionsChecked.Add(currPos);
                                EnvironmentTile eTile;

                                // if there is a tile here
                                if (environmentTiles.TryGetValue(currPos, out eTile))
                                {
                                    // if the city can be built here
                                    if (cityType.IsBuildable(eTile).isBuildable)
                                    {
                                        possibleLocations.Add(eTile);
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }


        return(possibleLocations);
    }
Esempio n. 7
0
    public void BuildFacility(FacilitiesTileType facilityType, Vector3Int position)
    {
        // get all sliced tiles from our tileset
        Sprite[] tileSprites    = Resources.LoadAll <Sprite>(facilitiesTileset.name);
        Sprite   matchingSprite = tileSprites[0];

        // find the sprite
        foreach (Sprite sprite in tileSprites)
        {
            if (sprite.name == facilityType.SpriteName)
            {
                matchingSprite = sprite;
                break;
            }
        }

        var tile = ScriptableObject.CreateInstance <Tile>();

        tile.sprite = matchingSprite;

        facilitiesTilemap.SetTile(position, tile);

        HealthBar healthBar = null;
        Cross     cross     = null;

        // Attach healthbar if facility is an extractor
        if (facilityType.Extractor)
        {
            var bar = Instantiate(healthBarTemplate);
            bar.SetActive(true);
            healthBar = bar.GetComponent <HealthBar>();
            healthBar.MoveTo(position);
        }

        // Attach cross
        var crossInstance = Instantiate(crossTemplate);

        cross = crossInstance.GetComponent <Cross>();
        cross.MoveTo(position);
        crossInstance.SetActive(false);

        // create virtual representation of the new tile
        var facilityTile = facilityType.GenerateTile(environmentTilemap, position, healthBar, cross);

        // apply pollution
        if (facilityTile.PollutionRadius > 0)
        {
            ApplyPollution(facilityTile);
        }

        facilitiesTiles.Add(facilityTile.LocalPlace, facilityTile);

        // start screenshake
        if (facilityTile.Name == "City")
        {
            cameraCtrl.TriggerShake(0.2f, 0.2f);
            audioManager.Play("city_built");
        }
        else
        {
            cameraCtrl.TriggerShake(0.1f, 0.1f);
            audioManager.Play("facility_built");
        }
    }