private void NextLevel() { currentLevel += 1; Dictionary <int, SquareLevelModel> levels = levelModels[currentSide]; //if (!levels.ContainsKey(currentLevel)) //{ // return; //} SquareLevelModel levelModel = levels[currentLevel]; Messenger <SquareLevelModel> .Broadcast(MessageDefines.OnStartNewLevel, levelModel); }
public void BuildLevelFromFile2(string fileName) { //Application.targetFrameRate = 60; TextAsset text = Resources.Load <TextAsset>(fileName); string[] allString = text.text.Split(Environment.NewLine.ToCharArray()); foreach (string str in allString) { if (string.IsNullOrEmpty(str)) { continue; } string[] totalStr = str.Split(';'); string[] str1 = totalStr[0].Split(','); int pair = int.Parse(str1[3]); List <List <int> > dataList = new List <List <int> >(); for (int i = 1; i <= pair; i++) { string[] tempStr = totalStr[i].Split(','); List <int> list = new List <int>(); for (int j = 0; j < tempStr.Length; j++) { list.Add(int.Parse(tempStr[j])); } dataList.Add(list); } SquareLevelModel levelModel = new SquareLevelModel() { level = int.Parse(str1[2]), side = int.Parse(str1[0]), linePair = pair, data = dataList, }; if (!levelModels.ContainsKey(levelModel.side)) { levelModels.Add(levelModel.side, new Dictionary <int, SquareLevelModel>()); } levelModels[levelModel.side].Add(levelModel.level, levelModel); } }
public void BuildLevelFromFile(string fileName) { if (!File.Exists(fileName)) { Debug.Log(fileName + " not exist!"); return; } FileStream fileStream = File.OpenRead(fileName); foreach (string str in File.ReadAllLines(fileName)) { string[] totalStr = str.Split(';'); string[] str1 = totalStr[0].Split(','); int pair = int.Parse(str1[3]); List <List <int> > dataList = new List <List <int> >(); for (int i = 1; i <= pair; i++) { string[] tempStr = totalStr[i].Split(','); List <int> list = new List <int>(); for (int j = 0; j < tempStr.Length; j++) { list.Add(int.Parse(tempStr[j])); } dataList.Add(list); } SquareLevelModel levelModel = new SquareLevelModel() { level = int.Parse(str1[2]), side = int.Parse(str1[0]), linePair = pair, data = dataList, }; if (!levelModels.ContainsKey(levelModel.side)) { levelModels.Add(levelModel.side, new Dictionary <int, SquareLevelModel>()); } levelModels[levelModel.side].Add(levelModel.level, levelModel); } }
public override void InitBlock(SquareLevelModel levelModel) { blockDictionary.Clear(); backPaths.Clear(); targetImage.Clear(); targetPair.Clear(); paths.Clear(); sideNum = levelModel.side; RectTransform rectTransform = gameObject.GetComponent <RectTransform>(); float blockWidth = (rectTransform.sizeDelta.x) / levelModel.side; float blockHeight = (rectTransform.sizeDelta.y) / levelModel.side;//图片有底边 不是正方形1025*1045 float widthScale = blockWidth / block.rectTransform.sizeDelta.x; float heightScale = blockHeight / block.rectTransform.sizeDelta.y; Vector2 origin = new Vector2(-rectTransform.sizeDelta.x * 0.5f + blockWidth * 0.5f, rectTransform.sizeDelta.y * 0.5f - blockHeight * 0.5f); for (int i = 0; i < levelModel.data.Count; i++) { List <int> points = levelModel.data[i]; int length = points.Count; if (length < 2) { continue; } int start = points[0]; int last = points[length - 1]; targetPair.Add(start, last); targetPair.Add(last, start); targetImage.Add(start, i); targetImage.Add(last, i); } int childCount = rectTransform.childCount; int needCount = levelModel.side * levelModel.side; if (childCount < needCount) { for (int i = 0; i < (needCount - childCount); i++) { if (blockPoolDisable.Count > 0) { GameObject obj = blockPoolDisable.Dequeue(); obj.SetActive(true); blockPoolEnable.Enqueue(obj); } else { GameObject obj = GameObject.Instantiate <GameObject>(block.gameObject, transform); obj.SetActive(true); blockPoolEnable.Enqueue(obj); } } } else if (childCount > needCount) { List <GameObject> deleteList = new List <GameObject>(); for (int i = 0; i < (needCount - childCount); i++) { GameObject obj = blockPoolDisable.Dequeue(); obj.SetActive(false); blockPoolDisable.Enqueue(obj); } } GameObject[] objArray = blockPoolEnable.ToArray(); for (int i = 0; i < needCount; i++) { int h = i % levelModel.side; int v = i / levelModel.side; GameObject obj = objArray[i]; obj.name = i.ToString(); RectTransform rect = obj.GetComponent <RectTransform>(); BaseBlock blockComponent = obj.GetComponent <BaseBlock>(); Vector3 localScale = new Vector3(widthScale, heightScale, 1); Vector2 localPosition = new Vector2(origin.x + h * blockWidth, origin.y - v * blockHeight); if (!targetImage.ContainsKey(i)) { blockComponent.Init(i, localPosition, localScale, -1, GetAroundBlock(i, sideNum)); } else { blockComponent.Init(i, localPosition, localScale, targetImage[i], GetAroundBlock(i, sideNum)); } blockDictionary.Add(i, blockComponent); } scoreData.totalStep = levelModel.linePair; scoreData.totalBlock = sideNum * sideNum; scoreData.best = levelModel.linePair; scoreData.moves = 0; scoreData.paint = 0; Messenger <SquareLevelScoreData> .Broadcast(MessageDefines.OnScoreChange, scoreData); Messenger <InputState> .RemoveAllListener(MessageDefines.OnPostSquareInput); Messenger <InputState, int> .AddListener(MessageDefines.OnPostSquareInput, OnPostSquareInput); paths.Clear(); }
public abstract void InitBlock(SquareLevelModel levelModel);