コード例 #1
0
        public void SyncTextureData(Farmer farmer)
        {
            if (Context.IsMultiplayer)
            {
                long multiplayerID = Game1.player.UniqueMultiplayerID;

                if (!SynchronizedPlayerTextureData.ContainsKey(multiplayerID))
                {
                    SynchronizedPlayerTextureData[multiplayerID] = LoadedTextureData;
                }

                Multiplayer multiplayer = modHelper.Reflection.GetField <Multiplayer>(typeof(Game1), "multiplayer").GetValue();
                if (Game1.IsMasterGame)
                {
                    if (this.allowClientEmojis)
                    {
                        multiplayer.RequestEmojiTexture(farmer);
                    }
                    else
                    {
                        multiplayer.BroadcastEmojiTexture(CurrentTexture, TotalNumberEmojis);
                    }
                }
                else
                {
                    multiplayer.SendEmojisTextureDataList(farmer, LoadedTextureData);
                }
            }
        }
コード例 #2
0
        private void MultiplayerExtension_OnPlayerDisconnected(object sender, PlayerDisconnectedEventArgs e)
        {
#if DEBUG
            ModEntry.ModLogger.LogTrace();
#endif
            if (SynchronizedPlayerTextureData.ContainsKey(e.Player.UniqueMultiplayerID))
            {
                UpdateTotalEmojis(TotalNumberEmojis - SynchronizedPlayerTextureData[e.Player.UniqueMultiplayerID].Count);
                SynchronizedPlayerTextureData.Remove(e.Player.UniqueMultiplayerID);
            }

            CurrentTexture = MergeTextures(VanillaTexture, SynchronizedPlayerTextureData.Values);

            // Replace with the new texture
            modHelper.Reflection.GetField <Texture2D>(Game1.chatBox.emojiMenu, "emojiTexture").SetValue(CurrentTexture);
            ChatBox.emojiTexture = CurrentTexture;
            //Game1.chatBox.emojiMenu.receiveScrollWheelAction(1);
            //Game1.chatBox.emojiMenu.receiveScrollWheelAction(-1);

            // Update client textures
            Multiplayer multiplayer = modHelper.Reflection.GetField <Multiplayer>(typeof(Game1), "multiplayer").GetValue();
            multiplayer.BroadcastEmojiTexture(CurrentTexture, TotalNumberEmojis);
        }
コード例 #3
0
        private void MultiplayerExtension_OnReceiveEmojiTextureData(object sender, ReceivedEmojiTextureDataEventArgs e)
        {
            // Get all synched data
            IEnumerable <TextureData> synchedData = SynchronizedPlayerTextureData.Values.SelectMany(x => x);

            // Get only the different textures
            e.TextureDataList = e.TextureDataList.Except(synchedData).ToList();

            // Add the different textures obtained
            SynchronizedPlayerTextureData[e.SourceFarmer.UniqueMultiplayerID] = e.TextureDataList;

            CurrentTexture = MergeTextures(VanillaTexture, synchedData);
            UpdateTotalEmojis(TotalNumberEmojis + e.TextureDataList.Count);

            // Replace with the new texture
            modHelper.Reflection.GetField <Texture2D>(Game1.chatBox.emojiMenu, "emojiTexture").SetValue(CurrentTexture);
            ChatBox.emojiTexture = CurrentTexture;

            // Update client textures
            Multiplayer multiplayer = modHelper.Reflection.GetField <Multiplayer>(typeof(Game1), "multiplayer").GetValue();

            multiplayer.BroadcastEmojiTexture(CurrentTexture, TotalNumberEmojis);
        }