protected override void OnLoad() { Layer = LayerUI; player = GameObject.GetComponent <CharacterInfo>().Player; chara = GameObject.GetComponent <CharacterInfo>().Character; brush = Brushes.White; }
private void LeavePlayer(WalkerPlayer player) { MMW.Invoke(() => { try { Players.Remove(Players.Find(p => (int)p.Properties["sessionID"] == player.SessionID)); worldData.Players.Remove(player); MMW.BroadcastMessage("log", $"player \"{player.Name}\" left"); } catch (Exception ex) { MMW.BroadcastMessage("log", $"[ERROR] player \"{player.Name}\" leave failed"); } }); }
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}\""); } }); }
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 CharacterTransformResolver(WalkerPlayer player) { this.player = player; }
public static GameObject CreateItem(NwWalkerGameObject wgo, WorldObject obj, WalkerPlayer player, string name, string shader = "Deferred Physical Skin") { if (!obj.Loaded) { obj.Load(); } var sh = MMW.GetAsset <Shader>(shader); foreach (var mat in obj.Materials) { mat.Shader = sh; } var go = new GameObject(name); go.Tags.Add("item"); //go.Layer = GameObject.LayerAfterRender + 1; if (obj.Tags != null) { foreach (var t in obj.Tags) { go.Tags.Add(t); } } // mesh renderer var mr = go.AddComponent <MeshRenderer>(); mr.Mesh = obj.Mesh; mr.Bones = obj.Bones; for (var m = 0; m < mr.Mesh.SubMeshCount; m++) { var matIndex = mr.Mesh.GetMaterialIndex(m); mr.SetMaterial(matIndex, obj.Materials[matIndex], false); } // motion if (obj.Bones != null) { var animator = go.AddComponent <ComputeAnimator>(); animator.Bones = mr.Bones; if (obj.Motions != null) { foreach (var m in obj.Motions) { animator.AddMotion(m.Name, m); } } var ac = go.AddComponent <AnimationController>(); ac.Play("idle"); } // morph if (obj.Morphs != null) { var morpher = go.AddComponent <Morpher>(); foreach (var m in obj.Morphs) { if (m == null) { continue; } morpher.AddMorph(m.Name, m); } } // physics /* * var center = Vector3.Zero; * if (obj.CollisionShape != null) * { * Collider c = null; * if (obj.CollisionShape is CollisionCapsule) * { * var s = obj.CollisionShape as CollisionCapsule; * c = go.AddComponent<CapsuleCollider>(s.Radius, s.Height - s.Radius * 2.0f); * if (!obj.PhysicalMaterial.IsRigidBody) c.Position.Y = s.Height * 0.5f; * center = new Vector3(0.0f, s.Height * 0.5f, 0.0f); * } * else if (obj.CollisionShape is CollisionCylinder) * { * //var s = obj.CollisionShape as CollisionCylinder; * //c = go.AddComponent<CylinderCollider>(s.Radius, s.Height - s.Radius * 2.0f); * //c.Position.Y = s.Height * 0.5f; * } * else if (obj.CollisionShape is CollisionBox) * { * var s = obj.CollisionShape as CollisionBox; * c = go.AddComponent<BoxCollider>(s.HalfExtents); * if (!obj.PhysicalMaterial.IsRigidBody) c.Position.Y = s.HalfExtents.Y; * center = new Vector3(0, s.HalfExtents.Y, 0); * } * else if (obj.CollisionShape is CollisionSphere) * { * var s = obj.CollisionShape as CollisionSphere; * c = go.AddComponent<SphereCollider>(s.Radius); * if (!obj.PhysicalMaterial.IsRigidBody) c.Position.Y = s.Radius; * center = new Vector3(0, s.Radius, 0); * } * * c.CollideGroup = BulletSharp.CollisionFilterGroups.DefaultFilter; * c.CollideMask = BulletSharp.CollisionFilterGroups.SensorTrigger; * } */ /* * if (obj.PhysicalMaterial.IsRigidBody) * { * var rb = go.AddComponent<RigidBody>(); * * rb.CollideGroup = BulletSharp.CollisionFilterGroups.DefaultFilter; * rb.CollideMask = BulletSharp.CollisionFilterGroups.SensorTrigger; * rb.Mass = obj.PhysicalMaterial.Mass; * rb.Friction = obj.PhysicalMaterial.Friction; * rb.RollingFriction = obj.PhysicalMaterial.RollingFriction; * rb.AnisotropicFriction = obj.PhysicalMaterial.AnisotropicFriction; * rb.Restitution = obj.PhysicalMaterial.Restitution; * rb.LinearDamping = obj.PhysicalMaterial.LinearDamping; * rb.AngulerDamping = obj.PhysicalMaterial.AngulerDamping; * * rb.FreezePosition = obj.PhysicalMaterial.FreezePosition; * rb.FreezeRotation = obj.PhysicalMaterial.FreezeRotation; * rb.DisableDeactivation = obj.PhysicalMaterial.DisableDeactivation; * rb.Kinematic = obj.PhysicalMaterial.Kinematic; * * rb.CenterOfMass = center; * * go.Transform.Position = center; * } */ // sound if (obj.Sounds != null) { var sc = go.AddComponent <SoundController>(); foreach (var s in obj.Sounds) { sc.Sounds.Add(s.Name, s.Clone()); } } go.AddComponent <WalkerObjectInfo>(obj); // scripts if (obj.Scripts != null) { var pl = MMW.FindGameComponent <WalkerScript>().Players.Find(p => (string)p.Properties["userID"] == player.UserID); var ws = pl.GetComponent <WalkerGameObjectScript>().Script; var wr = MMW.GetAsset <WorldResources>(); foreach (var asm in obj.Scripts) { var scr = WorldResources.CreateScript(asm); scr.ParentScript = ws; scr.ScriptHash = wr.GetHash(asm); scr.HostUserID = wgo.UserID; scr.IsHost = MMW.GetAsset <UserData>().UserID == wgo.UserID; go.AddComponent <WalkerGameObjectScript>(go, scr, null); } } return(go); }
public CharacterInfo(Assets.Character ch, WalkerPlayer pl) { Character = ch; Player = pl; }
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)); }