private GameObject[] sense(string p_type)
    {
        GameObject[] all_of_type = ObjectLogger.getByType(p_type);

        List <GameObject> in_arc = new List <GameObject>();

        foreach (GameObject ob in all_of_type)
        {
            if (ob == null)
            {
                continue;
            }

            Vector3 diff = ob.transform.position - gameObject.transform.position;

            if (Vector2Calc.checkAngle(diff, m_forward, m_sense_angle) && diff.magnitude <= m_sense_proximity)
            {
                in_arc.Add(ob);
            }
        }

        // foreach(GameObject ob in in_arc){
        //  Debug.DrawLine(gameObject.transform.position, ob.transform.position, Color.cyan, 1f);
        // }

        return(in_arc.ToArray());
    }
    void Start()
    {
        //Instantiate controller
        m_evolution = new DNABasedEvolutionManager <MindBodyDNDNA <ResourceFightDNCreature> >(
            new MindBodySpeciesDN <ResourceFightDNCreature>(0,
                                                            new TraitGenesSpecies(0, new HashSet <string> {
            "SPEED", "HEALTH", "DAMAGE", "ENERGY", "ATTACKSPEED"
        }, 1, new Range <float>(2f, 2f), 0, new Range <float>(0f, 0f)),
                                                            new DecisionNetSpecies <ResourceFightDNCreature>(0, ResourceFightDNCreature.getInputFactorys(), ResourceFightDNCreature.getOutputFactorys(), new Range <float>(0.8f, 1.2f))
                                                            ), 0.1f, 20, (float p_fitness) => { return(p_fitness * 0.95f); }, 1f
            );

        //Fill with 20 random
        for (int i = 0; i < 10; i++)
        {
            m_evolution.addRandom();
        }

        //Instantaite Interval and Listeners
        m_interval = new IntervalEventManager();

        for (int i = 0; i < 5; i++)
        {
            spawnResource();
        }

        for (int i = 0; i < 50; i++)
        {
            spawnCreature();
        }

        // spawnCreature();
        // spawnCreature();


        m_interval.addListener(5f, () => {
            for (int i = 0; i < 5; i++)
            {
                spawnCreature();
            }
        });

        m_interval.addListener(10f, () => {
            for (int i = 0; i < 1; i++)
            {
                spawnResource();
            }
        });

        m_interval.addListener(30f, () => {
            GameObject[] obs = ObjectLogger.getByType("CREATURE");

            foreach (GameObject ob in obs)
            {
                ob.GetComponent <ResourceFightDNCreature>().logFitness();
            }
        });
    }