//マスを移動させる private void moveMas(int aNum, PlayerStatus aPlayer, Action aCallback) { int tCount = 0; Action tMove = () => { }; tMove = () => { int tNextMasNumber = (aPlayer.mCurrentMasNumber + 1) % mElement.mMasStatus.Length; MasStatus tNextMas = mElement.mMasStatus[tNextMasNumber]; MasDisplay tNextDisplay = mElement.mMasDisplay[tNextMasNumber]; mElement.mPlayerPieces[aPlayer.mPlayerNumber].moveToWithSpeed(tNextDisplay.position2D, 10, () => { aPlayer.mCurrentMasNumber = tNextMasNumber; tCount++; //通過イベント runPassEvent(aPlayer, () => { if (tCount < aNum) { tMove(); return; } aCallback(); }); }); }; tMove(); }
public override void selectOccupyLand(PlayerStatus aMyself, GameElementData aElement, Action <LandMasStatus> aAnser) { aElement.mTable.showOneSelectForm("占領する土地を\n選択してください", "占領しない"); LandMasStatus tSelected = null; //マスタップ監視 Subject.addObserver(new Observer("playerControllerTouchMas", (aMessage) => { if (aMessage.name != "touchMas") { return; //監視外メッセージ } MasStatus tMas = aElement.mMasStatus[aMessage.parameters.get <int>("number")]; if (!(tMas is LandMasStatus)) { return; //土地のマス以外 } LandMasStatus tLand = (LandMasStatus)tMas; if (tLand.mOwnerNumber >= 0) { return; //占領済マス } if (aMyself.mFood < tLand.mOccupyCost) { return; //所持食糧を超えるコストのマス } tSelected = tLand; aElement.mTable.hideMessage(); aElement.mTable.hideOneSelectForm(); aElement.mTable.question(tSelected.mName + "を占領しますか?\n食糧-" + tLand.mOccupyCost); })); //はい,いいえ,占領しない選択監視 Subject.addObserver(new Observer("playerControllerTableQuestion", (aMessage) => { if (aMessage.name == "yes") { Subject.removeObserver("playerControllerTouchMas"); Subject.removeObserver("playerControllerTableQuestion"); aElement.mTable.hideQuestionForm(); aAnser(tSelected); } else if (aMessage.name == "no") { aElement.mTable.hideQuestionForm(); tSelected = null; aElement.mTable.showOneSelectForm("占領する土地を\n選択してください", "占領しない"); } else if (aMessage.name == "oneSelect") { Subject.removeObserver("playerControllerTouchMas"); Subject.removeObserver("playerControllerTableQuestion"); aElement.mTable.hideOneSelectForm(); aAnser(null); } })); }
//手番で止まったマスのイベントの処理 private void runEventPhase(Action aCallback) { MasStatus tMas = mElement.mMasStatus[mTurnPlayer.mCurrentMasNumber]; switch (tMas) { case LandMasStatus tLand: runLandEventPhase(mTurnPlayer, tLand, aCallback); break; case AccidentMasStatus tAccident: runAccident(mTurnPlayer, tAccident, aCallback); break; case MasStatus t: aCallback(); break; } }
public override void freeLand(PlayerStatus aMyself, GameElementData aElement, Action <LandMasStatus> aAnser) { aElement.mTable.showMessage("解放する土地を\n選択してください"); LandMasStatus tSelected = null; //マスタップ監視 Subject.addObserver(new Observer("playerControllerTouchMas", (aMessage) => { if (aMessage.name != "touchMas") { return; //監視外メッセージ } MasStatus tMas = aElement.mMasStatus[aMessage.parameters.get <int>("number")]; if (!(tMas is LandMasStatus)) { return; //土地のマス以外 } LandMasStatus tLand = (LandMasStatus)tMas; if (tLand.mOwnerNumber != aMyself.mPlayerNumber) { return; //自分以外の土地 } tSelected = tLand; aElement.mTable.hideMessage(); aElement.mTable.question(tSelected.mName + "を解放しますか?\n食糧+" + tLand.mFreeCost); })); //はい,いいえ選択監視 Subject.addObserver(new Observer("playerControllerTableQuestion", (aMessage) => { if (aMessage.name == "yes") { Subject.removeObserver("playerControllerTouchMas"); Subject.removeObserver("playerControllerTableQuestion"); aElement.mTable.hideQuestionForm(); aAnser(tSelected); } else if (aMessage.name == "no") { aElement.mTable.hideQuestionForm(); tSelected = null; aElement.mTable.showMessage("解放する土地を\n選択してください"); } })); }
//マスの通過イベント処理 private void runPassEvent(PlayerStatus aPlayer, Action aCallback) { //通過するマス MasStatus tMas = mElement.mMasStatus[aPlayer.mCurrentMasNumber]; switch (tMas) { case StartMasStatus tStart: aPlayer.mLap += 1; //mElement.mTable.showMessage("周回ボーナス\n食糧+150"); getFood(aPlayer, 150, () => { mElement.mTable.hideMessage(); aCallback(); }); break; default: aCallback(); break; } }
private void initStatus() { //player //データ生成 mElement.mPlayerStatus = new PlayerStatus[mElement.mInitData.mPlayerDataList.Length]; for (int i = 0; i < mElement.mInitData.mPlayerDataList.Length; i++) { mElement.mPlayerStatus[i] = new PlayerStatus(); mElement.mPlayerStatus[i].mAnimalName = mElement.mInitData.mPlayerDataList[i].mAnimalName; mElement.mPlayerStatus[i].mPlayerNumber = i; mElement.mPlayerStatus[i].mController = mElement.mInitData.mPlayerDataList[i].mIsPlayer ? (GameController) new PlayerController() : (GameController) new AiController(); mElement.mPlayerStatus[i].mRank = 1; mElement.mPlayerStatus[i].mLap = 0; mElement.mPlayerStatus[i].mReverseLap = 0; mElement.mPlayerStatus[i].mFood = mElement.mStageData.mInitialFood * mElement.mInitData.mInitialFood / 100; mElement.mPlayerStatus[i].mTerritory = 0; mElement.mPlayerStatus[i].mCurrentMasNumber = 0; mElement.mPlayerStatus[i].mTurn = i; } //データ表示 for (int i = 0; i < mElement.mInitData.mPlayerDataList.Length; i++) { mElement.mPlayerStatusDisplay[i].initDisplay(mElement.mPlayerStatus[i]); } //mass //データ生成 List <StageData.Mas> tMasDataList = mElement.mStageData.mMas; mElement.mMasStatus = new MasStatus[tMasDataList.Count]; for (int i = 0; i < tMasDataList.Count; i++) { StageData.Mas tMasData = tMasDataList[i]; MasStatus tMas = null; switch (tMasData.mType) { case MasStatus.MasType.land: StageData.Land tLandData = tMasData as StageData.Land; LandMasStatus tLand = new LandMasStatus(); tLand.mName = tLandData.mName; tLand.mValue = tLandData.mValue; tLand.mAttribute1 = tLandData.mAttribute1; tLand.mAttribute2 = tLandData.mAttribute2; tLand.mOwnerNumber = -1; tLand.mExpansionLevel = 0; tMas = tLand; break; case MasStatus.MasType.start: tMas = new StartMasStatus(); break; case MasStatus.MasType.accident: AccidentMasStatus tAccident = new AccidentMasStatus(); tAccident.mAccidentKey = ((StageData.Accident)tMasData).mAccidentType; tMas = tAccident; break; } tMas.mType = tMasData.mType; tMas.mMasNumber = i; mElement.mMasDisplay[i].mEventListener.mMessage = "touchMas"; mElement.mMasDisplay[i].mEventListener.mArg = new Arg(new Dictionary <string, object>() { { "number", i } }); mElement.mMasStatus[i] = tMas; } //データ表示 for (int i = 0; i < mElement.mMasStatus.Length; i++) { if (mElement.mMasStatus[i].mType == MasStatus.MasType.land) { ((LandMasDisplay)mElement.mMasDisplay[i]).initDisplay((LandMasStatus)mElement.mMasStatus[i]); } } }