Пример #1
0
    public BattleUnit FindTargetUnitByAbility(BattleUnit caster, Ability ability)
    {
        // 全屏技能
        if (ability.GetCastRange() <= 0)
        {
            return(caster);
        }

        BattleUnit          lastTarget       = caster.target;
        MultipleTargetsTeam targetTeam       = ability.GetTargetTeam();
        MultipleTargetsType targetDemageType = ability.GetDamageType();

        BattleUnit newTarget;

        if (lastTarget == null || lastTarget.IsUnSelectable())
        {
            BattleCamp        sourceCamp = caster.camp;
            List <BattleUnit> targets    = FindTargetUnits(caster, targetTeam, targetDemageType);
            newTarget = FilterTargetEntityFromList(caster, ability, targets);
        }
        else
        {
            newTarget = lastTarget;
        }
        return(newTarget);
    }
Пример #2
0
    // 寻找离指定施放者最近的单位
    public BattleUnit FindNearestEnemyUnit(BattleUnit caster)
    {
        BattleUnit targetEntity = null;
        // 找出敌对阵营
        BattleCamp enemyCamp = caster.enemyCamp;
        // 获取指定标记的所有单位
        List <BattleUnit> entities = BattleUnitManager.instance.GetEntities(enemyCamp);
        // 比较距离,找出最近单位
        float minDistance = Int32.MaxValue;

        foreach (BattleUnit entity in entities)
        {
            Vector2 distance = caster.Get2DPosition() - entity.Get2DPosition();
            if (distance.magnitude < minDistance)
            {
                targetEntity = entity;
                minDistance  = distance.magnitude;
            }
        }

        if (minDistance > caster.GetViewRange())
        {
            return(null);
        }

        return(targetEntity);
    }
Пример #3
0
    public HeroActor(BattleUnit battleEntity)
    {
        id   = battleEntity.GetUniqueID();
        camp = battleEntity.camp;

        isLoadDone        = false;
        this.battleEntity = battleEntity;
    }
Пример #4
0
 public List <BattleUnit> GetEntities(BattleCamp battleCamp)
 {
     m_Temps = new List <BattleUnit>(0);
     foreach (BattleUnit entity in m_Units)
     {
         if (entity.camp == battleCamp)
         {
             m_Temps.Add(entity);
         }
     }
     return(m_Temps);
 }
Пример #5
0
    public BattleUnit(int id, BattleCamp battleCamp, BattleProperty property) : base(id)
    {
        property.id    = id;
        camp           = battleCamp;
        m_Property     = property;
        abilities      = new List <Ability>();
        m_abilityMap   = new Dictionary <AbilityCastType, Ability>(4);
        m_HeroState    = HeroState.IDLE;
        m_BehaviorTree = GetBehaviorTree();
        m_DecisionTree = GetDecisionTree();

        m_DecisionWorkData = new BattleDecisionWorkingData(this);
        m_BehaviorWorkData = new BattleBehaviorWorkingData(this);

        InitAbilities();
    }
Пример #6
0
 public void AddToRightBattle(Player player)
 {
     if (player.myHeroName == GameManager.instance.myPlayer.myHeroName)
     {
         myBattleCamp = BattleCamp.Defenders;
     }
     defendersPlayer.Add(player);
     foreach (var item in rightBattleIcon)
     {
         if (item.sprite == emptyCell)
         {
             item.sprite = player.icon;
             item.transform.parent.gameObject.SetActive(true);
             break;
         }
     }
 }
Пример #7
0
    private List <BattleUnit> FindTargetUnits(BattleUnit caster, MultipleTargetsTeam targetTeam, MultipleTargetsType targetDemageType)
    {
        List <BattleUnit> targets = new List <BattleUnit>(0);

        // 根据阵营找对象
        BattleCamp sourceCamp = caster.camp;

        if (targetTeam == MultipleTargetsTeam.UNIT_TARGET_TEAM_FRIENDLY)
        {
            targetTeam = sourceCamp == BattleCamp.FRIENDLY ? MultipleTargetsTeam.UNIT_TARGET_TEAM_FRIENDLY : MultipleTargetsTeam.UNIT_TARGET_TEAM_ENEMY;
        }
        else if (targetTeam == MultipleTargetsTeam.UNIT_TARGET_TEAM_ENEMY)
        {
            targetTeam = sourceCamp == BattleCamp.FRIENDLY ? MultipleTargetsTeam.UNIT_TARGET_TEAM_ENEMY : MultipleTargetsTeam.UNIT_TARGET_TEAM_FRIENDLY;
        }

        switch (targetTeam)
        {
        case MultipleTargetsTeam.UNIT_TARGET_TEAM_ENEMY:
            InsertToTargetList(BattleUnitManager.instance.GetEntities(BattleCamp.ENEMY), targets);
            break;

        case MultipleTargetsTeam.UNIT_TARGET_TEAM_FRIENDLY:
            InsertToTargetList(BattleUnitManager.instance.GetEntities(BattleCamp.FRIENDLY), targets);
            break;

        case MultipleTargetsTeam.UNIT_TARGET_TEAM_BOTH:
            InsertToTargetList(BattleUnitManager.instance.GetEntities(BattleCamp.ENEMY), targets);
            InsertToTargetList(BattleUnitManager.instance.GetEntities(BattleCamp.FRIENDLY), targets);
            break;

        default:
            break;
        }
        return(targets);
    }
Пример #8
0
 public HeroUnit(int id, BattleCamp camp, BattleProperty property) : base(id, camp, property)
 {
 }