using Newtonsoft.Json.Linq; using System.Collections; using System.Collections.Generic; using System.Linq; using UnityEngine; using UnityEngine.UI; namespace Assets.Scripts { public class QuestLog : MonoBehaviour { public Dictionary> quests; public GameObject content; public Scrollbar scrollBar; System.Random rand = new System.Random(); public GameObject quest; public Texture finished; public GameObject uiHandler; // Start is called before the first frame update void Start() { if (quests == null && PlayerPrefs.GetInt("isLoad") != 1) { quests = new Dictionary>(); quests.Add("find", new List()); FindQuest main = new FindQuest(createQuestDisplay()); main.generateCityQuest(); quests["find"].Add(main); } } // Update is called once per frame void Update() { } public void updateQuests(string key, object obj, int amount) { if (quests.ContainsKey(key)) { foreach (Quest quest in quests[key]) { quest.update(obj, amount); } } } public void addQuest() { int index = rand.Next(4); string type = ""; Quest questItem; switch (index) { case 0: type = "collect"; questItem = new CollectQuest(createQuestDisplay()); break; case 1: type = "kill"; questItem = new KillQuest(createQuestDisplay()); break; case 2: type = "find"; questItem = new FindQuest(createQuestDisplay()); break; /*case 3: type = "craft"; break;*/ case 3: type = "explore"; questItem = new ExploreQuest(createQuestDisplay()); break; default: questItem = new Quest(createQuestDisplay()); break; } if (!quests.ContainsKey(type)) { quests.Add(type, new List()); } quests[type].Add(questItem); } private GameObject createQuestDisplay() { GameObject newQuest = Instantiate(quest); newQuest.transform.SetParent(content.transform, false); return newQuest; } public void showQuests() { content.GetComponent().sizeDelta = new Vector2(0, 10); float y = -37.5f; foreach (string key in quests.Keys) { foreach (Quest quest in quests[key]) { quest.show(y); y = y - 75; content.GetComponent().sizeDelta = new Vector2(0, content.GetComponent().sizeDelta.y + 75); } } scrollBar.value = 0; content.transform.localPosition = new Vector3(0,0,0); } public void removeQuests() { Inventory inventory = GameObject.Find("Inventory").GetComponent(); int luck = GameObject.Find("Player").GetComponent().getLuck(); luck = luck + inventory.getEquipmentBonus()["LCK"]; Dictionary> toDelete = new Dictionary>(); foreach (string key in quests.Keys) { foreach (Quest quest in quests[key]) { if (quest.isFinishedQuest()) { if (!toDelete.ContainsKey(key)) { toDelete.Add(key, new List()); } toDelete[key].Add(quest); } } } int rand = new System.Random().Next(100) + 1; foreach (string key in toDelete.Keys) { foreach (Quest quest in toDelete[key]) { rand = new System.Random().Next(4); if (quest is CollectQuest) { ((CollectQuest)quest).removeItems(inventory); } quest.delete(); quests[key].Remove(quest); if(rand == 1){ inventory.addItem(new Equipment(luck)); } else{ inventory.addItem(new Item(luck, false)); } } } } public string saveGame() { string result = ""; int counter = 0; int count = 0; foreach (string key in quests.Keys) { counter = 0; result = result + "\""+key+"\": {\r\n"; foreach (Quest quest in quests[key]) { result = result + "\"quest" + counter + "\": {\r\n"; result = result + quest.saveQuest(); result = result + "\r\n}"; if (counter < quests[key].Count - 1) { result = result + ",\r\n"; } counter++; } result = result + "\r\n}"; if (count < quests.Keys.Count - 1) { result = result + ",\r\n"; } count++; } return result; } private void clearQuestlog(){ int children = content.transform.childCount; for(int i = 0; i < children; i++){ Destroy(content.transform.GetChild(i).gameObject); } } public void loadQuests(JToken json) { var jsonData = JObject.Parse(json.ToString()).Children(); List keywords = jsonData.Children().ToList(); List quests; string key = ""; Quest questItem; this.quests = new Dictionary>(); this.quests.Clear(); clearQuestlog(); foreach (JToken keyword in keywords) { jsonData = JObject.Parse(keyword.ToString()).Children(); quests = jsonData.Children().ToList(); foreach (JToken quest in quests) { key = quest["questname"].ToString().Split(' ')[0].ToLower(); if (!this.quests.ContainsKey(key)) { this.quests.Add(key, new List()); } switch (key) { case "collect": questItem = new CollectQuest(quest, createQuestDisplay()); break; case "kill": questItem = new KillQuest(quest, createQuestDisplay()); break; case "find": questItem = new FindQuest(quest, createQuestDisplay()); break; case "explore": questItem = new ExploreQuest(quest, createQuestDisplay()); break; default: questItem = new Quest(quest, createQuestDisplay()); break; } this.quests[key].Add(questItem); } } } } }