Ejemplo n.º 1
0
 public PowerEventArgs(Actor actor, Power power)
 {
     this.actor = actor;
     this.power = power;
 }
Ejemplo n.º 2
0
 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);
 }
Ejemplo n.º 3
0
        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;
            }
        }
Ejemplo n.º 4
0
 public virtual void Attach(Actor actor)
 {
     Log.Debug("Effect " + this.GetType().Name + " attached to " + actor.Name);
     this.target = actor;
 }
Ejemplo n.º 5
0
 public virtual void Detach(Actor actor)
 {
     Log.Debug("Effect " + this.GetType().Name + " detached from " + actor.Name);
     this.target = null;
 }
Ejemplo n.º 6
0
 public Effect(Actor source)
 {
     this.source = source;
 }
Ejemplo n.º 7
0
 public Action UsePower(Power power, Actor target)
 {
     return UsePower(power, this as VillageMember, target);
 }
Ejemplo n.º 8
0
 public Action UsePower(string powerName, Actor target)
 {
     Power power = GetPower(powerName);
     return UsePower(power, target);
 }
Ejemplo n.º 9
0
 public void SkipPower(Actor actor, Power power)
 {
 }
Ejemplo n.º 10
0
 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);
 }