string HandleGiveCommand(Command giveCommand, Game game) { string objectString = giveCommand.GetParameter("object"); string personString = giveCommand.GetParameter("person"); Objects.ID objectType = Emoji.GetID(objectString); if (objectType == Objects.ID.Unknown) { return("You can't even figure out what you're trying to give."); } if (!game.mInventory.Contains(objectType)) { return("You don't have " + objectString); } Objects.ID personType = Emoji.GetID(personString); if (personType == Objects.ID.Unknown) { mStatus = Status.Frustrated; return("You can't even figure out who you're trying to talk to."); } GridObject person = game.mRoom.FindObjectAdjacentTo(mPosition, personType); if (person == null) { mStatus = Status.Frustrated; return("They aren't close enough to talk to."); } return(person.GiveObject(objectType, game)); }
public DynamicObject SpawnObject(Objects.ID type, Point position) { DynamicObject dynamicObject = (DynamicObject)GridObject.Create(type, position); AddNewItem(dynamicObject); return(dynamicObject); }
string HandleTalkCommand(Command talkCommand, Game game) { string personString = talkCommand.GetParameter("person"); string subjectString = talkCommand.GetParameter("subject"); Objects.ID personType = Emoji.GetID(personString); if (personType == Objects.ID.Unknown) { mStatus = Status.Frustrated; return("You can't even figure out who you're trying to talk to."); } Objects.ID subjectType = Objects.ID.Unknown; // Only try to parse if it's not empty if (subjectString != "") { subjectType = Emoji.GetID(subjectString); if (subjectType == Objects.ID.Unknown) { mStatus = Status.Frustrated; return("You can't even figure out what you're trying to talk about."); } } GridObject person = game.mRoom.FindObjectAdjacentTo(mPosition, personType); if (person == null) { mStatus = Status.Frustrated; return("They aren't close enough to talk to."); } return(person.TalkTo(subjectType, game)); }
string LookAtObjectCommand(Command lookAtCommand, Game game) { string objectString = lookAtCommand.GetParameter("object"); Objects.ID objectType = Emoji.GetID(objectString); if (objectType == Objects.ID.Unknown) { mStatus = Status.Frustrated; return("You can't even figure out what that is."); } GridObject targetObject = game.mRoom.GetNearestObject(objectType, mPosition); if (targetObject == null) { if (game.mInventory.Contains(objectType)) { mStatus = Status.Thinking; return(ObjectTraits.GetObjectTraits(objectType).GetDescription(game)); } else { mStatus = Status.Frustrated; return("You don't see that here."); } } else { mStatus = Status.Thinking; return(targetObject.GetDescriptionText(game)); } }
string HandleUseWithoutTargetCommand(Command useCommand, Game game) { string actorString = useCommand.GetParameter("actor"); Objects.ID actorType = Emoji.GetID(actorString); if (actorType == Objects.ID.Unknown) { mStatus = Status.Frustrated; return("You don't have that in your inventory."); } GridObject actorObject = game.mRoom.FindObjectAdjacentTo(mPosition, actorType); if (actorObject == null) { mStatus = Status.Frustrated; return("You couldn't find that nearby."); } ActionResult result = actorObject.UseWithoutTarget(game); if (!result.mSuccess) { mStatus = Status.Frustrated; } return(result.mOutput); }
private string RenderObject(GridObject gridObject) { if (mIsRenderingHallucination) { if (gridObject.GetTypeID() == Objects.ID.PlayerCharacter) { return(gridObject.Render()); } else { return(Emoji.GetRandomHallucinationEmoji()); } } else { return(gridObject.Render()); } }
public string Render() { List <string> lines = new List <string>(); for (int rowIndex = 0; rowIndex < Game.numRoomRows; rowIndex++) { string line = ""; for (int columnIndex = 0; columnIndex < Game.numRoomColumns; columnIndex++) { GridObject gridObject = GetFirstObject(new Point(rowIndex, columnIndex)); line += RenderObject(gridObject); } lines.Add(line); } return(string.Join('\n', lines)); }
string HandleInspectDirectionCommand(Command inspectCommand, Game game) { string directionString = inspectCommand.GetParameter("direction"); Direction direction = Room.GetDirection(directionString); if (direction == Direction.Unknown) { return("Invalid direction"); } Point inspectPosition = MathUtils.GetAdjacentPoint(mPosition, direction); GridObject inspectObject = game.mRoom.GetFirstObject(inspectPosition); mStatus = Status.Thinking; return(inspectObject.GetDescriptionText(game)); }
public Room(string description, ICollection <string> roomLines, IEnumerable <GridObjectSetup> gridObjectSetups) { mDescription = description; Debug.Assert(roomLines.Count == Game.numRoomRows); int lineIndex = 0; foreach (string line in roomLines) { List <string> splitLine = StringUtils.SplitEmojiString(line); Debug.Assert(splitLine.Count == Game.numRoomColumns); for (int columnIndex = 0; columnIndex < splitLine.Count; columnIndex++) { GridObject staticObject = GridObject.Create(Emoji.GetID(splitLine[columnIndex]), new Point(lineIndex, columnIndex)); mStaticRoomGrid[lineIndex, columnIndex] = (StaticObject)staticObject; } lineIndex++; } foreach (GridObjectSetup setup in gridObjectSetups) { GridObject gridObject = setup.CreateObject(); if (gridObject as DynamicObject != null) { mDynamicObjects.Add((DynamicObject)gridObject); } else { Point position = gridObject.GetPosition(); mStaticRoomGrid[position.mRow, position.mColumn] = (StaticObject)gridObject; } } }
string HandleUseOnTargetCommand(Command useCommand, Game game) { string actorString = useCommand.GetParameter("actor"); string targetString = useCommand.GetParameter("target"); Objects.ID actorType = Emoji.GetID(actorString); if (actorType == Objects.ID.Unknown) { mStatus = Status.Frustrated; return("You don't have that in your inventory."); } if (!game.mInventory.Contains(actorType)) { mStatus = Status.Frustrated; return("You don't have " + actorString); } Objects.ID targetType = Emoji.GetID(targetString); if (targetType == Objects.ID.Unknown) { mStatus = Status.Frustrated; return("You can't find that"); } GridObject targetObject = game.mRoom.FindObjectAdjacentTo(mPosition, targetType); if (targetObject == null) { mStatus = Status.Frustrated; return("There isn't " + targetString + " nearby"); } string outText = ""; if (targetType == Objects.ID.Lock) { Lock lockObject = targetObject as Lock; if (lockObject.CanBeUnlockedBy(actorType)) { lockObject.Unlock(); outText = "You unlocked the door with the " + actorString; } } else if (targetType == Objects.ID.Clamp) { Objects.ID crushingResult = ObjectTraits.GetObjectTraits(actorType).mCrushingResultType; if (crushingResult != Objects.ID.Unknown) { game.mInventory.RemoveItem(actorType); game.mInventory.AddItem(crushingResult); outText = "You crushed the " + actorString; } } if (outText == "") { outText = "You don't think you can do that."; mStatus = Status.Frustrated; } return(outText); }