Exemple #1
0
    void Start()
    {
        Cs = GameObject.Find("Controls").GetComponent <ControlsScript>();
        gameObject.GetComponent <Transform>().position = new Vector3(gameObject.GetComponent <Transform>().position.x, Cs.CharacterPlane, gameObject.GetComponent <Transform>().position.z);
        prb = gameObject.GetComponent <Rigidbody>();
        pt  = gameObject.GetComponent <Transform>();
        GameObject.Find("Tribename").GetComponent <Text>().text = PlayerPrefs.GetString("Name");
        tribe    = GameObject.Find("Tribe").GetComponent <TribeScript>();
        tribePos = tribe.GetComponent <Transform>();
        EMS      = GameObject.Find("EventManager").GetComponent <EventManagerScript>();
        if (age > 15)
        {
            tribe.TrbAdults++;
        }
        else
        {
            tribe.TrbYoungs++;
        }
        tribe.TrbUnity += moral;
        tribe.TrbRank  += exp;

        //add ? or ratio ? or more complex ? add for now.
        if (endu + speed + percept + social > 10)
        {
            //gatherer
            tribe.TrbGather.Add(gameObject);
            if (available == true)
            {
                EMS.Gatherers_Available.Add(this);
            }
            else
            {
                EMS.Gatherers_Unavailable.Add(this);
            }
        }
    }
    void Update()
    {
        //--------------------------------------------------------------------- To debug : start inside collider makes the gatherzone blocked or maybe because sphere collider ???? AND debug : remove event when done, so as to not overload the list. ---------------------------------------------------//
        if (lastday < Cs.TS.savedays)
        {
            // trigger event if the time is right
            foreach (EventStruct ES in EventsTracked)
            {
                // go gather
                if ((ES.inUse == false) && (ES.Zone.capacity > 0) && (ES.isInRange == true) && (ES.nextStart <= lastday) && (ES.type == "Gather") && (Gatherers_Available.Count > 0))
                {
                    Debug.Log("start using");
                    ES.inUse          = true;
                    ES.Zone.isUsed    = true;
                    ES.Char           = Gatherers_Available[0];
                    ES.Char.available = false;

                    Vector3 target = ES.Zone.gameObject.GetComponent <Transform>().position;
                    target.y          = Cs.CharacterPlane;
                    ES.Char.targetHit = target;

                    ES.Char.GetComponent <SpriteRenderer>().enabled = true;

                    Gatherers_Unavailable.Add(Gatherers_Available[0]);
                    Gatherers_Available.RemoveAt(0);


                    Logger.Add_To_Log("Sending : " + ES.Char.pname + " to " + ES.Zone.type + " at " + ES.Zone.name);
                }
                // go back to tribe
                else if ((ES.inUse) && (ES.isDone == true))
                {
                    ES.isDone = false;
                    int gather = (int)Random.Range(5.0f, 11.0f);
                    if (ES.Zone.capacity - gather < 0)
                    {
                        gather = ES.Zone.capacity;
                    }
                    ES.gathered       = gather;
                    ES.Zone.capacity -= gather;
                    Vector3 tribeHome = tribe.GetComponent <Transform>().position;
                    tribeHome.y        = Cs.CharacterPlane;
                    ES.Char.targetHome = tribeHome;
                    Logger.Add_To_Log("Task : " + ES.Zone.type + " at " + ES.Zone.name + " is done.");
                }
            }
            lastday = Cs.TS.savedays;
        }
        if (lasthour < Cs.TS.savehours)
        {
            foreach (EventStruct ES in EventsTracked)
            {
                if ((ES.inUse == true) && (ES.isCharBack == true))
                {
                    ES.isCharBack = false;
                    ES.inUse      = false;
                    Gatherers_Unavailable.Remove(ES.Char);
                    Gatherers_Available.Add(ES.Char);
                    ES.nextStart = Cs.TS.savedays + ES.recurrent;
                    ES.Char.GetComponent <SpriteRenderer>().enabled = false;
                    ES.Char.available = true;
                    if (tribe.TrbFood + ES.gathered <= tribe.TrbMaxFood)
                    {
                        tribe.TrbFood += ES.gathered;
                    }
                    else
                    {
                        tribe.TrbFood = tribe.TrbMaxFood;
                    }
                    ES.gathered = 0;
                    Logger.Add_To_Log("Returned : " + ES.Char.pname + " after " + ES.Zone.type + " at " + ES.Zone.name);
                    ES.Char = null;
                    if (ES.Zone.capacity == 0)
                    {
                        ES.Zone.GetComponent <SpriteRenderer>().enabled = false;
                    }
                }
            }
            //new hour
            lasthour = Cs.TS.savehours;
        }
    }