// Use this for initialization
    void Start()
    {
        m_rb      = gameObject.GetComponent <Rigidbody2D>();
        m_tm      = new TimeoutEventManager();
        m_actions = new PriorityList();

        m_renderer = gameObject.GetComponent <SpriteRenderer>();

        m_tm.addTimeout(lineFollowCONFIG.CreatureTimeAlive, () =>
        {
            die();
        });

        m_im = new IntervalEventManager();

        m_im.addListener(lineFollowCONFIG.CreatureDecisionLatency, () =>
        {
            m_actions.flush();
            //Flush actions, set neew behaviours
            set_behaviour_samples++;
            setBehaviours();
        });

        m_im.addListener(2f, () =>
        {
            // Debug.Log("Fit: " + fit_samples + ", Beh: " + set_behaviour_samples);
            fit_samples           = 0;
            set_behaviour_samples = 0;
        });

        m_im.addListener(lineFollowCONFIG.CreatureFitnessLatency, fitnessUpdate);
    }
Пример #2
0
    public void Initalize(Vector2 p_direction, float p_damage, GameObject p_shooter)
    {
        m_rb = gameObject.GetComponent <Rigidbody2D>();

        m_standard_velocity = p_direction * m_speed;
        m_damage            = p_damage;
        m_shooter           = p_shooter;

        ObjectLogger.log(gameObject, "BULLET");

        m_timeout = new TimeoutEventManager();

        m_timeout.addTimeout(2f, () => { ObjectLogger.unlog(gameObject, "BULLET"); Destroy(gameObject); });
    }
    private void gather()
    {
        //Get list of gatherable resources
        GameObject[] obs = sense("RESOURCE");

        List <GameObject> resources     = new List <GameObject>();
        Vector3           this_position = gameObject.transform.position;

        foreach (GameObject o in obs)
        {
            if (Vector2Calc.proximity(this_position, o.transform.position) < 1f)
            {
                resources.Add(o);
            }
        }

        //If there are none, return
        if (resources.Count == 0)
        {
            return;
        }

        //Get the closest resource in gather arc
        float      closeness  = float.PositiveInfinity;
        GameObject to_harvest = null;

        foreach (GameObject o in resources)
        {
            float proximity = Vector2Calc.proximity(this_position, o.transform.position);
            if (!(proximity < closeness))
            {
                continue;
            }
            closeness  = proximity;
            to_harvest = o;
        }

        //Gather the resource
        m_brain_stop         = true;
        m_rb.velocity        = Vector3.zero;
        m_rb.angularVelocity = 0;
        m_actions.flush();

        m_cooldowns.activate("GATHER", 0.5f);

        GameObject line = LineCreator.createLine(this_position + (Vector3Calc.fromVec2(m_forward) * 0.1f), to_harvest.transform.position, Color.green, 0.05f, 0.5f);

        Resource          harvesting  = to_harvest.GetComponent <Resource>();
        DIntervalListener energy_suck = () =>
        {
            float harvest_power = m_energy.Max - m_energy.Value;
            if (harvest_power > 10f)
            {
                harvest_power = 10f;
            }
            if (to_harvest != null)
            {
                m_energy.add(harvesting.collect(harvest_power));
            }
        };

        m_im.addListener(0.1f, energy_suck);

        m_tm.addTimeout(0.5f, () =>
        {
            m_im.removeListener(0.1f, energy_suck);
            m_brain_stop = false;
        });
    }