Пример #1
0
    public void CheckHitList()
    {
        float mCurClipTime = mOwner.CurClipTime;
           for (int i = 0; i < hitList.Count; i++)
           {
           AiClipHitData hitData = hitList[i];
           //只计算在攻击时间内的
           if (mCurClipTime >= hitData.startTime && mCurClipTime <= hitData.startTime + hitData.lastTime)
           {
               AIHitUnit hitUnit=new AIHitUnit();
               hitUnit.Init(hitData,mOwner);
               hitUnits.Add(hitUnit);
               hitList.Remove(hitData);

           }
           }
    }
Пример #2
0
    public void CheckHitList()
    {
        float mCurClipTime = mOwner.CurClipTime;

        for (int i = 0; i < hitList.Count; i++)
        {
            AiClipHitData hitData = hitList[i];
            //只计算在攻击时间内的
            if (mCurClipTime >= hitData.startTime && mCurClipTime <= hitData.startTime + hitData.lastTime)
            {
                AIHitUnit hitUnit = new AIHitUnit();
                hitUnit.Init(hitData, mOwner);
                hitUnits.Add(hitUnit);
                hitList.Remove(hitData);
            }
        }
    }
Пример #3
0
 void UpdateHitUnits()
 {
     for (int i = 0; i < hitUnits.Count; i++)
     {
         AIHitUnit hitUnit = hitUnits[i];
         if (hitUnit.ShouldDie)
         {
             hitUnit.Destroy();
             hitUnits.Remove(hitUnit);
             break;
         }
         else
         {
             hitUnit.OnUpdate(Time.deltaTime);
         }
     }
 }
Пример #4
0
    public bool CheckHit(AIUnit attacker, AIHitUnit hitUnit)
    {
        if (AIMgr.IsAntiCamp(attacker, this) == false)
        {
            return(false);
        }
        bool          isHit    = false;
        AiClipHitData hitData  = hitUnit.mHitData;
        HitCheckBase  hitCheck = hitData.hitCheckData;

        switch (hitData.hitCheckData.shapeType)
        {
        case EHitCheckShape.Capsule:
        case EHitCheckShape.Cylinder:
        {
            if (MathTool.CheckCylinderHit(hitUnit.pos, hitData.hitCheckData.height, hitData.hitCheckData.radius, Controller))
            {
                isHit = true;
            }
            break;
        }

        case EHitCheckShape.Fan:
        {
            if (MathTool.CheckFanHit(hitUnit.pos, hitCheck.height, hitCheck.radius, hitCheck.angle, hitUnit.forwardDir, Controller))
            {
                isHit = true;
            }
            break;
        }
        }

        if (isHit)
        {
            OnGetHit();
        }

        return(isHit);
    }
Пример #5
0
    public bool CheckHit(AIUnit attacker, AIHitUnit hitUnit)
    {
        if (AIMgr.IsAntiCamp(attacker, this) == false)
        {
            return false;
        }
        bool isHit = false;
        AiClipHitData hitData = hitUnit.mHitData;
        HitCheckBase hitCheck = hitData.hitCheckData;
        switch (hitData.hitCheckData.shapeType)
        {
            case EHitCheckShape.Capsule:
            case EHitCheckShape.Cylinder:
                {
                    if (MathTool.CheckCylinderHit(hitUnit.pos, hitData.hitCheckData.height, hitData.hitCheckData.radius, Controller))
                    {
                        isHit = true;
                    }
                    break;
                }
            case EHitCheckShape.Fan:
                {
                    if (MathTool.CheckFanHit(hitUnit.pos, hitCheck.height, hitCheck.radius, hitCheck.angle, hitUnit.forwardDir, Controller))
                    {
                        isHit = true;
                    }
                    break;
                }
        }

        if (isHit)
        {
            OnGetHit();
        }

        return isHit;
    }