/// <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"); }
public ReleaseSkillCommand(GameUnit.GameUnit skillMaker, int range, Vector2 makerPosition, Vector2 targetPosition) { _skillMaker = skillMaker; _range = range; _targetPosition = targetPosition; _makerPosition = makerPosition; }
public UnitMoveCommand(GameUnit.GameUnit unit, Vector2 unitPositon, Vector2 targetPosion, Vector2 destination) { _unit = unit; _unitPosition = unitPositon; _targetPosition = targetPosion; _destination = destination; }
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); }
/// <summary> /// 将给定GameUnit的异能脚本全部删除 /// </summary> /// <param name="unit"></param> public void DeleteGameUnitAbility(Unit unit) { //删除所有异能脚本 foreach (Ability.Ability ability in unit.gameObject.GetComponents <Ability.Ability>()) { Destroy(ability); } }
/// <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); } }
//攻击范围染色 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); } }
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; } }
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; }
// 根据给定unit寻找其所处坐标,若找不到则会返回不合法坐标 public Vector3 GetUnitCoordinate(Unit unit) { foreach (Unit gameUnit in _unitsList) { if (gameUnit == unit) { return(gameUnit.mapBlockBelow.GetCoordinate()); } } return(new Vector3(-1, -1, -1)); }
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); } }
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; } }
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); } } }
/// <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); } } }
/// <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); } }
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(); } } }
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); }