Example #1
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);
        }
Example #2
0
        protected override void OnLoad()
        {
            base.OnLoad();

            Layer = LayerUI + 3;

            Task.Factory.StartNew(() =>
            {
                //Thread.Sleep(1500);

                //text = "hello";

                Thread.Sleep(1500);

                text = "hello world";

                Thread.Sleep(3000);

                MMW.Invoke(() =>
                {
                    MMW.DestroyGameObject(GameObject);
                    MMW.Window.CursorVisible = true;

                    var objs = MMW.FindGameObjects(g => true);
                    foreach (var obj in objs)
                    {
                        obj.Enabled = true;
                    }
                });
            });
        }
Example #3
0
 public void OnClear()
 {
     MMW.Invoke(() =>
     {
         MMW.DestroyGameObject(gameObj);
         gameObj = null;
     });
 }
Example #4
0
        public void RemoveGameObject(GameObject go)
        {
            MMW.Invoke(() =>
            {
                try
                {
                    SyncWorldObjects.Remove(go);
                    WorldObjects.Remove(go);
                    if (go != null)
                    {
                        MMW.DestroyGameObject(go);
                    }

                    MMW.BroadcastMessage("log", $"object \"{go.Name}\" removed");
                }
                catch
                {
                }
            });
        }
Example #5
0
        protected override void OnUnload()
        {
            base.OnUnload();

            foreach (var o in SyncWorldObjects.ToArray())
            {
                MMW.DestroyGameObject(o);
            }
            SyncWorldObjects.Clear();

            foreach (var o in WorldObjects.ToArray())
            {
                MMW.DestroyGameObject(o);
            }
            WorldObjects.Clear();

            foreach (var p in Players.ToArray())
            {
                MMW.DestroyGameObject(p);
            }
            Players.Clear();

            MMW.DestroyGameObject(worldGO);
            MMW.DestroyGameObject(hudGO);
            MMW.DestroyGameObject(cameraTarget);

            MMW.DestroyAsset(worldData);
            MMW.DestroyAsset(Resources);
            MMW.DestroyAsset(server);

            MMW.MainCamera.GameObject.RemoveComponent(blur);

            var effs = MMW.MainCamera.GameObject.GetComponents <ImageEffect>();

            foreach (var eff in effs)
            {
                eff.Enabled = false;
            }

            GC.Collect();
        }
Example #6
0
        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);
            }
        }
Example #7
0
        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);

                var prev = tabCtr.SelectedObject;

                if (input.IsRight)
                {
                    tabCtr.NextTab();
                    if (prev != tabCtr.SelectedObject)
                    {
                        MMW.DestroyGameObject(player);
                        player = null;
                    }
                }
                else if (input.IsLeft)
                {
                    tabCtr.PrevTab();
                    if (prev != tabCtr.SelectedObject)
                    {
                        MMW.DestroyGameObject(player);
                        player = null;
                    }
                }
                else if (input.IsDown)
                {
                    tabCtr.NextSelect();
                    if (prev != tabCtr.SelectedObject)
                    {
                        MMW.DestroyGameObject(player);
                        player = null;
                    }
                }
                else if (input.IsUp)
                {
                    tabCtr.PrevSelect();
                    if (prev != tabCtr.SelectedObject)
                    {
                        MMW.DestroyGameObject(player);
                        player = null;
                    }
                }
                else if (input.IsBack)
                {
                    if (player != null)
                    {
                        MMW.DestroyGameObject(player);
                    }
                    trans          = true;
                    transit.Target = new Vector2(-MMW.ClientSize.Width * 2.0f, 0.0f);
                    GameObject.AddComponent <TitleScript>();
                }
                else if (input.IsSelect && player != null)
                {
                    MMW.DestroyGameObject(player);
                    SelectedPlayer = (ImportedObject)tabCtr.SelectedObject;
                    MMW.GetAsset <GameData>().Player = SelectedPlayer;
                    trans          = true;
                    transit.Target = new Vector2(-MMW.ClientSize.Width * 2.0f, 0.0f);
                    GameObject.AddComponent <StageSelectScript>();
                }
            }

            if (trans && transition < 0.01f)
            {
                Destroy();
            }

            if (player == null && tabCtr.SelectedObject != null)
            {
                var path = ((ImportedObject)tabCtr.SelectedObject).Path;

                var go = GameObjectFactory.CreateMeshObject(path, MMW.GetAsset <GameData>().SkinShader);
                //go.Layer = 1;
                go.Transform.Rotate.Y = -2.8f;
                go.UpdateAction      += (s, e) =>
                {
                    //go.Transform.Rotate.Y += (float)e.deltaTime * 0.5f;
                };

                // Test: モーションを取得
                var motions = Array.FindAll(load.PresetObjects, o => o.Type == ImportedObjectType.Motion && o.Property != null);
                if (motions.Length > 0)
                {
                    var animator = go.AddComponent <ComputeAnimator>();
                    var mr       = go.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("secret", 1.0f);
                    animator.SetRate("nekomimi_mikuv2", 1.0f);
                    animator.Frame = 0.0f;
                    go.AddComponent <AnimationController>();
                    //go.UpdateAction += (se, e) =>
                    //{
                    //animator.Frame = MMWMath.Repeat(animator.Frame + ((float)e.deltaTime * 30.0f), 0.0f, 5000.0f);
                    //if (Input.IsKeyDown(Key.Right)) animator.AddRate("nekomimi_mikuv2", (float)e.deltaTime, 0.0f, 1.0f);
                    //if (Input.IsKeyDown(Key.Left)) animator.AddRate("nekomimi_mikuv2", -(float)e.deltaTime, 0.0f, 1.0f);
                    //if (Input.IsKeyDown(Key.Right)) go.Transform.Rotate.Y += (float)e.deltaTime;
                    //if (Input.IsKeyDown(Key.Left)) go.Transform.Rotate.Y -= (float)e.deltaTime;
                    //};
                }

                MMW.RegistGameObject(go);
                player = go;
            }
        }
Example #8
0
        protected override void OnLoad()
        {
            base.OnLoad();

            server = MMW.GetAsset <Server>();

            userData = MMW.GetAsset <UserData>();
            //userData.ArchiveIndex = 6;
            //userData.UserID = "MikuMikuWorldOrg0001";

            MMW.RegistAsset(worldData = new WorldData());

            Resources = new WorldResources(nwWorldData);
            MMW.RegistAsset(Resources);

            // アイテムの整理

            var world = Resources.Worlds.First().Value;

            world.Load();

            var ch = Resources.Characters.First().Value;

            ch.Load();

            MMW.Window.CursorVisible = false;

            worldGO = GameObjectFactory.CreateWorld(world, "world", "Deferred Physical");
            worldGO.AddComponent <CoinSpown>();
            MMW.RegistGameObject(worldGO);

            playerGO = GameObjectFactory.CreatePlayer(ch, "player", ch.Bones != null ? "Deferred Physical Skin" : "Deferred Physical");
            playerGO.Properties["sessionID"] = server.SessionID;
            playerGO.Properties["userID"]    = userData.UserID;
            ch.EyePosition.Z = 0.1f;
            var rb = playerGO.GetComponent <RigidBody>();

            rb.Collide += Rb_Collide;
            rb.Collide += (s, e) =>
            {
                if (e.GameObject.Tags.Contains("coin") && e.GameObject.Tags.Contains("98df1d6abbc7"))
                {
                    e.GameObject.Tags.Remove("coin");
                    e.GameObject.Tags.Remove("98df1d6abbc7");
                    MMW.Invoke(() =>
                    {
                        MMW.DestroyGameObject(e.GameObject);
                        if (e.GameObject.Tags.Contains("cupper coin"))
                        {
                            userData.AddCoin(1);
                        }
                        else if (e.GameObject.Tags.Contains("silver coin"))
                        {
                            userData.AddCoin(5);
                        }
                        else if (e.GameObject.Tags.Contains("gold coin"))
                        {
                            userData.AddCoin(20);
                        }
                    });
                }
            };
            MMW.RegistGameObject(playerGO);
            Players.Add(playerGO);

            cameraTarget = new GameObject("camera target");
            cameraTarget.Transform.Parent   = playerGO.Transform;
            cameraTarget.Transform.Position = new Vector3(0.0f, ch.EyePosition.Y, ch.EyePosition.Z);
            MMW.RegistGameObject(cameraTarget);

            var wp = new WalkerPlayer()
            {
                Name          = userData.UserName,
                SessionID     = server.SessionID,
                ArchiveIndex  = userData.ArchiveIndex,
                CharacterHash = Resources.Characters.First().Key,
                Achivements   = userData.Achivements.ToList(),
                Rank          = userData.Rank,
                LikesCount    = userData.Likes.Count,
                LikedCount    = userData.ReceiveLikes.Count,
                UserID        = userData.UserID,
                Comment       = userData.Comment,
                IsAdmin       = false,
            };

            worldData.Players.Add(wp);

            playerGO.AddComponent <CharacterInfo>(ch, wp);
            playerGO.AddComponent <PlayerMoveController>();
            var cam = playerGO.AddComponent <PlayerCameraController>();

            cam.Target = cameraTarget.Transform;
            playerGO.AddComponent <PlayerRayResolver>();
            playerGO.AddComponent <PlayerHotbarItemResolver>();
            playerGO.AddComponent <UdpSender>();
            playerGO.AddComponent <CharacterPopupResolver>();
            playerGO.AddComponent <CharacterNameResolver>();
            playerGO.AddComponent <DoFResolver>();
            playerGO.AddComponent <WalkerGameObjectScript>(playerGO, new BigHead(), null);

            var env = nwWorldData.Worlds[0].Environments[0];

            MMW.GlobalAmbient = env.Ambient.FromColor4f();
            MMW.DirectionalLight.Intensity = env.DirLight.Intensity;
            MMW.DirectionalLight.Color     = env.DirLight.Color.FromColor4f();
            MMW.DirectionalLight.Direction = env.DirLight.Direction.FromVec3f().Normalized();

            MMW.MainCamera.ShadowMapping = true;
            MMW.MainCamera.GameObject.AddComponent <AudioListener>();
            var effs = MMW.MainCamera.GameObject.GetComponents <ImageEffect>();

            foreach (var eff in effs)
            {
                eff.Enabled = true;
            }

            blur        = MMW.MainCamera.GameObject.AddComponent <Blur>();
            blur.Radius = 0.0f;

            hudGO = new GameObject("hud", "system", "hud");
            //go.Layer = GameObject.LayerUI + 1;
            hudGO.AddComponent <HotBar>();
            hudGO.AddComponent <Aiming>();
            hudGO.AddComponent <CoinResolver>();
            hudGO.AddComponent <ScriptResolver>();
            hudGO.AddComponent <LogResolver>();
            hudGO.AddComponent <ChatResolver>();
            hudGO.AddComponent <PictureChatResolver>();
            hudGO.AddComponent <MenuResolver>();
            hudGO.AddComponent <PublicAchivementResolver>();
            hudGO.AddComponent <LeaveResolver>();
            hudGO.AddComponent <InventiryResolver>();
            MMW.RegistGameObject(hudGO);

            server.BeforeCmds.Add(new CmdAllTransform(this));

            /*
             * foreach (var g in nwWorldData.GameObjects)
             * {
             *  try
             *  {
             *      var wo = Resources.Objects[g.ObjectHash];
             *      if (wo.ItemType == "Put") PutGameObject(g, true);
             *  }
             *  catch { }
             * }
             */

            userData.SessionID     = server.SessionID;
            userData.CharacterHash = Resources.Characters.First().Key;

            server.Disconnected += Server_Disconnected;
            server.SendTcp(Walker.DataType.ResponseReady, Util.SerializeJson(wp));
        }