コード例 #1
0
ファイル: EmpireScript.cs プロジェクト: thegreatpl/LD42-SERL
 void BuildFleets(IEnumerable <Fleet> fleets)
 {
     foreach (var guard in fleets)
     {
         var colony = Colonies.FirstOrDefault(x => x.Location == guard.HomeBase);
         var design = PickWarshipDesign();
         if (Resouces < design.Cost)
         {
             savingFor    = design;
             savingTarget = colony;
             return;
         }
         colony.BuildShip(design);
     }
 }
コード例 #2
0
ファイル: EmpireScript.cs プロジェクト: thegreatpl/LD42-SERL
    bool BuildColonies()
    {
        List <Distances> distanceMatrix = new List <Distances>();
        var buildable = Colonies.Where(x => x.ColonyAction != ColonyAction.Building);
        var empty     = EntityManager.GetAllUncolonized();

        if (empty.Count == 0)
        {
            return(false);
        }
        foreach (var col in buildable)
        {
            foreach (var uncol in empty)
            {
                distanceMatrix.Add(new Distances()
                {
                    colony   = col,
                    empty    = uncol,
                    distance = OffsetCoord.RFromUnity(col.Location).Distance(OffsetCoord.RFromUnity(uncol))
                });
            }
        }
        if (distanceMatrix.Count < 1)
        {
            return(false);
        }
        var ordered = distanceMatrix.OrderBy(x => x.distance);
        var design  = Designs.Where(x => x.Value.Type == "ColonyShip").Random().Value;

        foreach (var col in ordered)
        {
            if (Resouces < design.Cost)
            {
                savingFor    = design;
                savingTarget = col.colony;
                return(true);
            }
            col.colony.BuildShip(design);
        }

        return(true);
    }
コード例 #3
0
    /// <summary>
    /// Loads up the build menu for the given colony.
    /// </summary>
    /// <param name="colonyControl"></param>
    public void LoadBuildMenu(ColonyControl colonyControl)
    {
        CloseMenu("build");
        SetAllInactive();
        List <PageObjectDef> buttonDefs = new List <PageObjectDef>();

        var pageo = Instantiate(PageMenuObj, Canvas.transform);
        var page  = pageo.GetComponentInChildren <PageMenu>();

        foreach (var design in Cursor.PlayerEmpire.Designs)
        {
            var weapons = design.Value.BaseComponents.OfType <WeaponComponent>();
            buttonDefs.Add(new ButtonDef()
            {
                name    = $"design{design.Key}",
                OnClick = () =>
                {
                    if (colonyControl.ColonyAction != ColonyAction.Building)
                    {
                        if (colonyControl.Empire.Resouces > design.Value.Cost)
                        {
                            colonyControl.BuildShip(design.Value);
                            CloseMenu("build");
                            return;
                        }
                        Logger.Log("Not enough resources", colonyControl.Location);
                        return;
                    }
                    Logger.Log("Colony is building currently", colonyControl.Location);
                }, text = $"{design.Key}: {design.Value.Type}{Environment.NewLine}"
                          + $"{design.Value.Cost} L:{weapons.Where(x => x.DamageType == DamageType.Energy).Sum(x => x.Amount)} M:{weapons.Where(x => x.DamageType == DamageType.Mass).Sum(x => x.Amount)} O:{weapons.Where(x => x.DamageType == DamageType.Mass).Sum(x => x.Amount)}",
            });
        }

        page.Close = () => { CloseMenu("build"); };

        page.Populate(buttonDefs);
        Menus.Add("build", page);
    }
コード例 #4
0
ファイル: EmpireScript.cs プロジェクト: thegreatpl/LD42-SERL
    /// <summary>
    /// handles the shipbuilding for the ai.
    /// </summary>
    void ShipBuilding()
    {
        if (savingFor != null)
        {
            if (savingTarget == null)
            {
                savingTarget = Colonies.Where(x => x.ColonyAction != ColonyAction.Building).Random();
            }

            if (Resouces > savingFor.Cost && savingTarget.ColonyAction != ColonyAction.Building)
            {
                savingTarget.BuildShip(savingFor);
                savingTarget = null;
                savingFor    = null;
            }
            return;
        }

        if (AIPriority == Priority.guard)
        {
            var percentage = Random.Range(0, 100);
            if (percentage < 50)
            {
                BuildGuards();
                return;
            }
            if (percentage < 90)
            {
                if (BuildColonies())
                {
                    return;
                }
                //if (BuildGuards())
                //    return;

                //BuildRaiders();
            }
            BuildRaiders();
        }
        if (AIPriority == Priority.attack)
        {
            var percentage = Random.Range(0, 100);
            if (percentage < 50)
            {
                BuildRaiders();
                return;
            }
            if (percentage < 75)
            {
                BuildGuards();
                return;
            }
            BuildColonies();
        }



        if (AIPriority == Priority.colonize)
        {
            var percentage = Random.Range(0, 100);
            if (percentage < 50)
            {
                if (BuildColonies())
                {
                    return;
                }
                //if (BuildGuards())
                //    return;
                //BuildRaiders();
            }
            if (percentage < 85)
            {
                if (BuildGuards())
                {
                    return;
                }
                //if (BuildRaiders())
                //    return;
                //BuildColonies();
            }
            BuildRaiders();
        }
    }