Esempio n. 1
0
        public ActionResult New(CivilizationForm form)
        {
            Debug.WriteLine(string.Format("POST: Civilization Controller: New Civilization - gameID={0}", GameState.GameID));
            var game = GameState.Game;

            DB_civilization civilization = new DB_civilization();

            civilization.game_id = game.Info.id;

            var selectedTraits = form.CivilizationTraits.Where(x => x.IsChecked).ToList();

            if (selectedTraits.Count > 0)
            {
                civilization.civilization_traits_1_id = selectedTraits[0].ID;
            }
            if (selectedTraits.Count > 1)
            {
                civilization.civilization_traits_2_id = selectedTraits[1].ID;
            }
            if (selectedTraits.Count > 2)
            {
                civilization.civilization_traits_3_id = selectedTraits[2].ID;
            }

            civilization.tech_level_id = (form.SelectedTechLevel == -1) ? null : form.SelectedTechLevel;

            civilization.name    = form.Name;
            civilization.colour  = form.Colour;
            civilization.rp      = form.RP;
            civilization.gmnotes = form.GMNotes;
            Database.Session.Save(civilization);

            foreach (var player in form.Players)
            {
                if (player.IsChecked)
                {
                    DB_user_civilizations userCivilization =
                        new DB_user_civilizations(
                            player.ID,
                            civilization.id,
                            game.ID,
                            game.GetPlayer(player.ID).GameUserInfo.id);
                    Database.Session.Save(userCivilization);
                }
            }

            foreach (var civilizationMet in form.MetCivilizations)
            {
                if (civilizationMet.IsChecked)
                {
                    DB_civilization_met dbCivilizationMet = new DB_civilization_met(civilization.id, civilizationMet.ID, game.ID);
                    Database.Session.Save(dbCivilizationMet);
                }
            }

            Database.Session.Flush();
            return(RedirectToRoute("Civilizations"));
        }
Esempio n. 2
0
        public ActionResult Edit(CivilizationForm form)
        {
            Debug.WriteLine(string.Format("POST: Civilization Controller: Edit Civilization - civilizationID={0}", form.ID));
            var game = GameState.Game;

            var civilization = game.Civilizations.Find(x => x.Info.id == form.ID);

            if (civilization.Info.game_id != game.Info.id)
            {
                return(RedirectToRoute("game", new { gameID = game.Info.id }));
            }

            var selectedTraits = form.CivilizationTraits.Where(x => x.IsChecked).ToList();

            if (selectedTraits.Count > 0)
            {
                civilization.Info.civilization_traits_1_id = selectedTraits[0].ID;
            }
            if (selectedTraits.Count > 1)
            {
                civilization.Info.civilization_traits_2_id = selectedTraits[1].ID;
            }
            if (selectedTraits.Count > 2)
            {
                civilization.Info.civilization_traits_3_id = selectedTraits[2].ID;
            }

            civilization.Info.tech_level_id = (form.SelectedTechLevel == -1) ? null : form.SelectedTechLevel;

            civilization.Info.name    = form.Name;
            civilization.Info.colour  = form.Colour;
            civilization.Info.rp      = form.RP;
            civilization.Info.gmnotes = form.GMNotes;
            Database.Session.Update(civilization.Info);

            #region User Civilizations
            var userCivs = Database.Session.Query <DB_user_civilizations>()
                           .Where(x => x.civilization_id == civilization.Info.id)
                           .ToList();

            var checkedOwners = form.Players
                                .Where(x => x.IsChecked)
                                .ToList();

            List <DB_user_civilizations> ownerToRemove = new List <DB_user_civilizations>();
            List <Checkbox> ownerToAdd = new List <Checkbox>();

            // First determine what to remove
            foreach (var userCiv in userCivs)
            {
                bool foundMatch = false;
                foreach (var checkBox in checkedOwners)
                {
                    // Player is already an Owner of this Civilization
                    if (userCiv.user_id == checkBox.ID)
                    {
                        foundMatch = true;
                        break;
                    }
                }

                // No longer an Owner of this Civilization
                if (!foundMatch)
                {
                    ownerToRemove.Add(userCiv);
                }
            }

            // Next determine what is new
            foreach (var checkBox in checkedOwners)
            {
                bool foundMatch = false;
                foreach (var userCiv in userCivs)
                {
                    // Player is already an Owner of this civilization
                    if (checkBox.ID == userCiv.user_id)
                    {
                        foundMatch = true;
                        break;
                    }
                }

                // We have a new owner!
                if (!foundMatch)
                {
                    ownerToAdd.Add(checkBox);
                }
            }

            // Now apply the changes
            foreach (var remove in ownerToRemove)
            {
                Database.Session.Delete(remove);
            }
            foreach (var add in ownerToAdd)
            {
                Database.Session.Save(new DB_user_civilizations(add.ID, civilization.Info.id, game.ID, game.GetPlayer(add.ID).GameUserInfo.id));
            }
            #endregion

            #region Met Civilizations
            var metCivilizations = Database.Session.Query <DB_civilization_met>()
                                   .Where(x => x.civilization_id1 == civilization.Info.id || x.civilization_id2 == civilization.Info.id)
                                   .ToList();

            var checkedMetCivilizations = form.MetCivilizations
                                          .Where(x => x.IsChecked)
                                          .ToList();

            List <DB_civilization_met> metCivilizationToRemove = new List <DB_civilization_met>();
            List <Checkbox>            metCivilizationToAdd    = new List <Checkbox>();

            // First determine what to remove
            foreach (var metCivilization in metCivilizations)
            {
                bool foundMatch = false;
                foreach (var checkBox in checkedMetCivilizations)
                {
                    // Player has already met this Civilization
                    if (metCivilization.civilization_id1 == checkBox.ID ||
                        metCivilization.civilization_id2 == checkBox.ID)
                    {
                        foundMatch = true;
                        break;
                    }
                }

                // No longer an met this Civilization
                if (!foundMatch)
                {
                    metCivilizationToRemove.Add(metCivilization);
                }
            }

            // Next determine what is new
            foreach (var checkBox in checkedMetCivilizations)
            {
                bool foundMatch = false;
                foreach (var metCivilization in metCivilizations)
                {
                    // Player has already met this civilization
                    if (checkBox.ID == metCivilization.civilization_id1 ||
                        checkBox.ID == metCivilization.civilization_id2)
                    {
                        foundMatch = true;
                        break;
                    }
                }

                // We have a new owner!
                if (!foundMatch)
                {
                    metCivilizationToAdd.Add(checkBox);
                }
            }

            // Now apply the changes
            foreach (var remove in metCivilizationToRemove)
            {
                Database.Session.Delete(remove);
            }
            foreach (var add in metCivilizationToAdd)
            {
                Database.Session.Save(new DB_civilization_met(civilization.Info.id, add.ID, game.ID));
            }
            #endregion

            Database.Session.Flush();
            return(RedirectToRoute("Civilizations"));
        }