//手动操作完成 private void ManualOperationComplete() { //切换状态 manualOperationState = ManualOperationState.Waiting; skillOperationType = SkillOperationType.None; //清空状态 CleanState(false, false); //清空手动操作单位 if (manualOperatingBattleUnitRenderer != null) { manualOperatingBattleUnitRenderer.battleUnit.CompleteManualState(ManualActionState.Skill); manualOperatingBattleUnitRenderer.battleUnit.CompleteManualState(ManualActionState.Move); manualOperatingBattleUnitRenderer.UpdateRenderState(BattleUnitRenderState.Normal); manualOperatingBattleUnitRenderer = null; } //关闭操作菜单 UIViewManager.Instance.HideView(UIViewName.BattleFieldPlayerActOption); //使用了手动分析器 if (usedManualReleaseAnalysisor != null) { usedManualReleaseAnalysisor.Reset(); } //显示后通知手动操作完成 EventManager.Instance.Run(EGameConstL.EVENT_MANUAL_OPERATION_COMPLETE, null); }
//移动后的回调 private void AfterManualMove() { //清空高亮显示 SetCircularRangeRenderStateActive(false, GridRenderType.MoveRange); //切换状态 manualOperationState = ManualOperationState.Select; //通知移动完成 manualOperatingBattleUnitRenderer.battleUnit.CompleteManualState(ManualActionState.Move); }
private void AfterManualMove() { //清空高亮显示 SetRangeHighlightActive(false, 0, 0, 0); //切换状态 manualOperationState = ManualOperationState.None; //通知移动完成 manualBattleUnitRenderer.battleUnit.CompleteManualState(ManualActionState.Move); }
private void BeforeManualSkill() { //显示攻击范围 SetRangeHighlightActive( true, manualBattleUnitRenderer.battleUnit.mapGrid.row, manualBattleUnitRenderer.battleUnit.mapGrid.column, 1); manualOperationState = ManualOperationState.Skill; UIViewManager.Instance.HideView(UIViewName.BattleFieldPlayerActOption); }
private void BeforeManualSkill() { //显示攻击范围 SetRangeHighlightActive( true, manualBattleUnitRenderer.battleUnit.mapGrid.row, manualBattleUnitRenderer.battleUnit.mapGrid.column, 1); manualOperationState = ManualOperationState.Skill; activeManualList = false; }
private void BeforeManualMove() { //显示移动范围 SetRangeHighlightActive( true, manualBattleUnitRenderer.battleUnit.mapGrid.row, manualBattleUnitRenderer.battleUnit.mapGrid.column, manualBattleUnitRenderer.battleUnit.mobility); //设定为移动状态 manualOperationState = ManualOperationState.Move; UIViewManager.Instance.HideView(UIViewName.BattleFieldPlayerActOption); }
private void BeforeManualMove() { //显示移动范围 SetRangeHighlightActive( true, manualBattleUnitRenderer.battleUnit.mapGrid.row, manualBattleUnitRenderer.battleUnit.mapGrid.column, manualBattleUnitRenderer.battleUnit.mobility); //设定为移动状态 manualOperationState = ManualOperationState.Move; activeManualList = false; }
/// <summary> /// 清空状态 /// </summary> /// <param name="resetOperationState">是否将操作状态设置为select(等待操作状态)</param> /// <param name="resetManualBattleUnitState">是否重置带操作战斗单位(行动中状态)</param> private void CleanState(bool resetOperationState, bool resetManualBattleUnitState) { //清除区域显示效果 SetCircularRangeRenderStateActive(false, GridRenderType.MoveRange); SetCircularRangeRenderStateActive(false, GridRenderType.SkillReleaseRange); SetCircularRangeRenderStateActive(false, GridRenderType.SkillEffectRange); //还原所有战斗单位的状态 if (usedManualReleaseAnalysisor != null) { //可以被选中的 for (int i = 0; i < usedManualReleaseAnalysisor.suitableUnits.Count; ++i) { usedManualReleaseAnalysisor.suitableUnits[i].battleUnitRenderer.UpdateRenderState(BattleUnitRenderState.Normal); } //不可以被选中的 for (int i = 0; i < usedManualReleaseAnalysisor.distanceLimit.Count; ++i) { usedManualReleaseAnalysisor.distanceLimit[i].battleUnitRenderer.UpdateRenderState(BattleUnitRenderState.Normal); } //队伍不合适的 for (int i = 0; i < usedManualReleaseAnalysisor.teamLimit.Count; ++i) { usedManualReleaseAnalysisor.teamLimit[i].battleUnitRenderer.UpdateRenderState(BattleUnitRenderState.Normal); } //无效的 for (int i = 0; i < usedManualReleaseAnalysisor.battleUnitInvalid.Count; ++i) { usedManualReleaseAnalysisor.battleUnitInvalid[i].battleUnitRenderer.UpdateRenderState(BattleUnitRenderState.Normal); } } //是否重置操作状态 if (resetOperationState) { manualOperationState = ManualOperationState.Select; } //是否重置手动操作的英雄 if (resetManualBattleUnitState && manualOperatingBattleUnitRenderer != null) { manualOperatingBattleUnitRenderer.UpdateRenderState(BattleUnitRenderState.Action); } //重置已选中项 selectedBattleUnitRenderer = null; selectedGridUnitRenderer = null; }
private void ManualOperationComplete() { //切换状态 manualOperationState = ManualOperationState.None; //通知移动完成 manualBattleUnitRenderer.battleUnit.CompleteManualState(ManualActionState.Skill); manualBattleUnitRenderer.battleUnit.CompleteManualState(ManualActionState.Move); //清空手动操作单位 manualBattleUnitRenderer = null; //关闭操作菜单 UIViewManager.Instance.HideView(UIViewName.BattleFieldPlayerActOption); //显示后通知手动操作完成 PlayBattle(battleField.ManualOperationComplete); }
private void ManualOperationComplete() { //切换状态 manualOperationState = ManualOperationState.None; //通知移动完成 manualBattleUnitRenderer.battleUnit.CompleteManualState(ManualActionState.Skill); manualBattleUnitRenderer.battleUnit.CompleteManualState(ManualActionState.Move); //清空手动操作单位 manualBattleUnitRenderer = null; //关闭操作菜单 activeManualList = false; //显示后通知手动操作完成 PlayBattle(battleField.ManualOperationComplete); }
//某个战斗单位点击了移动 public void BattleUnitMove(BattleUnit battleUnit) { if (battleUnit == null || battleUnit.battleUnitRenderer == null || !battleUnit.battleUnitRenderer.Equals(manualOperatingBattleUnitRenderer)) { UtilityHelper.LogError("Battle unit move failed."); return; } //显示移动范围 SetCircularRangeRenderStateActive( true, GridRenderType.MoveRange, battleUnit.mapGrid.row, battleUnit.mapGrid.column, battleUnit.battleUnitAttribute.mobility); //设定为移动状态 manualOperationState = ManualOperationState.Move; //关闭选择操作界面 UIViewManager.Instance.HideView(UIViewName.BattleFieldPlayerActOption); }
//某个战斗单位点击了移动 public void BattleUnitMove(BattleUnit battleUnit) { if (battleUnit == null || battleUnit.battleUnitRenderer == null || !battleUnit.battleUnitRenderer.Equals(manualOperatingBattleUnitRenderer)) { UtilityHelper.LogError("Battle unit move failed."); return; } //显示移动范围 SetCircularRangeRenderStateActive( true, GridRenderType.MoveRange, battleUnit.mapGrid.row, battleUnit.mapGrid.column, battleUnit.battleUnitAttribute.mobility); //设定为移动状态 manualOperationState = ManualOperationState.Move; //关闭选择操作界面 HideManualActionList(); }
//手动操作完成 private void ManualOperationComplete() { //切换状态 manualOperationState = ManualOperationState.Waiting; skillOperationType = SkillOperationType.None; //清空状态 CleanState(false, false); //清空手动操作单位 if (manualOperatingBattleUnitRenderer != null) { manualOperatingBattleUnitRenderer.battleUnit.CompleteManualState(ManualActionState.Skill); manualOperatingBattleUnitRenderer.battleUnit.CompleteManualState(ManualActionState.Move); manualOperatingBattleUnitRenderer.UpdateRenderState(BattleUnitRenderState.Normal); manualOperatingBattleUnitRenderer = null; } //关闭操作菜单 UIViewManager.Instance.HideView(UIViewName.BattleFieldPlayerActOption); //显示后通知手动操作完成 fieldRenderer.PlayBattle(fieldRenderer.battleField.ManualOperationComplete); }
//某个战斗单位点击了使用技能 public void BattleUnitUseSkill(BattleUnit battleUnit, SO_BattleSkill skill) { if (battleUnit == null || battleUnit.battleUnitRenderer == null || !battleUnit.battleUnitRenderer.Equals(manualOperatingBattleUnitRenderer)) { UtilityHelper.LogError("Battle unit use skill failed."); UIViewManager.Instance.HideView(UIViewName.BattleFieldPlayerActOption); return; } //获取推算的技能释放结果 usedManualReleaseAnalysisor = BattleCalculator.Instance.ManualReleaseAnalysisor; //分析结果 usedManualReleaseAnalysisor.Analysis(manualOperatingBattleUnitRenderer.battleUnit, skill); //显示技能释放范围 if (skill.releaseRadius > 0) { SetCircularRangeRenderStateActive( true, GridRenderType.SkillReleaseRange, battleUnit.mapGrid.row, battleUnit.mapGrid.column, skill.releaseRadius); } //根据类型判断技能显示状态 switch (skill.targetType) { //对单个目标 case BattleSkillTargetType.BattleUnit: //可以被选中的 for (int i = 0; i < usedManualReleaseAnalysisor.suitableUnits.Count; ++i) { usedManualReleaseAnalysisor.suitableUnits[i].battleUnitRenderer.UpdateRenderState(BattleUnitRenderState.Selectable); } //不可以被选中的 for (int i = 0; i < usedManualReleaseAnalysisor.distanceLimit.Count; ++i) { usedManualReleaseAnalysisor.distanceLimit[i].battleUnitRenderer.UpdateRenderState(BattleUnitRenderState.NotSelectable); } //队伍不合适的 for (int i = 0; i < usedManualReleaseAnalysisor.teamLimit.Count; ++i) { usedManualReleaseAnalysisor.teamLimit[i].battleUnitRenderer.UpdateRenderState(BattleUnitRenderState.Normal); } //设定技能操作类型 skillOperationType = skill.effectRadius > 0 ? SkillOperationType.SurroundBattleUnit : SkillOperationType.SingleBattleUnitTarget; break; //对范围(某一个位置)目标 case BattleSkillTargetType.GridUnit: skillOperationType = SkillOperationType.GridUnitTarget; //如果没有位置可选,则直接打开范围 if (skill.releaseRadius <= 0) { //可以被选中,标记为已被选中 for (int i = 0; i < usedManualReleaseAnalysisor.suitableUnits.Count; ++i) { usedManualReleaseAnalysisor.suitableUnits[i].battleUnitRenderer.UpdateRenderState(BattleUnitRenderState.Selected); } //不可以被选中的 for (int i = 0; i < usedManualReleaseAnalysisor.distanceLimit.Count; ++i) { usedManualReleaseAnalysisor.distanceLimit[i].battleUnitRenderer.UpdateRenderState(BattleUnitRenderState.NotSelectable); } //队伍不合适的 for (int i = 0; i < usedManualReleaseAnalysisor.teamLimit.Count; ++i) { usedManualReleaseAnalysisor.teamLimit[i].battleUnitRenderer.UpdateRenderState(BattleUnitRenderState.Normal); } OnBattleUnitAndGridTouched_StateSkill_GridUnitTarget(battleUnit.mapGrid, null); } else { //需要指定范围,需要点击目标地块 } break; //以自身为中心的 case BattleSkillTargetType.Self: //可以被选中,标记为已被选中 for (int i = 0; i < usedManualReleaseAnalysisor.suitableUnits.Count; ++i) { usedManualReleaseAnalysisor.suitableUnits[i].battleUnitRenderer.UpdateRenderState(BattleUnitRenderState.Selected); } //不可以被选中的 for (int i = 0; i < usedManualReleaseAnalysisor.distanceLimit.Count; ++i) { usedManualReleaseAnalysisor.distanceLimit[i].battleUnitRenderer.UpdateRenderState(BattleUnitRenderState.NotSelectable); } //队伍不合适的 for (int i = 0; i < usedManualReleaseAnalysisor.teamLimit.Count; ++i) { usedManualReleaseAnalysisor.teamLimit[i].battleUnitRenderer.UpdateRenderState(BattleUnitRenderState.Normal); } skillOperationType = SkillOperationType.SurroundSelf; //省去一步点击操作,直接展示区域 OnBattleUnitAndGridTouched_StateSkill_SurroundSelf(battleUnit.mapGrid, battleUnit); break; default: break; } //切换操作状态 manualOperationState = ManualOperationState.Skill; UIViewManager.Instance.HideView(UIViewName.BattleFieldPlayerActOption); }
private void OnBattleUnitAndGridTouched(GridUnit gridTouched, BattleUnit battleUnitTouched) { //没有激活操作状态 if (manualOperationState == ManualOperationState.None) { //点中了战斗单位 if (battleUnitTouched != null) { //点中了等待手动操作的战斗单位 if (battleUnitTouched.battleUnitRenderer.Equals(manualBattleUnitRenderer)) { ShowManualActionList(); } else { UIViewManager.Instance.ShowView(UIViewName.BattleFieldUnitInfo, gridTouched, battleUnitTouched); } } //点中了地图 else { UIViewManager.Instance.ShowView(UIViewName.BattleFieldUnitInfo, gridTouched, battleUnitTouched); } } //选择移动状态 else if (manualOperationState == ManualOperationState.Move) { //点中了战斗单位 if (battleUnitTouched != null) { //点中了等待手动操作的战斗单位 if (battleUnitTouched.battleUnitRenderer.Equals(manualBattleUnitRenderer)) { //取消操作 manualOperationState = ManualOperationState.None; SetRangeHighlightActive(false, 0, 0, 0); } else { UIViewManager.Instance.ShowView(UIViewName.BattleFieldUnitInfo, gridTouched, battleUnitTouched); } } //点中了地图 else { if (gridTouched.GridType == GridType.Obstacle) { UIViewManager.Instance.ShowView(UIViewName.BattleFieldUnitInfo, gridTouched, battleUnitTouched); } else { //点击是否超出了范围 GridUnit fromGrid = manualBattleUnitRenderer.battleUnit.mapGrid; if (fromGrid.Distance(gridTouched) > manualBattleUnitRenderer.battleUnit.mobility) { Debug.Log("超出了移动半径!"); } else { bool result = MapNavigator.Instance.Navigate( battleField.battleMap, fromGrid, gridTouched, UtilityObjs.gridUnits, null, manualBattleUnitRenderer.battleUnit.mobility ); //判断是否可以到达(导航成功且可以可以到达) if (result && UtilityObjs.gridUnits[UtilityObjs.gridUnits.Count - 1].Equals(gridTouched)) { //可以到达 ManualMoveTo(gridTouched, UtilityObjs.gridUnits.ToArray()); UtilityObjs.gridUnits.Clear(); } else { //不可以到达 Debug.Log("点击位置不可到达!"); } } } } } //选择攻击目标状态 else if (manualOperationState == ManualOperationState.Skill) { //点中了战斗单位 if (battleUnitTouched != null) { //点中了等待手动操作的战斗单位 if (battleUnitTouched.battleUnitRenderer.Equals(manualBattleUnitRenderer)) { //取消操作 manualOperationState = ManualOperationState.None; SetRangeHighlightActive(false, 0, 0, 0); } else { //判断是否可以被攻击 if (manualBattleUnitRenderer.battleUnit.battleTeam.Equals(battleUnitTouched.battleTeam)) { //同一个队伍的 Debug.Log("攻击状态点中了同一个队伍的战斗单位:" + battleUnitTouched.ToString()); } else if (battleUnitTouched.mapGrid.Distance(manualBattleUnitRenderer.battleUnit.mapGrid) > 1) { Debug.Log("不在攻击范围:" + battleUnitTouched.ToString()); } else { ManualSkill(battleUnitTouched); } } } //点中了地图 else { Debug.Log("攻击状态点中了地图单位:" + gridTouched.ToString()); } } }