/// <summary> /// /// </summary> /// <param name="rc">一共有几行几列</param> /// <param name="r">要生成的是哪个图块</param> /// <param name="c">要生成的是哪个图块</param> /// <param name="r2">相邻的是哪个图块</param> /// <param name="c2">相邻的是哪个图块</param> /// <param name="rc2idx">(r2,c2)与(r,c)相邻时,(r2,c2)边的索引,上右下左分别用0123代替</param> /// <returns></returns> char getmode(int rc, int r, int c, int r2, int c2, int rc2idx) { if (r2 < 0 || r2 >= rc) { return('f'); } if (c2 < 0 || c2 >= rc) { return('f'); } int rc2 = r2 * rc + c2; string candy = m_jigtiles[rc2].GetMask(); //如果相邻的图块还没设置过边界,就给(r,c)随机设置一个边界 //如果相邻的图块已经设置了边界,就给(r,c)设置成相反的 if (string.IsNullOrEmpty(candy)) { return(JigtileMaskMode.random()); } else { char mode = candy[rc2idx]; mode = JigtileMaskMode.reverse(mode); return(mode); } }
//mode可能是被旋转过的,用format可以得到存储了图片的mode static public string format(string mode) { HashSet <string> candy = new HashSet <string>(); candy.Add("aaaa"); candy.Add("aaaf"); candy.Add("faaf"); candy.Add("ffva"); candy.Add("vaaa"); candy.Add("vafa"); candy.Add("vava"); candy.Add("vfaa"); candy.Add("vfav"); candy.Add("vffa"); candy.Add("vfva"); candy.Add("vvaa"); candy.Add("vvav"); candy.Add("vvfa"); candy.Add("vvff"); candy.Add("vvva"); candy.Add("vvvf"); candy.Add("vvvv"); for (int i = 0; i < 4; ++i) { if (candy.Contains(mode)) { return(mode); } else { // Debug.Log("format"); mode = JigtileMaskMode.deform(mode); } } // print(string.Format("Can not found:{0}", mode)); jt.log("can not find ", mode); Debug.Assert(false); return(null); }
//设置使用哪张碰撞掩码图,用vfa代表,上右下左4个字符 public void SetMask(string maskmode) { m_mode = maskmode; //如果有旋转的情况,需要通过旋转掩码图片得到正确的掩码形状 for (int i = 0; i < 4; ++i) { string file = string.Format("sds-{0}", maskmode); this.mask.sprite = Resources.Load <Sprite>(file); if (this.mask.sprite) { this.mask.transform.Rotate(Vector3.forward * 90 * i); this.jigimg.transform.Rotate(-Vector3.forward * 90 * i); break; } else { maskmode = JigtileMaskMode.deform(maskmode); } } Debug.Assert(this.mask.sprite, string.Format("找不到sds-{0}", maskmode)); }