//===================================================================// // Actions // //===================================================================// /// <summary> /// This override ensures that at most two one-handed /// <see cref="Thing"/>s or one two-handed <see cref="Thing"/> can be /// held in the <see cref="Hands"/>. /// </summary> /// /// <param name="item">the <see cref="Thing"/> to be added</param> public override void AddThing(Thing item) { if (!this.HasFreeHand() || (!this.IsEmpty() && item.IsTwoHanded())) { throw new Exception("Error: Attempted to add too much stuff " + "to a set of hands."); } else { base.AddThing(item); } }
//===================================================================// // Actions // //===================================================================// /// <summary> /// Has the <see cref="Person"/> try to take a <see cref="Thing"/> /// that they can see. /// </summary> /// /// <param name="item">the <see cref="Thing"/> to take</param> /// /// <exception cref="InteractingWithUnseenThingException"> /// if the <see cref="Person"/> cannot see the <see cref="Thing"/> /// </exception> /// /// <exception cref="TakingItemFlaggedUntakeableException"> /// if the <see cref="Thing"/> has been flagged as untakeable /// </exception> /// /// <exception cref="TakingWithHandsFullException"> /// if the <see cref="Person"/>'s hands are too full /// </exception> public override void Take(Thing item) { // if the person can't see the item, throw an exception if (!GameManager.CanSee(this, item)) { throw new InteractingWithUnseenThingException(); } // if the item can never be taken, throw an exception else if (!item.CanBeTaken()) { throw new TakingItemFlaggedUntakeableException(); } // if the person is already carrying the item, throw an exception else if (this.Carries(item)) { throw new TakingItemAlreadyHeldException(); } // if the personis wearing the item, try taking it off instead else if (this.Wears(item)) { // if the person is the player, report the auto-correction if(GameManager.IsPlayer(this)) { GameManager.ReportIfVisible(this, "((I think you meant \"take off\" instead of " + "\"take.\" Trying that instead...))"); } this.TakeOff(item); } // if the item is worn by someone else or is inside something // worn by someone else, throw an exception, for now else if (typeof(Clothes) == GameManager.GetTopMostVisibleContainer( item.GetLocation()).GetType()) { throw new Exception("Theft has not been coded yet."); } // if neither hand is free or if only one hand is free and the item // requires two hands, throw an exception else if (!hands.HasFreeHand() || (item.IsTwoHanded() && !hands.IsEmpty())) { throw new TakingWithHandsFullException(); } // No problems encountered; execute normally. else { item.GetLocation().RemoveThing(item); this.hands.AddThing(item); item.SetLocation(this.hands); GameManager.ReportIfVisible(this, StringManipulator.CapitalizeFirstLetter( this.GetQualifiedName()) + ' ' + this.GetConjugatedVerb(VerbSet.ToPickUp) + ' ' + item.GetSpecificName() + '.'); } }