public int comboJudge(int skillType) { skillCombo.Enqueue(skillType); if (skillCombo.Count == EGameConstL.ComboCount) { int id = Check.checkCombo(skillCombo); //UpdatePrecombo(id); if (id >= 0) { return(id); } else { return(-1); } } else { int id = Check.checkComboEarly(skillCombo); if (id >= 0) { //UpdatePrecombo(id); UtilityHelper.LogFormat("Wait for {0} more skills to fill combo", EGameConstL.ComboCount - skillCombo.Count); } else { ClearPrecombo(); skillCombo.Clear(); UtilityHelper.Log("Combo error, start from first skill again"); } return(-1); } }
public void MgrLog(string info) { if (DebugMode) { UtilityHelper.LogFormat("{0} :::: {1}", MgrName, info); } }
public void skillComboActiveCheck() { for (int i = 0; i < comboBuffRoundList.Count; i++) { if (comboBuffRoundList[i].roundCount < EGameConstL.ComboEffectRoundCount) { comboBuffRoundList[i].roundCount++; UtilityHelper.LogFormat("buff id = {0}, left round = {1}", i, EGameConstL.ComboEffectRoundCount - comboBuffRoundList[i].roundCount); } else { UtilityHelper.LogFormat("remove buff {0}", i); RemoveBuff(comboBuffRoundList[i].effectID); comboBuffRoundList.RemoveAt(i); } } }
//对推拉型技能,判断生效效果 private void ChangeGridEffectWork(int way, SO_BattleUnitAttribute unitAttribute) { foreach (BattleUnitSkillResult result in skillResults) { //GridUnit mapGrid = result.battleUnit.mapGrid; result.syncAttribute.newGrid = new GridUnit(mapGrid.battleMap, result.battleUnit.mapGrid.row, result.battleUnit.mapGrid.column); UtilityHelper.LogFormat("newGrid = {0}, battleUnit.mapgrid = {1}", result.syncAttribute.newGrid, result.battleUnit.mapGrid); Dir dir = GridDir(result.battleUnit.mapGrid, unitAttribute.hostBattleUnit.mapGrid); switch (dir) { case Dir.UP: result.syncAttribute.newGrid.row += way; result.syncAttribute.newGrid.localPosition.y += way * EGameConstL.Map_GridOffsetY; break; case Dir.DOWN: result.syncAttribute.newGrid.row -= way; result.syncAttribute.newGrid.localPosition.y -= way * EGameConstL.Map_GridOffsetY; //result.syncAttribute.newGrid = result.battleUnit.mapGrid; break; case Dir.LEFT: result.syncAttribute.newGrid.column -= way; result.syncAttribute.newGrid.localPosition.x -= way * EGameConstL.Map_GridWidth; //result.syncAttribute.newGrid = result.battleUnit.mapGrid; break; case Dir.RIGHT: result.syncAttribute.newGrid.column += way; result.syncAttribute.newGrid.localPosition.x += way * EGameConstL.Map_GridWidth; UtilityHelper.LogFormat("newGrid = {0}, battleUnit.mapgrid = {1}", result.syncAttribute.newGrid, result.battleUnit.mapGrid); //result.syncAttribute.newGrid = result.battleUnit.mapGrid; break; } } }
public static int checkComboEarly(Queue <int> skillCombo) { if (skillCombo.Count == 2) { /* * int skill1 = skillCombo.Dequeue(); * int skill2 = skillCombo.Dequeue(); * for (int i = 0; i < ConfigReader.comboInfoDic.Count; i++) * { * if (ConfigReader.comboInfoDic[i].skill1 == skill1 && ConfigReader.comboInfoDic[i].skill2 == skill2) * { * * skillCombo.Enqueue(skill1); * skillCombo.Enqueue(skill2); * return i; * } * } */ UtilityHelper.Log("We are in combo stage 2"); } else if (skillCombo.Count == 1) { /* * int skill1 = skillCombo.Dequeue(); * for (int i = 0; i < ConfigReader.comboInfoDic.Count; i++) * { * if (ConfigReader.comboInfoDic[i].skill1 == skill1) * { * * skillCombo.Enqueue(skill1); * return i; * } * } */ UtilityHelper.LogFormat("We are in combo stage 1"); } return(1); }
//被使用技能 private void AcceptSkillResult(BattleUnitSyncAttribute sync) { if (sync != null) { battleUnitAttribute.hp = sync.currentHP; if (sync.newGrid != null) { UtilityHelper.LogFormat("change mapgrid from {0} to {1}", battleUnitAttribute.hostBattleUnit.mapGrid, sync.newGrid); //battleUnitAttribute.hostBattleUnit.mapGrid = sync.newGrid; List <GridUnit> path = new List <GridUnit>(); MapNavigator.Instance.NewNavigate(battleUnitAttribute.hostBattleUnit, battleUnitAttribute.hostBattleUnit.mapGrid.battleMap, battleUnitAttribute.hostBattleUnit.mapGrid, sync.newGrid, path); MoveToTargetGrid(battleUnitAttribute.hostBattleUnit, sync.newGrid, path.ToArray()); } if (battleUnitAttribute.hp <= 0) { //被击败了 //从格子中移除 LeaveGrid(); } } }
public void BPUsing() { BP--; useBPNum++; UtilityHelper.LogFormat("left BP = {0}, using BP = {1}", BP, useBPNum); }
/// <summary> /// 计算单个效果 /// </summary> /// <param name="releaser">释放者</param> /// <param name="target">目标</param> /// <param name="battleSkill">技能</param> /// <param name="mainEffect">是否主要伤害</param> /// <returns>技能结果</returns> public BattleUnitSkillResult CalcSingle(BattleUnit releaser, BattleUnit target, SO_BattleSkill battleSkill, bool mainEffect) { BattleUnitSkillResult result = new BattleUnitSkillResult(); result.battleUnit = target; result.battleSkill = battleSkill; result.syncAttribute = new BattleUnitSyncAttribute(); //简单计算生命值 switch (battleSkill.damageType) { case BattleSkillDamageType.Physical: case BattleSkillDamageType.Move: case BattleSkillDamageType.Skill: float critRatio = releaser.battleUnitAttribute.GetTargetCritRatio(target); //判断是否暴击 float critNum = Random.Range(0.0f, 1.0f); if (critNum < critRatio) { result.crit = true; } else { result.crit = false; } float hpChanged = releaser.battleUnitAttribute.power * battleSkill.powerModulus; //力量补正 hpChanged += releaser.battleUnitAttribute.speed * battleSkill.speedModulus; //速度补正 hpChanged += releaser.battleUnitAttribute.technic * battleSkill.technicModulus; //技巧补正 hpChanged += releaser.battleUnitAttribute.power * EGameConstL.PowerCommonModulus; //力量值附加补正 hpChanged *= releaser.battleUnitAttribute.AtkUpRatio; //通用攻击力提升 hpChanged *= releaser.battleUnitAttribute.GetDamageTypeModulus(target); //属性克制补正 hpChanged = Mathf.Max(0, hpChanged - target.battleUnitAttribute.Def); //直接减去目标防御值 if (result.crit) { hpChanged *= 2; //判断是否暴击 } result.syncAttribute.hpChanged = (int)-hpChanged; //(Mathf.Max(0, releaser.battleUnitAttribute.Atk - target.battleUnitAttribute.Def + battleSkill.mainValue)); //能量不变 result.syncAttribute.energyChanged = 0; result.syncAttribute.currentEnergy = target.battleUnitAttribute.energy; float avoidRatio = releaser.battleUnitAttribute.GetTargetAvoidRatio(target); //判断是否闪避 float avoidNum = Random.Range(0.0f, 1.0f); if (!result.crit && avoidNum < avoidRatio) { result.syncAttribute.hpChanged = 0; result.avoid = true; } else { result.avoid = false; } UtilityHelper.LogFormat("Is critical: {0}, Is avoid: {1}", result.crit, result.avoid); break; case BattleSkillDamageType.Heal: result.syncAttribute.hpChanged = Mathf.Min(battleSkill.mainValue, target.battleUnitAttribute.maxHp - target.battleUnitAttribute.hp); //能量不变 result.syncAttribute.energyChanged = 0; result.syncAttribute.currentEnergy = target.battleUnitAttribute.energy; break; default: break; } //hp变化 target.battleUnitAttribute.hp += result.syncAttribute.hpChanged; target.battleUnitAttribute.hp = Mathf.Clamp(target.battleUnitAttribute.hp, 0, target.battleUnitAttribute.maxHp); //记录变化 result.syncAttribute.currentHP = target.battleUnitAttribute.hp; return(result); }
public static BattleMap ReadBattleMapFromXML(string xmlFilePath) { TextAsset xmlfile = Resources.Load(xmlFilePath) as TextAsset; if (!xmlfile) { UtilityHelper.LogFormat("Load {0} xml file failed!", xmlFilePath); return(null); } int mapWidth = 0; int mapHeight = 0; GridUnit[,] gridMap = null; XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(xmlfile.text); XmlNodeList xmlNodeList = xmlDoc.SelectSingleNode("MapBaseMsg").ChildNodes; XmlNodeList mapMsgList = null; foreach (XmlElement xmlElement in xmlNodeList) { switch (xmlElement.Name) { case ("Width"): mapWidth = Convert.ToInt32(xmlElement.InnerText); break; case ("Height"): mapHeight = Convert.ToInt32(xmlElement.InnerText); break; case ("GridMsg"): mapMsgList = xmlElement.ChildNodes; break; } } BattleMap battleMap = new BattleMap(mapWidth, mapHeight); foreach (XmlElement gridUnitInfo in mapMsgList) { int posX = 0, posY = 0; GridAttribute gridAttribute = new GridAttribute(); foreach (XmlElement xmlElement in gridUnitInfo.ChildNodes) { switch (xmlElement.Name) { case ("PosX"): posX = Convert.ToInt32(xmlElement.InnerText); break; case ("PosY"): posY = Convert.ToInt32(xmlElement.InnerText); break; case ("Name"): gridAttribute.m_Name = Convert.ToString(xmlElement.InnerText); break; case ("Avoid"): gridAttribute.m_Avoid = Convert.ToSingle(xmlElement.InnerText); break; case ("Defense"): gridAttribute.m_Defense = Convert.ToSingle(xmlElement.InnerText); break; case ("Height"): gridAttribute.m_Height = Convert.ToSingle(xmlElement.InnerText); break; case ("MaxPassVolume"): gridAttribute.m_MaxPassVolume = Convert.ToSingle(xmlElement.InnerText); break; case ("CrossCost"): gridAttribute.m_CrossCost = Convert.ToSingle(xmlElement.InnerText); break; case ("GridType"): gridAttribute.SetGridType(Convert.ToString(xmlElement.InnerText)); break; } } GridUnit gridUnit = battleMap.mapGrids[posX - 1, posY - 1]; if (gridUnit == null) { gridUnit = new GridUnit(battleMap, posY - 1, posX - 1); battleMap.mapGrids[posX - 1, posY - 1] = gridUnit; } gridUnit.column = posX - 1; gridUnit.row = posY - 1; gridUnit.m_GridAttribute = gridAttribute; gridUnit.localPosition = new Vector3(posX * EGameConstL.Map_GridWidth, -posY * EGameConstL.Map_GridOffsetY, 0); if (gridUnit.m_GridAttribute.m_GridType == GridType.Normal) { battleMap.normalGrids.Add(gridUnit); } else if (gridUnit.m_GridAttribute.m_GridType == GridType.Obstacle) { battleMap.obstacleGrids.Add(gridUnit); } } return(battleMap); }