public void CheckCombine(Bean.Bean bean) { List <Bean.Bean> checkedBeans = new List <Bean.Bean>(); List <Bean.Bean> matchBeans = new List <Bean.Bean>(); matchBeans.Add(bean); checkedBeans.Add(bean); bean.dye_hasCheck = true; DyeCheckCombine(bean, bean.Type, checkedBeans, matchBeans); foreach (Bean.Bean round in checkedBeans) { round.dye_hasCheck = false; } checkedBeans.Clear(); if (matchBeans.Count >= 3) { //三消 foreach (Bean.Bean round in matchBeans) { string key = round.row.ToString() + "_" + round.col.ToString(); allBeans.Remove(key); round.OnCombineDone(); } matchBeans.Clear(); //掉落 CheckDrop(); } }
Bean.Bean createInitBean() { Bean.Bean bean = Bean.Bean.CreateIns(Bean.Bean.BeanType.Disable); bean.State = Bean.Bean.BeanState.In_Planet; bean.transform.localPosition = Vector2.zero; bean.transform.parent = this.transform; bean.gameObject.SetActive(true); bean.planet = this; return(bean); }
//相连接的 void DyeCheckLink(Bean.Bean bean, List <Bean.Bean> matchBeans) { List <Bean.Bean> beans = getRoundBeans(bean); foreach (Bean.Bean round in beans) { if (round.dye_hasCheck) { continue; } round.dye_hasCheck = true; matchBeans.Add(round); DyeCheckLink(round, matchBeans); } }
public List <Bean.Bean> getRoundBeans(Bean.Bean bean) { List <Bean.Bean> beans = new List <Bean.Bean>(); for (int index = 0; index < 6; index++) { int[] coord = getCoordByIndex(bean.row, bean.col, index); string key = coord[0].ToString() + "_" + coord[1].ToString(); if (allBeans.ContainsKey(key)) { var find = allBeans[key]; beans.Add(find); } } return(beans); }
void DyeCheckCombine(Bean.Bean bean, Bean.Bean.BeanType beanType , List <Bean.Bean> checkedBeans, List <Bean.Bean> matchBeans) { List <Bean.Bean> beans = getRoundBeans(bean); foreach (Bean.Bean round in beans) { if (round.dye_hasCheck) { continue; } round.dye_hasCheck = true; checkedBeans.Add(round); if (round.Type == beanType) { matchBeans.Add(round); DyeCheckCombine(round, beanType, checkedBeans, matchBeans); } } }
// Use this for initialization void Start() { //clean all foreach (Transform child in transform) { GameObject.Destroy(child.gameObject); } //中心 Bean.Bean bean = createInitBean(); bean.row = 0; bean.col = 0; allBeans["0_0"] = bean; for (int index = 0; index < 6; index++) { Bean.Bean round = createInitBean(); Vector2 correctDt = Utils.getVecByAngle(index * 60) * (bean.getRadius() + round.getRadius()); round.transform.localPosition = bean.transform.localPosition + (Vector3)correctDt; AddBean(bean, round); } }
public void AddBean(Bean.Bean touchBean, Bean.Bean bean) { bean.transform.parent = transform; bean.planet = this; //校验修正位置 Vector2 dt = bean.transform.localPosition - touchBean.transform.localPosition; float ang = Utils.getAngleByVec2(dt); int index = Mathf.FloorToInt((ang + 30) / 60) % 6; float correctAng = index * 60; Vector2 correctDt = Utils.getVecByAngle(correctAng) * (bean.getRadius() + touchBean.getRadius()); bean.transform.localPosition = touchBean.transform.localPosition + (Vector3)correctDt; //加入roundbeans //touchBean.roundBeans[index] = bean; //int otherSideIndex = (index + 3)%6; //bean.roundBeans[otherSideIndex] = touchBean; //行列 int[] coord = getCoordByIndex(touchBean.row, touchBean.col, index); int newRow = coord[0]; int newCol = coord[1]; bean.row = newRow; bean.col = newCol; string key = newRow.ToString() + "_" + newCol.ToString(); allBeans[key] = bean; }