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 + 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; } }); }); }
public void OnClear() { MMW.Invoke(() => { MMW.DestroyGameObject(gameObj); gameObj = null; }); }
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 { } }); }
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(); }
public void Show() { controlDic.Clear(); Shown = true; // shop { var list = new List <Control>(); controlDic.Add("shop", list); var frame = new Frame(null, new Vector2(400, 200), new Vector2(440, MMW.Height - 200 - 100)); list.Add(frame); var labelName = new Label(frame, "Name", ControlDrawer.fontSmallB, new Vector2(20, 10)); list.Add(labelName); var labelPrice = new Label(labelName, "Price", ControlDrawer.fontSmallB, new Vector2(260, 0)); list.Add(labelPrice); var labelBag = new Label(labelPrice, "Bag", ControlDrawer.fontSmallB, new Vector2(100, 0)); list.Add(labelBag); var btnBuy = new Button(null, "Buy", new Vector2(MMW.Width - 160, MMW.Height - 124), new Vector2(60, 24), "click"); btnBuy.Enabled = false; btnBuy.Clicked += (s, e) => { var userData = MMW.GetAsset <UserData>(); btnBuy.Enabled = userData.Coin >= SelectRect.Focused.Price; if (userData.Coin < SelectRect.Focused.Price) { return; } var o = MMW.GetAsset <WorldResources>().Objects[SelectRect.Focused.Hash]; var info = new WalkerItemInfo() { Name = o.Name, Desc = o.Desc, Hash = o.Hash, Type = o.ItemType, Icon = Util.FromBitmap(o.Icon), MaxStack = o.MaxStack, Consume = o.Consume, Price = o.Price, Sync = o.Sync, }; if (userData.AddItem(info, null)) { userData.SubCoin(SelectRect.Focused.Price); MMW.BroadcastMessage("log", $"Bought a \"{info.Name}\""); } else { MMW.BroadcastMessage("log", "Items are full"); } }; list.Add(btnBuy); Control prev = labelName; var first = true; foreach (var o in MMW.GetAsset <WorldResources>().Objects) { if (!o.Value.Purchasable) { continue; } var name = new Label(prev, o.Value.Name, new Vector2(0, 30)); if (first) { name.LocalLocation = new Vector2(0, 40); first = false; } list.Add(name); var price = new Label(name, o.Value.Price.ToString(), new Vector2(260, 0)); list.Add(price); var bag = new Label(price, "0", new Vector2(100, 0)); list.Add(bag); var rect = new SelectRect(name, new Vector2(-12.0f, 1.0f), new Vector2(420.0f, 24)); rect.Hash = o.Key; rect.Price = o.Value.Price; rect.Clicked += (s, e) => { var userData = MMW.GetAsset <UserData>(); btnBuy.Enabled = userData.Coin >= rect.Price; if (!o.Value.Loaded) { o.Value.Load(); } drawObj.Load(o.Value.Mesh, o.Value.Materials); }; list.Add(rect); prev = name; } } // skill { var list = new List <Control>(); controlDic.Add("skill", list); var labelSkill1 = new Label(null, "Skill Point", ControlDrawer.fontSmallB, new Vector2(400, 200)); list.Add(labelSkill1); var labelSkill2 = new Label(null, userData.SkillPoint.ToString(), ControlDrawer.fontSmallB, new Vector2(520, 200)); labelSkill2.Brush = Brushes.LightGreen; list.Add(labelSkill2); var frame = new Frame(null, new Vector2(400, 250), new Vector2(MMW.Width - 400 - 100, MMW.Height - 250 - 100)); list.Add(frame); var labelName = new Label(frame, "Name", ControlDrawer.fontSmallB, new Vector2(20, 10)); list.Add(labelName); } // players { var players = MMW.GetAsset <WorldData>().Players; var id = MMW.GetAsset <UserData>().SessionID; var admin = players.Find(p => p.SessionID == id).IsAdmin; var list = new List <Control>(); var frame = new Frame(null, new Vector2(400, 200), new Vector2(MMW.Width - 400 - 100, MMW.Height - 200 - 100)); list.Add(frame); var labelName = new Label(frame, "Name", ControlDrawer.fontSmallB, new Vector2(20, 10)); list.Add(labelName); var labelRank = new Label(labelName, "Rank", ControlDrawer.fontSmallB, new Vector2(180, 0)); list.Add(labelRank); var labelLiked = new Label(labelRank, "Liked", ControlDrawer.fontSmallB, new Vector2(80, 0)); list.Add(labelLiked); var labelAchivements = new Label(labelLiked, "Achivements", ControlDrawer.fontSmallB, new Vector2(80, 0)); list.Add(labelAchivements); var labelID = new Label(labelAchivements, "ID", ControlDrawer.fontSmallB, new Vector2(150, 0)); list.Add(labelID); var labelBan = new Label(labelID, "Ban", ControlDrawer.fontSmallB, new Vector2(270, 0)); if (admin) { list.Add(labelBan); } Control prev = labelName; bool first = true; foreach (var p in players) { var name = new Label(prev, p.Name, new Vector2(0, 30)); if (first) { name.LocalLocation = new Vector2(0, 40); first = false; } list.Add(name); var rank = new Label(name, p.Rank.ToString(), new Vector2(180, 0)); list.Add(rank); var like = new Label(rank, p.LikedCount.ToString(), new Vector2(80, 0)); list.Add(like); var achivement = new Label(like, p.Achivements.Count.ToString(), new Vector2(80, 0)); list.Add(achivement); var userid = new Label(achivement, p.UserID, new Vector2(150, 0)); list.Add(userid); if (admin && p.SessionID != id) { var ban = new Button(userid, "Ban", new Vector2(270, 0), new Vector2(48, 24), "click"); list.Add(ban); } prev = name; } controlDic.Add("players", list); } // graphics { var list = new List <Control>(); controlDic.Add("graphics", list); } // leave { var list = new List <Control>(); controlDic.Add("leave", list); var label = new Label(null, "Are you sure you want to leave world?", new Vector2(400, 200)); list.Add(label); var btn = new Button(label, "OK", new Vector2(0, 40), "click"); btn.Clicked += (s, e) => { GameObject.SendMessage("close leave window"); var ws = MMW.FindGameComponent <WalkerScript>(); MMW.DestroyGameObject(ws.GameObject); var title = new GameObject("Title", Matrix4.Identity, "title"); MMW.RegistGameObject(title); title.AddComponent <BackgroundScript>(); title.AddComponent <TitleScript>(); MMW.Window.CursorVisible = true; }; list.Add(btn); } }
protected override void Update(double deltaTime) { 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; } }
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)); }