/// <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(); } }
/// <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; } } } }
/// <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; } } } }
/// <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; } } } }
/// <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(); } } } }