public override DiceRollResult DelegateDiceRoll() { var x = new DelegateEventArgs(new eActionType[] { eActionType.DiceOnly }, null, null, 0); DelegateControl?.Invoke(this, ref x); WaitChoosenAction.WaitOne(); WaitChoosenAction.Reset(); return(onRollDice()); }
/// <summary> /// /// </summary> /// <param name="e"></param> internal override void onDelegateControl(DelegateEventArgs e) { System.Collections.Generic.List <eActionType> allPossibilities = new System.Collections.Generic.List <eActionType>(3); // Keep e for recall var modifiedEventArgs = e.Copy(); allPossibilities.AddRange(modifiedEventArgs.Actions); if (allPossibilities.Contains(eActionType.PayRent)) { if (CheatAlwaysRentFree || GameBoard.FreeParkingOwner.Equals(this)) { allPossibilities.Add(eActionType.Card_UseFreeParking); } } if (allPossibilities.Contains(eActionType.JumpToJail)) { if (CheatAlwaysJailFree || GameBoard.FreeJailOwner.Equals(this)) { allPossibilities.Add(eActionType.Card_UseFreeJail); } } if (GameBoard.Settings.FixedDepositePercentage > 0) { if (e.Cash > 0 && !allPossibilities.Contains(eActionType.LoseTurn)) { allPossibilities.Add(eActionType.IncreaseFixedDeposite); } if (Festgeld > 0 && !allPossibilities.Contains(eActionType.LoseTurn)) { allPossibilities.Add(eActionType.TerminateFixedDeposite); } } if (GameBoard.Settings.UseCredits) { if (GameBoard.Statistics.SoldHouseFields > 0 && this._ownfields.Count > 0 && !allPossibilities.Contains(eActionType.LoseTurn)) { if ((from h in OwnFields where !h.Value.HasCredit select h).Any()) { allPossibilities.Add(eActionType.CreditForHouse); } } if (GameBoard.Statistics.CreditHouses > 0) { var hasCredit = (from h in OwnFields where h.Value.HasCredit select h).Any(); if (hasCredit) { allPossibilities.Add(eActionType.CreditReleaseHouse); } } } allPossibilities.Add(eActionType.GiveUp); modifiedEventArgs.Actions = allPossibilities.ToArray(); DelegateControl?.Invoke(this, ref modifiedEventArgs); WaitChoosenAction.WaitOne(); WaitChoosenAction.Reset(); // TODO: Next: Check if choosen vars are fileld if (invokeAction(choosenEventArgs)) { onDelegateControl(e); } }
public void SubmitChoosenAction(DelegateEventArgs pEventArgs) { choosenEventArgs = pEventArgs; WaitChoosenAction.Set(); }
/// <summary> /// /// </summary> /// <param name="e"></param> /// <returns>BUGGY: true if redo last action</returns> protected bool invokeAction(DelegateEventArgs e) { GameBoard.Statistics.ActionChoosen[e.ChoosenAction] = System.Convert.ToInt32(GameBoard.Statistics.ActionChoosen[e.ChoosenAction]) + 1; switch (e.ChoosenAction) { case eActionType.Move: { OnMove(); break; } case eActionType.BuyHouse: { ((HouseField)e.Fields[0]).Buy(this); break; } case eActionType.PayRent: { ((HouseField)e.Fields[0]).PayRent(this); break; } case eActionType.GiveUp: { OnBankrupt(); break; } case eActionType.UpgradeHouse: { ((HouseField)e.Fields[0]).Upgrade(); break; } case eActionType.LoseTurn: { RaiseJail(eActionType.LoseTurn); break; } case eActionType.GoToField: { MoveTo(e.Fields[0], false); break; } case eActionType.JumpToField: case eActionType.JumpToRelativField: { MoveTo(e.Fields[0], true); break; } case eActionType.JumpToJail: { GameBoard.JailField.GoToJail(this); RaiseJail(eActionType.JumpToJail); break; } case eActionType.PayToStack: { TransferMoney(GameBoard.Wundertuete, e.Cash); break; } case eActionType.CollectStack: { GameBoard.Wundertuete.TransferMoney(this, e.Cash); break; } case eActionType.CashToBank: { TransferMoney(GameBoard.BANK, e.Cash); break; } case eActionType.CashFromBank: { GameBoard.BANK.TransferMoney(this, e.Cash); break; } case eActionType.CashToPlayer: { TransferMoney(e.Players[0], e.Cash); break; } case eActionType.CashFromPlayer: { e.Players[0].TransferMoney(this, e.Cash); break; } case eActionType.CashFromAll: { foreach (var p in GameBoard.PlayerRank) { if (p.IsPlayering) { p.TransferMoney(this, e.Cash); } } break; } case eActionType.PayPerHouse: { foreach (var house in OwnFields) { TransferMoney(GameBoard.BANK, e.Cash); } break; } case eActionType.AddMove: { //BUGGY! NextAction.Clear(); NextAction.Enqueue(eActionType.Move); break; } case eActionType.Card_UseFreeParking: { RaiseChance(eActionType.Card_UseFreeParking, new object[] { e.Fields[0] }); if (!CheatAlwaysRentFree) { GameBoard.FreeParkingOwner = GameBoard.BANK; } break; } case eActionType.Card_GetFreeParking: { GameBoard.FreeParkingOwner = this; break; } case eActionType.Card_UseFreeJail: { RaiseChance(eActionType.Card_UseFreeJail, new object[] { GameBoard.JailField }); if (!CheatAlwaysJailFree) { GameBoard.FreeParkingOwner = GameBoard.BANK; } break; } case eActionType.Card_GetFreeJail: { GameBoard.FreeJailOwner = this; break; } case eActionType.Pass: case eActionType.None: { break; } case eActionType.CreditForHouse: { var h = (HouseField)e.Fields[0]; if (h.Owner.Equals(this)) { h.TakeForCredit(); } // Redo Last Action! return(true); } case eActionType.CreditReleaseHouse: { var h = (HouseField)e.Fields[0]; if (h.Owner.Equals(this)) { h.RemoveCredit(); } // Redo Last Action! return(true); } case eActionType.IncreaseFixedDeposite: { RaiseIncreaseFixedDeposite(e.Cash); return(true); } case eActionType.TerminateFixedDeposite: { RaiseTerminateFixedDeposite(); return(true); } default: { throw new System.NotImplementedException(e.ChoosenAction.ToString()); } } return(false); }
internal abstract void onDelegateControl(DelegateEventArgs e);