public void update(TouhouCardEngine.Card card, CardSkinData skin) { this.card = card; CostPropNumber.asText.text = card.getCost(null).ToString(); if (card.define.type == CardDefineType.SERVANT) { type = CardCategory.SERVANT; // TypeController = Type.Servant; //onTypeControllerServant?.Invoke(); AttackPropNumber.asText.text = card.getAttack(null).ToString(); LifePropNumber.asText.text = card.getLife(null).ToString(); } else if (card.define.type == CardDefineType.SPELL) { // TypeController = Type.Spell; type = CardCategory.SPELL; } if (skin != null) { Image.sprite = skin.image; NameText.text = skin.name; //{card:damage} DescText.text = skin.desc; // IsFaceupController = IsFaceup.True; isFaceup = true; } else { // IsFaceupController = IsFaceup.False; isFaceup = false; } }
public void update(TouhouCardEngine.Card card, CardSkinData skin) { this.card = card; CostPropNumber.asText.text = card.getCost().ToString(); if (card.define.type == CardDefineType.SERVANT) { TypeController = Type.Servant; AttackPropNumber.asText.text = card.getAttack().ToString(); LifePropNumber.asText.text = card.getLife().ToString(); } else { TypeController = Type.Spell; } if (skin != null) { Image.sprite = skin.image; NameText.text = skin.name; DescText.text = skin.desc; IsFaceupController = IsFaceup.True; } else { IsFaceupController = IsFaceup.False; } }
public void update(THHPlayer player, TouhouCardEngine.Card card, CardSkinData skin) { this.card = card; Table table = GetComponentInParent <Table>(); if (skin != null) { Image.sprite = skin.image; } AttackText.text = card.getAttack().ToString(); HpText.text = card.getCurrentLife().ToString(); if (table.selectableTargets != null && table.selectableTargets.Contains(this)) { HighlightController = Highlight.Yellow; } else if (table.player == player && table.game.currentPlayer == player && card.canAttack(table.game)) { HighlightController = Highlight.Green; } else { HighlightController = Highlight.None; } getChild("Root").getChild("Taunt").gameObject.SetActive(card.isTaunt()); getChild("Root").getChild("Shield").gameObject.SetActive(card.isShield()); }
public void update(Table table, THHPlayer self, THHPlayer player, TouhouCardEngine.Card card, CardSkinData skin) { this.card = card; Image.sprite = skin.image; CostPropNumber.asText.text = card.getCost(null).ToString(); if (card.isUsed(null)) { // IsUsedController = IsUsed.True; isUsed = true; } else { // IsUsedController = IsUsed.False; isUsed = false; } if (player == self && card.isUsable(table.game, player, out _) &&//技能是可用的 table.selectableTargets == null &&//没有在选择目标 table.canControl //是自己的回合 ) { // IsUsableController = IsUsable.True; isUsable = true; asButton.interactable = true; } else { // IsUsableController = IsUsable.False; isUsable = false; asButton.interactable = false; } }
/// <summary> /// 设置Skill的UI /// </summary> /// <param name="skill"></param> /// <param name="card"></param> public void setSkill(Skill skill, TouhouCardEngine.Card card) { CardSkinData skin = getSkin(card); skill.Image.sprite = skin.image; skill.CostPropNumber.asText.text = card.getCost(game).ToString(); if (card.isUsed(game)) { // skill.IsUsedController = Skill.IsUsed.True; skill.isUsed = true; } else { // skill.IsUsedController = Skill.IsUsed.False; skill.isUsed = false; } if (card.isUsable(game, player, out _) && //技能是可用的 !isSelectingTarget && //没有在选择目标 canControl //是自己的回合 ) { // skill.IsUsableController = Skill.IsUsable.True; skill.isUsable = true; skill.asButton.interactable = true; } else { // skill.IsUsableController = Skill.IsUsable.False; skill.isUsable = false; skill.asButton.interactable = false; } }
public void setItem(Item item, TouhouCardEngine.Card card) { CardSkinData skin = getSkin(card); item.Image.sprite = skin.image; item.AttackPropNumber.asText.text = card.getAttack(game).ToString(); item.DurabilityPropNumber.asText.text = card.getCurrentLife(game).ToString(); }
/// <summary> /// 设置Master的UI /// </summary> /// <param name="master"></param> /// <param name="card"></param> /// <param name="isSelectable"></param> public void setMaster(Master master, TouhouCardEngine.Card card, bool isSelectable = false) { CardSkinData skin = getSkin(card); master.Image.sprite = skin.image; master.LifePropNumber.asText.text = card.getCurrentLife(game).ToString(); //if (card.getCurrentLife() == card.getLife()) // HpText.color = Color.white; //else // HpText.color = Color.red; if (card.getAttack(game) > 0) { master.AttackPropNumber.asText.text = card.getAttack(game).ToString(); master.AttackPropNumber.asText.display(); master.AttackPropNumber.asText.display(); } else { master.AttackPropNumber.asText.hide(); master.AtkImage.hide(); } if (card.getArmor(game) > 0) { master.ArmorPropNumber.asText.text = card.getArmor(game).ToString(); master.ArmorPropNumber.display(); master.ArmorImage.display(); } else { master.ArmorPropNumber.asText.hide(); master.ArmorImage.hide(); } if (isSelectable) { // master.HighlightController = Master.Highlight.Yellow; master.onSelectableTrue.beforeAnim.Invoke(); master.onSelectableTrue.afterAnim.Invoke(); } else { master.onSelectableFalse.beforeAnim.Invoke(); master.onSelectableFalse.afterAnim.Invoke(); } if (card.getOwner() == player && game.currentPlayer == player && card.canAttack(game)) { // master.HighlightController = Master.Highlight.Green; master.onCanAttackTrue.beforeAnim.Invoke(); master.onCanAttackTrue.afterAnim.Invoke(); } else { // master.HighlightController = Master.Highlight.None; master.onCanAttackFalse.beforeAnim.Invoke(); master.onCanAttackFalse.afterAnim.Invoke(); } }
public UIObject getCharacter(TouhouCardEngine.Card card) { Master master = getMaster(card); if (master == null) { return(getServant(card)); } return(master); }
public bool tryGetItem(Card card, out Item item) { if (player.item == card) { item = ui.SelfItem; return(true); } else if (game.getOpponent(player).item == card) { item = ui.EnemyItem; return(true); } item = null; return(false); }
public void setItem(Item item, Card card) { if (card == null) { item.hide(); return; } item.display(); CardSkinData skin = getSkin(card); item.Image.sprite = skin.image; item.AttackPropNumber.asText.text = card.getAttack(game).ToString(); item.DurabilityPropNumber.asText.text = card.getCurrentLife(game).ToString(); }
public Master getMaster(TouhouCardEngine.Card card) { if (SelfMaster.card == card) { return(SelfMaster); } else if (EnemyMaster.card == card) { return(EnemyMaster); } else { return(null); } }
public static string replace(string desc, THHGame game, THHPlayer player, TouhouCardEngine.Card card) { string result = Regex.Replace(desc, @"{(?<obj>\w+):(?<name>.+)}", m => { string obj = m.Groups["obj"].Value; string name = m.Groups["name"].Value; if (obj == "card") { return(card.getProp(game, name).ToString()); } else { return("???"); } }); return(result); }
public Servant getServant(TouhouCardEngine.Card card) { foreach (var item in SelfFieldList) { if (item.card == card) { return(item); } } foreach (var item in EnemyFieldList) { if (item.card == card) { return(item); } } return(null); }
/// <summary> /// 尝试获取一张卡对应的Master /// </summary> /// <param name="card"></param> /// <param name="master"></param> /// <returns></returns> public bool tryGetMaster(Card card, out Master master) { if (player.master == card) { master = ui.SelfMaster; return(true); } else if (game.getOpponent(player).master == card) { master = ui.EnemyMaster; return(true); } else { master = null; return(false); } }
public void update(TouhouCardEngine.Card card, CardSkinData skin) { this.card = card; CostText.text = card.getCost().ToString(); AttackText.text = card.getAttack().ToString(); LifeText.text = card.getLife().ToString(); if (skin != null) { Image.sprite = skin.image; NameText.text = skin.name; DescText.text = skin.desc; IsFaceupController = IsFaceup.True; } else { IsFaceupController = IsFaceup.False; } }
/// <summary> /// 创建一张手牌 /// </summary> /// <param name="card"></param> /// <param name="position">默认为-1也就是最右手</param> /// <returns></returns> public HandListItem createHand(TouhouCardEngine.Card card, int position = -1) { if (cardHandDic.ContainsKey(card)) { UberDebug.LogErrorChannel("UI", "手牌中已经存在" + card + "对应UI" + cardHandDic[card]); return(cardHandDic[card]); } UberDebug.LogChannel("UI", "创建手牌UI:" + card); HandListItem item; if (card.getOwner() == player) { item = ui.SelfHandList.addItem(); if (position >= 0) { ui.SelfHandList.defaultItem.rectTransform.SetAsFirstSibling(); item.rectTransform.SetSiblingIndex(position + 1); } item.isDragable = true; setCard(item.Card, card, true); } else { item = ui.EnemyHandList.addItem(); if (position >= 0) { ui.EnemyHandList.defaultItem.rectTransform.SetAsFirstSibling(); item.rectTransform.SetSiblingIndex(position + 1); } item.isDragable = false; setCard(item.Card, card, false); } item.gameObject.name = card.ToString(); item.onDrag.set(onDragHand); item.onEndDrag.set(onDragHandEnd); cardHandDic.Add(card, item); return(item); }
/// <summary> /// 手牌拖拽事件 /// </summary> /// <param name="hand"></param> /// <param name="pointer"></param> void onDragHand(HandListItem hand, PointerEventData pointer) { if (!hand.isDragable) { return; } if (!canControl)//无法进行控制 { resetUse(true, true); return; } TouhouCardEngine.Card card = getCard(hand); if (usingCard != null && usingCard != card) { resetUse(true, true); return; } usingCard = card; //拖拽卡片 hand.Card.rectTransform.position = pointer.position; if (ui.SelfHandList.rectTransform.rect.Contains(ui.SelfHandList.rectTransform.InverseTransformPoint(pointer.position))) { //如果移动回手牌区域,恢复正常大小 hand.Card.rectTransform.localScale = Vector3.one; //移除随从占位 if (usingCard.isServant()) { hideServantPlaceHolder(); } } else { //移动到手牌区以外的地方视作打算使用 if (!usingCard.isUsable(game, player, out string info)) { //卡牌不可用,停止拖拽并提示 showTip(info); resetUse(true, true); } else { //手牌在战场上大小和随从牌一致 hand.Card.rectTransform.localScale = Vector3.one * .4f / ui.SelfHandList.rectTransform.localScale.y; if (usingCard.define is ServantCardDefine) { //如果手牌是随从,那么在场上的时候会有一个占位符,预览这个随从放下去的位置。 ui.SelfFieldList.defaultItem.rectTransform.SetAsFirstSibling(); ui.ServantPlaceHolder.rectTransform.sizeDelta = ui.SelfFieldList.defaultItem.rectTransform.sizeDelta; ui.SelfFieldList.addChild(ui.ServantPlaceHolder.rectTransform); ui.ServantPlaceHolder.display(); ui.ServantPlaceHolder.rectTransform.SetSiblingIndex(calcIndexInField(pointer.position) + 1); } else if (usingCard.define is SpellCardDefine) { if (usingCard.isNeedTarget(game, out var targets)) { if (!isSelectingTarget) { isSelectingTarget = true;//TODO:这个地方一定要重写,怎么能这样的?isSelectingTarget就应该被usingCard取代 highlightTargets(targets); ui.SelfHandList.shrink(); } hand.Card.hide(); if (tryGetMaster(usingCard.getOwner().master, out var castMaster)) { displayArrow(castMaster.rectTransform.position, pointer.position); } } } } } }
public CardSkinData getSkin(TouhouCardEngine.Card card) { return(getSkin(card.define)); }
public void onReleaseHand(HandListItem item, PointerEventData pointer) { if (item.GetComponentInParent <HandList>() != SelfHandList)//你不能用别人的卡 { return; } if (!canControl)//不是你的回合,不生效 { resetUse(true, true); return; } usingHand = item; if (SelfHandList.rectTransform.rect.Contains(SelfHandList.rectTransform.InverseTransformPoint(pointer.position))) { //如果松开,取消使用 resetUse(true, true); } else { if (!item.Card.card.isUsable(game, player, out string info)) { //卡牌不可用 showTip(info); resetUse(true, true); } else if (item.Card.card.define is ServantCardDefine) { //松开鼠标,确认使用随从牌 var servants = SelfFieldList.getItems(); int index = 0; if (servants.Length > 0) { //需要选择空位,计算空位 for (int i = 0; i < servants.Length; i++) { if (servants[i].rectTransform.position.x < pointer.position.x) { index = i + 1; } } ServantPlaceHolder.rectTransform.SetSiblingIndex(index + 1); } if (item.Card.card.getAvaliableTargets(game) is TouhouCardEngine.Card[] targets && targets.Length > 0) { _usingCard = item.Card.card; _usingPosition = index; //进入选择目标状态,固定手牌到占位上,高亮可以选择的目标 item.Card.hide(); //显示占位随从 ServantPlaceHolder.Servant.display(); ServantPlaceHolder.Servant.update(item.Card.card.define, getSkin(item.Card.card)); isSelectingTarget = true; selectableTargets = targets.Select(target => { if (getMaster(target) is Master master) { return(master as UIObject); } else if (getServant(target) is Servant servant) { return(servant as UIObject); } throw new ActorNotFoundException(target); }).ToArray(); SelfHandList.shrink(); } else { //使用无目标随从牌 player.cmdUse(game, item.Card.card, index); resetUse(false, false); } }
/// <summary> /// 手牌拖拽结束 /// </summary> /// <param name="hand"></param> /// <param name="pointer"></param> void onDragHandEnd(HandListItem hand, PointerEventData pointer) { if (hand.GetComponentInParent <HandList>() != ui.SelfHandList)//你不能用别人的卡 { return; } if (!canControl)//不是你的回合,不生效 { resetUse(true, true); return; } usingCard = getCard(hand); if (ui.SelfHandList.rectTransform.rect.Contains(ui.SelfHandList.rectTransform.InverseTransformPoint(pointer.position))) { //如果松开,取消使用 resetUse(true, true); } else { if (!usingCard.isUsable(game, player, out string info)) { //卡牌不可用 showTip(info); resetUse(true, true); } else if (usingCard.define is ServantCardDefine) { //松开鼠标,确认使用随从牌 int index = calcIndexInField(pointer.position); ui.ServantPlaceHolder.rectTransform.SetSiblingIndex(index + 1); if (usingCard.getAvaliableTargets(game) is TouhouCardEngine.Card[] targets && targets.Length > 0) { usingPosition = index; //进入选择目标状态,固定手牌到占位上,高亮可以选择的目标 addAnim(new HandToFieldAnim(this, hand, ui.SelfFieldList, index)); TouhouCardEngine.Card localUsingCard = usingCard; addAnim(new CodeAnim(() => { hand.Card.hide(); //显示占位随从 ui.ServantPlaceHolder.Servant.display(); try { setServant(ui.ServantPlaceHolder.Servant, localUsingCard.define); } catch (NullReferenceException e) { Debug.LogError(e); } })); isSelectingTarget = true; highlightTargets(targets); ui.SelfSkill.isUsable = false; ui.SelfHandList.shrink(); } else { //使用无目标随从牌 player.cmdUse(game, usingCard, index); resetUse(false, false); } }