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;
        }
Beispiel #2
0
        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);
            }
        }
Beispiel #6
0
        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");
        }
Beispiel #8
0
        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);
                        });
                    }
                });
            };
        }
Beispiel #10
0
        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;
            }
        }
Beispiel #13
0
        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();
            }
        }
Beispiel #15
0
        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);
        }
Beispiel #16
0
        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++;
                }
            }
        }