private JsonParser.Technos GetNewWord(List <JsonParser.Word> words, JsonParser.Technos techs,
                                          Word.wordType type, ref JsonParser.Technos playerStruct)
    {
        int index = 0;

        for (int i = 0; i < words.Count; i++)
        {
            if ((type == Word.wordType.subject && !playerStruct.words.subjects[index].useable) ||
                (type == Word.wordType.verb && !playerStruct.words.verbs[index].useable) ||
                (type == Word.wordType.obj && !playerStruct.words.objects[index].useable))
            {
                index = i;
                break;
            }
        }
        if (type == Word.wordType.subject)
        {
            JsonParser.Word tmpWordsPlayer = playerStruct.words.subjects[index];
            if (!tmpWordsPlayer.useable)
            {
                Notifications.Instance.gameObject.SetActive(true);
                Notifications.Instance.TimeVisible += 2.5f;
                Notifications.Instance.AddText("New Word : " + tmpWordsPlayer.name);
            }

            tmpWordsPlayer.useable             = true;
            playerStruct.words.subjects[index] = tmpWordsPlayer;
            JsonParser.Word tmpWords = techs.words.subjects[index];
            tmpWords.useable            = true;
            techs.words.subjects[index] = tmpWords;
        }
        else if (type == Word.wordType.verb)
        {
            JsonParser.Word tmpWordsPlayer = playerStruct.words.verbs[index];
            if (!tmpWordsPlayer.useable)
            {
                Notifications.Instance.TimeVisible += 2.5f;
                Notifications.Instance.AddText("New Word : " + tmpWordsPlayer.name);
            }
            tmpWordsPlayer.useable          = true;
            playerStruct.words.verbs[index] = tmpWordsPlayer;
            JsonParser.Word tmpWords = techs.words.verbs[index];
            tmpWords.useable         = true;
            techs.words.verbs[index] = tmpWords;
        }
        else if (type == Word.wordType.obj)
        {
            JsonParser.Word tmpWordsPlayer = playerStruct.words.objects[index];
            if (!tmpWordsPlayer.useable)
            {
                Notifications.Instance.TimeVisible += 2.5f;
                Notifications.Instance.AddText("New Word : " + tmpWordsPlayer.name);
            }
            tmpWordsPlayer.useable            = true;
            playerStruct.words.objects[index] = tmpWordsPlayer;
            JsonParser.Word tmpWords = techs.words.objects[index];
            tmpWords.useable           = true;
            techs.words.objects[index] = tmpWords;
        }
        return(techs);
    }
    private void Start()
    {
        _data = Player.Instance.data;
        var technos = _data.TechnologyTree.FindAll(x => x.useable && x.dependances.Count > 0);
        var general = _data.TechnologyTree.Find(x => x.name == "general");

        _currentSubject = general.words.subjects[Random.Range(0, general.words.subjects.Count)];
        if (technos.Count <= 0)
        {
            Player.Instance.wordKeep = true;
            Player.Instance.lastTurn = Player.Instance.turn;
            Player.Instance.DeleteWordKeeper(this.gameObject);
            Destroy(gameObject);
            return;
        }

        int index = Random.Range(0, technos.Count);
        var tech1 = _data.TechnologyTree.Find(x => x.name == technos[index].dependances[0]);
        var tech2 = _data.TechnologyTree.Find(x => x.name == technos[index].dependances[1]);

        if (tech1.words.verbs.Count > 0)
        {
            _currentObject = tech2.words.objects.Find(x => x.useable);
            _currentVerb   = tech1.words.verbs.Find(x => x.useable);
            _wordsSets     = true;
            _result        = technos[index];
        }
        if (tech2.words.verbs.Count > 0)
        {
            _currentObject = tech1.words.objects.Find(x => x.useable);
            _currentVerb   = tech2.words.verbs.Find(x => x.useable);
            _wordsSets     = true;
            _result        = technos[index];
        }
        if (technos[index].words.verbs.Count > 0)
        {
            _currentWord = technos[index].words.verbs.Find(x => x.useable == false);
        }
        else
        {
            _currentWord = technos[index].words.objects.Find(x => x.useable == false);
        }

        if (!_wordsSets)
        {
            Player.Instance.wordKeep = true;
            Player.Instance.lastTurn = Player.Instance.turn;
            Player.Instance.DeleteWordKeeper(this.gameObject);
            Destroy(gameObject);
        }

        GameObject subject = Instantiate(_prefabTechno, Vector3.zero, Quaternion.identity, _posSubject);

        subject.transform.localPosition = Vector3.zero;
        subject.transform.localScale    = Vector3.one;

        subject.GetComponentInChildren <TextMeshProUGUI>().text = _currentSubject.name;
        if (Resources.Load <Sprite>(_currentSubject.name))
        {
            subject.GetComponentInChildren <Image>().sprite = Resources.Load <Sprite>(_currentSubject.name);
        }
        GameObject verb = Instantiate(_prefabTechno, Vector3.zero, Quaternion.identity, _posVerb);

        verb.GetComponentInChildren <TextMeshProUGUI>().text = _currentVerb.name;
        verb.transform.localPosition = Vector3.zero;
        verb.transform.localScale    = Vector3.one;

        if (Resources.Load <Sprite>(_currentVerb.name))
        {
            verb.GetComponentInChildren <Image>().sprite = Resources.Load <Sprite>(_currentVerb.name);
        }
        GameObject obj = Instantiate(_prefabTechno, Vector3.zero, Quaternion.identity, _posObject);

        obj.GetComponentInChildren <TextMeshProUGUI>().text = _currentObject.name;
        obj.transform.localPosition = Vector3.zero;
        obj.transform.localScale    = Vector3.one;

        if (Resources.Load <Sprite>(_currentObject.name))
        {
            obj.GetComponentInChildren <Image>().sprite = Resources.Load <Sprite>(_currentObject.name);
        }
        for (int i = 0; i < _data.TechnologyTree.Count; i++)
        {
            if (!_data.TechnologyTree[i].learned)
            {
                continue;
            }
            GameObject go = Instantiate(_prefabConcept, Vector3.zero, Quaternion.identity, _panelConcept.transform);
            go.transform.localScale = Vector3.one;

            if (_data.TechnologyTree[i].name == _result.name)
            {
                go.GetComponent <Button>().onClick.AddListener(delegate
                {
                    bool foundWord       = false;
                    _currentWord.useable = true;
                    for (int j = 0; j < _result.words.verbs.Count; j++)
                    {
                        if (_result.words.verbs[j].name == _currentWord.name)
                        {
                            _result.words.verbs[j] = _currentWord;
                            foundWord = true;
                            break;
                        }
                    }

                    if (!foundWord)
                    {
                        for (int j = 0; j < _result.words.objects.Count; j++)
                        {
                            if (_result.words.objects[j].name == _currentWord.name)
                            {
                                _result.words.objects[j] = _currentWord;
                                break;
                            }
                        }
                    }

                    for (int j = 0; j < _data.TechnologyTree.Count; j++)
                    {
                        if (_data.TechnologyTree[j].name == _result.name)
                        {
                            _data.TechnologyTree[j] = _result;
                        }
                    }

                    Notifications.Instance.gameObject.SetActive(true);
                    Notifications.Instance.TimeVisible += 2.5f;
                    Notifications.Instance.AddText("You found a new word : " + _currentWord.name);
                    Player.Instance.data     = _data;
                    Player.Instance.wordKeep = true;
                    Player.Instance.lastTurn = Player.Instance.turn;
                    Player.Instance.DeleteWordKeeper(this.gameObject);
                    Player.Instance.Close();
                    Destroy(gameObject);
                });
            }
            else
            {
                go.GetComponent <Button>().onClick.AddListener(delegate
                {
                    Notifications.Instance.gameObject.SetActive(true);
                    Notifications.Instance.TimeVisible += 2.5f;
                    Notifications.Instance.AddText("You didn't understand!");
                    Player.Instance.wordKeep = true;
                    Player.Instance.lastTurn = Player.Instance.turn;
                    Player.Instance.DeleteWordKeeper(this.gameObject);
                    Player.Instance.Close();
                    Destroy(gameObject);
                });
            }
            buttonOpen.GetComponent <Button>().onClick.AddListener(delegate
            {
                Player.Instance.Open(this.gameObject);
            });
            buttonClose.GetComponent <Button>().onClick.AddListener(delegate
            {
                Player.Instance.Close();
            });
            go.GetComponentInChildren <TextMeshProUGUI>().text = _data.TechnologyTree[i].name;
            if (Resources.Load <Sprite>(_data.TechnologyTree[i].name))
            {
                go.GetComponentInChildren <Image>().sprite = Resources.Load <Sprite>(_data.TechnologyTree[i].name);
            }
        }
    }