Example #1
0
        public static FCEvent MakeEvent(FCEventDef def)
        {
            if (def == null)
            {
                return(null);
            }
            FCEvent tempEvent = new FCEvent(true);

            tempEvent.def             = def;
            tempEvent.timeTillTrigger = def.timeTillTrigger + Find.TickManager.TicksGame;
            return(tempEvent);
        }
Example #2
0
 public FCOptionWindow(FCEventDef evt, FCEvent parentEvent)
 {
     this.forcePause          = !FactionColonies.Settings().disableForcedPausingDuringEvents;
     this.draggable           = true;
     this.doCloseX            = false;
     this.preventCameraMotion = false;
     this.header  = evt.label;
     this.options = evt.options;
     if (evt.optionDescription == "")
     {
         this.desc = evt.desc;
     }
     else
     {
         this.desc = evt.optionDescription;
     }
     this.closeOnAccept         = false;
     this.closeOnCancel         = false;
     this.closeOnClickedOutside = false;
     this.parentEvent           = parentEvent;
 }
Example #3
0
        public static bool isValidRandomEvent(FCEventDef cEvent)
        {
            FactionFC tmp = Find.World.GetComponent <FactionFC>();

            if (cEvent.isRandomEvent == true && Find.World.PlayerWealthForStoryteller >= cEvent.requiredWealth)
            {
                //If meets happiness requirement
                if (cEvent.minimumHappiness <= tmp.averageHappiness && tmp.averageHappiness <= cEvent.maximumHappiness)
                {
                    //If meets loyalty requirement
                    if (cEvent.minimumLoyalty <= tmp.averageLoyalty && tmp.averageLoyalty <= cEvent.maximumLoyalty)
                    {
                        //If meets unrest requirement
                        if (cEvent.minimumUnrest <= tmp.averageUnrest && tmp.averageUnrest <= cEvent.maximumUnrest)
                        {
                            //If meets prosperity requirement
                            if (cEvent.minimumProsperity <= tmp.averageProsperity && tmp.averageProsperity <= cEvent.maximumProsperity)
                            {
                                if (cEvent.rangeSettlementsAffected.min == 0 && cEvent.rangeSettlementsAffected.max == 0 || Find.World.GetComponent <FactionFC>().settlements.Count() >= cEvent.rangeSettlementsAffected.min)
                                {
                                    //if doesn't require resource or if required resource has more than 1 production
                                    if (cEvent.requiredResource == null ? Find.World.GetComponent <FactionFC>().returnResource(cEvent.requiredResource).assignedWorkers > 0 : true || (cEvent.requiredResource == "research" && traitUtilsFC.returnResearchAmount() > 0))
                                    {
                                        //if event is not incompatible with any currently-running events
                                        foreach (FCEvent evt in Find.World.GetComponent <FactionFC>().events)
                                        {
                                            if (evt.def != null)
                                            {
                                                if (cEvent == evt.def)
                                                { //if there's already the same event running
                                                    return(false);
                                                }
                                                foreach (FCEventDef inEvt in evt.def.incompatibleEvents)
                                                {
                                                    if (cEvent == inEvt)
                                                    { //if not compatible
                                                        return(false);
                                                    }
                                                }
                                            }
                                        }

                                        //If there are no required biomes
                                        if (cEvent.applicableBiomes.Count() != 0)
                                        {
                                            foreach (string biome in cEvent.applicableBiomes)
                                            {
                                                // if(cEvent.)
                                            }
                                        }

                                        //else if compatible
                                        return(true);
                                    }
                                    else
                                    {
                                        return(false);
                                    }
                                }
                                else
                                {
                                    return(false);
                                }
                            }
                            else //if not meet prosperity requirement
                            {
                                return(false);
                            }
                        }
                        else //if not meet unrest requirement
                        {
                            return(false);
                        }
                    }
                    else //if not meet loyalty requirement
                    {
                        return(false);
                    }
                }
                else //if not meet happiness requirement
                {
                    return(false);
                }
            }
            else //if not a random event or enough player wealth
            {
                return(false);
            }
        }
Example #4
0
        public static FCEvent MakeRandomEvent(FCEventDef def, List <SettlementFC> SettlementTraitLocations)
        {
            FCEvent tempEvent = new FCEvent(true);

            tempEvent.def                      = def;
            tempEvent.timeTillTrigger          = def.timeTillTrigger + Find.TickManager.TicksGame;
            tempEvent.traits                   = def.traits;
            tempEvent.settlementTraitLocations = new List <SettlementFC>();



            //if affects specific settlement(s) then get settlements.
            if (tempEvent.def.rangeSettlementsAffected.max != 0)
            {
                int numSettlements = tempEvent.def.rangeSettlementsAffected.RandomInRange;

                //Log.Message("Pre- " + numSettlements);
                //if random number of settlements more than total settlements, reset number settlements.
                if (numSettlements > Find.World.GetComponent <FactionFC>().settlements.Count())
                {
                    numSettlements = Find.World.GetComponent <FactionFC>().settlements.Count();
                    //Log.Message("Post- " + numSettlements);
                }

                //List of map locations
                List <SettlementFC> settlements = new List <SettlementFC>();
                //temporary list of settlemnts.
                List <SettlementFC> tmp = new List <SettlementFC>();

                if (SettlementTraitLocations == null || SettlementTraitLocations.Count == 0)
                {
                    foreach (SettlementFC settlement in Find.World.GetComponent <FactionFC>().settlements.InRandomOrder())
                    {
                        if (tempEvent.def.requiredResource != "")
                        {     //if there is a required resource
                            if (settlement.returnResource(tempEvent.def.requiredResource).assignedWorkers > 0)
                            { //if have someone working on that resource
                                tmp.Add(settlement);
                            }
                            else
                            {
                                //don't add
                            }
                        }
                        else
                        {
                            tmp.Add(settlement);
                        }
                    }

                    while (tmp.Count() > 0)
                    {
                        SettlementFC cSettlement = tmp.RandomElement();
                        if (settlements.Count() < numSettlements)
                        {
                            settlements.Add(cSettlement);
                        }
                        tmp.Remove(cSettlement);
                    }

                    tempEvent.settlementTraitLocations.AddRange(settlements);
                }
                else
                {
                    tempEvent.settlementTraitLocations.AddRange(SettlementTraitLocations);
                    //Log.Message(tempEvent.settlementTraitLocations.Count().ToString());
                }
                //foreach(int loc in tempEvent.settlementTraitLocations)
                //{
                //Log.Message("Location: " + loc);
                //}
            }
            //if event has options
            //open event option window
            //Log.Message("option count: " + tempEvent.def.options.Count().ToString());
            if (tempEvent.def.options.Count > 0 && tempEvent.def.activateAtStart == true)
            {
                Find.WindowStack.Add(new FCOptionWindow(tempEvent.def, tempEvent));
                return(null);
            }
            else
            {
                return(tempEvent);
            }

            //
        }