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); }
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; }); }
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; }); }
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); }
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}\""); } }); }
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"); } }); }
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"); } }); }
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; } }
public override void OnTcpReceived(int dataType, byte[] dt) { if (dataType != DataType.LoginResult) { return; } var res = -1; Buffer.Read(dt, br => { res = br.ReadInt32(); if (res >= 0) { Server.SessionID = res; } }); if (res >= 0) { var ls = MMW.FindGameComponent <LoadingScript>(); ls.StartLoading((mes) => { MMW.DestroyGameObjects(o => o.Tags.Contains("title")); mes.mes = "Download Data..."; var desc = Server.RequestJson <NwWorldDataDesc>(Walker.DataType.RequestDataDesc, null, Walker.DataType.ResponseDataDesc, 8000); if (desc == null) { return(null); } var data = new NwWorldData(); data.Worlds = new NwWorld[desc.Worlds.Length]; for (var i = 0; i < desc.Worlds.Length; i++) { mes.mes = $"Download World...({i + 1}/{desc.Worlds.Length})"; var world = Server.RequestCompJson <NwWorld>(Walker.DataType.RequestWorld, new NwRequest(desc.Worlds[i].Hash), Walker.DataType.ResponseWorld, 10 * 60 * 1000); if (world == null) { return(null); } world.Hash = desc.Worlds[i].Hash; data.Worlds[i] = world; } data.Characters = new NwCharacter[desc.Characters.Length]; for (var i = 0; i < desc.Characters.Length; i++) { mes.mes = $"Download Character...({i + 1}/{desc.Characters.Length})"; var ch = Server.RequestCompJson <NwCharacter>(Walker.DataType.RequestCharacter, new NwRequest(desc.Characters[i].Hash), Walker.DataType.ResponseCharacter, 3 * 60 * 1000); if (ch == null) { return(null); } ch.Hash = desc.Characters[i].Hash; data.Characters[i] = ch; } data.Objects = new NwObject[desc.Objects.Length]; for (var i = 0; i < desc.Objects.Length; i++) { mes.mes = $"Download Object...({i + 1}/{desc.Objects.Length})"; var obj = Server.RequestCompJson <NwObject>(Walker.DataType.RequestObject, new NwRequest(desc.Objects[i].Hash), Walker.DataType.ResponseObject, 3 * 60 * 1000); if (obj == null) { return(null); } obj.Hash = desc.Objects[i].Hash; data.Objects[i] = obj; } data.GameObjectScripts = new NwGameObjectScript[desc.GameObjectScripts.Length]; for (var i = 0; i < desc.GameObjectScripts.Length; i++) { mes.mes = $"Download Scripts...({i + 1}/{desc.GameObjectScripts.Length})"; var bytes = Server.Request(Walker.DataType.RequestGameObjectScript, new NwRequest(desc.GameObjectScripts[i].Hash), Walker.DataType.ResponseGameObjectScript, 60 * 1000); if (bytes == null) { return(null); } data.GameObjectScripts[i] = new NwGameObjectScript() { Assembly = bytes, Hash = desc.GameObjectScripts[i].Hash, }; } // ゲームオブジェクトを取得 var objects = Server.RequestJson <NwGameObjects>(Walker.DataType.RequestGameObjects, new byte[0], Walker.DataType.ResponseGameObjects, 3 * 60 * 1000); data.GameObjects = objects.GameObjects; mes.mes = "Creating a world..."; Thread.Sleep(10); return(data); }, (arg) => { if (arg == null) { } MMW.RegistAsset(Server); var go = new GameObject("Walker"); go.Tags.Add("walker"); go.Tags.Add("system"); go.AddComponent <WalkerScript>((NwWorldData)arg); MMW.RegistGameObject(go); return(true); }); } else { AcceptInput = true; labelInfo.Text = "Login Failed"; labelInfo.Brush = Brushes.Red; } }
protected override void OnLoad() { base.OnLoad(); 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)); }
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(); } }