public PowerEventArgs(Actor actor, Power power) { this.actor = actor; this.power = power; }
public Action UsePower(string powerName, VillageMember initiator, Actor target) { Power power = GetPower(powerName); if(power == null) { throw new NoSuchPowerException("You do not have the power " + powerName); } return UsePower(power, initiator, target); }
public Action UsePower(Power power, VillageMember initiator, Actor target) { if (target != null) { Log.Debug(this.Name + " uses power " + power.GetType().Name + " on " + target.Name); } else { Log.Debug(this.Name + " uses power " + power.GetType().Name); } if (target is VillageMember) { if (((VillageMember)target).State == MemberState.Dead) { throw new TargetIsDeadException(target.Name + " is dead."); } } Action action = new Action(power, this, initiator, target); try { action.Prepare(); village.RaiseActionPrepared(action); if (action.Power.Instant) { action.Who.RaisePreActionSource(action); if (action.Target != null) { action.Target.RaisePreActionTarget(action); } if (action.Cancel) { Log.Debug("Action cancelled."); } else { Log.Debug("Executing action..."); action.Execute(); action.Who.RaisePostActionSource(action); if (action.Target != null) { action.Target.RaisePostActionTarget(action); } if (action.Result != null) { action.Result.Apply(); } } } else { Log.Debug("Queueing " + power.GetType().FullName + " on " + target.Name); village.Phase.QueueAction(action); action.ResultMessage = String.Format(power.QueuedMessage, target.Name); } village.RaiseActionExecuted(action); return action; } catch (Action.ActionException ex) { action.ResultMessage = ex.Message; action.Cancel = true; return action; } }
public virtual void Attach(Actor actor) { Log.Debug("Effect " + this.GetType().Name + " attached to " + actor.Name); this.target = actor; }
public virtual void Detach(Actor actor) { Log.Debug("Effect " + this.GetType().Name + " detached from " + actor.Name); this.target = null; }
public Effect(Actor source) { this.source = source; }
public Action UsePower(Power power, Actor target) { return UsePower(power, this as VillageMember, target); }
public Action UsePower(string powerName, Actor target) { Power power = GetPower(powerName); return UsePower(power, target); }
public void SkipPower(Actor actor, Power power) { }
public bool HasAction(Actor actor, Power power) { return Actions.Any(a => a.Who == actor && a.Power == power) || skipped.Any(s => s.Key == actor && s.Value == power); }