예제 #1
0
    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        if (objectType.Equals(typeof(ChatComponent)))
        {
            var obj = JObject.Load(reader);
            return(ChatComponent.FromJson(obj));
        }
        else if (objectType.Equals(typeof(ChatComponent[])))
        {
            var objArr         = JArray.Load(reader);
            var chatComponents = new ChatComponent[objArr.Count];
            for (int i = 0; i < chatComponents.Length; i++)
            {
                if (objArr[i].Type == JTokenType.Object)                    // object type can be any component
                {
                    chatComponents[i] = ChatComponent.FromJson((JObject)objArr[i]);
                }
                else if (objArr[i].Type == JTokenType.String)                   // string components can be single json primitives
                {
                    chatComponents[i] = new StringComponent()
                    {
                        text = (string)objArr[i]
                    }
                }
                ;
            }

            return(chatComponents);
        }

        throw new JsonReaderException($"ChatComponentJsonConverter cannot deserialize to {objectType.ToString()}");
    }
예제 #2
0
        public PlayingState(Alex alex, GraphicsDevice graphics, WorldProvider worldProvider, INetworkProvider networkProvider) : base(alex)
        {
            NetworkProvider = networkProvider;

            World       = new World(alex, graphics, Options, new FirstPersonCamera(Options.VideoOptions.RenderDistance, Vector3.Zero, Vector3.Zero), networkProvider);
            SkyRenderer = new SkyBox(alex, graphics, World);

            WorldProvider = worldProvider;
            if (worldProvider is SPWorldProvider)
            {
                World.FreezeWorldTime = true;
            }

            var chat  = new ChatComponent(World);
            var title = new TitleComponent();

            WorldProvider = worldProvider;
            WorldProvider.Init(World, chat, out var info, out var chatProvider);
            World.WorldInfo              = info;
            chat.ChatProvider            = chatProvider;
            WorldProvider.TitleComponent = title;

            _playingHud = new PlayingHud(Alex, World.Player, chat, title);
            _debugInfo  = new GuiDebugInfo();
            InitDebugInfo();
        }
예제 #3
0
        /// <summary>
        /// This method sets which type of screen is visible, login, join or main.
        /// </summary>
        public void SetupScreen(ScreenTypeEnum screenType)
        {
            // Set the new ScreenType
            ScreenType = screenType;

            // Update the UI
            Refresh();

            // if the MainComponent exists
            if (screenType == ScreenTypeEnum.Main)
            {
                // if the value for HasChatComponent is true
                if ((HasChatComponent) && (HasLoggedInUser))
                {
                    // Create a message
                    Message message = new Message();

                    // Set the Text
                    message.Text = "Logged In User Is Set";

                    // Send the message to the Chat component
                    ChatComponent.ReceiveData(message);
                }
            }
        }
예제 #4
0
    public ChatMessage(ChatMessagePacket pkt)
    {
        var chatComponent = ChatComponent.FromJson(pkt.Json);

        // use .ToString() for plaintext and components will output text with no formatting
        PlaintextMessage = chatComponent.ToString();

        HtmlFormattedMessage = ChatComponent.GetFormattedString(chatComponent, null);
    }
예제 #5
0
 private void InitComponents()
 {
     User      = new UserComponent(this);
     Chat      = new ChatComponent(this);
     Broadcast = new BroadcastComponent(this);
     Search    = new SearchComponent(this);
     Songs     = new SongsComponent(this);
     Queue     = new QueueComponent(this);
     Remora    = new RemoraComponent(this);
 }
예제 #6
0
        public PlayingHud(Alex game, Player player, TitleComponent titleComponent) : base()
        {
            Title = titleComponent;

            Alex   = game;
            Player = player;

            Player.OnInventoryChanged += OnInventoryChanged;

            Anchor  = Alignment.Fill;
            Padding = Thickness.One;

            _playerController = player.Controller;
            InputManager.AddListener(new MouseInputListener(InputManager.PlayerIndex));

            _healthAndHotbar = new GuiStackContainer()
            {
                Orientation = Orientation.Vertical,
                ChildAnchor = Alignment.Fill
            };

            _bottomContainer              = new GuiMultiStackContainer();
            _bottomContainer.ChildAnchor  = Alignment.BottomFill;
            _bottomContainer.Anchor       = Alignment.BottomCenter;
            _bottomContainer.AutoSizeMode = AutoSizeMode.GrowAndShrink;
            _bottomContainer.Orientation  = Orientation.Vertical;

            //BottomContainer.

            _hotbar         = new GuiItemHotbar(player.Inventory);
            _hotbar.Anchor  = Alignment.BottomCenter;
            _hotbar.Padding = Thickness.Zero;

            Chat         = new ChatComponent();
            Chat.Enabled = false;
            Chat.Anchor  = Alignment.BottomLeft;

            _healthContainer        = new GuiContainer();
            _healthContainer.Anchor = Alignment.Fill;

            _healthContainer.Margin = new Thickness(0, 0, 0, 1);

            _healthComponent        = new HealthComponent(player);
            _healthComponent.Anchor = Alignment.TopLeft;

            _hungerComponent        = new HungerComponent(player);
            _hungerComponent.Anchor = Alignment.TopRight;

            _tipPopupComponent              = new TipPopupComponent();
            _tipPopupComponent.Anchor       = Alignment.BottomCenter;
            _tipPopupComponent.AutoSizeMode = AutoSizeMode.GrowAndShrink;

            Scoreboard        = new ScoreboardView();
            Scoreboard.Anchor = Alignment.MiddleRight;
        }
예제 #7
0
 public SyncManager(IVisualDynamicEntityManager dynamicEntityManager,
                    ServerComponent server,
                    IWorldChunks chunks,
                    ChatComponent chat)
 {
     _dynamicEntityManager = dynamicEntityManager;
     _server = server;
     _chunks = chunks;
     _chat   = chat;
     _server.MessageError      += _server_MessageError;
     _server.MessageEntityData += server_MessageEntityData;
 }
예제 #8
0
    public void UpdateEntry(Player player)
    {
        // set display name
        if (player.DisplayName != null)
        {
            DisplayName.text = ChatComponent.GetFormattedString(player.DisplayName, null);
        }
        else
        {
            DisplayName.text = player.Name;
        }

        DisplayName.text += $" {player.Ping.ToString()}ms";
    }
예제 #9
0
        public PlayerEntityManager(CameraManager <ICameraFocused> cameraManager,
                                   InputsManager inputsManager,
                                   SingleArrayChunkContainer cubesHolder,
                                   ServerComponent server,
                                   VoxelModelManager voxelModelManager,
                                   VisualWorldParameters visualWorldParameters,
                                   EntityFactory factory,
                                   LandscapeBufferManager bufferManager,
                                   ILandscapeManager landscapeManager,
                                   ChatComponent chatComponent,
                                   PostEffectComponent postEffectComponent,
                                   GuiManager guiManager,
                                   ISoundEngine soundEngine,
                                   TimerManager timerManager
                                   )
        {
            _cameraManager         = cameraManager;
            _inputsManager         = inputsManager;
            _soundEngine           = soundEngine;
            _cubesHolder           = cubesHolder;
            _visualWorldParameters = visualWorldParameters;
            _factory             = factory;
            _bufferManager       = bufferManager;
            _landscapeManager    = landscapeManager;
            _chatComponent       = chatComponent;
            _postEffectComponent = postEffectComponent;
            OnLanding           += PlayerEntityManager_OnLanding;
            _guiManager          = guiManager;

            PlayerCharacter = (PlayerCharacter)server.Player;

            ShowDebugInfo = true;

            // Create a visualVoxelEntity (== Assign a voxel body to the PlayerCharacter)
            VisualVoxelEntity = new VisualVoxelEntity(PlayerCharacter, voxelModelManager);

            //Add a new Timer trigger
            _energyUpdateTimer = timerManager.AddTimer(1000); //A timer that will be raised every second
            _energyUpdateTimer.OnTimerRaised += energyUpdateTimer_OnTimerRaised;

            HasMouseFocus = Updatable;
            UpdateOrder   = 0;

            // create "real" random
            var entropySource = RNGCryptoServiceProvider.Create();
            var bytes         = new byte[4];

            entropySource.GetBytes(bytes);
            random = new Random(BitConverter.ToInt32(bytes, 0));
        }
예제 #10
0
 public AdminConsole(ChatComponent chatComp,
                     IWorldChunks worldChunk,
                     D3DEngine engine,
                     Game mainGameLoop,
                     ServerComponent server,
                     IClock gameClock)
 {
     _chatComp             = chatComp;
     _chatComp.Console     = this;
     _worldChunk           = worldChunk;
     _engine               = engine;
     _mainGameLoop         = mainGameLoop;
     _server               = server;
     _gameClock            = gameClock;
     _chatComp.MessageOut += _chatComp_MessageOut;
 }
예제 #11
0
        public PlayingHud(Alex game, Player player, ChatComponent chat, TitleComponent titleComponent) : base()
        {
            Title = titleComponent;

            Alex   = game;
            Player = player;

            _playerController = player.Controller;
            InputManager.AddListener(new MouseInputListener(InputManager.PlayerIndex));

            _hotbar         = new GuiItemHotbar(player.Inventory);
            _hotbar.Anchor  = Alignment.BottomCenter;
            _hotbar.Padding = Thickness.Zero;

            Chat         = chat;
            Chat.Enabled = false;
            Chat.Anchor  = Alignment.BottomLeft;
        }
예제 #12
0
        /// <summary>
        /// This method Sign Out Button _ Click
        /// </summary>
        public async void SignOutButton_Click()
        {
            // Log Out The User
            LoggedInUser = null;

            // if the Chat component exists
            if (HasChatComponent)
            {
                // Sign out of the Chat component
                ChatComponent.SignOut();
            }

            // Remove the items in Local Storage
            await RemovedLocalStoreItems();

            // Reset back to main which it was probably already on
            ScreenType = ScreenTypeEnum.Main;

            // update the UI
            Refresh();
        }
예제 #13
0
 /// <summary>
 /// 表情
 /// </summary>
 private void Onphiz()
 {
     ChatComponent.ShowHideEmoji(true);
 }
예제 #14
0
    /// <summary>
    /// Gets an HTML-formatted TextMeshPro string for a <see cref="ChatComponent"/>
    /// </summary>
    /// <param name="component">The chat component to convert into a formatted string</param>
    /// <param name="parent">The parent chat Component of <paramref name="component"/>, used for inheriting styles</param>
    /// <returns></returns>
    public static string GetFormattedString(ChatComponent component, ChatComponent parent)
    {
        var formattedString = new StringBuilder();
        var closeTags       = new Stack <string>();

        // write formatting before the text.
        // if the style is not present in this component, check the parent's formatting
        if (component.Bold || (parent?.Bold ?? false))
        {
            writeTag("b");
        }
        if (component.Italic || (parent?.Italic ?? false))
        {
            writeTag("i");
        }
        if (component.Underlined || (parent?.Underlined ?? false))
        {
            writeTag("u");
        }
        if (component.Strikethrough || (parent?.Strikethrough ?? false))
        {
            writeTag("s");
        }
        if (component.Obfuscated || (parent?.Obfuscated ?? false))
        {
            writeTag("s");             // strikethrough placeholder for magic text todo: magic text?
        }
        if (!string.IsNullOrEmpty(component.Color) || !string.IsNullOrEmpty(parent?.Color))
        {
            writeColor(component.Color ?? parent.Color);
        }

        void writeTag(string tag)
        {
            formattedString.Append($"<{tag}>");
            closeTags.Push($"</{tag}>");
        }

        void writeColor(string color)
        {
            switch (color)
            {
            case "l":                       // bold
                writeTag("b");
                break;

            case "o":                       // italic
                writeTag("i");
                break;

            case "n":                       // underlined
                writeTag("u");
                break;

            case "m":                       // strikethrough
                writeTag("s");
                break;

            case "r":                       // reset - don't write any color at all
                return;

            case "k":                       // obfuscated or magic
                writeTag("s");              // placeholder for obfuscated text
                break;

            default:                        // "color" isn't a formatting code so it must be an actual color
                string htmlColorCode = ColorUtility.ToHtmlStringRGB(GetChatForegroundColor(color));
                formattedString.Append($"<color=#{htmlColorCode}>");
                closeTags.Push("</color>");
                break;
            }
        }

        // write the text content of the component
        switch (component)
        {
        case StringComponent stringComponent:
            formattedString.Append(stringComponent.text);
            break;

        case TranslateComponent translateComponent:
            var formattedWith = translateComponent.with.Select(w => GetFormattedString(w, component));                      // get formatted translation inserts
            formattedString.Append(ChatTranslation.TranslateString(translateComponent.translate, formattedWith.ToArray())); // translate string and append
            break;

        default:
            throw new NotImplementedException($"{component.GetType().ToString()} is not supported yet");
        }

        // append the close tags
        formattedString.Append(string.Join(string.Empty, closeTags));

        // add extra ChatComponents
        if (component.Extra != null)
        {
            foreach (var extraComp in component.Extra)
            {
                formattedString.Append(GetFormattedString(extraComp, component));
            }
        }

        return(formattedString.ToString());
    }
예제 #15
0
 //internal IDKinWrapPanel2 wrapPanel;
 ////private bool _contentLoaded;
 public FacePanel(ChatComponent chatComp)
 {
     this.InitializeComponent();
     this.chatComp = chatComp;
 }
예제 #16
0
 private void OnKeyboard()
 {
     ChatComponent.ShowHideChatFont(true);
 }
예제 #17
0
 public DisconnectPacket(Client client, ChatComponent reason) : base(client)
 {
     _Reason = reason;
 }
예제 #18
0
        private void Setup()
        {
            if (this.Dispatcher.CheckAccess())
            {
                myBoard = new GameBoard();
                myBoard.SetBinding(WidthProperty, "myGrid.Height");
                myBoard.SetBinding(HeightProperty, "myGrid.Height");
                myBoard.Background = ThemeParser.GetColor(ThemeParser.Colors.Board);
                Grid.SetRowSpan(myBoard, 3);
                Grid.SetColumn(myBoard, 0);
                myChat = new ChatComponent();
                myChat.NewOutgoingMessage += new EventHandler<NewOutgoingMessageEventArgs>(Chat_NewOutgoingMessage);
                Grid.SetColumn(myChat, 1);
                Grid.SetRow(myChat, 2);
                myChat.Margin = new Thickness(5, 0, 0, 0);
                myMenu = new MenuFader(myCanvas);
                myMenu.Margin = new Thickness(25,0,25,0);
                myMenu.HostGameClicked += new EventHandler<HostGameClickEventArgs>(myMenu_HostGameClicked);
                myMenu.JoinGameClicked += new EventHandler<JoinGameClickEventArgs>(myMenu_JoinGameClicked);
                myMenu.CloseGameClicked += new EventHandler<CloseGameClickEventArgs>(myMenu_CloseGameClicked);
                myMenu.StartGameClicked += new EventHandler<StartGameClickEventArgs>(myMenu_StartGameClicked);
                myGrid.Children.Add(myBoard);
                myGrid.Children.Add(myChat);
                myCanvas.Children.Add(myMenu);
                myBoard.GameBuilt += new EventHandler<GameBoardBuiltEventArgs>(myBoard_GameBuilt);
                myBoard.Dice.RollEnded += new EventHandler<RollEndedEventArgs>(Dice_RollEnded);
                myBoard.Dice.RollStarted += new EventHandler<RollStartedEventArgs>(Dice_RollStarted);
                myBoard.Dice.EndTurn += new EventHandler<EndTurnEventArgs>(Dice_EndTurn);
                ToggleTurnItems(false);

            }
            else this.Dispatcher.BeginInvoke(new Action(Setup), null);
        }