Task <string> IRoomGrain.GetPrintableInfo() { StringBuilder sb = new StringBuilder(); sb.Append("Key:"); sb.Append(GrainHelper.GetPrimaryKeyStringFromGrain(this)); sb.Append(":ID:"); sb.Append(this.State.roomId); sb.Append(":Name:"); sb.Append(this.State.name); return(Task.FromResult(sb.ToString())); }
Task <string> ICharacterGrain.GetPrintableInfo() { StringBuilder sb = new StringBuilder(); sb.Append("Key:"); sb.Append(GrainHelper.GetPrimaryKeyStringFromGrain(this)); //sb.Append(this.GetPrimaryKey().ToString()); sb.Append(":ID:"); sb.Append(this.State.monsterInfo.Id); sb.Append(":Name:"); sb.Append(this.State.monsterInfo.Name); sb.Append(":Moves:"); sb.Append(this.State.monsterInfo.MovesRandomly); return(Task.FromResult(sb.ToString())); }
Task <string> IMonsterGrain.Kill(IRoomGrain room) { if (this.State.roomGrain != null) { string roomGrainPrimaryKey = GrainHelper.GetPrimaryKeyStringFromGrain(State.roomGrain); string roomPrimaryKey = GrainHelper.GetPrimaryKeyStringFromGrain(room); if (roomGrainPrimaryKey != roomPrimaryKey) { return(Task.FromResult(this.State.monsterInfo.Name + " snuck away. You were too slow!")); } if (mMoveTimer != null) { mMoveTimer.Dispose(); } return(this.State.roomGrain.Exit(this).ContinueWith(t => this.State.monsterInfo.Name + " is dead.")); } return(Task.FromResult(this.State.monsterInfo.Name + " is already dead. You were too slow and someone else got to him!")); }
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)); }