/// <summary>
        ///  战斗胜利条件之一:守卫某战区存活指定回合数
        /// </summary>
        /// <param name="area">要守卫的战区</param>
        /// <param name="curRounds">当前回合数</param>
        /// <param name="targetRounds">要守卫的目标回合数</param>
        /// <param name="mapBlock"></param>
        /// <returns></returns>
        public bool ProtectBattleZooe(int area, int curRounds, int targetRounds)
        {
            int            unitAmout   = 0;//该战区上我方单位数量
            List <Vector2> battleAreas = null;

            battleAreaDic.TryGetValue(area, out battleAreas);
            foreach (Vector2 pos in battleAreas)
            {
                if (BattleMap.Instance().CheckIfHasUnits(pos))
                {
                    GameUnit.GameUnit unit = BattleMap.Instance().GetUnitsOnMapBlock(pos);
                    if (unit.owner == GameUnit.OwnerEnum.Player && curRounds <= targetRounds)
                    {
                        unitAmout++;
                    }
                }
            }
            if (unitAmout == 0)
            {
                return(false);
            }
            else
            {
                return(true);
            }
        }
 public SingleController(Unit _gameUnit)
 {
     battleUnit       = _gameUnit;
     targetBattleUnit = null;
     hatredRecorder   = new HatredRecorder();
     toTargetPath     = new List <Vector2>();
 }
 private void Action()
 {
     //获取被选中的友军,需要自己根据技能描述强转类型,一旦强转的类型是错的代码会出错
     GameUnit.GameUnit unit = (GameUnit.GameUnit) this.GetSelectingUnits()[0];
     //加buff
     unit.GetComponent("Couragebuff_1");
 }
Exemple #4
0
 public ReleaseSkillCommand(GameUnit.GameUnit skillMaker, int range, Vector2 makerPosition, Vector2 targetPosition)
 {
     _skillMaker     = skillMaker;
     _range          = range;
     _targetPosition = targetPosition;
     _makerPosition  = makerPosition;
 }
Exemple #5
0
 public UnitMoveCommand(GameUnit.GameUnit unit, Vector2 unitPositon, Vector2 targetPosion, Vector2 destination)
 {
     _unit           = unit;
     _unitPosition   = unitPositon;
     _targetPosition = targetPosion;
     _destination    = destination;
 }
Exemple #6
0
        public void ReleaseSkill(GameUnit.GameUnit skillMaker, int skillRange, Vector2 skillMakerPosition, Vector2 targetPositon)
        {
            ReleaseSkillCommand releaseSkillCommand = new ReleaseSkillCommand(skillMaker, skillRange, skillMakerPosition, targetPositon);

            if (releaseSkillCommand.Judge())
            {
                Debug.Log("箭雨发动");
                //TODO技能伤害范围染色
                Gameplay.Instance().gamePlayInput.HandleSkillCancel(BattleMap.BattleMap.Instance().GetUnitCoordinate(skillMaker), skillRange);//取消技能可释放范围染色

                List <Vector2>    vector2s       = new List <Vector2>();
                GameUnit.GameUnit unit           = (GameUnit.GameUnit) this.GetSelectingUnits()[0];
                Vector3           unitCoordinate = BattleMap.BattleMap.Instance().GetUnitCoordinate(unit);
                vector2s = unit.GetComponent <ShowRange>().GetSkillRnage(unitCoordinate, range);
                foreach (Vector2 vector2 in vector2s)
                {
                    if (BattleMap.BattleMap.Instance().CheckIfHasUnits(vector2))
                    {
                        GameUnit.GameUnit gameUnit = BattleMap.BattleMap.Instance().GetUnitsOnMapBlock(vector2);
                        gameUnit.hp -= damage;
                    }
                }
                //TODO取消技能伤害范围染色
                //GamePlay.Gameplay.Instance().gamePlayInput.isSkill = false;//箭雨释放完毕;
            }
        }
        /// <summary>
        /// 根据攻击者和被攻击的攻击优先级列表生成对应的伤害请求list
        /// </summary>
        /// <param name="DamageRequestList">伤害请求list</param>
        /// <param name="Attacker">攻击者</param>
        /// <param name="AttackedUnit">被攻击者</param>
        public static List <DamageRequest> CaculateDamageRequestList(GameUnit.GameUnit Attacker, GameUnit.GameUnit AttackedUnit)
        {
            List <DamageRequest> damageRequestList = new List <DamageRequest>();

            Debug.Log(Attacker.priority);

            for (int i = 0; i < AttackedUnit.priority.Count; i++)
            {
                damageRequestList.Add(new DamageRequest(AttackedUnit, Attacker, AttackedUnit.priority[i]));
            }
            for (int i = 0; i < Attacker.priority.Count; i++)
            {
                damageRequestList.Add(new DamageRequest(Attacker, AttackedUnit, Attacker.priority[i]));
            }
            damageRequestList.Sort((a, b) =>
            {
                if (a.priority < b.priority)
                {
                    return(1);
                }
                else if (a.priority == b.priority)
                {
                    return(0);
                }
                else
                {
                    return(-1);
                }
            });
            return(damageRequestList);
        }
Exemple #8
0
 /// <summary>
 /// 将给定GameUnit的异能脚本全部删除
 /// </summary>
 /// <param name="unit"></param>
 public void DeleteGameUnitAbility(Unit unit)
 {
     //删除所有异能脚本
     foreach (Ability.Ability ability in unit.gameObject.GetComponents <Ability.Ability>())
     {
         Destroy(ability);
     }
 }
Exemple #9
0
 /// <summary>
 ///记录仇恨列表
 ///对仇恨值做加法
 /// </summary>
 /// <param name="enemyUnit"></param>
 /// <param name="hostUnit"></param>
 public void RecordedHatred(Unit enemyUnit, Unit hostUnit)
 {
     //当敌方单位是玩家单位时,触发更新
     if (enemyUnit.owner == GameUnit.OwnerEnum.Player)
     {
         GetSingleControllerByID(hostUnit.CurPos).hatredRecorder.RecordedHatred(enemyUnit.id, enemyUnit.atk);
     }
 }
 //单位进入灼烧块
 public void UnitEnterBurning(Vector2 vector2)
 {
     if (BattleMap.Instance().CheckIfHasUnits(vector2))
     {
         Unit unit = BattleMap.Instance().GetUnitsOnMapBlock(vector2);
         unit.hp -= 1;//TODO更新HP显示
         Debug.Log(unit.hp);
     }
 }
Exemple #11
0
 //攻击范围染色
 public void HandleAtkConfirm(Vector2 target)
 {
     BattleMap.BattleMap map = BattleMap.BattleMap.Instance();
     if (map.CheckIfHasUnits(target))
     {
         GameUnit.GameUnit unit = BattleMap.BattleMap.Instance().GetUnitsOnMapBlock(target);
         unit.GetComponent <ShowRange>().MarkAttackRange(target);
     }
 }
Exemple #12
0
        private void Action()
        {
            GameUnit.GameUnit unit           = (GameUnit.GameUnit) this.GetSelectingUnits()[0];
            Vector3           unitCoordinate = BattleMap.BattleMap.Instance().GetUnitCoordinate(unit);
            AbilityFormat     ability        = AbilityDatabase.GetInstance().GetAbilityFormat("Arrowrain");

            Gameplay.Instance().gamePlayInput.HandleSkillConfim(unitCoordinate, (int)ability.AbilityVariable.Range);//显示技能可释放范围(攻击范围)
            //GamePlay.Gameplay.Instance().gamePlayInput.isSkill = true;//可以发动技能
        }
 /// <summary>
 /// 清空仇恨列表
 /// </summary>
 public void Clean()
 {
     host = null;
     for (int i = 0; i < hatredList.Count; i++)
     {
         hatredList[i].battleUnit = null;
         hatredList[i].hatred     = 0;
     }
 }
Exemple #14
0
 private void Action()
 {
     //获取发动这个技能的怪
     GameUnit.GameUnit unit = register.GetUnit <GameUnit.GameUnit>();
     //用护甲恢复值去修正护甲值
     if (unit.armor < unit.armorRestore)
     {
         unit.armor = unit.armorRestore;
     }
 }
 private void Action()
 {
     //保存死掉的怪
     GameUnit.GameUnit deadUnit = this.GetDead();
     //复活死掉的怪并保存
     GameUnit.GameUnit newUnit = this.Regenerate(deadUnit.id, this.GetUnitPosition(deadUnit));
     //修改这只怪的血量
     newUnit.hp -= newUnit.hp / 2;
     //删除这只怪的复活技能
     this.DeleteUnitAbility(newUnit, "Regeneration");
 }
 /// <summary>
 /// 向方块上增加GameUnit
 /// </summary>
 /// <param name="unit"></param>
 public void AddUnit(Unit unit, bool isSetUnitsOnMe = true)
 {
     //Debug.Log("MapBlocks--Added unit:" + unit.ToString());
     if (isSetUnitsOnMe)
     {
         units_on_me.Add(unit);
     }
     //在Hierarchy中,还需要把单位添加到Block下
     //修改单位的父级对象
     unit.gameObject.transform.SetParent(this.transform);
 }
        //设定Buff的初始化
        protected override void InitialBuff()
        {
            //设定Buff的生命周期,两种写法,建议使用第二种,比较直观
            //this.Life = 2f;
            SetLife(2f);

            //Buff要做的事情,可以像Ability一样也写Trigger,也可以只是做一些数值操作。和Ability一样公用一套工具函数库
            GameUnit.GameUnit unit = GetComponent <GameUnit.GameUnit>();
            unit.MaxHP += 2;
            unit.hp    += 2;
        }
        /// <summary>
        /// 重置仇恨列表
        /// </summary>
        /// <param name="hostUnit"></param>
        public void Reset(Unit hostUnit)
        {
            Clean();
            if (hostUnit == null)
            {
                Debug.Log("重置仇恨列表失败");
                return;
            }

            host = hostUnit;
        }
Exemple #19
0
        // 根据给定unit寻找其所处坐标,若找不到则会返回不合法坐标
        public Vector3 GetUnitCoordinate(Unit unit)
        {
            foreach (Unit gameUnit in _unitsList)
            {
                if (gameUnit == unit)
                {
                    return(gameUnit.mapBlockBelow.GetCoordinate());
                }
            }

            return(new Vector3(-1, -1, -1));
        }
Exemple #20
0
 public void HandleAtkCancel(Vector2 target)
 {
     GameUnit.GameUnit unit = null;
     if (BattleMap.BattleMap.Instance().CheckIfHasUnits(target))
     {
         unit = BattleMap.BattleMap.Instance().GetUnitsOnMapBlock(target);
     }
     else
     {
         unit = BattleMap.BattleMap.Instance().GetUnitsOnMapBlock(TargetList[0]);
     }
     unit.GetComponent <ShowRange>().CancleAttackRangeMark(target);
 }
        /// <summary>
        /// 单个单位部署时
        /// </summary>
        /// <param name="enemyUnit"></param>
        public void AddHatred(Unit enemyUnit)
        {
            if (enemyUnit == null)
            {
                return;
            }

            hatredList.Add(new HatredItem());


            hatredList[HatredCount - 1].battleUnit = enemyUnit;
            SetHartredByRace(enemyUnit.tag[0]);
        }
        private void Action()
        {
            //获取发动这个技能的怪
            List <GameUnit.GameUnit> SummonUnits = this.GetSummonUnit();

            GameUnit.GameUnit unit = null;
            for (int i = 0; i < SummonUnits.Count; i++)
            {
                if (SummonUnits[i].GetMsgReceiver() == register)
                {
                    unit = SummonUnits[i];
                }

                //让这只怪的SPD修正值+2
                unit.priSPD += 2;
            }
        }
        /// <summary>
        /// 获取单位即信息,用于fgui显示
        /// </summary>
        private void Show()
        {
            // 分隔符
            string separator = " / ";

            _unit = BattleMap.Instance().GetUnitsOnMapBlock(GetSelfPosition());
            if (_unit == null)
            {
                return;
            }
            // 多个tag, 一起显示,/ 隔开
            string tagInTotal = "";

            if (_unit.tag.Count != 0)
            {
                for (int i = 0; i < _unit.tag.Count; i++)
                {
                    tagInTotal += _unit.tag[i];
                    tagInTotal += separator;
                }
                tagInTotal = tagInTotal.Substring(0, tagInTotal.Length - separator.Length);    // 删掉最后一个 /
            }

            // 多个priority, 一起显示,/ 隔开
            string priorityInTotal = "";

            if (_unit.priority.Count != 0)
            {
                for (int i = 0; i < _unit.priority.Count; i++)
                {
                    priorityInTotal += _unit.priority[i].ToString();
                    priorityInTotal += separator;
                }
                priorityInTotal = priorityInTotal.Substring(0, priorityInTotal.Length - separator.Length);  // 删掉最后一个 /
            }

            // 单位基础信息
            string valueInfo = "颜色: " + _unit.Color + "    生命:  " + _unit.hp + "\n攻击: " + _unit.atk
                               + "    范围: " + _unit.rng + "\n移动: " + _unit.mov + "    优先级: " + priorityInTotal;

            // 标签及效果信息,可能过长显示截断
            string effectInfo = tagInTotal + "  " + _unit.Effort;

            _fguiInterfaces.setDescribeWindowContentText(_unit.name, valueInfo, effectInfo);
        }
        //战斗胜利条件之一:战区所属权
        public bool WarZoneBelong(Vector3 position, BattleMapBlock[,] mapBlock)
        {
            int            unitAmout   = 0; //战区上单位的数量
            int            enemyAmout  = 0; //战区上敌方单位数量
            int            area        = mapBlock[(int)position.x, (int)position.y].area;
            List <Vector2> battleAreas = null;

            battleAreaDic.TryGetValue(area, out battleAreas);
            foreach (Vector2 pos in battleAreas)
            {
                int x = (int)pos.x;
                int y = (int)pos.y;
                if (BattleMap.Instance().CheckIfHasUnits(pos))
                {
                    unitAmout++;
                    GameUnit.GameUnit unit = mapBlock[x, y].GetComponentInChildren <GameUnit.GameUnit>();
                    if (unit.owner == GameUnit.OwnerEnum.Enemy)
                    {
                        enemyAmout++;
                    }
                }
            }
            if (unitAmout == 0)
            {
                //该战区没有所属权
                return(true);
            }
            else if (enemyAmout == unitAmout)
            {
                //该战区被敌方控制
                return(false);
            }
            else if (enemyAmout < unitAmout && enemyAmout != 0)
            {
                //该战区处于争夺状态
                return(false);
            }
            else
            {
                //该战区被玩家控制
                return(true);
            }
        }
Exemple #25
0
        private void Action()
        {
            //获取发动这个技能的怪
            List <GameUnit.GameUnit> SummonUnits = this.GetSummonUnit();

            GameUnit.GameUnit unit = null;
            for (int i = 0; i < SummonUnits.Count; i++)
            {
                if (SummonUnits[i].GetMsgReceiver() == register)
                {
                    unit = SummonUnits[i];
                }

                //让这只怪部署后可以移动
                unit.restrain = false;
                //让这只怪部署后可以攻击
                unit.disarm = false;
            }
        }
Exemple #26
0
        private void Action()
        {
            //获取发动这个技能的怪
            List <GameUnit.GameUnit> SummonUnits = this.GetSummonUnit();

            GameUnit.GameUnit unit = null;
            for (int i = 0; i < SummonUnits.Count; i++)
            {
                if (SummonUnits[i].GetMsgReceiver() == register)
                {
                    unit = SummonUnits[i];
                }

                //让这只怪的priority队尾里增加一个-2的数值
                if (unit.priority.Count == 1)
                {
                    unit.priority.Add(unit.priority[unit.priority.Count - 1] - 2);
                }
            }
        }
Exemple #27
0
 /// <summary>
 /// 根据给定UnitID,添加GameUnit的异能脚本
 /// </summary>
 public void AddGameUnitAbility(Unit unit, JsonData unitJsonData)
 {
     unit.abilities = new List <string>();
     for (int i = 0; i < unitJsonData["Ability"].Count; i++)
     {
         if (unitJsonData["Ability"][i].ToString() == "")
         {
             continue;
         }
         unit.abilities.Add(unitJsonData["Ability"][i].ToString());
         Component ability = unit.gameObject.AddComponent(System.Type.GetType("Ability." + unitJsonData["Ability"][i].ToString()));
         if (ability != null)
         {
             GameUtility.UtilityHelper.Log("添加异能 " + unitJsonData["Ability"][i].ToString() + " 成功", GameUtility.LogColor.RED);
         }
         else
         {
             GameUtility.UtilityHelper.Log("添加异能 " + unitJsonData["Ability"][i].ToString() + " 失败", GameUtility.LogColor.RED);
         }
     }
 }
Exemple #28
0
        /// <summary>
        /// 更新所有Controller的仇恨列表
        /// </summary>
        /// <param name="enemyUnit"></param>
        /// <param name="enemyUnits"></param>
        public void UpdateAllHatredList(Unit enemyUnit = null, List <Unit> enemyUnits = null)
        {
            if (singleControllers.Count <= 0)
            {
                return;
            }

            foreach (SingleController controller in singleControllers)
            {
                if (enemyUnit != null)
                {
                    controller.hatredRecorder.AddHatred(enemyUnit);
                    continue;
                }
                else if (enemyUnits != null)
                {
                    controller.hatredRecorder.AddHatredUnits(enemyUnits);
                }

                Debug.Log("仇恨列表数量: " + controller.hatredRecorder.HatredCount);
            }
        }
Exemple #29
0
        private void ReadUnitDataInJason(JsonData data, string owner, int damaged, Unit unit)
        {
            unit.Name     = data["name"].ToString();
            unit.id       = data["id"].ToString();
            unit.atk      = (int)data["atk"];
            unit.hp       = (int)data["hp"];
            unit.mov      = (int)data["mov"];
            unit.rng      = (int)data["rng"];
            unit.owner    = owner;
            unit.priority = new List <int>();
            unit.priority.Add((int)data["priority"]);
            int tagCount = data["tag"].Count;

            if (tagCount > 0)
            {
                unit.tag = new string[tagCount];
                for (int i = 0; i < tagCount; i++)
                {
                    unit.tag[i] = data["tag"][i].ToString();
                }
            }
        }
Exemple #30
0
        public bool MoveUnitToCoordinate(Unit unit, Vector3 destination)
        {
            foreach (Unit gameUnit in _unitsList)
            {
                if (gameUnit == unit)
                {
                    unit.mapBlockBelow.RemoveUnit(unit);
                    if (_mapBlocks[(int)destination.x, (int)destination.y] != null)
                    {
                        unit.mapBlockBelow = _mapBlocks[(int)destination.x, (int)destination.y];
                    }
                    if (_mapBlocksBurning[(int)destination.x, (int)destination.y] != null)
                    {
                        unit.mapBlockBelow = _mapBlocksBurning[(int)destination.x, (int)destination.y];
                    }
                    unit.mapBlockBelow.AddUnit(unit);
                    unit.transform.position = destination;
                    return(true);
                }
            }

            return(false);
        }