Beispiel #1
0
        public ActionResult New(CivilizationInfrastructureForm form)
        {
            Debug.WriteLine($"POST: Civilization Infrastructure Controller: New");
            DB_users user = Auth.User;
            var      game = GameState.Game;

            var planet   = game.Sector.PlanetFromID(form.PlanetID.Value);
            var dbStruct = game.GameStatistics.InfrastructureRaw
                           .Where(x => x.id == form.SelectedInfrastructureID.Value)
                           .FirstOrDefault();

            if (planet == null || dbStruct == null)
            {
                return(RedirectToRoute("ViewCivilization", new { civilizationID = form.CivilizationID.Value }));
            }

            DB_civilization_infrastructure infrastructure = new DB_civilization_infrastructure();

            infrastructure.game_id         = game.ID;
            infrastructure.civilization_id = form.CivilizationID.Value;
            infrastructure.planet_id       = planet.PlanetID;
            infrastructure.struct_id       = dbStruct.id;
            infrastructure.name            = form.Name;
            infrastructure.current_health  = dbStruct.base_health;
            infrastructure.experience      = 0;
            infrastructure.can_upgrade     = form.CanUpgrade;
            infrastructure.is_military     = form.IsMilitary;
            infrastructure.gmnotes         = form.GMNotes;
            Database.Session.Save(infrastructure);

            Database.Session.Flush();
            return(RedirectToRoute("ViewCivilization", new { civilizationID = form.CivilizationID.Value }));
        }
Beispiel #2
0
        private void CreateSpeciesAndCivilization(Game game, DB_planets planet, DB_starsystems starsystem, Fotiv_Automator.Models.StarMapGenerator.Models.SentientSpecies species)
        {
            // Create the Civilization
            DB_civilization dbCivilization = new DB_civilization();

            dbCivilization.game_id = game.ID;
            dbCivilization.civilization_traits_1_id = RetrieveCivilizationTrait(species.Traits[0].ToString().SpaceUppercaseLetters()).id;
            dbCivilization.civilization_traits_2_id = RetrieveCivilizationTrait(species.Traits[1].ToString().SpaceUppercaseLetters()).id;
            dbCivilization.civilization_traits_3_id = RetrieveCivilizationTrait(species.Traits[2].ToString().SpaceUppercaseLetters()).id;
            dbCivilization.tech_level_id            = RetrieveTechLevel($"TL{(int)species.TechLevel} {species.TechLevel.ToString().SpaceUppercaseLetters()}").id;
            dbCivilization.colour = "#E4D12F";
            dbCivilization.name   = $"Civilization {game.Random.Next(int.MaxValue)}";
            dbCivilization.rp     = 0;
            Database.Session.Save(dbCivilization);

            DB_species dbSpecies = new DB_species();

            dbSpecies.game_id     = game.ID;
            dbSpecies.name        = $"Species {game.Random.Next(int.MaxValue)}";
            dbSpecies.description = string.Join(",", species.Classifications.Select(x => x.ToString()));
            Database.Session.Save(dbSpecies);

            DB_civilization_species dbCivSpecies = new DB_civilization_species();

            dbCivSpecies.game_id         = game.ID;
            dbCivSpecies.civilization_id = dbCivilization.id;
            dbCivSpecies.species_id      = dbSpecies.id;
            Database.Session.Save(dbCivSpecies);

            var homeworldInfrastructure = RetrieveInfrastructure("Homeworld");
            DB_civilization_infrastructure dbInfrastructure = new DB_civilization_infrastructure();

            dbInfrastructure.game_id         = game.ID;
            dbInfrastructure.struct_id       = homeworldInfrastructure.id;
            dbInfrastructure.civilization_id = dbCivilization.id;
            dbInfrastructure.planet_id       = planet.id;
            dbInfrastructure.current_health  = homeworldInfrastructure.base_health;
            dbInfrastructure.experience      = 0;
            dbInfrastructure.name            = homeworldInfrastructure.name;
            dbInfrastructure.can_upgrade     = false;
            dbInfrastructure.is_military     = true;
            Database.Session.Save(dbInfrastructure);

            DB_visited_starsystems dbVisitedStarSystem = new DB_visited_starsystems();

            dbVisitedStarSystem.game_id         = game.ID;
            dbVisitedStarSystem.civilization_id = dbCivilization.id;
            dbVisitedStarSystem.starsystem_id   = starsystem.id;
        }
Beispiel #3
0
        public ActionResult Edit(CivilizationInfrastructureForm form)
        {
            Debug.WriteLine($"POST: Civilization Infrastructure Controller: Edit");
            DB_users user = Auth.User;
            var      game = GameState.Game;

            DB_civilization_infrastructure infrastructure = FindCivilizationInfrastructure(form.ID).CivilizationInfo;

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

            var planet   = game.Sector.PlanetFromID(form.PlanetID.Value);
            var dbStruct = game.GameStatistics.InfrastructureRaw
                           .Where(x => x.id == form.SelectedInfrastructureID.Value)
                           .FirstOrDefault();

            if (planet == null || dbStruct == null)
            {
                return(RedirectToRoute("ViewCivilization", new { civilizationID = form.CivilizationID.Value }));
            }

            infrastructure.name = form.Name;
            if (RequireGMAdminAttribute.IsGMOrAdmin())
            {
                infrastructure.civilization_id = form.CivilizationID.Value;
                infrastructure.planet_id       = planet.PlanetID;
                infrastructure.struct_id       = dbStruct.id;
                infrastructure.current_health  = form.CurrentHealth;
                infrastructure.experience      = form.Experience;
                infrastructure.can_upgrade     = form.CanUpgrade;
                infrastructure.is_military     = form.IsMilitary;
                infrastructure.gmnotes         = form.GMNotes;
            }
            Database.Session.Update(infrastructure);

            Database.Session.Flush();
            return(RedirectToRoute("ViewCivilization", new { civilizationID = form.CivilizationID.Value }));
        }
Beispiel #4
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);
                }
            }
        }
Beispiel #5
0
 public CivilizationInfrastructure(DB_civilization_infrastructure dbCivilizationInfrastructure, Civilization owner)
 {
     CivilizationInfo = dbCivilizationInfrastructure;
     Owner            = owner;
 }