Пример #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);
        }
Пример #2
0
        public void OnObjectLoaded(NwObject obj)
        {
            var wo = AssetConverter.FromNwObject(obj);

            MMW.Invoke(() =>
            {
                wo.Load();

                var go = CreateGameObject(wo, wo.Name, "Deferred Physical");
                go.AddComponent <CollisionRenderer>();
                MMW.RegistGameObject(go);

                gameObj = go;
            });
        }
Пример #3
0
        public void OnCharacterLoaded(NwCharacter ch)
        {
            var chara = AssetConverter.FromNwCharacter(ch);

            MMW.Invoke(() =>
            {
                chara.Load();

                var go = CreateGameObject(chara, chara.Name, "Deferred Physical");
                go.AddComponent <CollisionRenderer>();
                MMW.RegistGameObject(go);

                gameObj = go;
            });
        }
Пример #4
0
        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);

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

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

            var hw = new GameObject("Hello World");

            hw.AddComponent <HelloWorld>();
            MMW.RegistGameObject(hw);
        }
Пример #5
0
        public void ItemUse(NwWalkerGameObject go, WalkerPlayer player, bool sync)
        {
            MMW.Invoke(() =>
            {
                try
                {
                    if (!Players.Exists(p => (string)p.Properties["userID"] == player.UserID))
                    {
                        return;
                    }

                    var wo = Resources.Objects[go.ObjectHash];
                    if (!wo.Loaded)
                    {
                        wo.Load();
                    }

                    var g = GameObjectFactory.CreateItem(go, wo, player, "item", wo.Bones != null ? "Deferred Physical Skin" : "Deferred Physical");

                    g.Properties["user"]      = player;
                    g.Properties["userID"]    = player.UserID;
                    g.Properties["sessionID"] = player.SessionID;
                    g.Hash             = go.Hash;
                    g.Transform.Parent = Players.Find(p => (string)p.Properties["userID"] == player.UserID).Transform;
                    g.Transform.UpdatePhysicalTransform();

                    MMW.RegistGameObject(g);
                    if (sync)
                    {
                        SyncWorldObjects.Add(g);
                    }
                    else
                    {
                        WorldObjects.Add(g);
                    }
                }
                catch
                {
                    MMW.BroadcastMessage("log", $"[ERROR] failed to use item \"{go.Name}\"");
                }
            });
        }
Пример #6
0
        public void PutGameObject(NwWalkerGameObject go, bool sync)
        {
            MMW.Invoke(() =>
            {
                try
                {
                    var wo = Resources.Objects[go.ObjectHash];
                    if (!wo.Loaded)
                    {
                        wo.Load();
                    }

                    var g  = GameObjectFactory.CreateGameObject(go, wo, wo.Name, wo.Bones != null ? "Deferred Physical Skin" : "Deferred Physical");
                    g.Hash = go.Hash;
                    g.Transform.Position = go.Position.FromVec3f();
                    g.Transform.Rotate   = go.Rotation.FromVec3f();
                    if (go.Scale != null)
                    {
                        g.Transform.Scale = go.Scale.FromVec3f();
                    }
                    g.Transform.UpdatePhysicalTransform();

                    MMW.RegistGameObject(g);
                    if (sync)
                    {
                        SyncWorldObjects.Add(g);
                    }
                    else
                    {
                        WorldObjects.Add(g);
                    }
                }
                catch
                {
                    MMW.BroadcastMessage("log", $"[ERROR] object \"{go.Name}\" entry failed");
                }
            });
        }
Пример #7
0
        private void JoinPlayer(WalkerPlayer player)
        {
            MMW.Invoke(() =>
            {
                try
                {
                    var c = Resources.Characters[player.CharacterHash];
                    if (!c.Loaded)
                    {
                        c.Load();
                    }

                    var ch = GameObjectFactory.CreateCharacter(c, player.Name, c.Bones != null ? "Deferred Physical Skin" : "Deferred Physical");
                    ch.Properties["sessionID"] = player.SessionID;
                    ch.Properties["userID"]    = player.UserID;
                    ch.Properties["user"]      = player;
                    ch.AddComponent <CharacterInfo>(c, player);
                    ch.AddComponent <CharacterTransformResolver>(player);
                    ch.AddComponent <CharacterPopupResolver>();
                    ch.AddComponent <CharacterNameResolver>();
                    ch.Transform.Position = player.Position.FromVec3f();
                    ch.Transform.Rotate   = player.Rotation.FromVec3f();
                    ch.Transform.UpdatePhysicalTransform();

                    MMW.RegistGameObject(ch);
                    Players.Add(ch);
                    worldData.Players.Add(player);

                    MMW.BroadcastMessage("log", $"player \"{player.Name}\" joined");
                }
                catch (Exception ex)
                {
                    MMW.BroadcastMessage("log", $"[ERROR] player \"{player.Name}\" join failed");
                }
            });
        }
Пример #8
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);
            }
        }
Пример #9
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;
            }
        }
Пример #10
0
        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;
            }
        }
Пример #11
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));
        }
Пример #12
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);

                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();
            }
        }