protected override void OnLoad()
        {
            Layer = LayerUI;

            player = GameObject.GetComponent <CharacterInfo>().Player;
            chara  = GameObject.GetComponent <CharacterInfo>().Character;
            brush  = Brushes.White;
        }
Beispiel #2
0
        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");
                }
            });
        }
Beispiel #3
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}\"");
                }
            });
        }
Beispiel #4
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");
                }
            });
        }
Beispiel #5
0
 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;
 }
Beispiel #8
0
        protected override void OnLoad()
        {
            base.OnLoad();

            server = MMW.GetAsset <Server>();

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

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

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

            // アイテムの整理

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

            world.Load();

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

            ch.Load();

            MMW.Window.CursorVisible = false;

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

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

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

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

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

            worldData.Players.Add(wp);

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

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

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

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

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

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

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

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

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

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

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

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