Esempio n. 1
0
    IEnumerator GenerateFireRisks()
    {
        MissionManager.Mission myMission = mission;
        FireRiskGenerator      linkedFG  = GameManager.instance.gridManagement.grid[myMission.position.x, myMission.position.y, myMission.position.z].GetComponent <FireRiskGenerator>();

        for (int i = 1; i < myMission.blocksFound.Count; i++)   //Starts at i = 1 so the block at center isn't affected
        {
            myMission.blocksFound[i].fireRiskPercentage += linkedFG.amountInPercent;
        }
        GameManager.instance.missionManager.EndMission(myMission);
        yield return(null);
    }
Esempio n. 2
0
    public void ReadFlag(Block block, string flag)
    {
        string[] flagElements = flag.Split(new char[] { '_' }, System.StringSplitOptions.RemoveEmptyEntries);

        switch (flagElements[0])
        {
            #region Generator
        case "Generator":
            if (flagElements.Length == 2)
            {
                Generator foundGenerator = block.GetComponent <Generator>();

                if (foundGenerator == null)
                {
                    Generator newGenerator = block.gameObject.AddComponent <Generator>();

                    try      // TRY SETTING UP THE POWER
                    {
                        newGenerator.power = int.Parse(flagElements[1]);
                    }
                    catch (FormatException fe)
                    {
                        Destroy(newGenerator);
                        Debug.Log(block.scheme.name + " - Generator : Unvalid Power entry for as the first parameter. Please enter an int value.");
                        break;
                    }

                    if (newGenerator.power < 0)
                    {
                        Destroy(newGenerator);
                        Debug.Log(block.scheme.name + " - Generator : Power value should be higher than 0");
                        break;
                    }

                    block.activeFlags.Add(newGenerator);
                }
                else
                {
                    foundGenerator.power += int.Parse(flagElements[1]);
                }
            }
            else
            {
                Logger.Warn(block.scheme.name + " - Generator : flag wrongly setup for. Should be something like this : 'Generator_3'");
            }
            break;

            #endregion

            #region Occupator
        case "Occupator":
            if (flagElements.Length == 4)
            {
                Occupator foundOccupator = block.GetComponent <Occupator>();
                if (foundOccupator == null)
                {
                    Occupator newOccupator = block.gameObject.AddComponent <Occupator>();
                    int       slotAmount   = 0;
                    try      // TRY SETTING UP THE SLOTAMOUNT
                    {
                        slotAmount = int.Parse(flagElements[1]);
                    }
                    catch (FormatException fe)
                    {
                        Destroy(newOccupator);
                        Logger.Warn(block.scheme.name + " - Occupator : Unvalid slotAmount entry for as the first parameter. Please enter an int value.");
                        break;
                    }

                    if (slotAmount < 0)
                    {
                        Destroy(newOccupator);
                        Logger.Warn(block.scheme.name + " - Occupator : slot value has to be higher than 0.");
                        break;
                    }

                    try      // TRY SETTING UP THE RANGE
                    {
                        newOccupator.range = int.Parse(flagElements[2]);
                    }
                    catch (FormatException fe)
                    {
                        Destroy(newOccupator);
                        Logger.Warn(block.scheme.name + " - Occupator : Unvalid range entry for as the first parameter. Please enter an int value.");
                        break;
                    }

                    if (newOccupator.range < 0)
                    {
                        Destroy(newOccupator);
                        Logger.Warn(block.scheme.name + " - Occupator : range value has to be higher than 0.");
                        break;
                    }


                    string[] profiles = SplitParametorInArray(flagElements[3]);

                    string result = IsProfileArrayIsValid(profiles);

                    if (result != "")
                    {
                        Destroy(newOccupator);
                        Logger.Warn(block.scheme.name + " - Occupator : " + result);
                        break;
                    }

                    newOccupator.slots = slotAmount;
                    Population[] acceptedPop = new Population[profiles.Length];

                    for (int i = 0; i < profiles.Length; i++)
                    {
                        foreach (Population pop in GameManager.instance.populationManager.populationTypeList)
                        {
                            if (profiles[i] == pop.codeName)
                            {
                                acceptedPop[i] = pop;
                            }
                        }
                    }

                    newOccupator.acceptedPopulation = acceptedPop;


                    block.activeFlags.Add(newOccupator);
                }
                else
                {
                    foundOccupator.range += int.Parse(flagElements[2]);
                    foundOccupator.slots += int.Parse(flagElements[1]);
                }
            }
            else
            {
                Logger.Warn(block.scheme.name + " - Occupator : flag wrongly setup. Should be something like this : 'Occupator_10_5_scientist,worker'");
            }
            break;
            #endregion

            #region Extractor
        case "Extractor":
            if (flagElements.Length == 4)
            {
                Extractor foundOccupator = block.GetComponent <Extractor>();
                if (foundOccupator == null)
                {
                    Extractor newOccupator = block.gameObject.AddComponent <Extractor>();
                    int       slotAmount   = 0;
                    try  // TRY SETTING UP THE SLOTAMOUNT
                    {
                        slotAmount = int.Parse(flagElements[1]);
                    }
                    catch (FormatException fe)
                    {
                        Destroy(newOccupator);
                        Logger.Warn(block.scheme.name + " - Occupator : Unvalid slotAmount entry for as the first parameter. Please enter an int value.");
                        break;
                    }

                    if (slotAmount < 0)
                    {
                        Destroy(newOccupator);
                        Logger.Warn(block.scheme.name + " - Occupator : slot value has to be higher than 0.");
                        break;
                    }

                    try  // TRY SETTING UP THE RANGE
                    {
                        newOccupator.range = int.Parse(flagElements[2]);
                    }
                    catch (FormatException fe)
                    {
                        Destroy(newOccupator);
                        Logger.Warn(block.scheme.name + " - Occupator : Unvalid range entry for as the first parameter. Please enter an int value.");
                        break;
                    }

                    if (newOccupator.range < 0)
                    {
                        Destroy(newOccupator);
                        Logger.Warn(block.scheme.name + " - Occupator : range value has to be higher than 0.");
                        break;
                    }


                    string[] profiles = SplitParametorInArray(flagElements[3]);

                    string result = IsProfileArrayIsValid(profiles);

                    if (result != "")
                    {
                        Destroy(newOccupator);
                        Logger.Warn(block.scheme.name + " - Occupator : " + result);
                        break;
                    }

                    newOccupator.slots = slotAmount;
                    Population[] acceptedPop = new Population[profiles.Length];

                    for (int i = 0; i < profiles.Length; i++)
                    {
                        foreach (Population pop in GameManager.instance.populationManager.populationTypeList)
                        {
                            if (profiles[i] == pop.codeName)
                            {
                                acceptedPop[i] = pop;
                            }
                        }
                    }

                    newOccupator.acceptedPopulation = acceptedPop;


                    block.activeFlags.Add(newOccupator);
                }
                else
                {
                    foundOccupator.range += int.Parse(flagElements[2]);
                    foundOccupator.slots += int.Parse(flagElements[1]);
                }
            }
            else
            {
                Logger.Warn(block.scheme.name + " - Occupator : flag wrongly setup. Should be something like this : 'Occupator_10_5_scientist,worker'");
            }
            break;
            #endregion

            #region Extractor
        case "Barrack":
            if (flagElements.Length == 4)
            {
                Barrack foundOccupator = block.GetComponent <Barrack>();
                if (foundOccupator == null)
                {
                    Barrack newOccupator = block.gameObject.AddComponent <Barrack>();
                    int     slotAmount   = 0;
                    try  // TRY SETTING UP THE SLOTAMOUNT
                    {
                        slotAmount = int.Parse(flagElements[1]);
                    }
                    catch (FormatException fe)
                    {
                        Destroy(newOccupator);
                        Logger.Warn(block.scheme.name + " - Occupator : Unvalid slotAmount entry for as the first parameter. Please enter an int value.");
                        break;
                    }

                    if (slotAmount < 0)
                    {
                        Destroy(newOccupator);
                        Logger.Warn(block.scheme.name + " - Occupator : slot value has to be higher than 0.");
                        break;
                    }

                    try  // TRY SETTING UP THE RANGE
                    {
                        newOccupator.range = int.Parse(flagElements[2]);
                    }
                    catch (FormatException fe)
                    {
                        Destroy(newOccupator);
                        Logger.Warn(block.scheme.name + " - Occupator : Unvalid range entry for as the first parameter. Please enter an int value.");
                        break;
                    }

                    if (newOccupator.range < 0)
                    {
                        Destroy(newOccupator);
                        Logger.Warn(block.scheme.name + " - Occupator : range value has to be higher than 0.");
                        break;
                    }


                    string[] profiles = SplitParametorInArray(flagElements[3]);

                    string result = IsProfileArrayIsValid(profiles);

                    if (result != "")
                    {
                        Destroy(newOccupator);
                        Logger.Warn(block.scheme.name + " - Occupator : " + result);
                        break;
                    }

                    newOccupator.slots = slotAmount;
                    Population[] acceptedPop = new Population[profiles.Length];

                    for (int i = 0; i < profiles.Length; i++)
                    {
                        foreach (Population pop in GameManager.instance.populationManager.populationTypeList)
                        {
                            if (profiles[i] == pop.codeName)
                            {
                                acceptedPop[i] = pop;
                            }
                        }
                    }

                    newOccupator.acceptedPopulation = acceptedPop;


                    block.activeFlags.Add(newOccupator);
                }
                else
                {
                    foundOccupator.range += int.Parse(flagElements[2]);
                    foundOccupator.slots += int.Parse(flagElements[1]);
                }
            }
            else
            {
                Logger.Warn(block.scheme.name + " - Occupator : flag wrongly setup. Should be something like this : 'Occupator_10_5_scientist,worker'");
            }
            break;
            #endregion

            #region House
        case "House":
            House foundHouse = block.GetComponent <House>();
            if (foundHouse == null)
            {
                House newHome = block.gameObject.AddComponent <House>();
                newHome.slotAmount    = int.Parse(flagElements[1]);
                newHome.standingLevel = int.Parse(flagElements[2]);
                string[]     profilesList    = SplitParametorInArray(flagElements[3]);
                Population[] acceptedPopList = new Population[profilesList.Length];
                for (int i = 0; i < profilesList.Length; i++)
                {
                    foreach (Population pop in GameManager.instance.populationManager.populationTypeList)
                    {
                        if (profilesList[i] == pop.codeName)
                        {
                            acceptedPopList[i] = pop;
                        }
                    }
                }
                newHome.acceptedPop = acceptedPopList;
                newHome.InitCitizensSlots();
                block.activeFlags.Add(newHome);
            }
            else
            {
                foundHouse.slotAmount   += int.Parse(flagElements[1]);
                foundHouse.standingLevel = int.Parse(flagElements[2]);
            }
            break;
            #endregion

            #region FoodProvider
        case "FoodProvider":
            FoodProvider foundFoodProvider = block.GetComponent <FoodProvider>();
            if (foundFoodProvider == null)
            {
                FoodProvider newFoodProvider = block.gameObject.AddComponent <FoodProvider>();
                newFoodProvider.range     = int.Parse(flagElements[1]);
                newFoodProvider.foodTotal = int.Parse(flagElements[2]);
                newFoodProvider.foodLeft  = newFoodProvider.foodTotal;
                block.activeFlags.Add(newFoodProvider);
            }
            else
            {
                foundFoodProvider.range     += int.Parse(flagElements[1]);
                foundFoodProvider.foodTotal += int.Parse(flagElements[2]);
                foundFoodProvider.foodLeft  += foundFoodProvider.foodTotal;
            }
            break;
            #endregion

            #region WorkingHours
        case "WorkingHours":
            WorkingHours foundWorkingHours = block.GetComponent <WorkingHours>();
            if (foundWorkingHours == null)
            {
                WorkingHours newHours = block.gameObject.AddComponent <WorkingHours>();
                newHours.startHour = float.Parse(flagElements[1]);
                newHours.endHour   = float.Parse(flagElements[2]);
                block.activeFlags.Add(newHours);
            }
            else
            {
                foundWorkingHours.startHour = float.Parse(flagElements[1]);
                foundWorkingHours.endHour   = float.Parse(flagElements[2]);
            }
            break;
            #endregion

            #region PoliceStation
        case "PoliceStation":
            PoliceStation foundPoliceStation = block.GetComponent <PoliceStation>();
            if (foundPoliceStation == null)
            {
                PoliceStation newPoliceStation = block.gameObject.AddComponent <PoliceStation>();
                newPoliceStation.range = int.Parse(flagElements[1]);
                block.activeFlags.Add(newPoliceStation);
            }
            else
            {
                foundPoliceStation.range += int.Parse(flagElements[1]);
            }
            break;
            #endregion

            #region FiremanStation
        case "FiremanStation":
            FiremanStation foundFiremanStation = block.GetComponent <FiremanStation>();
            if (foundFiremanStation == null)
            {
                FiremanStation newFiremanStation = block.gameObject.AddComponent <FiremanStation>();
                newFiremanStation.range = int.Parse(flagElements[1]);
                block.activeFlags.Add(newFiremanStation);
            }
            else
            {
                foundFiremanStation.range += int.Parse(flagElements[1]);
            }
            break;
            #endregion

            #region Repairer
        case "Repairer":
            Repairer foundRepairer = block.GetComponent <Repairer>();
            if (foundRepairer == null)
            {
                Repairer newRepairer = block.gameObject.AddComponent <Repairer>();
                newRepairer.range = int.Parse(flagElements[1]);
                block.activeFlags.Add(newRepairer);
            }
            else
            {
                foundRepairer.range += int.Parse(flagElements[1]);
            }
            break;
            #endregion

            #region Spatioport
        case "Spatioport":
            Spatioport foundSpatioport = block.GetComponent <Spatioport>();
            if (foundSpatioport == null)
            {
                Spatioport newSpatioport = block.gameObject.AddComponent <Spatioport>();
                block.activeFlags.Add(newSpatioport);
            }
            break;
            #endregion

            #region FlagNeeder
        case "FlagNeeder":
            FlagNeeder foundFlagNeeder = block.GetComponent <FlagNeeder>();
            if (foundFlagNeeder == null)
            {
                FlagNeeder newFlagReader = block.gameObject.AddComponent <FlagNeeder>();
                newFlagReader.needed = flagElements[1];
                newFlagReader.range  = int.Parse(flagElements[2]);
                block.activeFlags.Add(newFlagReader);
            }
            else
            {
                foundFlagNeeder.needed = flagElements[1];
                foundFlagNeeder.range += int.Parse(flagElements[2]);
            }
            break;
            #endregion

            #region Nest
        case "Nest":
            Nest foundNest = block.GetComponent <Nest>();
            if (foundNest == null)
            {
                Nest newNest = block.gameObject.AddComponent <Nest>();
                block.activeFlags.Add(newNest);
            }
            break;
            #endregion

            #region Mine
        case "Mine":
            Mine foundMine = block.GetComponent <Mine>();
            if (foundMine == null)
            {
                Mine newMine = block.gameObject.AddComponent <Mine>();
                newMine.health = float.Parse(flagElements[1]);
                block.activeFlags.Add(newMine);
            }
            else
            {
                foundMine.health += float.Parse(flagElements[1]);
            }
            break;
            #endregion

            #region NuisanceGenerator
        case "NuisanceGenerator":
            NuisanceGenerator foundNuisanceGenerator = block.GetComponent <NuisanceGenerator>();
            if (foundNuisanceGenerator == null)
            {
                NuisanceGenerator newNGenerator = block.gameObject.AddComponent <NuisanceGenerator>();
                newNGenerator.range  = int.Parse(flagElements[1]);
                newNGenerator.amount = int.Parse(flagElements[2]);
                block.activeFlags.Add(newNGenerator);
            }
            else
            {
                foundNuisanceGenerator.range  += int.Parse(flagElements[1]);
                foundNuisanceGenerator.amount += int.Parse(flagElements[2]);
            }
            break;
            #endregion

            #region FireRiskGenerator
        case "FireRiskGenerator":
            FireRiskGenerator foundFireRiskGenerator = block.GetComponent <FireRiskGenerator>();
            if (foundFireRiskGenerator == null)
            {
                FireRiskGenerator newFG = block.gameObject.AddComponent <FireRiskGenerator>();
                newFG.amountInPercent = int.Parse(flagElements[1]);
                block.activeFlags.Add(newFG);
            }
            else
            {
                foundFireRiskGenerator.amountInPercent += int.Parse(flagElements[1]);
            }
            break;

            #endregion
        default:
            Logger.Warn("Warning : " + flagElements[0] + " flag is undefined. Did you forget to add it to the FlagReader ?");
            break;
        }
    }