private void SpawnItemsRandomly(int levelIndex, MapGeneratorBSP mapGen) { //Item catalogue List<Item> meleeRelatedItems = new List<Item>(); meleeRelatedItems.Add(new Items.Vibroblade()); meleeRelatedItems.Add(new Items.Pistol()); meleeRelatedItems.Sort((x,y) => x.ItemCost().CompareTo(y.ItemCost())); List<Item> rangedRelatedItems = new List<Item>(); rangedRelatedItems.Add(new Items.Shotgun()); rangedRelatedItems.Add(new Items.Laser()); rangedRelatedItems.Add(new Items.Pistol()); rangedRelatedItems.Sort((x,y) => x.ItemCost().CompareTo(y.ItemCost())); List<Item> grenadeRelatedItems = new List<Item>(); grenadeRelatedItems.Add(new Items.SoundGrenade()); grenadeRelatedItems.Add(new Items.FragGrenade()); grenadeRelatedItems.Add(new Items.StunGrenade()); grenadeRelatedItems.Sort((x,y) => x.ItemCost().CompareTo(y.ItemCost())); List<Item> healingRelatedItems = new List<Item>(); healingRelatedItems.Add(new Items.NanoRepair()); healingRelatedItems.Add(new Items.TacticalOverlay()); healingRelatedItems.Add(new Items.StealthCloak()); healingRelatedItems.Sort((x,y) => x.ItemCost().CompareTo(y.ItemCost())); List<List<Item>> itemCatalogue = new List<List<Item>>(); itemCatalogue.Add(meleeRelatedItems); itemCatalogue.Add(rangedRelatedItems); itemCatalogue.Add(healingRelatedItems); //Grenades go in last to suck up any left-over budget itemCatalogue.Add(grenadeRelatedItems); //Calculate the budget we have to spend int itemBudget = 60 + (levelIndex - 5) * 10; //Divide between different types List<double> budgetRatios = new List<double>(); double meleeRelatedBudgetRatio = Game.Random.NextDouble(); budgetRatios.Add(meleeRelatedBudgetRatio); double firingRelatedBudgetRatio = 1 - meleeRelatedBudgetRatio; budgetRatios.Add(firingRelatedBudgetRatio); double grenadeRelatedBudgeRadio = Game.Random.NextDouble(); budgetRatios.Add(grenadeRelatedBudgeRadio); double healingRelatedBudgeRadio = Game.Random.NextDouble(); budgetRatios.Add(healingRelatedBudgeRadio); //Calculate budget split double totalRatio = 0.0; foreach(double d in budgetRatios) { totalRatio += d; } double ratioToTotalBudget = itemBudget / totalRatio; double remainder = 0.0; //To hold all the items to place List<Item> itemsToPlace = new List<Item>(); //Spend budget on each catalogue, depending upon ratio for (int i = 0; i < itemCatalogue.Count; i++) { double categoryBudget = budgetRatios[i] * ratioToTotalBudget + remainder; remainder = (double)SpendItemBudget((int)categoryBudget, itemCatalogue[i], itemsToPlace); } LogFile.Log.LogEntryDebug("SpawnItemsRandomly: level: " + levelIndex + " total budget: " + itemBudget + " remainder: " + remainder, LogDebugLevel.High); //Add any standard items //1 healing kit itemsToPlace.Add(new Items.NanoRepair()); //Actually add the items List<RoomCoords> allRooms = mapGen.GetAllRooms(); AddItemsEqualDistribution(itemsToPlace, levelIndex, mapGen); //Pistol at start location AddItemAtLocation(new Items.Pistol(), levelIndex, mapGen.GetPlayerStartLocation()); }
private void SpawnItemsLevel4(int levelIndex, MapGeneratorBSP mapGen) { List<RoomCoords> allRooms = mapGen.GetAllRooms(); //Pistol at start location AddItemAtLocation(new Items.Pistol(), levelIndex, mapGen.GetPlayerStartLocation()); //Spawn some items List<Item> itemsToPlace = new List<Item>(); itemsToPlace.Add(new Items.SoundGrenade()); itemsToPlace.Add(new Items.SoundGrenade()); itemsToPlace.Add(new Items.SoundGrenade()); itemsToPlace.Add(new Items.SoundGrenade()); itemsToPlace.Add(new Items.FragGrenade()); itemsToPlace.Add(new Items.FragGrenade()); itemsToPlace.Add(new Items.NanoRepair()); AddItemsEqualDistribution(itemsToPlace, levelIndex, mapGen); }
private void SpawnItemsLevel6(int levelIndex, MapGeneratorBSP mapGen) { List<RoomCoords> allRooms = mapGen.GetAllRooms(); //Pistol at start location AddItemAtLocation(new Items.Laser(), levelIndex, mapGen.GetPlayerStartLocation()); AddItemAtLocation(new Items.StealthCloak(), levelIndex, mapGen.GetPlayerStartLocation()); //Spawn some items List<Item> itemsToPlace = new List<Item>(); itemsToPlace.Add(new Items.TacticalOverlay()); itemsToPlace.Add(new Items.StealthCloak()); AddItemsEqualDistribution(itemsToPlace, levelIndex, mapGen); }
private void SpawnItemsLevel2(int levelIndex, MapGeneratorBSP mapGen) { List<RoomCoords> allRooms = mapGen.GetAllRooms(); //Spawn some items List<Item> itemsToPlace = new List<Item>(); //Tempt the player with the shotgun //AddItemCloseToLocation(new Items.Shotgun(), 0, mapGen.GetPlayerStartLocation()); AddItemAtLocation(new Items.Shotgun(), levelIndex, mapGen.GetPlayerStartLocation()); //Vibroblade is a better choice itemsToPlace.Add(new Items.Vibroblade()); //Another shotty itemsToPlace.Add(new Items.Shotgun()); AddItemsEqualDistribution(itemsToPlace, levelIndex, mapGen); }