/// <summary> /// Creates an item from its category and its internal name /// </summary> /// <param name="category"></param> /// <param name="internalName"></param> /// <returns></returns> public MapItem CreateItem(string category, int itemID) { IItemFactoryManager mgr = null; switch (category.ToLower()) { case "mundaneitem": mgr = new MundaneItemsManager(); break; case "mundaneitems": mgr = new MundaneItemsManager(); break; case "tile": mgr = new TilesManager(); break; case "tiles": mgr = new TilesManager(); break; case "toggleitems": mgr = new ToggleItemsManager(); break; case "toggleitem": mgr = new ToggleItemsManager(); break; case "enemies": mgr = new EnemyManager(); break; case "inventoryitems": mgr = new InventoryItemManager(); break; default: throw new NotImplementedException("The category : " + category + " could not be found"); } return mgr.CreateItem(itemID); }
public override void Initialize() { base.Initialize(); if (parameters.Length == 0) { TestFunctions.PrepareFileTestMap(); } else if (parameters[0].ToString().Equals("Village")) { //TestFunctions.ParseXML(); TestFunctions.GenerateSettlement(); InventoryItemManager mgr = new InventoryItemManager(); for (int i = 0; i < 500; i++) { var block = GameState.LocalMap.GetBlockAtCoordinate(new MapCoordinate(GameState.Random.Next(GameState.LocalMap.localGameMap.GetLength(0)), GameState.Random.Next(GameState.LocalMap.localGameMap.GetLength(1)), 0, MapType.LOCAL)); if (block.MayContainItems) { var item = mgr.CreateItem(DatabaseHandling.GetItemIdFromTag(Archetype.INVENTORYITEMS, "loot")) as InventoryItem; item.Coordinate = new MapCoordinate(block.Tile.Coordinate); block.ForcePutItemOnBlock(item); } } //Create the new character stuff MultiDecisionComponent mdc = new MultiDecisionComponent(PlayableWidth / 2 - 250, 150, CharacterCreation.GenerateCharacterCreation()); mdc.Visible = true; interfaceComponents.Add(mdc); GameState.LocalMap.IsGlobalMap = false; } else if (parameters[0].ToString().Equals("Continue")) { GameState.LoadGame(); } else if (parameters[0].ToString().Equals("WorldMap")) { //Load from the world map var worldMap = GameState.GlobalMap.globalGameMap; List<MapBlock> collapsedMap = new List<MapBlock>(); foreach (var block in worldMap) { collapsedMap.Add(block); } GameState.LocalMap = new LocalMap(GameState.GlobalMap.globalGameMap.GetLength(0), GameState.GlobalMap.globalGameMap.GetLength(1), 1, 0); //Go through each of them, add them to the local map GameState.LocalMap.AddToLocalMap(collapsedMap.ToArray()); //Let's start the player off at the first capital var coordinate = GameState.GlobalMap.WorldSettlements.Where(w => w.IsCapital).Select(w => w.Coordinate).FirstOrDefault(); //Create the player character. For now randomly. Later we'll start at a capital MapItem player = new MapItem(); player.Coordinate = new MapCoordinate(coordinate); player.Description = "The player character"; player.Graphic = SpriteManager.GetSprite(LocalSpriteName.PLAYERCHAR_MALE); player.InternalName = "Player Char"; player.MayContainItems = false; player.Name = "Player"; MapBlock playerBlock = GameState.LocalMap.GetBlockAtCoordinate(player.Coordinate); playerBlock.PutItemOnBlock(player); GameState.PlayerCharacter = new Actor(); GameState.PlayerCharacter.MapCharacter = player; GameState.PlayerCharacter.IsPlayerCharacter = true; GameState.PlayerCharacter.Attributes = ActorGeneration.GenerateAttributes("human", DRObjects.ActorHandling.CharacterSheet.Enums.ActorProfession.WARRIOR, 10, GameState.PlayerCharacter); GameState.PlayerCharacter.Anatomy = ActorGeneration.GenerateAnatomy("human"); GameState.PlayerCharacter.Attributes.Health = GameState.PlayerCharacter.Anatomy; GameState.PlayerCharacter.Inventory.EquippedItems = ActorGeneration.GenerateEquippedItems(250); //give him 250 worth of stuff foreach (var item in GameState.PlayerCharacter.Inventory.EquippedItems.Values) { GameState.PlayerCharacter.Inventory.Inventory.Add(item.Category, item); } GameState.LocalMap.Actors.Add(GameState.PlayerCharacter); //What attributes do we want? MultiDecisionComponent mdc = new MultiDecisionComponent(PlayableWidth / 2 - 250, 150, CharacterCreation.GenerateCharacterCreation()); mdc.Visible = true; interfaceComponents.Add(mdc); GameState.LocalMap.IsGlobalMap = true; } else if (parameters[0].ToString().Equals("Camp")) { TestFunctions.ParseXML(); } else { TestFunctions.GenerateDungeon(); //Give him random stats so he won't completly suck CharacterCreation.ProcessParameters(CharacterCreation.GenerateRandom()); //Also give him a bow of some sort InventoryItemManager iim = new InventoryItemManager(); InventoryItem item = iim.GetBestCanAfford("WEAPON", 500); GameState.PlayerCharacter.SpecialAttacks[0] = SpecialAttacksGenerator.GenerateSpecialAttack(1); GameState.PlayerCharacter.SpecialAttacks[1] = SpecialAttacksGenerator.GenerateSpecialAttack(2); GameState.PlayerCharacter.SpecialAttacks[2] = SpecialAttacksGenerator.GenerateSpecialAttack(3); GameState.PlayerCharacter.SpecialAttacks[1].TimeOutLeft = 5; // GameState.PlayerCharacter.SpecialAttacks[3] = SpecialAttacksGenerator.GenerateSpecialAttack(4); // GameState.PlayerCharacter.SpecialAttacks[4] = SpecialAttacksGenerator.GenerateSpecialAttack(5); item.InInventory = true; //Give them a bunch of potions at random for (int i = 0; i < 5; i++ ) { var potionType = (PotionType[])Enum.GetValues(typeof(PotionType)); var potion = potionType.GetRandom(); var p = new Potion(potion); p.InInventory = true; GameState.PlayerCharacter.Inventory.Inventory.Add(p.Category, p); } GameState.PlayerCharacter.Inventory.Inventory.Add(item.Category, item); } //Add the health control HealthDisplayComponent hdc = new HealthDisplayComponent(50, 50, GameState.LocalMap.Actors.Where(a => a.IsPlayerCharacter).FirstOrDefault()); hdc.Visible = false; interfaceComponents.Add(hdc); CharacterSheetComponent csc = new CharacterSheetComponent(50, 50, GameState.LocalMap.Actors.Where(a => a.IsPlayerCharacter).FirstOrDefault()); csc.Visible = false; interfaceComponents.Add(csc); InventoryDisplayComponent ivt = new InventoryDisplayComponent(50, 50, GameState.LocalMap.Actors.Where(a => a.IsPlayerCharacter).FirstOrDefault()); ivt.Visible = false; interfaceComponents.Add(ivt); TextLogComponent tlc = new TextLogComponent(10, GraphicsDevice.Viewport.Height - 50, GameState.NewLog); tlc.Visible = true; interfaceComponents.Add(tlc); log = tlc; AdventureDisplayComponent tdc = new AdventureDisplayComponent(GraphicsDevice.Viewport.Width / 2 - 100, 0); interfaceComponents.Add(tdc); var cemetry = SpriteManager.GetSprite(InterfaceSpriteName.DEAD); //Create the menu buttons menuButtons.Add(new AutoSizeGameButton(" Health ", this.game.Content, InternalActionEnum.OPEN_HEALTH, new object[] { }, 50, GraphicsDevice.Viewport.Height - 35)); menuButtons.Add(new AutoSizeGameButton(" Attributes ", this.game.Content, InternalActionEnum.OPEN_ATTRIBUTES, new object[] { }, 150, GraphicsDevice.Viewport.Height - 35)); if (GameState.LocalMap.Location as Settlement != null) { menuButtons.Add(new AutoSizeGameButton(" Settlement ", this.game.Content, InternalActionEnum.TOGGLE_SETTLEMENT, new object[] { }, 270, GraphicsDevice.Viewport.Height - 35)); LocationDetailsComponent ldc = new LocationDetailsComponent(GameState.LocalMap.Location as Settlement, PlayableWidth - 170, 0); ldc.Visible = true; interfaceComponents.Add(ldc); } menuButtons.Add(new AutoSizeGameButton(" Inventory ", this.game.Content, InternalActionEnum.OPEN_INVENTORY, new object[] { }, 350, GraphicsDevice.Viewport.Height - 35)); //Invoke a size change Window_ClientSizeChanged(null, null); }