using UnityEngine; using System; using System.Collections.Generic; using YGOSharp.OCGWrapper.Enums; public class CardDescription : Servant { cardPicLoader picLoader; UIDragResize resizer; UITexture underSprite; UITexture picSprite; UISprite lineSprite; public UITextList description; GameObject line; UIWidget cardShowerWidget; UIPanel monitor; UIDeckPanel deckPanel; cardPicLoader[] quickCards = new cardPicLoader[300]; public override void initialize() { gameObject = create ( Program.I().new_ui_cardDescription, Program.camera_main_2d.ScreenToWorldPoint(new Vector3(-256, Screen.height /2, 600)), new Vector3(0, 0, 0), true, Program.ui_back_ground_2d ); picLoader = gameObject.AddComponent(); picLoader.code = 0; picLoader.uiTexture = UIHelper.getByName(gameObject, "pic_"); picLoader.loaded_code = -1; resizer = UIHelper.getByName(gameObject, "resizer"); underSprite = UIHelper.getByName(gameObject, "under_"); description = UIHelper.getByName(gameObject, "description_"); cardShowerWidget = UIHelper.getByName(gameObject, "card_shower"); monitor = UIHelper.getByName(gameObject, "monitor"); deckPanel = gameObject.GetComponentInChildren(); line = UIHelper.getByName(gameObject, "line"); UIHelper.registEvent(gameObject,"pre_", onPre); UIHelper.registEvent(gameObject, "next_", onNext); UIHelper.registEvent(gameObject, "big_", onb); UIHelper.registEvent(gameObject, "small_", ons); picSprite = UIHelper.getByName(gameObject, "pic_"); lineSprite = UIHelper.getByName(gameObject, "line"); try { description.textLabel.fontSize = int.Parse(Config.Get("fontSize","24")); } catch (System.Exception e) { } read(); myGraveStr = InterString.Get("我方墓地:"); myExtraStr = InterString.Get("我方额外:"); myBanishedStr = InterString.Get("我方除外:"); opGraveStr = InterString.Get("[8888FF]对方墓地:[-]"); opExtraStr = InterString.Get("[8888FF]对方额外:[-]"); opBanishedStr = InterString.Get("[8888FF]对方除外:[-]"); for (int i = 0; i < quickCards.Length; i++) { quickCards[i] = deckPanel.createCard(); quickCards[i].relayer(i); } monitor.gameObject.SetActive(false); } public float width = 0; public float cHeight = 0; void onb() { description.textLabel.fontSize += 1; description.scrollValue = 0; description.Rebuild(); Config.Set("fontSize", description.textLabel.fontSize.ToString()); } void ons() { description.textLabel.fontSize -= 1; description.scrollValue = 0; description.Rebuild(); Config.Set("fontSize", description.textLabel.fontSize.ToString()); } void onPre() { current--; loadData(); } void onNext() { current++; loadData(); } public override void applyHideArrangement() { if (gameObject != null) { underSprite.height = Screen.height + 4; iTween.MoveTo(gameObject, Program.camera_main_2d.ScreenToWorldPoint(new Vector3(-underSprite.width-20, Screen.height / 2, 0)), 1.2f); setTitle(""); resizer.gameObject.GetComponent().enabled = false; } } public override void applyShowArrangement() { if (gameObject != null) { underSprite.height = Screen.height + 4; iTween.MoveTo(gameObject, Program.camera_main_2d.ScreenToWorldPoint(new Vector3(-2, Screen.height / 2, 0)), 1.2f); resizer.gameObject.GetComponent().enabled = true; } } public void read() { try { var ca = int.Parse(Config.Get("CA", "230")); var cb = int.Parse(Config.Get("CB", "270")); if (cb > Screen.height) { // some dumb ass repack the program and set the pic size so large that small screen users can't realize there is card description under it. cb = Screen.height / 2; ca = (int)(cb * 0.68) + 50; } underSprite.width = ca; picSprite.height = cb; } catch (System.Exception e) { } } public void save() { Config.Set("CA", underSprite.width.ToString()); Config.Set("CB", picSprite.height.ToString()); } class data { public YGOSharp.Card card; public Texture2D def; public string tail = ""; } int current = 0; List datas = new List(); void loadData() { if (current < 0) { current = 0; } if (current > datas.Count - 1) { current = datas.Count - 1; } if (datas.Count == 0) { return; } data d = datas[current]; apply(d.card, d.def, d.tail); } YGOSharp.Card currentCard = null; public bool ifShowingThisCard(YGOSharp.Card card) { return currentCard == card; } private void apply(YGOSharp.Card card, Texture2D def, string tail) { if (card == null) { return; } string smallstr = ""; if (card.Id != 0) { smallstr = GameStringHelper.getName(card) + GameStringHelper.getSmall(card); smallstr += "\n"; } if (tail == "") { description.Clear(); description.scrollValue = 0; description.Add(smallstr + card.Desc); } else { description.Clear(); description.scrollValue = 0; description.Add(smallstr + "[FFD700]" + tail + "[-]" + card.Desc); } picLoader.code = card.Id; picLoader.defaults = def; picLoader.loaded_code = -1; currentCard = card; shiftCardShower(true); Program.go(50, () => { shiftCardShower(true); }); } public void shiftCardShower(bool show) { if (show) { cardShowerWidget.alpha = 1f; } else { cardShowerWidget.alpha = 0f; } if (!show) { if (monitor.gameObject.activeInHierarchy == false) { monitor.gameObject.SetActive(true); realizeMonitor(); } } else { monitor.gameObject.SetActive(false); } } string myGraveStr = ""; string myExtraStr = ""; string myBanishedStr = ""; string opGraveStr = ""; string opExtraStr = ""; string opBanishedStr = ""; public void realizeMonitor() { if (monitor.gameObject.activeInHierarchy) { List myGrave = new List(); List myExtra = new List(); List myBanished = new List(); List opGrave = new List(); List opExtra = new List(); List opBanished = new List(); for (int i = 0; i < Program.I().ocgcore.cards.Count; i++) { var curCard = Program.I().ocgcore.cards[i]; int code = curCard.get_data().Id; var gps = curCard.p; if (code > 0) { if (gps.controller == 0) { if ((gps.location & (UInt32)CardLocation.Grave) > 0) { myGrave.Add(curCard); } if ((gps.location & (UInt32)CardLocation.Removed) > 0) { myBanished.Add(curCard); } if ((gps.location & (UInt32)CardLocation.Extra) > 0) { myExtra.Add(curCard); } } else { if ((gps.location & (UInt32)CardLocation.Grave) > 0) { opGrave.Add(curCard); } if ((gps.location & (UInt32)CardLocation.Removed) > 0) { opBanished.Add(curCard); } if ((gps.location & (UInt32)CardLocation.Extra) > 0) { opExtra.Add(curCard); } } } } currentHeight = 0; currentLabelIndex = 0; currentCardIndex = 0; handleMonitorArea(opGrave, opGraveStr); handleMonitorArea(opBanished, opBanishedStr); handleMonitorArea(opExtra, opExtraStr); handleMonitorArea(myGrave, myGraveStr); handleMonitorArea(myBanished, myBanishedStr); handleMonitorArea(myExtra, myExtraStr); while (currentLabelIndex < 6) { deckPanel.labs[currentLabelIndex].gameObject.SetActive(false); currentLabelIndex++; } while (currentCardIndex < 300) { quickCards[currentCardIndex].clear(); currentCardIndex++; } } } float currentHeight = 0; int currentLabelIndex = 0; int currentCardIndex = 0; int eachLine = 0; float monitorHeight = 0; void handleMonitorArea(List list,string hint) { if (list.Count > 0) { deckPanel.labs[currentLabelIndex].gameObject.SetActive(true); deckPanel.labs[currentLabelIndex].text = hint; deckPanel.labs[currentLabelIndex].width = (int)(monitor.width - 12); deckPanel.labs[currentLabelIndex].transform.localPosition = new Vector3(monitor.width / 2, (monitor.height - 8) / 2 - 12 - currentHeight, 0); currentLabelIndex++; currentHeight += 24; float beginX = 6 + 22; float beginY = monitor.height / 2 - currentHeight - 36; eachLine = (int)((monitor.width - 12f) / 44f); for (int i = 0; i < list.Count; i++) { var gp = UIHelper.get_hang_lie(i, eachLine); quickCards[currentCardIndex].reCode(list[i].get_data().Id); quickCards[currentCardIndex].transform.localPosition = new Vector3(beginX + 44 * gp.y, beginY - 60 * gp.x, 0); currentCardIndex++; } int hangshu = list.Count / eachLine; int yushu = list.Count % eachLine; if (yushu > 0) { hangshu++; } currentHeight += 60 * hangshu; } } public void onResized() { if (monitor.gameObject.activeInHierarchy) { int newEach = (int)((monitor.width - 12f) / 44f); if (newEach != eachLine || monitorHeight != monitor.height) { monitorHeight = monitor.height; eachLine = newEach; realizeMonitor(); } } } public void setData(YGOSharp.Card card, Texture2D def, string tail = "",bool force=false) { if (cardShowerWidget.alpha == 0&&force==false) { return; } if (card == null) { return; } if (card.Id == 0) { apply(card,def,tail); return; } if (datas.Count > 0) { if (datas[datas.Count - 1].card.Id == card.Id) { datas[datas.Count - 1] = new data { card = card, def = def, tail = tail }; if (datas.Count > 300) { datas.RemoveAt(0); } current = datas.Count - 1; loadData(); return; } } datas.Add(new data { card = card, def = def, tail = tail }); if (datas.Count>300) { datas.RemoveAt(0); } current = datas.Count - 1; loadData(); } public void setTitle(string title) { UIHelper.trySetLableText(gameObject,"title_",title); } List Logs = new List(); public void mLog(string result) { Logs.Add(result); string all = ""; for (int i = 0; i < Logs.Count; i++) { if (i == Logs.Count - 1) { all += Logs[i].Replace("\0", ""); } else { all += Logs[i].Replace("\0", "") + "\n"; } } UIHelper.trySetLableTextList(UIHelper.getByName(gameObject, "chat_"), all); Program.go(8000, clearOneLog); } void clearOneLog() { if (Logs.Count>0) { Logs.RemoveAt(0); string all = ""; foreach (var item in Logs) { all += item + "\n"; } try { all = all.Substring(0, all.Length - 1); } catch (System.Exception e) { } UIHelper.trySetLableTextList(UIHelper.getByName(gameObject, "chat_"), all); } else { UIHelper.trySetLableTextList(UIHelper.getByName(gameObject, "chat_"), ""); } } public void clearAllLog() { Program.notGo(clearOneLog); Logs.Clear(); UIHelper.trySetLableTextList(UIHelper.getByName(gameObject, "chat_"), ""); } }