public static void Skill_Qiangbing03(Wujiang wujiang, Coordinates target) { Dictionary <Coordinates, Wujiang> wujiangExpeditions = BattleGameManager.GetInstance().GetWujiangData().GetWujiangExpeditions(); Wujiang targetWujiang = wujiangExpeditions[target]; // 1.伤害 targetWujiang.OnDamage(5000); // 2.移动 Coordinates c1 = wujiang.GetCoordinates(); Coordinates c2 = targetWujiang.GetCoordinates(); int dx = (c2.HexX - c1.HexX) * 2; int dy = (c2.HexY - c1.HexY) * 2; Coordinates myCoordinates = new Coordinates(); Coordinates otherCoordinates = new Coordinates(); myCoordinates.SetHexXY(c1.HexX + dx, c1.HexY + dy); otherCoordinates.SetHexXY(c2.HexX + dx, c2.HexY + dy); if (!Skills.CanMoveIn(myCoordinates)) { return; } else if (!Skills.CanMoveIn(otherCoordinates)) { targetWujiang.Move(myCoordinates); } else { targetWujiang.Move(otherCoordinates); } }
// 骑兵:2 public static void Skill_Qibing02(Wujiang wujiang, Coordinates target) { Dictionary <Coordinates, Wujiang> wujiangExpeditions = BattleGameManager.GetInstance().GetWujiangData().GetWujiangExpeditions(); Wujiang targetWujiang = wujiangExpeditions[target]; // 1.伤害 targetWujiang.OnDamage(3000); // 2.移动 Coordinates c1 = wujiang.GetCoordinates(); Coordinates c2 = targetWujiang.GetCoordinates(); int dx = (c2.HexX - c1.HexX); int dy = (c2.HexY - c1.HexY); Coordinates myCoordinates = new Coordinates(); myCoordinates.SetHexXY(c2.HexX + dx, c2.HexY + dy); if (!Skills.CanMoveIn(myCoordinates)) { if (targetWujiang.GetWujiangState() == WujiangState.WujiangState_Dead) { wujiang.Move(c2); return; } return; } wujiang.Move(myCoordinates); }
// 2-贯射 public static List <Coordinates> ShowSkillTarget_Nubing02(Wujiang myWujiang) { List <Coordinates> targets = new List <Coordinates>(); Coordinates c1 = MapManager.GetInstance().TerrainPositionToCorrdinate(BattleGameManager.GetInstance().GetWujiangTransparent().transform.position); List <Coordinates> neighbours = new List <Coordinates>(); MapManager.GetInstance().GetAroundN(neighbours, c1, 2); Dictionary <Coordinates, Wujiang> wujiangExpeditions = BattleGameManager.GetInstance().GetWujiangData().GetWujiangExpeditions(); foreach (Coordinates c in neighbours) { if (wujiangExpeditions.ContainsKey(c)) { // 不能是自己 if (!myWujiang.GetCoordinates().Equals(c)) { // 必须是一条直线上 if (MapManager.GetInstance().CheckInLine(c, c1)) { targets.Add(c); } } } } return(targets); }
public void UpdateWujiangExpeditionCorrdinates(Coordinates c1, Coordinates c2) { Wujiang Wujiang = mWujiangExpeditions[c1]; SetWujiangExpeditionCorrdinates(c1, null); SetWujiangExpeditionCorrdinates(c2, Wujiang); }
public Dictionary <Coordinates, Node> ShowPath(Wujiang wujiang) { // 所有出征的武将 Dictionary <Coordinates, Wujiang> wujiangExpeditions = BattleGameManager.GetInstance().GetWujiangData().GetWujiangExpeditions(); ClearNode(); // 1.查找可走路径点 Coordinates current = MapManager.GetInstance().TerrainPositionToCorrdinate(wujiang.transform.position); Queue <Node> queue = new Queue <Node>(); Node startNode = GetNode(current); startNode.nodeCurrentCosted = 1; queue.Enqueue(startNode); mResult[startNode.nodeCoordinates] = startNode; while (queue.Count > 0) { Node currentNode = queue.Dequeue(); List <Coordinates> neighbours = MapManager.GetInstance().GetNeighbours(currentNode.nodeCoordinates); foreach (Coordinates c in neighbours) { // 检查是否越界 if (MapManager.GetInstance().CheckBoundary(c)) { Node node = GetNode(c); // 创建node float newCost = currentNode.nodeCurrentCosted + node.nodeCost; if (newCost < node.nodeCurrentCosted) { node.nodeCurrentCosted = newCost; // 1.当前点的cost小于总cost if (node.nodeCurrentCosted <= wujiang.GetWujiangPathfindingCost()) { // 2.不能移动到其他武将的点上,所以去掉这个点 if (wujiangExpeditions.ContainsKey(node.nodeCoordinates)) { Wujiang wujiangNode = wujiangExpeditions[node.nodeCoordinates]; if (wujiangNode && wujiangNode != wujiang) { continue; } } queue.Enqueue(node); node.nodeParent = currentNode; mResult[node.nodeCoordinates] = node; } } } } } // 2.显示可走路径点 mIsShowingPath = true; foreach (KeyValuePair <Coordinates, Node> node in mResult) { GameObject g = GetGridNode(); g.SetActive(true); g.transform.position = MapManager.GetInstance().CorrdinateToTerrainPosition(node.Key); } return(mResult); }
public void ShowAllTargets(Wujiang wujiang) { mAllTargets.Clear(); for (int i = 0; i < mShowSkillTargets.Count; i++) { mAllTargets.Add(mShowSkillTargets[i](wujiang)); } }
public static void Skill_Nubing01(Wujiang wujiang, Coordinates target) { Dictionary <Coordinates, Wujiang> wujiangExpeditions = BattleGameManager.GetInstance().GetWujiangData().GetWujiangExpeditions(); Wujiang targetWujiang = wujiangExpeditions[target]; // 1.伤害 targetWujiang.OnDamage(3000); }
public static void Skill_Jibing03(Wujiang wujiang, Coordinates target) { Dictionary <Coordinates, Wujiang> wujiangExpeditions = BattleGameManager.GetInstance().GetWujiangData().GetWujiangExpeditions(); List <Coordinates> neighbors = MapManager.GetInstance().GetNeighbours(wujiang.GetCoordinates()); foreach (Coordinates c in neighbors) { if (wujiangExpeditions.ContainsKey(c)) { wujiangExpeditions[c].OnDamage(5000); } } }
public void SetWujiangExpeditionCorrdinates(Coordinates c1, Wujiang Wujiang) { if (Wujiang) { mWujiangExpeditions[c1] = Wujiang; MapManager.GetInstance().AddTerrainType(c1, TerrainType.TerrainType_Wujiang); } else { mWujiangExpeditions.Remove(c1); MapManager.GetInstance().RemoveTerrainType(c1, TerrainType.TerrainType_Wujiang); } }
public static void Skill_Nubing02(Wujiang myWujiang, Coordinates target) { Coordinates c1 = myWujiang.GetCoordinates(); Coordinates c2 = target; List <Coordinates> targets = new List <Coordinates>(); if (c1.HexX == c2.HexX) { int count = c2.HexY - c1.HexY; int step = count > 0 ? 1 : -1; for (int i = c2.HexY; i != c1.HexY; i -= step) { Coordinates c = new Coordinates(); c.SetHexXY(c1.HexX, i); targets.Add(c); } } else if (c1.HexY == c2.HexY) { int count = c2.HexX - c1.HexX; int step = count > 0 ? 1 : -1; for (int i = c2.HexX; i != c1.HexX; i -= step) { Coordinates c = new Coordinates(); c.SetHexXY(i, c1.HexY); targets.Add(c); } } else if (c1.HexZ == c2.HexZ) { int count = c2.HexY - c1.HexY; int step = count > 0 ? 1 : -1; for (int i = c2.HexY; i != c1.HexY; i -= step) { Coordinates c = new Coordinates(); c.SetHexXY(-c1.HexZ - i, i); targets.Add(c); } } Dictionary <Coordinates, Wujiang> wujiangExpeditions = BattleGameManager.GetInstance().GetWujiangData().GetWujiangExpeditions(); foreach (Coordinates c in targets) { if (wujiangExpeditions.ContainsKey(c)) { wujiangExpeditions[c].OnDamage(4000); } } }
public static List <Coordinates> ShowSkillTarget_Qibing01(Wujiang wujiang) { List <Coordinates> targets = new List <Coordinates>(); List <Coordinates> neighbour = MapManager.GetInstance().GetNeighbours(MapManager.GetInstance().TerrainPositionToCorrdinate(BattleGameManager.GetInstance().GetWujiangTransparent().transform.position)); Dictionary <Coordinates, Wujiang> wujiangExpeditions = BattleGameManager.GetInstance().GetWujiangData().GetWujiangExpeditions(); foreach (Coordinates c in neighbour) { if (wujiangExpeditions.ContainsKey(c)) { // 不能是自己 if (!wujiang.GetCoordinates().Equals(c)) { targets.Add(c); } } } return(targets); }
public void Seclet(bool seclet) { mSelected = seclet; if (mSelected) { // 1.选中 msCurrentWujiang = this; if (mHighlightableObjecto == null) { mHighlightableObjecto = gameObject.AddComponent <HighlightableObject>(); } mHighlightableObjecto.ConstantOnImmediate(Color.red); } else { // 2.不选中 msCurrentWujiang = null; mHighlightableObjecto.Off(); } }
// 3-乱射 public static List <Coordinates> ShowSkillTarget_Nubing03(Wujiang myWujiang) { return(ShowSkillTarget_Nubing01(myWujiang)); }
public static void SetCurrentWujiang(Wujiang wujiang) { msCurrentWujiang = wujiang; msCurrentWujiang.Seclet(true); }
public void SetWujiang(Wujiang wujiang) { mWujiang = wujiang; }
void Update() { if (IsPointerOverGameObject(Input.mousePosition)) { if (mMobileTouchCamera.enabled) { mMobileTouchCamera.enabled = false; } return; } if (!mMobileTouchCamera.enabled) { mMobileTouchCamera.enabled = true; } RaycastHit hit; // 从鼠标所在的位置发射 Vector2 screenPosition = Input.mousePosition; if (Physics.Raycast(Camera.main.ScreenPointToRay(screenPosition), out hit)) { // 1.点击格子,主要用于行军 Vector3 pointCubePosition = MapManager.GetInstance().TerrainPositionToCenterPosition(hit.point); pointCubePosition.y = mOriginalPosition.y; mPointCube.transform.position = pointCubePosition; if (Input.GetMouseButtonUp(0)) { // 这个主要是因为防止刚刚点击武将,战斗菜单就显示出来了 if (msIgnoreRaycast) { msIgnoreRaycast = false; return; } Wujiang currentWujiang = Wujiang.GetCurrentWujiang(); if (currentWujiang != null) { // 1.当前处于要攻击状态 // 这个主要是因为防止刚刚点击武将,战斗菜单就显示出来了 if (currentWujiang.GetWujiangState() == WujiangState.WujiangState_Prepare_Attack) { // 释放技能 mCanvasBattleMenu.MoveAndStartSkill(MapManager.GetInstance().TerrainPositionToCorrdinate(pointCubePosition)); return; } // 2.显示战斗菜单 currentWujiang.ShowBattleMeun(new Vector3(mPointCube.transform.position.x, currentWujiang.transform.position.y, mPointCube.transform.position.z)); return; } // 2.点击城市 if (hit.collider.CompareTag("City")) { if (currentWujiang != null || Pathfinding.GetInstance().IsShowingPath()) { return; } if (Input.GetMouseButtonUp(0)) { GameObject city; if (hit.collider.gameObject.name.Equals("Model")) { // 关隘 city = hit.collider.transform.parent.gameObject; } else { // 港口 city = hit.collider.transform.gameObject; } // 显示小菜单 mCanvasGameMenu.SetCity(city.GetComponent <City>()); mCanvasGameMenu.ShowCanvasGameMenu(screenPosition); } } } } // 3.点击空白 if (Input.GetMouseButtonDown(0)) { mCanvasGameMenu.gameObject.SetActive(false); mCanvasBattleMenu.gameObject.SetActive(false); } }
public static List <Coordinates> ShowSkillTarget_Qibing03(Wujiang wujiang) { return(ShowSkillTarget_Qibing01(wujiang)); }
public Skills(Wujiang wujiang, string[] skillNames) { if (wujiang.mArmAbility == 1) { if (wujiang.mArmType == ArmType.ArmType_Qiangbing) { mSkills.Add(SkillQiangbing.Skill_Qiangbing01); mShowSkillTargets.Add(SkillQiangbing.ShowSkillTarget_Qiangbing01); } else if (wujiang.mArmType == ArmType.ArmType_jibing) { mSkills.Add(SkillJibing.Skill_Jibing01); mShowSkillTargets.Add(SkillJibing.ShowSkillTarget_Jibing01); } else if (wujiang.mArmType == ArmType.ArmType_Nubing) { mSkills.Add(SkillNubing.Skill_Nubing01); mShowSkillTargets.Add(SkillNubing.ShowSkillTarget_Nubing01); } else if (wujiang.mArmType == ArmType.ArmType_Qibing) { mSkills.Add(SkillQibing.Skill_Qibing01); mShowSkillTargets.Add(SkillQibing.ShowSkillTarget_Qibing01); } } else if (wujiang.mArmAbility == 2) { if (wujiang.mArmType == ArmType.ArmType_Qiangbing) { mSkills.Add(SkillQiangbing.Skill_Qiangbing01); mSkills.Add(SkillQiangbing.Skill_Qiangbing02); mShowSkillTargets.Add(SkillQiangbing.ShowSkillTarget_Qiangbing01); mShowSkillTargets.Add(SkillQiangbing.ShowSkillTarget_Qiangbing02); } else if (wujiang.mArmType == ArmType.ArmType_jibing) { mSkills.Add(SkillJibing.Skill_Jibing01); mSkills.Add(SkillJibing.Skill_Jibing02); mShowSkillTargets.Add(SkillJibing.ShowSkillTarget_Jibing01); mShowSkillTargets.Add(SkillJibing.ShowSkillTarget_Jibing02); } else if (wujiang.mArmType == ArmType.ArmType_Nubing) { mSkills.Add(SkillNubing.Skill_Nubing01); mSkills.Add(SkillNubing.Skill_Nubing02); mShowSkillTargets.Add(SkillNubing.ShowSkillTarget_Nubing01); mShowSkillTargets.Add(SkillNubing.ShowSkillTarget_Nubing02); } else if (wujiang.mArmType == ArmType.ArmType_Qibing) { mSkills.Add(SkillQibing.Skill_Qibing01); mSkills.Add(SkillQibing.Skill_Qibing02); mShowSkillTargets.Add(SkillQibing.ShowSkillTarget_Qibing01); mShowSkillTargets.Add(SkillQibing.ShowSkillTarget_Qibing02); } } else if (wujiang.mArmAbility > 2) { if (wujiang.mArmType == ArmType.ArmType_Qiangbing) { mSkills.Add(SkillQiangbing.Skill_Qiangbing01); mSkills.Add(SkillQiangbing.Skill_Qiangbing02); mSkills.Add(SkillQiangbing.Skill_Qiangbing03); mShowSkillTargets.Add(SkillQiangbing.ShowSkillTarget_Qiangbing01); mShowSkillTargets.Add(SkillQiangbing.ShowSkillTarget_Qiangbing02); mShowSkillTargets.Add(SkillQiangbing.ShowSkillTarget_Qiangbing03); } else if (wujiang.mArmType == ArmType.ArmType_jibing) { mSkills.Add(SkillJibing.Skill_Jibing01); mSkills.Add(SkillJibing.Skill_Jibing02); mSkills.Add(SkillJibing.Skill_Jibing03); mShowSkillTargets.Add(SkillJibing.ShowSkillTarget_Jibing01); mShowSkillTargets.Add(SkillJibing.ShowSkillTarget_Jibing02); mShowSkillTargets.Add(SkillJibing.ShowSkillTarget_Jibing03); } else if (wujiang.mArmType == ArmType.ArmType_Nubing) { mSkills.Add(SkillNubing.Skill_Nubing01); mSkills.Add(SkillNubing.Skill_Nubing02); mSkills.Add(SkillNubing.Skill_Nubing03); mShowSkillTargets.Add(SkillNubing.ShowSkillTarget_Nubing01); mShowSkillTargets.Add(SkillNubing.ShowSkillTarget_Nubing02); mShowSkillTargets.Add(SkillNubing.ShowSkillTarget_Nubing03); } else if (wujiang.mArmType == ArmType.ArmType_Qibing) { mSkills.Add(SkillQibing.Skill_Qibing01); mSkills.Add(SkillQibing.Skill_Qibing02); mSkills.Add(SkillQibing.Skill_Qibing03); mShowSkillTargets.Add(SkillQibing.ShowSkillTarget_Qibing01); mShowSkillTargets.Add(SkillQibing.ShowSkillTarget_Qibing02); mShowSkillTargets.Add(SkillQibing.ShowSkillTarget_Qibing03); } } if (wujiang.mArmAbility == 1) { mSkillNames.Add(skillNames[0]); } else if (wujiang.mArmAbility == 2) { mSkillNames.Add(skillNames[0]); mSkillNames.Add(skillNames[1]); } else if (wujiang.mArmAbility > 2) { mSkillNames.Add(skillNames[0]); mSkillNames.Add(skillNames[1]); mSkillNames.Add(skillNames[2]); } //Debug.Log("wujiang.mArmAbility:" + wujiang.mArmAbility + " " + mSkillNames.Count); }
void Start() { // 兵种 for (int i = 0; i < mArms.Length; i++) { int index = i; mArms[index].onClick.AddListener(delegate() { // 点击兵种自动显示出征的武将(由AI控制选择哪些武将) mWeapons[mWeaponIndex].GetComponent <Image>().sprite = mSprite01[mWeaponIndex]; mWeaponText[mWeaponIndex].text = 1000000 + ""; mWeaponIndex = index; mWeapons[mWeaponIndex].GetComponent <Image>().sprite = mSprite02[mWeaponIndex]; mWeaponText[mWeaponIndex].text = 1000000 - mCurrentSoldier + ""; List <WujiangBean> temp = Strategy.GetExpeditionGenerals(mCity.GetWujiangBeans()); WujiangBean[] wujiangs = new WujiangBean[3]; wujiangs[0] = temp[0]; wujiangs[1] = temp[1]; wujiangs[2] = temp[2]; SetGeneral(wujiangs); CanvasExecutive canvasExecutive = mCanvasExecutive.GetComponent <CanvasExecutive>(); // 设置本次选中的武将 canvasExecutive.SetSelectGeneral(wujiangs); }); } // 显示武将界面 mExecutiveBtn.GetComponent <Button>().onClick.AddListener(delegate() { CanvasExecutive canvasExecutive = mCanvasExecutive.GetComponent <CanvasExecutive>(); canvasExecutive.SetCity(mCity); canvasExecutive.Show(); }); // 确定、返回 mEnableBtn.GetComponent <Button>().onClick.AddListener(delegate() { this.gameObject.SetActive(false); GameObject canvasGameMenu = GameObject.Find("Canvas GameMenu"); if (canvasGameMenu != null) { canvasGameMenu.SetActive(false); } if (mChief != null) { // 出兵 GameObject wujiangGameObject = Instantiate(mWujiangPrefab); wujiangGameObject.transform.position = new Vector3(mCity.transform.position.x, 0.05f, mCity.transform.position.z); Wujiang wujiang = wujiangGameObject.GetComponent <Wujiang>(); wujiang.mAvatar.sprite = mChiefImg.sprite; wujiang.mHealth.text = mSliderText[0].text.Split('/')[0]; wujiang.mName.text = mChief.name; // 设置武将技能 wujiang.mArmType = (ArmType)mWeaponIndex; wujiang.mArmAbility = mArmAbility; wujiang.mSkills = new Skills(wujiang, new string[] { mSkillText[0].text, mSkillText[1].text, mSkillText[2].text }); WujiangBean[] wujiangBeans = new WujiangBean[3]; wujiangBeans[0] = mChief; wujiangBeans[1] = mJunior01; wujiangBeans[2] = mJunior02; wujiang.SetWujiangBeans(wujiangBeans); // 显示路径 Wujiang.SetCurrentWujiang(wujiang); wujiang.SetWujiangState(WujiangState.WujiangState_Prepare_Expedition); wujiang.SetCity(mCity); wujiang.ShowPath(); // 减少城池里面的武将 List <WujiangBean> allWujiangs = mCity.GetWujiangBeans(); for (int i = allWujiangs.Count - 1; i >= 0; i--) { for (int j = 0; j < wujiangBeans.Length; j++) { if (allWujiangs[i] == wujiangBeans[j]) { allWujiangs.Remove(allWujiangs[i]); break; } } } // 清零选中的武将 CanvasExecutive canvasExecutive = mCanvasExecutive.GetComponent <CanvasExecutive>(); canvasExecutive.ClearSelectWujiang(); } }); mCloseBtn.GetComponent <Button>().onClick.AddListener(delegate() { this.gameObject.SetActive(false); }); // 武器,默认第一个亮 mWeapons[mWeaponIndex].GetComponent <Image>().sprite = mSprite02[mWeaponIndex]; for (int i = 0; i < mWeapons.Length; i++) { int index = i; mWeapons[index].onClick.AddListener(delegate() { if (mWeaponIndex == index && mChief == null) { return; } else { mWeapons[mWeaponIndex].GetComponent <Image>().sprite = mSprite01[mWeaponIndex]; mWeaponText[mWeaponIndex].text = 1000000 + ""; mWeaponIndex = index; mWeapons[mWeaponIndex].GetComponent <Image>().sprite = mSprite02[mWeaponIndex]; mWeaponText[mWeaponIndex].text = 1000000 - mCurrentSoldier + ""; SetAbilitysValue(mChief, mJunior01, mJunior02); }; }); } // 滑动条 for (int i = 0; i < mSlider.Length; i++) { int index = i; mSlider[index].onValueChanged.AddListener(delegate(float value) { int max = 0; int current = 0; if (index == 0) { // 士兵 max = 20000; mCurrentSoldier = (int)(max * value); mWeaponText[mWeaponIndex].text = 1000000 - mCurrentSoldier + ""; } else if (index == 1) { max = 10000; int temp = (int)(max * value); } else if (index == 2) { max = 50000; mSliderDayText.text = (int)(200 * value) / 10 * 10 + "日"; } current = (int)(max * value); mSliderText[index].text = current + "/" + max; mTotalText[index].text = 1000000 - current + ""; }); } // Test //string PATH = Application.streamingAssetsPath + "/img/img"; //string url = PATH + BattleGameManager.msWujiangs[0].id + ".jpg"; //StartCoroutine(LoadImage(url, null)); }