// Start is called before the first frame update
    void Start()
    {
        //各オブジェクトの取得
        mainSystem = GameObject.Find("Main System").GetComponent <MainScript>();

        refrigerator = GameObject.Find("refrigerator_link");
        ar_camera    = GameObject.Find("First Person Camera");

        greentea  = GameObject.Find("greentea_bottle_x_link");
        cancoffee = GameObject.Find("cancoffee_x_link");
        soysauce  = GameObject.Find("soysauce_bottle_black_x_link");

        //オブジェクトを辞書に登録
        goods_data_dictionary.Add(7004, new GoodsData());
        goods_data_dictionary.Add(7006, new GoodsData());
        goods_data_dictionary.Add(7009, new GoodsData());
        goods_data_dictionary[7004].obj = greentea;
        goods_data_dictionary[7006].obj = cancoffee;
        goods_data_dictionary[7009].obj = soysauce;

        //オブジェクトにShader変更スクリプトを追加
        //オブジェクトの状態をfalseに
        //オブジェクトに消費期限表示用の3Dテキスト追加
        foreach (GoodsData goods in goods_data_dictionary.Values)
        {
            goods.obj.AddComponent <ShaderChange>();

            goods.state_bool = false;

            goods.text3d = (GameObject)Instantiate(Resources.Load("TextMeshPro"));
            goods.text3d.transform.SetParent(goods.obj.transform, false);
            goods.text3d.transform.localPosition = new Vector3(0.0f, 0.15f, 0.0f);
            TextMeshPro TMP = goods.text3d.GetComponent <TextMeshPro>();
            TMP.fontSize = 0.6f;
            TMP.text     = "";
            goods.text3d.SetActive(false);
        }

        //位置合わせするや~つを配置
        coordinates_adapter      = Instantiate(new GameObject());
        coordinates_adapter.name = "Coordinates Adapter";
        coordinates_adapter.transform.SetParent(refrigerator.transform, false);

        //データベースと通信するやつ
        DBAdapter = GameObject.Find("Database Adapter").GetComponent <TMSDatabaseAdapter>();

        //キャリブシステム
        calib_system = GameObject.Find("B-sen Calibration System").GetComponent <BsenCalibrationSystem>();

        //冷蔵庫にもShader変更スクリプトを追加
        refrigerator.AddComponent <ShaderChange>();
        refrigerator_shaderchange = refrigerator.GetComponent <ShaderChange>();

        //rostmsのShader変更スクリプト
        rostms_shaderchange = GameObject.Find("rostms").GetComponent <ShaderChange>();
    }
Beispiel #2
0
 private void Awake()
 {
     // wordAudio = GetComponent<AudioSource>();
     if (defaultWordEffect != null)
     {
         wordAudio.clip = defaultWordEffect;
     }
     _screenEffect         = GameObject.Find("Main Camera").GetComponent <ScreenEffect>();
     _shake                = GameObject.Find("Main Camera").GetComponent <Shake>();
     _shaderChange         = GameObject.Find("WhiteImage").GetComponent <ShaderChange>();
     _screenEffect.enabled = false;
     _shake.enabled        = false;
     //_shaderChange = GameObject.Find("WhiteImage").GetComponent<ShaderChange>();
 }
Beispiel #3
0
    // Start is called before the first frame update
    // 最初の1回呼び出されるよ~
    void Start()
    {
        mainSystem = GameObject.Find("Main System").GetComponent <MainScript>();

        arcore_device = GameObject.Find("ARCore Device");

        bsen_model    = GameObject.Find("rostms");
        rostms_shader = bsen_model.GetComponent <ShaderChange>();

        coordinates_adapter      = Instantiate(new GameObject());
        coordinates_adapter.name = "Coordinates Adapter";
        coordinates_adapter.transform.SetParent(bsen_model.transform, false);

        calibration_state = 1;

        DBAdapter = GameObject.Find("Database Adapter").GetComponent <TMSDatabaseAdapter>();
    }
    /*****************************************************************
    * オブジェクトをカメラから近い順にゆっくり表示するコルーチン
    *****************************************************************/
    IEnumerator AppearSlowly()
    {
        finish_coroutine = false;
        for (int i = 0; i < 5; i++)
        {
            yield return(null);
        }

        Dictionary <int, float> goods_distance_dictionary = new Dictionary <int, float>();

        foreach (KeyValuePair <int, GoodsData> goods in goods_data_dictionary)
        {
            goods_distance_dictionary.Add(goods.Key, CalcDistance(ar_camera, goods.Value.obj));
        }

        var sorted = goods_distance_dictionary.OrderBy((x) => x.Value);

        foreach (KeyValuePair <int, float> goods in sorted)
        {
            if (goods_data_dictionary[goods.Key].state_bool)
            {
                ShaderChange goods_shaderchange = goods_data_dictionary[goods.Key].obj.GetComponent <ShaderChange>();
                goods_shaderchange.alpha = 0.4f;
                goods_shaderchange.ChangeColors();

                goods_data_dictionary[goods.Key].text3d.SetActive(true);

                for (int i = 0; i < 5; i++)
                {
                    yield return(null);
                }
            }
        }

        finish_coroutine = true;
    }
    // Update is called once per frame
    void Update()
    {
        if (!mainSystem.finish_read_config)
        {
            return;
        }

        //CoordinatesAdapterの位置を調整してカメラとの距離を計算
        coordinates_adapter.transform.localPosition = new Vector3(-0.23f, 0.0f, -0.3f);
        distance_old = distance;
        distance     = CalcDistance(coordinates_adapter, ar_camera);

        //最初の1回Shaderを変更する
        if (!change_goods_shader)
        {
            foreach (GoodsData goods in goods_data_dictionary.Values)
            {
                ShaderChange shaderchange = goods.obj.GetComponent <ShaderChange>();
                shaderchange.ChangeShader(Shader.Find("Custom/Transparent"));
            }
            change_goods_shader = true;
        }

        //距離が閾値以下でデータベースのstateが1だったら表示,違ったら非表示
        if (calib_system.CheckFinishCalibration() && finish_coroutine)
        {
            //近づいたとき
            if (distance < mainSystem.GetConfig().refrigerator_distance&& distance_old >= mainSystem.GetConfig().refrigerator_distance)
            {
                refrigerator_shaderchange.ChangeShader(Shader.Find("Custom/Transparent"));
                refrigerator_shaderchange.alpha = 0.4f;
                refrigerator_shaderchange.ChangeColors();

                IEnumerator coroutine = AppearSlowly();
                StartCoroutine(coroutine);
            }
            //遠くにいるとき
            else if (distance >= mainSystem.GetConfig().refrigerator_distance)
            {
                foreach (GoodsData goods in goods_data_dictionary.Values)
                {
                    ShaderChange goods_shaderchange = goods.obj.GetComponent <ShaderChange>();
                    goods_shaderchange.alpha = 0.0f;
                    goods_shaderchange.ChangeColors();
                    goods.text3d.SetActive(false);
                }
                if (refrigerator_shaderchange.shader_now != Shader.Find("Custom/ARTransparent"))
                {
                    refrigerator_shaderchange.ChangeShader(Shader.Find("Custom/ARTransparent"));
                    refrigerator_shaderchange.alpha = rostms_shaderchange.alpha;
                    refrigerator_shaderchange.ChangeColors();
                }
            }
            //ずっと近くにいるとき
            else if (distance < mainSystem.GetConfig().refrigerator_distance&& distance_old < mainSystem.GetConfig().refrigerator_distance)
            {
                foreach (GoodsData goods in goods_data_dictionary.Values)
                {
                    ShaderChange goods_shaderchange = goods.obj.GetComponent <ShaderChange>();
                    if (goods.state_bool)
                    {
                        goods_shaderchange.alpha = 0.4f;
                        goods.text3d.SetActive(true);
                    }
                    else
                    {
                        goods_shaderchange.alpha = 0.0f;
                        goods.text3d.SetActive(false);
                    }
                    goods_shaderchange.ChangeColors();
                }
            }
        }

        //画像認識による自動キャリブレーションが終わった後に実行
        if (calib_system.CheckFinishCalibration())
        {
            //冷蔵庫に入っている物品のデータを取得
            time_1 += Time.deltaTime;
            if (!DBAdapter.CheckWaitAnything() && time_1 > 1.0f)
            {
                time_1 = 0.0f;
                IEnumerator coroutine = DBAdapter.GetRefrigeratorItem();
                StartCoroutine(coroutine);
            }

            if (DBAdapter.CheckGetRefrigeratorItem())
            {
                if (DBAdapter.CheckAbort())
                {
                    DBAdapter.ConfirmAbort();
                }

                if (DBAdapter.CheckSuccess())
                {
                    id_list = new List <int>();

                    ServiceResponseDB responce = DBAdapter.GetResponce();
                    DBAdapter.FinishReadData();
                    foreach (tmsdb data in responce.values.tmsdb)
                    {
                        //Debug.Log(data.name);
                        //Debug.Log(data.x + ", " + data.y + ", " + data.z);
                        if (data.sensor == 3018 && goods_data_dictionary.ContainsKey(data.id))
                        {
                            GoodsData goods = goods_data_dictionary[data.id];
                            Vector3   place = new Vector3((float)data.x, (float)data.y, (float)data.z);
                            place = Ros2UnityPosition(place);
                            if (data.state == 1)
                            {
                                goods.state_bool = true;

                                Debug.Log(data.name + " pos: " + place.ToString("f2"));
                                mainSystem.MyConsole_Add(data.name + " pos: " + place.ToString("f2"));
                                goods.obj.transform.localPosition = place;

                                id_list.Add(data.id);
                            }
                            else
                            {
                                goods.state_bool = false;
                            }

                            if (goods.name == null)
                            {
                                goods.name = data.name;
                            }
                            if (goods.expiration == null)
                            {
                                goods.expiration = "don't know";
                            }
                            goods.state = data.state;
                            goods.pos   = place;
                        }
                    }
                }
            }

            //冷蔵庫に入っている物品の消費期限を取得
            time_2 += Time.deltaTime;
            if (!DBAdapter.CheckWaitAnything() && time_2 > 5.0f)
            {
                time_2 = 0.0f;
                DBAdapter.GiveItemIDList(id_list);
                IEnumerator coroutine = DBAdapter.ReadExpiration();
                StartCoroutine(coroutine);
            }
            if (DBAdapter.CheckReadExpiration())
            {
                if (DBAdapter.CheckAbort())
                {
                    DBAdapter.ConfirmAbort();
                }
                if (DBAdapter.CheckSuccess())
                {
                    Dictionary <int, string> expiration_dictionary = DBAdapter.ReadExpirationData();
                    DBAdapter.FinishReadData();
                    foreach (KeyValuePair <int, string> goods in expiration_dictionary)
                    {
                        ExpirationData expiration_data = JsonUtility.FromJson <ExpirationData>(goods.Value);
                        string         expiration      = expiration_data.expiration;
                        Debug.Log("id: " + goods.Key + ", name: " + goods_data_dictionary[goods.Key].name + ", expiration: " + expiration);
                        mainSystem.MyConsole_Add("id: " + goods.Key + ", name: " + goods_data_dictionary[goods.Key].name + ", expiration: " + expiration);

                        goods_data_dictionary[goods.Key].text3d.GetComponent <TextMeshPro>().text = expiration;

                        goods_data_dictionary[goods.Key].expiration = expiration;
                    }
                }
            }

            //UIを更新する
            Dictionary <int, string> goods_info_string_dictionary = new Dictionary <int, string>();
            foreach (KeyValuePair <int, GoodsData> goods in goods_data_dictionary)
            {
                string info = goods.Value.name + ", "
                              + goods.Key.ToString() + ", "
                              + goods.Value.state.ToString() + ", "
                              + goods.Value.pos.ToString("f3") + ", "
                              + goods.Value.expiration;
                goods_info_string_dictionary.Add(goods.Key, info);
            }
            mainSystem.UpdateDatabaseInfoRefrigerator(goods_info_string_dictionary);
        }
    }
Beispiel #6
0
 private void Awake()
 {
     _shaderChange = this.GetComponent <ShaderChange>();
     DontDestroyOnLoad(this.gameObject);
 }