public Location LoadStorageRoom()
        {
            Location returnData;

            returnData             = new Location();
            returnData.Name        = "Storage Room";
            returnData.Description = "A small room full of boxes and loose supplies.";
            string itemName = "Rope";

            _takeRope = Convert.ToBoolean(LocationHandler.GetLocationStateValue(Watertown.LOCATION_STATE_KEY, WatertownBanditCaveDeeper.TAKE_ROPE_KEY));

            // Location Actions
            List <LocationAction> locationActions = new List <LocationAction>();

            if (!_takeRope)
            {
                TakeItemAction itemAction = new TakeItemAction(itemName);
                locationActions.Add(itemAction);
                itemAction.PostItem += RopeResults;
                returnData.Actions   = locationActions;
            }

            // Adjacent Locations
            Dictionary <string, LocationDefinition> adjacentLocationDefinitions = new Dictionary <string, LocationDefinition>();
            LocationDefinition locationDefinition = WatertownBanditCaveDeeper.GetTownInstance().GetJailCellDefinition();

            adjacentLocationDefinitions.Add(locationDefinition.LocationKey, locationDefinition);

            returnData.AdjacentLocationDefinitions = adjacentLocationDefinitions;

            return(returnData);
        }
        public Location LoadBanditHideOut()
        {
            Location returnData;

            returnData      = new Location();
            returnData.Name = "Hideout";
            string itemName = "Wood";

            _takeWood = Convert.ToBoolean(LocationHandler.GetLocationStateValue(Watertown.LOCATION_STATE_KEY, WatertownBanditCaveDeeper.TAKE_WOOD_KEY));
            bool defeatedBandits = Convert.ToBoolean(LocationHandler.GetLocationStateValue(Watertown.LOCATION_STATE_KEY, WatertownBanditCaveDeeper.DEFEATED_HIDEOUT_BANDITS_KEY));

            // Location Actions
            List <LocationAction> locationActions = new List <LocationAction>();

            if (!defeatedBandits)
            {
                returnData.Description = "A small room with four bandits sitting at a table.";

                List <Mob> bandits = new List <Mob>();
                bandits.Add(new Bandit());
                bandits.Add(new Bandit());
                bandits.Add(new Bandit());
                bandits.Add(new Bandit());

                CombatAction combatAction = new CombatAction("Bandits", bandits);
                combatAction.PostCombat += HideoutBanditResults;
                locationActions.Add(combatAction);
                returnData.Actions = locationActions;
            }

            if (defeatedBandits)
            {
                returnData.Description = "A small room with a empty table. Bandits lay dead on the ground.";

                if (!_takeWood)
                {
                    TakeItemAction itemAction = new TakeItemAction(itemName);
                    locationActions.Add(itemAction);
                    itemAction.PostItem += WoodResult;
                    returnData.Actions   = locationActions;
                }
            }

            // Adjacent Locations
            Dictionary <string, LocationDefinition> adjacentLocationDefinitions = new Dictionary <string, LocationDefinition>();
            LocationDefinition locationDefinition = WatertownBanditCaveDeeper.GetTownInstance().GetJailCellDefinition();

            adjacentLocationDefinitions.Add(locationDefinition.LocationKey, locationDefinition);

            if (defeatedBandits)
            {
                locationDefinition = WatertownBanditCaveDeeper.GetTownInstance().GetHallwayDefinition();
                adjacentLocationDefinitions.Add(locationDefinition.LocationKey, locationDefinition);
            }

            returnData.AdjacentLocationDefinitions = adjacentLocationDefinitions;

            return(returnData);
        }
        public static WatertownBanditCaveDeeper GetTownInstance()
        {
            if (_WatertownBanditCaveDeeper == null)
            {
                _WatertownBanditCaveDeeper = new WatertownBanditCaveDeeper();
            }

            return(_WatertownBanditCaveDeeper);
        }
        public Location LoadCaveDeeperEntrance()
        {
            Location returnData;

            returnData      = new Location();
            returnData.Name = "Bandit Cave Hidden Room";
            string paperText = "To whomever it may concern, \nWe were supposed to get a shipment of supplies a week ago! Find out what went wrong! I'll be in \ncontact again if this isn't sorted out...\n";
            bool   readPaper = Convert.ToBoolean(LocationHandler.GetLocationStateValue(Watertown.LOCATION_STATE_KEY, WatertownBanditCaveDeeper.READ_PAPER_KEY));

            // Location Actions
            List <LocationAction> locationActions = new List <LocationAction>();

            if (!readPaper)
            {
                returnData.Description = "A study lined with bookshelves with a desk in the middle of the room. There are papers scattered about the desk.";

                ReadPapersAction paperReadAction = new ReadPapersAction(paperText);
                locationActions.Add(paperReadAction);
                paperReadAction.PostPaper += PaperResults;
                returnData.Actions         = locationActions;
            }

            if (_takeSaw && _takeRope && _takeWood)
            {
                returnData.Description = "A study lined with bookshelves. A desk was pushed up against the wall with paper scattered across the floor. There is a pool of blood where the desk used to be.";
            }
            else
            {
                returnData.Description = "A study lined with bookshelves with a desk in the middle of the room. There are papers scattered about the desk.";
            }

            // Adjacent Locations
            Dictionary <string, LocationDefinition> adjacentLocationDefinitions = new Dictionary <string, LocationDefinition>();
            LocationDefinition locationDefinition = WatertownBanditCave.GetTownInstance().GetLairDefinition();

            adjacentLocationDefinitions.Add(locationDefinition.LocationKey, locationDefinition);
            if (readPaper)
            {
                locationDefinition = WatertownBanditCaveDeeper.GetTownInstance().GetJailCellDefinition();
                adjacentLocationDefinitions.Add(locationDefinition.LocationKey, locationDefinition);
            }
            if (_takeWood && _takeRope && _takeSaw)
            {
                locationDefinition = Watertown.GetTownInstance().GetTownCenterDefinition();
                adjacentLocationDefinitions.Add(locationDefinition.LocationKey, locationDefinition);

                LocationHandler.SetLocationStateValue(Watertown.LOCATION_STATE_KEY, DEFEATED_BANDIT_SUPPLY_CAPTAIN_KEY, true);
                LocationHandler.ResetLocation(Watertown.INN_KEY); // Need to reload Inn so that new conversation can be set.
            }

            returnData.AdjacentLocationDefinitions = adjacentLocationDefinitions;

            return(returnData);
        }
        public Location Lair()
        {
            Location returnData;
            bool     defeatedLieutenant = Convert.ToBoolean(LocationHandler.GetLocationStateValue(Watertown.LOCATION_STATE_KEY, WatertownBanditCave.DEFEATED_LIEUTENANT_KEY));

            returnData      = new Location();
            returnData.Name = "Lieutenant's Lair";
            Accomplishment hiddenRoomAccomplishment = Watertown.GetWatertownAccomplishments().Find(x => x.Name.Contains("Hidden Room"));

            if (!defeatedLieutenant)
            {
                returnData.Description = "A large room, furnished with expensive decorations. The Lieutenant stands in the middle of the room";

                // Location Actions
                List <LocationAction> locationActions = new List <LocationAction>();

                List <Mob> bandits = new List <Mob>();
                bandits.Add(new BanditLieutenant());

                CombatAction combatAction = new CombatAction("Bandit Lieutenant", bandits);
                combatAction.PostCombat += LairResults;
                locationActions.Add(combatAction);
                returnData.Actions = locationActions;
            }
            else
            {
                returnData.Description = "A large ornate room. The Bandit Lieutenant lays dead in the middle of the room. There's a book shelf against the left hand wall that seems out of place. You wonder why it's there...";
            }

            // Adjacent Locations
            Dictionary <string, LocationDefinition> adjacentLocationDefinitions = new Dictionary <string, LocationDefinition>();
            LocationDefinition locationDefinition = WatertownBanditCave.GetTownInstance().GetCaveHallwayDefinition();

            adjacentLocationDefinitions.Add(locationDefinition.LocationKey, locationDefinition);
            if (GameState.Hero.Accomplishments.Contains(hiddenRoomAccomplishment))
            {
                locationDefinition = WatertownBanditCaveDeeper.GetTownInstance().GetStartingLocationDefinition();
                adjacentLocationDefinitions.Add(locationDefinition.LocationKey, locationDefinition);
            }
            if (defeatedLieutenant)
            {
                locationDefinition = Watertown.GetTownInstance().GetTownCenterDefinition();
                adjacentLocationDefinitions.Add(locationDefinition.LocationKey, locationDefinition);

                LocationHandler.SetLocationStateValue(Watertown.LOCATION_STATE_KEY, DEFEATED_LIEUTENANT_KEY, true);
                LocationHandler.ResetLocation(Watertown.INN_KEY); // Need to reload Inn so that new conversation can be set.
            }

            returnData.AdjacentLocationDefinitions = adjacentLocationDefinitions;


            return(returnData);
        }
        public Location LoadFoodRoom()
        {
            Location returnData;

            returnData      = new Location();
            returnData.Name = "Food Room";
            string itemName = "Saw";

            _takeSaw = Convert.ToBoolean(LocationHandler.GetLocationStateValue(Watertown.LOCATION_STATE_KEY, WatertownBanditCaveDeeper.TAKE_SAW_KEY));
            bool defeatedBandits = Convert.ToBoolean(LocationHandler.GetLocationStateValue(Watertown.LOCATION_STATE_KEY, WatertownBanditCaveDeeper.DEFEATED_BANDIT_SUPPLY_CAPTAIN_KEY));

            // Location Actions
            List <LocationAction> locationActions = new List <LocationAction>();

            if (!defeatedBandits)
            {
                returnData.Description = "A large room filled with boxes of food. A bandit in elaborate clothes is inspecting the boxes.";

                List <Mob> supplyCaptain = new List <Mob>();
                supplyCaptain.Add(new BanditSupplyCaptain());


                CombatAction combatAction = new CombatAction("Bandit Supply Captain", supplyCaptain);
                combatAction.PostCombat += SupplyCaptainResult;
                locationActions.Add(combatAction);
                returnData.Actions = locationActions;
            }

            if (defeatedBandits)
            {
                returnData.Description = "A large room filled with boxes of food. The bandit supply captain's body lays pushed against a corner of the room.";

                if (!_takeSaw)
                {
                    TakeItemAction itemAction = new TakeItemAction(itemName);
                    locationActions.Add(itemAction);
                    itemAction.PostItem += SawResult;
                    returnData.Actions   = locationActions;
                }
            }

            // Adjacent Locations
            Dictionary <string, LocationDefinition> adjacentLocationDefinitions = new Dictionary <string, LocationDefinition>();
            LocationDefinition locationDefinition = WatertownBanditCaveDeeper.GetTownInstance().GetHallwayDefinition();

            adjacentLocationDefinitions.Add(locationDefinition.LocationKey, locationDefinition);

            returnData.AdjacentLocationDefinitions = adjacentLocationDefinitions;

            return(returnData);
        }
        public Location LoadHallway()
        {
            Location returnData;

            returnData      = new Location();
            returnData.Name = "Hallway";
            bool defeatedBandits = Convert.ToBoolean(LocationHandler.GetLocationStateValue(Watertown.LOCATION_STATE_KEY, WatertownBanditCaveDeeper.DEFEATED_HALLWAY_BANDITS_KEY));

            // Location Actions
            List <LocationAction> locationActions = new List <LocationAction>();

            if (!defeatedBandits)
            {
                returnData.Description = "A narrow hallway with bandits walking down from the supply room";

                List <Mob> bandits = new List <Mob>();
                bandits.Add(new Bandit());
                bandits.Add(new Bandit());

                CombatAction combatAction = new CombatAction("Bandits", bandits);
                combatAction.PostCombat += HallwayBanditResults;
                locationActions.Add(combatAction);
                returnData.Actions = locationActions;
            }

            if (defeatedBandits)
            {
                returnData.Description = "A narrow hallway. Two bandits lay slaughtered on the ground.";
            }

            // Adjacent Locations
            Dictionary <string, LocationDefinition> adjacentLocationDefinitions = new Dictionary <string, LocationDefinition>();
            LocationDefinition locationDefinition = WatertownBanditCaveDeeper.GetTownInstance().GetHideoutDefinition();

            adjacentLocationDefinitions.Add(locationDefinition.LocationKey, locationDefinition);

            if (defeatedBandits)
            {
                locationDefinition = WatertownBanditCaveDeeper.GetTownInstance().GetFoodRoomDefiniton();
                adjacentLocationDefinitions.Add(locationDefinition.LocationKey, locationDefinition);
            }

            returnData.AdjacentLocationDefinitions = adjacentLocationDefinitions;

            return(returnData);
        }
        public Location LoadJailCell()
        {
            Location returnData;

            returnData             = new Location();
            returnData.Name        = "Jail Cell";
            returnData.Description = "A small and dirty jail cell. It stinks of decaying flesh. And something horrid and rotten.";
            bool ladder = Convert.ToBoolean(LocationHandler.GetLocationStateValue(Watertown.LOCATION_STATE_KEY, WatertownBanditCaveDeeper.BUILD_LADDER_KEY));


            if (_takeRope && _takeSaw && _takeWood && !ladder)
            {
                List <LocationAction> locationActions = new List <LocationAction>();
                TakeItemAction        itemAction      = new TakeItemAction("Build Ladder");
                locationActions.Add(itemAction);
                itemAction.PostItem += LadderResult;
                returnData.Actions   = locationActions;
            }

            // Adjacent Locations
            Dictionary <string, LocationDefinition> adjacentLocationDefinitions = new Dictionary <string, LocationDefinition>();
            LocationDefinition locationDefinition = WatertownBanditCaveDeeper.GetTownInstance().GetStorageRoomDefinition();

            adjacentLocationDefinitions.Add(locationDefinition.LocationKey, locationDefinition);
            locationDefinition = WatertownBanditCaveDeeper.GetTownInstance().GetHideoutDefinition();
            adjacentLocationDefinitions.Add(locationDefinition.LocationKey, locationDefinition);

            if (ladder)
            {
                locationDefinition = WatertownBanditCaveDeeper.GetTownInstance().GetStartingLocationDefinition();
                adjacentLocationDefinitions.Add(locationDefinition.LocationKey, locationDefinition);
            }

            returnData.AdjacentLocationDefinitions = adjacentLocationDefinitions;

            return(returnData);
        }