protected override void OnLoad() { base.OnLoad(); MMW.FindGameComponent <BackgroundScript>().Trans(new Color4(148, 222, 148, 255), 0.25); input = new MenuInputResolver(); input.Up = Key.W; input.Down = Key.S; input.Right = Key.D; input.Left = Key.A; transit = new TransitControl(); transit.LocalLocation = new Vector2(MMW.ClientSize.Width * 2.0f, 0); transit.Size = new Vector2(MMW.ClientSize.Width, MMW.ClientSize.Height); transit.Target = Vector2.Zero; var label = new Label() { Parent = transit, Alignment = ContentAlignment.TopCenter, Text = "WORLD SELECT", Font = new Font("Yu Gothic UI Light", 40.0f), LocalLocation = new Vector2(0.0f, 32.0f), }; Controls.Add(label); var frame = new SelectWorldFrame(transit, MMW.ClientSize.Height - 120 - 100, new Vector2((MMW.ClientSize.Width - 760) * 0.5f, 120)); Controls.Add(frame); foreach (var desc in MMW.GetAsset <UserData>().SignupServers) { frame.AddWorld(desc); } var signupBtn = new Button(frame, "SignUp World", new Vector2(70, MMW.ClientSize.Height - 120 - 100 + 20), new Vector2(140, 32), "click"); Controls.Add(signupBtn); var editBtn = new Button(signupBtn, "Edit", new Vector2(160, 0), new Vector2(140, 32), "click"); editBtn.Enabled = false; Controls.Add(editBtn); var delBtn = new Button(editBtn, "Delete", new Vector2(160, 0), new Vector2(140, 32), "click"); delBtn.Enabled = false; Controls.Add(delBtn); var directBtn = new Button(delBtn, "Direct Connect", new Vector2(160, 0), new Vector2(140, 32), "click"); Controls.Add(directBtn); signupBtn.Clicked += (s, b) => { if (!signupBtn.Enabled) { return; } trans = true; transit.Target = new Vector2(-MMW.ClientSize.Width * 2.0f, 0.0f); GameObject.AddComponent <SignUpServerScript>(); }; editBtn.Clicked += (s, b) => { if (!editBtn.Enabled) { return; } trans = true; transit.Target = new Vector2(-MMW.ClientSize.Width * 2.0f, 0.0f); GameObject.AddComponent <ServerEditScript>(frame.WorldInfo); }; delBtn.Clicked += (s, b) => { if (!delBtn.Enabled) { return; } var res = System.Windows.Forms.MessageBox.Show(System.Windows.Forms.NativeWindow.FromHandle(MMW.Window.WindowInfo.Handle), "よろしいですか?\n(サーバ元のワールドは削除されません)", "ワールドを削除", System.Windows.Forms.MessageBoxButtons.OKCancel); if (res == System.Windows.Forms.DialogResult.OK) { MMW.GetAsset <UserData>().SignupServers.Remove(frame.WorldInfo); frame.RemoveWorld(frame.WorldInfo); frame.WorldInfo = null; editBtn.Enabled = false; delBtn.Enabled = false; } }; directBtn.Clicked += (s, b) => { if (!directBtn.Enabled) { return; } trans = true; transit.Target = new Vector2(-MMW.ClientSize.Width * 2.0f, 0.0f); GameObject.AddComponent <DirectConnectScript>(); }; frame.ServerClicked += (s, e) => { editBtn.Enabled = true; delBtn.Enabled = true; }; frame.ServerSelected += (s, e) => { MMW.GetAsset <Sound>("click").Play(); var desc = frame.WorldInfo; Task.Factory.StartNew(() => { AcceptInput = false; Thread.Sleep(100); var server = NetworkUtil.Connect(desc.HostName, desc.Port); if (server == null) { return; } server.Load(); var info = server.RequestJson <WorldInfo>(DataType.RequestWorldInfo, 1, DataType.ResponseWorldInfo, 3000); if (info == null || info.GameType != 1 || (int)info.Version != (int)MMW.GetAsset <GameData>().Version) { AcceptInput = true; } else { MMW.Invoke(() => { MMW.RegistAsset(server); trans = true; transit.Target = new Vector2(-MMW.ClientSize.Width * 2.0f, 0.0f); GameObject.AddComponent <ServerInfoScript>(info); }); } }); }; }
protected override void OnLoad() { base.OnLoad(); MMW.FindGameComponent <BackgroundScript>().Trans(new Color4(148, 222, 148, 255), 0.25); input = new MenuInputResolver(); input.Up = Key.W; input.Down = Key.S; input.Right = Key.D; input.Left = Key.A; transit = new TransitControl(); transit.LocalLocation = new Vector2(MMW.ClientSize.Width * 2.0f, 0); transit.Size = new Vector2(MMW.ClientSize.Width, MMW.ClientSize.Height); transit.Target = Vector2.Zero; var label = new Label() { Parent = transit, Alignment = ContentAlignment.TopCenter, Text = "DIRECT CONNECT", Font = new Font("Yu Gothic UI Light", 40.0f), LocalLocation = new Vector2(0.0f, 32.0f), }; Controls.Add(label); var labelHost = new Label(transit, "Host", new Vector2(MMW.Width * 0.5f - 160.0f, 300.0f + 2.0f)); Controls.Add(labelHost); var labelPort = new Label(labelHost, "Port", new Vector2(0, 50.0f)); Controls.Add(labelPort); var textBoxHost = new TextBox2(transit, "localhost", new Vector2(MMW.Width * 0.5f - 100.0f, 300.0f), new Vector2(360.0f, 32.0f)); textBoxHost.MaxLength = 64; Controls.Add(textBoxHost); var textBoxPort = new TextBox2(textBoxHost, "39393", new Vector2(0, 50.0f), new Vector2(72.0f, 32.0f)); textBoxPort.MaxLength = 5; Controls.Add(textBoxPort); var backBtn = new Button(transit, "Back", new Vector2(-70.0f - 20.0f, 440.0f), "back"); backBtn.Alignment = ContentAlignment.TopCenter; backBtn.Clicked += (s, e) => { trans = true; transit.Target = new Vector2(-MMW.ClientSize.Width * 2.0f, 0.0f); GameObject.AddComponent <ServerSelectScript>(); }; Controls.Add(backBtn); var labelInfo = new Label(transit, "", new Vector2(0.0f, 500.0f)); labelInfo.Alignment = ContentAlignment.TopCenter; Controls.Add(labelInfo); var connectBtn = new Button(transit, "Connect", new Vector2(70.0f + 20.0f, 440.0f), "click"); connectBtn.Alignment = ContentAlignment.TopCenter; connectBtn.Clicked += (s, e) => { AcceptInput = false; labelInfo.Brush = Brushes.White; labelInfo.Text = "Connecting..."; var host = textBoxHost.Text; var port = int.Parse(textBoxPort.Text); Task.Factory.StartNew(() => { Thread.Sleep(100); var server = NetworkUtil.Connect(host, port); if (server == null) { labelInfo.Brush = Brushes.Red; labelInfo.Text = "Host not Found."; AcceptInput = true; } else { labelInfo.Text = "Downloading World info..."; var info = server.RequestJson <WorldInfo>(DataType.RequestWorldInfo, 1, DataType.ResponseWorldInfo, 5000); if (info.GameType != 1) { labelInfo.Brush = Brushes.Red; labelInfo.Text = "Host not Found."; AcceptInput = true; } else if ((int)info.Version != (int)MMW.GetAsset <GameData>().Version) { labelInfo.Brush = Brushes.Red; labelInfo.Text = $"Wrong version. Host ver.{info.Version:0.0}"; AcceptInput = true; } else { MMW.Invoke(() => { trans = true; transit.Target = new Vector2(-MMW.ClientSize.Width * 2.0f, 0.0f); GameObject.AddComponent <ServerInfoScript>(server, info); }); } } }); }; Controls.Add(connectBtn); }