Пример #1
0
    /// <summary>
    /// Checks the idle mode
    /// </summary>
    private void CheckIdle()
    {
        if (CheckForEnemys())
        {
            ViriusStatus = ViriusMode.RunFromEnemys;
            return;
        }

        if (m_CurrentProcess < EnitiyManager.instance.ViriusSettings.m_MaxProcess * 0.50f)
        {
            ViriusStatus = ViriusMode.SearchForProcessorTree;
            return;
        }

        if (m_CurrentMB < EnitiyManager.instance.ViriusSettings.m_MaxMb * 0.30f)
        {
            ViriusStatus = ViriusMode.HuntForMemory;
            return;
        }

        if (m_IsReadyForMating)
        {
            CheckForMating();
        }
    }
Пример #2
0
 /// <summary>
 /// Checks the mating mode
 /// </summary>
 private void CheckForMating()
 {
     if (m_Target != null)
     {
         SetQuickBehavoir(BehaviorEnum.Seek);
         float _distance = Vector3.Distance(transform.position, m_Target.transform.position);
         if (_distance < EnitiyManager.instance.ViriusSettings.MatingDistanceNeeded)
         {
             ViriusBrain _virusBrain = m_Target.GetComponent <ViriusBrain>();
             if (_virusBrain != null)
             {
                 if (_virusBrain.ReqeustMating(this))
                 {
                     ViriusBrain[] parents = new ViriusBrain[]
                     {
                         this,
                         _virusBrain,
                     };
                     EnitiyManager.instance.MakeVirius(parents);
                     ViriusStatus       = ViriusMode.Idle;
                     m_Target           = null;
                     m_IsReadyForMating = false;
                     m_LifeTime         = 0;
                     m_VirusUI.UpdateUi();
                 }
                 else
                 {
                     ViriusStatus = ViriusMode.Idle;
                     m_Target     = null;
                 }
             }
             else
             {
                 m_Target = null;
             }
         }
     }
     else
     {
         Collider2D[] colliders = Physics2D.OverlapCircleAll(transform.position, EnitiyManager.instance.ViriusSettings.MatingDistanceNeeded, EnitiyManager.instance.ViriusSettings.MatingLayerMask);
         if (colliders.Length > 0)
         {
             if (colliders[0].isActiveAndEnabled)
             {
                 m_Target = colliders[0].gameObject;
             }
         }
     }
 }
Пример #3
0
 /// <summary>
 /// Checks SearchingForProssecorTreeMode
 /// </summary>
 private void CheckForProssecor()
 {
     if (m_Target != null)
     {
         SetQuickBehavoir(BehaviorEnum.Seek);
         float distance = Vector3.Distance(transform.position, m_Target.transform.position);
         if (distance < EnitiyManager.instance.DataCubeSettings.SearchForProssecorTreeDistance * 0.2f)
         {
             ProcessorOrb processorOrb = m_Target.GetComponent <ProcessorOrb>();
             if (processorOrb != null)
             {
                 float _futureProcess = m_CurrentProcess + processorOrb.FarmOrb(6);
                 if (_futureProcess > EnitiyManager.instance.DataCubeSettings.m_MaxProcess)
                 {
                     m_CurrentProcess = EnitiyManager.instance.DataCubeSettings.m_MaxProcess;
                     ViriusStatus     = ViriusMode.Idle;
                     m_Target         = null;
                 }
                 else
                 {
                     m_CurrentProcess = _futureProcess;
                 }
                 m_VirusUI.UpdateUi();
             }
         }
         else
         {
             ViriusStatus = ViriusMode.Idle;
         }
     }
     else
     {
         Collider2D[] collider2Ds = Physics2D.OverlapCircleAll(transform.position, EnitiyManager.instance.DataCubeSettings.SearchForProssecorTreeDistance, EnitiyManager.instance.DataCubeSettings.ProcessTreeLayerMask);
         if (collider2Ds.Length > 0)
         {
             if (collider2Ds[0].isActiveAndEnabled)
             {
                 m_Target = collider2Ds[0].GetComponent <ProcessorTree>().GetClosestOrb(transform.position).gameObject;
             }
         }
     }
 }
Пример #4
0
 /// <summary>
 /// Checks SearchingForMemoryMode
 /// </summary>
 private void CheckSearchForMemory()
 {
     if (m_Target != null)
     {
         SetQuickBehavoir(BehaviorEnum.Seek);
         float distance = Vector3.Distance(transform.position, m_Target.transform.position);
         if (distance < EnitiyManager.instance.ViriusSettings.HuntForMemoryDistance * 0.1f)
         {
             DataCubeBrain dataCubeBrain = m_Target.GetComponent <DataCubeBrain>();
             if (dataCubeBrain != null)
             {
                 float futuremb = m_CurrentMB + dataCubeBrain.StealMB(3);
                 if (futuremb > EnitiyManager.instance.ViriusSettings.m_MaxMb)
                 {
                     m_CurrentMB  = EnitiyManager.instance.ViriusSettings.m_MaxMb;
                     ViriusStatus = ViriusMode.Idle;
                     m_Target     = null;
                     m_VirusUI.UpdateUi();
                     return;
                 }
                 m_CurrentMB = futuremb;
                 m_VirusUI.UpdateUi();
             }
             else
             {
                 m_Target = null;
             }
         }
     }
     else
     {
         Collider2D[] collider2Ds = Physics2D.OverlapCircleAll(transform.position, EnitiyManager.instance.ViriusSettings.HuntForMemoryDistance, EnitiyManager.instance.ViriusSettings.MemoryLayerMask);
         if (collider2Ds.Length > 0)
         {
             if (collider2Ds[0].gameObject.activeSelf)
             {
                 m_Target = collider2Ds[0].gameObject;
             }
         }
     }
 }
Пример #5
0
 /// <summary>
 /// Checks Run from enemy
 /// </summary>
 private void RunFormEnemy()
 {
     if (m_Target != null)
     {
         float _distance = Vector3.Distance(transform.position, m_Target.transform.position);
         if (_distance > EnitiyManager.instance.DataCubeSettings.RunFromEnemyDistance)
         {
             ViriusStatus = ViriusMode.Idle;
         }
         UpdateDataCubeBehavoir();
     }
     else
     {
         ViriusBrain[] viriusBrains = Support.CheckForNearbyObjects <ViriusBrain>(transform.position, EnitiyManager.instance.DataCubeSettings.RunFromEnemyDistance);
         if (viriusBrains.Length > 0)
         {
             m_Target = viriusBrains[0].gameObject;
             UpdateDataCubeBehavoir();
         }
     }
 }