Example #1
0
        public static void CalculateGravityAtAvatar()
        {
            //Console.WriteLine("Update");

            Vector3d g = GetGravityVector(Globals.Avatar.GetPosition());

            if (Globals.Avatar.Target == null)
            {
                g = GetGravityVector(MassiveTools.VectorFromArray(Globals.UserAccount.CurrentPosition));
            }

            MPhysics.Instance.SetGravity(g);
            Globals.LocalUpVector = -g.Normalized();
            if (double.IsNaN(Globals.LocalUpVector.X))
            {
                if (Globals.Avatar.Target != null)
                {
                    Globals.LocalUpVector = Globals.Avatar.Target.transform.Up();
                }
            }
            if (double.IsNaN(g.X))
            {
                g = new Vector3d(0, -0.8, 0);
            }
            Globals.LocalGravity = g;
        }
Example #2
0
        private void Network_TextureHandler(object sender, Massive.Events.TextureEvent e)
        {
            MSceneObject mo = (MSceneObject)MScene.ModelRoot.FindModuleByInstanceID(e.InstanceID);
            MObject      o  = MScene.MaterialRoot.FindModuleByName(e.TextureID);

            if (o != null && o.Type == MObject.EType.Material)
            {
                MMaterial mat = (MMaterial)o;
                mo.SetMaterial(mat);
            }
            else
            {
                if (MassiveTools.IsURL(e.TextureID))
                {
                    MMaterial mat           = (MMaterial) new MMaterial("URLShader");
                    MShader   DefaultShader = (MShader)MScene.MaterialRoot.FindModuleByName(MShader.DEFAULT_SHADER);
                    mat.AddShader(DefaultShader);
                    mat.ReplaceTexture(Globals.TexturePool.GetTexture(e.TextureID));
                    MScene.MaterialRoot.Add(mat);
                    mo.SetMaterial(mat);
                    mo.material.Setup();
                    MMessageBus.ChangedTexture(this, e.InstanceID, e.TextureID);
                }
                else
                {
                    Console.WriteLine("Object " + e.InstanceID + " was null");
                    MMessageBus.Error(this, "Could not find Material:" + e.TextureID);
                }
            }
        }
Example #3
0
        void SetMaterial(MSceneObject mo, string sMaterialID)
        {
            if (sMaterialID == null)
            {
                sMaterialID = MMaterial.DEFAULT_MATERIAL;
            }
            //MSceneObject mo = (MSceneObject)MScene.ModelRoot.FindModuleByInstanceID(e.InstanceID);
            MObject   o   = MScene.MaterialRoot.FindModuleByName(sMaterialID);
            MMaterial mat = null;

            if (o != null && o.Type == MObject.EType.Material)
            {
                mat = (MMaterial)o;
                if (mat != null)
                {
                    mo.SetMaterial(mat);
                    mat.MaterialID = sMaterialID;
                }
            }

            if (MassiveTools.IsURL(sMaterialID))
            {
                mat = (MMaterial) new MMaterial("URLShader");
                MShader DefaultShader = (MShader)MScene.MaterialRoot.FindModuleByName(MShader.DEFAULT_SHADER);
                mat.AddShader(DefaultShader);
                mat.ReplaceTexture(Globals.TexturePool.GetTexture(sMaterialID));
                mat.MaterialID = sMaterialID;
                MScene.MaterialRoot.Add(mat);
                mo.SetMaterial(mat);
                mo.material.Setup();
            }
        }
Example #4
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);
        }
Example #5
0
        void Go()
        {
            string sText = SiteBox.Text;

            if (string.IsNullOrEmpty(sText))
            {
                return;
            }
            sText        = sText.Trim();
            SiteBox.Text = sText;
            Vector3d dest = Decoder.Decode(sText);

            if (Globals.Network.Connected == true)
            {
                MMessageBus.TeleportRequest(this, dest, Globals.LocalUpRotation());
            }
            else
            {
                MScene.Camera.transform.Position    = dest;
                Globals.UserAccount.CurrentPosition = MassiveTools.ArrayFromVector(dest);
                Globals.Avatar.SetPosition(dest);
                MMessageBus.AvatarMoved(this, Globals.UserAccount.UserID, dest, Quaterniond.Identity);
            }
            MMessageBus.Navigate(this, dest);
        }
Example #6
0
        void DebugBones(Matrix4d viewproj, Matrix4d parentmodel, Matrix4x4[] transforms)
        {
            if (Globals.RenderPass != Globals.eRenderPass.ShadowDepth)
            {
                GL.Clear(ClearBufferMask.DepthBufferBit);

                Vector3d v  = Globals.Avatar.GetPosition();
                Vector3d v1 = Vector3d.Zero;
                Vector3d v2 = Vector3d.Zero;

                // _debug.UserColorCoding = true;
                Matrix4 test = Matrix4.CreateTranslation(0, 0.5f, 0);
                float   f    = 0;
                for (int i = 0; i < m_bone_matrices.Count; i++)
                {
                    //(MBone b in Bones)

                    f += 0.1f;
                    v1 = v2;
                    v2 = MassiveTools.Vector3dFromVector3(
                        TKMatrix(transforms[i]).ExtractTranslation()
                        );

                    Vector3d r1 = v1 + v;
                    Vector3d r2 = v2 + v;
                    // _debug.DrawLine(ref r1, ref r2, i == 0 ? OpenTK.Graphics.Color4.Red : OpenTK.Graphics.Color4.White);
                }

                // _debug.Render(viewproj, parentmodel);
            }
        }
Example #7
0
 void CheckSetupComplete()
 {
     if (Globals.Tasks <= 0)
     {
         MStateMachine.ChangeState(MStateMachine.eStates.Viewing);
         MPlanetHandler.GetUpAt(MassiveTools.VectorFromArray((Globals.UserAccount.CurrentPosition)));
         CreateAvatar();
     }
 }
Example #8
0
        public static Vector3d GetDestination(MSceneObject mo)
        {
            Vector3d dest = Vector3d.Zero;

            string[] tags  = DecodeTag((string)mo.Tag);
            string   sDest = tags[1];

            MassiveTools.VectorFromString(sDest);
            return(dest);
        }
Example #9
0
 void CheckSetupComplete()
 {
     if (Globals.Tasks <= 0)
     {
         MStateMachine.ChangeState(MStateMachine.eStates.Viewing);
         MPlanetHandler.GetUpAt(MassiveTools.VectorFromArray((Globals.UserAccount.CurrentPosition)));
         MMessageBus.GravityStateChanged(this, new BooleanEvent(true));
         CreateAvatar();
     }
 }
Example #10
0
        private void MMessageBus_BookmardAddRequestEvent(object sender, BookmarkEvent e)
        {
            MBookmark b = new MBookmark();

            b.Name     = e.Name;
            b.Position = MassiveTools.ArrayFromVector(e.Position);
            b.Rotation = MassiveTools.ArrayFromQuaterniond(e.Rotation);
            Bookmarks.Add(b);
            Save();
            MMessageBus.BookmarkAdded(this, e);
        }
Example #11
0
 private void MMessageBus_ZoneSelectHandler(object sender, ZoneEvent e)
 {
     if (e.Zone == null)
     {
         Widget.Enabled = false;
     }
     else
     {
         Target         = MassiveTools.Vector3dFromVector3_Server(e.Zone.Position);
         Widget.Enabled = true;
     }
 }
Example #12
0
        private void setGPSToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Button b = (Button)contextMenuStrip1.SourceControl;

            if (b != null)
            {
                MBookmark bm = (MBookmark)b.Tag;
                if (bm != null)
                {
                    MMessageBus.Navigate(this, MassiveTools.VectorFromArray(bm.Position));
                }
            }
        }
Example #13
0
        public void PlaceInstances(Vector3d Anchorpoint)
        {
            //DistanceThreshold = tile.DistanceThreshold;
            this.transform.Position = Anchorpoint;

            Random ran = new Random(1234);

            Matrix4d TreeRotation = Matrix4d.CreateFromQuaternion(Globals.LocalUpRotation());

            int i = 0;

            for (int z = 0; z < 30; z++)
            {
                for (int x = 0; x < 30; x++)
                {
                    if (i >= MaxInstances)
                    {
                        break;
                    }

                    //Vector3d pos = new Vector3d(1000 * ran.NextDouble(), 200 * ran.NextDouble(), 1000 * ran.NextDouble());
                    Vector3d pos = MassiveTools.RandomPointInSphere(Vector3d.Zero, 1000, ran);
                    //Vector3d PlantingPos = planet.GetNearestPointOnSphere(SeedPos + Treepos, 0) - SeedPos;
                    double   scale     = MinSize + ran.NextDouble() * (MaxSize - MinSize);
                    Matrix4d TreeScale = Matrix4d.Scale(scale, scale, scale);

                    Matrix4d TreePosition = Matrix4d.CreateTranslation(pos);
                    TreeRotation = Matrix4d.CreateFromQuaternion(
                        Quaterniond.FromEulerAngles(
                            ran.NextDouble(),
                            ran.NextDouble(),
                            ran.NextDouble()));
                    //find point at y with raycast
                    Matrix4 final = MTransform.GetFloatMatrix(TreeScale * TreeRotation * TreePosition);
                    mats[i] = final;
                    i++;
                }
            }

            TotalInstances = i;

            //null out the remainder
            for (int j = TotalInstances; j < MaxInstances; j++)
            {
                Matrix4 final = Matrix4.Identity;
                mats[j] = final;
            }

            Planted = false;
        }
Example #14
0
        public void Setup(MObject o)
        {
            MSceneObject mo = (MSceneObject)o;

            if (mo == null)
            {
                return;
            }

            InstanceID          = mo.InstanceID;
            Destination         = MTeleporter.GetDestination(mo);
            DestinationBox.Text = MassiveTools.VectorToString(Destination);
            Description         = MTeleporter.GetDescription(mo);
            DescriptionBox.Text = Description;
        }
Example #15
0
        public static Vector3d Find(string s)
        {
            Vector3d pos = Vector3d.Zero;

            lock (ZoneLocker)
            {
                MServerZone zone = Zones.Find(x => x.Name.IndexOf(s, StringComparison.CurrentCultureIgnoreCase) > -1);
                if (zone != null)
                {
                    pos = MassiveTools.Vector3dFromVector3_Server(zone.Position);
                }
            }

            return(pos);
        }
Example #16
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);
            }
        }
Example #17
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));
            }
        }
Example #18
0
        //2 user logs in, gets a userID, ends up here
        private void MMessageBus_LoggedIn(object sender, ChangeDetailsEvent e)
        {
            ParseCmdLine();

            Globals.Network.GetWorld();

            //TODO: Use Server-side home position
            Vector3d Home = MassiveTools.VectorFromArray(Globals.UserAccount.HomePosition);

            //Globals.UserAccount.HomePosition = MassiveTools.ArrayFromVector(Home);

            Globals.Network.SpawnRequest(Globals.UserAccount.AvatarID, MTexture.DEFAULT_TEXTURE, Globals.UserAccount.UserID, "TAG",
                                         Home, Quaterniond.Identity, Globals.UserAccount.UserID, 0, 10);

            Globals.Network.ChangeAvatarRequest(Globals.UserAccount.UserID, Globals.UserAccount.AvatarID);
            //12717655889.4, 146353256822.3, -7581841339.4(18.4096672612293, -33.9328163657347, 0)
            Globals.Network.TeleportRequest(Globals.UserAccount.UserID, Home,
                                            Quaterniond.Identity);
        }
Example #19
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="pt">an x z index to a vertex (0-255)</param>
        /// <returns></returns>
        public Vector3d GetPointOnSurfaceFromGrid(Vector3d grid)
        {
            int index = (int)(grid.Z * z_res + grid.X);

            if (index >= Vertices.Length)
            {
                index = 0;
            }
            if (index < 0)
            {
                index = 0;
            }

            Vector3d pi = MassiveTools.Vector3dFromVector3(Vertices[index]._position);

            //Vector3d zpl = Vector3d.Lerp(Boundary.TL, Boundary.BL, pt.Z);
            //Vector3d zpr = Vector3d.Lerp(Boundary.TR, Boundary.BR, pt.Z);
            //Vector3d p = Vector3d.Lerp(zpr, zpl, pt.X ) - transform.Position;
            return(pi);
        }
Example #20
0
        private void HomeButton_Click(object sender, EventArgs e)
        {
            MServerZone zone = MZoneService.Find("Earth");
            //Vector3d pos = MassiveTools.Vector3dFromVector3_Server(zone.Position);

            //cape town
            Vector3d pos = MassiveTools.VectorFromArray(Globals.UserAccount.HomePosition);

            if (Globals.Network.Connected == true)
            {
                MMessageBus.TeleportRequest(Globals.UserAccount.UserID, pos, Quaterniond.Identity);
            }
            else
            {
                MScene.Camera.transform.Position    = pos;
                Globals.UserAccount.CurrentPosition = MassiveTools.ArrayFromVector(pos);
                Globals.Avatar.SetPosition(pos);
                MMessageBus.AvatarMoved(this, Globals.UserAccount.UserID, pos, Quaterniond.Identity);
            }
        }
Example #21
0
        private void UpdatePropertiesButton_Click(object sender, EventArgs e)
        {
            if (Success == true)
            {
                Globals.Network.PropertyChangeHandler -= Network_PropertyChangeHandler;
                Close();
            }
            if (string.IsNullOrEmpty(DestinationBox.Text))
            {
                return;
            }
            Destination = MassiveTools.VectorFromString(DestinationBox.Text);
            string DestString = Destination.ToString();

            DestString  = DestString.Replace("(", "");
            DestString  = DestString.Replace(")", "");
            DestString  = DestString.Replace(" ", "");
            Description = DescriptionBox.Text;

            Globals.Network.ChangePropertyRequest(InstanceID, MBuildParts.TELEPORT01 + "|" + DestString + "|" + Description);
        }
Example #22
0
        private void AstroBodies_SelectedIndexChanged(object sender, EventArgs e)
        {
            CurrentBody = (MAstroBody)AstroBodies.SelectedItem;
            //string sPath =
            string sPath = CurrentBody.TextureName;

            if (MassiveTools.IsURL(sPath))
            {
                string cache = MassiveTools.GetCachePath(sPath);
                if (!File.Exists(cache))
                {
                    return;
                }
                bmp = Image.FromFile(cache);
                MapBox.BackgroundImage = bmp;
            }
            else
            {
                bmp = Image.FromFile(Path.Combine(MFileSystem.AssetsPath, CurrentBody.TextureName));
                MapBox.BackgroundImage = bmp;
            }
        }
Example #23
0
        void ApplyHeightMap()
        {
            //Random r = new Random(123);
            int    i = 0;
            double d = z_res / (z_res + 1);

            for (int y = 0; y < z_res; y++)
            {
                //for (int x = -x_res / 2; x < x_res / 2; x++)
                for (int x = 0; x < x_res; x++)
                {
                    int      pos    = y * x_res + x;
                    float    height = HeightColorToHeight(x, y);
                    Vector3d normal = MassiveTools.Vector3dFromVector3(Vertices[i]._position) + transform.Position - CurrentBody.Position;
                    normal.Normalize();
                    Vertices[i]._position += MassiveTools.Vector3FromVector3d(normal) * height;
                    Vertices[i]._normal    = MassiveTools.Vector3FromVector3d(normal);
                    heights[x, y]          = height;
                    ///Vertices[i]._position.Y = HeightColorToHeight(x, y);
                    i++;
                }
            }
        }
Example #24
0
        private void But_Click(object sender, EventArgs e)
        {
            Button    b  = (Button)sender;
            MBookmark bm = (MBookmark)b.Tag;

            if (bm != null)
            {
                if (Globals.Network.Connected == true)
                {
                    MMessageBus.TeleportRequest(this,
                                                MassiveTools.VectorFromArray(bm.Position),
                                                MassiveTools.QuaternionFromArray(bm.Rotation));
                }
                else
                {
                    MScene.Camera.transform.Position    = MassiveTools.VectorFromArray(bm.Position);
                    Globals.UserAccount.CurrentPosition = bm.Position;
                    Globals.Avatar.SetPosition(MScene.Camera.transform.Position);
                    MMessageBus.AvatarMoved(this, Globals.UserAccount.UserID,
                                            MScene.Camera.transform.Position,
                                            MassiveTools.QuaternionFromArray(bm.Rotation));
                }
            }
        }
Example #25
0
        //TODO: Make work
        public void Render(Matrix4d viewproj, Matrix4d parentmodel)
        {
            Vector3[] positionArray = new Vector3[lines.Count];
            Vector4[] colorArray    = new Vector4[lines.Count];
            int       i;

            //Random r = new Random();
            if (lines.Count() == 0)
            {
                return;
            }

            for (i = 0; i < lines.Count; i++)
            {
                positionArray[i] = MassiveTools.Vector3FromVector3d(lines[i].Position - Globals.GlobalOffset);
                colorArray[i]    = lines[i].Color;
            }
            lines.Clear();
            vertexCount = positionArray.Length;

            //GL.ClearColor(new Color4(0, 0, 0, 0.5f));
            //GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);

            Matrix4 mvp   = MTransform.GetFloatMatrix(viewproj);
            Matrix4 model = MTransform.GetFloatMatrix(parentmodel);

            GL.UseProgram(shaderProgram);

            int loc = GL.GetUniformLocation(shaderProgram, "mvp");

            GL.UniformMatrix4(loc, false, ref mvp);
            loc = GL.GetUniformLocation(shaderProgram, "model");
            GL.UniformMatrix4(loc, false, ref model);

            lineVertexBuffer = GL.GenBuffer();
            if (Globals.Avatar.Target == null)
            {
                return;
            }
            Vector3 tp = MassiveTools.Vector3FromVector3d(Globals.Avatar.Target.transform.Position);

            //Vector3[] lineVertices = { new Vector3(0, 0, 0), new Vector3((float)r.NextDouble(), .5f, 0.5f) - MassiveTools.FromV3d(Globals.GlobalOffset)};
            //vertexCount = lineVertices.Length;

            GL.BindBuffer(BufferTarget.ArrayBuffer, lineVertexBuffer);
            GL.BufferData(BufferTarget.ArrayBuffer, System.Runtime.InteropServices.Marshal.SizeOf(positionArray[0]) * vertexCount,
                          positionArray, BufferUsageHint.StreamDraw);
            vertexInfo = GL.GenVertexArray();
            GL.BindVertexArray(vertexInfo);
            int locVPosition = GL.GetAttribLocation(shaderProgram, "vPosition");

            GL.EnableVertexAttribArray(locVPosition);
            GL.VertexAttribPointer(locVPosition, 3, VertexAttribPointerType.Float, false,
                                   System.Runtime.InteropServices.Marshal.SizeOf(positionArray[0]), 0);
            //GL.BindVertexArray(0);
            //GL.BindBuffer(BufferTarget.ArrayBuffer, 0);
            //GL.UseProgram(0);
            //GL.ClearColor(Color4.Black);
            GL.Clear(ClearBufferMask.DepthBufferBit);

            int loca = GL.GetUniformLocation(shaderProgram, "mcolor");

            if (UserColorCoding == true)
            {
                for (int ri = 0; ri <= positionArray.Count() - 2; ri += 2)
                {
                    Vector4 v = colorArray[ri];
                    GL.Uniform4(loca, ref v);
                    GL.DrawArrays(PrimitiveType.LineStrip, ri, 2);
                }
            }
            else
            {
                Vector4 v = new Vector4(1, 1, 1, 0.9f);
                GL.Uniform4(loca, ref v);
                GL.DrawArrays(PrimitiveType.LineStrip, 0, positionArray.Count());
            }



            //GL.DrawArrays(PrimitiveType.LineStrip, ri, vertexCount);


            GL.BindVertexArray(0);
            GL.BindBuffer(BufferTarget.ArrayBuffer, 0);
            GL.UseProgram(0);
        }
Example #26
0
 private void MMessageBus_ZoneSelectHandler(object sender, ZoneEvent e)
 {
     NavigationTarget = MassiveTools.Vector3dFromVector3_Server(e.Zone.Position);
 }
Example #27
0
 private void MMessageBus_LoggedIn(object sender, ChangeDetailsEvent e)
 {
     NavigationTarget = MassiveTools.VectorFromArray(Globals.UserAccount.HomePosition);
 }
Example #28
0
        public static MSceneObject LoadTemplate(string TemplateID)
        {
            MBuildingBlock bb = MBuildParts.GetBlock(TemplateID);

            if (bb == null)
            {
                Console.WriteLine("WARNING: MSpawnHandler.LoadTemplate " + TemplateID + " not found in blocks");
                return(null);
            }

            MSceneObject o = null;

            if (bb.Type == MBuildParts.MAnimatedModel)
            {
                o = Helper.CreateAnimatedModel(MScene.TemplateRoot, TemplateID, bb.Model, Vector3d.Zero);
                MAnimatedModel man = (MAnimatedModel)o;
                man.BoneOffset = MassiveTools.VectorFromArray(bb.BoneOffset);
            }

            if (bb.Type == MBuildParts.MModel)
            {
                o = Helper.CreateModel(MScene.TemplateRoot, TemplateID, bb.Model, Vector3d.Zero);
            }

            MMaterial mat = (MMaterial)MScene.MaterialRoot.FindModuleByName(bb.MaterialID);

            if (mat == null)
            {
                Console.WriteLine("MSpawnHandler.LoadTemplate " + bb.MaterialID + " was null");
            }
            o.SetMaterial(mat);

            Vector3d size = MassiveTools.VectorFromArray(bb.Size);

            MPhysicsObject.EShape shape = GetShape(bb.PhysicsShape);
            if (shape != MPhysicsObject.EShape.NULL)
            {
                MPhysicsObject mpo = new MPhysicsObject(o, TemplateID + "_physics", bb.Weight, shape,
                                                        true, size);
                mpo.SetSleep(5);
                mpo.SetFriction(0.5);
                if (shape != MPhysicsObject.EShape.Sphere)
                {
                    mpo.SetAngularFactor(0.0, 0.0, 0.0);
                    mpo.SetDamping(0.5, 0.5);
                    mpo.SetRestitution(0.5);
                }
                else
                {
                    mpo.SetDamping(0.1, 0.1);
                    mpo.SetRestitution(0.8);
                }
            }

            o.TemplateID               = TemplateID;
            o.InstanceID               = TemplateID;
            o.IsTransparent            = bb.IsTransparent;
            o.transform.RotationOffset = Quaterniond.FromEulerAngles(MassiveTools.VectorFromArray(bb.RotationOffset));
            o.Setup();

            AddSubmodules(bb, o);

            return(o);
        }
Example #29
0
        public void InitializePlanets()
        {
            //GravityIndicator = Helper.CreateCube(MScene.AstroRoot, "GravitySphere", Vector3d.Zero);
            //GravityIndicator.transform.Scale = new Vector3d(0.05, 0.1, 0.1);
            //GravityIndicator.OwnerID = "MasterAstronomer";
            //MScene.AstroRoot.Add(GravityIndicator);
            //GravityIndicator.SetMaterial((MMaterial)MScene.MaterialRoot.FindModuleByName(MMaterial.DEFAULT_MATERIAL));
            CreateShaders();

            for (int i = 0; i < Bodies.Count; i++)
            {
                MAstroBody m = Bodies[i];
                //m.Radius = m.Radius * 0.5;
                if (m.IsTemplate == true)
                {
                    continue;
                }
                m.ListIndex = i;
                Vector3d    pos  = m.Position + new Vector3d(-m.Radius.X, 0, 0) * (m.HasRings == true ? 3.0 : 1.1);
                MServerZone zone = new MServerZone("MASTER_ASTRONOMER", m.Name, "Astronomical",
                                                   MassiveTools.ToVector3_Server(pos));
                zone.Rotation    = MassiveTools.ArrayFromQuaterniond(Quaterniond.Identity);
                zone.Description = m.Description + " \nRadius:" + m.Radius;
                MMessageBus.AddZone(this, zone);
                //Extensions.LookAt(m.Position + m.Radius * 2, m.Position), m.Name));

                MSceneObject mo;
                //planet files contain uvs for mercator
                if (m.HasAtmosphere)
                {
                    CurrentNear = m;
                    mo          = Helper.CreateModel(MScene.AstroRoot, m.Name, @"Models\planets\earth.3ds", Vector3d.Zero);
                    //mo = Helper.CreateSphere(MScene.AstroRoot, 3, "Planet");
                    //mo.transform.Scale = m.Radius * 1.00055;
                    mo.transform.Scale = m.Radius;
                }
                else
                {
                    mo = Helper.CreateModel(MScene.AstroRoot, m.Name, @"Models\planets\planet_sphere2.3ds", Vector3d.Zero);
                    mo.transform.Scale = m.Radius;
                }

                if (m.HasRings)
                {
                    MModel ring = Helper.CreateModel(MScene.Priority2, m.Name + "_rings", @"Models\planets\planet_rings.3ds", Vector3d.Zero);
                    ring.transform.Position = m.Position;
                    ring.transform.Rotation = Quaterniond.FromEulerAngles(0, 0, 5 * Math.PI / 180);
                    ring.transform.Scale    = m.Radius;
                    ring.InstanceID         = m.Name;
                    ring.TemplateID         = m.Name;
                    ring.DistanceThreshold  = m.Radius.X * 12;
                    ring.OwnerID            = "MasterAstronomer";
                    MMaterial ringmat = new MMaterial(m.Name + "_mat");
                    ringmat.AddShader((MShader)MScene.MaterialRoot.FindModuleByName(MShader.DEFAULT_SHADER));
                    MTexture ringtex = Globals.TexturePool.GetTexture(@"Textures\Planets\saturn_rings.png");
                    ringmat.SetDiffuseTexture(ringtex);
                    ring.SetMaterial(ringmat);

                    MPhysicsObject ringpo = new MPhysicsObject(ring, "Physics", 0, MPhysicsObject.EShape.ConcaveMesh, false, m.Radius);
                    ringpo.SetLinearFactor(0, 0, 0);
                    ringpo.SetRestitution(0.5);
                }

                mo.transform.Position = m.Position;
                //mo.transform.Scale = m.Radius * 1.9999;

                mo.InstanceID        = m.Name;
                mo.TemplateID        = m.Name;
                mo.OwnerID           = "MasterAstronomer";
                mo.DistanceThreshold = m.Radius.X * 110002; //distance at which it becomes visible
                //MModel mod = (MModel)mo.FindModuleByType(EType.Model);
                //mod.DistanceThreshold = mo.DistanceThreshold;
                //MMesh met = (MMesh)mod.FindModuleByType(EType.Mesh);
                //if ( met != null ) {
                //met.DistanceThreshold = mo.DistanceThreshold;
                //}
                mo.Tag = m;
                m.Tag  = mo;

                //now that we have a 3d model, apply some progressive textures (will auto-switch with smooth transition in shader)
                MMaterial mat = new MMaterial(m.Name + "_mat");
                mat.AddShader((MShader)MScene.MaterialRoot.FindModuleByName(MShader.DEFAULT_SHADER));
                MTexture tex = Globals.TexturePool.GetTexture(m.TextureName);
                mat.SetDiffuseTexture(tex);
                mo.SetMaterial(mat);
                MTexture tex2 = Globals.TexturePool.GetTexture("Textures\\terrain\\sand01b.jpg");
                mat.SetMultiTexture(tex2);
                MTexture tex3 = Globals.TexturePool.GetTexture("Textures\\terrain\\water.jpg");
                mat.SetNormalMap(tex3);

                double dia = 2.0 * Math.PI * m.Radius.X * 0.0000001;
                //double dia = 1;
                mat.Tex2CoordScale = new Vector2((float)dia, (float)dia);
                mo.SetMaterial(mat);

                MScene.MaterialRoot.Add(mat);

                if (m.HasAtmosphere)
                {
                    if (Settings.DrawTerrains == true)
                    {
                        m.AddDynamicTerrain(); //adds tile based terrain (from e.g. tile service)
                    }

                    //MPhysicsObject po = new MPhysicsObject(mo, "Physics", 0, MPhysicsObject.EShape.ConcaveMesh,
                    //false, m.Radius);
                    MPhysicsObject po = new MPhysicsObject(mo, "Physics", 0, MPhysicsObject.EShape.Sphere,
                                                           false, m.Radius);
                    //po.SetLinearFactor(0, 0, 0);
                    //po.SetRestitution(0.5);
                    //MSphere moc = Helper.CreateSphere(MScene.AstroRoot, 3, m.Name+ "Clouds", Vector3d.Zero);

                    MModel moc = Helper.CreateModel(MScene.AstroRoot, m.Name + "_clouds", @"Models\planets\clouds.3ds", Vector3d.Zero);
                    moc.CastsShadow        = false;
                    moc.transform.Position = m.Position;
                    moc.transform.Scale    = m.Radius;
                    moc.DistanceThreshold  = m.Radius.X * 3;
                    //moc.transform.Scale = m.Radius*2.1;
                    moc.InstanceID = m.Name;
                    moc.TemplateID = m.Name;
                    moc.OwnerID    = "MasterAstronomer";
                    moc.Tag        = m;

                    MMaterial cmat = new MMaterial("CloudMat");
                    cmat.AddShader((MShader)MScene.MaterialRoot.FindModuleByName(MShader.DEFAULT_SHADER));
                    cmat.Opacity = 1;
                    cmat.IsSky   = 1;
                    // = new MTexture("CloudTex");
                    MTexture ctex = Globals.TexturePool.GetTexture(CloudTexURL);
                    ctex.Additive = false;
                    cmat.SetDiffuseTexture(ctex);
                    moc.SetMaterial(cmat);
                    MScene.MaterialRoot.Add(cmat);

                    MModel sky = Helper.CreateModel(MScene.AstroRoot, m.Name + "_sky", @"Models\sky.3ds", Vector3d.Zero);
                    sky.CastsShadow        = false;
                    sky.transform.Position = m.Position;
                    sky.transform.Scale    = m.Radius;
                    //moc.transform.Scale = m.Radius*2.1;
                    sky.InstanceID = m.Name;
                    sky.TemplateID = m.Name;
                    sky.OwnerID    = "MasterAstronomer";
                    sky.Tag        = m;
                    sky.SetMaterial(cmat);
                    sky.DistanceThreshold = m.Radius.X * 4;
                    MObjectAnimation ani = new MObjectAnimation();
                    ani.AngleOffset = Quaterniond.FromEulerAngles(0, 0.002, 0);
                    ani.Speed       = 1;
                    sky.Add(ani);

                    sky.SetMaterial(MSkyMaterial);

                    /*MMaterial csky = new MMaterial("Skymat");
                     * csky.AddShader((MShader)MScene.MaterialRoot.FindModuleByName(MShader.DEFAULT_SHADER));
                     * csky.Opacity = 0.5;
                     * csky.IsSky = 1;
                     * // = new MTexture("CloudTex");
                     * MTexture cSkyTex = Globals.TexturePool.GetTexture(OpaqueCloudTexURL);
                     * cSkyTex.Additive = false;
                     * csky.SetDiffuseTexture(cSkyTex);
                     * sky.SetMaterial(csky);
                     * MScene.MaterialRoot.Add(csky);
                     */



                    /* MSphere water = Helper.CreateSphere(MScene.ModelRoot, 5, "Water");
                     * water.transform.Position = m.Position;
                     * water.transform.Scale = m.Radius * 2.00;
                     * MMaterial waterman = new MMaterial("Watermat");
                     * MShader shader = new MShader("watershader");
                     * shader.Load("ocean_vs.glsl", "ocean_fs.glsl");
                     * shader.Bind();
                     * shader.SetInt("diffuseTexture", 0);
                     * shader.SetInt("shadowMap", 1);
                     * waterman.AddShader(shader);
                     * water.SetMaterial(waterman);
                     */
                    //water.SetMaterial((MMaterial)MScene.MaterialRoot.FindModuleByName(MMaterial.DEFAULT_MATERIAL));
                }
                else
                {
                    MPhysicsObject po = new MPhysicsObject(mo, "Physics", 0, MPhysicsObject.EShape.Sphere, false,
                                                           m.Radius * 0.999);
                    po.SetLinearFactor(0, 0, 0);
                    po.SetRestitution(0.5);
                }
                m.Setup();
                //Console.WriteLine("Created:" + mo.Name + ":" + (mo.transform.Position) + " R:" + m.Radius);
            }
        }
Example #30
0
 private void MMessageBus_AvatarMovedEvent(object sender, MoveEvent e)
 {
     Globals.UserAccount.CurrentPosition = MassiveTools.ArrayFromVector(Globals.Avatar.GetPosition());
 }