// Use this for initialization protected override void Awake() { areaWidth = 3 ; areaHeight = 4 ; //マップ地形は外部ファイル(Excelとか)から読み込めるようにする予定 areaField = new AREA[,]{ {AREA.NONE, AREA.NONE, AREA.NONE, AREA.NONE}, {AREA.NONE, AREA.NONE, AREA.NONE, AREA.NONE}, {AREA.NONE, AREA.NONE, AREA.NONE, AREA.NONE}, } ; areaUnit = new KP_Unit[areaWidth, areaHeight] ; base.Awake() ; }
//持ち駒を打つ public void SummonUnit(KP_Unit unit, int team, int x, int y) { guiController.SetInfo("Player" + (team + 1) + " summons " + unit.unitName + " to X" + x + "Y" + y) ; PlaceUnit(unit.unitId, team, x, y) ; unitsCaptured[team].Remove(unit) ; //Dieではないが,Destroyされるか分からない Destroy(unit.gameObject) ; }
//MOVEEND PHASE public void SetMoveend() { CallUnitSkill("SetMoveend") ; selectedUnit = null ; ChangePhase(PHASE.TURNEND) ; }
public void PlaySummon() { //プレイヤが座標を選択して返してくる point = players[turnPlayer].PlayMove() ; if( point != null ) { for(int y = 0; y < board.areaHeight; ++y) { for(int x = 0; x < board.areaWidth; ++x) { panels[x + y * board.areaWidth].DisableDisplay() ; } } //右クリックで選択をキャンセル(選択座標がエリア外or無効な座標) if( point.x < 0 || point.x > board.areaWidth || point.y < 0 || point.y > board.areaHeight || !(selectedUnit.GetSummonableArea()[point.x, point.y]) ) { selectedUnit = null ; ChangePhase(PHASE.MAIN) ; return ; } else { //召喚可能な座標であれば召喚 if(board.areaField[point.x, point.y] == KP_Board.AREA.NONE) { SummonUnit(selectedUnit, turnPlayer, point.x, point.y) ; ChangePhase(PHASE.SUMMONEND) ; } } } }
public void PlayMain() { //プレイヤが移動するユニットまたは召喚するユニットを選択して返してくる selectedUnit = players[turnPlayer].PlayMain() ; if( selectedUnit != null && selectedUnit.team == turnPlayer ) { if( !selectedUnit.isCaptured ) { if( !summoned && areaEnchant[turnPlayer][selectedUnit.posx, selectedUnit.posy] != ENCHANT.FREEZE ) { //選択したUnitが自分のユニットでボード上にあり(キャプチャ状態でなく)このターン召喚を行っておらずFREEZE状態でない場合 移動 ChangePhase(PHASE.MOVE) ; return ; } } else { //選択したUnitがキャプチャ状態の自分のユニットで召喚可能なコストの場合 召喚 if(selectedUnit.summonCost <= summonPower) { ChangePhase(PHASE.SUMMON) ; return ; } } selectedUnit = null ; ; } }
//ユニットを移動する 移動先に既に他のユニットがいれば取得する public void MoveUnit(KP_Unit unit, int x, int y) { if(board.areaUnit[x, y]) { guiController.SetInfo("Player" + (turnPlayer + 1) + "'s " + unit.unitName + " beats " + board.areaUnit[x, y].unitName + " on X" + x + "Y" + y) ; CaptureUnit(board.areaUnit[x, y].unitId, unit.team) ; board.areaUnit[x, y].Die() ; } else { guiController.SetInfo("Player" + (turnPlayer + 1) + "'s " + unit.unitName + " moves to X" + x + "Y" + y) ; } board.areaUnit[selectedUnit.posx, selectedUnit.posy] = null ; board.areaUnit[x, y] = selectedUnit ; selectedUnit.SetPosition(x, y) ; }