public virtual void ReactToAnnouncement(ActionAnnouncement announcement)
 {
     if (Routine != null)
     {
         Routine.ReactToAnnouncement(announcement);
     }
 }
Exemple #2
0
 protected override void ReactToAnnouncement(ActionAnnouncement announcement)
 {
     if (AI != null)
     {
         AI.ReactToAnnouncement(announcement);
     }
     base.ReactToAnnouncement(announcement);
 }
        private void Announce(ActionOutcome outcome)
        {
            foreach (var(type, stakeholder) in Stakeholders())
            {
                var announcement = new ActionAnnouncement(this, outcome, type);
                stakeholder.HandleAnnouncement(announcement);
            }
            var locationAnnouncement = new ActionAnnouncement(this, outcome, TargetType.Scene);

            Actor.Location.HandleAnnouncement(locationAnnouncement);
        }
 public void HandleAnnouncement(ActionAnnouncement announcement)
 {
     ReactToAnnouncement(announcement);
     if (announcement.Relationship == TargetType.Scene)
     {
         var bystanderAnnouncement = new ActionAnnouncement(
             content: announcement.Content,
             outcome: announcement.Outcome,
             relationship: TargetType.Witness
             );
         BroadcastAnnouncement(bystanderAnnouncement);
     }
 }
        protected void BroadcastAnnouncement(ActionAnnouncement announcement)
        {
            ActionAnnouncement announcementForBystanders = new ActionAnnouncement(
                content: announcement.Content,
                outcome: announcement.Outcome,
                relationship: TargetType.Witness
                );

            foreach (GameObject gameObject in contents)
            {
                gameObject.HandleAnnouncement(announcementForBystanders);
            }
        }
 public override void ReactToAnnouncement(ActionAnnouncement announcement)
 {
     // This method prints output IMMEDIATELY, rather than adding to the message queue.
     // This way you see "You hit the orc. The orc dies." and not the other way around.
     base.ReactToAnnouncement(announcement);
     if (announcement.IsSuccessful(out PhysicalAction? physicalAction, TargetType.Witness))
     {
         if (physicalAction.Quiet && physicalAction.Actor == this.Actor)
         {
             // Do nothing - we don't need to know about our own insignificant actions.
         }
         else
         {
             userInterface.PrintOutput(physicalAction.AnnouncementText(Actor));
         }
     }
     if (
         announcement.Relationship == TargetType.Actor &&
         announcement.Outcome is FailedOutcome failure
         )
     {
         userInterface.PrintOutput(failure.Reason);
     }
 }
 protected virtual void ReactToAnnouncement(ActionAnnouncement announcement)
 {
 }
 public virtual ActionOutcome Allows(ActionAnnouncement announcement)
 {
     return(new SuccessfulOutcome());
 }
 public void HandleAnnouncement(ActionAnnouncement announcement)
 {
     // do nothing
 }