//判断周围上下左右的可移动地砖 public List <ItemBrick> JudgeAroundBrick(ItemBrick itemBrick) { List <ItemBrick> itemBricks = new List <ItemBrick>(); itemBrick.isTag = true; Vector2[] vector2s = { new Vector2(1, 0), new Vector2(-1, 0), new Vector2(0, 1), new Vector2(0, -1) }; for (int j = 0; j < 4; j++) { for (int i = 0; i < brickArray_ItemBrick.Count; i++) { if (brickArray_ItemBrick[i].isTag == true) { continue; } if (brickArray_ItemBrick[i].x == itemBrick.x + vector2s[j].x && brickArray_ItemBrick[i].y == itemBrick.y + vector2s[j].y) { brickArray_ItemBrick[i].isTag = true; if (((brickArray_ItemBrick[i].brickType != BrickType.TheWater && brickArray_ItemBrick[i].brickType != BrickType.TheMountain && brickArray_ItemBrick[i].rolePlayer == null)) || (brickArray_ItemBrick[i].brickType == BrickType.TheWater && currentRole.roleStruct.roleProfessional == RoleProfessional.TheFishMen) || (brickArray_ItemBrick[i].brickType == BrickType.TheMountain && currentRole.roleStruct.roleProfessional == RoleProfessional.TheBirdMan)) { itemBricks.Add(brickArray_ItemBrick[i]); } } } } return(itemBricks); }
//移动方法 public void MoveTo(ItemBrick itemBrick, TweenCallback tweenCallback = null) { currentRole.thisItemBrick.rolePlayer = null; currentRole.thisItemBrick = itemBrick; itemBrick.rolePlayer = currentRole.gameObject; Vector2 vector2 = itemBrick.transform.position; Tweener tweeners = currentRole.transform.DOMove(vector2, 1f); tweeners.SetEase(Ease.OutQuad); //设置动画的运动曲线,可以选择很多种 tweeners.OnComplete(tweenCallback); //设置一个事件,就是动画播放完成后执行下一步,可以执行某一个函数。 DestroyBrickTip(true, false); currentRole.roleStruct.active -= 1; UiCanvasConsole.instance.ChangeRoleSelectTip(false); if (currentRole.roleType == RoleType.ThePlayerRole) { //刷新UI显示 UiPlayerRolePanel.instance.InterfaceThePlayerUI(currentRole); } }
//判断两个地砖的距离 public int JudgeDistances(ItemBrick initial, ItemBrick target) { int xDis, yDis; xDis = target.x - initial.x; yDis = target.y - initial.y; xDis = Mathf.Abs(xDis); yDis = Mathf.Abs(yDis); return(xDis + yDis); }
private IEnumerator Attack() { MapGameConsole.instance.AttackAtDistance(); yield return(new WaitForSeconds(1f)); Role role = JudgeRecently(PlayGameConsole.rolesEnemy[index]); ItemBrick itemBrick = MapGameConsole.instance.AI_JudgeMoveTarget(role); MapGameConsole.instance.AttackTo(itemBrick.rolePlayer, RoleType.TheEnemyRole); }
private IEnumerator Move() { MapGameConsole.instance.MoveAtDistance(); yield return(new WaitForSeconds(1f)); Role role = JudgeRecently(PlayGameConsole.rolesEnemy[index]); ItemBrick itemBrick = MapGameConsole.instance.AI_JudgeMoveTarget(role); MapGameConsole.instance.MoveTo(itemBrick, MoveEnd); }
//判断两个地砖的距离 A*算法 public int JudgeDistancesAStar(ItemBrick initial, ItemBrick target) { List <ItemBrick> itemBricks = new List <ItemBrick>(); for (int i = 0; i < 100; i++) { if (i == 0) { itemBricks = JudgeAroundBrick(initial); for (int j = 0; j < itemBricks.Count; j++) { itemBricks[j].dis = 1; } } else { List <ItemBrick> itemsTemp = new List <ItemBrick>(); for (int j = 0; j < itemBricks.Count; j++) { itemsTemp.AddRange(JudgeAroundBrick(itemBricks[j])); } for (int j = 0; j < itemsTemp.Count; j++) { itemsTemp[j].dis = i + 1; } itemBricks.AddRange(itemsTemp); } for (int j = 0; j < itemBricks.Count; j++) { if (itemBricks[j] == target) { return(itemBricks[j].dis); } } } for (int i = 0; i < brickArray_ItemBrick.Count; i++) { brickArray_ItemBrick[i].isTag = false; brickArray_ItemBrick[i].dis = 0; } return(0); }
//鼠标按下 private void UpdateMouseDown() { if (!EventSystem.current.IsPointerOverGameObject()) { if (Input.GetKeyDown(KeyCode.Mouse0))//左键 { RaycastHit2D hit = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.mousePosition), Vector2.zero); if (hit.collider != null) { if (hit.transform.parent.GetComponent <ItemBrick>()) { ItemBrick itemBrick = hit.transform.parent.GetComponent <ItemBrick>(); if (itemBrick.rolePlayer != null && itemBrick.brickTip == null)//点击角色 { MapGameConsole.instance.DestroyBrickTip(); switch (itemBrick.rolePlayer.GetComponent <Role>().roleType) { case RoleType.ThePlayerRole: OnThePlayerRole(itemBrick.rolePlayer); print("点击玩家角色:" + itemBrick.rolePlayer.name); break; case RoleType.TheEnemyRole: OnTheEnemyRole(itemBrick.rolePlayer); print("点击敌人角色:" + itemBrick.rolePlayer.name); break; default: break; } } else if (itemBrick.rolePlayer == null && itemBrick.brickTip == null)//点击地形 { print("点击:" + itemBrick.brickType); } else if (itemBrick.brickTip != null)//点击移动或者攻击 { switch (itemBrick.brickTip.GetComponent <ItemBrickTip>().brickTipType) { case BrickTipType.BrickTipMove: print("点击移动"); MapGameConsole.instance.MoveTo(itemBrick, PlayerMoveEnd); break; case BrickTipType.BrickTipAttack: if (itemBrick.rolePlayer != null && itemBrick.rolePlayer.GetComponent <Role>().roleType == RoleType.TheEnemyRole) { print("点击攻击"); MapGameConsole.instance.AttackTo(itemBrick.rolePlayer, RoleType.ThePlayerRole); } break; default: break; } } } } } else if (Input.GetKeyDown(KeyCode.Mouse1))//右键 { MapGameConsole.instance.DestroyBrickTip(); } } }
// Start is called before the first frame update void Start() { //初始化给当前地砖赋值 RaycastHit2D[] hit = Physics2D.RaycastAll(this.transform.position, Vector3.forward * 100); for (int i = 0; i < hit.Length; i++) { if (hit[i].collider != null && hit[i].collider.name == "BrickImage") { if (hit[i].collider.transform.parent.GetComponent <ItemBrick>()) { thisItemBrick = hit[i].collider.transform.parent.GetComponent <ItemBrick>(); thisItemBrick.rolePlayer = this.gameObject; } } } //初始化根据职业赋值相应职业脚本 switch (roleStruct.roleProfessional) { case RoleProfessional.TheFireWarrior: this.gameObject.AddComponent <RoleTheFireWarrior>().rolePlayer = this; break; case RoleProfessional.ThePrince: break; case RoleProfessional.TheFishMen: break; case RoleProfessional.TheBirdMan: break; case RoleProfessional.TheEnchanter: break; case RoleProfessional.TheMonks: break; case RoleProfessional.TheBruiser: break; case RoleProfessional.TheBigMan: break; case RoleProfessional.TheWindWarrior: this.gameObject.AddComponent <RoleTheWindWarrior>().rolePlayer = this; break; case RoleProfessional.TheWaterWarrior: this.gameObject.AddComponent <RoleTheWaterWarrior>().rolePlayer = this; break; default: break; } //初始化在注册在list中 if (roleType == RoleType.TheEnemyRole) { PlayGameConsole.rolesEnemy.Add(this); } else { PlayGameConsole.rolesPlayer.Add(this); } }