//--------------------------------------------------------------------------- //手札を増やす-------------------------------- public void IncreaseHand(CardMain card) { _card.Add(card); card.transform.parent = this.transform; Sort(player); }
//----------------------------------------------------------------------------------------- //ダイレクトアタック処理Update------------------------------------------------------------------------ void EnemyDirectAttackUpdate( ) { for (int i = 0; i < ConstantStorehouse.SQUARE_ROW_NUM; i++) { Square square = _field.getSquare((ConstantStorehouse.SQUARE_ROW_NUM * ConstantStorehouse.FIFTH_ROW_INDEX) + i); // ( 横のマス数 × 五列目 ) + 左からの番号 if (square.On_Card == null) { continue; } if (square.On_Card.gameObject.tag != ConstantStorehouse.TAG_PLAYER2) { continue; } CardMain directAttackCard = square.On_Card; int nowAP = _enemyActivePoint.Point_Num; if (directAttackCard.Card_Data._necessaryAP > nowAP) { continue; } if (directAttackCard.Action_Count >= directAttackCard.MAX_ACTION_COUNT) { continue; } _enemy.DirectAttack(_player, directAttackCard.Card_Data._necessaryAP, directAttackCard); return; } _enemyBehaviorStatus = ENEMY_BEHAVIOR_STATUS.MOVE; }
//----------------------------------------------------------------------------------------------------- //移動できたら移動して移動できたかどうかを返す----------------------------------------------------------- bool EnemyCardMove(CardMain enemyMoveCard, Square nowSquare, PRIORITY_DIRECTION priority) { List <Field.DIRECTION> directions = EnemyDirectionSorting(enemyMoveCard, priority); if (directions.Count == 0) { return(false); } List <Field.DIRECTION> enemyDirection = new List <Field.DIRECTION>( ); for (int i = 0; i < directions.Count; i++) { enemyDirection.Add(directions[i]); List <Field.DIRECTION> preDirection = enemyMoveCard.Card_Data_Direction; enemyMoveCard.Card_Data_Direction = enemyDirection; //一時的にエネミーのカードの移動先を書き換えている。 List <Square> moveSquare = _field.MovePossibleSquare(enemyMoveCard, enemyMoveCard.Card_Data._directionOfTravel, nowSquare); if (moveSquare.Count == 0) { enemyMoveCard.Card_Data_Direction = preDirection; enemyDirection.Remove(directions[i]); continue; } MoveCard(enemyMoveCard, nowSquare, moveSquare[0]); //あとでこの関数の役割を分けないといけない enemyMoveCard.Card_Data_Direction = preDirection; return(true); } return(false); }
//-------------------------------------------------------------- //移動できる場所を事前に調べる関数------------------------------------------------------------------------------------------------- public List <Square> MovePossibleSquare(CardMain card, List <DIRECTION> direction, Square nowSquare, int distans = 1) { List <Square> squares = new List <Square>( ); //移動できるマスだけ格納 List <DIRECTION> directions = card.getDirections(card.gameObject.tag, direction); for (int i = 0; i < directions.Count; i++) { Square square = SquareInThatDirection(nowSquare, directions[i], distans); if (square == null) { continue; } if (square.On_Card != null) { if (square.On_Card.gameObject.tag == card.gameObject.tag) { continue; //マスにあるのが自分のカードだったらcontinue } } squares.Add(square); } return(squares); }
//-------------------------------------------------------------- //召喚処理----------------------------------------------------------------------------------------------------------- public void Summon(CardMain card, Square square, string player) { List <Square> summonableSquares = _field.SummonSquare(player); for (int i = 0; i < summonableSquares.Count; i++) { if (square.Index != summonableSquares[i].Index) { continue; } _hand.DecreaseHandCard(card); GameObject fieldCardObj = Instantiate(_fieldCard, square.transform.position, Quaternion.identity); //生成はHnadがやるプレイヤーがやる? if (fieldCardObj.gameObject.tag == ConstantStorehouse.TAG_PLAYER2) { fieldCardObj.transform.eulerAngles = new Vector3(ENEMY_FIELD_CARD_ROTA_X, 0, 0); //反転 } CardMain fieldCard = fieldCardObj.GetComponent <CardMain>( ); fieldCard.loadID = card.loadID; //召喚エフェクト処理 Vector3 effectPos = fieldCardObj.transform.position; effectPos.z = Camera.main.transform.position.z + 1f; //カメラに近い位置に生成したいため Instantiate <AutoDestroyEffect>(_summonEffect, effectPos, Quaternion.identity); _magicPoint.DecreasePoint(card.Card_Data._necessaryMP); square.On_Card = fieldCard; AddMyFieldCards(fieldCard); return; } }
//---------------------------------------------------------------------------------------------------------------------------------- //攻撃効果をするマスにカードがあるマスを事前に調べる関数----------------------------------------------------------------------------------- public List <Square> AttackEffectPossibleOnCardSquare(CardMain card, Square nowSquare) { List <Square> squares = new List <Square>( ); //攻撃できるマスだけ格納 List <Field.DIRECTION> directions = card.getDirections(card.gameObject.tag, card.Card_Data._effect_direction); for (int i = 0; i < directions.Count; i++) { Square square = SquareInThatDirection(nowSquare, directions[i], card.Card_Data._effect_distance); if (square == null) { continue; } if (square.On_Card == null) { continue; } squares.Add(square); } Debug.Log(squares); return(squares); }
//----------------------------------------------------------------------------------- //回復効果(オーバロード)---------------------------------------- public void UseEffect(CardMain card) { card.Recovery(card.Card_Data._effect_value); //エフェクト処理--------------------------------------------------------------- Instantiate <AutoDestroyEffect>(_recoveryEffect, card.transform.position, Quaternion.identity); //---------------------------------------------------------------------------- _activePoint.DecreasePoint(card.Card_Data._necessaryAPForEffect); }
//---------------------------------------------------------------------------------------------------------------------------------------------- //ダイレクトアタック処理-------------------------------------------------- public void DirectAttack(Participant opponentPlayer, int moveAp, CardMain card) { _activePoint.DecreasePoint(moveAp); opponentPlayer._lifePoint.DecreasePoint(1); card.Action_Count++; //ダイレクトアタックアニメーション-------------------- _opponentLifeSpace.StartDirectAttackAnimation( ); //-------------------------------------------------- }
//----------------------------------------------------- //ドロー処理--------------------------- public void Draw( ) { CardMain card = _deck.Draw( ); if (card) { card.gameObject.tag = this.gameObject.tag; //自身のカードであることを示すタグを付ける card.gameObject.layer = LayerMask.NameToLayer("HandCard"); //手札レイヤー層に設定する _hand.IncreaseHand(card); } }
//------------------------------------------------------------------------------------------- //移動効果(オーバロード)------------------------------------------------------------- public void UseEffect(CardMain card, Square nowSquare, Square touchSquare) { bool isMoved = MoveCard(card, card.Card_Data._effect_direction, card.Card_Data._necessaryAPForEffect, nowSquare, touchSquare, card.Card_Data._effect_distance); //エフェクト処理----------------------------------------------------------------------------------------- if (isMoved) { Instantiate <AutoDestroyEffect>(_moveEffect, touchSquare.transform.position, Quaternion.identity); } //------------------------------------------------------------------------------------------------------ }
void EnemyTurnUpdate( ) { List <CardMain> handCards = _turnPlayer.Hand_Cards; CardMain card = handCards[0]; _turnPlayer.HandThrowAway(card); if (_turnPlayer.Hand_Num == _turnPlayer.Max_Hnad_Num) { _didHandThrowAway = true; } }
//召喚処理Update------------------------------------------------------------------- void EnemySummonUpdate( ) { List <Square> summonSquares = _field.SummonSquare(_enemy.gameObject.tag); if (summonSquares.Count == 0) { _enemyBehaviorStatus = ENEMY_BEHAVIOR_STATUS.DIRECT_ATTACK; return; } CardMain summonCard = null; summonCard = SummonCardSearch( ); if (summonCard == null) { _enemyBehaviorStatus = ENEMY_BEHAVIOR_STATUS.DIRECT_ATTACK; return; } Square summonSquare = null; //第一条件 summonSquare = FirstPrioritySquareSearch( ); if (summonSquare != null) { Summon(summonCard, summonSquare); return; } //第二条件 summonSquare = SecondPrioritySquareSearch( ); if (summonSquare != null) { Summon(summonCard, summonSquare); return; } //第三条件 summonSquare = ThirdPrioritySquareSearch( ); if (summonSquare != null) { Summon(summonCard, summonSquare); return; } if (summonSquare == null) { _enemyBehaviorStatus = ENEMY_BEHAVIOR_STATUS.DIRECT_ATTACK; return; } }
//--------------------------------------------------------------- //手札のカードがタッチされたら処理------------------------------------------- void HandCardTouch( ) { _handCard = _rayShooter.RayCastHandCard(_turnPlayer.gameObject.tag); if (_handCard == null) { return; } _handCardPos = _handCard.transform.position; _handCard.gameObject.GetComponent <BoxCollider2D>( ).enabled = false; _handCard.CardExpansion( ); _mainPhaseStatus = MAIN_PHASE_STATUS.HAND_CARD_OPERATION; }
private void FmMOReport_Load(object sender, EventArgs e) { if (string.IsNullOrEmpty(cardNo)) { throw new Exception("流转卡号不能为空!"); } else if (!dal.Exists(cardNo)) { throw new Exception("流转卡号[" + cardNo + "] 不存在!"); } this.cardM = dal.GetCardMain(cardNo); this.LoadData(); }
//-------------------------------------------------------------------------------------------------------- //移動ボタンの表示処理----------------------------------------------------------------------------- void MoveButtonActiveConditions(CardMain card, Participant turnPlayer, Square nowSquare) { if (MainPhase._precedenceOneTurnFlag) { return; } //APが消費する分あって移動できるマスがあったてまだ行動できるカードだったら if (turnPlayer.DecreaseActivePointConfirmation(card.Card_Data._necessaryAP) && _field.MovePossibleSquare(card, card.Card_Data._directionOfTravel, nowSquare).Count > 0 && card.Action_Count < card.MAX_ACTION_COUNT) { ButtonActiveChanger(true, BUTTON.MOVE); } }
private void gridView1_FocusedRowChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs e) { if (e.FocusedRowHandle > -1) { CardMain cardm = ConvertToModel.DataRowToModel <CardMain>(GirdCard.GetFocusedDataRow()); gridControl2.DataSource = dal.GetDetailList(cardm.CardNo); gridControl3.DataSource = dal.GetChildList(cardm.CardNo); } else { gridControl2.DataSource = null; gridControl3.DataSource = null; } }
private void BtnOK_Click(object sender, EventArgs e) { List <DataRow> list = new List <DataRow>(); List <DataRow> children = new List <DataRow>(); foreach (ListViewItem item in listView1.Items) { list.Add(item.Tag as DataRow); } foreach (DataRow r in woModel.WorkOrderDetail.Rows) { if (r["iQty"].ToString() == "" || Convert.ToDecimal(r["iQty"]) <= 0) { throw new Exception("材料数量不能小于等于0!"); } children.Add(r); } CardMain cardM = new CardMain(); cardM.bChild = true; cardM.cInvCode = model.cInvCode; cardM.WOGuid = model.WOGuid; cardM.pCardNo = model.CardNo; cardM.cMemo = txt_cMemo.Text.Trim(); cardM.iQuantity = Convert.ToDecimal(txt_curQuantity.Text); cardM.cMaker = Information.UserInfo.cUser_Name; this.cardNo = new MCardDAL().CreateCard(cardM, list.ToArray(), children.ToArray()); this.txtr_cardNo.Text = cardNo; this.txt_curQuantity.Enabled = false; this.txtr_cardNo.Enabled = false; this.txt_cMemo.Enabled = false; this.BtnCreate.Enabled = false; this.BtnAddOp.Enabled = false; this.BtnDelOp.Enabled = false; this.BtnDelChild.Enabled = false; }
void PlayerTurnUpdate( ) { if (_mainSceneOperation.MouseTouch( )) { CardMain card = _rayShooter.RayCastHandCard(_turnPlayer.gameObject.tag); if (card == null) { return; } _turnPlayer.HandThrowAway(card); if (_turnPlayer.Hand_Num == _turnPlayer.Max_Hnad_Num) { _didHandThrowAway = true; _uiActiveManager.TextActiveChanger(false, UIActiveManager.TEXT.HAND_CARD_LIMIT); } } }
//------------------------------------------------------------------------------- //攻撃効果(オーバロード)--------------------------------------------------------------------- public void UseEffect(CardMain card, Square nowSquare) { List <Square> squares = new List <Square>( ); //効果範囲内でカードがあるマスだけ格納 squares = _field.AttackEffectPossibleOnCardSquare(card, nowSquare); for (int i = 0; i < squares.Count; i++) { _cardDamageManager.CardEffectDamage(squares[i], card.Card_Data._effect_value); //エフェクト処理----------------------------------------------------------------------------------------- Instantiate <AutoDestroyEffect>(_blackDamageEffect, squares[i].transform.position, Quaternion.identity); //------------------------------------------------------------------------------------------------------ } _activePoint.DecreasePoint(card.Card_Data._necessaryAPForEffect); }
//----------------------------------------------------------------- //手札を消費する------------------------------------------------------------- public void DecreaseHandCard(CardMain card) //今のやりかたでは別にCardを返す理由が思いつかなかったのでvoidに変更 { for (int i = 0; i < _card.Count; i++) { if (_card[i] != card) { continue; } Destroy(_card[i].gameObject); _card.Remove(_card[i]); Sort(player); return; } Debug.Log("[エラー]手札に登録されていないカードを使おうとしています"); }
//---------------------------------------------------------------------------- //フィールドカードの操作系UIの表示処理---------------------------------------------------------------------------- public void ShowCardOperationUI(CardMain card, Participant turnPlayer, Square nowSquare) { //自分のカードだったら if (card.gameObject.tag == turnPlayer.gameObject.tag) { ButtonActiveChanger(true, BUTTON.BACK); EffectButtonActiveConditions(card, turnPlayer, nowSquare); MoveButtonActiveConditions(card, turnPlayer, nowSquare); DirectAttackButtonActiveConditions(card, turnPlayer, nowSquare); } //相手のカードだったら if (card.gameObject.tag != turnPlayer.gameObject.tag) { ButtonActiveChanger(true, BUTTON.BACK); } }
//攻撃効果のダメージによる処理---------------------------------------- public void CardEffectDamage(Square onCardSquare, int damage) { if (onCardSquare == null) { Debug.Log("[エラー]マスがありません"); return; } CardMain damageCard = onCardSquare.On_Card; damageCard.Damage(damage); if (damageCard.Card_Data._toughness == 0) { damageCard.Death( ); onCardSquare.On_Card = null; } }
//------------------------------------------------------------------------------------------------- //エフェクトボタンの表示処理------------------------------------------------------------------------------ void EffectButtonActiveConditions(CardMain card, Participant turnPlayer, Square nowSquare) { if (MainPhase._precedenceOneTurnFlag) { return; } //効果の種類によって処理を変える //効果ボタン表示条件 switch (card.Card_Data._effect_type) { case CardData.EFFECT_TYPE.ATTACK: if (turnPlayer.DecreaseActivePointConfirmation(card.Card_Data._necessaryAPForEffect) && _field.AttackEffectPossibleOnCardSquare(card, nowSquare).Count > 0) { ButtonActiveChanger(true, BUTTON.EFFECT); } break; case CardData.EFFECT_TYPE.MOVE: if (turnPlayer.DecreaseActivePointConfirmation(card.Card_Data._necessaryAPForEffect) && _field.MovePossibleSquare(card, card.Card_Data._effect_direction, nowSquare, card.Card_Data._effect_distance).Count > 0 && card.Action_Count < card.MAX_ACTION_COUNT) { ButtonActiveChanger(true, BUTTON.EFFECT); } break; case CardData.EFFECT_TYPE.RECOVERY: if (turnPlayer.DecreaseActivePointConfirmation(card.Card_Data._necessaryAPForEffect) && card.Card_Data._toughness < card.Card_Data._maxToughness) { ButtonActiveChanger(true, BUTTON.EFFECT); } break; case CardData.EFFECT_TYPE.NO_EFFECT: break; default: Debug.Log("想定していない効果がボタン表示に来ています"); break; } }
//------------------------------------------------------------------------------------- //召喚処理-------------------------------------------------------------------------------- void HandCardSummon( ) { List <Square> summonableSquares = _field.SummonSquare(_turnPlayer.gameObject.tag); //MPが足りなかったら if (!_turnPlayer.DecreaseMPointConfirmation(_handCard.Card_Data._necessaryMP)) { HandCardRestore( ); _mainPhaseStatus = MAIN_PHASE_STATUS.IDLE; return; } Square rayHitedSquare = _rayShooter.RayCastSquare( ); //離したときにマスがなかったら if (rayHitedSquare == null) { HandCardRestore( ); _handCard.gameObject.GetComponent <BoxCollider2D>( ).enabled = true; _mainPhaseStatus = MAIN_PHASE_STATUS.IDLE; return; } //召喚 for (int i = 0; i < summonableSquares.Count; i++) { if (rayHitedSquare.Index != summonableSquares[i].Index) { continue; } _turnPlayer.SquareChangeColor(summonableSquares, false); _turnPlayer.Summon(_handCard, rayHitedSquare, _turnPlayer.gameObject.tag); _handCard = null; _mainPhaseStatus = MAIN_PHASE_STATUS.IDLE; return; } _turnPlayer.SquareChangeColor(summonableSquares, false); HandCardRestore( ); _mainPhaseStatus = MAIN_PHASE_STATUS.IDLE; }
//-------------------------------------------------- //フィールドのカードがタッチされたら処理------------------------ void FieldCardTouch( ) { //カードとそのマスの取得 _nowSquare = _rayShooter.RayCastSquare( ); if (_nowSquare == null) { return; } _card = _nowSquare.On_Card; if (_card == null) { return; } ShowCardDetails( ); //カードの詳細画像の表示 ShowCardOperationUI( ); //プレイヤーによって表示するUI _mainPhaseStatus = MAIN_PHASE_STATUS.CARD_DETAILS; }
//------------------------------------------------------------------------------------------------------- //エネミーカードの移動したくてかつできる場所を優先順位が高い順に抽出する------------------------- List <Field.DIRECTION> EnemyDirectionSorting(CardMain card, PRIORITY_DIRECTION priorityDirection) { Field.DIRECTION[] enemyDirections = null; switch (priorityDirection) { case PRIORITY_DIRECTION.RIGHT_PRIORITY: Field.DIRECTION[] right = { Field.DIRECTION.RIGHT }; enemyDirections = right; break; case PRIORITY_DIRECTION.LEFT_PRIORITY: Field.DIRECTION[] left = { Field.DIRECTION.LEFT }; enemyDirections = left; break; case PRIORITY_DIRECTION.NORMAR: Field.DIRECTION[] normarDirections = { Field.DIRECTION.FORWAED, Field.DIRECTION.LEFT_FORWARD, Field.DIRECTION.RIGHT_FORWARD, Field.DIRECTION.RIGHT, Field.DIRECTION.LEFT }; enemyDirections = normarDirections; break; } List <Field.DIRECTION> direction = new List <Field.DIRECTION>( ); for (int i = 0; i < enemyDirections.Length; i++) { for (int j = 0; j < card.Card_Data._directionOfTravel.Count; j++) { if (card.Card_Data._directionOfTravel[j] != enemyDirections[i]) { continue; } direction.Add(card.Card_Data._directionOfTravel[j]); } } return(direction); }
//----------------------------------------------------------------- //戦闘のダメージ処理によって戦闘の結果を返す------------------------------------------------------ public BATTLE_RESULT CardBattleDamage(Square onPlayerCardSquare, Square onEnemyCardSquare) { if (onPlayerCardSquare == null || onEnemyCardSquare == null) { Debug.Log("[エラー]マスがありません"); return(BATTLE_RESULT.NOT_BATTLE); } CardMain playerCard = onPlayerCardSquare.On_Card; CardMain enemy_card = onEnemyCardSquare.On_Card; playerCard.Damage(enemy_card.Card_Data._attack); enemy_card.Damage(playerCard.Card_Data._attack); if (playerCard.Card_Data._toughness == 0 && enemy_card.Card_Data._toughness == 0) { onPlayerCardSquare.On_Card = null; onEnemyCardSquare.On_Card = null; return(BATTLE_RESULT.BOTH_DEATH); } if (enemy_card.Card_Data._toughness == 0) { onEnemyCardSquare.On_Card = null; return(BATTLE_RESULT.PLAYER_WIN); } if (playerCard.Card_Data._toughness == 0) { onPlayerCardSquare.On_Card = null; return(BATTLE_RESULT.PLAYER_LOSE); } if (playerCard.Card_Data._toughness > 0 && enemy_card.Card_Data._toughness > 0) { return(BATTLE_RESULT.BOTH_ALIVE); } Debug.Log("[エラー]戦闘の結果がおかしいです"); return(BATTLE_RESULT.NOT_BATTLE); }
//------------------------------------------------------------------------------------------------------ //第二優先カード移動------------------------------------------------------------------------------------- //移動したかどうかをboolで返す bool SecondPriorityMoveCard( ) { for (int i = 0; i < _field.Max_Index; i++) { Square square = _field.getSquare(i); if (square == null) { continue; } if (square.On_Card == null) { continue; } if (square.On_Card.gameObject.tag != ConstantStorehouse.TAG_PLAYER2) { continue; } CardMain enemyMoveCard = null; enemyMoveCard = square.On_Card; int nowAP = _enemyActivePoint.Point_Num; if (enemyMoveCard.Card_Data._necessaryAP > nowAP) { continue; } if (enemyMoveCard.Action_Count >= enemyMoveCard.MAX_ACTION_COUNT) { continue; } if (!EnemyCardMove(enemyMoveCard, square, PRIORITY_DIRECTION.NORMAR)) { continue; } return(true); } return(false); }
//------------------------------------------------------------------------------------------------- //攻撃ボタンの表示処理--------------------------------------------------------------------------------------------- void DirectAttackButtonActiveConditions(CardMain card, Participant turnPlayer, Square nowSquare) { if (MainPhase._precedenceOneTurnFlag) { return; } //消費するAPがあってまだ行動できるカードだったら if (turnPlayer.DecreaseActivePointConfirmation(card.Card_Data._necessaryAP) && card.Action_Count < card.MAX_ACTION_COUNT) { if (((nowSquare.Index) / ConstantStorehouse.SQUARE_ROW_NUM == ConstantStorehouse.FIRST_ROW_INDEX) && card.gameObject.tag == "Player1") //一列目にいたら攻撃ボタンを表示//修正するだろうからマジックナンバーを放置 { ButtonActiveChanger(true, BUTTON.DIRECT_ATTACK); } //if ( ( ( _nowSquare.Index ) / SQUARE_ROW_NUM == FIFTH_ROW_INDEX ) && _card.gameObject.tag == "Player2" ) { //五列目にいたら攻撃ボタンを表示//修正するだろうからマジックナンバーを放置 // _directAttackButton.SetActive( true ); //} } }
//--デッキからカードをドローする関数 public CardMain Draw( ) { CardMain card = null; //ドロー処理-------------------------------------------------------------------------------------------------------- if (_cardIDs.Count > 0) { GameObject prefab = (GameObject)Resources.Load("Prefab/Card"); GameObject cardObj = (GameObject)Instantiate(prefab, Vector3.zero, Quaternion.identity); //原点にInstantiateする card = cardObj.GetComponent <CardMain> (); card.loadID = _cardIDs [0]; //デッキトップのカードIDを読み込むように設定する _cardIDs.RemoveAt(0); _deckNum = _cardIDs.Count; //デッキ枚数の更新 } else { Debug.Log("デッキのカードがありません!!"); } //----------------------------------------------------------------------------------------------------------------- return(card); }