Пример #1
0
    /// <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);
    }
Пример #2
0
 /// <summary>
 /// 出招
 /// </summary>
 public void Moves(ActorBevBase target, Vector3 movesPosition)
 {
     Debug.Log("准备出招");
     this.m_IsMoves = true;
     //这里需要做其他计算,得出是普通攻击还是技能或者其他什么什么的。。。
     this.MoveToTarget(movesPosition, true);
 }
Пример #3
0
    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);
    }
Пример #4
0
    /// <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();
        }
    }
Пример #5
0
    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);
    }
Пример #6
0
    /// <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);
    }
Пример #7
0
    /// <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);
    }
Пример #8
0
    /// <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);
        }
    }
Пример #9
0
 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>();
    }
Пример #11
0
 public virtual void Init(ActorBevBase actor, SkillLogicDataBase data)
 {
     this.Actor = actor;
 }
Пример #12
0
    /// <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);
    }
Пример #13
0
 /// <summary>
 /// 搜索出手角色
 /// </summary>
 /// <returns></returns>
 private bool SearchMovesActor(List <ActorBevBase> actorList)
 {
     this.m_CurMovesActor = this.GetMovesActor(actorList);
     return(this.m_CurMovesActor != null);
 }
Пример #14
0
 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;
 }
Пример #17
0
 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);
 }
Пример #19
0
 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;
 }
Пример #20
0
 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);
 }
Пример #22
0
    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
}
Пример #23
0
 public virtual void Init(ActorBevBase actor, SkillLogicDataBase logicData, SkillDataBase configData)
 {
     this.Actor = actor;
 }
Пример #24
0
 public StateMachine(ActorBevBase actorBev, ActorAIBase actorAI)
 {
     this.m_ActorBev = actorBev;
     this.m_ActorAI  = actorAI;
     this.m_StateDic = new Dictionary <AIStateType, StateBase>();
 }
Пример #25
0
 private void ActorMovesEnd()
 {
     this.m_CurMovesActor = null;
     this.Rounding();
 }
Пример #26
0
 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;
 }
Пример #28
0
 public void InitStateMachine(ActorBevBase actorBev)
 {
     this.m_StateMachine = new StateMachine(actorBev, this);
 }
Пример #29
0
 private bool EnableMoves(ActorBevBase actor)
 {
     return(!(actor.IsDead || actor.IsMoves()));
 }
Пример #30
0
 public DeadState(ActorBevBase actorBev, ActorAIBase actorAI) :
     base(actorBev, actorAI)
 {
     this.AIState = AIStateType.Dead;
 }
Пример #31
0
 public override void Init(ActorBevBase actor, SkillLogicDataBase data)
 {
     base.Init(actor, data);
     this.m_WeatherSkillLogicData = (WeatherSkillLogicData)data;
 }
Пример #32
0
 public override void Init(ActorBevBase actor, SkillLogicDataBase data)
 {
     base.Init(actor, data);
 }
Пример #33
0
 public override void Init(ActorBevBase actor, SkillLogicDataBase data)
 {
     base.Init(actor, data);
     this.m_WeatherSkillLogicData = (WeatherSkillLogicData)data;
 }
Пример #34
0
 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;
 }
Пример #36
0
 public virtual void Init(ActorBevBase actor, SkillLogicDataBase data)
 {
     this.Actor = actor;
 }
Пример #37
0
 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);
 }
Пример #39
0
 public AttackState(ActorBevBase actorBev, ActorAIBase actorAI) :
     base(actorBev, actorAI)
 {
     this.AIState = AIStateType.Attack;
 }
Пример #40
0
 public IdleState(ActorBevBase actorBev, ActorAIBase actorAI) :
     base(actorBev, actorAI)
 {
     this.AIState = AIStateType.Idle;
 }