/// <summary> /// 检查组合限制 /// </summary> /// <returns></returns> private bool CheckCombinationLimitation(CentralController newType) { foreach (Control item in this.Controls) { if (item is ucDropController) { ucDropController uc = (item as ucDropController); CentralController existControllerType = uc.TypeInfo; if (existControllerType == null) { continue; } if (newType == existControllerType) { continue; } //验证新加的控制器类型是否和已有的控制器互相兼容 if (CheckControllerCompatible(newType, existControllerType, 1) == false) { return(false); } } } return(true); }
/* void OnMouseUp(){ * print ("i am selected:"+this.gameObject.name); * if (CentralController.inst.currentSelectedChar) { * print ("last selectd:" + CentralController.inst.currentSelectedChar.name); * //hideTerrainGrid (CentralController.inst.currentSelectedChar); * } * CentralController.inst.currentSelectedChar = this.gameObject; * showTerrainGrid (CentralController.inst.currentSelectedChar); * CentralController.inst.state = 100; * }*/ void showTerrainGrid(GameObject go) { CentralController cc = CentralController.inst; TerrainGrid tg = cc.getGlobalTerainGrid(); tg.inactiveAllCells(); Vector2 pos = CentralController.getPosFromCord(go.transform.position); print("ch pos:" + pos); int range = this.GetComponent <Character>().max_move_distance; int start_x = (int)(pos.x - range); int x = start_x; int start_y = (int)(pos.y + range); int y = start_y; for (int k = 0; k < range * 2; k++) { for (int i = 0; i < range * 2; i++) { tg.activeCell(x, y); y -= 1; } y = start_y; x += 1; } }
public void transformAsFaction(Transform t) { CentralController cc = CentralController.inst; float ang = 0; t.RotateAround(cc.getTerrainCenterPoint(), new Vector3(0, 1, 0), factionID * (360 / cc.FACTION_NUMBER)); }
// 0: valid // -1: cell not valid // -2: not in range int validatePos(Character hero, int x, int y) { CentralController cc = CentralController.inst; TerrainGrid tg = cc.getGlobalTerainGrid(); // check if it out of range Vector2 pos = CentralController.getPosFromCord(hero.gameObject.transform.position); int dist_x = (int)pos.x - x; int dist_y = (int)pos.y - y; //print ("dist:" + dist_x + "," + dist_y); int max = hero.getEffectMaxMoveDistance(); if (dist_x > max || dist_x < -max || dist_y > max || dist_y < -max) { return(-2); } // check if is shown as a valid cell if (!tg.IsCellValid(x, y)) { return(-1); } //GameObject cell = tg.getCell (x, y); return(0); }
void hideTerrainGrid() { CentralController cc = CentralController.inst; TerrainGrid tg = cc.getGlobalTerainGrid(); tg.inactiveAllCells(); }
static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); CentralController system = new CentralController(); Application.Run(system); }
public Vector3 transformPosAsFaction(Vector3 t) { CentralController cc = CentralController.inst; float ang = factionID * (360 / cc.FACTION_NUMBER); //print ("ang:" + ang); //Vector3 pivot = cc.getTerrainCenterPoint () + new Vector3 (0, 1, 0) - cc.getTerrainCenterPoint () ; //print ("axis:" + pivot); //return RotatePointAroundPivot (t, cc.getTerrainCenterPoint () + new Vector3 (0, 1, 0), new Vector3(0, ang, 0)); return(RotateRound(t, cc.getTerrainCenterPoint(), Vector3.up, ang)); }
void ucController_BeforeAdd(object sender, EventArgs e) { CentralController typeInfo = (sender as ucDropController).TypeInfo; if (CheckBeforeAddController(typeInfo, 1) == false) { return; } this.OnBeforeAdd(sender as ucDropController, e); }
// Update is called once per frame void Update() { CentralController cc = CentralController.inst; if (cc.gameworld_ready == false) { return; } float delta = Time.deltaTime; if (_next) { int current = cc.current_operating_faction; Image image = images [current]; Text text = _texts [current]; image.fillAmount = 1; Color c = image.color; c.r = 0.6f; c.g = 1; c.b = 0.8f; image.color = c; text.text = 0.ToString ("0"); next(); _next = false; } if (cc.current_operating_faction < faction_number) { time += delta; Image image = images [cc.current_operating_faction]; Text text = _texts [cc.current_operating_faction]; image.fillAmount = (float)time / timeout; Color c = image.color; c.r = 0.6f; c.g = 1; c.b = 0.8f; image.color = c; text.text = ((int)(timeout - time)).ToString("0"); //print ("time:" + time); if (time > timeout) { time = 0; next(); } } }
// change turn to next player public void next() { CentralController cc = CentralController.inst; if (cc.current_operating_faction + 1 >= faction_number) { cc.current_operating_faction = 0; } else { cc.current_operating_faction += 1; } }
public void deployCharacters(Character[] characters) { CentralController cc = CentralController.inst; Vector2 start_pos = new Vector2(8, 8); Vector2 cur_pos = start_pos; int row_npc_number = 8; int gap = 2; // distance between npc cur_pos.x -= gap * row_npc_number / 2; cur_pos.y += gap * row_npc_number / 2; this.characters = characters; //Vector3 tc = CentralController.inst.getTerrainCenterPoint (); //print ("tc:" + tc); // put the npc on to the terrain int j = 0; for (int i = 0; i < characters.Length; i++) { Character c = characters [i]; c.setFaction(this); print("current pos:" + cur_pos); Vector3 trans_pos = transformPosAsFaction(CentralController.getCordFromPos(cur_pos)); print("current pos2:" + trans_pos); CentralController.inst._move_char(c, CentralController.getPosFromCord(trans_pos)); //c.transform.position = cc.getCordFromPos((int)cur_pos.x, (int)cur_pos.y); print("pos:" + c.transform.position); //transformAsFaction (c.transform); //c.PlayDieAnimation(); print("created character " + c.name); //c.anim.Play ("DamageFront"); if (j >= row_npc_number) { cur_pos.x -= (row_npc_number - 1) * gap; cur_pos.y += (row_npc_number + 1) * gap; j = 0; } else { cur_pos.x += gap; cur_pos.y -= gap; j += 1; } } }
bool handleSelectChar() { if (Input.GetMouseButtonUp(0)) { CentralController cc = CentralController.inst; RaycastHit hit = new RaycastHit(); Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); if (Physics.Raycast(ray, out hit)) { print(hit.collider.gameObject); print(hit.transform.gameObject); if (hit.collider.gameObject.tag == "char") { print("i am selected:" + hit.transform.gameObject); if (CentralController.inst.currentSelectedChar) { print("last selectd:" + CentralController.inst.currentSelectedChar.name); //hideTerrainGrid (CentralController.inst.currentSelectedChar); } CentralController.inst.currentSelectedChar = hit.transform.gameObject; if (cc.currentSelectedChar.GetComponent <Character>().getFaction().factionID == 0) { showTerrainGrid(CentralController.inst.currentSelectedChar); } CentralController.inst.char_panel.SetActive(true); CentralController.inst.updatePropertyPanel(CentralController.inst.currentSelectedChar.GetComponent <Character>()); cc.state = 100; stop_propagate = true; // move camera center to this object camera_target = hit.point; /*print ("hitpoint:" + hit.point); * Vector3 offset = hit.point - last_terrain_pos; * offset.y = 0; * offset.x /= 4; * offset.z /= 4; * transform.position += offset; * last_terrain_pos = last_terrain_pos + offset;*/ return(true); } } } return(false); }
void Awake() { inst = this; fs = new FactionSetting[FACTION_NUMBER]; for (int i = 0; i < FACTION_NUMBER; i++) { FactionSetting _fs = new FactionSetting(); fs [i] = _fs; } factions = new Faction[FACTION_NUMBER]; //colors = new Color[FACTION_NUMBER]; print("fs" + fs.GetType().ToString()); }
/// <summary> /// 获取不再指定范围里的型号,如果都在范围里面则返回null /// </summary> /// <param name="type1"></param> /// <param name="type2"></param> /// <param name="number">比较的次数,1是A和B比较,2是B和A比较。</param> /// <returns></returns> private bool CheckControllerCompatible(CentralController type1, CentralController type2, int number) { if (string.IsNullOrEmpty(type1.CompatibleModel)) { if (number == 1) { //type1没有明确兼容的控制器,需要第二次比较,如果type2不兼容type1,则最后结果是不兼容 return(CheckControllerCompatible(type2, type1, 2)); } else { return(true); } } else if (type1.CompatibleModel == "none") { //2.1 - Not compatible with other central controler JCMsg.ShowWarningOK(Msg.CONTROLLER_NOT_COMPATIBLE); return(false); } else { //2.2 - is combinable List <string> compatibleModels = new List <string>(); compatibleModels.AddRange(type1.CompatibleModel.Split(',')); //兼容性逻辑应该是所有类型适用的,所以下面的判断可以去掉 20160901 by Yunxiao Lin //if (type2.Type == ControllerType.CentralController || type2.Type == ControllerType.ONOFF) //{ if (!compatibleModels.Contains(type2.BrandCode == "H" ? type2.Model_Hitachi : type2.Model_York)) { //type1不兼容type2, 有3种情况 //1. 如果是第二次比较还是不兼容的话,则肯定是不兼容 //2. 如果是第一次比较,type1不兼容typ2,而type2没有指定兼容的型号,则判断为不兼容。 if (number == 2 || string.IsNullOrEmpty(type2.CompatibleModel)) { JCMsg.ShowWarningOK(Msg.CONTROLLER_NOT_COMPATIBLE_WITH(number == 1 ? type2.Model : type1.Model)); return(false); } //3.如果第一次比较下来type1不兼容typ2, 并且type2有明确兼容的型号,则要看type2是不是兼容type1。 else { return(CheckControllerCompatible(type2, type1, 2)); } } //} } return(true); }
/// <summary> /// Algorithm to Check combination/Combatibilty between the Controllers /// </summary> /// <param name="type1"></param> /// <param name="type2"></param> /// <param name="number"></param> /// <returns></returns> private bool CheckControllerCompatible(CentralController type1, CentralController type2, int number) { if (string.IsNullOrEmpty(type1.CompatibleModel)) { if (number == 1) { return(CheckControllerCompatible(type2, type1, 2)); } else { return(true); } } else if (type1.CompatibleModel == "none") { //2.1 - Not compatible with other central controler //JCHMessageBox.Show("ERROR: Controller Not compatible"); //---------------- Below code added for multi-language----------// JCHMessageBox.Show(Langauge.Current.GetMessage("ERROR_CONTROLLER")); return(false); } else { //2.2 - is combinable List <string> compatibleModels = new List <string>(); compatibleModels.AddRange(type1.CompatibleModel.Split(',').Select(r => r.Trim())); //if (type2.Type == ControllerType.CentralController || type2.Type == ControllerType.ONOFF) //{ if (!compatibleModels.Contains(type2.Model)) { if (number == 2 || string.IsNullOrEmpty(type2.CompatibleModel)) { //JCHMessageBox.Show("ERROR: Controller Not compatible with " + (number ==1 ? type2.Model : type1.Model)); //---------------- Below code added for multi-language----------// JCHMessageBox.Show(Langauge.Current.GetMessage("ERROR_NOT_COMPATIABLE") + (number == 1 ? type2.Model : type1.Model)); return(false); } else { return(CheckControllerCompatible(type2, type1, 2)); } } //} } return(true); }
/// 后台加载Controller对象 /// <summary> /// 后台加载Controller对象 /// </summary> /// <param name="item"></param> public ucDropController AddController(Controller item, CentralController type) { ucDropController uc = new ucDropController(); if (item != null && type != null) { uc.BindToControl_Controller(item, type); } this.Controls.Add(uc); uc.BeforeDrop += new DropEventHandler(ucController_BeforeDrop); uc.AfterDrop += new DropEventHandler(ucController_AfterDrop); uc.BeforeRemove += new EventHandler(ucController_BeforeRemove); uc.BeforeAdd += new EventHandler(ucController_BeforeAdd); return(uc); }
/// <summary> /// 将Controller对象的属性绑定到控件 /// </summary> /// <param name="item"></param> public void BindToControl_Controller(Controller item, CentralController type) { if (item == null) { return; } this.Controller = item; this.TypeInfo = type; SetActive(); this.SetControllerImage(type.Image); this.SetToolTip(type); this.UpdateQuantity(); }
/// <summary> /// Adding Valid controller to the CurrentProject Instance /// </summary> /// <param name="centralController"></param> private void AddControllerToProject(CentralController centralController) { var findcontroller = Project.CurrentProject.ControllerList.Find(x => x.ControlGroupID.Equals(_group.Id) && x.Model.Equals(centralController.Model)); if (findcontroller != null) { findcontroller.Quantity = findcontroller.Quantity + 1; } else { Controller ctrlController = new Controller(centralController); ctrlController.AddToControlGroup(_group.Id); ctrlController.Quantity = 1; ctrlController.AddToControlSystem(_group.ControlSystemID); Project.CurrentProject.ControllerList.Add(ctrlController); } }
private void ParseControllerType(CentralController ct, string controllerType) { switch (controllerType.Trim().ToUpper()) { case "LONWORKS INTERFACE": case "LONWORKS ADAPTER": ct.Type = ControllerType.LonWorksInterface; break; case "GATEWAY TO MODBUS SYSTEMS FOR 64 IU": case "GATEWAY TO MODBUS SYSTEMS FOR 8 IU": case "MODBUS ADAPTER": case "MODBUS GATEWAY": case "MODBUS INTERFACE": ct.Type = ControllerType.ModBusInterface; break; case "BACNET ADAPTER": case "BACNET GATEWAY CONNECTABLE TO HC-A64MB": case "BACNET GATEWAY CONNECTABLE TO HC-A8MB": case "BACNET INTERFACE": ct.Type = ControllerType.BACNetInterface; break; case "GATEWAY TO KNX SYSTEMS FOR 16 IU": case "GATEWAY TO KNX SYSTEMS FOR CSNET WEB": ct.Type = ControllerType.KNXInterface; break; case "CENTRALIZED ON-OFF CONTROLLER": ct.Type = ControllerType.ONOFF; break; case "CENTRAL STATION DX SOFTWARE": case "CONMUTERIZED CENTRAL CONTROLLER SOFTWARE": ct.Type = ControllerType.Software; break; default: ct.Type = ControllerType.CentralController; break; } }
void OnMouseDown() { print("Terrain grid clicked111"); if (Input.GetMouseButtonDown(0)) { print("Terrain grid clicked:" + this.gameObject.name); CentralController cc = CentralController.inst; /*if (cc.state == 100) { // move character onto this cell * RaycastHit hit; * Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); * if (this.gameObject.GetComponent<Collider>().Raycast(ray, out hit, Mathf.Infinity)) { * Vector2 pos = cc.getPosFromCord(hit.point); * print ("click cell " + pos); * } * * }*/ } }
public void after_setup() { string s_kill = ""; // prepare its kill and bekilled if (kill != null) { string[] ar_kill = new string[kill.Length]; //skill = string.Join (", ", kill); for (int i = 0; i < kill.Length; i++) { CharacterSetting cs = CentralController.load_charsetting(kill [i]); cs.setup(); Debug.Log("==>kill:" + cs.name); ar_kill [i] = cs.name; } s_kill = string.Join(" ", ar_kill); } desc = desc + "\n" + "克制: " + s_kill; }
public void Initialize(Supervisor sup, List <FSM.Event> previousEvents, string customInit = null) { // Set central controller centralController = manager.GetComponent <CentralController>(); // Instantiate supervisor //supervisorio = new FSM(automaton); supervisorio = new FSM(sup, customInit); // Get initial gridosition - normally (0,0) position = supervisorio.currentState.GetPosition(); // Instantiate Handlers animationComponent.Initialize(manager); interfaceComponent.Initialize(manager); communicationComponent.Initialize(manager); // Set initial position animationComponent.FixPosition(); supervisorio.RunEvents(previousEvents); }
/// 获取当前控件中指定控制器类型的ucDropController控件的数量,用于验证 /// <summary> /// 获取当前控件中指定控制器类型的ucDropController控件的数量,用于验证,需求更改 /// </summary> /// <param name="type"></param> /// <returns></returns> public int GetControllerQty(ControllerType type) { int qty = 0; foreach (Control item in this.Controls) { if (item is ucDropController) { ucDropController uc = (item as ucDropController); Controller controller = uc.Controller; CentralController typeInfo = uc.TypeInfo; if (uc.IsActive) { if (uc.Controller.Type == type) { qty += uc.Controller.Quantity; } } } } return(qty); }
/// 获取当前控件中ucDropController控件的数量,用于验证是否超出最大数量限制 /// <summary> /// 获取当前控件中ucDropController控件的数量,用于验证是否超出最大数量限制 /// </summary> /// <returns></returns> public int GetControllerQty() { int qty = 0; foreach (Control item in this.Controls) { if (item is ucDropController) { ucDropController ucController = item as ucDropController; Controller controller = ucController.Controller; CentralController typeInfo = ucController.TypeInfo; if (controller != null) { //软件不参与统计 modified by Shen Junjie on 2017/12/20 if (typeInfo.Type != ControllerType.Software) { qty += controller.Quantity; } } } } return(qty); }
void showTerrainGrid(GameObject go) { CentralController cc = CentralController.inst; TerrainGrid tg = cc.getGlobalTerainGrid(); tg.inactiveAllCells(); Vector2 pos = CentralController.getPosFromCord(go.transform.position); print("ch pos:" + pos); Character hero = go.GetComponent <Character> (); int range = hero.getEffectMaxMoveDistance(); int start_x = (int)(pos.x - range); int x = start_x; //if (x < 0) // x = 0; //if (x >= tg.gridWidth) // x = tg.gridWidth-1; int start_y = (int)(pos.y - range); int y = start_y; //if (y < 0) // y = 0; //if (y >= tg.gridHeight) // y = tg.gridHeight-1; for (int k = 0; k < range * 2 + 1; k++) { for (int i = 0; i < range * 2 + 1; i++) { tg.activeCell(x, y); y += 1; } y = start_y; x += 1; } }
/// <summary> /// Combinations of controllers /// </summary> /// <param name="newType"></param> /// <returns></returns> private bool CheckCombinations(CentralController newType) { foreach (var existingController in Project.CurrentProject.ControllerList) { if (existingController.ControlGroupID == _group.Id) { if (existingController.CentralController != null) { CentralController existControllerType = existingController.CentralController; if (newType.Model == existControllerType.Model) { continue; } if (CheckControllerCompatible(newType, existControllerType, 1) == false) { return(false); } } } } return(true); }
/// <summary> /// 检查室内机、室外机和设备总数的限制 /// </summary> /// <param name="typeInfo"></param> /// <param name="indoorQty"></param> /// <param name="outdoorQty"></param> /// <param name="deviceQty"></param> /// <returns></returns> private bool CheckSystemQtyLimitation(CentralController typeInfo, int indoorQty, int outdoorQty, int deviceQty) { //1 - 200 devices (incl. ODU, IDU, remote controller, central controller) can be connected in 1 H-Link if (typeInfo.MaxDeviceNumber > 0 && deviceQty > typeInfo.MaxDeviceNumber) { JCMsg.ShowWarningOK(Msg.CONTROLLER_TOTAL_DEVICE_QTY(typeInfo.MaxDeviceNumber)); return(false); } //2 - Indoor quantity limitation if (typeInfo.MaxIndoorUnitNumber > 0 && indoorQty > typeInfo.MaxIndoorUnitNumber) { JCMsg.ShowWarningOK(Msg.CONTROLLER_MAX_INDOOR_QTY(typeInfo.Model, typeInfo.MaxIndoorUnitNumber)); return(false); } //3 - Outdoor quantity limitation if (typeInfo.MaxSystemNumber > 0 && outdoorQty > typeInfo.MaxSystemNumber) { JCMsg.ShowWarningOK(Msg.CONTROLLER_MAX_OUTDOOR_QTY(typeInfo.Model, typeInfo.MaxSystemNumber)); return(false); } return(true); }
// // main entry for test // FactionSetting loadFactionSettingFromUser(int userid) { //int char_number = 36; //CharacterSetting[] cs = new CharacterSetting[4]; /*cs[0] = new CharacterSetting("黄忠", "Ethan"); * string name = "Huangzhong"; * //UnityEditor.MonoScript go = Instantiate (Resources.Load<UnityEditor.MonoScript>("NPC/" + name )); * //CharacterSetting go = Instantiate (Resources.Load<CharacterSetting>("NPC/" + name )); * * //string someString = "huangzhong"; * //System.Type myType = someString.GetType(); * //dynamic go = myType.GetConstructor (System.Type.EmptyTypes).Invoke (null); * print("===>333"+ go.GetType()); */ /* * * cs [0].clonable = true; * cs [0].movability = 20; * cs [0].attack = 10; * cs [0].knowledge = 1; * cs [0].maxhp = 100; * cs [0].maxmp = 100; * * cs[1] = new CharacterSetting("RedSamurai"); * cs [1].clonable = true; * cs [1].movability = 10; * cs [1].attack = 10; * cs [1].knowledge = 10; * cs [1].maxhp = 60; * cs [1].maxmp = 60; * * cs[2] = new CharacterSetting("Kyle"); * cs [2].clonable = true; * cs [2].movability = 10; * cs [2].attack = 10; * cs [2].knowledge = 10; * cs [2].maxhp = 60; * cs [2].maxmp = 60; * * cs[3] = new CharacterSetting("Troll"); * cs [3].clonable = true; * cs [3].movability = 10; * cs [3].attack = 10; * cs [3].knowledge = 10; * cs [3].maxhp = 60; * cs [3].maxmp = 60; * * FactionSetting fs = new FactionSetting (); * fs.userid = userid; * for (int i = 0; i < char_number; i++) { * fs.add_character (cs[Random.Range(0, cs.Length)]); * }*/ string[] chars = { "Huangzhong", "Zhaoyun", "Lvbu", "Caocao", "Sunquan", "Liubei", "Zhugeliang" }; FactionSetting fs = new FactionSetting(); fs.userid = userid; for (int i = 0; i < chars.Length; i++) { CharacterSetting cs = CentralController.load_charsetting(chars [i]); cs.setup(); cs.after_setup(); print("==cs.name:" + cs.GetType()); fs.add_character(cs); } return(fs); }
public void Initialize(GameObject manager) { centralController = manager.GetComponent <CentralController>(); }
/// <summary> /// 在添加controller之前做检查 /// </summary> /// <param name="typeInfo">controller类型</param> /// <param name="addNumber">增加的数量</param> /// <returns></returns> private bool CheckBeforeAddController(CentralController typeInfo, int addNumber) { ControllerLayoutType type = glProject.ControllerLayoutType; int controllerQty = GetControllerQty(); int outdoorQty = GetOutdoorQty(); int indoorQty = GetIndoorQty(); int ccControllerQty = GetControllerQty(ControllerType.CentralController); int onoffQty = GetControllerQty(ControllerType.ONOFF); int unitQty = outdoorQty + indoorQty; //累加上需要新增的数量 controllerQty += addNumber; switch (typeInfo.Type) { case ControllerType.ONOFF: onoffQty += addNumber; break; case ControllerType.Software: //软件不统计数量,但是因为会同时增加一个实体controller,所以需要加上 case ControllerType.CentralController: ccControllerQty += addNumber; break; } int deviceQty = controllerQty + unitQty; //TODO: 此处还需要加上remote controller的数量 ////检查产品类型是否匹配 //if (CheckProductType(ucDropOutdoor1.GetProductTypes(), typeInfo.ProductType) == false) //{ // return false; //} //区分exchanger 和system 选中的Controller on 20170830 by xyj if (CheckSystemAndExchanger(ucDropOutdoor1.GetOutdoorAndExchanger(), typeInfo.ProductType) == false) { return(false); } //区分exchanger类型对应的Controller 类型是否相同on 20170904 by xyj if (CheckExchangerIsMatch(ucDropOutdoor1.GetExchangerTypesList(), typeInfo.ProductType) == false) { return(false); } //EU暂时忽略设备数及Hlink限制 add on 20180621 by Vince if (_mainRegion == "EU_E" || _mainRegion == "EU_S" || _mainRegion == "EU_W") { return(true); } //检查设备数量是否符合拖动的controller的限制 if (CheckSystemQtyLimitation(typeInfo, indoorQty, outdoorQty, deviceQty + addNumber) == false) { return(false); } //检查设备数量是否在H-Link的限制范围之内 bool isHLinkII = !(typeInfo.Protocol.Trim().ToUpper() == "H-LINK" || HasHLinkI()); if (CheckHLinkLimiation(isHLinkII, indoorQty, outdoorQty, deviceQty + addNumber) == false) { return(false); } ////1 - Can be connected upto 8 Central Controllers in 1 H-Link //if (typeInfo.Type == ControllerType.CentralController && ccControllerQty > Model.ConstValue.HLINKII_MAX_CC_QTY) //{ // JCMsg.ShowWarningOK(Msg.CONTROLLER_HLINK_CENTRAL_CONTROLLER_QTY(Model.ConstValue.HLINKII_MAX_CC_QTY)); // return false; //} //1 - Can be connected upto 8 Central Controllers in 1 H-Link if (typeInfo.MaxControllerNumber > 0 && ccControllerQty > typeInfo.MaxControllerNumber) { JCMsg.ShowWarningOK(Msg.CONTROLLER_HLINK_CENTRAL_CONTROLLER_QTY(ControllerConstValue.HLINKII_MAX_CC_QTY)); return(false); } //2 - combination limitation CheckCombinationLimitation(typeInfo); //3 - check quantity of this model if (typeInfo.MaxSameModel > 0 && GetControllerQty(typeInfo.Model) + addNumber > typeInfo.MaxSameModel) { JCMsg.ShowWarningOK(Msg.CONTROLLER_HLINK_CONTROLLER_QTY(typeInfo.MaxSameModel)); return(false); } //4 - check quantity of this type if (typeInfo.MaxSameType > 0 && GetControllerQty(typeInfo.Type) + addNumber > typeInfo.MaxSameType) { JCMsg.ShowWarningOK(Msg.CONTROLLER_HLINK_CONTROLLER_QTY(typeInfo.MaxSameType)); return(false); } //5 - BACNet Interface Can be connected upto 4 Central Controllers if (typeInfo.Type == ControllerType.BACNetInterface && ccControllerQty > ControllerConstValue.BACNET_MAX_CC_QTY) { JCMsg.ShowWarningOK(Msg.CONTROLLER_BACNET_CC_QTY(ControllerConstValue.BACNET_MAX_CC_QTY)); } //6 - For Web based Cotnrol, max 176 units (ODU + IDU) can be connected. if (typeInfo.MaxUnitNumber > 0 && unitQty > typeInfo.MaxUnitNumber) { //TODO: 此处需要翻译 JCMsg.ShowWarningOK(Msg.CONTROLLER_UNIT_QTY(typeInfo.Model, typeInfo.MaxUnitNumber)); } return(true); }