示例#1
0
        //determine the random placetype based on available options
        public PlaceType determineOrbitalPlaceType(Random rando, GridTile.GridTerrain gridTerrain)
        {
            List <PlaceType> possiblePlaceTypes = new List <PlaceType>();

            possiblePlaceTypes.AddRange(new PlaceType[] { PlaceType.Graveyard, PlaceType.Cave, PlaceType.Encampment, PlaceType.Ruins, PlaceType.Farm });

            //check for terrain specific possibilities
            if (gridTerrain == GridTile.GridTerrain.Beach)
            {
            }
            else if (gridTerrain == GridTile.GridTerrain.Forest)
            {
            }
            else if (gridTerrain == GridTile.GridTerrain.Hills)
            {
            }
            else if (gridTerrain == GridTile.GridTerrain.Grass)
            {
            }


            PlaceType thisType = possiblePlaceTypes[rando.Next(0, possiblePlaceTypes.Count)];

            return(thisType);
        }
示例#2
0
        public void GetEstimationsForTravel(WorldMap world)
        {
            for (int i = 0; i < travelPath.Count; ++i)
            {
                //road
                if (world.IsGridRoad(travelPath[i].routeLocation))
                {
                    AssignEstimateValueToPath(5, i);
                }
                //water
                else if (world.IsGridLakeOrWater(travelPath[i].routeLocation))
                {
                    AssignEstimateValueToPath(30, i);
                }
                //node
                else if (world.IsGridNodeType(travelPath[i].routeLocation) != GridTile.GridNode.None)
                {
                    AssignEstimateValueToPath(10, i);
                }
                //terrains
                else
                {
                    GridTile.GridTerrain terraintype = world.GridNodeTerrainType(travelPath[i].routeLocation);

                    if (terraintype == GridTile.GridTerrain.Beach)
                    {
                        AssignEstimateValueToPath(15, i);
                    }
                    else if (terraintype == GridTile.GridTerrain.Forest)
                    {
                        AssignEstimateValueToPath(20, i);
                    }
                    else if (terraintype == GridTile.GridTerrain.Grass)
                    {
                        AssignEstimateValueToPath(10, i);
                    }
                    else if (terraintype == GridTile.GridTerrain.Hills)
                    {
                        AssignEstimateValueToPath(20, i);
                    }
                    else if (terraintype == GridTile.GridTerrain.Swamp)
                    {
                        AssignEstimateValueToPath(25, i);
                    }
                }
            }
        }
示例#3
0
 public Boolean CheckForGridRequirements(GridTile.GridTerrain terraintype, Boolean isonroad)
 {
     if (requiresRoad == false && requiresTerrain == false)
     {
         return(true);
     }
     else if (requiresRoad == true && isonroadrequirement == isonroad)
     {
         return(true);
     }
     else if (requiresTerrain == true && requiredTerrainType == terraintype)
     {
         return(true);
     }
     else
     {
         return(false);
     }
 }
示例#4
0
        //world event builder
        public WorldEvent(String thisEventBaseTypeString, int percentChance, String eventTitleText, String[] eventDescriptionText,
                          EventOption[] eventoptions, String requiredterrainString, String requiredroadString)
        {
            thisWorldEventBaseType = (WorldEventBase)Enum.Parse(typeof(WorldEventBase), thisEventBaseTypeString);
            eventChance            = percentChance;
            //text
            thisEventTitle = eventTitleText;
            foreach (String t in eventDescriptionText)
            {
                thisEventTextPossibilities.Add(t);
            }
            //event options
            foreach (EventOption o in eventoptions)
            {
                eventOptions.Add(o);
            }

            //requirements
            if (requiredterrainString != "")
            {
                requiresTerrain     = true;
                requiredTerrainType = (GridTile.GridTerrain)Enum.Parse(typeof(GridTile.GridTerrain), requiredterrainString);
            }
            if (requiredroadString != "")
            {
                requiresRoad = true;
                if (requiredroadString == "true")
                {
                    isonroadrequirement = true;
                }
                else if (requiredroadString == "false")
                {
                    isonroadrequirement = false;
                }
            }
        }
示例#5
0
        //passive event builder
        public Event(String thisEventBaseString, int percentChance, String[] eventText,
                     String requiredSkillString, String requireSkillRankingString, String requiredTraitString,
                     String itemType, String[] listOfItems, int stammin, int stammax, int stressmin, int stressmax, int healthmin, int healthmax,
                     String requiredTerrain, String requiredRoad, int staminaeffect, int stresseffect, int healtheffect, int partysizemin,
                     Boolean occurswhentravelling, Boolean occurswhensleeping, Boolean occurswhenwakingup)
        {
            //properties
            thisEventBaseType = (PassiveEventBase)Enum.Parse(typeof(PassiveEventBase), thisEventBaseString);
            eventChance       = percentChance;
            //text
            foreach (String t in eventText)
            {
                thisEventTextPossibilities.Add(t);
            }
            eventStaminaEffect = staminaeffect;
            eventStressEffect  = stresseffect;
            eventHealthEffect  = healtheffect;



            //requirements
            if (requiredSkillString != "")
            {
                requiresSkill = true;
                requiredSkill = (PersonSkill.SkillType)Enum.Parse(typeof(PersonSkill.SkillType), requiredSkillString);
            }
            if (requireSkillRankingString != "")
            {
                requiredRanking = (PersonSkill.SkillRanking)Enum.Parse(typeof(PersonSkill.SkillRanking), requireSkillRankingString);
            }
            if (requiredTraitString != "")
            {
                requiresTrait     = true;
                requiredTraitType = (Person.TraitType)Enum.Parse(typeof(Person.TraitType), requiredTraitString);
            }
            if (requiredTerrain != "")
            {
                requiresTerrain     = true;
                requiredTerrainType = (GridTile.GridTerrain)Enum.Parse(typeof(GridTile.GridTerrain), requiredTerrain);
            }
            if (requiredRoad != "")
            {
                requiresRoad = true;
                if (requiredRoad == "true")
                {
                    isonroadrequirement = true;
                }
                else if (requiredRoad == "false")
                {
                    isonroadrequirement = false;
                }
            }

            eventStaminaRequirementMin = stammin;
            eventStaminaRequirementMax = stammax;
            eventStressRequirementMin  = stressmin;
            eventStressRequirementMax  = stressmax;
            eventHealthRequirementMin  = healthmin;
            eventHealthRequirementMax  = healthmax;

            eventPartySizeMinimum = partysizemin;

            occursWhenTravelling = occurswhentravelling;
            occursWhileSleeping  = occurswhensleeping;
            occursWhenWakingUp   = occurswhenwakingup;

            //items
            if (itemType != "")
            {
                hasItem       = true;
                eventItemType = (Item.ItemType)Enum.Parse(typeof(Item.ItemType), itemType);

                foreach (String i in listOfItems)
                {
                    eventItemPosibilities.Add(i);
                }
            }
        }
示例#6
0
        public void CheckForValidSleepEvents(PlayerHandler player, DataManager datamanager, Random rando, GridTile.GridTerrain terraintype, Boolean isonroad, WorldMap world, int hour, UI_Helper uihelper)
        {
            List <Event> possibleEvents = new List <Event>();

            RestSafeTick();

            //check for valid sleep events
            foreach (KeyValuePair <String, Event> e in datamanager.passiveEventData)
            {
                //check if this is a sleep specific event
                if ((e.Value.CanOccurWhenSleeping() == true && e.Value.CanOccurWhenSleeping() == false) ||
                    (e.Value.OccursWhenWakingUp() == true && currentWakeEvent == null))
                {
                    //add any eligible people to event
                    Event newevent = CheckIfPeopleEligible(e.Value, player);
                    //determine the text used
                    newevent.DetermineValidText(rando);
                    //if eligible people exist, add to event
                    if (newevent.IsEligibleExists() == true && newevent.CheckForGridRequirements(terraintype, isonroad) == true &&
                        newevent.CheckForPartySizeRequirements(player.partyMembers.Count) == true)
                    {
                        possibleEvents.Add(newevent);
                    }
                }
            }


            for (int i = 0; i < possibleEvents.Count; ++i)
            {
                int rand = rando.Next(0, 101);
                if (rand < possibleEvents[i].ReturnEventChance())
                {
                    if (possibleEvents[i].OccursWhenWakingUp() == true)
                    {
                        SetCurrentWakeEventEvent(possibleEvents[i], true, rando, player, "");
                    }
                    else if (restSafeTilesRemaining == 0)
                    {
                        SetCurrentPassiveEvent(possibleEvents[i], true, rando, player, "");
                        RunCurrentPassiveEvent(player, rando, uihelper);
                        RestSafeSet();
                    }
                    break;
                }
            }
        }
示例#7
0
        //returns minutes to tick down
        //this performs all checks/stat changes, etc for travelling
        public int TravelTick(PlayerHandler player, DataManager datamanager, Random rando, UI_Helper uihelper, GridTile.GridTerrain gridTerrainType, Boolean isOnRoad, WorldMap world, int hour)
        {
            int value = 0;

            //if at destination
            if (currentTravelDistance == totalTravelDistance)
            {
                //check for event
                if (currentGridLocation != travelStartingLocation &&
                    safeTilesRemaining == 0)
                {
                    CheckForValidEvents(player, datamanager, rando, gridTerrainType, isOnRoad, world, hour);
                }


                //if world event
                if (currentWorldEvent != null)
                {
                    safeTilesRemaining = worldEventSafeTiles;
                    uihelper.CreateEventUI(currentWorldEvent);
                }
                //if passive event
                else if (currentEvent != null)
                {
                    RunCurrentPassiveEvent(player, rando, uihelper);
                    //safeTilesRemaining = passiveEventSafeTiles;
                    //currentEvent.PerformPassiveEventActivity(player, rando);
                    //CreateTravelFeed(currentEvent.ReturnEventText(), uihelper);
                    // ConsoleLogEvent();
                    //ClearEvent();
                }
                //if no event
                else
                {
                    if (safeTilesRemaining > 0)
                    {
                        safeTilesRemaining -= 1;
                    }
                    //player basic ticks
                    player.LoseStamina(PlayerHandler.StaminaDrainType.Travel);
                    player.LoseRested(PlayerHandler.RestedLossType.Travel);
                }


                //get next distance
                currentGridLocation += new Point((int)(totalTravelDistance.X / 64), (int)(totalTravelDistance.Y / 64));
                for (int i = 0; i < travelPath.Count; ++i)
                {
                    if (travelPath[i].routeLocation == currentGridLocation)
                    {
                        totalTravelDistance   = travelPath[i].getDirection();
                        currentTravelDistance = Vector2.Zero;
                        if (totalTravelDistance == Vector2.Zero)
                        {
                            value = -1;
                        }
                        else
                        {
                            value = travelPath[i].GetTravelEstimate();
                        }
                        break;
                    }
                }
            }

            //move
            currentTravelDistance.X += totalTravelDistance.X / 64;
            currentTravelDistance.Y += totalTravelDistance.Y / 64;



            return(value);
        }
示例#8
0
        void CheckForValidEvents(PlayerHandler player, DataManager datamanager, Random rando, GridTile.GridTerrain terraintype, Boolean isonroad, WorldMap world, int hour)
        {
            List <Event>      possibleEvents      = new List <Event>();
            List <WorldEvent> possibleWorldEvents = new List <WorldEvent>();

            //check for world events
            foreach (KeyValuePair <String, WorldEvent> e in datamanager.worldEventData)
            {
                WorldEvent worldevent = e.Value;
                //check if the mark is eligible to make a decision for options
                //party members aren't checked, but are affected by the mark's choice
                worldevent.DetermineEventOptionAvailability(player);
                //check grid and other reqs, then add to possible events
                if (worldevent.CheckForGridRequirements(terraintype, isonroad) == true &&
                    worldevent.ValidCreatureIfApplicable(world, currentGridLocation, rando, hour) == true)
                {
                    //determine the text used
                    worldevent.DetermineValidText(rando);
                    //add to possible events
                    possibleWorldEvents.Add(worldevent);
                }
            }


            //check for passive events
            foreach (KeyValuePair <String, Event> e in datamanager.passiveEventData)
            {
                //check if can occur when travelling
                if (e.Value.CanOccurWhenTravelling() == true)
                {
                    //add any eligible people to event
                    Event newevent = CheckIfPeopleEligible(e.Value, player);
                    //determine the item
                    newevent.DetermineValidItem(datamanager, rando);
                    //determine the text used
                    newevent.DetermineValidText(rando);
                    //if eligible people exist, add to event
                    if (newevent.IsEligibleExists() == true && newevent.CheckForGridRequirements(terraintype, isonroad) == true &&
                        newevent.CheckForPartySizeRequirements(player.partyMembers.Count) == true)
                    {
                        possibleEvents.Add(newevent);
                    }
                }
            }


            //check against list of posible world events
            for (int i = 0; i < possibleWorldEvents.Count; ++i)
            {
                int rand = rando.Next(0, 101);
                if (rand < possibleWorldEvents[i].ReturnEventChance())
                {
                    currentWorldEvent = possibleWorldEvents[i];
                    break;
                }
            }


            //check against list of possible passive events, only if a world event isn't going on
            if (currentWorldEvent == null)
            {
                for (int i = 0; i < possibleEvents.Count; ++i)
                {
                    int rand = rando.Next(0, 101);
                    if (rand < possibleEvents[i].ReturnEventChance())
                    {
                        SetCurrentPassiveEvent(possibleEvents[i], true, rando, player, "");
                        break;
                    }
                }
            }
        }