コード例 #1
0
    // Update is called once per frame
    void Update()
    {
        Vector3 guixeta_pos = guixeta_id.transform.position;
        Vector3 my_pos      = transform.position;

        if (estat == 0)                    //Anar a la seva guixeta
        {
            anar_a_la_cua(guixeta_id.cua); //Punt: La ultima posicio de la cua

            Vector3 pos_final = new Vector3(guixeta_pos.x, guixeta_pos.y, guixeta_pos.z - cua);
            if (Vector3.Distance(pos_final, my_pos) < 1 && ncua == guixeta_id.cua)
            {
                estat = 1; guixeta_id.aumenta_cua(gameObject);
            }
        }
        else
        if (estat == 1)         //Agafar el seu lloc a la cua
        {
            transform.position = new Vector3(my_pos.x, my_pos.y, guixeta_pos.z - cua);
            estat = 2;
        }
        else
        if (estat == 2)         //Esperant a la cua (quiet)
        {
            if (pot_avansar)    //Si reb una crida desde la guixeta dient que pot avansar 1 posicio
            {
                pot_avansar  = false;
                nova_pos_cua = ncua - 1;
                estat        = 3;          //Si la cua ha avançat, pasar a l'estat de caminar
            }

            if (ncua == 0)
            {
                estat = 4;
            }
        }
        else
        if (estat == 3)                  //Avançar 1 posicio dintre de la cua
        {
            anar_a_la_cua(nova_pos_cua); //Punt: Posicio actual menys la distancia guanyada ncua - (ncua - guixeta_id.cua)
            Vector3 pos_final = new Vector3(guixeta_pos.x, guixeta_pos.y, guixeta_pos.z - cua);
            if (Vector3.Distance(pos_final, my_pos) < 1)
            {
                estat = 2;
            }                                                                       //Si ja has arribat al teu nou lloc, pasar a l'estat d'aturat
        }
        else
        if (estat == 4)         //Sent ates per l'encarregat de la guixeta
        {
            temps_atenent += Time.deltaTime;
            if (temps_atenent > guixeta_id.temps_atencio)
            {
                guixeta_id.redueix_cua();

                if (papers_en_regla)
                {
                    estat = 5;
                }
                else
                {
                    estat = -1;
                }
            }
        }
        else
        if (estat == 5)         //Traspassar la guixeta
        {
            //Destroy(gameObject);
            if (esquiva_guixeta_x > 0)
            {
                float ttt = Time.deltaTime * speed;
                esquiva_guixeta_x -= ttt;
                transform.position = new Vector3(transform.position.x + ttt, transform.position.y, transform.position.z);
            }
            else
            {
                if (esquiva_guixeta_z > 0)
                {
                    float ttt = Time.deltaTime * speed;
                    esquiva_guixeta_z -= ttt;
                    transform.position = new Vector3(transform.position.x, transform.position.y, transform.position.z + ttt);
                }
                else
                {
                    estat = 6;
                }
            }
        }
        else
        if (estat == 6)         //Anar fins a la porta d'embarcament
        {
            //transform.position = new Vector3 (transform.position.x, transform.position.y, transform.position.z + Time.deltaTime*speed);
            anar_a_la_porta();
            Vector3 porta_pos       = porta_id.transform.position;
            Vector3 posicio_aparcar = new Vector3(porta_pos.x + porta_dec_x, transform.position.y, porta_pos.z + porta_dec_z);
            if (Vector3.Distance(transform.position, posicio_aparcar) < 1)
            {
                estat = 7; porta_id.incrementar_persones();
            }
        }
        else
        if (estat == 7)         //Esperar a que arribi el seu avio i despres pujar-hi quan ho permeti
        {
            if (porta_id.hi_ha_avio)
            {
                avio_id = porta_id.avio;
                anar_a_lavio();
                if (Vector3.Distance(transform.position, avio_id.transform.position) < 1)
                {
                    avio_id.GetComponent <AvoMVT>().sumar_passatger();
                    porta_id.decrementar_persones();
                    Destroy(gameObject);
                }
            }
        }
        else
        if (estat == -1)
        {
            if (esquiva_guixeta_x > 0)
            {
                float ttt = Time.deltaTime * speed;
                esquiva_guixeta_x -= ttt;
                transform.position = new Vector3(transform.position.x + ttt, transform.position.y, transform.position.z);
            }
            else
            {
                transform.position = new Vector3(transform.position.x, transform.position.y, transform.position.z - Time.deltaTime * speed);
                if (transform.position.z < -41)
                {
                    Destroy(gameObject);
                }
            }
        }
    }
コード例 #2
0
 public void pujar_passatgers(AvoMVT go_avio)
 {
     hi_ha_avio = true;
     avio       = go_avio;
 }