public void setGame(THHGame game, THHPlayer player) { InitReplaceDialog.hide(); TurnTipImage.hide(); SelfHandList.clearItems(); SelfFieldList.clearItems(); EnemyFieldList.clearItems(); EnemyHandList.clearItems(); AttackArrowImage.hide(); Fatigue.hide(); }
partial void onAwake() { SelfHandList.asButton.onClick.AddListener(() => { if (SelfHandList.isExpanded) { SelfHandList.shrink(); } else { SelfHandList.expand(); } }); }
public void setGame(THHGame game, THHPlayer player) { InitReplaceDialog.hide(); TurnTipImage.hide(); SelfHandList.clearItems(); SelfFieldList.clearItems(); EnemyFieldList.clearItems(); EnemyHandList.clearItems(); AttackArrowImage.hide(); Fatigue.hide(); _animationQueue.Clear(); if (game != null) { game.triggers.onEventBefore -= onEventBefore; game.triggers.onEventAfter -= onEventAfter; } this.game = game; if (game != null) { game.triggers.onEventBefore += onEventBefore; game.triggers.onEventAfter += onEventAfter; } if (player != null) { SelfSkill.asButton.onClick.RemoveAllListeners(); TurnEndButton.onClick.RemoveAllListeners(); } this.player = player; if (player != null) { SelfSkill.asButton.onClick.AddListener(() => { if (selectableTargets != null) { return; } player.cmdUse(game, SelfSkill.card, 0); }); TurnEndButton.onClick.AddListener(() => { player.cmdTurnEnd(game); //SelfHandList.stopPlacing(true); resetUse(true, true); selectableTargets = null; }); } }
protected void Update() { if (_tipTimer.isExpired()) { _tipTimer.reset(); TipText.gameObject.SetActive(false); } else if (_tipTimer.isStarted) { TipText.color = new Color(TipText.color.r, TipText.color.g, TipText.color.b, 1 /*_tipTimer.getRemainedTime() / _tipTimer.duration*/); } if (game == null) { return; } if (player == null) { return; } SelfMaster.update(this, player, player.master, getSkin(player.master)); if (player.skill != null) { SelfSkill.update(this, player, player, player.skill, getSkin(player.skill)); SelfSkill.display(); } else { SelfSkill.hide(); } SelfGem.Text.text = player.gem.ToString(); SelfHandList.updateItems(player.hand.ToArray(), (item, card) => item.Card.card == card, (item, card) => { if (item.Card.isDisplaying) { item.Card.update(card, getSkin(card)); } }); SelfHandList.sortItems((a, b) => player.hand.indexOf(a.Card.card) - player.hand.indexOf(b.Card.card)); foreach (var servant in SelfFieldList) { servant.update(player, servant.card, getSkin(servant.card)); } if (game.currentPlayer == player) { TurnEndButton.interactable = true; TurnEndButton.GetComponent <Image>().color = Color.white; } else { TurnEndButton.interactable = false; TurnEndButton.GetComponent <Image>().color = Color.gray; } THHPlayer opponent = game.getOpponent(player); if (opponent == null) { return; } EnemyMaster.update(this, opponent, opponent.master, getSkin(opponent.master)); if (opponent.skill != null) { EnemySkill.update(this, player, opponent, opponent.skill, getSkin(opponent.skill)); EnemySkill.display(); } else { EnemySkill.hide(); } EnemyGem.Text.text = opponent.gem.ToString(); EnemyHandList.updateItems(opponent.hand.ToArray(), (item, card) => item.Card.card == card, (item, card) => { item.Card.update(card, null); }); EnemyHandList.sortItems((a, b) => opponent.hand.indexOf(a.Card.card) - opponent.hand.indexOf(b.Card.card)); foreach (var servant in EnemyFieldList) { servant.update(opponent, servant.card, getSkin(servant.card)); } IRequest request = game.answers.getLastRequest(player.id); if (request is InitReplaceRequest initReplace) { if (!InitReplaceDialog.isDisplaying) { InitReplaceDialog.display(); InitReplaceDialog.InitReplaceCardList.clearItems(); InitReplaceDialog.InitReplaceCardList.updateItems(player.init, (i, c) => i.Card.card == c, (item, card) => { item.Card.update(card, getSkin(card)); item.MarkImage.enabled = false; item.asButton.onClick.RemoveAllListeners(); item.asButton.onClick.AddListener(() => { item.MarkImage.enabled = !item.MarkImage.enabled; }); }); InitReplaceDialog.InitReplaceCardList.sortItems((a, b) => player.init.indexOf(a.Card.card) - player.init.indexOf(b.Card.card)); InitReplaceDialog.ConfirmButton.interactable = true; InitReplaceDialog.ConfirmButton.GetComponent <Image>().color = Color.white; InitReplaceDialog.ConfirmButton.onClick.RemoveAllListeners(); InitReplaceDialog.ConfirmButton.onClick.AddListener(() => { game.answers.answer(player.id, new InitReplaceResponse() { cardsId = InitReplaceDialog.InitReplaceCardList.Where(item => item.MarkImage.enabled).Select(item => item.Card.card.id).ToArray() }); InitReplaceDialog.ConfirmButton.interactable = false; InitReplaceDialog.ConfirmButton.GetComponent <Image>().color = Color.gray; }); } } else { InitReplaceDialog.hide(); } if (_animationQueue.Count > 0) { Animation animation = _animationQueue[0]; if (animation.update(this)) { _animationQueue.RemoveAt(0); } } }
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); } }