예제 #1
0
        bool HoldableSafePlace(Item item, IHoldable holdable)
        {
            if (!item.Grabable)
            {
                GameScreen.PrintLine("\nYou cannot grab this item.");
                return(false);
            }
            else if (!Game.GetPlayer.IsInRangeOf(item, Game.GetPlayer.InteractionRanges.grabRange))
            {
                GameScreen.PrintLine("\nYou are not close enough to grab this.");
                return(false);
            }
            if (holdable.IsHoldingItem)
            {
                GameScreen.PrintLine($"\nThe item <{Color.Cyan.ToInteger()},look at {holdable.HoldingItem.ID}>{holdable.HoldingItem.Name}@ is already being held - would you like to swap it for <{Color.Cyan.ToInteger()},look at {item.ID}>{item.Name}@?");

                Utilities.PromptYesNo((answer, cancelled) =>
                {
                    if (answer && !cancelled)
                    {
                        var old    = holdable.SwitchItems(item);
                        var casted = holdable as GameObject;
                        GameScreen.PrintLine($"\nMoved <{Color.Cyan.ToInteger()},look at {item.ID}>{item.Name}@ to <{Color.Cyan.ToInteger()},look at {casted.ID}>{casted.Name}@");
                        GameScreen.PrintLine($"Moved <{Color.Cyan.ToInteger()},look at {old.ID}>{old.Name}@ to <{Color.Cyan.ToInteger()},look at {old.container.GetTypedCollection().owner.ID}>{ old.container.GetTypedCollection().owner.Name}@");
                    }
                    else
                    {
                        GameScreen.PrintLine($"\nLeft the <{Color.Cyan.ToInteger()},look at {item.ID}>{ item.Name }@ where it is.");
                    }
                });
            }
            else
            {
                holdable.PutItem(item);
                GameScreen.PrintLine($"\nMoved <{Color.Cyan.ToInteger()},look at {item.ID}>{ item.Name }@ to <{Color.Cyan.ToInteger()},look at {(holdable as GameObject).ID}>{ (holdable as GameObject).Name }@");
            }
            return(false);
        }