async Task <string> IRoomGrain.Description(PlayerInfo whoisAsking, IGameStateGrain gameState) { StringBuilder sb = new StringBuilder(); var playerGrain = GrainFactory.GetGrain <IPlayerGrain>(whoisAsking.Key); sb.AppendLine(await GrainHelper.GetDescriptorForState(gameState, State.descriptors, playerGrain)); if (State.things.Count > 0) { sb.AppendLine("The following things are present:"); foreach (var thing in State.things) { sb.Append(" ").AppendLine(thing.Name); } } if (State.players.Count > 1 || State.monsters.Count > 0 || State.npcs.Count > 0) { sb.AppendLine("Beware! These guys are in the room with you:"); foreach (var player in State.players) { if (player.GetPrimaryKey() != whoisAsking.Key) { sb.Append(" player: ").AppendLine(await player.Name()); } } if (State.monsters.Count > 0) { foreach (var monster in State.monsters) { sb.Append(" monster: ").AppendLine(await monster.Name()); } } if (State.npcs.Count > 0) { foreach (var npc in State.npcs) { sb.Append(" npc: ").AppendLine(await npc.Name()); } } } return(sb.ToString()); }
async Task <string> Inspect(string target, string verb) { var player = await this.State.roomGrain.FindPlayer(target); if (player != null) { return("You see " + player.Name + "\n"); } var monster = await this.State.roomGrain.FindMonster(target); if (monster != null) { var monsterGrain = GrainFactory.GetGrain <IMonsterGrain>(this.GetPrimaryKey().ToString() + "Monster" + monster.Id); return(await monsterGrain.Description(State.gameState) + "\n"); } var npc = await this.State.roomGrain.FindNpc(target); if (npc != null) { var npcGrain = GrainFactory.GetGrain <INPCGrain>(this.GetPrimaryKey().ToString() + "Npc" + npc.Id); return(await npcGrain.Description(State.gameState) + "\n"); } var thing = await this.State.roomGrain.FindThing(target); if (thing != null) { return(await GrainHelper.GetDescriptorForState(State.gameState, thing.Descriptors, this) + "\n"); } var onPersonThing = this.State.things.Where(t => t.Name.Contains(target)).FirstOrDefault(); if (onPersonThing != null) { return(await GrainHelper.GetDescriptorForState(State.gameState, onPersonThing.Descriptors, this) + "\n"); } return("I can't see " + target + " here. You can't " + verb + " something that isn't here!\n"); }
async Task <string> ICharacterGrain.Response(IGameStateGrain gameState) { var obj = await GrainHelper.GetDescriptorForState(gameState, State.monsterInfo.Responses, State.playerGrain); return(this.State.monsterInfo.Name + " says\n\t" + obj.ToString()); }
Task <string> ICharacterGrain.Description(IGameStateGrain gameState) { return(GrainHelper.GetDescriptorForState(gameState, State.monsterInfo.Descriptors, State.playerGrain)); }