private void Load_LoadCompleted(object sender, object e) { MMW.DestroyGameObjects(g => g.Name == "Background" || g.Name == "Title"); var load = MMW.FindGameComponent <LoadingScript>(); load.LoadCompleted -= Load_LoadCompleted; }
protected override void OnLoad() { Layer = LayerUI + 2; var label = new Label( null, "Disconnected", new Font("Yu Gothic UI", 32.0f), new Vector2((MMW.Width - Drawer.MeasureString("DISCONNECTED", new Font("Yu Gothic UI", 32.0f)).X) / 2.0f, 100.0f)); controls.Add(label); var sw = Drawer.MeasureString("Can't connect to the world. Return to the Title Window.", ControlDrawer.fontSmallB).X; var text = new Label(null, "Can't connect to the world. Return to the Title Window.", new Vector2((MMW.Width - sw) * 0.5f, 200)); text.Font = ControlDrawer.fontSmallB; controls.Add(text); var btnOK = new Button(null, "OK", new Vector2((MMW.Width - sw) * 0.5f, 240), "click"); btnOK.Clicked += (s, e) => { GameObject.SendMessage("close leave window"); var ws = MMW.FindGameComponent <WalkerScript>(); MMW.DestroyGameObject(ws.GameObject); var title = new GameObject("Title", Matrix4.Identity, "title"); MMW.RegistGameObject(title); title.AddComponent <BackgroundScript>(); title.AddComponent <TitleScript>(); MMW.Window.CursorVisible = true; }; controls.Add(btnOK); }
protected override void OnLoad() { base.OnLoad(); Layer = LayerUI; MMW.FindGameComponent <BackgroundScript>().Trans(new OpenTK.Graphics.Color4(148, 212, 222, 255), 0.25); 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; input = new MenuInputResolver(); var label = new Label() { Parent = transit, Alignment = ContentAlignment.TopCenter, Text = "OPTION", Font = new Font("Yu Gothic UI Light", 40.0f), LocalLocation = new Vector2(0.0f, 32.0f), }; controls.Add(label); userData = MMW.GetAsset <UserData>(); var labelName = new Label(transit, "User Name", new Vector2(200.0f, 160.0f)); labelName.Font = Control.DefaultFontB; controls.Add(labelName); var textBoxName = new TextBox2(labelName, userData.UserName, new Vector2(200.0f, 0.0f), new Vector2(300.0f, 32.0f)); textBoxName.MaxLength = 16; textBoxName.TextChanged += (s, e) => { userData.UserName = textBoxName.Text; }; controls.Add(textBoxName); var labelArchive = new Label(transit, "Display Achivement", new Vector2(200.0f, 200.0f)); labelArchive.Font = Control.DefaultFontB; controls.Add(labelArchive); var comboArchive = new ComboBox(labelArchive, new Vector2(200.0f, 0.0f), new Vector2(300.0f, 32.0f)); if (userData.Achivements.Count > 0) { comboArchive.Items = userData.Achivements.ToArray(); comboArchive.SelectedIndex = userData.ArchiveIndex; comboArchive.DisplayMember = "Name"; comboArchive.SelectedIndexChanged += (s, e) => { userData.ArchiveIndex = e; }; } else { comboArchive.Enabled = false; } controls.Add(comboArchive); }
protected override void OnLoad() { base.OnLoad(); SelectedStage = null; input = new MenuInputResolver(); input.Up = Key.W; input.Down = Key.S; input.Right = Key.D; input.Left = Key.A; load = MMW.FindGameComponent <InitLoading>(); if (load.State != InitLoading.LoadingState.Finished) { load.LoadCompleted += Load_LoadCompleted; } 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; tabCtr = new TabControl() { Parent = transit, LocalLocation = new Vector2(100, 164), Size = new Vector2((MMW.ClientSize.Width / 2) - 100 - 64, MMW.ClientSize.Height - 164 - 48), Tabs = new Tab[] { new Tab() { Name = "PRESET", Items = load.PresetStages, }, new Tab() { Name = "FREE", Items = load.FreeStages, }, }, Focus = true, }; label = new Label() { Parent = transit, Alignment = ContentAlignment.TopCenter, Text = "STAGE SELECT", Font = new Font("Yu Gothic UI Light", 40.0f), LocalLocation = new Vector2(0.0f, 32.0f), }; }
public void Show() { controlDic.Clear(); Shown = true; // shop { var list = new List <Control>(); controlDic.Add("shop", list); var frame = new Frame(null, new Vector2(400, 200), new Vector2(440, MMW.Height - 200 - 100)); list.Add(frame); var labelName = new Label(frame, "Name", ControlDrawer.fontSmallB, new Vector2(20, 10)); list.Add(labelName); var labelPrice = new Label(labelName, "Price", ControlDrawer.fontSmallB, new Vector2(260, 0)); list.Add(labelPrice); var labelBag = new Label(labelPrice, "Bag", ControlDrawer.fontSmallB, new Vector2(100, 0)); list.Add(labelBag); var btnBuy = new Button(null, "Buy", new Vector2(MMW.Width - 160, MMW.Height - 124), new Vector2(60, 24), "click"); btnBuy.Enabled = false; btnBuy.Clicked += (s, e) => { var userData = MMW.GetAsset <UserData>(); btnBuy.Enabled = userData.Coin >= SelectRect.Focused.Price; if (userData.Coin < SelectRect.Focused.Price) { return; } var o = MMW.GetAsset <WorldResources>().Objects[SelectRect.Focused.Hash]; var info = new WalkerItemInfo() { Name = o.Name, Desc = o.Desc, Hash = o.Hash, Type = o.ItemType, Icon = Util.FromBitmap(o.Icon), MaxStack = o.MaxStack, Consume = o.Consume, Price = o.Price, Sync = o.Sync, }; if (userData.AddItem(info, null)) { userData.SubCoin(SelectRect.Focused.Price); MMW.BroadcastMessage("log", $"Bought a \"{info.Name}\""); } else { MMW.BroadcastMessage("log", "Items are full"); } }; list.Add(btnBuy); Control prev = labelName; var first = true; foreach (var o in MMW.GetAsset <WorldResources>().Objects) { if (!o.Value.Purchasable) { continue; } var name = new Label(prev, o.Value.Name, new Vector2(0, 30)); if (first) { name.LocalLocation = new Vector2(0, 40); first = false; } list.Add(name); var price = new Label(name, o.Value.Price.ToString(), new Vector2(260, 0)); list.Add(price); var bag = new Label(price, "0", new Vector2(100, 0)); list.Add(bag); var rect = new SelectRect(name, new Vector2(-12.0f, 1.0f), new Vector2(420.0f, 24)); rect.Hash = o.Key; rect.Price = o.Value.Price; rect.Clicked += (s, e) => { var userData = MMW.GetAsset <UserData>(); btnBuy.Enabled = userData.Coin >= rect.Price; if (!o.Value.Loaded) { o.Value.Load(); } drawObj.Load(o.Value.Mesh, o.Value.Materials); }; list.Add(rect); prev = name; } } // skill { var list = new List <Control>(); controlDic.Add("skill", list); var labelSkill1 = new Label(null, "Skill Point", ControlDrawer.fontSmallB, new Vector2(400, 200)); list.Add(labelSkill1); var labelSkill2 = new Label(null, userData.SkillPoint.ToString(), ControlDrawer.fontSmallB, new Vector2(520, 200)); labelSkill2.Brush = Brushes.LightGreen; list.Add(labelSkill2); var frame = new Frame(null, new Vector2(400, 250), new Vector2(MMW.Width - 400 - 100, MMW.Height - 250 - 100)); list.Add(frame); var labelName = new Label(frame, "Name", ControlDrawer.fontSmallB, new Vector2(20, 10)); list.Add(labelName); } // players { var players = MMW.GetAsset <WorldData>().Players; var id = MMW.GetAsset <UserData>().SessionID; var admin = players.Find(p => p.SessionID == id).IsAdmin; var list = new List <Control>(); var frame = new Frame(null, new Vector2(400, 200), new Vector2(MMW.Width - 400 - 100, MMW.Height - 200 - 100)); list.Add(frame); var labelName = new Label(frame, "Name", ControlDrawer.fontSmallB, new Vector2(20, 10)); list.Add(labelName); var labelRank = new Label(labelName, "Rank", ControlDrawer.fontSmallB, new Vector2(180, 0)); list.Add(labelRank); var labelLiked = new Label(labelRank, "Liked", ControlDrawer.fontSmallB, new Vector2(80, 0)); list.Add(labelLiked); var labelAchivements = new Label(labelLiked, "Achivements", ControlDrawer.fontSmallB, new Vector2(80, 0)); list.Add(labelAchivements); var labelID = new Label(labelAchivements, "ID", ControlDrawer.fontSmallB, new Vector2(150, 0)); list.Add(labelID); var labelBan = new Label(labelID, "Ban", ControlDrawer.fontSmallB, new Vector2(270, 0)); if (admin) { list.Add(labelBan); } Control prev = labelName; bool first = true; foreach (var p in players) { var name = new Label(prev, p.Name, new Vector2(0, 30)); if (first) { name.LocalLocation = new Vector2(0, 40); first = false; } list.Add(name); var rank = new Label(name, p.Rank.ToString(), new Vector2(180, 0)); list.Add(rank); var like = new Label(rank, p.LikedCount.ToString(), new Vector2(80, 0)); list.Add(like); var achivement = new Label(like, p.Achivements.Count.ToString(), new Vector2(80, 0)); list.Add(achivement); var userid = new Label(achivement, p.UserID, new Vector2(150, 0)); list.Add(userid); if (admin && p.SessionID != id) { var ban = new Button(userid, "Ban", new Vector2(270, 0), new Vector2(48, 24), "click"); list.Add(ban); } prev = name; } controlDic.Add("players", list); } // graphics { var list = new List <Control>(); controlDic.Add("graphics", list); } // leave { var list = new List <Control>(); controlDic.Add("leave", list); var label = new Label(null, "Are you sure you want to leave world?", new Vector2(400, 200)); list.Add(label); var btn = new Button(label, "OK", new Vector2(0, 40), "click"); btn.Clicked += (s, e) => { GameObject.SendMessage("close leave window"); var ws = MMW.FindGameComponent <WalkerScript>(); MMW.DestroyGameObject(ws.GameObject); var title = new GameObject("Title", Matrix4.Identity, "title"); MMW.RegistGameObject(title); title.AddComponent <BackgroundScript>(); title.AddComponent <TitleScript>(); MMW.Window.CursorVisible = true; }; list.Add(btn); } }
protected override void Update(double deltaTime) { if (Input.IsButtonPressed(OpenTK.Input.MouseButton.Right)) { var idx = userData.ItemSelectIndex; var item = userData.HotbarItems[idx]; if (item == null) { return; } if (!resources.Objects.ContainsKey(item.Info.Hash)) { MMW.BroadcastMessage("log", "item unavailable in this world"); } var scripts = new List <NwWalkerGameObject.NwScriptInfo>(); var objs = MMW.GetAsset <WorldResources>().Objects; foreach (var s in objs[item.Info.Hash].nwObject.Scripts) { scripts.Add(new NwWalkerGameObject.NwScriptInfo() { Hash = s.Hash, Status = null, }); } var obj = new NwWalkerGameObject() { CreateDate = DateTime.Now.ToString(), CreatorName = userData.Name, Hash = Util.CreateHash(12), Name = item.Info.Name, ObjectHash = item.Info.Hash, Position = data.position.ToVec3f(), Rotation = data.rotate.ToVec3f(), Scale = new Vector3f(1.0f, 1.0f, 1.0f), SessionID = userData.SessionID, UserID = userData.UserID, Scripts = scripts.ToArray(), }; if (focusedObj != null && item.Info.Type == "Put") { if (item.Info.Consume) { item.Number--; if (item.Number <= 0) { userData.HotbarItems[idx] = null; } } if (item.Info.Sync) { server.SendTcp(DataType.RequestObjectPut, obj); MMW.BroadcastMessage("log", "sync put item"); } else if (item.Number > 0) { MMW.FindGameComponent <WalkerScript>().PutGameObject(obj, false); MMW.BroadcastMessage("log", "put item"); } } else if (item.Info.Type == "Use") { if (item.Info.Consume) { item.Number--; if (item.Number <= 0) { userData.HotbarItems[idx] = null; } } if (item.Info.Sync) { server.SendTcp(DataType.RequestItemUsed, obj); MMW.BroadcastMessage("log", "sync use item"); } else if (item.Number > 0) { MMW.FindGameComponent <WalkerScript>().ItemUse(obj, GameObject.GetComponent <CharacterInfo>().Player, false); MMW.BroadcastMessage("log", "use item"); } } } else if (Input.IsButtonDown(OpenTK.Input.MouseButton.Right)) { var idx = userData.ItemSelectIndex; var item = userData.HotbarItems[idx]; if (item == null) { return; } if (!resources.Objects.ContainsKey(item.Info.Hash)) { MMW.BroadcastMessage("log", "item unavailable in this world"); } if (item.Info.Type == "Throw") { } } else if (Input.IsKeyPressed(OpenTK.Input.Key.Q)) { var idx = userData.ItemSelectIndex; var item = userData.HotbarItems[idx]; if (item == null) { return; } userData.HotbarItems[idx] = null; } }
//public TitleScript(int modeSelectIndex) //{ // this.modeSelectIndex = modeSelectIndex; //} protected override void OnLoad() { base.OnLoad(); Layer = LayerUI; MMW.FindGameComponent <BackgroundScript>().Trans(new Color4(148, 212, 222, 255), 0.25); transit = new TransitControl(); transit.LocalLocation = new Vector2(0.0f, 0); transit.Size = new Vector2(MMW.ClientSize.Width, MMW.ClientSize.Height); transit.Target = Vector2.Zero; //input = new MenuInputResolver(); //input.Up = Key.W; //input.Down = Key.S; //input.Right = Key.D; //input.Left = Key.A; //texStar = new Texture2D(Resources.star); //texStar.Load(); font = new Font("Yu Gothic UI Light", 20.0f); fontB = new Font("Yu Gothic UI Light", 20.0f, FontStyle.Bold); fontL = new Font("Yu Gothic UI Light", 60.0f); texTitle = Drawer.CreateStringTexture("MIKU MIKU WORLD", fontL); texSubTitle = Drawer.CreateStringTexture("WALKER", fontL); var btnExit = new Button(transit, "Exit", new Vector2(60.0f, MMW.Height - 132.0f), new Vector2(140.0f, 32.0f), "click"); btnExit.Clicked += (s, e) => { MMW.Window.Close(); }; controls.Add(btnExit); var btnSingle = new Button(btnExit, "Single Play", new Vector2(0.0f, -120.0f), new Vector2(140.0f, 32.0f), "click"); btnSingle.Clicked += (s, e) => { }; controls.Add(btnSingle); var btnMulti = new Button(btnExit, "Multi Play", new Vector2(0.0f, -80.0f), new Vector2(140.0f, 32.0f), "click"); btnMulti.Clicked += (s, e) => { trans = true; transit.Target = new Vector2(-MMW.ClientSize.Width * 2.0f, 0.0f); GameObject.AddComponent <ServerSelectScript>(); }; controls.Add(btnMulti); var btnOption = new Button(btnExit, "Option", new Vector2(0.0f, -40.0f), new Vector2(140.0f, 32.0f), "click"); btnOption.Clicked += (s, e) => { trans = true; transit.Target = new Vector2(-MMW.ClientSize.Width * 2.0f, 0.0f); GameObject.AddComponent <OptionScript>(); }; controls.Add(btnOption); /* * var ts = new string[] * { * "SINGLE PLAY", * "MULTI PLAY", * "OPTION", * "EXIT", * }; * texModes = new Texture2D[4]; * for (var i = 0; i < 4; i++) texModes[i] = Drawer.CreateStringTexture(ts[i], fontB); */ soundSelect = MMW.GetAsset <Sound>("select"); soundClick = MMW.GetAsset <Sound>("click"); }
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 EDIT", 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(transit, "Port", new Vector2(MMW.Width * 0.5f - 160.0f, 350.0f + 2.0f)); Controls.Add(labelPort); var textBoxHost = new TextBox2(transit, info.HostName, 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(transit, info.Port.ToString(), new Vector2(MMW.Width * 0.5f - 100.0f, 350.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 connectBtn = new Button(transit, "OK", new Vector2(70.0f + 20.0f, 440.0f), "click"); connectBtn.Alignment = ContentAlignment.TopCenter; connectBtn.Clicked += (s, e) => { info.HostName = textBoxHost.Text; try { info.Port = int.Parse(textBoxPort.Text); } catch { info.Port = 39393; } trans = true; transit.Target = new Vector2(-MMW.ClientSize.Width * 2.0f, 0.0f); GameObject.AddComponent <ServerSelectScript>(); }; Controls.Add(connectBtn); var labelInfo = new Label(transit, "", new Vector2(0.0f, 500.0f)); labelInfo.Alignment = ContentAlignment.TopCenter; Controls.Add(labelInfo); }
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(222, 216, 148, 255), 0.25); SelectedPlayer = null; 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; load = MMW.FindGameComponent <InitLoading>(); tabCtr = new TabControl() { Parent = transit, LocalLocation = new Vector2(100, 164), Size = new Vector2((MMW.ClientSize.Width / 2) - 100 - 64, MMW.ClientSize.Height - 164 - 48), Tabs = new Tab[] { new Tab() { Name = "PRESET", Items = load.PresetCharacters, }, new Tab() { Name = "FREE", Items = load.FreeCharacters, }, }, Focus = true, }; label = new Label() { Parent = transit, Alignment = ContentAlignment.TopCenter, Text = "PLAYER SELECT", Font = new Font("Yu Gothic UI Light", 40.0f), LocalLocation = new Vector2(0.0f, 32.0f), }; MMW.MainCamera.GameObject.Transform.Position = new Vector3(0.6f, 1.1f, -1.7f); //MMW.MainCamera.GameObject.Transform.Position = new Vector3(0.3f, 1.4f, -0.6f); MMW.MainCamera.ShadowMapping = false; MMW.GlobalAmbient = new Color4(0.8f, 0.8f, 0.8f, 0.0f); //MMW.DirectionalLight.Transform.Rotate.Y = (float)Math.PI; MMW.DirectionalLight.Transform.Rotate = new Vector3(-MathHelper.PiOver3, 0.0f, 0.0f); MMW.DirectionalLight.Intensity = 1.0f; MMW.IBLIntensity = 0.0f; if (load.State != InitLoading.LoadingState.Finished) { load.LoadCompleted += Load_LoadCompleted; } }
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 labelTitle = new Label() { Parent = transit, Alignment = ContentAlignment.TopCenter, Text = "WORLD INFO", Font = new Font("Yu Gothic UI Light", 40.0f), LocalLocation = new Vector2(0.0f, 32.0f), }; Controls.Add(labelTitle); var imgWorld = new PictureBox() { Parent = transit, Image = Util.FromBitmapString(Info.WorldImage), LocalLocation = new Vector2(100.0f, 0.0f), Size = new Vector2((MMW.Width * 0.5f) - 200.0f, MMW.Height - 280.0f), Alignment = ContentAlignment.MiddleLeft, SizeMode = SizeMode.Zoom, }; Controls.Add(imgWorld); var labelWorldNameTitle = new Label() { Parent = transit, Text = "World Name", LocalLocation = new Vector2(MMW.Width * 0.5f, 146.0f), Font = new Font("Yu Gothic UI", 14.0f, FontStyle.Bold), }; Controls.Add(labelWorldNameTitle); var textWorldName = new TextBox(transit, Info.WorldName, new Vector2(MMW.Width * 0.5f, 175.0f), new Vector2(MMW.Width * 0.5f - 100.0f, 32.0f)); textWorldName.Readonly = true; Controls.Add(textWorldName); var labelWorldDescTitle = new Label() { Parent = transit, Text = "World Desc", LocalLocation = new Vector2(MMW.Width * 0.5f, 216.0f), Font = new Font("Yu Gothic UI", 14.0f, FontStyle.Bold), }; Controls.Add(labelWorldDescTitle); var textWorldDesc = new TextBox(transit, Info.WorldDesc, new Vector2(MMW.Width * 0.5f, 245.0f), new Vector2(MMW.Width * 0.5f - 100.0f, MMW.Height - 420.0f)); textWorldDesc.Readonly = true; Controls.Add(textWorldDesc); TextBox2 textboxPass = null; if (Info.WorldPass) { var labelPass = new Label(textWorldDesc, "Password", new Vector2(0.0f, MMW.Height - 420.0f + 10.0f)); Controls.Add(labelPass); textboxPass = new TextBox2(labelPass, "", new Vector2(100.0f, 0.0f), new Vector2(200.0f, 32.0f)); Controls.Add(textboxPass); } var btnJoin = new Button(textWorldDesc, "Join", new Vector2(MMW.Width * 0.5f - 200.0f, MMW.Height - 420.0f + 10.0f), new Vector2(100.0f, 32.0f), "click"); Controls.Add(btnJoin); labelInfo = new Label(btnJoin, "", new Vector2(0.0f, 30.0f)); Controls.Add(labelInfo); btnJoin.Clicked += (s, e) => { AcceptInput = false; var loginDesc = new LoginDesc() { UserName = "******", UserColor = new Color4f() { }, }; if (Info.WorldPass) { loginDesc.Password = textboxPass.Text; } //Server.LoginResultReceived += Server_LoginResultReceived; var json = Util.SerializeJson(loginDesc); Server.SendTcp(Walker.DataType.Login, json); //Server.ReceiveTimeout = 5 * 1000; labelInfo.Text = "Logging In..."; labelInfo.Brush = Brushes.White; }; }
public override void OnTcpReceived(int dataType, byte[] dt) { if (dataType != DataType.LoginResult) { return; } var res = -1; Buffer.Read(dt, br => { res = br.ReadInt32(); if (res >= 0) { Server.SessionID = res; } }); if (res >= 0) { var ls = MMW.FindGameComponent <LoadingScript>(); ls.StartLoading((mes) => { MMW.DestroyGameObjects(o => o.Tags.Contains("title")); mes.mes = "Download Data..."; var desc = Server.RequestJson <NwWorldDataDesc>(Walker.DataType.RequestDataDesc, null, Walker.DataType.ResponseDataDesc, 8000); if (desc == null) { return(null); } var data = new NwWorldData(); data.Worlds = new NwWorld[desc.Worlds.Length]; for (var i = 0; i < desc.Worlds.Length; i++) { mes.mes = $"Download World...({i + 1}/{desc.Worlds.Length})"; var world = Server.RequestCompJson <NwWorld>(Walker.DataType.RequestWorld, new NwRequest(desc.Worlds[i].Hash), Walker.DataType.ResponseWorld, 10 * 60 * 1000); if (world == null) { return(null); } world.Hash = desc.Worlds[i].Hash; data.Worlds[i] = world; } data.Characters = new NwCharacter[desc.Characters.Length]; for (var i = 0; i < desc.Characters.Length; i++) { mes.mes = $"Download Character...({i + 1}/{desc.Characters.Length})"; var ch = Server.RequestCompJson <NwCharacter>(Walker.DataType.RequestCharacter, new NwRequest(desc.Characters[i].Hash), Walker.DataType.ResponseCharacter, 3 * 60 * 1000); if (ch == null) { return(null); } ch.Hash = desc.Characters[i].Hash; data.Characters[i] = ch; } data.Objects = new NwObject[desc.Objects.Length]; for (var i = 0; i < desc.Objects.Length; i++) { mes.mes = $"Download Object...({i + 1}/{desc.Objects.Length})"; var obj = Server.RequestCompJson <NwObject>(Walker.DataType.RequestObject, new NwRequest(desc.Objects[i].Hash), Walker.DataType.ResponseObject, 3 * 60 * 1000); if (obj == null) { return(null); } obj.Hash = desc.Objects[i].Hash; data.Objects[i] = obj; } data.GameObjectScripts = new NwGameObjectScript[desc.GameObjectScripts.Length]; for (var i = 0; i < desc.GameObjectScripts.Length; i++) { mes.mes = $"Download Scripts...({i + 1}/{desc.GameObjectScripts.Length})"; var bytes = Server.Request(Walker.DataType.RequestGameObjectScript, new NwRequest(desc.GameObjectScripts[i].Hash), Walker.DataType.ResponseGameObjectScript, 60 * 1000); if (bytes == null) { return(null); } data.GameObjectScripts[i] = new NwGameObjectScript() { Assembly = bytes, Hash = desc.GameObjectScripts[i].Hash, }; } // ゲームオブジェクトを取得 var objects = Server.RequestJson <NwGameObjects>(Walker.DataType.RequestGameObjects, new byte[0], Walker.DataType.ResponseGameObjects, 3 * 60 * 1000); data.GameObjects = objects.GameObjects; mes.mes = "Creating a world..."; Thread.Sleep(10); return(data); }, (arg) => { if (arg == null) { } MMW.RegistAsset(Server); var go = new GameObject("Walker"); go.Tags.Add("walker"); go.Tags.Add("system"); go.AddComponent <WalkerScript>((NwWorldData)arg); MMW.RegistGameObject(go); return(true); }); } else { AcceptInput = true; labelInfo.Text = "Login Failed"; labelInfo.Brush = Brushes.Red; } }
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 = "SIGN UP WORLD", 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(transit, "Port", new Vector2(MMW.Width * 0.5f - 160.0f, 350.0f + 2.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(transit, "39393", new Vector2(MMW.Width * 0.5f - 100.0f, 350.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 connectBtn = new Button(transit, "Sign Up", new Vector2(70.0f + 20.0f, 440.0f), "click"); connectBtn.Alignment = ContentAlignment.TopCenter; connectBtn.Clicked += (s, e) => { var ss = MMW.GetAsset <UserData>().SignupServers; if (!ss.Exists(d => d.HostName == textBoxHost.Text && d.Port == int.Parse(textBoxPort.Text))) { ss.Add(new Walker.WorldInfo() { HostName = textBoxHost.Text, Port = int.Parse(textBoxPort.Text), }); } trans = true; transit.Target = new Vector2(-MMW.ClientSize.Width * 2.0f, 0.0f); GameObject.AddComponent <ServerSelectScript>(); }; Controls.Add(connectBtn); var labelInfo = new Label(transit, "", new Vector2(0.0f, 500.0f)); labelInfo.Alignment = ContentAlignment.TopCenter; Controls.Add(labelInfo); }
protected override void Update(double deltaTime) { base.Update(deltaTime); transition += (trans ? -1.0f : 1.0f) * (float)deltaTime * 5.0f; transition = MMWMath.Saturate(transition); transit.Update(deltaTime); if (AcceptInput && !trans) { input.Update(deltaTime); if (input.IsRight) { tabCtr.NextTab(); } else if (input.IsLeft) { tabCtr.PrevTab(); } else if (input.IsDown) { tabCtr.NextSelect(); } else if (input.IsUp) { tabCtr.PrevSelect(); } else if (input.IsBack) { trans = true; transit.Target = new Vector2(-MMW.ClientSize.Width * 2.0f, 0.0f); GameObject.AddComponent <PlayerSelectScript>(); } else if (input.IsSelect && tabCtr.SelectedObject != null) { SelectedStage = (ImportedObject)tabCtr.SelectedObject; MMW.GetAsset <GameData>().Stage = SelectedStage; trans = true; transit.Target = new Vector2(-MMW.ClientSize.Width * 2.0f, 0.0f); var loadScript = MMW.FindGameComponent <LoadingScript>(); loadScript.StartLoading(null, (args) => { var data = MMW.GetAsset <GameData>(); // プレイヤ var player = GameObjectFactory.CreateMeshObject(data.Player.Path, data.SkinShader); //player.Layer = 20; player.AddComponent <SetNameScript>(); player.Tags.Add("player"); var motions = Array.FindAll(load.PresetObjects, o => o.Type == ImportedObjectType.Motion && o.Property != null); if (motions.Length > 0) { var animator = player.AddComponent <ComputeAnimator>(); var mr = player.GetComponent <MeshRenderer>(); animator.Bones = mr.Bones; foreach (var m in motions) { var impo = MMW.GetSupportedImporter(m.Path); var mo = impo.Import(m.Path, Importers.ImportType.Full)[0]; animator.AddMotion(mo.Name, mo.Motions[0]); } animator.SetRate("nekomimi_mikuv2", 1.0f); player.AddComponent <AnimationController>(); } // テストライト { var pl = player.AddComponent <PointLight>(); pl.Intensity = 1.0f; pl.Radius = 4.0f; pl.Color = Color4.White; } { var c = player.AddComponent <CapsuleCollider>(0.3f, 1.0f); c.Position.Y = 0.8f; var rb = player.AddComponent <RigidBody>(); rb.Mass = 50.0f; rb.FreezeRotation = true; rb.DisableDeactivation = true; rb.LinearDamping = 0.3f; rb.LinearVelocityLimitXZ = 2.0f; rb.Friction = 0.95f; player.UpdateAction += (s, ev) => { player.Transform.Rotate.Y += Input.MouseDelta.X * 0.0025f; MMW.MainCamera.Transform.Rotate.X += Input.MouseDelta.Y * 0.0025f; MMW.MainCamera.Transform.Rotate.X = MathHelper.Clamp(MMW.MainCamera.Transform.Rotate.X, -1.0f, 1.0f); var front = player.Transform.WorldDirectionZ; var left = player.Transform.WorldDirectionX; var speed = (float)ev.deltaTime * 2.0f; var deltaDir = Vector3.Zero; if (Input.IsKeyDown(Key.W)) { deltaDir += front; } if (Input.IsKeyDown(Key.S)) { deltaDir -= front; } if (Input.IsKeyDown(Key.A)) { deltaDir += left; } if (Input.IsKeyDown(Key.D)) { deltaDir -= left; } if (deltaDir != Vector3.Zero) { deltaDir.Normalize(); //rb.ApplyImpulse(deltaDir * speed * 80.0f); player.Transform.Position += deltaDir * speed; } if (Input.IsKeyPressed(Key.Space)) { rb.ApplyImpulse(Vector3.UnitY * 36.0f); } player.Transform.UpdatePhysicalTransform(); var cam = MMW.MainCamera; var pos = cam.Transform.WorldPosition; //var vel = (cam.Transform.Position - prevPos) * (float)deltaTime; var dirv = cam.Transform.WorldDirectionZ; var ori = new float[] { dirv.X, dirv.Y, dirv.Z, cam.Up.X, cam.Up.Y, cam.Up.Z }; AL.Listener(OpenTK.Audio.OpenAL.ALListener3f.Position, ref pos); //AL.Listener(OpenTK.Audio.OpenAL.ALListener3f.Velocity, ref vel); AL.Listener(OpenTK.Audio.OpenAL.ALListenerfv.Orientation, ref ori); }; MMW.MainCamera.ShadowMapping = true; MMW.MainCamera.Transform.Parent = player.Transform; MMW.MainCamera.GameObject.UpdateAction += (s, ev) => { if (Input.IsKeyDown(Key.ShiftLeft)) { MMW.MainCamera.Transform.Position = new Vector3(-0.5f, 1.5f, -0.5f); } else { MMW.MainCamera.Transform.Position = new Vector3(0.0f, 1.5f, -1.3f); } //MMW.DirectionalLight.Transform.Rotate.Y += (float)ev.deltaTime * 0.01f; }; } // ステージ var stage = GameObjectFactory.CreateStage(data.Stage.Path, data.Shader); stage.Tags.Add("stage"); { var sCol = stage.GetComponent <PhysicalGameComponent>(); sCol.Collide += SCol_Collide; } MMW.RegistGameObject(player); MMW.RegistGameObject(stage); for (var i = 0; i < 1; i++) { var tsts = GameObjectFactory.CreateMeshObject(data.Player.Path, data.SkinShader); tsts.Tags.Add("test"); //tsts.Layer = 20; tsts.AddComponent <SetNameScript>(); tsts.Transform.Position.Z = (i + 1) * 1.0f; var c = tsts.AddComponent <CapsuleCollider>(0.3f, 1.0f); c.Position.Y = 0.8f; var rb = tsts.AddComponent <RigidBody>(); rb.Mass = 50.0f; rb.FreezeRotation = true; rb.DisableDeactivation = true; rb.LinearDamping = 0.3f; var animator = tsts.AddComponent <ComputeAnimator>(); var mr = tsts.GetComponent <MeshRenderer>(); animator.Bones = mr.Bones; foreach (var m in motions) { var impo = MMW.GetSupportedImporter(m.Path); var mo = impo.Import(m.Path, Importers.ImportType.Full)[0]; animator.AddMotion(mo.Name, mo.Motions[0]); } animator.SetRate("nekomimi_mikuv2", 1.0f); var s = i + 1; var ac = tsts.AddComponent <AnimationController>(); ac.Speed = i * 0.25; var sound = new Sound("C:/Users/yoshihiro/Downloads/dbg2.wav"); sound.Load(); var sc = tsts.AddComponent <SoundController>(); sc.Sounds.Add("test", sound); sc.Play("test", 1.0f); tsts.UpdateAction += (se, e) => { tsts.Transform.Position = new Vector3((float)Math.Sin(MMW.TotalElapsedTime * 4.0) * 4.0f, 0.0f, (float)Math.Cos(MMW.TotalElapsedTime * 4.0) * 4.0f); }; MMW.RegistGameObject(tsts); } var effs = MMW.MainCamera.GameObject.GetComponents <ImageEffect>(); foreach (var eff in effs) { eff.Enabled = true; } MMW.GlobalAmbient = new Color4(0.2f, 0.18f, 0.16f, 0.0f); MMW.DirectionalLight.Intensity = 6.0f; MMW.IBLIntensity = 0.0f; return(true); }); loadScript.LoadCompleted += Load_LoadCompleted; } } if (trans && transition < 0.01f) { Destroy(); } }
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); }
protected override void Update(double deltaTime) { if (time > 0.0) { time -= deltaTime; } if (time < 0.0 && totalCoin < maxCoin) { time += userData.CoinSpownTime; var r = Util.RandomInt(0, 100); var coin = cupperCoin; if (r >= 90) { coin = silverCoin; } else if (r == 99) { coin = goldCoin; } RayTestResult res = null; int test = 5; while (test > 0) { var x = MMWMath.Lerp(bounds.Min.X, bounds.Max.X, Util.RandomFloat()); var z = MMWMath.Lerp(bounds.Min.Z, bounds.Max.Z, Util.RandomFloat()); var pos = new Vector4(x, 0.0f, z, 1.0f) * Transform.WorldTransform; var rays = Bullet.RayTest(new Vector3(pos.X, 100.0f, pos.Z), new Vector3(pos.X, -50.0f, pos.Z)); if (rays.Count > 0 && rays[0].GameObject.Tags.Contains("world")) { res = rays[0]; break; } test--; } if (res != null) { var go = new NwWalkerGameObject() { CreateDate = DateTime.Now.ToString(), CreatorName = MMW.GetAsset <UserData>().UserName, Hash = Util.CreateHash(12), Name = "coin", ObjectHash = coin.Hash, Position = (res.Position + Vector3.UnitY * 0.2f).ToVec3f(), Rotation = new Vector3f(), Scale = new Vector3f(1, 1, 1), SessionID = MMW.GetAsset <UserData>().SessionID, UserID = MMW.GetAsset <UserData>().UserID, }; MMW.FindGameComponent <WalkerScript>().PutGameObject(go, false); totalCoin++; } } }