//设置房间的位置及大小(以当前所有格子中左上角一个为准) private void setRoomPositionAndSize() { var miniX = int.MaxValue; var miniY = int.MaxValue; var maxX = -1; var maxY = -1; for (int i = 0; i < BindTileItems.Count; i++) { if (BindTileItems[i].IndexX < miniX) { miniX = BindTileItems[i].IndexX; } if (BindTileItems[i].IndexY < miniY) { miniY = BindTileItems[i].IndexY; } if (BindTileItems[i].IndexX > maxX) { maxX = BindTileItems[i].IndexX; } if (BindTileItems[i].IndexY > maxY) { maxY = BindTileItems[i].IndexY; } } MyLogger.Debug("miniX:" + miniX + " miniY:" + miniY); MyLogger.Debug("maxX:" + maxX + " maxY:" + maxY); transform.localPosition = TilesManager.GetTileItem(miniX, miniY).Position; Image.rectTransform.SetPivot(new Vector2(0, 1)); Image.rectTransform.sizeDelta = new Vector2(64 * (maxX - miniX + 1), 64 * (maxY - miniY + 1)); //todo:根据房间大小及方向设置房间名称大小及方向 }
//设置周边墙体形状 private void setAroundWallIamge() { mUpTile = TilesManager.GetTileItem(BindTileItems[0].IndexX, BindTileItems[0].IndexY - 1); mDownTile = TilesManager.GetTileItem(BindTileItems[0].IndexX, BindTileItems[0].IndexY + 1); mLeftTile = TilesManager.GetTileItem(BindTileItems[0].IndexX - 1, BindTileItems[0].IndexY); mRightTile = TilesManager.GetTileItem(BindTileItems[0].IndexX + 1, BindTileItems[0].IndexY); //重新设置周边墙体形状 if (mUpTile != null && mUpTile.HaveWall) { mTop = true; mUpTile.WallItem.SetWallImage(false); } if (mDownTile != null && mDownTile.HaveWall) { mBottom = true; mDownTile.WallItem.SetWallImage(false); } if (mLeftTile != null && mLeftTile.HaveWall) { mLeft = true; mLeftTile.WallItem.SetWallImage(false); } if (mRightTile != null && mRightTile.HaveWall) { mRight = true; mRightTile.WallItem.SetWallImage(false); } }
private List <TileItem> getPointDownTileItem() { mPreSelectTileItems.Clear(); var tileIndexX = (int)((mPointDownPosition.x + mMapWidth / 2) / mTileSize); var tileIndexY = (int)((mMapHeight / 2 - mPointDownPosition.y) / mTileSize); TileItem tileItem = TilesManager.GetTileItem(tileIndexX, tileIndexY);; if (tileItem != null) { mPreSelectTileItems.Add(tileItem); } return(mPreSelectTileItems); }
/// <summary> /// 地图初始化 /// </summary> /// <returns></returns> public IEnumerator Init() { //初始化地图 //yield return new WaitForEndOfFrame(); var tileRowNum = mMapHeight / mTileSize; var tileColumnNum = mMapWidth / mTileSize; var time = new Stopwatch(); time.Start(); for (var i = 0; i < tileColumnNum; i++) { for (var j = 0; j < tileRowNum; j++) { //var tile = Utils.CreateGameObject(mTileItem, mEditorLayer, new Vector3(mTileSize * i, -mTileSize * j, 0)).GetComponent<TileItem>(); var go = Instantiate(mTileItem); go.transform.SetParent(LandformLayer); go.transform.localScale = Vector3.one; go.SetLayer(LandformLayer.gameObject.layer, true); go.GetComponent <RectTransform>().anchoredPosition3D = new Vector3(mTileSize * i, -mTileSize * j, 0); var tileItem = go.AddComponent <TileItem>(); StartCoroutine(tileItem.SetData(i, j)); TilesManager.TileItemDicts.Add(new Vector2(i, j), tileItem); } } Debug.Log("time:" + (time.ElapsedMilliseconds)); //初始化工人 TileItem item = TilesManager.GetTileItem(75, 50); //mTileItemDicts.TryGetValue(new Vector2(75, 50), out item); WorkerManager.CreateWorker(RoleLayer, item); item = TilesManager.GetTileItem(76, 51); //mTileItemDicts.TryGetValue(new Vector2(76, 51), out item); WorkerManager.CreateWorker(RoleLayer, item); yield break; }
//获取鼠标移动过程中经过的格子 private List <TileItem> getMoveSelectTile(Vector2 position) { var tileIndexX = (int)((position.x + mMapWidth / 2) / mTileSize); var tileIndexY = (int)((mMapHeight / 2 - position.y) / mTileSize); if (mPreMoveIndexX == tileIndexX && mPreMoveIndexY == tileIndexY) { return(null); } mPreMoveIndexX = tileIndexX; mPreMoveIndexY = tileIndexY; PreSelectLayer.DestroyChildren(); var items = new List <TileItem>(); TileItem tileItem = TilesManager.GetTileItem(tileIndexX, tileIndexY);; if (tileItem != null) { items.Add(tileItem); } return(items); }
//根据当前区域矩形形状获取所覆盖的格子 private List <TileItem> getRectTileItems(Vector2 finalPoint) { //清除之前选中 PreSelectLayer.DestroyChildren(); mPreSelectTileItems.Clear(); TileItem tileItem; var tileIndexX = (int)((mPointDownPosition.x + mMapWidth / 2) / mTileSize); var tileIndexY = (int)((mMapHeight / 2 - mPointDownPosition.y) / mTileSize); var tileFinalIndexX = (int)((finalPoint.x + mMapWidth / 2) / mTileSize); var tileFinalIndexY = (int)((mMapHeight / 2 - finalPoint.y) / mTileSize); //Logger.Debug(tileIndexX + " " + tileIndexY); if (tileIndexX == tileFinalIndexX && tileIndexY == tileFinalIndexY) { tileItem = TilesManager.GetTileItem(tileIndexX, tileIndexY);; if (tileItem != null) { mPreSelectTileItems.Add(tileItem); } } else { if (tileIndexX <= tileFinalIndexX) { if (tileIndexY <= tileFinalIndexY) { //四象限方向 for (var i = tileIndexX; i <= tileFinalIndexX; i++) { for (var j = tileIndexY; j <= tileFinalIndexY; j++) { tileItem = TilesManager.GetTileItem(i, j);; if (tileItem != null) { if (!mPreSelectTileItems.Contains(tileItem)) { mPreSelectTileItems.Add(tileItem); } } } } } else { //一象限方向 for (var i = tileIndexX; i <= tileFinalIndexX; i++) { for (var j = tileIndexY; j >= tileFinalIndexY; j--) { tileItem = TilesManager.GetTileItem(i, j);; if (tileItem != null) { if (!mPreSelectTileItems.Contains(tileItem)) { mPreSelectTileItems.Add(tileItem); } } } } } } else { if (tileIndexY <= tileFinalIndexY) { //三象限方向 for (var i = tileIndexX; i >= tileFinalIndexX; i--) { for (var j = tileIndexY; j <= tileFinalIndexY; j++) { tileItem = TilesManager.GetTileItem(i, j);; if (tileItem != null) { if (!mPreSelectTileItems.Contains(tileItem)) { mPreSelectTileItems.Add(tileItem); } } } } } else { //二象限方向 for (var i = tileIndexX; i >= tileFinalIndexX; i--) { for (var j = tileIndexY; j >= tileFinalIndexY; j--) { tileItem = TilesManager.GetTileItem(i, j);; if (tileItem != null) { if (!mPreSelectTileItems.Contains(tileItem)) { mPreSelectTileItems.Add(tileItem); } } } } } } } if (mPreSelectTileItems.Count > 0) { return(mPreSelectTileItems); } return(null); }
/// <summary> /// 根据上下左右的墙体情况设置当前墙体的形状 /// </summary> /// <param name="isBySelf"></param> public void SetWallImage(bool isBySelf = true) { //非自我建造调用且在与建造状态不执行 if (isBySelf == false) { if (IsPreBuilding) { return; } mTop = false; mBottom = false; mLeft = false; mRight = false; mUpTile = TilesManager.GetTileItem(BindTileItems[0].IndexX, BindTileItems[0].IndexY - 1); mDownTile = TilesManager.GetTileItem(BindTileItems[0].IndexX, BindTileItems[0].IndexY + 1); mLeftTile = TilesManager.GetTileItem(BindTileItems[0].IndexX - 1, BindTileItems[0].IndexY); mRightTile = TilesManager.GetTileItem(BindTileItems[0].IndexX + 1, BindTileItems[0].IndexY); if (mUpTile != null && mUpTile.HaveWall) { mTop = true; } if (mDownTile != null && mDownTile.HaveWall) { mBottom = true; } if (mLeftTile != null && mLeftTile.HaveWall) { mLeft = true; } if (mRightTile != null && mRightTile.HaveWall) { mRight = true; } } var imageName = "wall-one"; WallRotation = 0; if (mTop && mBottom && mRight && mLeft) { //四面都有 imageName = "wall-four"; } else if (mTop && mBottom && mRight && !mLeft) { //上、下、右三面 imageName = "wall-three"; } else if (mTop && mBottom && !mRight && mLeft) { //上、下、左三面 WallRotation = 180; imageName = "wall-three"; } else if (mTop && !mBottom && mRight && mLeft) { //上、左、右三面 WallRotation = 90; imageName = "wall-three"; } else if (!mTop && mBottom && mRight && mLeft) { //下、左、右三面 WallRotation = 270; imageName = "wall-three"; } else if (!mTop && mBottom && mRight && !mLeft) { //下、右两面 WallRotation = 270; imageName = "wall-two"; } else if (!mTop && mBottom && !mRight && mLeft) { //下、左两面 WallRotation = 180; imageName = "wall-two"; } else if (mTop && !mBottom && !mRight && mLeft) { //上、左两面 WallRotation = 90; imageName = "wall-two"; } else if (mTop && !mBottom && mRight && !mLeft) { //上、右两面 imageName = "wall-two"; } else if (mTop && mBottom && !mRight && !mLeft) { //上、下两面 imageName = "wall-one"; } else if (mTop && !mBottom && !mRight && !mLeft) { //上一面 imageName = "wall-one"; } else if (!mTop && mBottom && !mRight && !mLeft) { //下一面 imageName = "wall-one"; } else if (!mTop && !mBottom && mRight && mLeft) { //左、右两面 WallRotation = 90; imageName = "wall-one"; } else if (!mTop && !mBottom && !mRight && mLeft) { //左一面 WallRotation = 90; imageName = "wall-one"; } else if (!mTop && !mBottom && mRight && !mLeft) { //右一面 WallRotation = 90; imageName = "wall-one"; } else if (!mTop && !mBottom && !mRight && !mLeft) { //上下左右都没有 imageName = "wall-one"; } IsCanBuildDoor = false; if (imageName == "wall-one") { IsCanBuildDoor = true; } Image.sprite = Resources.Load <SpriteRenderer>("Sprites/BuildingMaterials/" + imageName).sprite; Image.rectTransform.localEulerAngles = new Vector3(0, 0, WallRotation); }