コード例 #1
0
        void OpenDoor()
        {
            if (DoorIsOpen == true)
            {
                return;
            }
            if (!CanIOpen())
            {
                return;
            }
            DoorIsOpen = true;
            Quaterniond TargetRot = OriginalOrientation * new Quaterniond(0, 90 * Math.PI / 180.0, 0);
            MMoveSync   ms        = new MMoveSync(msoParent, msoParent.transform.Position, TargetRot);

            ms.Speed = 0.5;
            msoParent.Add(ms);
            //Globals.Network.PositionRequest(msoParent.InstanceID, msoParent.transform.Position, TargetRot);
            //msoParentPhysics.SetRotation(OriginalOrientation * new Quaterniond(0, 90 * Math.PI / 180.0, 0));
        }
コード例 #2
0
ファイル: MSceneObject.cs プロジェクト: zenithlee/OpenWorld
        public override void CopyTo(MObject m1)
        {
            base.CopyTo(m1);

            MSceneObject mo = (MSceneObject)m1;

            mo.transform.Scale          = transform.Scale;
            mo.transform.RotationOffset = transform.RotationOffset;

            //we don't want to use the template position, since these will be set by the world map
            //mo.transform.Position = transform.Position;
            //mo.transform.Rotation = transform.Rotation;
            mo.SetMaterial(material);
            mo.TemplateID     = TemplateID;
            mo.IsAvatar       = IsAvatar;
            mo.CastsShadow    = CastsShadow;
            mo.BoundingBox    = BoundingBox;
            mo.IndicesLength  = IndicesLength;
            mo.VerticesLength = VerticesLength;
            mo.IsTransparent  = IsTransparent;

            foreach (MObject m in Modules)
            {
                if (m.Type == EType.PhysicsObject)
                {
                    MPhysicsObject p1 = (MPhysicsObject)m;
                    MPhysicsObject p2 = new MPhysicsObject(mo, mo.Name, (float)p1.Mass, p1.Shape, false, p1.CreateScale);
                    p2.Name = p1.Name;
                    p2.SetDamping(p1._rigidBody.LinearDamping, p1._rigidBody.AngularDamping);
                    p2._rigidBody.AngularFactor = p1._rigidBody.AngularFactor;
                    p2._rigidBody.LinearFactor  = p1._rigidBody.LinearFactor;
                    p2._rigidBody.Restitution   = p1._rigidBody.Restitution;
                    p2.SetPosRot(mo.transform.Position, mo.transform.Rotation);
                    //p2.SetPosition(mo.transform.Position);
                    //p2.SetRotation(mo.transform.Rotation);
                    p2.StopAllMotion();
                }

                if (m.Type == EType.PointLight)
                {
                    MPointLight p = new MPointLight(m.Name);
                    MScene.LightRoot.Add(p);
                    m.CopyTo(p);
                    mo.Add(p);
                }

                if (m.Type == EType.Sound)
                {
                    MSound os = (MSound)m;
                    MSound s  = new MSound();
                    os.CopyTo(s);
                    s.Error = os.Error;
                    s.Load(os.Filename, mo);
                    mo.Add(s);
                }

                //network objects can only be owned by the user. When the user is offline the network object is dormant
                //if (mo.OwnerID.Equals(Globals.UserAccount.UserID))
                if (m.Type == EType.NetworkObject)
                {
                    MNetworkObject mn = (MNetworkObject)m.FindModuleByType(MObject.EType.NetworkObject);
                    if (mn != null)
                    {
                        mo.Add(mn);
                    }
                }

                if (m.Type == EType.NPCPlayer)
                {
                    MNPC p = new MNPC(mo, m.Name);
                    m.CopyTo(p);
                    mo.Add(p);
                }

                if (m.Type == EType.Door)
                {
                    MDoor d2 = new MDoor(mo);
                    m.CopyTo(d2);
                    mo.Add(d2);
                }
            }
        }
コード例 #3
0
ファイル: Helper.cs プロジェクト: zenithlee/OpenWorld
        /**
         * Creates a copy of an existing object from the TemplateRoot
         * */
        public static MSceneObject Spawn(MServerObject mso,
                                         Vector3d Pos, Quaterniond Rot)
        {
            MSceneObject m = (MSceneObject)MScene.TemplateRoot.FindModuleByInstanceID(mso.TemplateID);

            if (m == null)
            {
                Console.WriteLine("TEMPLATE NOT LOADED INTO MScene.TemplateRoot:" + mso.TemplateID);
                return(null);
            }

            MSceneObject t = null;

            MObject TargetRoot = MScene.ModelRoot;

            if (m.IsTransparent)
            {
                TargetRoot = MScene.Priority2;
            }
            else
            {
                TargetRoot = MScene.Priority1;
            }

            if (m.Type == MObject.EType.PrimitiveCube)
            {
                t = CreateCube(TargetRoot, mso.Name, Pos);
            }
            if (m.Type == MObject.EType.PrimitiveSphere)
            {
                t = CreateSphere(TargetRoot, 2, mso.Name, Pos);
            }
            if (m.Type == MObject.EType.Model)
            {
                t = SpawnModel(TargetRoot, mso.TemplateID, mso.OwnerID, mso.Name, Pos);
            }
            if (m.Type == MObject.EType.AnimatedModel)
            {
                t = SpawnAnimatedModel(TargetRoot, mso.TemplateID, mso.OwnerID, mso.Name, Pos);
                //MAnimatedModel man = (MAnimatedModel)m;
                //man.BoneOffset = MassiveTools.VectorFromArray(t.BoneOffset);
            }

            if (m.Type == MObject.EType.InstanceMesh)
            {
                t = SpawnInstanced(TargetRoot, mso.TemplateID, mso.OwnerID, mso.Name, Pos);
            }

            t.transform.Position = Pos;
            t.transform.Rotation = Rot;

            m.CopyTo(t);
            t.OwnerID = mso.OwnerID;

            t.transform.Position = Pos;
            t.transform.Rotation = Rot;

            t.Tag = mso.Tag;

            MClickHandler ch = (MClickHandler)m.FindModuleByType(MObject.EType.ClickHandler);

            if (ch != null)
            {
                MClickHandler ch2 = new MClickHandler();
                ch2.Clicked       = ch.Clicked;
                ch2.RightClicked  = ch.RightClicked;
                ch2.DoubleClicked = ch.DoubleClicked;
                t.Add(ch2);
            }
            return(t);
        }