예제 #1
0
    /// <summary>
    /// Checks the idle mode
    /// </summary>
    private void CheckIdle()
    {
        if (CheckForEnemys())
        {
            DataCubeStatus = DataCubeMode.RunFromEnemys;
            return;
        }

        if (m_CurrentProcess < EnitiyManager.instance.DataCubeSettings.m_MaxProcess * 0.70f)
        {
            DataCubeStatus = DataCubeMode.SearchForProcessorTree;
            return;
        }

        if (m_CurrentMB < EnitiyManager.instance.DataCubeSettings.m_MaxMb * 0.70f)
        {
            DataCubeStatus = DataCubeMode.SearchForMemory;
            return;
        }

        if (m_IsReadyForMating)
        {
            CheckForMating();
        }
    }
예제 #2
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.DataCubeSettings.SearchForMemoryDistance * 0.5f)
         {
             MemorySlot _memorySlot = m_Target.GetComponent <MemorySlot>();
             if (_memorySlot != null)
             {
                 if (_memorySlot.CanFarm)
                 {
                     float _futureMb = m_CurrentMB + _memorySlot.FarmMB(3);
                     if (_futureMb >= EnitiyManager.instance.DataCubeSettings.m_MaxMb)
                     {
                         m_CurrentMB    = EnitiyManager.instance.DataCubeSettings.m_MaxMb;
                         DataCubeStatus = DataCubeMode.Idle;
                     }
                     else
                     {
                         m_CurrentMB = _futureMb;
                     }
                     m_DataCubeUI.UpdateUi();
                 }
                 else
                 {
                     DataCubeStatus = DataCubeMode.Idle;
                 }
             }
             else
             {
                 DataCubeStatus = DataCubeMode.Idle;
                 m_Target       = null;
             }
         }
     }
     else
     {
         Collider2D[] collider2Ds = Physics2D.OverlapCircleAll(transform.position, EnitiyManager.instance.DataCubeSettings.SearchForMemoryDistance, EnitiyManager.instance.DataCubeSettings.MemoryLayerMask);
         if (collider2Ds.Length > 0)
         {
             if (collider2Ds[0].isActiveAndEnabled)
             {
                 m_Target = collider2Ds[0].gameObject;
             }
         }
     }
 }
예제 #3
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.DataCubeSettings.MatingDistanceNeeded)
         {
             DataCubeBrain dataCubebrain = m_Target.GetComponent <DataCubeBrain>();
             if (dataCubebrain != null)
             {
                 if (dataCubebrain.ReqeustMating(this))
                 {
                     DataCubeBrain[] parents = new DataCubeBrain[]
                     {
                         this,
                         dataCubebrain,
                     };
                     EnitiyManager.instance.MakeaDataCube(parents);
                     DataCubeStatus     = DataCubeMode.Idle;
                     m_Target           = null;
                     m_IsReadyForMating = false;
                     m_LifeTime         = 0;
                     m_DataCubeUI.UpdateUi();
                 }
                 else
                 {
                     m_Target       = null;
                     DataCubeStatus = DataCubeMode.Idle;
                 }
             }
         }
     }
     else
     {
         Collider2D[] colliders = Physics2D.OverlapCircleAll(transform.position, EnitiyManager.instance.DataCubeSettings.MatingDistanceNeeded, EnitiyManager.instance.DataCubeSettings.MatingLayerMask);
         if (colliders.Length > 0)
         {
             if (colliders[0].isActiveAndEnabled)
             {
                 m_Target = colliders[0].gameObject;
             }
         }
     }
 }
예제 #4
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.4f)
         {
             ProcessorOrb processorOrb = m_Target.GetComponent <ProcessorOrb>();
             if (processorOrb != null)
             {
                 float _futureProcess = m_CurrentProcess + processorOrb.FarmOrb(3);
                 if (_futureProcess > EnitiyManager.instance.DataCubeSettings.m_MaxProcess)
                 {
                     m_CurrentProcess = EnitiyManager.instance.DataCubeSettings.m_MaxProcess;
                     DataCubeStatus   = DataCubeMode.Idle;
                 }
                 else
                 {
                     m_CurrentProcess = _futureProcess;
                 }
                 m_DataCubeUI.UpdateUi();
             }
             else
             {
                 m_Target = null;
             }
         }
     }
     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;
             }
         }
     }
 }
예제 #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 * 2 > EnitiyManager.instance.DataCubeSettings.RunFromEnemyDistance)
         {
             DataCubeStatus = DataCubeMode.Idle;
         }
     }
     else
     {
         ViriusBrain[] viriusBrains = Support.CheckForNearbyObjects <ViriusBrain>(transform.position, EnitiyManager.instance.DataCubeSettings.RunFromEnemyDistance);
         if (viriusBrains != null)
         {
             if (viriusBrains.Length > 0)
             {
                 m_Target = viriusBrains[0].gameObject;
                 UpdateDataCubeBehavoir();
             }
         }
     }
 }