Beispiel #1
0
    private void ShowDescInfo(string unitType)
    {
        var info = UnitConfiguration.GetDefaultConfig(unitType);

        if (Need > 1)
        {
            Title.text = string.Format("{2} {0}{3} {1} {4}", SCMText.T(info.DisplayName + " "), Need,
                                       SCMText.T("解锁"), SCMText.T("将消耗"), SCMText.T("积分 "));
        }
        else
        {
            Title.text = string.Format("{2} {0}{3} {1} {4}", SCMText.T(info.DisplayName + " "), Need,
                                       SCMText.T("解锁"), SCMText.T("将消耗"), SCMText.T("积分"));
        }

        AttackType01.text = info.CanAttackGround ? "<color=green>是</color>" : "<color=red>否</color>";
        AttackType02.text = info.CanAttackAir ? "<color=green>是</color>" : "<color=red>否</color>";
        Cost.text         = info.Cost.ToString();
        GasCost.text      = info.GasCost.ToString();

        AttackPower.text  = info.CanAttackGround ? info.AttackPower[0].ToString() : "";
        AttackPower.text += info.CanAttackAir && info.CanAttackGround ? ", " : "";
        AttackPower.text += info.CanAttackAir ? info.AttackPower[1].ToString() : "";

        ConstructingTime.text = info.ConstructingTime.ToString() + "s";
        MaxHp.text            = info.MaxHp.ToString();
        Defence.text          = info.Defence.ToString();

        Desc.text = info.Desc;
    }
Beispiel #2
0
    public static void GetUnitCfgsFromServer()
    {
        var conn = GameCore.Instance.ServerConnection;
        var buff = conn.Request2Srv("GetUnitCfgs", (data) =>
        {
            UnitConfiguration.GetUnitCfgsFromServer(data);

            UserManager.SyncVariantsFromCfg();

            if (IsFirstGetUnitCfgsFromServer)
            {
                if (OnBuildUnitCfgsFromServer != null)
                {
                    OnBuildUnitCfgsFromServer();
                    IsFirstGetUnitCfgsFromServer = false;
                }
            }
            else if (OnRefreshUnitCfgsFromServer != null)
            {
                OnRefreshUnitCfgsFromServer();
            }
        });

        conn.End(buff);
    }
Beispiel #3
0
    // 确认解锁
    public void OnUnlockConfirmBtn()
    {
        if (!IsEnough)
        {
            AddTip("当前积分余额不足!", 28);
            return;
        }

        var meInfo = GameCore.Instance.MeInfo;

        meInfo.Units[Type]      = true;
        meInfo.UUnlocks[Stage]  = true;
        meInfo.IntegrationCost += Need;

        UserManager.SyncUnits2Server();
        UserManager.SyncUUnlocks2Server();
        UserManager.SyncIntegrationCost2Server();

        AddTip(string.Format("解锁新单位{0}", UnitConfiguration.GetDefaultConfig(Type).DisplayName), 28);

        DUI.Refresh();
        MMUI.ShowUserInfo();

        ClearDescInfo();
        Hide();
    }
Beispiel #4
0
    private void BuildItems(UserInfo info, Transform content)
    {
        var variants = info.Variants;

        foreach (var v in variants)
        {
            var cfg      = UnitConfiguration.GetDefaultConfig(v.Key);
            var isUnlock = info.Units[v.Key];

            if (v.Key == "Radar")
            {
                continue;
            }

            if (isUnlock && !cfg.IsBuilding && !cfg.NoCard)
            {
                var go = CreateItem(content);

                ShowItemInfo(go, v.Value);
            }
        }

        // 守卫
        if (info.Units["FireGuard"])
        {
            var vType = info.Variants["FireGuard"];

            var go = CreateItem(content);
            ShowItemInfo(go, vType);
        }
    }
Beispiel #5
0
 private void MergeUnitConfiguration(UnitConfiguration originalUnitConfiguration, UnitConfigurationRequest UnitConfiguration)
 {
     originalUnitConfiguration.Unit              = this.UnitRepository.GetById(UnitConfiguration.UnitId);
     originalUnitConfiguration.Type              = this.UnitConfigurationTypeRepository.GetById(UnitConfiguration.UnitConfigurationTypeId);
     originalUnitConfiguration.Value             = UnitConfiguration.Value;
     originalUnitConfiguration.ConfigurationDate = DateTime.Now;
 }
Beispiel #6
0
        public void SystemdTest()
        {
            var unit = new UnitConfiguration
            {
                Unit = new UnitSection {
                    Description = "Accelerator"
                },

                Service = new ServiceSection {
                    User             = "******",
                    Restart          = "always",
                    RestartSec       = 10,
                    ExecStart        = "/var/apps/Accelerator -port 80",
                    WorkingDirectory = "/var/apps/accelerator/latest"
                },

                Install = new InstallSection {
                    WantedBy = "unknown"
                }
            };

            Assert.Equal(@"[Unit]
Description=Accelerator

[Service]
WorkingDirectory=/var/apps/accelerator/latest
ExecStart=/var/apps/Accelerator -port 80
Restart=always
RestartSec=10
User=www-user

[Install]
WantedBy=unknown", unit.ToString());
        }
Beispiel #7
0
    public void ResetColdown(string type)
    {
        var mainBuilder = UnitConfiguration.GetMainBuilder(type);
        var cfg         = UnitConfiguration.GetDefaultConfig(type);

        if (cfg.IsBuilding)
        {
            return;
        }

        // 同一建筑的单位一起重置 cd
        foreach (var t in coldown.Keys.ToArray())
        {
            var tcfg = UnitConfiguration.GetDefaultConfig(t);

            if (tcfg.IsBuilding)
            {
                continue;
            }

            if (UnitConfiguration.GetMainBuilder(t) == mainBuilder)
            {
                coldown[t] = coldown[t] >= 1 ? coldown[t] - 1 : 0;
            }
        }
    }
Beispiel #8
0
        public void ConfigIsExtensible()
        {
            var u = new UnitConfiguration();

            u.Extend <SomeDefinitions>();
            u[Unit.Parse("Foo")].PhysicalUnit.IsEqualTo(U._TIME);
        }
Beispiel #9
0
        public Unit(PlayerState owner, int id, UnitConfiguration configuration, Server server)
        {
            Owner = owner;
            Id = id;
            Faction = server.GetFaction(configuration.FactionId);
            Type = Faction.GetUnitType(configuration.UnitTypeId);
            Upgrades = new List<UnitUpgrade>();
            _Points = Type.Points;
            UpgradeSlotsOccupied = new HashSet<int>();
            foreach (var upgradeId in configuration.UpgradeIds)
                AddUpgrade(GetUpgrade(upgradeId));

            Hex = null;
            Strength = GameConstants.FullUnitStrength;

            Entrenched = false;

            AttritionDuration = 0;

            UpdateStats();
            ResetUnitForNewTurn();

            // Only air units are automatically "deployed" since they don't need to be placed on the map
            Deployed = Stats.Flags.Contains(UnitFlag.Air);
        }
Beispiel #10
0
        public Unit SrvAddBattltUnitAt(int player, string type, Vec2 pos)
        {
            if (!CheckPrerequisites(player, type))
            {
                return(null);
            }

            var cfg = UnitConfiguration.GetDefaultConfig(type);

            var cost    = cfg.Cost;
            var gasCost = cfg.GasCost;

            if (GetResource(player, "Money") < cost ||
                GetResource(player, "Gas") < gasCost)
            {
                return(null);
            }

            AddResource(player, "Money", -cost);
            AddResource(player, "Gas", -gasCost);

            var u = AddNewUnit(null, type, pos, player);

            if (u != null)
            {
                Broadcast("AddBattleUnitAt", (buff) =>
                {
                    buff.Write(player);
                    buff.Write(type);
                    buff.Write(u.Pos);
                });
            }

            return(u);
        }
Beispiel #11
0
        // 开始建造建筑
        public Unit ConstructBuilding(string genType, Vec2 pos, int player)
        {
            var cfg = UnitConfiguration.GetDefaultConfig(genType);

            var cost    = cfg.Cost;
            var gasCost = cfg.GasCost;

            if (GetResource(player, "Money") < cost || GetResource(player, "Gas") < gasCost)
            {
                return(null);
            }
            else if (cfg.Prerequisites != null && GetAllUnitsByPlayer(player,
                                                                      (u) => u.BuildingCompleted && CheckPrerequisites(player, u.UnitType)).Length == 0)
            {
                return(null);
            }
            else if (!cfg.NoBody && !cfg.NoCard && !CheckSpareSpace(pos, cfg.SizeRadius))
            {
                return(null);
            }

            AddResource(player, "Money", -cost);
            AddResource(player, "Gas", -gasCost);
            var building = AddNewUnit(null, genType, pos, player);

            if (building != null)
            {
                building.Hp = building.cfg.MaxHp * 0.1; // 从 10% 的血量开始建造
            }
            return(building);
        }
Beispiel #12
0
        public bool ReconstructBuilding(Unit u, string toNewType)
        {
            var player = u.Player;

            if (!CheckPrerequisites(player, toNewType))
            {
                return(false);
            }

            var cfg = UnitConfiguration.GetDefaultConfig(toNewType);

            var cost    = cfg.Cost;
            var gasCost = cfg.GasCost;

            if (GetResource(player, "Money") < cost || GetResource(player, "Gas") < gasCost)
            {
                return(false);
            }

            AddResource(player, "Money", -cost);
            AddResource(player, "Gas", -gasCost);

            // 改变建筑类型
            u.BuildingCompleted = false;
            var oldType = u.UnitType;

            u.UnitType = toNewType;
            RefreshAI(u);
            OnUnitReconstruct(u, oldType);
            return(true);
        }
Beispiel #13
0
 public void Extend(UnitConfiguration c)
 {
     c.Unit(Pascal)
         .IsPhysicalUnit(_MASS / (_TIME.Squared() * _LENGTH))
         .EquivalentTo(Newton / Meter.Squared())
         .ConvertValueBased(Bar, v => v * 1E-5m, v => v * 100000)
         .ConvertValueBased(Psi, v => 6.894E+3m, v => v * 145.04E-6m);
 }
Beispiel #14
0
 public void Extend(UnitConfiguration c)
 {
     c.Unit(Pascal)
     .IsPhysicalUnit(_MASS / (_TIME.Squared() * _LENGTH))
     .EquivalentTo(Newton / Meter.Squared())
     .ConvertValueBased(Bar, v => v * 1E-5m, v => v * 100000)
     .ConvertValueBased(Psi, v => 6.894E+3m, v => v * 145.04E-6m);
 }
Beispiel #15
0
    // PVE001 基本建造教学
    static IEnumerator PVE001GuideImpl(Room4Client r)
    {
        var g = UIManager.Instance.Guide;


        var cc = r.GetMyFirstUnitByType("CommanderCenter");

        // 提示建造矿机
        yield return(new TimeWaiter(1000));

        g.ToClick(UIManager.Instance.World2UI(cc.Pos), "建造<u>矿机</u>可以加速资源生产");
        yield return(new ConditionWaiter(() => r.GetMyFirstUnitByType("CCAcc") != null));

        g.HideAllHints();
        yield return(new ConditionWaiter(() => r.GetMyFirstUnitByType("CCAcc").BuildingCompleted));

        UIManager.Instance.Tips.AddTip("矿机建造完成");
        g.ToClick(UIManager.Instance.World2UI(cc.Pos), "试试补充更多<u>矿机</u>");
        yield return(new ConditionWaiter(() => r.GetMyUnitsByType("CCAcc").Length >= 2));

        g.HideAllHints();

        // 提示建造兵营
        yield return(new ConditionWaiter(() => r.GetMyResource("Money") >= UnitConfiguration.GetDefaultConfig("Barrack").Cost));

        g.HideAllHints();
        g.ToPress(UIManager.Instance.World2UI(cc.Pos + new Vec2(-80, -50)), "<op>长按</op>:建造<u>兵营</u>");
        // 等待开始建造兵营
        yield return(new ConditionWaiter(() => r.GetMyFirstUnitByType("Barrack") != null));

        g.HideAllHints();
        yield return(new ConditionWaiter(() => r.GetMyFirstUnitByType("Barrack").BuildingCompleted &&
                                         r.GetMyResource("Money") >= UnitConfiguration.GetDefaultConfig("Soldier").Cost));

        g.ToPress(UIManager.Instance.World2UI(cc.Pos) - new Vec2(75, 135), "选择:<u>枪兵</u>");
        yield return(new TimeWaiter(3000));

        g.ToPress(UIManager.Instance.World2UI(cc.Pos) + new Vec2(0, 200), "<op>单击</op>地面释放<u>枪兵</u>");
        yield return(new TimeWaiter(1000));

        yield return(new ConditionWaiter(() => r.GetMyFirstUnitByType("Soldier") != null));

        g.HideAllHints();

        // 提示使用雷达
        yield return(new ConditionWaiter(() => r.GetMyResource("Money") >= UnitConfiguration.GetDefaultConfig("RadarSign").Cost));

        g.ToDrag("从<u>基地</u>拖出释放<u>雷达</u>",
                 UIManager.Instance.World2UI(cc.Pos),
                 UIManager.Instance.World2UI(r.MapSize - cc.Pos));
        yield return(new ConditionWaiter(() => r.GetMyFirstUnitByType("RadarSign") != null));

        g.HideAllHints();

        UIManager.Instance.Tips.AddTip("目标:建造更多部队,摧毁对方基地");
    }
Beispiel #16
0
        public void Extend(UnitConfiguration c)
        {
            c.Unit(Celsius)
               .IsPhysicalUnit(_TEMPERATURE)
               .ConvertValueBased(Kelvin, v => v + 273.15m, v => v - 273.15m);

            c.Unit(Fahrenheit)
                .IsPhysicalUnit(_TEMPERATURE)
                .ConvertValueBased(Celsius, v => (v - 32) * (5m / 9m), v => v * (9m / 5m) + 32);
        }
Beispiel #17
0
 private void ShowOptionsInterface(UnitConfiguration unit)
 {
     if (unit.soldierClass == UnitConfiguration.SoldierClass.Enginner)
     {
         for (int i = 0; i < Options.Count; i++)
         {
             Options[i].gameObject.SetActive(true);
         }
     }
 }
Beispiel #18
0
        public UnitConfiguration CreateUnitConfiguration(UnitConfigurationRequest UnitConfiguration)
        {
            var entityToInsert = new UnitConfiguration()
            {
            };

            MergeUnitConfiguration(entityToInsert, UnitConfiguration);
            UnitConfigurationRepository.Insert(entityToInsert);
            return(entityToInsert);
        }
Beispiel #19
0
        public void Extend(UnitConfiguration c)
        {
            c.Unit(Celsius)
            .IsPhysicalUnit(_TEMPERATURE)
            .ConvertValueBased(Kelvin, v => v + 273.15m, v => v - 273.15m);

            c.Unit(Fahrenheit)
            .IsPhysicalUnit(_TEMPERATURE)
            .ConvertValueBased(Celsius, v => (v - 32) * (5m / 9m), v => v * (9m / 5m) + 32);
        }
Beispiel #20
0
        void OnGetUnitCfgs(Connection conn, IReadableBuffer data, IWriteableBuffer buff, Action end)
        {
            buff.Write(UnitConfiguration.AllUnitTypes);

            for (int i = 0; i < UnitConfiguration.AllUnitTypes.Length; i++)
            {
                UnitUtils.WriteUnitInfo(UnitConfiguration.GetDefaultConfig(UnitConfiguration.AllUnitTypes[i]), buff);
            }

            end();
        }
Beispiel #21
0
 public void Extend(UnitConfiguration c)
 {
     c.Unit(Nanosecond)
         .IsPhysicalUnit(_TIME)
         .StartScale()
         .To(Microsecond, 1000)
         .To(Millisecond, 1000)
         .To(Second, 1000)
         .To(Minute, 60)
         .To(Hour, 60)
         .To(Day, 24);
 }
Beispiel #22
0
    void OnAddBattleUnitAtMsg(IReadableBuffer data)
    {
        var p  = data.ReadInt();
        var t  = data.ReadString();
        var pt = data.ReadVec2();

        var cfg = UnitConfiguration.GetDefaultConfig(t);

        AddResource(p, "Money", -cfg.Cost);
        AddResource(p, "Gas", -cfg.GasCost);
        AddNewUnit(null, t, pt, p);
    }
Beispiel #23
0
    private void OnStartConstructingBattleUnit(Unit u, string genType)
    {
        var m = UC.GetModel(u.UID);

        m.AniPlayer.ConstructingUnit();

        var vcfg = UnitConfiguration.GetDefaultConfig(genType);

        var constructingTime = vcfg.ConstructingTime;

        IndLayer.CreateProgressbar(u, constructingTime).FollowTransformRoot = m.transform;
    }
Beispiel #24
0
 public void Extend(UnitConfiguration c)
 {
     c.Unit(Nanosecond)
     .IsPhysicalUnit(_TIME)
     .StartScale()
     .To(Microsecond, 1000)
     .To(Millisecond, 1000)
     .To(Second, 1000)
     .To(Minute, 60)
     .To(Hour, 60)
     .To(Day, 24);
 }
Beispiel #25
0
    public void OnRightClick(Vec2 pt, Vector3 wp)
    {
        if (UUIs.CurUnitType == null)
        {
            return;
        }

        var cfg = UnitConfiguration.GetDefaultConfig(UUIs.CurUnitType);

        // 右键全开
        if (!UUIs.IsOpenAllUUI)
        {
            UUIs.IsOpenAllUUI = true;
        }

        var conn = GameCore.Instance.ServerConnection;

        if (UUIs.CurUnitType == "SoldierCarrier" || UUIs.CurUnitType == "RobotCarrier")
        {
            var buff = conn.Send2Srv("AddSoldierCarrierUnit4TestAnyway");

            var p = wp.z >= room.MapSize.y / 2 ? 2 : 1;
            buff.Write(p);
            buff.Write(UUIs.CurUnitType);
            buff.Write((int)wp.x);
            buff.Write((int)wp.z);
            conn.End(buff);
        }
        else if (UnitConfiguration.GetDefaultConfig(UUIs.CurUnitType).IsBuilding)
        {
            var buff = conn.Send2Srv("AddBuildingUnit4TestAnyway");

            var p = wp.z >= room.MapSize.y / 2 ? 2 : 1;
            buff.Write(p);
            buff.Write(UUIs.CurUnitType);
            buff.Write((int)wp.x);
            buff.Write((int)wp.z);
            conn.End(buff);
        }
        else
        {
            UUIs.ResetColdown(UUIs.CurUnitType);
            var buff = conn.Send2Srv("AddBattleUnit4TestAnyway");

            var p = wp.z >= room.MapSize.y / 2 ? 2 : 1;
            buff.Write(p);
            buff.Write(UUIs.CurUnitType);
            buff.Write((int)wp.x);
            buff.Write((int)wp.z);
            conn.End(buff);
        }
    }
Beispiel #26
0
    void ShowSels(Vec2 pt)
    {
        var ui = UIManager.Instance.ShowTopUI("InBattleUI/SelectUnitUI", true) as SelectUnitUI;

        ui.Pos     = pt;
        ui.Choices = u.UnitType == "Base" ?
                     (new string[] { "CrystalMachine" }).Concat(u.cfg.ReconstructTo).ToArray() :
                     new string[] { "CrystalMachine" };

        ui.ChoicesName = ui.Choices.ToArray((i, t, skipAct) =>
        {
            var ccfg = t == "CrystalMachine" ?
                       UnitConfiguration.GetDefaultConfig("CrystalMachine") :
                       UnitConfiguration.GetDefaultConfig(t);

            return(ccfg.DisplayName);
        });
        ui.Refresh();
        ui.OnChoiceSel = (toType) =>
        {
            var unitType = toType == "CrystalMachine" ? "CrystalMachine" : toType;
            if (!U.BuildingCompleted ||
                !MG.CheckPrerequisitesAndTip(unitType) ||
                !MG.CheckResourceRequirementAndTip(unitType))
            {
                return;
            }

            if (toType == "CrystalMachine")
            {
                if (U.Room.FindNextCrystalMachinePos(U) == Vec2.Zero)
                {
                    AddTip("没有多余的矿机位置");
                    return;
                }

                var conn = GameCore.Instance.ServerConnection;
                var buff = conn.Send2Srv("ConstructCrystalMachine");
                buff.Write(U.UID);
                conn.End(buff);
            }
            else // 升级基地
            {
                var conn = GameCore.Instance.ServerConnection;
                var buff = conn.Send2Srv("ReconstructBuilding");
                buff.Write(U.UID);
                buff.Write(toType);
                conn.End(buff);
            }
        };
    }
Beispiel #27
0
    public void CancelSelUnit()
    {
        var vcfg = UnitConfiguration.GetDefaultConfig(CurUnitType);

        curBtn.transform.Find(vcfg.IsBuilding ? "BuildingCheck" : "Check").gameObject.SetActive(false);

        curBtn      = null;
        CurUnitType = null;

        if (null != onHideUnitPlacedArea)
        {
            onHideUnitPlacedArea();
        }
    }
Beispiel #28
0
    // 单击地面放兵
    public void OnClickMap(Vec2 pt, Vec2 cp)
    {
        var cfg = UnitConfiguration.GetDefaultConfig(UUIs.CurUnitType);

        if (!UUIs.CheckColdown(UUIs.CurUnitType))
        {
            AddTip("部队尚未就绪");
            return;
        }

        if (!CheckPrerequisitesAndTip(UUIs.CurUnitType) ||
            !CheckResourceRequirementAndTip(UUIs.CurUnitType))
        {
            return;
        }

        UUIs.ResetColdown(UUIs.CurUnitType);
        var conn = GameCore.Instance.ServerConnection;

        if (UUIs.CurUnitType == "SoldierCarrier" || UUIs.CurUnitType == "RobotCarrier")
        {
            var buff = conn.Send2Srv("DropSoldierFromCarrier");
            buff.Write(UUIs.CurUnitType);
            buff.Write((int)cp.x);
            buff.Write((int)cp.y);
            conn.End(buff);
        }
        else if (UnitConfiguration.GetDefaultConfig(UUIs.CurUnitType).IsBuilding)
        {
            if (!room.CheckSpareSpace(cp, cfg.SizeRadius) &&
                !room.FindNearestSpareSpace(cp, cfg.SizeRadius, 1, out cp))
            {
                UIManager.Instance.Tips.AddTip("没有足够的建造空间");
                return;
            }

            var buff = conn.Send2Srv("ConstructBuilding");
            buff.Write(UUIs.CurUnitType);
            buff.Write(cp);
            conn.End(buff);
        }
        else
        {
            var buff = conn.Send2Srv("AddBattleUnitAt");
            buff.Write(UUIs.CurUnitType);
            buff.Write(cp);
            conn.End(buff);
        }
    }
Beispiel #29
0
    // 构造所有的UUI
    private void BuildAllUUIs()
    {
        var uts = UnitConfiguration.AllUnitTypes.Select((ut) =>
        {
            var meInfo = GameCore.Instance.MeInfo;

            var orgType = meInfo.Variants.ContainsKey(ut) ? ut : UnitConfiguration.GetDefaultConfig(ut).OriginalType;

            bool isUnlock  = meInfo.Units[ut];
            bool isVarType = meInfo.Variants[orgType] == ut;
            bool isNoCard  = UnitConfiguration.GetDefaultConfig(ut).NoCard;

            return(isUnlock && isVarType && !isNoCard);
        });

        for (var i = 0; i < uts.Count; i++)
        {
            var ut  = uts [i];
            var cfg = UnitConfiguration.GetDefaultConfig(ut);

            Transform parent = null;

            if (cfg.IsThirdType)
            {
                parent = ThirdContent;
            }
            else if (cfg.IsBuilding)
            {
                parent = BuildingContent;
            }
            else
            {
                parent = ArmyContent;
            }

            GameObject uui = CreateUUI(parent);
            SetUUIInfo(uui, ut);

            var btn = uui.GetComponent <UnitCardUI>();
            btn.OnPtDown    += () => OnSelUnit(ut);
            btn.OnBeginDrag += OnBeginDrag;
            btn.OnDrag      += OnDrag;
            btn.OnEndDrag   += OnEndDrag;

            btns[ut] = btn;
            uui.SetActive(false);
        }
    }
Beispiel #30
0
    // 设置页签默认选定按钮
    private void SetDefaultSelBtn(string ut)
    {
        if (!(null == curBtn || !curBtn.gameObject.activeSelf))
        {
            return;
        }

        var cfg = UnitConfiguration.GetDefaultConfig(ut);

        if ((cfg.IsBuilding && !IsShowArmyList) || (!cfg.IsBuilding && IsShowArmyList))
        {
            CurUnitType = ut;
            curBtn      = btns[ut];
            btns[ut].OnPtDown();
        }
    }
Beispiel #31
0
    // 设置UUI信息
    private void SetUUIInfo(GameObject uui, string type)
    {
        var cfg = UnitConfiguration.GetDefaultConfig(type);

        Sprite img = Resources.Load <Sprite>(@"Texture\UnitCard\" + type);

        if (null != img)
        {
            uui.transform.Find("Name").gameObject.SetActive(true);
            uui.transform.Find("Icon").gameObject.SetActive(true);
            uui.transform.Find("Icon").GetComponent <Image>().sprite = img;
            uui.transform.Find("Icon").GetComponent <Image>().SetNativeSize();
        }
        else
        {
            uui.transform.Find("Name").gameObject.SetActive(true);
            uui.transform.Find("Icon").gameObject.SetActive(false);
        }

        var okImg = uui.transform.Find("OK").GetComponent <Image>();

        uui.transform.Find("Name").GetComponent <Text>().text    = cfg.DisplayName;
        uui.transform.Find("Cost").GetComponent <Text>().text    = cfg.Cost.ToString();
        uui.transform.Find("GasCost").GetComponent <Text>().text = cfg.GasCost.ToString();
        uui.transform.Find("Num").GetComponent <Text>().text     = "0";
        uui.transform.Find("OK").gameObject.SetActive(!cfg.IsBuilding);
        uui.transform.Find("BuildingOK").gameObject.SetActive(cfg.IsBuilding);

        if (!cfg.IsBuilding)
        {
            var mainBuilder = UnitConfiguration.GetMainBuilder(type);

            if (mainBuilder == "Barrack")
            {
                okImg.sprite = Resources.Load <Sprite>(@"Texture\CombatUI\zhandou_27");
            }
            else if (mainBuilder == "Factory")
            {
                okImg.sprite = Resources.Load <Sprite>(@"Texture\CombatUI\zhandou_28");
            }
            else if (mainBuilder == "Airport")
            {
                okImg.sprite = Resources.Load <Sprite>(@"Texture\CombatUI\zhandou_29");
            }
        }
    }
Beispiel #32
0
        // 空投伞兵到指定位置,路径随机
        public bool CreateSoldierCarrier(string type, int player, Vec2 dropPt)
        {
            var cfg = UnitConfiguration.GetDefaultConfig(type);

            var cost    = cfg.Cost;
            var gasCost = cfg.GasCost;

            if (GetResource(player, "Money") < cost || GetResource(player, "Gas") < gasCost)
            {
                return(false);
            }
            else if (cfg.Prerequisites != null && GetAllUnitsByPlayer(player,
                                                                      (u) => u.BuildingCompleted && CheckPrerequisites(player, u.UnitType)).Length == 0)
            {
                return(false);
            }

            var aps = GetUnitsByType(UnitConfiguration.GetMainBuilder(type), player);

            if (aps.Length == 0)
            {
                return(false);
            }

            AddResource(player, "Money", -cost);
            AddResource(player, "Gas", -gasCost);

            // 随机从一个机场出发
            var fromPt = aps[RandomNext(0, aps.Length)].Pos;
            var dir    = dropPt - fromPt;
            var mr     = MapSize.x > MapSize.y ? MapSize.x : MapSize.y;

            dir = dir.Length > 1 ? dir / dir.Length : Vec2.Zero;
            var toPt = dropPt + dir * mr;
            var stc  = AddNewUnit(null, type, fromPt, player);

            var pType = cfg.Pets[0];
            var pCnt  = int.Parse(cfg.Pets[1]);

            FC.For(pCnt, (i) => { stc.UnitCosntructingWaitingList.Add(pType); });
            stc.Dir = dir.Dir();
            stc.MovePath.Add(dropPt);
            stc.MovePath.Add(toPt);

            return(true);
        }
Beispiel #33
0
    // 刷新所有按钮状态
    private void RefreshBtns()
    {
        if (MG.Room == null)
        {
            return;
        }

        needRefreshBtns = false;
        foreach (var ut in btns.Keys)
        {
            var cfg = UnitConfiguration.GetDefaultConfig(ut);

            // 前置条件
            var ok = cfg.Prerequisites == null || MG.Room.CheckPrerequisites(GameCore.Instance.MePlayer, ut);

            if (IsOpenAllUUI)
            {
                ok = true;
            }

            var btn = btns[ut];
            btn.gameObject.SetActive(ok);
            btn.transform.Find(cfg.IsBuilding ? "BuildingCheck" : "Check").gameObject.SetActive(btn == curBtn);

            var coreBuilder = UnitConfiguration.GetMainBuilder(ut);
            if (coreBuilder != null)
            {
                builder[ut]     = MG.Room.GetAllMyUnits((u) => (u.UnitType == coreBuilder || u.cfg.ReconstructFrom == coreBuilder) && u.BuildingCompleted).Length;
                builderAccs[ut] = MG.Room.GetMyUnitsByType("Accessory", (u) =>
                                                           u.Owner != null && u.BuildingCompleted &&
                                                           u.Owner.BuildingCompleted && (u.Owner.UnitType == coreBuilder || u.Owner.cfg.ReconstructFrom == coreBuilder)).Length;
            }
            else
            {
                builder[ut]     = 1;
                builderAccs[ut] = 0;
            }

            if (ok)
            {
                // 当前默认选定第一个
                SetDefaultSelBtn(ut);
            }
        }
    }
Beispiel #34
0
        public void Extend(UnitConfiguration c)
        {
            c.Unit(Milligram)
            .IsPhysicalUnit(_MASS)
            .StartScale()
            .To(Carat, 200)
            .To(Gram, 5)
            .To(Kilogram, 1000)
            .To(Ton, 1000);

            c.Unit(Ounce)
            .IsPhysicalUnit((_MASS))
            .StartScale()
            .To(Pound, 16);

            c.Unit(Gram).ConvertValueBased(Ounce, v => v * 0.0352739619m, v => v * 28.3495231m);
            c.Unit(Pound).ConvertValueBased(Kilogram, v => v * 0.45359237m, v => v * 2.20462262m);
        }
Beispiel #35
0
        public void Extend(UnitConfiguration c)
        {
            c.Unit(Milligram)
                .IsPhysicalUnit(_MASS)
                .StartScale()
                .To(Carat, 200)
                .To(Gram, 5)
                .To(Kilogram, 1000)
                .To(Ton, 1000);

            c.Unit(Ounce)
                .IsPhysicalUnit((_MASS))
                .StartScale()
                .To(Pound, 16);

            c.Unit(Gram).ConvertValueBased(Ounce, v => v * 0.0352739619m, v => v * 28.3495231m);
            c.Unit(Pound).ConvertValueBased(Kilogram, v => v * 0.45359237m, v => v * 2.20462262m);

        }
Beispiel #36
0
        public void Extend(UnitConfiguration c)
        {
            c.Unit(Joule)
            .IsPhysicalUnit((_MASS * _LENGTH.Squared()) / _TIME.Squared())
            .EquivalentTo(Kilogram * Meter.Squared() / Second.Squared())
            .ConvertibleTo(Kilogram,
                           m => m / PhysicalConstants.EnergyMassFactor,
                           m => m * PhysicalConstants.EnergyMassFactor)
            .ConvertibleTo(ElectronVolt, j => 6.242e+18m * j, e => 1.6022e-19m * e)
            .StartScale()
            .To(KiloJoule, 1000)
            .To(MegaJoule, 1000)
            .To(GigaJoule, 1000)
            .To(TeraJoule, 1000);

            c.Unit(Newton)
            .IsPhysicalUnit(_MASS * _LENGTH / _TIME.Squared())
            .EquivalentTo(Kilogram * Meter / Second.Squared());
        }
Beispiel #37
0
        public void Extend(UnitConfiguration c)
        {
            c.Unit(Joule)
                .IsPhysicalUnit((_MASS * _LENGTH.Squared()) / _TIME.Squared())
                .EquivalentTo(Kilogram * Meter.Squared() / Second.Squared())
                .ConvertibleTo(Kilogram,
                  m => m / PhysicalConstants.EnergyMassFactor,
                  m => m * PhysicalConstants.EnergyMassFactor)
                .ConvertibleTo(ElectronVolt, j => 6.242e+18m * j, e => 1.6022e-19m * e)
                .StartScale()
                .To(KiloJoule, 1000)
                .To(MegaJoule, 1000)
                .To(GigaJoule, 1000)
                .To(TeraJoule, 1000);

            c.Unit(Newton)
                .IsPhysicalUnit(_MASS * _LENGTH / _TIME.Squared())
                .EquivalentTo(Kilogram * Meter / Second.Squared());
        }
Beispiel #38
0
            public void Extend(UnitConfiguration c)
            {
                c.Unit(MicroShipLength)
                    .IsPhysicalUnit(_LENGTH)
                    .StartScale()
                    .To(ShipLength, 1000);
                c.Unit(Heartbeat)
                    .IsPhysicalUnit(_TIME)
                    .StartScale()
                    .To(Michron, 50)
                    .To(QMichron, 50)
                    .To(GreatMichron, 50)
                    .To(Period, 250);
                c.Unit(ShipMass)
                    .IsPhysicalUnit(_MASS)
                    .ConvertibleTo(SunMass, m => m / 10E+25m, m => m * 10E+25m);

                c[ShipLength].ConvertValueBased(Kilometer, v => v * 2.4640476m, v => v / 2.4640476m);
                c[Heartbeat].ConvertValueBased(Second, v => v * 0.821917808219178m, v => v / 0.821917808219178m);
                c[ShipMass].ConvertValueBased(Kilogram, v => v * 55402.15m, v => v / 55402.15m);
            }
Beispiel #39
0
        public void Extend(UnitConfiguration c)
        {
            c.Unit(Nanometer)
                .IsPhysicalUnit(_LENGTH)
                .StartScale()
                .To(Micrometer, 1000)
                .To(Millimeter, 1000)
                .To(Centimeter, 10)
                .To(Meter, 100)
                .To(Kilometer, 1000);

            c.Unit(Microinch)
                .IsPhysicalUnit(_LENGTH)
                .StartScale()
                .To(Inch, 1000000)
                .To(Foot, 12)
                .To(Yard, 3)
                .To(Mile, 1760);

            c.Unit(Inch).ConvertValueBased(Centimeter, v => v * 2.54m, v => 0.393700787m * v);
            c.Unit(Mile).ConvertValueBased(Kilometer, v => v * 1.609344m, v => 0.621371192m * v);
        }
Beispiel #40
0
 public void ConfigIsExtensible()
 {
     var u = new UnitConfiguration();
     u.Extend<SomeDefinitions>();
     u[Unit.Parse("Foo")].PhysicalUnit.IsEqualTo(U._TIME);
 }
Beispiel #41
0
 public void Extend(UnitConfiguration c)
 {
     c.Unit(Meter ^ 2)
         .ConvertValueBased(Hectare, v => v * 0.0001m, v => v * 10000);
 }
Beispiel #42
0
 public void Extend(UnitConfiguration c)
 {
     c.Unit(Unit.Parse("Foo")).IsPhysicalUnit(U._TIME);
 }