Esempio n. 1
0
        //This exit method is called by players so they will check against flags
        async Task <IRoomGrain> IRoomGrain.ExitTo(string direction, IGameStateGrain gameState)
        {
            var directionObject = State.directions.Where(p => p.Cardinal == direction).FirstOrDefault();

            if (directionObject != null)
            {
                if (directionObject.Flags.Count == 0)
                {
                    return(directionObject.Room);
                }
                else
                {
                    bool conditionsFailed = false;
                    foreach (var flag in directionObject.Flags)
                    {
                        if ((await gameState.GetStateForKey(flag.Key)) != flag.Value)
                        {
                            conditionsFailed = true;
                        }
                    }
                    if (conditionsFailed == false)
                    {
                        return(directionObject.Room);
                    }
                }
            }
            return(null);
        }
Esempio n. 2
0
 async internal static Task <string> GetDescriptorForState(IGameStateGrain gameState, List <Descriptor> descriptors, IPlayerGrain playerGrain)
 {
     if (descriptors != null && descriptors.Count > 0)
     {
         if (descriptors.Count == 1)
         {
             if (descriptors[0].SetFlags != null &&
                 descriptors[0].SetFlags.Count > 0)
             {
                 await gameState.SetGameStateFlags(descriptors[0].SetFlags);
             }
             return(descriptors[0].Text);
         }
         else
         {
             foreach (var descriptor in descriptors)
             {
                 if (descriptor.IsDefault != true)
                 {
                     bool conditionsFailed = false;
                     foreach (var flag in descriptor.Flags)
                     {
                         var gs = GrainFactory.GetGrain <IGameStateGrain>(playerGrain.GetPrimaryKey());
                         if ((await gs.GetStateForKey(flag.Key)) != flag.Value)
                         {
                             conditionsFailed = true;
                         }
                     }
                     if (conditionsFailed == false)
                     {
                         if (descriptor.SetFlags != null &&
                             descriptor.SetFlags.Count > 0)
                         {
                             await gameState.SetGameStateFlags(descriptor.SetFlags);
                         }
                         return(descriptor.Text);
                         //return descriptor;
                     }
                 }
             }
             if (descriptors[0].SetFlags != null &&
                 descriptors[0].SetFlags.Count > 0)
             {
                 try
                 {
                     await gameState.SetGameStateFlags(descriptors[0].SetFlags);
                 }
                 catch (Exception ex)
                 {
                     Trace.TraceError("Error setting game state flags: " + ex.Message);
                     return("error");
                 }
             }
             return(descriptors[0].Text);
         }
     }
     return("No Descriptors");
 }
Esempio n. 3
0
 async internal static Task<string> GetDescriptorForState(IGameStateGrain gameState, List<Descriptor> descriptors, IPlayerGrain playerGrain)
 {
     if (descriptors != null && descriptors.Count > 0)
     {
         if (descriptors.Count == 1)
         {
             if (descriptors[0].SetFlags != null &&
                             descriptors[0].SetFlags.Count > 0)
             {
                 await gameState.SetGameStateFlags(descriptors[0].SetFlags);
             }
             return descriptors[0].Text;
         }
         else
         {
             foreach (var descriptor in descriptors)
             {
                 if (descriptor.IsDefault != true)
                 {
                     bool conditionsFailed = false;
                     foreach (var flag in descriptor.Flags)
                     {
                         var gs = GrainFactory.GetGrain<IGameStateGrain>(playerGrain.GetPrimaryKey());
                         if ((await gs.GetStateForKey(flag.Key)) != flag.Value)
                             conditionsFailed = true;
                     }
                     if (conditionsFailed == false)
                     {
                         if (descriptor.SetFlags != null &&
                             descriptor.SetFlags.Count > 0) { 
                             await gameState.SetGameStateFlags(descriptor.SetFlags);
                         }
                         return descriptor.Text;
                         //return descriptor;
                     }
                 }
             }
             if (descriptors[0].SetFlags != null &&
                 descriptors[0].SetFlags.Count > 0)
             {
                 try
                 {
                     await gameState.SetGameStateFlags(descriptors[0].SetFlags);
                 }
                 catch (Exception ex)
                 {
                     Trace.TraceError("Error setting game state flags: " + ex.Message);
                     return "error";
                 }
             }
             return descriptors[0].Text;
         }
     }
     return "No Descriptors";
 }
Esempio n. 4
0
        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());
        }
Esempio n. 5
0
        async Task <string> ICharacterGrain.Response(IGameStateGrain gameState)
        {
            var obj = await GrainHelper.GetDescriptorForState(gameState, State.npcInfo.Responses, State.playerGrain);

            return(this.State.npcInfo.Name + " says\n\t" + obj.ToString());
        }
Esempio n. 6
0
 Task <string> ICharacterGrain.Description(IGameStateGrain gameState)
 {
     return(GrainHelper.GetDescriptorForState(gameState, State.npcInfo.Descriptors, State.playerGrain));
 }