Esempio n. 1
0
        public static void SetUnitToCubicMetres()
        {
            using var settings = MockSettings.Create();
            using var vm       = new PartConversionsVm();
            vm.SetUnit(settings.CubicMetres);
            var metresPart       = new PowerPart(3, new IdentityConversion(settings.Metres));
            var metresConversion = PartConversion.Create(settings.CubicMetres, metresPart);
            var expected         = new[]
            {
                new PartConversionVm(settings.CubicMetres, metresConversion),
            };

            Assert.AreEqual(expected[0].Conversion.Name, vm.Conversions.Single().Single().Conversion.Name);
        }
Esempio n. 2
0
    public void Init()
    {
        part_pos_default = new Vector3(-2.5f, 1.3f, -1f);
        UIpart_camera    = GameObject.Find("UIPartCamera").GetComponent <Camera>();
        UI_camera        = GameObject.Find("UICamera").GetComponent <Camera>();
        canvas           = GameObject.Find("UICanvasBase").transform as RectTransform;
        UIpart_group     = GameObject.Find("UIPart").transform;
        UIpart_offset    = new Vector3(0, 0, -0.2f);
        unit_blueprint   = GameObject.Find("DesignPlatform/Unit").GetComponent <UnitBlueprint>();
        UI_canvas_top    = GameObject.Find("UICanvasTop").transform as RectTransform;
        self_screen_pos  = Camera.main.WorldToScreenPoint(transform.position);

        foreach (Transform t in GetComponentsInChildren <Transform>())
        {
            if (t.name == "HoverImage")
            {
                hover_image = t.GetComponent <Image>();
            }
            else if (t.name == "BanImage")
            {
                ban_image = t.GetComponent <Image>();
            }
            else if (t.name == "PartName")
            {
                name_text = t.GetComponent <Text>();
            }
            else if (t.name == "iIcon")
            {
                self_i_icon = t.GetComponent <iIcon>();
                self_i_icon.parent_button = this;
            }
        }
        switch ((int)part_type)
        {
        case 0:
            UIpart_prefab       = Instantiate(Resources.Load <GameObject>("UIPart/PowerUIPart/" + UIpart_name), UIpart_group);
            part_particulars_UI = Instantiate(Resources.Load <GameObject>("UI/PartParticulars/PowerPartParticulars"), UI_canvas_top);
            temp_part_prefab    = Instantiate(Resources.Load <GameObject>("Part/PowerPart/" + part_name));
            PowerPart temp_powerpart = temp_part_prefab.GetComponent <PowerPart>();
            name_text.text = temp_powerpart.self_name;
            foreach (RectTransform rt in part_particulars_UI.GetComponentsInChildren <RectTransform>())
            {
                if (rt.name == "Name")
                {
                    rt.GetComponent <Text>().text = temp_powerpart.self_name;
                }
                else if (rt.name == "Power")
                {
                    rt.GetComponent <Text>().text = "能量  +" + temp_powerpart.power_value.ToString();
                }
                else if (rt.name == "Weight")
                {
                    rt.GetComponent <Text>().text = "重量  " + temp_powerpart.weight_value.ToString();
                }
                else if (rt.name == "Durability")
                {
                    rt.GetComponent <Text>().text = "耐久  " + temp_powerpart.durability_value.ToString();
                }
                else if (rt.name == "Specialty")
                {
                    //rt.GetComponent<Text>().text = "特性  " + temp_powerpart.durability_value.ToString();
                }
                else if (rt.name == "NormalDEF")
                {
                    rt.GetComponent <Text>().text = temp_powerpart.normalDEF_value.ToString();
                }
                else if (rt.name == "BlastDEF")
                {
                    rt.GetComponent <Text>().text = temp_powerpart.blastDEF_value.ToString();
                }
                else if (rt.name == "EnergyDEF")
                {
                    rt.GetComponent <Text>().text = temp_powerpart.energyDEF_value.ToString();
                }
                else if (rt.name == "Cost")
                {
                    rt.GetComponent <Text>().text = temp_powerpart.cost.ToString();
                }
            }
            break;

        case 1:
            UIpart_prefab       = Instantiate(Resources.Load <GameObject>("UIPart/MovementUIPart/" + UIpart_name), UIpart_group);
            part_particulars_UI = Instantiate(Resources.Load <GameObject>("UI/PartParticulars/LegPartParticulars"), UI_canvas_top);
            temp_part_prefab    = Instantiate(Resources.Load <GameObject>("Part/MovementPart/LegPart/" + part_name));
            LegPart temp_legpart = temp_part_prefab.GetComponent <LegPart>();
            name_text.text = temp_legpart.self_name;
            foreach (RectTransform rt in part_particulars_UI.GetComponentsInChildren <RectTransform>())
            {
                if (rt.name == "Name")
                {
                    rt.GetComponent <Text>().text = temp_legpart.self_name;
                }
                else if (rt.name == "UsePower")
                {
                    rt.GetComponent <Text>().text = "持续耗能    " + temp_legpart.usepower_value.ToString();
                }
                else if (rt.name == "Load")
                {
                    rt.GetComponent <Text>().text = "最大载重    " + temp_legpart.load_value.ToString();
                }
                else if (rt.name == "Move")
                {
                    rt.GetComponent <Text>().text = "移动力       " + temp_legpart.move_value.ToString();
                }
                else if (rt.name == "Dodge")
                {
                    rt.GetComponent <Text>().text = "灵活性       " + temp_legpart.dodge_value.ToString();
                }
                else if (rt.name == "Durability")
                {
                    rt.GetComponent <Text>().text = "耐久         " + temp_legpart.durability_value.ToString();
                }
                else if (rt.name == "Specialty")
                {
                    if (temp_legpart.specialty.Count == 0)
                    {
                        rt.GetComponent <Text>().text = "";
                    }
                    else
                    {
                        string spec = "";
                        foreach (int sp in temp_legpart.specialty)
                        {
                            switch (sp)
                            {
                            case 0:
                                spec += "闪避叠加  ";
                                break;

                            case 1:
                                spec += "反应装甲  ";
                                break;
                            }
                        }
                        rt.GetComponent <Text>().text = "特性         " + spec;
                    }
                }
                else if (rt.name == "NormalDEF")
                {
                    rt.GetComponent <Text>().text = temp_legpart.normalDEF_value.ToString();
                }
                else if (rt.name == "BlastDEF")
                {
                    rt.GetComponent <Text>().text = temp_legpart.blastDEF_value.ToString();
                }
                else if (rt.name == "EnergyDEF")
                {
                    rt.GetComponent <Text>().text = temp_legpart.energyDEF_value.ToString();
                }
                else if (rt.name == "Cost")
                {
                    rt.GetComponent <Text>().text = temp_legpart.cost.ToString();
                }
            }
            break;

        case 2:
            UIpart_prefab       = Instantiate(Resources.Load <GameObject>("UIPart/ControlUIPart/" + UIpart_name), UIpart_group);
            part_particulars_UI = Instantiate(Resources.Load <GameObject>("UI/PartParticulars/ControlPartParticulars"), UI_canvas_top);
            temp_part_prefab    = Instantiate(Resources.Load <GameObject>("Part/ControlPart/" + part_name));
            ControlPart temp_controlpart = temp_part_prefab.GetComponent <ControlPart>();
            name_text.text = temp_controlpart.self_name;
            foreach (RectTransform rt in part_particulars_UI.GetComponentsInChildren <RectTransform>())
            {
                if (rt.name == "Name")
                {
                    rt.GetComponent <Text>().text = temp_controlpart.self_name;
                }
                else if (rt.name == "UsePower")
                {
                    rt.GetComponent <Text>().text = "持续耗能    " + temp_controlpart.usepower_value.ToString();
                }
                else if (rt.name == "Weight")
                {
                    rt.GetComponent <Text>().text = "重量    " + temp_controlpart.weight_value.ToString();
                }
                else if (rt.name == "Modules")
                {
                    rt.GetComponent <Text>().text = "模块    " + temp_controlpart.modules_value.ToString();
                }
                else if (rt.name == "Durability")
                {
                    rt.GetComponent <Text>().text = "耐久    " + temp_controlpart.durability_value.ToString();
                }
                else if (rt.name == "NormalDEF")
                {
                    rt.GetComponent <Text>().text = temp_controlpart.normalDEF_value.ToString();
                }
                else if (rt.name == "BlastDEF")
                {
                    rt.GetComponent <Text>().text = temp_controlpart.blastDEF_value.ToString();
                }
                else if (rt.name == "EnergyDEF")
                {
                    rt.GetComponent <Text>().text = temp_controlpart.energyDEF_value.ToString();
                }
                else if (rt.name == "Cost")
                {
                    rt.GetComponent <Text>().text = temp_controlpart.cost.ToString();
                }
            }
            break;

        case 3:
            UIpart_prefab       = Instantiate(Resources.Load <GameObject>("UIPart/EquipmentUIPart/" + UIpart_name), UIpart_group);
            part_particulars_UI = Instantiate(Resources.Load <GameObject>("UI/PartParticulars/EquipmentPartParticulars"), UI_canvas_top);
            temp_part_prefab    = Instantiate(Resources.Load <GameObject>("Part/EquipmentPart/" + part_name));
            EquipmentPart temp_equippart = temp_part_prefab.GetComponent <EquipmentPart>();
            name_text.text = temp_equippart.self_name;
            foreach (RectTransform rt in part_particulars_UI.GetComponentsInChildren <RectTransform>())
            {
                if (rt.name == "Name")
                {
                    rt.GetComponent <Text>().text = temp_equippart.self_name;
                }
                else if (rt.name == "PartType")
                {
                    string s1 = "";
                    string s2 = "";


                    switch ((int)temp_equippart.damage_type)
                    {
                    case 0:
                        //normal
                        s1 = "常规武器";
                        break;

                    case 1:
                        //blast
                        s1 = "爆炸武器";
                        break;

                    case 2:
                        //energy
                        s1 = "能量武器";
                        break;
                    }
                    switch ((int)temp_equippart.atk_pattern)
                    {
                    case 0:
                        s2 = "射击";
                        break;

                    case 1:
                        s2 = "飞弹";
                        break;
                    }

                    rt.GetComponent <Text>().text = "装备·" + s1 + "·" + s2;
                }
                else if (rt.name == "UsePower")
                {
                    rt.GetComponent <Text>().text = "持续耗能    " + temp_equippart.usepower_value.ToString();
                }
                else if (rt.name == "EachUsePower")
                {
                    rt.GetComponent <Text>().text = "使用耗能    " + temp_equippart.eachusepower_value.ToString();
                }
                else if (rt.name == "Damage")
                {
                    rt.GetComponent <Text>().text = "伤害             " + temp_equippart.damage.ToString() + " * " + temp_equippart.attack_number.ToString();
                }
                else if (rt.name == "DamageTypeIcon")
                {
                    switch ((int)temp_equippart.damage_type)
                    {
                    case 0:
                        //normal
                        rt.GetComponent <Image>().sprite = Resources.LoadAll <Sprite>("Icon/DamageTypeIcons")[0];
                        break;

                    case 1:
                        //blast
                        rt.GetComponent <Image>().sprite = Resources.LoadAll <Sprite>("Icon/DamageTypeIcons")[1];
                        break;

                    case 2:
                        //energy
                        rt.GetComponent <Image>().sprite = Resources.LoadAll <Sprite>("Icon/DamageTypeIcons")[2];
                        break;
                    }
                }
                else if (rt.name == "Range")
                {
                    rt.GetComponent <Text>().text = "射程          " + temp_equippart.range_value.ToString();
                }
                else if (rt.name == "Ammo")
                {
                    string one;
                    string two;
                    if (temp_equippart.ammo_value == -999)
                    {
                        one = "∞";
                    }
                    else
                    {
                        one = temp_equippart.ammo_value.ToString();
                    }
                    if (temp_equippart.magazine_value == -999)
                    {
                        two = "∞";
                    }
                    else
                    {
                        two = temp_equippart.magazine_value.ToString();
                    }
                    rt.GetComponent <Text>().text = "弹药          " + one + "/" + two;
                }
                else if (rt.name == "Specialty")
                {
                    if (temp_equippart.specialty.Count == 0)
                    {
                        rt.GetComponent <Text>().text = "";
                    }
                    else
                    {
                        string spec = "";
                        foreach (int sp in temp_equippart.specialty)
                        {
                            switch (sp)
                            {
                            case 0:
                                spec += "连射  ";
                                break;

                            case 1:
                                spec += "  ";
                                break;
                            }
                        }
                        rt.GetComponent <Text>().text = "特性         " + spec;
                    }
                }
                else if (rt.name == "Weight")
                {
                    rt.GetComponent <Text>().text = "重量          " + temp_equippart.weight_value.ToString();
                }
                else if (rt.name == "Durability")
                {
                    rt.GetComponent <Text>().text = "耐久          " + temp_equippart.durability_value.ToString();
                }
                else if (rt.name == "Tag")
                {
                    if (temp_equippart.symmetry)
                    {
                        rt.GetComponentInChildren <Text>().text = "对称";
                    }
                    else
                    {
                        rt.GetComponentInChildren <Text>().text = "多方向";
                    }
                }
                else if (rt.name == "NormalDEF")
                {
                    rt.GetComponent <Text>().text = temp_equippart.normalDEF_value.ToString();
                }
                else if (rt.name == "BlastDEF")
                {
                    rt.GetComponent <Text>().text = temp_equippart.blastDEF_value.ToString();
                }
                else if (rt.name == "EnergyDEF")
                {
                    rt.GetComponent <Text>().text = temp_equippart.energyDEF_value.ToString();
                }
                else if (rt.name == "Cost")
                {
                    rt.GetComponent <Text>().text = temp_equippart.cost.ToString();
                }
            }
            break;
        }

        Destroy(temp_part_prefab);            //销毁临时零件
        part_particulars_UI.GetComponent <PartParticulars>().parent_button = this;
        part_particulars_UI.SetActive(false); //关闭零件详情页
    }
Esempio n. 3
0
    void RemoveFromList(Part p)
    {
        //移除的话不用管零件当前是否合法,如果能从列表里找到就移除,找不到说明零件不合法根本就没在列表里
        //但是这里的判断条件用了两个,实际上只要一个为true另一个理论上也应该为true,这么写是为了验证代码逻辑有没有漏洞
        if (all_legal_parts.Contains(p) && p.legal)
        {
            all_legal_parts.Remove(p);
            Debug.Log("零件已从合法零件列表中删除");
        }


        if (p.part_type == PartType.PowerPart)
        {
            //如果移除的是动力组件,还要重新打开所有动力组件的按钮并且从动力零件列表中删除
            PowerPart temp = p.GetComponent <PowerPart>();
            have_power_part = false;
            button_controller.ReleasePowerPartButton();
            if (all_power_parts.Contains(temp) && temp.legal)
            {
                all_power_parts.Remove(temp);
                Debug.Log("动力组件已经移除!");
            }
            else
            {
                Debug.Log("动力组件不合法已经直接移除!");
            }
        }
        else if (p.part_type == PartType.LegPart)
        {
            LegPart temp = p.GetComponent <LegPart>();
            switch (temp.self_side)
            {
            case -1:
                have_L_movement_part = false;
                break;

            case 1:
                have_R_movement_part = false;
                break;
            }

            if (all_leg_parts.Contains(temp) && temp.legal)
            {
                all_leg_parts.Remove(temp);
                Debug.Log("一个合法的腿部组件已经移除!");
            }
            else
            {
                Debug.Log("腿部组件不合法已经直接移除!");
            }

            //执行移动组件检测重新确定左右是否都有合法的移动组件
            CheckMovementSide();
        }
        else if (p.part_type == PartType.ControlPart)
        {
            ControlPart temp = p.GetComponent <ControlPart>();
            if (all_ctrl_parts.Contains(temp) && temp.legal)
            {
                all_ctrl_parts.Remove(temp);
                Debug.Log("一个合法的控制组件已经移除!");
            }
            else
            {
                Debug.Log("控制组件不合法已经直接移除!");
            }
        }
        else if (p.part_type == PartType.Equipment)
        {
            EquipmentPart temp = p.GetComponent <EquipmentPart>();
            if (all_equip_parts.Contains(temp) && temp.legal)
            {
                all_equip_parts.Remove(temp);
                Debug.Log("一个合法的控制组件已经移除!");
            }
            else
            {
                Debug.Log("控制组件不合法已经直接移除!");
            }
        }
    }
Esempio n. 4
0
    public void CheckLegal()
    {
        //Debug.LogError("111111111111111111all_power_parts.Count =  " + all_power_parts.Count);
        //这个函数每帧检测零件的合法性变化情况及时更改各个列表中储存的零件

        //清空缓存列表:
        if (remove_those_from_all_legal_parts.Count != 0)
        {
            remove_those_from_all_legal_parts.Clear();
        }

        foreach (var p in all_parts)
        {
            if (p.legal)
            {
                //如果检测零件合法但是合法零件列表中没有这个零件,就添加
                if (!all_legal_parts.Contains(p))
                {
                    all_legal_parts.Add(p);

                    //然后再向分类的合法零件列表中添加
                    if (p.part_type == PartType.PowerPart && !all_power_parts.Contains(p))
                    {
                        Debug.LogError("这里添加" + all_power_parts.Count);
                        //如果是动力组件并且分类列表中没有这个组件才添加
                        PowerPart temp = p.GetComponent <PowerPart>();
                        button_controller.BanPowerPartButton();
                        all_power_parts.Add(temp);
                        have_power_part = true;
                        Debug.LogError("这里添加" + all_power_parts.Count);
                    }
                    else if (p.part_type == PartType.LegPart && !all_leg_parts.Contains(p))
                    {
                        LegPart temp = p.GetComponent <LegPart>();
                        all_leg_parts.Add(temp);
                        //执行移动组件检测重新确定左右是否都有合法的移动组件
                        CheckMovementSide();
                    }
                    else if (p.part_type == PartType.ControlPart && !all_ctrl_parts.Contains(p))
                    {
                        ControlPart temp = p.GetComponent <ControlPart>();
                        all_ctrl_parts.Add(temp);
                    }
                    else if (p.part_type == PartType.Equipment && !all_equip_parts.Contains(p))
                    {
                        EquipmentPart temp = p.GetComponent <EquipmentPart>();
                        all_equip_parts.Add(temp);
                    }
                }
            }
            else
            {
                //如果检测零件不合法,先添加到移除的缓存列表中
                //一个零件由合法转为不合法的时,此时 all_legal_parts 里存在这个零件,但 p.legal = false;
                if (all_legal_parts.Contains(p) && !p.legal)
                {
                    remove_those_from_all_legal_parts.Add(p);
                    //Debug.LogError("零件已经进入移除缓存区");

                    //再处理其他合法零件列表
                    if (p.part_type == PartType.PowerPart && all_power_parts.Contains(p))
                    {
                        PowerPart temp = p.GetComponent <PowerPart>();
                        button_controller.ReleasePowerPartButton();
                        all_power_parts.Remove(temp);
                        have_power_part = false;
                        //Debug.LogError(all_power_parts.Contains(p));
                        //Debug.LogError("这里" + all_power_parts.Count);
                    }
                    else if (p.part_type == PartType.LegPart && all_leg_parts.Contains(p))
                    {
                        LegPart temp = p.GetComponent <LegPart>();
                        all_leg_parts.Remove(temp);
                        //执行移动组件检测重新确定左右是否都有合法的移动组件
                        CheckMovementSide();
                    }
                    else if (p.part_type == PartType.ControlPart && all_ctrl_parts.Contains(p))
                    {
                        ControlPart temp = p.GetComponent <ControlPart>();
                        all_ctrl_parts.Remove(temp);
                    }
                    else if (p.part_type == PartType.Equipment && all_equip_parts.Contains(p))
                    {
                        EquipmentPart temp = p.GetComponent <EquipmentPart>();
                        all_equip_parts.Remove(temp);
                    }
                }
            }
        }
        //Debug.LogError("all_legal_parts = " + all_legal_parts.Count);
        foreach (var p in remove_those_from_all_legal_parts)
        {
            all_legal_parts.Remove(p);
            Debug.LogError(p.name + "零件已从合法零件列表中移除");
        }
    }
Esempio n. 5
0
    public void ClickPartButton(PartButton click_this_button)
    {
        //计算零件出生位置:
        ////Vector3 start_pos = SetPosWhenPartCreat();

        switch ((int)click_this_button.part_type)
        {
        case 0:

            if (unit_blueprint.have_power_part)
            {
                Debug.LogError("设计平台上已经存在一个动力组件!");
                self_AS.clip = all_ACs["Error"];
                self_AS.Play();
                return;
            }

            part_prefab = Instantiate(Resources.Load <GameObject>("Part/PowerPart/" + click_this_button.part_name));
            PowerPart temp_power_part = part_prefab.GetComponent <PowerPart>();
            temp_power_part.enabled = true;
            temp_power_part.Init();    //手动初始化,因为Start执行顺序有问题
            temp_power_part.CreatFromButton();
            temp_power_part.be_creat_from_button = true;
            break;

        case 1:

            GameObject temp_go = Resources.Load <GameObject>("Part/MovementPart/LegPart/" + click_this_button.part_name);
            part_prefab = Instantiate(temp_go);
            //part_prefab.transform.position = start_pos;
            LegPart temp_leg_part = part_prefab.GetComponent <LegPart>();
            temp_leg_part.enabled = true;
            temp_leg_part.Init();    //手动初始化,因为Start执行顺序有问题
            temp_leg_part.CreatFromButton();
            temp_leg_part.be_creat_from_button = true;
            break;

        case 2:
            if (unit_blueprint.have_ctrl_part)
            {
                Debug.Log("注意:设计平台上已经存在一个控制组件!");
                //break;
            }

            part_prefab = Instantiate(Resources.Load <GameObject>("Part/ControlPart/" + click_this_button.part_name));
            ControlPart temp_control_part = part_prefab.GetComponent <ControlPart>();
            temp_control_part.enabled = true;
            temp_control_part.Init();    //手动初始化,因为Start执行顺序有问题
            temp_control_part.CreatFromButton();
            temp_control_part.be_creat_from_button = true;
            break;

        case 3:
            part_prefab = Instantiate(Resources.Load <GameObject>("Part/EquipmentPart/" + click_this_button.part_name));
            EquipmentPart temp_equip_part = part_prefab.GetComponent <EquipmentPart>();
            temp_equip_part.enabled = true;
            temp_equip_part.Init();    //手动初始化,因为Start执行顺序有问题
            temp_equip_part.CreatFromButton();
            temp_equip_part.be_creat_from_button = true;
            break;
        }

        //播放创建零件的音效:
        creat_part_audio.Play();
        //关闭悬停高亮Ui:
        click_this_button.hover_image.enabled = false;

        foreach (var lb in all_layer_button)
        {
            lb.self_image.sprite = lb.sp[0];
            lb.pressed           = false;
        }

        ToolClosePartInterface();
        unit_blueprint.menu_open = false;
    }