/// <summary> /// 查找对面目标列表 /// 对面打完,打旁边列,先左后右 /// <param name="sourceType">源的类型</param> /// <param name="sourceGrid">源的格子数据</param> /// <returns>找到的目标</returns> public ActorBevBase FindOpposite(ActorType sourceType, GridData sourceGrid) { List <ActorBevBase> findList = this.GetFindList(sourceType, EffectTargetType.Rival); if (findList == null || findList.Count == 0) { return(null); } ActorBevBase target = null; foreach (var tmpTarget in findList) { if (target == null) { target = tmpTarget; } else { // XGrid : 0 1 2 3 4 if (Mathf.Abs(tmpTarget.GridData.XGrid - sourceGrid.XGrid) <= Mathf.Abs(target.GridData.XGrid - sourceGrid.XGrid) && tmpTarget.GridData.XGrid <= target.GridData.XGrid && tmpTarget.GridData.ZGrid < target.GridData.ZGrid) { target = tmpTarget; } } } return(target); }
/// <summary> /// 出招 /// </summary> public void Moves(ActorBevBase target, Vector3 movesPosition) { Debug.Log("准备出招"); this.m_IsMoves = true; //这里需要做其他计算,得出是普通攻击还是技能或者其他什么什么的。。。 this.MoveToTarget(movesPosition, true); }
protected override List <ActorBevBase> FindTarget() { ActorBevBase target = this.FindTarget(this.Actor.GridData, FightMgr.Instance.GetOtherSideActor(this.Actor.Type)); if (target != null) { return(new List <ActorBevBase>() { target }); } return(null); }
/// <summary> /// 施放天气 /// </summary> private void CastWeatherSkill(ActorBevBase caster) { WeatherType?weather = caster.GetWeatherFromWeatherSkill; if (weather.HasValue) { Debug.Log("天气胜利者:" + caster.name); this.m_WeatherCaster = caster; this.SetWeather(weather.Value); } else { this.SetLevelWeather(); } }
private ActorBevBase FindTarget(GridData gridData, List <ActorBevBase> actorList) { byte minDistance = FightMgr.Instance.GetMaxMagnitudeDistance(); byte minIndex = FightMgr.Instance.GetMaxIndex(); ActorBevBase target = null; foreach (ActorBevBase actor in actorList) { byte distance = FightMgr.Instance.CalculateMagnitudeDistance(gridData, actor.GridData, true); if (distance < minDistance || (distance == minDistance && actor.Index < minIndex)) { target = actor; minIndex = target.Index; minDistance = distance; } } return(target); }
/// <summary> /// 查找属性最大的目标列表 /// </summary> /// <param name="sourceType">源的类型</param> /// <param name="count">查找数量</param> /// <param name="effectTarget">查找阵营</param> /// <param name="attribute">参照属性</param> /// <returns>找到的目标列表</returns> public List <ActorBevBase> FindMaxAttribute(ActorType sourceType, byte count, EffectTargetType effectTarget, AttributeType attribute) { List <ActorBevBase> findList = this.GetFindList(sourceType, effectTarget); if (findList == null || findList.Count == 0) { return(null); } if (findList.Count <= count) { return(findList); } List <ActorBevBase> targetList = new List <ActorBevBase>(); for (byte i = 0; i < count; i++) { ActorBevBase target = null; foreach (var tmpTarget in findList) { if (target == null) { target = tmpTarget; } else { if (tmpTarget.ActorLogicData.GetAttrbuteValueByType(attribute) > target.ActorLogicData.GetAttrbuteValueByType(attribute)) { target = tmpTarget; } else if (tmpTarget.ActorLogicData.GetAttrbuteValueByType(attribute) == target.ActorLogicData.GetAttrbuteValueByType(attribute) && tmpTarget.Index < target.Index) { target = tmpTarget; } } } findList.Remove(target); targetList.Add(target); } return(targetList); }
/// <summary> /// 查找随机目标列表 /// </summary> /// <param name="sourceType">源的类型</param> /// <param name="count">查找数量</param> /// <param name="effectTarget">查找阵营</param> /// <returns>找到的目标列表</returns> public List <ActorBevBase> FindRandom(ActorType sourceType, byte count, EffectTargetType effectTarget) { List <ActorBevBase> findList = this.GetFindList(sourceType, effectTarget); if (findList == null || findList.Count == 0) { return(null); } if (findList.Count <= count) { return(findList); } List <ActorBevBase> targetList = new List <ActorBevBase>(); for (byte i = 0; i < count; i++) { ActorBevBase target = findList[Random.Range(0, findList.Count)]; findList.Remove(target); targetList.Add(target); } return(targetList); }
/// <summary> /// 创建天气 /// </summary> private void CreateWeather() { List <ActorBevBase> weatherCasters = this.AllActorList.Where(a => a.HasWeatherSkill).ToList(); if (weatherCasters == null || weatherCasters.Count == 0) { //并没有天气技能 this.SetLevelWeather(); } else { foreach (var item in weatherCasters) { item.CastWeatherSkill(); item.RemoveWeatherSkill(); } ActorBevBase caster = null; if (weatherCasters.Count == 1) { caster = weatherCasters[0]; } else { float maxAttackSpeed = weatherCasters.Max(a => a.ActorLogicData.GetAttackSpeed()); List <ActorBevBase> maxSpeedActors = weatherCasters.Where(a => a.ActorLogicData.GetAttackSpeed() == maxAttackSpeed).ToList(); if (maxSpeedActors.Count == 1) { caster = maxSpeedActors[0]; } else { int fightRandomValueForWeatherActor_Index = Random.Range(0, maxSpeedActors.Count()); caster = maxSpeedActors[fightRandomValueForWeatherActor_Index]; } } this.CastWeatherSkill(caster); } }
public override void Init(ActorBevBase actor, SkillLogicDataBase data) { base.Init(actor, data); }
private Dictionary<AIStateType, StateBase> m_StateDic; //所有状态 #endregion Fields #region Constructors public StateMachine(ActorBevBase actorBev, ActorAIBase actorAI) { this.m_ActorBev = actorBev; this.m_ActorAI = actorAI; this.m_StateDic = new Dictionary<AIStateType, StateBase>(); }
public virtual void Init(ActorBevBase actor, SkillLogicDataBase data) { this.Actor = actor; }
/// <summary> /// 查找最远的目标列表 /// </summary> /// <param name="sourceType">源的类型</param> /// <param name="sourceGrid">源的格子数据</param> /// <param name="count">查找数量</param> /// <param name="effectTarget">查找阵营</param> /// <returns>找到的目标列表</returns> public List <ActorBevBase> FindFar(ActorType sourceType, GridData sourceGrid, byte count, EffectTargetType effectTarget) { List <ActorBevBase> findList = this.GetFindList(sourceType, effectTarget); if (findList == null || findList.Count == 0) { return(null); } if (findList.Count <= count) { return(findList); } List <ActorBevBase> targetList = new List <ActorBevBase>(); if (effectTarget == EffectTargetType.Rival) { for (byte i = 0; i < count; i++) { ActorBevBase target = null; foreach (var tmpTarget in findList) { if (target == null) { target = tmpTarget; } else { if (tmpTarget.GridData.ZGrid > target.GridData.ZGrid) { target = tmpTarget; } else if (tmpTarget.GridData.ZGrid == target.GridData.ZGrid && Mathf.Abs(tmpTarget.GridData.XGrid - sourceGrid.XGrid) <= Mathf.Abs(tmpTarget.GridData.XGrid - sourceGrid.XGrid) && tmpTarget.GridData.XGrid < target.GridData.XGrid) { target = tmpTarget; } } } findList.Remove(target); targetList.Add(target); } } else if (effectTarget == EffectTargetType.Friend) { for (byte i = 0; i < count; i++) { ActorBevBase target = null; byte maxDistance = byte.MaxValue; for (byte j = 0; j < findList.Count; j++) { ActorBevBase tmpTarget = findList[j]; byte distance = sourceGrid.CalculateDistanceMagnitude(tmpTarget.GridData); if (target == null) { target = tmpTarget; maxDistance = distance; } else { if (distance > maxDistance) { target = tmpTarget; maxDistance = distance; } else if (distance == maxDistance && tmpTarget.Index > target.Index) { target = tmpTarget; maxDistance = distance; } } } findList.Remove(target); targetList.Add(target); } } return(targetList); }
/// <summary> /// 搜索出手角色 /// </summary> /// <returns></returns> private bool SearchMovesActor(List <ActorBevBase> actorList) { this.m_CurMovesActor = this.GetMovesActor(actorList); return(this.m_CurMovesActor != null); }
public override void Init(ActorBevBase actor, SkillLogicDataBase logicData, SkillDataBase configData) { base.Init(actor, logicData, configData); this.m_ActiveSkillLogicData = (ActiveSkillLogicData)logicData; this.m_ActiveSkillData = (ActiveSkillData)configData; }
public StateBase(ActorBevBase actorBev, ActorAIBase actorAI) { this.actorBev = actorBev; this.actorAI = actorAI; }
public IdleState(ActorBevBase actorBev, ActorAIBase actorAI) : base(actorBev, actorAI) { this.AIState = AIStateType.Idle; }
public void SetActor(ActorBevBase actor) { this.m_ActorBev = actor; this.SetHasActor(true); }
public Vector3 GetMovesPosition(ActorBevBase targetBev) { return targetBev.MyTransform.position + this.GetMovesOffset(targetBev.Type); }
public override void Init(ActorBevBase actor, SkillLogicDataBase logicData, SkillDataBase configData) { base.Init(actor, logicData, configData); this.m_ActiveSkillLogicData = (ActiveSkillLogicData)logicData; this.m_ActiveSkillData = (ActiveSkillData)configData; }
public virtual void Init(ActorBevBase actor, SkillLogicDataBase logicData, SkillDataBase configData) { this.Actor = actor; }
public void SetActor(ActorBevBase actor) { this.m_ActorBev = actor; this.SetHasActor(true); }
protected override List <ActorBevBase> FindTarget() { if (this.m_ActiveSkillData.EffectTarget == EffectTargetType.Self) { return new List <ActorBevBase>() { this.Actor } } ; if (this.m_ActiveSkillData.SkillRange == SkillRangeType.All) { return(FightMgr.Instance.FindAll(this.Actor.Type, this.m_ActiveSkillData.EffectTarget)); } List <ActorBevBase> selectionTargetList = new List <ActorBevBase>(); switch (this.m_ActiveSkillData.SelectionTarget) { case SelectionTargetType.Near: selectionTargetList = FightMgr.Instance.FindNear(this.Actor.Type, this.Actor.GridData, this.m_ActiveSkillData.SelectionCount, this.m_ActiveSkillData.EffectTarget); break; case SelectionTargetType.Far: selectionTargetList = FightMgr.Instance.FindFar(this.Actor.Type, this.Actor.GridData, this.m_ActiveSkillData.SelectionCount, this.m_ActiveSkillData.EffectTarget); break; case SelectionTargetType.MinAttribute: selectionTargetList = FightMgr.Instance.FindMinAttribute(this.Actor.Type, this.m_ActiveSkillData.SelectionCount, this.m_ActiveSkillData.EffectTarget, this.m_ActiveSkillData.SelectionTargetRefrenceAttribute.Value); break; case SelectionTargetType.MaxAttribute: selectionTargetList = FightMgr.Instance.FindMaxAttribute(this.Actor.Type, this.m_ActiveSkillData.SelectionCount, this.m_ActiveSkillData.EffectTarget, this.m_ActiveSkillData.SelectionTargetRefrenceAttribute.Value); break; case SelectionTargetType.Max: //2015.12.14 02:28-log:写到这里 switch (this.m_ActiveSkillData.SkillRange) { case SkillRangeType.Rect: return(FightMgr.Instance.FindMaxRect(this.Actor.Type, this.m_ActiveSkillData.EffectTarget, this.m_ActiveSkillData.GetRectWidth(), this.m_ActiveSkillData.GetRectHeight())); case SkillRangeType.Cross: return(FightMgr.Instance.FindMaxCross(this.Actor.Type, this.m_ActiveSkillData.EffectTarget, this.m_ActiveSkillData.GetCrossTop(), this.m_ActiveSkillData.GetCrossBottom(), this.m_ActiveSkillData.GetCrossLeft(), this.m_ActiveSkillData.GetCrossRight())); } break; case SelectionTargetType.Opposite: //2015.12.03 02:57-log:写到这里 ActorBevBase target = FightMgr.Instance.FindOpposite(this.Actor.Type, this.Actor.GridData); selectionTargetList.Add(target); break; case SelectionTargetType.Random: selectionTargetList = FightMgr.Instance.FindRandom(this.Actor.Type, this.m_ActiveSkillData.SelectionCount, this.m_ActiveSkillData.EffectTarget); break; case SelectionTargetType.Field: selectionTargetList = FightMgr.Instance.FindField(this.Actor.Type, this.m_ActiveSkillData.SelectionCount, this.m_ActiveSkillData.EffectTarget, this.m_ActiveSkillData.SelectionTargetRefrenceAttribute.Value, this.m_ActiveSkillData.SelectionTargetRefrenceFieldValue); break; } if (selectionTargetList == null || selectionTargetList.Count == 0) { return(null); } //2015.12.14 02:32-log:写到这里 if (this.m_ActiveSkillData.SkillRange == SkillRangeType.Single) { return(selectionTargetList); } switch (this.m_ActiveSkillData.SkillRange) { case SkillRangeType.Rect: return(FightMgr.Instance.FindTargetWithRect(selectionTargetList, this.m_ActiveSkillData.GetRectWidth(), this.m_ActiveSkillData.GetRectHeight())); case SkillRangeType.Cross: return(FightMgr.Instance.FindTargetWithCross(selectionTargetList, this.m_ActiveSkillData.GetCrossTop(), this.m_ActiveSkillData.GetCrossBottom(), this.m_ActiveSkillData.GetCrossLeft(), this.m_ActiveSkillData.GetCrossRight())); } return(null); } #endregion }
public virtual void Init(ActorBevBase actor, SkillLogicDataBase logicData, SkillDataBase configData) { this.Actor = actor; }
public StateMachine(ActorBevBase actorBev, ActorAIBase actorAI) { this.m_ActorBev = actorBev; this.m_ActorAI = actorAI; this.m_StateDic = new Dictionary <AIStateType, StateBase>(); }
private void ActorMovesEnd() { this.m_CurMovesActor = null; this.Rounding(); }
public HurtState(ActorBevBase actorBev, ActorAIBase actorAI) : base(actorBev, actorAI) { this.AIState = AIStateType.Hurt; }
public AttackState(ActorBevBase actorBev, ActorAIBase actorAI) : base(actorBev, actorAI) { this.AIState = AIStateType.Attack; }
public void InitStateMachine(ActorBevBase actorBev) { this.m_StateMachine = new StateMachine(actorBev, this); }
private bool EnableMoves(ActorBevBase actor) { return(!(actor.IsDead || actor.IsMoves())); }
public DeadState(ActorBevBase actorBev, ActorAIBase actorAI) : base(actorBev, actorAI) { this.AIState = AIStateType.Dead; }
public override void Init(ActorBevBase actor, SkillLogicDataBase data) { base.Init(actor, data); this.m_WeatherSkillLogicData = (WeatherSkillLogicData)data; }
public override void Init(ActorBevBase actor, SkillLogicDataBase data) { base.Init(actor, data); }
public override void Init(ActorBevBase actor, SkillLogicDataBase data) { base.Init(actor, data); this.m_WeatherSkillLogicData = (WeatherSkillLogicData)data; }
public StateBase(ActorBevBase actorBev, ActorAIBase actorAI) { this.actorBev = actorBev; this.actorAI = actorAI; }
/// <summary> /// 出招 /// </summary> public void Moves(ActorBevBase target, Vector3 movesPosition) { //Debug.Log("准备出招"); this.m_TargetList.Add(target); //这里需要做其他计算,得出是普通攻击还是技能或者其他什么什么的。。。 this.MoveToTarget(movesPosition, true); this.m_IsMoves = true; }
public virtual void Init(ActorBevBase actor, SkillLogicDataBase data) { this.Actor = actor; }
public Vector3 GetMovesPosition(ActorBevBase targetBev) { return(targetBev.MyTransform.position + this.GetMovesOffset(targetBev.Type)); }
public void InitStateMachine(ActorBevBase actorBev) { this.m_StateMachine = new StateMachine(actorBev,this); }
public AttackState(ActorBevBase actorBev, ActorAIBase actorAI) : base(actorBev, actorAI) { this.AIState = AIStateType.Attack; }
public IdleState(ActorBevBase actorBev, ActorAIBase actorAI) : base(actorBev, actorAI) { this.AIState = AIStateType.Idle; }