Exemplo n.º 1
0
 /// <summary>
 /// Saves the player document.
 /// </summary>
 /// <param name="playerDocument">The player document to be saved.</param>
 public static void SavePlayerDocument(PlayerDocument playerDocument)
 {
     using (var ravenSession = DalUtils.GetRavenSession())
     {
         // RavenDB will automatically either insert a new document or update the
         // existing document with this document ID, as appropriate.
         ravenSession.Store(playerDocument);
         ravenSession.SaveChanges();
     }
 }
Exemplo n.º 2
0
 /// <summary>
 /// Saves the player document.
 /// </summary>
 /// <param name="playerDocument">The player document to be saved.</param>
 public static void SavePlayerDocument(PlayerDocument playerDocument)
 {
     using (var ravenSession = DalUtils.GetRavenSession())
     {
         // RavenDB will automatically either insert a new document or update the
         // existing document with this document ID, as appropriate.
         ravenSession.Store(playerDocument);
         ravenSession.SaveChanges();
     }
 }
Exemplo n.º 3
0
        /// <summary>Translates from <see cref="PlayerDocument"/> to a <see cref="Thing"/>.</summary>
        /// <param name="player">The player.</param>
        /// <param name="playerDocument">The player document.</param>
        private void TranslateFromPlayerDocument(ref Thing player, PlayerDocument playerDocument)
        {
            foreach (var persistedAsBehavior in playerDocument.Behaviors.ToArray())
            {
                player.Behaviors.Add(persistedAsBehavior as Behavior);
            }

            foreach (var persistedStat in playerDocument.Stats)
            {
                player.Stats.Add(persistedStat.Key, persistedStat.Value as GameStat);
            }

            foreach (var persistedSecondary in playerDocument.SecondaryStats)
            {
                player.Attributes.Add(persistedSecondary.Key, persistedSecondary.Value as GameAttribute);
            }

            foreach (var persistedSkill in playerDocument.Skills)
            {
                player.Skills.Add(persistedSkill.Key, persistedSkill.Value as GameSkill);
            }

            foreach (var persistedChild in playerDocument.SubThings)
            {
                player.Children.Add(persistedChild as Thing);
            }
        }
Exemplo n.º 4
0
        /// <summary>
        /// Save the whole player Thing (not just this PlayerBehavior).
        /// </summary>
        public void SaveWholePlayer()
        {
            var player = this.Parent;

            if (player != null)
            {
                this.Save();

                // Set the behavior id to correspond to the database id of the player.
                // @@@ TODO: Why? Shouldn't Behavior IDs be unique too?
                var playerBehaviors = player.Behaviors.AllBehaviors;
                foreach (var behavior in playerBehaviors)
                {
                    behavior.ID = this.PlayerData.ID;
                }

                // Link our unique player ID and PlayerBehavior ID but in a RavenDB-friendly format.
                player.ID = "player/" + this.PlayerData.ID;

                // Create a PlayerDocument to be saved.
                var bundle = new PlayerDocument
                {
                    DatabaseId = this.PlayerData.ID,
                    Name = player.Name,
                    LastUpdatedDate = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ssZ"),
                    Behaviors = new List<IPersistsWithPlayer>(),
                    Stats = new Dictionary<string, IPersistsWithPlayer>(),
                    SecondaryStats = new Dictionary<string, IPersistsWithPlayer>(),
                    Skills = new Dictionary<string, IPersistsWithPlayer>(),
                    SubThings = new List<IThing>(),
                    PlayerPrompt = this.Prompt,
                };

                bundle.Behaviors.AddRange(playerBehaviors);

                foreach (var stat in player.Stats)
                {
                    bundle.Stats.Add(stat.Key, stat.Value);
                }

                foreach (var attribute in player.Attributes)
                {
                    bundle.SecondaryStats.Add(attribute.Key, attribute.Value);
                }

                foreach (var skill in player.Skills)
                {
                    bundle.Skills.Add(skill.Key, skill.Value);
                }

                foreach (var child in player.Children)
                {
                    // Do not save any player as a sub-document of this one.
                    if (child.Behaviors.FindFirst<PlayerBehavior>() == null)
                    {
                        bundle.SubThings.Add(child);
                    }
                }

                // Save to the document database
                DocumentManager.SavePlayerDocument(bundle);
            }
        }