Пример #1
0
 public void HandleArguments(string args)
 {
     GameBase.Scheduler.Add(delegate
     {
         if (args.StartsWith("osu://"))
         {
             GameBase.BringToFront();
             ChatEngine.HandleLink(args);
         }
         else
         {
             //file handling.
             OsuModes gs = GameBase.ReceiveFile(args);
             if (gs != OsuModes.Unknown)
             {
                 if (GameBase.IsMinimized && GameBase.Form.Visible)
                 {
                     GameBase.Form.WindowState = FormWindowState.Normal;
                     GameBase.BringToFront();
                 }
                 GameBase.ChangeMode(gs, true);
             }
         }
     });
 }
Пример #2
0
        internal virtual void Display()
        {
            if (IsDisplayed)
            {
                return;
            }

            if (ChatEngine.IsVisible && !AllowChatOverlay)
            {
                ChatEngine.HideChat();
                chatToggle = true;
            }

            for (int i = spriteManager.SpriteList.Count - 1; i > -1; i--)
            {
                pDrawable s = spriteManager.SpriteList[i];

                if (s.Transformations.Count > 0 && s.Transformations[0].Time2 < GameBase.Time)
                {
                    s.Transformations.ForEach(t => { t.Time1 += GameBase.Time; t.Time2 += GameBase.Time; });
                }

                if (s.Transformations.Count == 0 && s.InitialColour != Color.TransparentWhite)
                {
                    s.FadeInFromZero(300);
                }
            }

            IsDisplayed = true;
        }
Пример #3
0
        private void FocusGot()
        {
            if (ReadOnly)
            {
                return;
            }

            if (!HasFocus)
            {
                beforeCommit         = Box.Text;
                HasFocus             = true;
                Box.BorderColour     = Color.White;
                Box.BackgroundColour = new Color(255, 255, 255, 50);
                Box.refreshTexture();

                InputManager.fullTextGameBuffer = Box.Text;
                InputManager.FullTextGameFocus  = true;

                chatWasVisible = ChatEngine.IsVisible;
                if (ChatEngine.IsVisible)
                {
                    ChatEngine.Toggle(true);
                }
            }
        }
Пример #4
0
        internal static void LeaveLobby(bool changeMode)
        {
            if (!Joined)
            {
                return;
            }
            Joined = false;

            Matches.Clear();
            BanchoClient.SendRequest(RequestType.Osu_LobbyPart, null);

            if (Status == LobbyStatus.Idle)
            {
                ChatEngine.RemoveChannel(@"#lobby");

                if (!chatOpenOnStart)
                {
                    ChatEngine.HideChat();
                }

                Status = LobbyStatus.NotJoined;
            }

            if (changeMode)
            {
                AudioEngine.PlaySamplePositional(@"menuback");
                Status = LobbyStatus.NotJoined;
                GameBase.ChangeMode(OsuModes.Menu);
            }
        }
Пример #5
0
        internal static void LeaveLobby(bool changeMode)
        {
            if (!Joined)
            {
                return;
            }
            Joined = false;

            Matches.Clear();
            BanchoClient.SendRequest(RequestType.Osu_LobbyPart, null);

            if (Status == LobbyStatus.Idle)
            {
                if (!chatOpenOnStart && ChatEngine.IsVisible)
                {
                    ChatEngine.Toggle(true);
                }
                Status = LobbyStatus.NotJoined;
            }

            if (changeMode)
            {
                AudioEngine.PlaySample(AudioEngine.s_MenuBack);
                GameBase.ChangeMode(Modes.Menu);
            }
        }
Пример #6
0
 public HomePageModel(ChatEngine chatEngine, IEncryption encryption)
 {
     ChatEngine     = chatEngine;
     EncryptionAlgo = encryption;
     ChatEngine.MesssageReceived += ChatEngine_MesssageReceived;
     RoomChats = new ObservableCollection <ChatObject>();
     LogDatas  = new ObservableCollection <string>();
 }
Пример #7
0
        /// <summary>
        ///     Initializes a new instance of the <see cref="AimlLoader" /> class.
        /// </summary>
        /// <param name="chatEngine">The chat engine.</param>
        /// <exception cref="System.ArgumentNullException">chatEngine</exception>
        public AimlLoader([NotNull] ChatEngine chatEngine)
        {
            if (chatEngine == null)
            {
                throw new ArgumentNullException(nameof(chatEngine));
            }

            _chatEngine = chatEngine;
        }
Пример #8
0
        void pb_OnClick(pText p, pText pname)
        {
            string attemptJoin = p.Tag.ToString();

            Channel c = ChatEngine.channels.Find(s => s.Name == attemptJoin);

            if (c == null)
            {
                NotificationManager.ShowMessageMassive(LocalisationManager.GetString(OsuString.ChannelListDialog_CantRejoinThisChannel), 1500);
                return;
            }

            if (InputManager.rightButtonLast == ButtonState.Pressed)
            {
                if (!c.Joined || !c.Closeable)
                {
                    return;
                }
                ChatEngine.RemoveChannel(c);
                NotificationManager.ShowMessageMassive(string.Format(LocalisationManager.GetString(OsuString.ChannelListDialog_Left), c.Name), 1500);
                p.FadeColour(SkinManager.NEW_SKIN_COLOUR_SECONDARY, 300);
                pname.FadeColour(SkinManager.NEW_SKIN_COLOUR_SECONDARY, 300);
            }
            else
            {
                if (!c.Joined)
                {
                    Channel chan = null;

                    try
                    {
                        chan = ChatEngine.AddChannel(attemptJoin, false, true);
                        if (chan == null)
                        {
                            NotificationManager.ShowMessageMassive(string.Format(LocalisationManager.GetString(OsuString.ChannelListDialog_JoiningTooFast), attemptJoin), 1500);
                            return;
                        }

                        ChatEngine.channelTabs.SetSelected(chan);
                        NotificationManager.ShowMessageMassive(string.Format(LocalisationManager.GetString(OsuString.ChannelListDialog_Joined), chan.Name), 1500);
                        p.FadeColour(SkinManager.NEW_SKIN_COLOUR_MAIN, 300);
                        pname.FadeColour(SkinManager.NEW_SKIN_COLOUR_MAIN, 300);
                    }
                    catch
                    {
                    }
                }
                else
                {
                    NotificationManager.ShowMessageMassive(LocalisationManager.GetString(OsuString.ChannelListDialog_AlreadyJoined), 1500);
                }
            }

            Update();
        }
Пример #9
0
        /// <summary>
        ///     Initializes a new instance of the <see cref="T:System.Object" /> class.
        /// </summary>
        /// <exception cref="ArgumentNullException"><paramref name="engine" /> is <see langword="null" />.</exception>
        public TagHandlerFactory([NotNull] ChatEngine engine)
        {
            //- Validate
            if (engine == null) { throw new ArgumentNullException(nameof(engine)); }

            //- Set fields
            _engine = engine;

            //+ Load types in this assembly that have the HandlesAimlTag attribute
            RegisterTagHandlersInAppDomain();
        }
Пример #10
0
 public override void ExecuteCommand(ChatEngine session, BaseCommandInfo commandInfo)
 {
     try
     {
         var msg = Tool.SerializeHelp.Deserialize <Message>(commandInfo.Data[0]);
         session.ChatEvents.OnUserChat(msg);
     }
     catch (Exception ex)
     {
         throw;
     }
 }
        public ChatScriptManagerTests()
        {
            var chatModel                      = new ChatModel();
            ChatConfiguration config           = new ChatConfiguration();
            AWSDynamoService  awsDynamoService = new AWSDynamoService(config);
            FlowStepProvider  flowStepProvider = new FlowStepProvider(awsDynamoService);

            var chatEngine = new ChatEngine(null, config, null, awsDynamoService, null, null, null, null, null, null, null, null, flowStepProvider);

            scriptManager = new ChatScriptManager(chatModel, awsDynamoService, config);
            scriptManager.Initialize().Wait();
        }
Пример #12
0
        internal static void JoinLobby()
        {
            if (Joined)
            {
                return;
            }
            Joined = true;
            Matches.Clear();
            Status = LobbyStatus.Idle;
            BanchoClient.SendRequest(RequestType.Osu_LobbyJoin, null);

            ChatEngine.SwapChannel(ChatEngine.AddChannel(@"#lobby"));
        }
Пример #13
0
        private void EnterChat()
        {
            var user = AllUsers.Instance.GetAllUsers().Find(u => u.Login == AccountStatus.Instance.Login);

            if (user == null)
            {
                return;
            }
            ChatSettings.Instance.Id = user.ID;
            if (ChatSettings.Instance.AutoLogin)
            {
                ChatEngine.Login(user.ID);
            }
        }
Пример #14
0
 static public string LeaveRoom(string roomID)
 {
     try
     {
         ChatRoom room = ChatEngine.GetRoom(roomID);
         if (room != null)
         {
             room.LeaveRoom(HttpContext.Current.Session["UserName"].ToString());
         }
     }
     catch (Exception ex)
     {
     }
     return("");
 }
Пример #15
0
 static public string SendMessage(string msg, string roomID)
 {
     try
     {
         ChatRoom room = ChatEngine.GetRoom(roomID);
         string   res  = "";
         if (room != null)
         {
             res = room.SendMessage(msg, HttpContext.Current.Session["UserName"].ToString());
         }
         return(res);
     }
     catch (Exception ex)
     {
     }
     return("");
 }
Пример #16
0
        /// <summary>
        /// Disconnects from bancho.
        /// </summary>
        internal static void Disconnect(bool resetTimeout)
        {
            Authenticated = false;
            Connected     = false;

            StreamingManager.Spectators.Clear();
            StreamingManager.CurrentlySpectating = null;

            ChatEngine.ClearChannels();

            if (resetTimeout)
            {
                pingTimeout = PING_TIMEOUT;
            }

            sendSequence = 0;

            ChatEngine.ResetUsers();

            ResetReadArray(true);

            if (client == null || !client.Connected)
            {
                return;
            }

            try
            {
                new RequestGeneric(RequestType.Osu_Exit, null).Send(stream);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }

            Requests.Clear();

            if (client != null && client.Connected)
            {
                client.Close();
            }
        }
Пример #17
0
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Session["UserName"] == null)
        {
            Response.Redirect("Default.aspx");
        }

        txtMsg.Attributes.Add("onkeypress", "return clickButton(event,'btn')");
        if (!IsPostBack)
        {
            hdnRoomID.Value = Request.QueryString["rid"];
            ChatRoom room     = ChatEngine.GetRoom(hdnRoomID.Value);
            string   prevMsgs = room.JoinRoom(Session["UserName"].ToString(), Session["UserName"].ToString());
            txt.Text = prevMsgs;
            foreach (string s in room.GetRoomUsersNames())
            {
                lstMembers.Items.Add(new ListItem(s, s));
            }
        }
    }
Пример #18
0
 static public string UpdateUser(string roomID)
 {
     try
     {
         ChatRoom room = ChatEngine.GetRoom(roomID);
         if (room != null)
         {
             string res = "";
             if (room != null)
             {
                 res = room.UpdateUser(HttpContext.Current.Session["UserName"].ToString());
             }
             return(res);
         }
     }
     catch (Exception ex)
     {
     }
     return("");
 }
Пример #19
0
        public static void StopSpectating(bool ExitPlayMode = true)
        {
            if (GameBase.TourneySpectatorName != null)
            {
                GameBase.TourneySpectatorName.Text = string.Empty;
            }

            if (ExitPlayMode && (GameBase.Mode == OsuModes.Play || (GameBase.Mode != OsuModes.Menu && GameBase.Tournament)))
            {
                InputManager.ReplayMode = false;
                if (CurrentlySpectating == null)
                {
                    GameBase.ChangeMode(OsuModes.SelectPlay, true);
                }
                else
                {
                    GameBase.ChangeMode(OsuModes.Menu, true);
                }
            }

            if (CurrentlySpectating != null)
            {
                lock (LockReplayScore)
                {
                    BanchoClient.SendRequest(RequestType.Osu_StopSpectating, null);
                    NotificationManager.ShowMessage("Stopped spectating " + CurrentlySpectating.Name, Color.Tomato, 3000);
                    CurrentlySpectating          = null;
                    InputManager.ReplayStreaming = false;
                }
                if (ChatEngine.channels.Exists(s => s.Name == "#spectator"))
                {
                    ChatEngine.RemoveChannel(ChatEngine.channels.Find(s => s.Name == "#spectator"), false, true);
                }

                InputManager.ReplayStartTime = 0;
            }

            FellowSpectators.Clear();
            ReplayQueue.Clear();
            GameBase.SetTitle();
        }
Пример #20
0
        internal virtual void Display()
        {
            if (IsDisplayed)
            {
                return;
            }

            if (ChatEngine.IsVisible)
            {
                ChatEngine.Toggle(true);
                chatToggle = true;
            }

            GameBase.spriteManagerOverlay.RemoveRange(SpriteCollection);
            for (int i = SpriteCollection.Count - 1; i > -1; i--)
            {
                GameBase.spriteManagerOverlay.Add(SpriteCollection[i]);
                SpriteCollection[i].FadeInFromZero(300);
            }
            IsDisplayed = true;
        }
Пример #21
0
        private pSprite AddLinkSprite(Link l, List <pSprite> linkSprites, Vector2 offset, Vector2 size)
        {
            pSprite linkSprite = new pSprite(GameBase.WhitePixel, Fields.TopLeft, Origins.TopLeft, Clocks.Game, messageSprite.Position + offset);

            linkSprite.InitialPosition = messageSprite.InitialPosition + offset;
            linkSprite.Depth           = messageSprite.Depth - 0.001f;
            linkSprite.AlwaysDraw      = true;
            linkSprite.Tag             = @"link";
            linkSprite.InitialColour   = new Color(39, 70, 120, 255);

            linkSprite.Scale       = 1.6f;
            linkSprite.VectorScale = size;

            linkSprite.HandleInput = true;

            linkSprite.OnHover += delegate
            {
                foreach (pSprite s in linkSprites)
                {
                    s.FadeColour(Color.LightBlue, 100);
                }
            };

            linkSprite.OnHoverLost += delegate
            {
                foreach (pSprite s in linkSprites)
                {
                    s.FadeColour(new Color(39, 70, 120, 255), 100);
                }
            };

            linkSprite.OnClick += delegate { ChatEngine.HandleLink(l.Url); };

            linkSprite.ToolTip = @"link: " + l.Url;

            linkSprite.ClickRequiresConfirmation = true;
            Sprites.Add(linkSprite);

            return(linkSprite);
        }
Пример #22
0
        internal virtual void Close(bool isCancel = false)
        {
            if (!IsDisplayed)
            {
                return;
            }

            foreach (pSprite p in spriteManager.SpriteList)
            {
                p.FadeOut(120);
                p.HandleInput = false;
                p.AlwaysDraw  = false;
            }

            if (isCancel && cancelAction != null)
            {
                cancelAction(this, null);
            }
            if (Closed != null)
            {
                Closed(this, null);
            }

            if (chatToggle && !AllowChatOverlay)
            {
                if (ChatEngine.IsVisible)
                {
                    ChatEngine.HideChat();
                }
                else
                {
                    ChatEngine.RestoreLastState();
                }
            }

            IsDisplayed = false;

            Dispose();
        }
Пример #23
0
        internal void ReceivePresence(bUserPresence presence)
        {
            Id       = presence.userId;
            Name     = presence.username;
            Timezone = presence.timezone;

            //never downgrade from an osu! to non-osu presence
            if (!IsOsu || presence.isOsu)
            {
                IsOsu = presence.isOsu;
            }

            CountryCode = presence.countryCode;
            Location    = countryNames[presence.countryCode];

            Longitude  = presence.longitude;
            Latitude   = presence.latitude;
            Permission = presence.permission;
            Rank       = presence.rank;

            if (!StatsLoaded)
            {
                PlayMode = presence.playMode;
            }

            if (spriteAvatar != null)
            {
                LoadAvatarInto(spriteAvatar, spriteAvatar.MaxDimension);
            }

            UpdateTextFields();
            UpdateColour();

            if (!InitialLoadComplete)
            {
                ChatEngine.CheckFriend(this);
                InitialLoadComplete = true;
            }
        }
Пример #24
0
    static public string UpdateRoomMembers(string roomID)
    {
        try
        {
            ChatRoom room = ChatEngine.GetRoom(roomID);
            if (room != null)
            {
                IEnumerable <string> users = room.GetRoomUsersNames();
                string res = "";

                foreach (string s in users)
                {
                    res += s + ",";
                }
                return(res);
            }
        }
        catch (Exception ex)
        {
        }
        return("");
    }
Пример #25
0
        private void FocusLost()
        {
            if (ReadOnly)
            {
                return;
            }

            if (HasFocus)
            {
                HasFocus             = false;
                Box.BorderColour     = Color.Black;
                Box.BackgroundColour = new Color(255, 255, 255, 20);
                Box.refreshTexture();

                InputManager.fullTextGameBuffer = Box.Text;
                InputManager.FullTextGameFocus  = false;

                if (!ChatEngine.IsVisible && chatWasVisible)
                {
                    ChatEngine.Toggle(true);
                }
            }
        }
Пример #26
0
        protected override void Dispose(bool disposing)
        {
            KeyboardHandler.OnKeyPressed -= KeyboardHandler_OnKeyPressed;

            if (GameBase.Mode != Modes.MatchSetup && GameBase.Mode != Modes.SelectMulti &&
                Lobby.Status != LobbyStatus.Idle &&
                Lobby.Status != LobbyStatus.Play)
            {
                OnLeaveGame(null, null);
            }

            if (Lobby.Status == LobbyStatus.Play || Lobby.Status == LobbyStatus.Setup)
            {
                if (!Lobby.chatOpenOnStart && ChatEngine.IsVisible)
                {
                    ChatEngine.Toggle(true);
                }
            }

            spriteManager.Dispose();
            detailsGameName.Dispose();
            content.Unload();
            base.Dispose(disposing);
        }
Пример #27
0
        internal virtual void Close()
        {
            if (!IsDisplayed)
            {
                return;
            }

            foreach (pSprite p in SpriteCollection)
            {
                p.FadeOut(120);
                p.IsClickable = false;
                p.AlwaysDraw  = false;
            }

            if (Closed != null)
            {
                Closed(this, null);
            }
            if (chatToggle)
            {
                ChatEngine.Toggle(true);
            }
            IsDisplayed = false;
        }
Пример #28
0
        public override void Initialize()
        {
            StreamingManager.StopSpectating(false);

            content = new ResourceContentManager(GameBase.Instance.Services, ResourcesStore.ResourceManager);

            spriteManager = new SpriteManager();

            BanchoClient.OnConnect      += BanchoClient_OnConnect;
            KeyboardHandler.OnKeyRepeat += KeyboardHandler_OnKeyRepeat;

            pText headerText =
                new pText("Multiplayer Lobby", 30, new Vector2(0, 0), 0.955F, true, new Color(255, 255, 255, 255));

            spriteManager.Add(headerText);

            pText headerText2 = new pText("Let's play together!", 16, new Vector2(4, 26), 0.955F, true,
                                          new Color(255, 255, 255, 255));

            spriteManager.Add(headerText2);

            pSprite bgf =
                new pSprite(content.Load <Texture2D>("lobby-background"), FieldTypes.Window, OriginTypes.TopLeft,
                            ClockTypes.Game, Vector2.Zero, 0, true, Color.White);

            spriteManager.Add(bgf);

            pAnimation back =
                new pAnimation(SkinManager.LoadAll("menu-back"), FieldTypes.Window,
                               OriginTypes.TopLeft,
                               ClockTypes.Game,
                               new Vector2(0, 480), 0.8F, true, new Color(255, 255, 255, (byte)(255 * 0.6)));

            back.SetFramerateFromSkin();
            back.OriginPosition = new Vector2(0, 146);
            back.OnClick       += back_OnClick;
            back.IsClickable    = true;
            back.HoverEffect    = new Transformation(TransformationType.Fade, 0.6F, 1, 0, 300);
            spriteManager.Add(back);

            pButton pbut = new pButton("New Game", new Vector2(270, 285), new Vector2(350, 30), 0.92f, new Color(99, 139, 228), OnCreateGame);

            spriteManager.Add(pbut.SpriteCollection);

            //pbut = new pButton("Join Game", new Vector2(270, 285), new Vector2(140, 30), 0.92f, new Color(99, 139, 228), OnCreateGame);
            //spriteManager.Add(pbut.SpriteCollection);

            pbut = new pButton("Back to Menu", new Vector2(10, 285), new Vector2(250, 30), 0.92f, new Color(235, 160, 62), back_OnClick);
            spriteManager.Add(pbut.SpriteCollection);

            lobbyUserList =
                new pText("", 12, new Vector2(560, 65), 1, true, Color.White);
            lobbyUserList.TextBold = true;
            spriteManager.Add(lobbyUserList);

            noMatches               = new pText("There are no matches available.\nClick 'New Game' to start a new game!", 20, new Vector2(280, 115), new Vector2(400, 0), 1, true, Color.White, false);
            noMatches.TextBold      = true;
            noMatches.CurrentColour = Color.TransparentWhite;
            noMatches.TextAlignment = Alignment.Centre;
            noMatches.OriginType    = OriginTypes.Centre;
            gameList.spriteManager.Add(noMatches);

            base.Initialize();

            JoinLobby();

            LobbyUpdatePending = true;

            GameBase.LoadComplete();

            if (!ChatEngine.IsVisible)
            {
                if (ChatEngine.IsFullVisible)
                {
                    ChatEngine.ToggleFull();
                }
                ChatEngine.Toggle();
            }
        }
Пример #29
0
 public void Send()
 {
     ChatEngine.SendMessage("!report " + FormattedReportReason, channel.Name, false);
 }
Пример #30
0
 public ChatClient() : base(new TcpClient(new IPEndPoint(IPAddress.Parse("127.0.0.1"), int.Parse(ConfigurationManager.AppSettings["port"]))))
 {
     _info = new ClientInfo(new Random().Next().ToString());
     _chat = new ChatEngine();
 }
Пример #31
0
        private void Display()
        {
            pDialog dialog = new pDialog(null, false);

            dialog.spriteManager.HandleOverlayInput = true;
            dialog.ButtonOffset = new Vector2(50, 60);

            ChatEngine.RequestUserStats(new List <User>()
            {
                User
            }, true);

            bool isSelf = User.Name == GameBase.User.Name;

            dialog.Closed += delegate { ActiveProfiles.Remove(this); };

            if (User.IsOsu && !isSelf)
            {
                if (GameBase.Mode != OsuModes.Edit && (GameBase.Mode != OsuModes.Play || !GameBase.TestMode))
                {
                    dialog.AddOption(User == StreamingManager.CurrentlySpectating ? LocalisationManager.GetString(OsuString.UserProfile_StopSpectating) : LocalisationManager.GetString(OsuString.UserProfile_StartSpectating),
                                     Color.YellowGreen,
                                     delegate
                    {
                        if (Lobby.Status != LobbyStatus.NotJoined)
                        {
                            NotificationManager.ShowMessage(
                                LocalisationManager.GetString(OsuString.UserProfile_CantSpectate));
                            return;
                        }

                        if (GameBase.Mode == OsuModes.Play && !InputManager.ReplayMode)
                        {
                            NotificationManager.ShowMessage(
                                LocalisationManager.GetString(OsuString.UserProfile_CantSpectate));
                            return;
                        }

                        if (User.Name == ConfigManager.sUsername ||
                            User == StreamingManager.CurrentlySpectating)
                        {
                            StreamingManager.StopSpectating(true);
                        }
                        else
                        {
                            StreamingManager.StartSpectating(User);
                        }
                    });
                }
            }

            dialog.AddOption(LocalisationManager.GetString(OsuString.UserProfile_ViewProfile), new Color(58, 110, 165),
                             delegate
            {
                GameBase.ProcessStart(User.Id == 0 ? @"https://osu.ppy.sh/wiki/BanchoBot" : String.Format(Urls.USER_PROFILE, User.Id));
            });

            if (isSelf)
            {
                if (GameBase.Mode == OsuModes.Menu && BanchoClient.AllowUserSwitching)
                {
                    dialog.AddOption(LocalisationManager.GetString(OsuString.UserProfile_SignOut), Color.Orange, delegate
                    {
                        GameBase.Options.PerformLogout();
                        if (!GameBase.Options.Expanded)
                        {
                            GameBase.ShowLogin();
                        }
                    });
                }
                dialog.AddOption(LocalisationManager.GetString(OsuString.UserProfile_ChangeAvatar), Color.Orange, delegate { GameBase.ProcessStart(Urls.USER_SET_AVATAR); });
            }
            else
            {
                dialog.AddOption(LocalisationManager.GetString(OsuString.UserProfile_StartChat), Color.MediumPurple,
                                 delegate { ChatEngine.StartChat(User); });

                if (User.IsOsu)
                {
                    if (MatchSetup.Match != null)
                    {
                        dialog.AddOption(LocalisationManager.GetString(OsuString.UserProfile_Invitetogame), Color.Yellow, delegate
                        {
                            BanchoClient.SendRequest(new Request(RequestType.Osu_Invite, new bInt(User.Id)));
                            NotificationManager.ShowMessageMassive(string.Format(LocalisationManager.GetString(OsuString.ChatEngine_UserInvited), User.Name));
                        });
                    }
                }

                dialog.AddOption(User.IsFriend ? LocalisationManager.GetString(OsuString.UserProfile_CancelFriendship) : LocalisationManager.GetString(OsuString.UserProfile_AddFriend), Color.Pink, delegate { ChatEngine.ToggleFriend(User, !User.IsFriend); });

                if (ShowExtraOptions && User.Id > 0)
                {
                    dialog.AddOption(LocalisationManager.GetString(OsuString.UserProfile_ReportUser), Color.Red,
                                     delegate
                    {
                        UserReportDialog report = new UserReportDialog(User, ChatEngine.activeChannel);
                        GameBase.ShowDialog(report);
                    });

                    if (ChatEngine.CheckIgnore(User))
                    {
                        dialog.AddOption(LocalisationManager.GetString(OsuString.UserProfile_UnignoreUser), Color.Gray, delegate { ChatEngine.UnignoreUser(User); });
                    }
                    else
                    {
                        dialog.AddOption(LocalisationManager.GetString(OsuString.UserProfile_IgnoreUser), Color.Gray, delegate { ChatEngine.IgnoreUser(User); });
                    }
                }
            }

            dialog.AddOption(LocalisationManager.GetString(OsuString.General_Close), Color.DarkGray, null);


            if (DisplayedUser.DrawAt(new Vector2(5, 5), true, 0))
            {
                dialog.spriteManager.Add(DisplayedUser.Sprites);
            }

            GameBase.ShowDialog(dialog);

            /*if (User.Id != 0)
             * {
             *  GameBase.Scheduler.Add(delegate
             *  {
             *      if (!dialog.IsDisplayed) return;
             *
             *      if (browser == null)
             *      {
             *          GameBase.OnResolutionChange += GameBase_OnResolutionChange;
             *          browser = new pBrowser(null, Vector2.Zero, new Vector2(220, GameBase.WindowManager.Height - 48 * GameBase.WindowManager.Ratio), 0.911f, Color.White);
             *          browser.Disposable = false;
             *          browser.OnLoaded += delegate
             *          {
             *              browser.FadeIn(500);
             *              browser.MoveToRelative(new Vector2(88, 0), 500, EasingTypes.In);
             *          };
             *      }
             *
             *      browser.Transformations.Clear();
             *      browser.CurrentAlpha = 0;
             *      browser.AlwaysDraw = true;
             *      browser.CurrentPosition = new Vector2(-88, 48);
             *      browser.Load(string.Format(Urls.USER_PROFILE_COMPACT, User.Id));
             *
             *      dialog.spriteManager.Add(browser);
             *  }, 1000);
             * }*/
        }
Пример #32
0
        internal static void UpdateFrame()
        {
            if (GameBase.MenuActive)
            {
                return;
            }

            MouseHandler.UpdateWindowsMouse();

            if (doubleClickTime > 0)
            {
                doubleClickTime = (int)Math.Max(0, doubleClickTime - GameBase.ElapsedMilliseconds);
            }

            //Initialises the current input/processing loop frame.  In the case of 2x replays, up to two frames may be processed in a single game tick.
            int loopFrame = 0;

            if (ConfigManager.sMouseSpeed != 1 && GameBase.Mode != Modes.Edit)
            {
                //Handle mouse velocity setting.

                MouseState newState = Mouse.GetState();

                if (Game.IsActive && newState.X >= 0 && newState.X < GameBase.WindowWidth && newState.Y >= 0 &&
                    newState.Y < GameBase.WindowHeight)
                {
#if newmouse
                    Vector2 newMouseVelocityFloat = new Vector2((float)(mouseVelocityFloat.X + (newState.X - mouseVelocityFloat.X) * ConfigManager.sMouseSpeed),
                                                                (float)(mouseVelocityFloat.Y + (newState.Y - mouseVelocityFloat.Y) * ConfigManager.sMouseSpeed));

                    if (mouseVelocityPoint.X != newState.X || mouseVelocityPoint.Y != newState.Y)
                    {
                        mouseVelocityFloat = newMouseVelocityFloat;
                        mouseVelocityPoint = new Point((int)Math.Round(mouseVelocityFloat.X),
                                                       (int)Math.Round(mouseVelocityFloat.Y));
                        if (GameBase.WindowRectangle.Contains(mouseVelocityPoint))
                        {
                            Mouse.SetPosition(mouseVelocityPoint.X, mouseVelocityPoint.Y);
                        }
                    }
#else
                    Mouse.SetPosition((int)Math.Round(mouse.X + (newState.X - mouse.X) * ConfigManager.sMouseSpeed),
                                      (int)Math.Round(mouse.Y + (newState.Y - mouse.Y) * ConfigManager.sMouseSpeed));
#endif

                    /*MouseHandler.MousePoint.X += (int)((newState.X - mouse.X) * MouseHandler.mouseSpeed);
                     * MouseHandler.MousePoint.Y += (int)((newState.Y - mouse.Y) * MouseHandler.mouseSpeed);
                     *
                     * if (!Player.Playing && !GameBase.graphics.IsFullScreen && ( MouseHandler.MousePoint.X < 0 || MouseHandler.MousePoint.X >= GameBase.WindowWidth || MouseHandler.MousePoint.Y < 0 || MouseHandler.MousePoint.Y >= GameBase.WindowHeight))
                     *  Mouse.SetPosition(MouseHandler.MousePoint.X, MouseHandler.MousePoint.Y);
                     *
                     * mouse = newState;*/


                    mouse = Mouse.GetState();
                    MouseHandler.MousePosition.X = mouse.X;
                    MouseHandler.MousePosition.Y = mouse.Y;
                    MouseHandler.MousePoint.X    = mouse.X;
                    MouseHandler.MousePoint.Y    = mouse.Y;
                }
                else
                {
                    mouse = newState;
                    MouseHandler.MousePosition.X = mouse.X;
                    MouseHandler.MousePosition.Y = mouse.Y;
                    MouseHandler.MousePoint.X    = mouse.X;
                    MouseHandler.MousePoint.Y    = mouse.Y;
                }
            }
            else
            {
                mouse = Mouse.GetState();
                MouseHandler.MousePosition.X = mouse.X;
                MouseHandler.MousePosition.Y = mouse.Y;
                MouseHandler.MousePoint.X    = mouse.X;
                MouseHandler.MousePoint.Y    = mouse.Y;
            }


            if (!Player.Playing || !ConfigManager.sMouseDisableButtons)
            {
                MouseHandler.mouseLeft = mouse.LeftButton;

                if (TabletHandler.pendingTabletUpdate)
                {
                    //Make sure we accept a tablet click even when it is release in under 16ms.
                    MouseHandler.mouseLeft            = ButtonState.Pressed;
                    TabletHandler.pendingTabletUpdate = false;
                }
                else if (TabletHandler.tabletLeft == ButtonState.Pressed)
                {
                    MouseHandler.mouseLeft = TabletHandler.tabletLeft;
                }

                MouseHandler.mouseRight  = mouse.RightButton;
                MouseHandler.mouseMiddle = mouse.MiddleButton;
                MouseHandler.mouseBack   = mouse.XButton1;


                if (Game.IsActive && GameBase.Mode != Modes.Edit && GameBase.Mode != Modes.Menu)
                {
                    if (MouseHandler.mouseBack == ButtonState.Pressed && MouseHandler.mouseBackLast != MouseHandler.mouseBack)
                    {
                        KeyboardHandler.DoKeyPressed(Keys.Escape);
                    }
                    MouseHandler.mouseBackLast = MouseHandler.mouseBack;
                }
            }
            else
            {
                MouseHandler.mouseLeft  = ButtonState.Released;
                MouseHandler.mouseRight = ButtonState.Released;
            }

            bool runningSlow = false;

            do
            {
                AudioEngine.Update();
                lock (StreamingManager.LockReplayScore)
                {
                    if (ReplayMode && ReplayScore != null && ReplayScore.replay != null)
                    {
                        int count = ReplayScore.replay.Count;
                        if (GameBase.Mode == Modes.Play && Player.currentScore != null &&
                            count > 0 &&
                            ReplayFrame < count - 2 &&
                            (ReplayToEnd || !ReplayStreaming ||
                             ReplayScore.replay[count - 1].time - AudioEngine.Time > 1000))
                        {
                            Buffering = false;

/*                            if (ReplayStreaming && !Player.IsFailed && Player.Paused)
 *                              Buffering = false;
 *                          else
 *                          {*/
                            if (ReplayFrame < count - 2 &&
                                (ReplayScore.replay[ReplayFrame + 1].time <= AudioEngine.Time))
                            // && (Math.Abs(ReplayScore.replay[ReplayFrame + 1].time - AudioEngine.Time) < 10 || AudioEngine.Time - ReplayScore.replay[ReplayFrame + 1].time > 0))
                            {
                                ReplayFrame++;
                                ReplayOk = true;
                            }
                            else
                            {
                                ReplayOk = false;
                            }

                            runningSlow = AudioEngine.Time - ReplayScore.replay[ReplayFrame].time > 16 && ReplayOk;

                            //skip unnecessary frames
                            if (runningSlow)
                            {
                                while (ReplayFrame < count - 2 && !ReplayScore.replay[ReplayFrame].mouseLeft &&
                                       !ReplayScore.replay[ReplayFrame].mouseRight &&
                                       ReplayScore.replay[ReplayFrame + 1].time <= AudioEngine.Time &&
                                       ReplayScore.replay[ReplayFrame].mouseLeft == leftButtonLastBool &&
                                       ReplayScore.replay[ReplayFrame].mouseRight == rightButtonLastBool &&
                                       ReplayScore.replay[ReplayFrame].buttonState == lastButtonState &&
                                       !Player.IsSpinning)
                                {
                                    Console.WriteLine("replay frame {0} skipped!!!!", ReplayFrame);
                                    ReplayFrame++;
                                }
                            }

                            Vector2 pos;

                            if (MouseButtonInstantRelease)
                            {
                                leftButton1i  = false;
                                leftButton2i  = false;
                                rightButton1i = false;
                                rightButton2i = false;
                                leftButton    = ButtonState.Released;
                                rightButton   = ButtonState.Released;
                            }

                            if (ReplayOk &&
                                (ReplayScore.replay[ReplayFrame].mouseLeft ||
                                 ReplayScore.replay[ReplayFrame].mouseRight ||
                                 ReplayScore.replay[ReplayFrame].buttonState != lastButtonState ||
                                 Player.IsSpinning))
                            {
                                AudioEngine.Time = ReplayScore.replay[ReplayFrame].time;

                                leftButton1i = (!MouseButtonInstantRelease || !leftButton1) && ReplayScore.replay[ReplayFrame].mouseLeft1;
                                leftButton1  = ReplayScore.replay[ReplayFrame].mouseLeft1;

                                leftButton2i = (!MouseButtonInstantRelease || !leftButton2) && ReplayScore.replay[ReplayFrame].mouseLeft2;
                                leftButton2  = ReplayScore.replay[ReplayFrame].mouseLeft2;

                                rightButton1i = (!MouseButtonInstantRelease || !rightButton1) && ReplayScore.replay[ReplayFrame].mouseRight1;
                                rightButton1  = ReplayScore.replay[ReplayFrame].mouseRight1;

                                rightButton2i = (!MouseButtonInstantRelease || !rightButton2) && ReplayScore.replay[ReplayFrame].mouseRight2;
                                rightButton2  = ReplayScore.replay[ReplayFrame].mouseRight2;

                                leftButton  = leftButton1i || leftButton2i ? ButtonState.Pressed : ButtonState.Released;
                                rightButton = rightButton1i || rightButton2i ? ButtonState.Pressed : ButtonState.Released;

                                pos =
                                    GameBase.GamefieldToDisplay(
                                        new Vector2(ReplayScore.replay[ReplayFrame].mouseX,
                                                    ReplayScore.replay[ReplayFrame].mouseY));
                                // *WindowWidth / ReplayScore.resolution;

                                lastButtonState = ReplayScore.replay[ReplayFrame].buttonState;
                            }
                            else if (ReplayScore.replay[ReplayFrame].time == ReplayScore.replay[ReplayFrame + 1].time)
                            {
                                pos =
                                    GameBase.GamefieldToDisplay(
                                        new Vector2(ReplayScore.replay[ReplayFrame].mouseX,
                                                    ReplayScore.replay[ReplayFrame].mouseY));
                            }
                            else if (ReplayScore.replay[ReplayFrame].time >= AudioEngine.Time)
                            {
                                int p1 = Math.Max(0, ReplayFrame - 1);
                                int p2 = ReplayFrame;

                                pos =
                                    Vector2.Lerp(
                                        GameBase.GamefieldToDisplay(
                                            new Vector2(ReplayScore.replay[p1].mouseX, ReplayScore.replay[p1].mouseY)),
                                        GameBase.GamefieldToDisplay(
                                            new Vector2(ReplayScore.replay[p2].mouseX, ReplayScore.replay[p2].mouseY)),
                                        Math.Max(0,
                                                 (
                                                     1 - (float)(ReplayScore.replay[p2].time - AudioEngine.Time) /
                                                     (ReplayScore.replay[p2].time - ReplayScore.replay[p1].time))));
                                if (!MouseButtonInstantRelease)
                                {
                                    leftButton = ReplayScore.replay[p2].mouseLeft
                                                     ? ButtonState.Pressed
                                                     : ButtonState.Released;
                                    rightButton = ReplayScore.replay[p2].mouseRight
                                                      ? ButtonState.Pressed
                                                      : ButtonState.Released;
                                }
                            }
                            else
                            {
                                int p1 = ReplayFrame;
                                int p2 = Math.Min(count - 1, ReplayFrame + 1);

                                pos =
                                    Vector2.Lerp(
                                        GameBase.GamefieldToDisplay(
                                            new Vector2(ReplayScore.replay[p1].mouseX, ReplayScore.replay[p1].mouseY)),
                                        GameBase.GamefieldToDisplay(
                                            new Vector2(ReplayScore.replay[p2].mouseX, ReplayScore.replay[p2].mouseY)),
                                        Math.Max(0,
                                                 1 - ((float)(ReplayScore.replay[p2].time - AudioEngine.Time) /
                                                      (ReplayScore.replay[p2].time - ReplayScore.replay[p1].time))));
                                if (!MouseButtonInstantRelease)
                                {
                                    leftButton = ReplayScore.replay[p1].mouseLeft
                                                     ? ButtonState.Pressed
                                                     : ButtonState.Released;
                                    rightButton = ReplayScore.replay[p1].mouseRight
                                                      ? ButtonState.Pressed
                                                      : ButtonState.Released;
                                }
                            }

                            CursorPosition = pos;
                            CursorPoint    = new Point((int)CursorPosition.X, (int)CursorPosition.Y);

                            Player.Playing = false;
                        }
                        else if (ReplayStreaming)
                        {
                            Player.Playing = false;

                            if (ReplayToEnd)
                            {
                                if (Player.Paused && !Player.Failed)
                                {
                                    Buffering = false;
                                }

                                if (Player.ReplayBufferText != null && Player.Failed)
                                {
                                    Player.ReplayBufferText.Text = "User Failed";
                                }
                            }
                            else

                            /*if (HitObjectManager.hitObjects != null &&
                             * AudioEngine.Time >= HitObjectManager.hitObjects[0].StartTime - HitObjectManager.PreEmpt)*/
                            {
                                Buffering = true;

                                float percent;

                                if (count == 0)
                                {
                                    percent = 0;
                                }
                                else
                                {
                                    percent =
                                        MathHelper.Clamp(
                                            (float)(ReplayScore.replay[count - 1].time - AudioEngine.Time) / 10, 0, 100);
                                }

                                if (Player.ReplayBufferText != null)
                                {
                                    if (Player.Failed)
                                    {
                                        Player.ReplayBufferText.Text = "Failed";
                                    }
                                    else
                                    {
                                        Player.ReplayBufferText.Text =
                                            string.Format("Buffering {0:0.0}%...", percent);
                                    }
                                }
                            }
                        }
                    }
                }
                if (!ReplayMode)
                {
                    //todo: move this to the outer loop?
                    Player.Playing = GameBase.Mode == Modes.Play &&
                                     AudioEngine.Time >= Player.skipBoundary &&
                                     !Player.Failed && !Player.Paused && !EventManager.BreakMode &&
                                     Game.IsActive && !Player.currentScore.pass;

                    if (Player.Playing && !GameBase.graphics.IsFullScreen)
                    {
                        if (Cursor.Clip == cursorOriginalBounds)
                        {
                            Cursor.Clip = GameBase.Form.RectangleToScreen(GameBase.Form.ClientRectangle);
                        }
                    }
                    else if (Cursor.Clip != cursorOriginalBounds)
                    {
                        Cursor.Clip = cursorOriginalBounds;
                    }

                    CursorPosition = MouseHandler.MousePosition;
                    CursorPoint    = MouseHandler.MousePoint;
                    leftButton     = MouseHandler.mouseLeft;
                    leftButton1i   = leftButton == ButtonState.Pressed && !leftButtonLastBool;
                    leftButton1    = leftButton == ButtonState.Pressed;
                    leftButton2i   = leftButton == ButtonState.Pressed && !leftButtonLastBool;
                    leftButton2    = leftButton == ButtonState.Pressed;

                    rightButton   = MouseHandler.mouseRight;
                    rightButton1i = rightButton == ButtonState.Pressed && !rightButtonLastBool;
                    rightButton1  = rightButton == ButtonState.Pressed;
                    rightButton2i = rightButton == ButtonState.Pressed && !rightButtonLastBool;
                    rightButton2  = rightButton == ButtonState.Pressed;
                }

                //Update mouse cursor position, except in editor mode where we use the windows cursor.
                if (!GameBase.MenuVisible)
                {
                    if (spriteCursor.IsVisible && GameBase.SixtyFramesPerSecondFrame)
                    {
                        pSprite trail =
                            new pSprite(SkinManager.Load("cursortrail"), FieldTypes.WindowScaleOnly,
                                        (SkinManager.Current.CursorCentre ? OriginTypes.Centre : OriginTypes.TopLeft),
                                        ClockTypes.Game, CursorPosition, spriteCursor.Depth - 0.001F,
                                        false,
                                        Color.White);
                        trail.FadeOut(150);
                        trail.CurrentScale = spriteCursor.CurrentScale;
                        if (SkinManager.Current.CursorTrailRotate)
                        {
                            trail.CurrentRotation = spriteCursor.CurrentRotation;
                        }
                        GameBase.spriteManagerOverlay.Add(trail);
                    }

                    spriteCursor.CurrentPosition = CursorPosition;
                }

                //Only do actions on the input if the window is active.
                if (Game.IsActive || ReplayMode)
                {
                    //Mouse wheel
                    MouseHandler.MouseWheelHandled = false;
                    if (mouse.ScrollWheelValue != scrollWheel)
                    {
                        /*if (ChatEngine.IsVisible)
                         * {
                         *  if (mouse.ScrollWheelValue > scrollWheel)
                         *      ChatEngine.MouseHandler_OnMouseWheelUp(null, null);
                         *  else
                         *      ChatEngine.MouseHandler_OnMouseWheelDown(null, null);
                         * }
                         * else
                         * {*/
                        if (mouse.ScrollWheelValue > scrollWheel)
                        {
                            MouseHandler.DoMouseWheelUp();
                        }
                        else
                        {
                            MouseHandler.DoMouseWheelDown();
                        }
                        /*}*/
                        scrollWheel = mouse.ScrollWheelValue;
                    }

                    try
                    {
                        keyboard = Keyboard.GetState();
                    }
                    catch (InvalidOperationException)
                    {
                    }

                    if (!ReplayMode)
                    {
                        MouseViaKeyboardControls();
                    }


                    Keys[] newKeys = (Keys[])keyboard.GetPressedKeys().Clone();

                    if (pressedKeys != null && !keyboard.IsKeyDown(Keys.Scroll))
                    {
                        KeyboardHandler.ControlPressed = (keyboard.IsKeyDown(Keys.LeftControl) ||
                                                          keyboard.IsKeyDown(Keys.RightControl));
                        KeyboardHandler.AltPressed = (keyboard.IsKeyDown(Keys.LeftAlt) ||
                                                      keyboard.IsKeyDown(Keys.RightAlt));
                        KeyboardHandler.ShiftPressed = (keyboard.IsKeyDown(Keys.LeftShift) ||
                                                        keyboard.IsKeyDown(Keys.RightShift));

                        for (int i = 0; i < newKeys.Length; i++)
                        {
                            Keys k      = newKeys[i];
                            bool bFound = false;


                            for (int j = 0; j < pressedKeys.Length; j++)
                            {
                                if (k == pressedKeys[j])
                                {
                                    bFound = true;
                                    break;
                                }
                            }

                            if (!bFound && GameBase.FadeState != FadeStates.FadeOut)
                            {
                                repeatTickCurrent = -100;
                                BanchoClient.Activity();
                                GameBase.KeyboardHandler_OnKeyPressed(null, k);
                                if (ChatEngine.IsVisible)
                                {
                                    string ks = k.ToString();
                                    if (ks.Length == 2 && ks[0] == 'F' && ks[1] >= '0' && ks[1] <= '9')
                                    {
                                        KeyboardHandler.DoKeyPressed(k);
                                    }
                                    else
                                    {
                                        ChatEngine.GameBase_OnKeyRepeat(null, k, true);
                                    }
                                }
                                else if (GameBase.ActiveDialog != null)
                                {
                                    GameBase.ActiveDialog.HandleKey(k);
                                }
                                else if (!thisBlockKey)
                                {
                                    KeyboardHandler.DoKeyPressed(k);
                                }
                            }
                        }
                    }

                    pressedKeys = newKeys;

                    repeatTickCurrent += GameBase.ElapsedMilliseconds;

                    if (repeatTickCurrent >= repeatTickRate)
                    {
                        repeatTickCurrent -= repeatTickRate;

                        if (pressedKeys != null && !keyboard.IsKeyDown(Keys.Scroll))
                        {
                            foreach (Keys k in newKeys)
                            {
                                bool bFound = false;

                                foreach (Keys k2 in pressedKeys)
                                {
                                    if (k == k2)
                                    {
                                        bFound = true;
                                        break;
                                    }
                                }

                                if (ChatEngine.IsVisible)
                                {
                                    ChatEngine.GameBase_OnKeyRepeat(null, k, false);
                                }
                                else if (GameBase.ActiveDialog == null && bFound && GameBase.FadeState == FadeStates.Idle &&
                                         !thisBlockKey)
                                {
                                    KeyboardHandler.DoOnKeyRepeat(k);
                                }
                            }
                        }
                        if (leftButton == ButtonState.Pressed &&
                            MouseHandler.MouseDown && GameBase.FadeState != FadeStates.FadeOut)
                        {
                            MouseHandler.DoOnClickRepeat();
                        }
                    }

                    MouseHandler.actualClickRegistered = (MouseHandler.mouseLeft == ButtonState.Pressed &&
                                                          mouseLeftActualPrev != ButtonState.Pressed) || (MouseHandler.mouseRight == ButtonState.Pressed &&
                                                                                                          mouseRightActualPrev != ButtonState.Pressed);

                    if (leftButtonLast != leftButton || rightButtonLast != rightButton)
                    {
                        MouseHandler.LastButton2 = MouseHandler.LastButton;
                        MouseHandler.LastButton  = MouseHandler.MouseDownButton;

                        MouseHandler.MouseDownButton = MouseButtons.None;
                        if (leftButton == ButtonState.Pressed)
                        {
                            MouseHandler.MouseDownButton |= MouseButtons.Left;
                        }
                        if (rightButton == ButtonState.Pressed)
                        {
                            MouseHandler.MouseDownButton |= MouseButtons.Right;
                        }
                    }

                    //We don't have a replay click, so lets check for physical mouse clicks.
                    //In the case that there is a replay and actual click the same frame, doOnClick will be called only once (above).
                    if (MouseHandler.actualClickRegistered && ReplayMode && GameBase.FadeState != FadeStates.FadeOut)
                    {
                        bool old = MouseHandler.gamePressedRegistered;
                        MouseHandler.gamePressedRegistered = false;
                        MouseHandler.DoOnClick();
                        MouseHandler.gamePressedRegistered = old;
                    }

                    leftCond   = leftButton == ButtonState.Pressed && leftButtonLast != leftButton;
                    rightCond  = rightButton == ButtonState.Pressed && rightButtonLast != rightButton;
                    middleCond = MouseHandler.mouseMiddle == ButtonState.Pressed &&
                                 mouseMiddlePrev != MouseHandler.mouseMiddle;

                    MouseHandler.gameClickRegistered = false;

                    if (leftCond || rightCond || middleCond)
                    {
                        if (!middleCond)
                        {
                            if (SkinManager.Current.CursorExpand)
                            {
                                spriteCursor.Transformations.RemoveAll(
                                    delegate(Transformation tr) { return(tr.Type != TransformationType.Rotation); });
                                Transformation t =
                                    new Transformation(TransformationType.Scale, 1, 1.3F, GameBase.Time,
                                                       GameBase.Time + 100);
                                t.Easing = EasingTypes.In;
                                spriteCursor.Transformations.Add(t);
                            }
                            MouseHandler.clickPosition = new Vector2(mouse.X, mouse.Y);

                            MouseHandler.gamePressedRegistered = true;
                            MouseHandler.gameClickRegistered   = true;

                            if (doubleClickTime > 0 && GameBase.FadeState != FadeStates.FadeOut)
                            {
                                MouseHandler.DoOnDoubleClick();
                            }
                        }

                        if (GameBase.FadeState != FadeStates.FadeOut)
                        {
                            MouseHandler.DoOnClick();
                            repeatTickCurrent = 0;
                            doubleClickTime   = 250;
                        }
                    }
                    else if (leftButton == ButtonState.Released &&
                             rightButton == ButtonState.Released &&
                             MouseHandler.gamePressedRegistered)
                    {
                        if (SkinManager.Current.CursorExpand)
                        {
                            spriteCursor.Transformations.RemoveAll(
                                delegate(Transformation tr) { return(tr.Type != TransformationType.Rotation); });
                            Transformation t =
                                new Transformation(TransformationType.Scale, spriteCursor.CurrentScale, 1, GameBase.Time,
                                                   GameBase.Time + 100);
                            t.Easing = EasingTypes.In;
                            spriteCursor.Transformations.Add(t);
                        }
                        MouseHandler.gamePressedRegistered = false;
                        MouseHandler.DoOnClickUp();
                    }

                    if (MouseHandler.mouseLeft == ButtonState.Pressed &&
                        GameBase.FadeState != FadeStates.FadeOut)
                    {
                        MouseHandler.MouseDown = true;
                        if (mouse.X != MouseHandler.clickPosition.X ||
                            mouse.Y != MouseHandler.clickPosition.Y)
                        {
                            MouseHandler.DoOnDrag();
                        }
                    }
                    else
                    {
                        MouseHandler.MouseDown = false;
                        if (IsDragging)
                        {
                            MouseHandler.DoOnEndDrag();
                        }
                    }
                }
                else
                {
                    leftButton  = ButtonState.Released;
                    rightButton = ButtonState.Released;
                }


                GameBase.Instance.UpdateChildren();

                leftButtonLast  = leftButton;
                rightButtonLast = rightButton;

                leftButtonLastBool  = leftButton == ButtonState.Pressed;
                rightButtonLastBool = rightButton == ButtonState.Pressed;

                mouseLeftActualPrev  = MouseHandler.mouseLeft;
                mouseRightActualPrev = MouseHandler.mouseRight;
                mouseMiddlePrev      = MouseHandler.mouseMiddle;

                keyboardLast = keyboard;

                thisBlockKey = false;
            } while (ReplayMode && ((ReplayModeFF && loopFrame++ < 1) || (runningSlow && loopFrame++ < 4)));
        }
Пример #33
0
 public ChatService(ChatEngine engine)
 {
     this.engine = engine;
 }
Пример #34
0
        public SocketServer()
        {
            var wssv = new HttpServer(8140);

            GameEngine gameEngine = new GameEngine();
            ChatEngine chatEngine = new ChatEngine();

            wssv.AddWebSocketService<GameService>("/game", () => new GameService(gameEngine));
            wssv.AddWebSocketService<ChatService>("/chat", () => new ChatService(chatEngine));

            wssv.Start();
            Console.ReadKey(true);
            wssv.Stop();
        }