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);
            }
        }
Пример #2
0
 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);
         }
     }
 }
Пример #4
0
        //对推拉型技能,判断生效效果
        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;
                }
            }
        }
Пример #5
0
        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);
        }
Пример #6
0
        //被使用技能
        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);
 }
Пример #8
0
        /// <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);
        }
Пример #9
0
        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);
        }