Example #1
0
    public void unmarkToDelete(uint i, uint j)
    {
        WorldTerrain    wt   = WorldTerrain.GetInstance();
        TileTerrainType type = wt.getTypeTerrainOfTile(i, j);

        if (type == TileTerrainType.FREE && wt.tileContainsVegetation(i, j))
        {
            wt.getTileVegetation(i, j).unmarkToDelete();
            _buildingPanel.GetComponent <MultipleBuildingPanel>().addUnits(-1, -WorldTerrain.PRICE_Clean);
        }
        else if (type == TileTerrainType.CANAL)
        {
            wt.canalUnmarkToDelete(i, j);
            _buildingPanel.GetComponent <MultipleBuildingPanel>().addUnits(-1, -WorldTerrain.PRICE_Clean);
        }
        else if (type == TileTerrainType.RICE_TERRAIN)
        {
            wt.riceChunkUnmarkToDelete(i, j);
            uintPair clickedPos = new uintPair(i, j);
            foreach (Pair <uint, uint> pos in wt.getChunkTilesPositions(wt.getRiceTerrain(i, j).getChunkNumber()))
            {
                uintPair terrainPos = new uintPair(pos.First, pos.Second);
                if (clickedPos != terrainPos)
                {
                    tilesToDelete.Remove(terrainPos);
                }
                _buildingPanel.GetComponent <MultipleBuildingPanel>().addUnits(-1, -WorldTerrain.PRICE_Clean);
            }
        }
    }
Example #2
0
    private void createInstFlamingo(uintPair position)
    {
        try {
            uint row = position.First;
            uint col = position.Second;
            Debug.Log("  instantiating Flamingo at " + row + " " + col);

            GameObject   flamingoGameObject = Resources.Load <GameObject>(getRandomFlamingoPath());
            WorldTerrain wt            = WorldTerrain.GetInstance();
            Vector3      worldPosition = wt.getTileWorldPosition(row, col);

            float map_top = wt.getTileWorldPositionY(wt.getNumTilesY() - 1, 0);
            float map_h   = wt.getTileWorldPositionY(0, wt.getNumTilesX() - 1) - wt.getTileWorldPositionY(wt.getNumTilesY() - 1, 0);

            Vector3 flamingoSize = flamingoGameObject.GetComponent <SpriteRenderer> ().bounds.size;
            //worldPosition.x += WorldTerrain.TILE_WIDTH_UNITS/2 - flamingoSize.x / 2;
            worldPosition.y += flamingoSize.y * 0.3f;

            worldPosition.z = WorldTerrain.BUILDING_Z_LAYER - (map_top - (worldPosition.y)) / map_h;

            instancesFlamingos[position] = GameObject.Instantiate(flamingoGameObject, worldPosition, Quaternion.identity);
        }
        catch (Exception e) {
            Debug.LogError("Error trying to instantiate flamingo");
            Debug.LogError(e.ToString());
        }
    }
Example #3
0
    public void deleteVegetation(uint i, uint j)
    {
        Debug.Assert(tileContainsVegetation(i, j));

        uintPair matrixPos = new uintPair(i, j);

        vegetation [matrixPos].delete();
        vegetation.Remove(matrixPos);
    }
Example #4
0
    private List <uintPair> getFlamingoPositions()
    {
        WorldTerrain wt = WorldTerrain.GetInstance();

        List <uintPair> newFlamingoPositions = new List <uintPair> ();

        while (newFlamingoPositions.Count < MAX_FLAMINGOS)
        {
            uintPair newPos = new uintPair((uint)UnityEngine.Random.Range(0, 3), (uint)UnityEngine.Random.Range(0, (int)wt.getNumTilesX()));
            if (!wt.tileContainsVegetation(newPos.First, newPos.Second) && !newFlamingoPositions.Contains(newPos))
            {
                newFlamingoPositions.Add(newPos);
            }
        }
        return(newFlamingoPositions);
    }
Example #5
0
            public override bool Equals(object obj)
            {
                if ((object)obj == null)
                {
                    return(false);
                }

                try {
                    uintPair uintPairObj = obj as uintPair;
                    if (uintPairObj != null)
                    {
                        return((First == uintPairObj.First) && (Second == uintPairObj.Second));
                    }
                    else
                    {
                        return(false);
                    }
                }
                catch (Exception ex) {
                    Debug.Log(ex.Message);
                    return(false);
                }
            }
    public void updateCanals()
    {
        for (uint i = 0; i < _mapH; ++i)
        {
            for (uint j = 0; j < _mapW; ++j)
            {
                if (tileHasCanal(i, j))
                {
                    CANAL_CONEXION conexion = calculateCanalConexion(i, j);
                    _canalsMatrix [i, j].setHasWater(false, false);
                    _canalsMatrix [i, j].setConexionType(conexion, true);
                }
                else if (tileHasCanalTmp(i, j))
                {
                    CANAL_CONEXION conexion = calculateCanalConexion(i, j);
                    _canalsMatrixTmp [i, j].setHasWater(false, false);
                    _canalsMatrixTmp [i, j].setConexionType(conexion, true);
                }
            }
        }


        // Calculate Water
        bool[,] visited = new bool[_mapH, _mapW];
        Stack <uintPair> toVisit = new Stack <uintPair> (_waterSources);
        //_riceChunkHasWater.Clear ();
        List <int> riceChunkIDs = new List <int>(_riceChunkHasWater.Keys);

        foreach (int key in riceChunkIDs)
        {
            _riceChunkHasWater [key] = false;
        }

        while (toVisit.Count > 0)
        {
            uintPair pos = toVisit.Pop();
            if (visited [pos.First, pos.Second])
            {
                continue;
            }

            visited [pos.First, pos.Second] = true;
            if (tileHasCanal(pos.First, pos.Second))
            {
                _canalsMatrix [pos.First, pos.Second].setHasWater(true, false);
            }
            else if (tileHasCanalTmp(pos.First, pos.Second))
            {
                _canalsMatrixTmp [pos.First, pos.Second].setHasWater(true, false);
            }
            else if (tileHasRice(pos.First, pos.Second))
            {
                int riceChunkID = _riceChunkMatrix [pos.First, pos.Second];
                _riceChunkHasWater [riceChunkID] = true;
            }
            else
            {
                continue;
            }

            CANAL_CONEXION conexion = calculateCanalConexion(pos.First, pos.Second);
            int[,] dirs_matrix = new int[4, 2] {
                { -1, 0 },
                { 0, -1 }, { 0, +1 },
                { +1, 0 }
            };
            for (int k = 0; k < 4; ++k)
            {
                int tile_i = (int)pos.First + dirs_matrix [k, 0];
                int tile_j = (int)pos.Second + dirs_matrix [k, 1];

                bool tile_outside = tile_i < 0 || tile_j < 0 || tile_i >= _mapH || tile_j >= _mapW;
                if (!tile_outside && conexionMatrixs[conexion][1 + dirs_matrix [k, 0], 1 + dirs_matrix [k, 1]])
                {
                    toVisit.Push(new uintPair((uint)tile_i, (uint)tile_j));
                }
            }
        }


        for (uint i = 0; i < _mapH; ++i)
        {
            for (uint j = 0; j < _mapW; ++j)
            {
                if (tileHasCanal(i, j))
                {
                    _canalsMatrix [i, j].updateRepresentation();
                }
                else if (tileHasCanalTmp(i, j))
                {
                    _canalsMatrixTmp [i, j].updateRepresentation();
                }
            }
        }
    }
Example #7
0
    private void initWorldData()
    {
        TextAsset file = Resources.Load("TiledMap/map.json", typeof(TextAsset)) as TextAsset;

        Debug.Assert(file != null);

        JSONNode node = JSON.Parse(file.text);

        numTilesX = (uint)node ["width"].AsInt;
        numTilesY = (uint)node ["height"].AsInt;
        Debug.Log("MapW: " + numTilesX);
        Debug.Log("MapH: " + numTilesY);


        Debug.Log("Map Sice: " + numTilesX + " W, " + numTilesY + " H");
        worldTerrainType           = new TileTerrainType[numTilesY, numTilesX];
        worldTerrainID             = new TileTerrainIDs[numTilesY, numTilesX];
        worldTerrainRepresentation = new GameObject[numTilesY, numTilesX];
        riceTerrains  = new RiceTerrainTile[numTilesY, numTilesX];
        chunkTilesPos = new Dictionary <int, List <Pair <uint, uint> > >();
        vegetation    = new Dictionary <uintPair, Vegetation> ();
        canalManager  = new CanalManager(numTilesX, numTilesY);
        _weedFactory  = new WeedFactory(this, RICE_CHUNK_W * RICE_CHUNK_H);

        chunkNextID = 0;

        // TERRAIN
        for (uint k = 0; k < numTilesX * numTilesY; ++k)
        {
            uint i = k / numTilesX;
            uint j = k % numTilesX;
            //Debug.Log("Data["+i+","+j+"]="+node ["layers"] [0] ["data"] [k]);
            TileTerrainIDs v = (TileTerrainIDs)node ["layers"] [0] ["data"] [(int)k].AsInt;
            worldTerrainID [i, j]   = v;
            worldTerrainType [i, j] = (v == TileTerrainIDs.HERBS) ? TileTerrainType.FREE : TileTerrainType.DECORATION;
        }


        // VEGETATION
        for (uint k = 0; k < numTilesX * numTilesY; ++k)
        {
            uint i = k / numTilesX;
            uint j = k % numTilesX;
            //Debug.Log("Data["+i+","+j+"]="+node ["layers"] [0] ["data"] [k]);
            int v = node ["layers"] [1] ["data"] [(int)k].AsInt;
            if (v != 0)
            {
                uintPair matrixPos = new uintPair(i, j);
                vegetation [matrixPos] = new Vegetation(i, j, (VegID)v);
            }
        }

        // CANALS
        for (uint k = 0; k < numTilesX * numTilesY; ++k)
        {
            uint i = k / numTilesX;
            uint j = k % numTilesX;
            //Debug.Log("Data["+i+","+j+"]="+node ["layers"] [0] ["data"] [k]);
            int v = node ["layers"] [2] ["data"] [(int)k].AsInt;
            if ((TileOthersIDs)v == TileOthersIDs.CANAL)
            {
                addCanal(i, j);
            }
            else if ((TileOthersIDs)v == TileOthersIDs.WATER_SOURCE)
            {
                addCanal(i, j);
                canalManager.addWaterSource(3, 6);
            }
        }
        canalManager.updateCanals();

        //RICE CHUNKS
        for (uint k = 0; k < numTilesX * numTilesY; ++k)
        {
            uint i = k / numTilesX;
            uint j = k % numTilesX;
            //Debug.Log("Data["+i+","+j+"]="+node ["layers"] [0] ["data"] [k]);
            int v = node ["layers"] [2] ["data"] [(int)k].AsInt;
            if ((TileOthersIDs)v == TileOthersIDs.RICE_CHUNK)
            {
                createRiceChunk(i, j, true);
            }
        }

        canalManager.updateCanals();
    }
Example #8
0
 private void deleteInstFlamingo(uintPair position)
 {
     Debug.Log("  deleting Flamingo at " + position.First + " " + position.Second);
     GameObject.Destroy(instancesFlamingos [position]);
     instancesFlamingos.Remove(position);
 }