public void LineAddWithMapBlockInfo(MapBlockInfo start, MapBlockInfo end) { bool isExist = false; //验重 lineList.ForEach(line => { if (line.start == start && line.end == end) { isExist = true; } else if (line.start == start && line.end == end) { isExist = true; } }); if (!isExist) { Line newLine = new Line { start = start, end = end }; lineList.Add(newLine); } }
public void PlayerEnterBlock(BlockController bc) { MapBlockInfo mbi = bc.mbi; List <Line> showLines = new List <Line>(); lineList.ForEach(line => { if (line.start == mbi || line.end == mbi) { showLines.Add(line); } }); channelLines.ForEach(cline => { foreach (Line line in showLines) { if (cline.line.start == line.start && cline.line.end == line.end) { //线段显示 cline.ChangeColor(ColorAngleChange(cline.CurrColor(), 1.0f)); } } }); //block显示 foreach (Line line in showLines) { //中心位置会重复设置 line.start.ChangeColor(ColorAngleChange(line.start.CurrColor(), 1.0f)); line.end.ChangeColor(ColorAngleChange(line.end.CurrColor(), 1.0f)); } }
public MapBlockInfo SpwanMapBlockInfo(int x, int y, MapBlockType type) { GameObject gb = (GameObject)Instantiate(Resources.Load("Block/MapBlock"), transform.position, Quaternion.identity); MapBlockInfo mapInfo = gb.GetComponent <MapBlockInfo>(); mapInfo.indexInfo.x = x; mapInfo.indexInfo.y = y; mapInfo.blockType = type; mapInfo.transform.position = new Vector2(mapInfo.indexInfo.x, mapInfo.indexInfo.y); mapInfo.transform.parent = mapLocation.transform; return(mapInfo); }
//判断mbi的方向 public void CalBlockDirection(MapBlockInfo mbi, BlockController bc) { foreach (Line line in lineList) { if (line.start == mbi) { if (line.start.indexInfo.x > line.end.indexInfo.x) { bc.directions.Add(BlockDireciton.Left); continue; } if (line.start.indexInfo.x < line.end.indexInfo.x) { bc.directions.Add(BlockDireciton.Right); continue; } if (line.start.indexInfo.y > line.end.indexInfo.y) { bc.directions.Add(BlockDireciton.Bottom); continue; } if (line.start.indexInfo.y < line.end.indexInfo.y) { bc.directions.Add(BlockDireciton.Top); continue; } } if (line.end == mbi) { if (line.start.indexInfo.x > line.end.indexInfo.x) { bc.directions.Add(BlockDireciton.Right); continue; } if (line.start.indexInfo.x < line.end.indexInfo.x) { bc.directions.Add(BlockDireciton.Left); continue; } if (line.start.indexInfo.y > line.end.indexInfo.y) { bc.directions.Add(BlockDireciton.Top); continue; } if (line.start.indexInfo.y < line.end.indexInfo.y) { bc.directions.Add(BlockDireciton.Bottom); continue; } } } }
public void AddShopAndEvent() { Location randomLocation = canAddNodeLocationList[Random.Range(0, canAddNodeLocationList.Count - 1)]; MapBlockInfo mapInfoShop = SpwanMapBlockInfo(randomLocation.x, randomLocation.y, MapBlockType.shopType); nodeList.Add(mapInfoShop); canAddNodeLocationList.Remove(randomLocation); randomLocation = canAddNodeLocationList[Random.Range(0, canAddNodeLocationList.Count - 1)]; MapBlockInfo mapInfoEvent = SpwanMapBlockInfo(randomLocation.x, randomLocation.y, MapBlockType.eventType); nodeList.Add(mapInfoEvent); canAddNodeLocationList.Remove(randomLocation); }
private void ConfigMap() { MapBlockInfo mapInfo = SpwanMapBlockInfo(0, 0, MapBlockType.startType); nodeList.Add(mapInfo); while (nodeList.Count < endStep) { AddNext(nodeList[nodeList.Count - 1]); } if (nodeList.Count == endStep) { ConfigKeyNodeLink(); if (isBossMap) { nodeList[nodeList.Count - 1].blockType = MapBlockType.BossType; } else { nodeList[nodeList.Count - 1].blockType = MapBlockType.endType; } } FindLocationsCanAddLocations(); AddShopAndEvent(); if (nodeList.Count < maxCount) { Location randomLocation = canAddNodeLocationList[Random.Range(0, canAddNodeLocationList.Count - 1)]; MapBlockInfo mapInfoShop = SpwanMapBlockInfo(randomLocation.x, randomLocation.y, MapBlockType.battleType); nodeList.Add(mapInfoShop); canAddNodeLocationList.Remove(randomLocation); } ConfigElseNodeLink(); ConfigMiniMapColor(); ConfigBlock(); ConfigChannelComponent(); ConfigChannel(); }
public void AddNext(MapBlockInfo _mapBlockInfo) { bool IsCalculate = true; while (IsCalculate) { int tempX = (int)_mapBlockInfo.indexInfo.x; int tempY = (int)_mapBlockInfo.indexInfo.y; int DirectionIndex = Random.Range(0, 4); switch (DirectionIndex) { case (int)DirectionType.up: tempY += 1; break; case (int)DirectionType.right: tempX += 1; break; case (int)DirectionType.down: tempY -= 1; break; case (int)DirectionType.left: tempX -= 1; break; } if (CheckNewNodeValid(tempX, tempY) && !CheckNewNodeExist(tempX, tempY)) { IsCalculate = false; MapBlockInfo mapInfo = SpwanMapBlockInfo(tempX, tempY, MapBlockType.battleType); mapInfo.parent = _mapBlockInfo; nodeList.Add(mapInfo); } } //colorful }