public void AddTurn() { for (int i = 0; i < data.TechnologyTree.Count; i++) { if (data.TechnologyTree[i].useable && !data.TechnologyTree[i].learned) { JsonParser.Technos tech = data.TechnologyTree[i]; tech.time -= 1; if (tech.time <= 0) { JsonParser.Technos tmpStructPlayer = Player.Instance.data.TechnologyTree[i]; Notifications.Instance.gameObject.SetActive(true); Notifications.Instance.TimeVisible += 2.5f; Notifications.Instance.AddText("New Technology " + gameObject.name + " : " + tech.name); tech.learned = true; tmpStructPlayer.learned = true; Player.Instance.data.TechnologyTree[i] = tmpStructPlayer; data.TechnologyTree[i] = tech; // _subjects.OnDisable(); _subjects.OnEnable(); // _objects.OnDisable(); _objects.OnEnable(); // _verbs.OnDisable(); _verbs.OnEnable(); if (tech.name == "aerospatial") { Player.Instance.Done("End"); } } else { data.TechnologyTree[i] = tech; } } } }
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); }
public void ExecuteResult() { _words = _resultPanel.GetComponentsInChildren <Word>(); if (_words.Length != 3) { return; } List <string> techs = new List <string>(); for (int i = 0; i < _words.Length; i++) { if (_words[i].type != Word.wordType.subject) { techs.Add(_words[i].technos.name); } } int count = 0; _techFound = false; for (int i = 0; i < data.TechnologyTree.Count; i++) { if (data.TechnologyTree[i].dependances.Contains(techs[count])) { count++; while (count < techs.Count) { if (data.TechnologyTree[i].dependances.Contains(techs[count])) { count++; } else { break; } } if (count == techs.Count) { // Player.Instance.AddTurn(); _techFound = true; JsonParser.Technos tmpStruct = data.TechnologyTree[i]; if (tmpStruct.useable) { Notifications.Instance.gameObject.SetActive(true); Notifications.Instance.TimeVisible += 2.5f; Notifications.Instance.AddText(tmpStruct.name + " already known!"); tmpObject = Vector4.zero; tmpSubject = Vector4.zero; tmpVerb = Vector4.zero; break; } else { Notifications.Instance.gameObject.SetActive(true); Notifications.Instance.TimeVisible += 2.5f; Notifications.Instance.AddText(this.gameObject.name + " start to research : " + tmpStruct.name); } JsonParser.Technos tmpStructPlayer = Player.Instance.data.TechnologyTree[i]; // if (!tmpStructPlayer.useable) // { // Notifications.Instance.gameObject.SetActive(true); // Notifications.Instance.TimeVisible += 2.5f; // Notifications.Instance.AddText("New Technology Player : " + tmpStructPlayer.name); // } if (tmpStruct.limits[0] > _currentValues.x || tmpStruct.limits[1] > _currentValues.y || tmpStruct.limits[2] > _currentValues.z || tmpStruct.limits[3] > _currentValues.w) { tmpObject = Vector4.zero; tmpSubject = Vector4.zero; tmpVerb = Vector4.zero; break; } tmpStruct.useable = true; if (tmpStruct.type == "religion") { tmpStruct.time *= 1 - (_religion.value / 100f); } else if (tmpStruct.type == "social") { tmpStruct.time *= 1 - (_social.value / 100f); } else if (tmpStruct.type == "science") { tmpStruct.time *= 1 - (_science.value / 100f); } else if (tmpStruct.type == "conquest") { tmpStruct.time *= 1 - (_conquest.value / 100f); } tmpStructPlayer.useable = true; _currentValues += Vector4.Scale((tmpObject + tmpVerb), tmpSubject * (_trustIndice.value / 100f)); _religion.value = _currentValues.x; _social.value = _currentValues.y; _science.value = _currentValues.z; _conquest.value = _currentValues.w; _trustIndice.value = 100f - (Mathf.Max(Mathf.Max(_currentValues.x, _currentValues.y), Mathf.Max(_currentValues.z, _currentValues.w)) - Mathf.Min(Mathf.Min(_currentValues.x, _currentValues.y), Mathf.Min(_currentValues.z, _currentValues.w))); tmpObject = Vector4.zero; tmpSubject = Vector4.zero; tmpVerb = Vector4.zero; if (_trustIndice.value > 50f) { if (tmpStruct.words.subjects.Count > 0) { tmpStruct = GetNewWord(tmpStruct.words.subjects, tmpStruct, Word.wordType.subject, ref tmpStructPlayer); } else if (tmpStruct.words.verbs.Count > 0) { tmpStruct = GetNewWord(tmpStruct.words.verbs, tmpStruct, Word.wordType.verb, ref tmpStructPlayer); } else if (tmpStruct.words.objects.Count > 0) { tmpStruct = GetNewWord(tmpStruct.words.objects, tmpStruct, Word.wordType.obj, ref tmpStructPlayer); } } else if (_trustIndice.value < 10f) { done = true; Player.Instance.Done("trust"); Player.Instance.Close(); _open.SetActive(false); _openButton.SetActive(true); } data.TechnologyTree[i] = tmpStruct; Player.Instance.data.TechnologyTree[i] = tmpStructPlayer; if (_religion.value >= 100f || _religion.value <= 10f) { done = true; Player.Instance.Done("religion"); Player.Instance.Close(); _open.SetActive(false); _openButton.SetActive(true); } if (_social.value >= 100f || _social.value <= 10f) { done = true; Player.Instance.Done("social"); Player.Instance.Close(); _open.SetActive(false); _openButton.SetActive(true); } if (_science.value >= 100f || _science.value <= 10f) { done = true; Player.Instance.Done("science"); Player.Instance.Close(); _open.SetActive(false); _openButton.SetActive(true); } if (_conquest.value >= 100f || _conquest.value <= 10f) { done = true; Player.Instance.Done("conquest"); Player.Instance.Close(); _open.SetActive(false); _openButton.SetActive(true); } break; } else { count = 0; } } } if (!_techFound) { tmpObject = Vector4.zero; tmpSubject = Vector4.zero; tmpVerb = Vector4.zero; } // _subjects.OnDisable(); // _subjects.OnEnable(); // _objects.OnDisable(); // _objects.OnEnable(); // _verbs.OnDisable(); // _verbs.OnEnable(); for (int i = 0; i < _words.Length; i++) { Destroy(_words[i].gameObject); } }
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); } } }