public CreateObjectRequestEvent(string sInTemplateID, string sTag = "", string sTextureID = "")
 {
     ServerObject            = new MServerObject();
     ServerObject.TemplateID = sInTemplateID;
     ServerObject.Tag        = sTag;
     ServerObject.TextureID  = sTextureID;
 }
Пример #2
0
        private void MMessageBus_ChangeAvatarRequestHandler(object sender, ChangeAvatarEvent e)
        {
            MBuildingBlock bb = MBuildParts.GetBlock(e.TemplateID);

            if (bb == null)
            {
                Console.WriteLine("MSpawnHandler: Missing Template:" + e.TemplateID);
                return;
            }

            MSceneObject mo = (MSceneObject)MScene.ModelRoot.FindModuleByInstanceID(e.UserID);

            if (mo != null)
            {
                MMessageBus.DeleteRequest(this, mo);
            }

            MServerObject m = new MServerObject();

            m.InstanceID = e.UserID;
            m.TemplateID = e.TemplateID;
            m.OwnerID    = e.UserID;
            m.TextureID  = bb.MaterialID;
            m.Name       = Globals.UserAccount.UserName;
            MScene.Camera.CameraOffset = MassiveTools.VectorFromArray(bb.BoneOffset);
            m.Position = Globals.UserAccount.CurrentPosition;
            m.Rotation = MassiveTools.ArrayFromQuaterniond(Globals.Avatar.GetRotation());
            Spawn(m);
        }
Пример #3
0
 public void AddObject(MServerObject mo)
 {
     // Insert some data
     using (var cmd = new NpgsqlCommand())
     {
         cmd.Connection  = Connection;
         cmd.CommandText = "INSERT INTO objects (name, data, geom) VALUES (@p, 'wwhat', ST_GeomFromText('POINT(18.060316 -33.432044 22.1)', 4326))";
         cmd.Parameters.AddWithValue("p", "Hello world");
         int Result = cmd.ExecuteNonQuery();
         Console.WriteLine("Add:" + Result);
     }
 }
Пример #4
0
        public MServerObject GetObject(string InstanceID)
        {
            MServerObject mso = new MServerObject();
            //if (Objects.ContainsKey(InstanceID)) return Objects[InstanceID];
            string    sQuery = string.Format("SELECT 1 FROM `objects` WHERE `instanceid`='{0}'", InstanceID);
            DataTable dt     = QueryReader(sQuery);

            DataRow row = dt.Rows[0];

            mso.OwnerID = row.ItemArray[0].ToString();

            return(mso);
        }
Пример #5
0
        private void Network_SpawnHandler(object sender, Massive.Events.ObjectSpawnedEvent e)
        {
            DataTable dt = e.SpawnedObject;

            foreach (DataRow dr in dt.Rows)
            {
                MServerObject mso = MServerObject.UnpackFromDataRow(dt.Columns, dr);
                if (mso == null)
                {
                    continue;
                }
                Spawn(mso);
            }
        }
Пример #6
0
 public bool SetProperty(string UserID, string InstanceID, string PropertyTag)
 {
     if (Objects.ContainsKey(InstanceID))
     {
         MServerObject m = Objects[InstanceID];
         if (m.OwnerID.Equals(UserID))
         {
             m.DateModified = DateTime.Now;
             m.Tag          = PropertyTag;
             WriteToDisk();
             return(true);
         }
     }
     return(false);
 }
Пример #7
0
 public bool SetTexture(string UserID, string InstanceID, string TextureID)
 {
     if (Objects.ContainsKey(InstanceID))
     {
         MServerObject m = Objects[InstanceID];
         if (m.OwnerID.Equals(UserID))
         {
             m.DateModified = DateTime.Now;
             m.TextureID    = TextureID;
             WriteToDisk();
             return(true);
         }
     }
     return(false);
 }
Пример #8
0
 public bool RotateObject(string UserID, string InstanceID, double[] rot)
 {
     if (Objects.ContainsKey(InstanceID))
     {
         MServerObject m = Objects[InstanceID];
         if (m.OwnerID.Equals(UserID))
         {
             m.DateModified = DateTime.Now;
             m.Rotation     = rot;
             //WriteToDisk();
             return(true);
         }
     }
     return(false);
 }
Пример #9
0
        /// <summary>
        /// Prepares an object for inclusion in the scene graph
        /// If the template does not exist, it is created first
        /// </summary>
        /// <param name="m"></param>
        public void Spawn(MServerObject m)
        {
            MSceneObject mo = (MSceneObject)MScene.ModelRoot.FindModuleByInstanceID(m.InstanceID);

            if (mo != null)
            {
                return;       //if the object already exists, never mind
            }
            //check if the object template exists. All user objects must exist as a template first
            MSceneObject mt = (MSceneObject)MScene.TemplateRoot.FindModuleByName(m.TemplateID);

            if (mt == null)
            {
                LoadTemplate(m.TemplateID);
            }

            //if ((m.Name == Globals.UserAccount.UserID) && ( m.OwnerID == Globals.UserAccount.UserID)){
            mo = Helper.Spawn(m,
                              MassiveTools.VectorFromArray(m.Position),
                              MassiveTools.QuaternionFromArray(m.Rotation));
            if (mo == null)
            {
                Console.WriteLine("MSpawnHandler: Template not found:" + m.TemplateID);
            }
            else
            {
                mo.InstanceID = m.InstanceID;
                mo.SetRotation(MassiveTools.QuaternionFromArray(m.Rotation));

                //If the object spawning is our avatar
                if (mo.InstanceID == Globals.UserAccount.UserID)
                {
                    Globals.Avatar.SetSceneObject(mo);
                    MBuildingBlock bb = MBuildParts.GetBlock(mo.TemplateID);
                    MScene.Camera.CameraOffset = MassiveTools.VectorFromArray(bb.BoneOffset);
                    MMessageBus.AvatarChanged(this, Globals.UserAccount.UserID, mo.TemplateID);
                }

                SetMaterial(mo, m.TextureID);

                MMessageBus.Created(this, mo);
            }

            if (mo.OwnerID == Globals.UserAccount.UserID)
            {
                MMessageBus.Select(this, new SelectEvent(mo));
            }
        }
Пример #10
0
        void Add(MBuildingBlock bb)
        {
            LastBuild = bb;
            if (MStateMachine.ZoneLocked == true)
            {
                MMessageBus.Error(this, "Can't build here, zone is locked / other building nearby");
                return;
            }

            Vector3d pos = Globals.Avatar.GetPosition();

            if (bb.TemplateID.Equals(MBuildParts.FOUNDATION01))
            {
                pos += Globals.Avatar.Forward() * 13 - Globals.Avatar.Up() * 1.0;
            }
            else
            {
                pos += Globals.Avatar.Forward() * 4 + Globals.Avatar.Up() * 3.0;
            }

            Quaterniond rot = Globals.LocalUpRotation();

            if (SelectedItem != null)
            {
                rot = SelectedItem.transform.Rotation;
                //prevent smaller items getting lost in the foundation
                if (SelectedItem.TemplateID != MBuildParts.FOUNDATION01)
                {
                    //pos = SelectedItem.transform.Position;
                }
            }

            if (Globals.Network.Connected == true)
            {
                Globals.Network.SpawnRequest(bb.TemplateID, "TEXTURE01", bb.TemplateID, bb.TemplateID, pos, rot);
            }
            else
            {
                MServerObject mso = new MServerObject();
                mso.InstanceID = Helper.GUID();
                mso.OwnerID    = Globals.UserAccount.UserID;
                mso.TextureID  = bb.TextureID;
                mso.TemplateID = bb.TemplateID;
                mso.Position   = MassiveTools.ArrayFromVector(pos);
                mso.Rotation   = MassiveTools.ArrayFromQuaterniond(rot);
                MMessageBus.CreateObjectRequest(this, mso);
            }
        }
Пример #11
0
 //Add or update position of existing object
 public bool AddObject(MServerObject ms)
 {
     //MServerObject ms = new MServerObject();
     if (!Objects.ContainsKey(ms.InstanceID))
     {
         Objects.Add(ms.InstanceID, ms);
         WriteToDisk();
         return(true);
     }
     else
     {
         MServerObject mo = Objects[ms.InstanceID];
         mo.Position = ms.Position;
         mo.Rotation = ms.Rotation;
         WriteToDisk();
     }
     return(false);
 }
Пример #12
0
 public int RemoveObject(string id)
 {
     if (id == null)
     {
         return(0);
     }
     if (Objects.ContainsKey(id))
     {
         MServerObject mo = Objects[id];
         Objects.Remove(id);
         if (mo.StaticStorage == 1)
         {
             return(1);
         }
         else
         {
             return(0);
         }
     }
     return(0);
 }
Пример #13
0
 public CreateObjectRequestEvent(MServerObject newObject)
 {
     ServerObject = newObject;
 }
Пример #14
0
        /**
         * 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);
        }
Пример #15
0
 //Create Objects offline. Does not persist to the Server
 public static void CreateObjectRequest(object sender, MServerObject mso)
 {
     CreateObjectRequestHandler?.Invoke(sender, new CreateObjectRequestEvent(mso));
 }