void OnClickDirect(BaseTile grid) { _clickMark.gameObject.SetActive(false); ModuleManager.getInstance.GetModule <BattlefieldInputModule>().Pause(true); ModuleManager.getInstance.GetModule <BattlefieldInputModule>().onClickedTile -= OnClickDirect; MonoBehaviourHelper.StartCoroutine(GuideRunning(1, "你已经成功的移动了,注意移动会消耗AP,如果AP全部消耗任务将会失败,继续移动吧", OnOpenClickPanel, OnStepFinish)); }
public void CreateMissileItem() { if (missile_item == null) { missile_item = GameObject.Instantiate(Resources.Load("Prefabs/Boss/" + missile_item_name)) as GameObject; } var m = ModuleManager.getInstance.GetModule <BattlefieldModule>(); saved_tile = m.Field.GetRandomTile("Bunker.Game.NormalTile", true); saved_tile = m.Field.GetTile(1, 0); missile_item.transform.SetParent(saved_tile.Node.transform); missile_item.transform.localPosition = Vector3.zero; missile_item.GetComponent <SpriteRenderer>().sortingOrder = saved_tile.GetSortingOrder() + 1; missile_item.SetActive(true); //使用名字后缀描述的方法···· missile_item.name = missile_item.name + Constant.CAN_WALK_SUFFIX; }
public void EliminationGrids(List <BaseTile> elimiGrids) { foreach (var g in elimiGrids) { Debug.Log("EliminationGrid: " + g.ParentGrid.ColID + "," + g.ParentGrid.RowID); BaseTile newtile = g.Elimination(); var grid = g.ParentGrid; g.OnEliminationed(); RemoveTile(grid); //var newg = GridLoader.CreateTile("NormalTile", grid); SetTile(grid, newtile); } OnElimination?.Invoke(elimiGrids.Count); }
public override void OnStartTurn() { base.OnStartTurn(); //锁住场景操作 _bim.locked = true; //将此关卡载入时的任务系统完成后的回调断开 MissionManager.getInstance.OnMissionValueHandler = null; // switch (state) { case ENTRANCE: //特效 { _bui.ShowBossWarningVFX(BOSSWARNING_TIME, GotoNextState); remainTalk = bossTalk_num; break; } case STAGE_1: //前期唠嗑 break; case STAGE_2: //战斗阶段,在boss回合开始前,进行对小鬼的补充 { int n = _rmm.GetRobotCount(ROBOT_TYPE_NAME); if (n < MAX_GHOST_COUNT) { for (int i = MAX_GHOST_COUNT - n; i > 0; i--) { var t = _bfm.Field.GetRandomTile("Bunker.Game.NormalTile", true); if (t != null) { var robot = _rmm.CreateRobot(ROBOT_TYPE_NAME); robot.SetToGird(t.ParentGrid); } } } // if (curRound == LOCATION_ROUND) { //随机找到特殊格子,及其位置,播放移动动画 Vector2Int rnd = new Vector2Int(UnityEngine.Random.Range(1, 8), 9); dest_tile = _bfm.Field.GetTile(rnd.x, rnd.y); var dest_pos = new Vector3(dest_tile.Node.transform.position.x, boss_body.transform.position.y, boss_body.transform.position.z); boss_body.transform.DOMove(dest_pos, 1.2f).OnComplete(CB_OnFinishMovement); } else if (curRound == CHARGE_ROUND) { //播放枪口处的充能动画 或者是充能特效 boss_body.OnCharge(); CB_OnFinishMovement(); } else if (curRound == LAZER_ROUND) { const float lazer_speed = 30f; const float bias = .5f; //释放lazer float dist_1 = 20; float dist_2 = 20; float dist_1_time = 0; float dist_2_time = 0; //两个起始点,进行向前扫描 var t_1 = _bfm.Field.GetTile(dest_tile.ParentGrid.ColID + 1, dest_tile.ParentGrid.RowID); var t_2 = _bfm.Field.GetTile(dest_tile.ParentGrid.ColID - 1, dest_tile.ParentGrid.RowID); if (t_1 != null) { int grid_x = dest_tile.ParentGrid.ColID + 1; int grid_y = 9; //此处应该是mapsize for (int y = grid_y; y >= 0; y--) { if (CanBlockLazer(grid_x, y)) { var t = _bfm.Field.GetTile(grid_x, y); dist_1 = Mathf.Abs(t.Node.transform.position.y - boss_body.Emiter_1.position.y) + bias; dest_grid_1.Set(grid_x, y); CDebug.Log(string.Format("创建激光[1],距离{0},时间{1} | GRID:{2},{3}", dist_1, dist_1_time, grid_x, y), Constant.COLOR_NAME.ORANGE); break; } } // dist_1_time = dist_1 / lazer_speed; Sequence mySequence = DOTween.Sequence(); mySequence.Append(DOTween.To(CB_Lazer_1_HeightUpdate, 1.5f, dist_1, dist_1_time)) .AppendInterval(.5f).AppendCallback(CB_Lazer_Shoot_Finish); } if (t_2 != null) { int grid_x = dest_tile.ParentGrid.ColID - 1; int grid_y = 9; //此处应该是mapsize for (int y = grid_y; y >= 0; y--) { if (CanBlockLazer(grid_x, y)) { var t = _bfm.Field.GetTile(grid_x, y); dist_2 = Mathf.Abs(t.Node.transform.position.y - boss_body.Emiter_2.position.y) + bias; dest_grid_2.Set(grid_x, y); CDebug.Log(string.Format("创建激光[1],距离{0},时间{1} | GRID:{2},{3}", dist_2, dist_2_time, grid_x, y), Constant.COLOR_NAME.ORANGE); break; } } // dist_2_time = dist_2 / lazer_speed; Sequence mySequence = DOTween.Sequence(); mySequence.Append(DOTween.To(CB_Lazer_2_HeightUpdate, 1.5f, dist_2, dist_2_time)) .AppendInterval(.5f).AppendCallback(CB_Lazer_Shoot_Finish); } // boss_body.OnShoot(); } } break; case STAGE_3: break; } }
public static bool LoadGrid(string areaName, string levelName, out Grid[] rows, out Grid[] cols, out Grid[,] grids) { //------------------------ //------------------------ if (_rootNode == null) { _rootNode = new GameObject("TileRoot").transform; } var map = Resources.Load <MapData>(string.Format("{0}/{1}/{2}", "Map", areaName, levelName)); if (map == null) { //这里不应该找不到,如果找不到,应该是通关了!! rows = null; cols = null; grids = null; Debug.Log(string.Format("Map {0}/{1} not found", areaName, levelName)); return(false); } var rmax = map.row; var cmax = map.column; var offsetr = Constant.MaxRow - rmax; var offsetc = Constant.MaxCol - cmax; GridField.zeroOffset = new Vector3( Constant.TileSize.x * offsetc * 0.5f, -Constant.TileSize.y * offsetr * 0.5f, 0 ); //这里需要 //1 保存各个行和各个列的首节点 //2 对各个节点的上下左右节点进行赋值,通过缓存上一行的节点和同行的前一个节点来实现 //如果出现了rows[x] == null的情况,说明这一行都没有数据 cols同理 rows = new Grid[map.row]; cols = new Grid[map.column]; grids = new Grid[map.column, map.row]; //缓存读入的在同一行上的上一个块 //cache current Grid lastTileInRow = null; Grid firstTileInRow = null; //缓存读入的上一行上的同一列上的上一个块 //cache1 cache2 cache3 //1 2 3 Grid[] lastRowTileInCol = new Grid[map.column]; Grid[] firstRowTileInCol = new Grid[map.column]; for (int i = 0; i < map.row; ++i) { lastTileInRow = null;//换行了,清空这个 firstTileInRow = null; for (int j = 0; j < map.column; ++j) { var tiledata = map.data[i * map.row + j]; var additionalData = map.additionaldata[i * map.row + j]; var resname = Constant.Tiles[tiledata]; var grid = new Grid(j, i); grid.AttachTile = null; grid.Up = null; grid.Down = null; grid.Left = null; grid.Right = null; BaseTile tile = null; //是否为空墙 if (resname != "Empty") { tile = CreateTile(resname, grid, additionalData); grid.AttachTile = tile; tile.ParentGrid = grid; } //行列的开头节点 if (i == 0 && grid.AttachTile != null) { cols[j] = grid; } if (j == 0 && grid.AttachTile != null) { rows[i] = grid; } var lastTileInCol = lastRowTileInCol[j]; //四周节点 //上下 if (grid.AttachTile != null) { //如果之前cols[j]为空,说明第一行的第j列是空的,那么这一列的第一个节点就要向下顺延 if (cols[j] == null) { cols[j] = grid; } if (lastTileInCol == null) { grid.Up = null; grid.Down = null; firstRowTileInCol[j] = grid; if (cols[j] == null) { cols[j] = grid; } } else { grid.Up = lastTileInCol; lastTileInCol.Down = grid; } lastRowTileInCol[j] = grid; } //左右 if (grid.AttachTile != null) { //if (rows[i] == null) //{ // rows[i] = grid; //} if (lastTileInRow == null) { firstTileInRow = grid; grid.Left = null; grid.Right = null; if (rows[i] == null) { rows[i] = grid; } } else { grid.Left = lastTileInRow; lastTileInRow.Right = grid; } lastTileInRow = grid; } grids[j, i] = grid; } if (lastTileInRow != null && firstTileInRow != null) { lastTileInRow.Right = firstTileInRow; firstTileInRow.Left = lastTileInRow; } } for (int i = 0; i < lastRowTileInCol.Length; ++i) { var first = firstRowTileInCol[i]; var last = lastRowTileInCol[i]; if (first != null && last != null) { first.Up = last; last.Down = first; } } for (int i = 0; i < map.row; ++i) { for (int j = 0; j < map.column; ++j) { if (grids[j, i] != null && grids[j, i].AttachTile != null) { grids[j, i].AttachTile.OnStart(); } } } //create mask //var mask = GameObject.Instantiate( Resources.Load("Prefabs/Tiles/TileMask")) as GameObject; //if(mask != null) //{ // var sm = mask.GetComponent<SpriteMask>(); // if(sm != null) // { // sm.transform.parent = _rootNode; // sm.gameObject.transform.localScale = new Vector3( // (float)map.column, // (float)map.row + 1, // 0.0f // ); // sm.transform.position = GridField.ZeroPos + new Vector3( // Constant.TileSize.x * (map.column * 0.5f) - Constant.TileSize.x * 0.5f, // -Constant.TileSize.y * (map.row * 0.5f) + Constant.TileSize.y * 1.0f, // 0 // ); // } //} //Create Mission Data var md = map.mission; MissionManager.getInstance.LoadMissionData(md); //Create UI Mission Item foreach (var pair in md.Missions) { var item = ModuleManager.getInstance.GetModule <BattleUIModule>().CreateMissionItem( MissionDataHelper.MCT_2_SpriteNames(pair.Key), pair.Value); MissionManager.getInstance.RegisterMissionItemPos(pair.Key, item.transform as RectTransform); MissionManager.getInstance.RegisterMissionChangeDelegate(pair.Key, item.OnChange); MissionManager.getInstance.InvokeMissionDelegate(pair.Key); } foreach (var pair in md.ProtectMissions) { var item = ModuleManager.getInstance.GetModule <BattleUIModule>().CreateMissionItem( MissionDataHelper.MCT_2_SpriteNames(pair.Key), pair.Value); MissionManager.getInstance.RegisterMissionItemPos(pair.Key, item.transform as RectTransform); MissionManager.getInstance.RegisterMissionChangeDelegate(pair.Key, item.OnChange); MissionManager.getInstance.InvokeMissionDelegate(pair.Key); } MissionManager.getInstance.RegisterStepChanageDelegate( //ModuleManager.getInstance.GetModule<BattleUIModule>().GetBattleUIPanel().SetProgressNum); ModuleManager.getInstance.GetModule <BattleUIModule>().GetBattleUIPanel().SetAPNum); //UI level 的设置 ModuleManager.getInstance.GetModule <BattleUIModule>().GetBattleUIPanel().SetLevelText( ModuleManager.getInstance.GetModule <BattlefieldModule>().LevelNum ); //这张地图是否有boss ModuleManager.getInstance.GetModule <BattleTurnsModule>().InsertTurn(map.boss_type, true); //清理一下item工场 BattleItemFactory.getInstance.Reset(); //add by wwh 2021-4-19 //将有效的list传入robotManager ModuleManager.getInstance.GetModule <RobotManagerModule>().UpdateEnemyTypeList(map.enemy_types); ModuleManager.getInstance.GetModule <RobotManagerModule>().UpdateFriendlyTypeList(map.friendly_types); //add by wwh 2021-5-12 读取主角的组件,然后动态生成出主角 if (map.starredComponents != null) { ModuleManager.getInstance.GetModule <StarredModule>().CreateStarringRole(map.starredComponents); } return(true); }
public void CheckElimination(BaseTile tile, ref List <BaseTile> list, CheckEliminationType type = CheckEliminationType.Null) { if (tile != null) { var gridSelf = tile.ParentGrid; var gridUp = gridSelf.Up; var gridDown = gridSelf.Down; var gridLeft = gridSelf.Left; var gridRight = gridSelf.Right; bool bUpOK = false; bool bDownOK = false; bool bLeftOK = false; bool bRightOK = false; bool bHasUp = false; bool bHasDown = false; bool bHasLeft = false; bool bHasRight = false; foreach (var t in list) { if (t.ParentGrid == gridUp) { bHasUp = true; } if (t.ParentGrid == gridDown) { bHasDown = true; } if (t.ParentGrid == gridLeft) { bHasLeft = true; } if (t.ParentGrid == gridRight) { bHasRight = true; } } if (gridUp.AttachTile != null) { if (Mathf.Abs(gridUp.RowID - gridSelf.RowID) == 1) { if (gridUp.AttachTile.CanElimination() && tile.CanEliminationByOther(gridUp.AttachTile.GetGridType(), 0) && !bHasUp) { bUpOK = true; } } } if (gridDown.AttachTile != null) { if (Mathf.Abs(gridDown.RowID - gridSelf.RowID) == 1) { if (gridDown.AttachTile.CanElimination() && tile.CanEliminationByOther(gridDown.AttachTile.GetGridType(), 1) && !bHasDown) { bDownOK = true; } } } if (gridLeft.AttachTile != null) { if (Mathf.Abs(gridLeft.ColID - gridSelf.ColID) == 1) { if (gridLeft.AttachTile.CanElimination() && tile.CanEliminationByOther(gridLeft.AttachTile.GetGridType(), 2) && !bHasLeft) { bLeftOK = true; } } } if (gridRight.AttachTile != null) { if (Mathf.Abs(gridRight.ColID - gridSelf.ColID) == 1) { if (gridRight.AttachTile.CanElimination() && tile.CanEliminationByOther(gridRight.AttachTile.GetGridType(), 3) && !bHasRight) { bRightOK = true; } } } if (type == CheckEliminationType.Null) { if (bDownOK || bUpOK) { if (bUpOK) { list.Add(gridUp.AttachTile); CheckElimination(gridUp.AttachTile, ref list, CheckEliminationType.Vertical_U); } if (bDownOK) { list.Add(gridDown.AttachTile); CheckElimination(gridDown.AttachTile, ref list, CheckEliminationType.Vertical_D); } } else if (bLeftOK || bRightOK) { if (bLeftOK) { Debug.Log("bLeftOK - first: " + gridLeft.ColID + "," + gridLeft.RowID); list.Add(gridLeft.AttachTile); CheckElimination(gridLeft.AttachTile, ref list, CheckEliminationType.Horizontal_L); } if (bRightOK) { Debug.Log("bRightOK - first: " + gridRight.ColID + "," + gridRight.RowID); list.Add(gridRight.AttachTile); CheckElimination(gridRight.AttachTile, ref list, CheckEliminationType.Horizontal_R); } } } else if (type == CheckEliminationType.Horizontal_L) { Debug.Log("bLeftOK: " + gridLeft.ColID + "," + gridLeft.RowID); if (bLeftOK) { list.Add(gridLeft.AttachTile); CheckElimination(gridLeft.AttachTile, ref list, CheckEliminationType.Horizontal_L); } } else if (type == CheckEliminationType.Horizontal_R) { Debug.Log("bRightOK: " + gridRight.ColID + "," + gridRight.RowID); if (bRightOK) { list.Add(gridRight.AttachTile); CheckElimination(gridRight.AttachTile, ref list, CheckEliminationType.Horizontal_R); } } else if (type == CheckEliminationType.Vertical_U) { Debug.Log("bUpOK: " + gridUp.ColID + "," + gridUp.RowID); if (bUpOK) { list.Add(gridUp.AttachTile); CheckElimination(gridUp.AttachTile, ref list, CheckEliminationType.Vertical_U); } } else if (type == CheckEliminationType.Vertical_D) { Debug.Log("bDownOK: " + gridDown.ColID + "," + gridDown.RowID); if (bDownOK) { list.Add(gridDown.AttachTile); CheckElimination(gridDown.AttachTile, ref list, CheckEliminationType.Vertical_D); } } } }
public static void SetTile(Grid grid, BaseTile tile) { //SetTile(grid.ColID, grid.RowID, tile); grid.AttachTile = tile; tile.ParentGrid = grid; }