示例#1
0
    public void MakeaDataCube(DataCubeBrain[] dataCubebrains)
    {
        DataCubesBorn += 1;
        PoolableObject poolableObject = m_DataCubePool.GetObject();

        poolableObject.SpawnObject(dataCubebrains[0].transform.position);
        DataCubeBrain dataCubebrain = poolableObject.GetComponent <DataCubeBrain>();

        dataCubebrain.Born(dataCubebrains);
        m_AliveDataCubes.Add(dataCubebrain);
    }
示例#2
0
    private void StartPools()
    {
        m_DataCubePool = gameObject.AddComponent <ObjectPool>();
        m_DataCubePool.BeginPool(m_DataCubePrefab, m_DataCubesToSpawn, null);

        m_ViriusPool = gameObject.AddComponent <ObjectPool>();
        m_ViriusPool.BeginPool(m_ViriusPrefab, m_ViriusToSpawn, transform);

        m_MemorySlotPool = gameObject.AddComponent <ObjectPool>();
        m_MemorySlotPool.BeginPool(m_MemorySlotPrefab, 10, transform);

        m_ProcessorTreePrefabPool = gameObject.AddComponent <ObjectPool>();
        m_ProcessorTreePrefabPool.BeginPool(m_ProcessorTreePrefab, 10, null);

        m_GarbargeCollectorPool = gameObject.AddComponent <ObjectPool>();
        m_GarbargeCollectorPool.BeginPool(m_GarbargeCollecterPrefab, m_CarbargeCollectersToSpawn, transform);

        m_AliveDataCubes = new List <DataCubeBrain>();
        m_AliveVirius    = new List <ViriusBrain>();

        for (int i = 0; i < m_DataCubesToSpawn; i++)
        {
            PoolableObject _obj = m_DataCubePool.GetObject();
            _obj.SpawnObject(GetRandomPos());
            DataCubeBrain dataBrain = _obj.GetComponent <DataCubeBrain>();
            dataBrain.SetRandomStats();
            m_AliveDataCubes.Add(dataBrain);
        }
        CalculateAliveDC();

        for (int i = 0; i < m_ViriusToSpawn; i++)
        {
            PoolableObject _obj = m_ViriusPool.GetObject();
            _obj.SpawnObject(GetRandomPos());
            ViriusBrain virusbrain = _obj.GetComponent <ViriusBrain>();
            virusbrain.SetRandomStats();
            m_AliveVirius.Add(virusbrain);
        }

        for (int i = 0; i < m_CarbargeCollectersToSpawn; i++)
        {
            PoolableObject _obj = m_GarbargeCollectorPool.GetObject();
            _obj.SpawnObject(GetRandomPos());
        }
        int ammount = Mathf.RoundToInt(m_DataCubesToSpawn * 0.50f);

        for (int i = 0; i < ammount; i++)
        {
            PoolableObject _obj = m_ProcessorTreePrefabPool.GetObject();
            _obj.SpawnObject(GetRandomPos());
        }

        StartCoroutine(SpawnMemorySlot());
    }
示例#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>
 /// If want the mate
 /// </summary>
 /// <param name="dataCubebrain"></param>
 /// <returns></returns>
 public bool ReqeustMating(DataCubeBrain dataCubebrain)
 {
     if (gameObject.activeSelf)
     {
         if (m_IsReadyForMating)
         {
             bool Type     = dataCubebrain.DataCube == DataCube;
             bool _mb      = dataCubebrain.m_CurrentMB >= m_MatingData.NeededCurrentMB;
             bool _Process = dataCubebrain.m_CurrentProcess >= m_MatingData.NeededProcess;
             if (_mb == _Process == Type)
             {
                 m_IsReadyForMating = false;
                 m_LifeTime         = 0;
                 m_DataCubeUI.UpdateUi();
                 return(true);
             }
         }
     }
     return(false);
 }
示例#5
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;
             }
         }
     }
 }
示例#6
0
    /// <summary>
    /// Checks if there are any Prey close
    /// </summary>
    /// <returns></returns>
    private GameObject CheckForPrey()
    {
        Collider2D[] _Cols = Physics2D.OverlapCircleAll(transform.position, EnitiyManager.instance.GarbargeCollectorSettings.HuntRange, EnitiyManager.instance.GarbargeCollectorSettings.EnemyLayerMask);
        if (_Cols.Length > 0)
        {
            ViriusBrain viriusBrain = _Cols[0].GetComponent <ViriusBrain>();
            if (viriusBrain != null)
            {
                return(viriusBrain.gameObject);
            }

            DataCubeBrain dataCubeBrain = _Cols[0].GetComponent <DataCubeBrain>();
            if (dataCubeBrain != null)
            {
                if (dataCubeBrain.m_CurrentMB <= EnitiyManager.instance.GarbargeCollectorSettings.NeededMbToHunt)
                {
                    return(dataCubeBrain.gameObject);
                }
            }
        }
        return(null);
    }
示例#7
0
 public void SetBrain(DataCubeBrain dataCubeBrain)
 {
     m_DataCubeBrain = dataCubeBrain;
     UpdateUi();
 }