public override void OnSelect(PlayerBoard plr) { base.OnSelect(plr); if (this.isUsedThisTurn) { GameState.Message("Already used " + this.name + "\nduring this turn."); return; } if (isUsedThisRoll) { GameState.Message("Already used " + this.name + "\nduring this roll."); return; } myPlayer = plr; plr.SetTileInUse(this.GetComponent <Tile>()); plr.AskToChooseDie(this.PickDie, this.GetType().ToString()); // ask the player to choose a die or dice }
public override void OnSelect(PlayerBoard plr) { base.OnSelect(plr); if (this.isUsedThisTurn && this.onlyOneUsePerTurn) { GameState.Message("Already used " + this.name + "\nduring this turn."); return; } if (this.isUsedThisRoll) { GameState.Message("Already used " + this.name + "\nduring this roll."); return; } // sometimes, this is a DieAbility rather than a TileAbility. SOme die abilities only are allowed on certain rolls of that die. if (specificRoll > 0) { if (this.myDie != null) { if (this.myDie.GetValue() != specificRoll) { GameState.Message("Die " + this.myDie.name + " must be " + specificRoll.ToString() + " to use this ability.\n"); return; } } } curDie = null; adjustedDice.Clear(); if (nDice == -1) { actualNumDice = plr.GetNumValidDice(onlyFor); } else { actualNumDice = nDice; } myPlayer = plr; plr.SetTileInUse(this.GetComponent<Tile>()); plr.AskToChooseDie(this.PickDie, this.GetType().ToString()); // ask the player to choose a die or dice plr.AskToChooseCancel(this.OnCancel); plr.AskToChooseDone(this.OnDone); }
public override void OnSelect(PlayerBoard plr) { base.OnSelect(plr); if (this.isUsedThisTurn && this.onlyOneUsePerTurn) { GameState.Message("Already used " + this.name + "\nduring this turn."); return; } if (this.isUsedThisRoll) { GameState.Message("Already used " + this.name + "\nduring this roll."); return; } // sometimes, this is a DieAbility rather than a TileAbility. SOme die abilities only are allowed on certain rolls of that die. if (specificRoll > 0) { if (this.myDie != null) { if (this.myDie.GetValue() != specificRoll) { GameState.Message("Die " + this.myDie.name + " must be " + specificRoll.ToString() + " to use this ability.\n"); return; } } } curDie = null; adjustedDice.Clear(); if (nDice == -1) { actualNumDice = plr.GetNumValidDice(onlyFor); } else { actualNumDice = nDice; } myPlayer = plr; plr.SetTileInUse(this.GetComponent <Tile>()); plr.AskToChooseDie(this.PickDie, this.GetType().ToString()); // ask the player to choose a die or dice plr.AskToChooseCancel(this.OnCancel); plr.AskToChooseDone(this.OnDone); }
// delegate: when the player chooses a die, this will get called. // user clicked on a die. Which one is it? We have to keep track here for this ability. bool PickDie(PharoahDie die) { bool bLegalDie = false; bool bIsNewDie = false; if (!die.isDieType(onlyFor)) { myPlayer.AskToChooseDie(this.PickDie, this.GetType().ToString()); // ask the player to choose a die or dice GameState.Message("Cannot pick " + die.name + " because it's\nthe wrong type."); return(false); } if (isNewDie(die)) { bIsNewDie = true; } else { bLegalDie = true; // we picked a die that we already have picked } if (adjustedDice.Count < actualNumDice) // can still pick new dice { if (bIsNewDie) { die.ClearTempPips(); adjustedDice.Add(die); // add the new die to the list of dice we are modifying bLegalDie = true; } } // if we are a legal die, then we can add pips to it (or undo the addpips) if (bLegalDie) { if (die != curDie) { lastDie = curDie; } curDie = die; if (isExactlyNumPips) // we add exactly this number of pips. { if (die.getTempPips() == 0) // we haven't messed with this die yet { if (die.GetSide() + nPips > 6) // failure case. we can't add this many pips! { adjustedDice.Remove(die); myPlayer.AskToChooseDie(this.PickDie, this.GetType().ToString()); // ask the player to choose a die or dice GameState.Message("ERROR: Can't add exactly " + nPips.ToString() + " to " + die.name); return(false); } else { die.AddTempPips(nPips); } } else// we've messed with this die already { die.UndoTempPips(); } } else// we can add up to the number of pips specified in nPips to any die { if (die.getTempPips() + 1 > nPips) { die.UndoTempPips(); } else { if (!setToAnyFace && (die.GetSide() + 1 > 6)) // failure case. we can't add this many pips! { die.UndoTempPips(); } if (!isEntertainer) { if (!isSoothsayer) { // do the wrap around. if (die.GetSide() + 1 > 6) { // set the temppips such that it equals 1. die.SetTempPipsValue(1); } else { die.AddTempPips(1); } } else// Soothsayer nonsense here { int exactlyNumDice = 2; if (isAstrologer) { exactlyNumDice = 3; } if (adjustedDice.Count != exactlyNumDice) { GameState.Message("Select exactly " + exactlyNumDice.ToString() + " dice."); } else { PharoahDie otherDie = GetOtherDie(die); if (isAstrologer) { otherDie = lastDie; } if ((otherDie.GetSide() > 1) && (die.GetSide() < 6)) // we can still subtract value from otherDie { die.AddTempPips(1); otherDie.AddTempPips(-1); } else if ((die.GetSide() > 1) && (otherDie.GetSide() < 6))// if we have some value in this die, we can add to the other { die.AddTempPips(-1); otherDie.AddTempPips(1); } else// can't do either, both dice are 1. Make an error { GameState.Message("Cannot change values."); } } } } else// entertainer flipping nonsense { int setVal = 7 - die.GetSide(); if (die.getTempPips() == 0) { die.SetTempPipsValue(setVal); } else { die.UndoTempPips(); } } } } } else { GameState.Message("Can't choose " + die.name + " for " + this.name); } myPlayer.AskToChooseDie(this.PickDie, this.GetType().ToString()); // ask the player to choose a die or dice return(bLegalDie); }