public List <MenuAction> getRiceTerrainActions(RiceTerrainTile riceTerrain)
    {
        //Debug.Log ("Actions for Terrain=" + riceTerrain.getChunkNumber ());
        List <MenuAction> actionsAvailable = new List <MenuAction>();

        if (!isActionInProgress(riceTerrain.getChunkNumber()))
        {
            List <int> actionsCurrentPhase = GameObject.FindGameObjectWithTag("Logic").GetComponent <PhaseManager>().getActionsInCurrentPhase();
            for (uint i = 0; i < actionsCurrentPhase.Count; ++i)
            {
                int currentAction = actionsCurrentPhase[(int)i];

                bool areDependenciesOk   = riceTerrain.checkDependencies(_action[currentAction]);
                bool hasBeenInvestigated = InvestigationManager.GetInstance().areInvestigated(_action[currentAction].getInvestigationRequired());
                bool hasWater            = WorldTerrain.GetInstance().riceChunkHasWater(riceTerrain.getChunkNumber()) || !_action[currentAction].needCanal;
                bool hasActionDone       = riceTerrain.isActionDone(currentAction);

                if (!hasActionDone && hasBeenInvestigated && areDependenciesOk && hasWater)
                {
                    ChunkAction        newAction = _action[currentAction];
                    PerformChunkAction callback  = this.addActionInProgress;
                    ChunkAction        t         = newAction.copyWithCallback(callback, riceTerrain.getChunkNumber());
                    actionsAvailable.Add((MenuAction)t);
                }
                //Debug.Log("  Action "+currentAction+" Dep="+areDependenciesOk+" Inv="+hasBeenInvestigated+" Water="+hasWater+" !Done="+!hasActionDone);
            }
        }
        actionsAvailable.Sort((x, y) => x.priority.CompareTo(y.priority));
        return(actionsAvailable);
    }
Example #2
0
 public void initWorld()
 {
     RiceTerrainTile.initResources(); // gestiona los recursos de forma eficiente
     initResources();                 // gestiona los recursos de forma eficiente
     initWorldData();
     initWorldRepresentation();
 }
Example #3
0
 public PlagueInstance(RiceTerrainTile t)
 {
     _parent          = t;
     instance         = null;
     active           = false;
     type             = TypePlague.NONE;
     PenalizationDays = 0;
 }
Example #4
0
 public void unselectChunk(int chunk)
 {
     for (int i = 0; i < chunkTilesPos [chunk].Count; ++i)
     {
         RiceTerrainTile tile = getRiceTerrain(chunkTilesPos[chunk][i].First, chunkTilesPos[chunk][i].Second);
         tile.unselect();
     }
 }
Example #5
0
 public Weed(RiceTerrainTile theParent)
 {
     type            = TypeWeed.NONE;
     instance        = null;
     day             = 1;
     PenalizationDay = 0;
     _parent         = theParent;
 }
    public void setRiceTerrain(RiceTerrainTile riceTerrain)
    {
        m_currentAction = 0;
        m_riceTerrain   = riceTerrain;

        GameObject.Find("Logic").GetComponent <TimeManager>().addListerToDayChange(happyNewDay);
        updateActions();
    }
Example #7
0
    // prepara el terreno y crea un tile donde plantar arroz
    public void createRiceChunk(uint row, uint col, bool flooded)
    {
        int chunkID = chunkNextID++;

        Debug.Log("Building Chunk #" + chunkID);
        chunkTilesPos[chunkID] = new List <Pair <uint, uint> > ();

        for (uint i = row - RICE_CHUNK_SEPARATION; i < row + RICE_CHUNK_H + RICE_CHUNK_SEPARATION; ++i)
        {
            for (uint j = col - RICE_CHUNK_SEPARATION; j < col + RICE_CHUNK_W + RICE_CHUNK_SEPARATION; ++j)
            {
                if (i < row || i >= row + RICE_CHUNK_H ||
                    j < col || j >= col + RICE_CHUNK_W)
                {
                    if (worldTerrainType [i, j] != TileTerrainType.CANAL)
                    {
                        worldTerrainType [i, j] = TileTerrainType.SEPARATOR;
                    }
                }
                else
                {
                    chunkTilesPos[chunkID].Add(new Pair <uint, uint>(i, j));
                    worldTerrainType [i, j] = TileTerrainType.RICE_TERRAIN;
                    riceTerrains [i, j]     = new RiceTerrainTile(i, j, flooded);
                    riceTerrains [i, j].setChunkNumber(chunkID);
                    riceTerrains[i, j].setLocalID(chunkTilesPos[chunkID].Count - 1);


                    Vegetation veg = getTileVegetation(i, j);
                    if (veg != null)
                    {
                        veg.delete();
                    }

                    if (canalManager.tileHasCanal(i, j))
                    {
                        canalManager.deleteCanal(i, j);
                    }
                }

                updateTileRepresentation(i, j);
            }
        }
        canalManager.addRiceChunk(chunkID, row, col, RICE_CHUNK_W, RICE_CHUNK_H);
        canalManager.updateCanals();
        m_chunkChangedListener();
        m_chunkAddedListener(chunkID);
        _weedFactory.addChunkID(chunkID);
        PenalizationManager.GetInstance().checkActionsTillCurrentPhase();

        TypeFase phase = GameObject.FindGameObjectWithTag("Logic").GetComponent <PhaseManager> ().getCurrentPhase();

        if (phase != TypeFase.PREWORK_I && phase != TypeFase.NONE)
        {
            disableChunk(chunkID);
        }
    }
Example #8
0
    public void unselectTile(uint i, uint j)
    {
        TileTerrainType tileType = getTypeTerrainOfTile(i, j);

        if (tileType == TileTerrainType.RICE_TERRAIN)
        {
            RiceTerrainTile tile = getRiceTerrain(i, j);
            unselectChunk(tile.getChunkNumber());
            //tile.unselect ();
        }
        else if (tileType == TileTerrainType.BUILDING)
        {
            BuildingsManager.GetInstance().unselectBuildingAt(i, j);
        }
    }
Example #9
0
    // +++ ACTIONS +++
    private void createActionPanel()
    {
        if (_actionPanel != null)
        {
            Destroy(_actionPanel);
        }

        WorldTerrain    terrain            = WorldTerrain.GetInstance();
        TileTerrainType typeOfTileSelected = terrain.getTypeTerrainOfTile(_tileSelectedPosition[0], _tileSelectedPosition[1]);

        if (typeOfTileSelected == TileTerrainType.BUILDING && BuildingsManager.GetInstance().getTypeOfBuildingInPosition(_tileSelectedPosition[0], _tileSelectedPosition[1]) == BUILDINGS.PLANTER)
        {
            _tutMan.eventDone(TutorialManager.EVENTS.PLANTELL_ACTIONS_OPENED);
        }
        if (typeOfTileSelected == TileTerrainType.RICE_TERRAIN)
        {
            RiceTerrainTile riceTerrain = terrain.getRiceTerrain(_tileSelectedPosition [0], _tileSelectedPosition [1]);
            //int chunk = terrain.getRiceTerrain(_tileSelectedPosition[0], _tileSelectedPosition[1]).getChunkNumber();
            //if (!PenalizationManager.GetInstance().isChunkDisabled(chunk)) {
            if (!riceTerrain.isDisabled())
            {
                GameObject actionPanelTemplate = Resources.Load("Prefabs/ActionPanelLostFocusLayer") as GameObject;
                _actionPanel = Instantiate(actionPanelTemplate);
                _actionPanel.SendMessage("setRiceTerrain", riceTerrain);
                _tutMan.eventDone(TutorialManager.EVENTS.RICE_CHUNK_ACTIONS_OPENED);
            }
            else
            {
                GameObject disabledPanel = Resources.Load("Prefabs/DisabledChunkPanelLostFocusLayer") as GameObject;
                Instantiate(disabledPanel);
                return;
            }
        }
        else if (typeOfTileSelected == TileTerrainType.BUILDING)
        {
            GameObject actionPanelTemplate = Resources.Load("Prefabs/ActionBuildingPanelLostFocusLayer") as GameObject;             // OR Planta
            _actionPanel = Instantiate(actionPanelTemplate);
            BUILDINGS b = BuildingsManager.GetInstance().getTypeOfBuildingInPosition(_tileSelectedPosition[0], _tileSelectedPosition[1]);
            _actionPanel.BroadcastMessage("setActionsForBuilding", b);
        }
    }
Example #10
0
    public void load(WorldTerrainData worldTerrainData)
    {
        RiceTerrainTile.initResources(); // gestiona los recursos de forma eficiente
        initResources();                 // gestiona los recursos de forma eficiente

        //initWorldData();
        numTilesX                  = worldTerrainData.NumTilesX;
        numTilesY                  = worldTerrainData.NumTilesY;
        worldTerrainType           = worldTerrainData.WorldTerrainType;
        worldTerrainID             = worldTerrainData.WorldTerrainID;
        worldTerrainRepresentation = new GameObject[numTilesY, numTilesX];
        riceTerrains               = new RiceTerrainTile[numTilesY, numTilesX]; //construir
        for (uint i = 0; i < numTilesY; ++i)
        {
            for (uint j = 0; j < numTilesX; ++j)
            {
                if (worldTerrainData.RiceTerrains[i, j] != null)
                {
                    riceTerrains[i, j] = new RiceTerrainTile();
                    riceTerrains[i, j].setActionsDone(worldTerrainData.RiceTerrains[i, j].ActionsDoneInTheYear);
                    riceTerrains[i, j].setChunkNumber(worldTerrainData.RiceTerrains[i, j].ChunkID);
                    riceTerrains[i, j].setCol(worldTerrainData.RiceTerrains[i, j].Col);
                    riceTerrains[i, j].DaysBurning          = worldTerrainData.RiceTerrains[i, j].DaysBurning;
                    riceTerrains[i, j].DaysPlanted          = worldTerrainData.RiceTerrains[i, j].DaysPlanted;
                    riceTerrains[i, j].HasAlreadyBeenWorked = worldTerrainData.RiceTerrains[i, j].HasAlreadyBeenWorked;
                    riceTerrains[i, j].HasAppliedFangueig   = worldTerrainData.RiceTerrains[i, j].HasAppliedFangueig;
                    riceTerrains[i, j].HasAppliedHerbicide  = worldTerrainData.RiceTerrains[i, j].HasAppliedHerbicide;
                    riceTerrains[i, j].IsBurningRostoll     = worldTerrainData.RiceTerrains[i, j].IsBurningRostoll;
                    riceTerrains[i, j].LocalTileID          = worldTerrainData.RiceTerrains[i, j].LocalTileID;
                    if (worldTerrainData.RiceTerrains[i, j].PlagueData.Active)
                    {
                        riceTerrains[i, j].changePlagueState(worldTerrainData.RiceTerrains[i, j].PlagueData.Type);
                    }
                    riceTerrains[i, j].RiceState = worldTerrainData.RiceTerrains[i, j].RiceState;
                    riceTerrains[i, j].setRow(worldTerrainData.RiceTerrains[i, j].Row);
                    riceTerrains[i, j].TerrainState = worldTerrainData.RiceTerrains[i, j].TerrainState;
                    if (worldTerrainData.RiceTerrains[i, j].WeedData.Type != TypeWeed.NONE)
                    {
                        riceTerrains[i, j].changeWeedState(worldTerrainData.RiceTerrains[i, j].WeedData.Type, worldTerrainData.RiceTerrains[i, j].WeedData.Day,
                                                           worldTerrainData.RiceTerrains[i, j].WeedData.PenalizationDay);
                    }
                    riceTerrains[i, j].updateTerrainRepresentation();
                    riceTerrains [i, j].InstantiateImages();
                }
                else
                {
                    worldTerrainData.RiceTerrains[i, j] = null;
                }
            }
        }
        chunkTilesPos = worldTerrainData.ChunkTilesPos;
        vegetation    = new Dictionary <uintPair, Vegetation>(); //construir
        foreach (KeyValuePair <uintPair, VegID> veggie in worldTerrainData.Vegetation)
        {
            vegetation.Add(veggie.Key, new Vegetation(veggie.Key.First, veggie.Key.Second, veggie.Value));
        }
        canalManager = new CanalManager();
        _weedFactory = new WeedFactory(this, RICE_CHUNK_W * RICE_CHUNK_H);
        chunkNextID  = worldTerrainData.ChunkNextID;

        initWorldRepresentation();
    }