public ActionResult New(CivilizationResearchForm form)
        {
            Debug.WriteLine(string.Format("POST: Civilization Research Controller: New"));
            DB_users user = Auth.User;
            var      game = GameState.Game;

            DB_civilization_research research = new DB_civilization_research();

            research.game_id         = game.ID;
            research.research_id     = form.SelectedResearchID.Value;
            research.civilization_id = form.CivilizationID.Value;
            Database.Session.Save(research);

            Database.Session.Flush();
            return(RedirectToRoute("ViewCivilization", new { civilizationID = form.CivilizationID.Value }));
        }
        public ActionResult Edit(CivilizationResearchForm form)
        {
            Debug.WriteLine($"POST: Civilization Research Controller: Edit");
            DB_users user = Auth.User;
            var      game = GameState.Game;

            DB_civilization_research research = FindCivilizationResearch(form.ID).CivilizationInfo;

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

            if (RequireGMAdminAttribute.IsGMOrAdmin())
            {
                research.research_id     = form.SelectedResearchID.Value;
                research.civilization_id = form.CivilizationID.Value;
            }
            Database.Session.Update(research);

            Database.Session.Flush();
            return(RedirectToRoute("ViewCivilization", new { civilizationID = form.CivilizationID.Value }));
        }
Esempio n. 3
0
        public void ProcessTurn()
        {
            int militaryResearchBuildRate = CalculateScienceBuildRate(true);
            int civilianResearchBuildRate = CalculateScienceBuildRate(false);

            foreach (var research in IncompleteResearch)
            {
                if (research.BuildingAt.CivilizationInfo.current_health <= 0)
                {
                    continue;
                }
                int buildRate = 0;

                // Add in the Military Status Build Rate
                if (research.BeingResearched.apply_military)
                {
                    if (research.BuildingAt.CivilizationInfo.is_military == true)
                    {
                        buildRate += research.BuildingAt.InfrastructureInfo.Infrastructure.science_bonus;
                    }

                    buildRate += militaryResearchBuildRate;
                }
                else
                {
                    if (research.BuildingAt.CivilizationInfo.is_military == false)
                    {
                        buildRate += research.BuildingAt.InfrastructureInfo.Infrastructure.science_bonus;
                    }

                    buildRate += civilianResearchBuildRate;
                }

                // Append the temp variable to the build percentage
                research.Info.build_percentage += buildRate;

                // And if the item is more than 100% built, we go ahead and build the item, disposing of the R&D in the process
                if (research.Info.build_percentage >= 100)
                {
                    DB_civilization_research civResearch = new DB_civilization_research();
                    civResearch.civilization_id = research.Info.civilization_id;
                    civResearch.game_id         = research.Info.game_id;
                    civResearch.research_id     = research.Info.research_id;
                    Database.Session.Save(civResearch);

                    Database.Session.Delete(research.Info);
                }
                else // Otherwise, just update the status
                {
                    Database.Session.Update(research.Info);
                }
            }

            int militaryColonialDevelopmentBonus = CalculateColonialDevelopmentBonus(true);
            int civilianColonialDevelopmentBonus = CalculateColonialDevelopmentBonus(false);

            foreach (var infrastructure in IncompleteInfrastructure)
            {
                if (infrastructure.BuildingAt.CivilizationInfo.current_health <= 0)
                {
                    continue;
                }
                int buildRate = 0;

                // Check if the facility we are building it at is equal to the units military status
                buildRate += infrastructure.BuildingAt.Planet.TierInfo.build_rate;
                if (infrastructure.BuildingAt.CivilizationInfo.is_military == infrastructure.BeingBuilt.Infrastructure.is_military)
                {
                    buildRate += infrastructure.BuildingAt.InfrastructureInfo.Infrastructure.colonial_development_bonus;
                }

                // Add in the Military Status Build Rate
                if (infrastructure.BeingBuilt.Infrastructure.is_military)
                {
                    buildRate += militaryColonialDevelopmentBonus;
                }
                else
                {
                    buildRate += civilianColonialDevelopmentBonus;
                }

                // Append the temp variable to the build percentage
                infrastructure.Info.build_percentage += buildRate;

                // And if the item is more than 100% built, we go ahead and build the item, disposing of the R&D in the process
                if (infrastructure.Info.build_percentage >= 100)
                {
                    int maxHealth = infrastructure.BeingBuilt.Infrastructure.base_health;
                    foreach (var research in CompletedResearch)
                    {
                        if (research.ResearchInfo.apply_infrastructure)
                        {
                            maxHealth += research.ResearchInfo.health_bonus;
                        }
                    }

                    DB_civilization_infrastructure civInfrastructure = new DB_civilization_infrastructure();
                    civInfrastructure.game_id         = infrastructure.Info.game_id;
                    civInfrastructure.civilization_id = infrastructure.Info.civilization_id;
                    civInfrastructure.planet_id       = infrastructure.Info.planet_id;
                    civInfrastructure.struct_id       = infrastructure.Info.struct_id;
                    civInfrastructure.name            = infrastructure.Info.name;
                    civInfrastructure.current_health  = maxHealth;
                    civInfrastructure.can_upgrade     = infrastructure.BeingBuilt.UpgradeInfrastructure.Count > 0;
                    civInfrastructure.is_military     = infrastructure.BeingBuilt.Infrastructure.is_military;
                    Database.Session.Save(civInfrastructure);

                    Database.Session.Delete(infrastructure.Info);
                }
                else // Otherwise, just update the status
                {
                    Database.Session.Update(infrastructure.Info);
                }
            }

            int militaryShipConstructionBonus = CalculateShipConstructionBonus(true);
            int civilianShipConstructionBonus = CalculateShipConstructionBonus(false);

            foreach (var ship in IncompleteSpaceUnits)
            {
                if (ship.BuildingAt.CivilizationInfo.current_health <= 0)
                {
                    continue;
                }
                int buildRate = 0;

                // Check if the facility we are building it at is equal to the units military status
                if (ship.BuildingAt.CivilizationInfo.is_military == ship.BeingBuilt.UnitCategory.is_military)
                {
                    buildRate += ship.BeingBuilt.UnitCategory.build_rate;
                    buildRate += ship.BuildingAt.InfrastructureInfo.Infrastructure.ship_construction_bonus;
                }

                // Add in the Military Status Build Rate
                if (ship.BeingBuilt.UnitCategory.is_military)
                {
                    buildRate += militaryShipConstructionBonus;
                }
                else
                {
                    buildRate += civilianShipConstructionBonus;
                }

                // Append the temp variable to the build percentage
                ship.Info.build_percentage += buildRate;

                // And if the item is more than 100% built, we go ahead and build the item, disposing of the R&D in the process
                if (ship.Info.build_percentage >= 100)
                {
                    int maxHealth = ship.BeingBuilt.Info.base_health;
                    foreach (var research in CompletedResearch)
                    {
                        if (research.ResearchInfo.apply_ships)
                        {
                            maxHealth += research.ResearchInfo.health_bonus;
                        }
                    }

                    for (int i = 0; i < ship.BeingBuilt.Info.number_to_build; i++)
                    {
                        var newShip = new DB_civilization_units();
                        newShip.battlegroup_id  = null;
                        newShip.civilization_id = ship.Info.civilization_id;
                        newShip.current_health  = maxHealth;
                        newShip.experience      = 0;
                        newShip.game_id         = ship.Info.game_id;
                        newShip.gmnotes         = "";
                        newShip.name            = ship.Info.name;
                        newShip.species_id      = ship.Info.species_id;
                        newShip.unit_id         = ship.Info.unit_id;
                        Database.Session.Save(newShip);
                    }

                    Database.Session.Delete(ship.Info);
                }
                else // Otherwise, just update the status
                {
                    Database.Session.Update(ship.Info);
                }
            }

            int militaryUnitTrainingBonus = CalculateUnitTrainingBonus(true);
            int civilianUnitTrainingBonus = CalculateUnitTrainingBonus(false);

            foreach (var unit in IncompleteGroundUnits)
            {
                if (unit.BuildingAt.CivilizationInfo.current_health <= 0)
                {
                    continue;
                }
                int buildRate = 0;

                // Check if the facility we are building it at is equal to the units military status
                if (unit.BuildingAt.CivilizationInfo.is_military == unit.BeingBuilt.UnitCategory.is_military)
                {
                    buildRate += unit.BeingBuilt.UnitCategory.build_rate;
                    buildRate += unit.BuildingAt.InfrastructureInfo.Infrastructure.unit_training_bonus;
                }

                // Add in the Military Status Build Rate
                if (unit.BeingBuilt.UnitCategory.is_military)
                {
                    buildRate += militaryUnitTrainingBonus;
                }
                else
                {
                    buildRate += civilianUnitTrainingBonus;
                }

                // Append the temp variable to the build percentage
                unit.Info.build_percentage += buildRate;

                // And if the item is more than 100% built, we go ahead and build the item, disposing of the R&D in the process
                if (unit.Info.build_percentage >= 100)
                {
                    int maxHealth = unit.BeingBuilt.Info.base_health;
                    foreach (var research in CompletedResearch)
                    {
                        if (research.ResearchInfo.apply_ships)
                        {
                            maxHealth += research.ResearchInfo.health_bonus;
                        }
                    }

                    var newUnit = new DB_civilization_units();
                    newUnit.battlegroup_id  = null;
                    newUnit.civilization_id = unit.Info.civilization_id;
                    newUnit.current_health  = maxHealth;
                    newUnit.experience      = 0;
                    newUnit.game_id         = unit.Info.game_id;
                    newUnit.gmnotes         = "";
                    newUnit.name            = unit.Info.name;
                    newUnit.species_id      = unit.Info.species_id;
                    newUnit.unit_id         = unit.Info.unit_id;
                    Database.Session.Save(newUnit);

                    Database.Session.Delete(unit.Info);
                }
                else // Otherwise, just update the status
                {
                    Database.Session.Update(unit.Info);
                }
            }
        }
Esempio n. 4
0
 public Research(DB_civilization_research info, Civilization owner)
 {
     CivilizationInfo = info;
     Owner            = owner;
 }