public override void UpdateEditor(GameTime gameTime)
        {
            if (WorldViewer.self.ContainsMouse && !WorldViewer.self.MouseOverForm)
            {
                RayCast(gameTime);
            }

            if (MyCamera.get() == null)
            {
                MyCamera.set(FindObject(typeof(Camera3DObject)));
                if (MyCamera.get() != null)
                {
                    if (EditorSelected)
                    {
                        UpdateSelected();
                    }
                }
                else
                {
                    Camera3DObject camera = new Camera3DObject();
                    ParentLevel.AddObject(camera, this);
                    MyCamera.set(camera);
                    camera.Name.set("EditorCamera");
                }
            }
            if (ParentLevel.LevelForEditing)
            {
                base.UpdateEditor(gameTime);
            }
        }
        private void SetCamera()
        {
            Camera3DObject o = (Camera3DObject)MyCamera.get();

            if (o != null)
            {
                DrawCamera = o.MyCamera;
                DrawCamera.SetSize(WindowSize);
            }
        }
Ejemplo n.º 3
0
        public void Draw3D(Camera3D camera)
        {
            Camera3DObject c = (Camera3DObject)ParentScene.MyCamera.get();

            if (c != null)
            {
                Vector3 Result  = Vector3.Zero;
                bool    Success = false;
                Basic3DObject.GetAveragePosition(ParentScene.SelectedGameObjects, ref Result, ref Success);

                WorldMatrix = c.ScaleMatrix * Matrix.CreateTranslation(Result);
                ColorEffectHolder.SetWorld(WorldMatrix);
                ColorEffectHolder.SetFromCamera(camera);

                foreach (EffectPass pass in ColorEffectHolder.MyEffect.CurrentTechnique.Passes)
                {
                    pass.Apply();


                    Game1.graphics.GraphicsDevice.DrawUserIndexedPrimitives <VertexPositionColor>(
                        PrimitiveType.LineList,
                        PointList,
                        0,             // vertex buffer offset to add to each element of the index buffer
                        PointCount,    // number of vertices in pointList
                        Indicies,      // the index buffer
                        0,             // first index element to read
                        PointCount / 2 // number of primitives to draw
                        );
                }


                ColorSetEffectHolder.Collection["Color"].SetValue(Color.LightGray.ToVector4());
                ColorSetEffectHolder.SetFromCamera(camera);
                ColorSetEffectHolder.SetWorld(WorldMatrix);
                Render.DrawModel(CubeModel, ColorSetEffectHolder.MyEffect);
                Vector3 ScreenPos = WorldViewer.self.MyViewport.Project(Vector3.Zero, camera.ProjectionMatrix, camera.ViewMatrix, WorldMatrix);
                ScreenPositions[3] = new Vector2(ScreenPos.X, ScreenPos.Y);


                Model EndModel = controlMode == ControlMode.Move ? ArrowModel :
                                 controlMode == ControlMode.Rotate ? BallModel : CubeModel;
                for (int i = 0; i < 3; i++)
                {
                    ColorSetEffectHolder.Collection["Color"].SetValue(PointColors[i].ToVector4());
                    ColorSetEffectHolder.SetWorld(ModelMatricies[i] * WorldMatrix);
                    Render.DrawModel(EndModel, ColorSetEffectHolder.MyEffect);
                    ScreenPos          = WorldViewer.self.MyViewport.Project(Vector3.Zero, camera.ProjectionMatrix, camera.ViewMatrix, ModelMatricies[i] * WorldMatrix);
                    ScreenPositions[i] = new Vector2(ScreenPos.X, ScreenPos.Y);
                }
            }
        }
 public override void PlayerQuitEvent(PlayerProfile p)
 {
     foreach (GameObject g in WorldViewerChildren)
     {
         if (g.GetType().Equals(typeof(Camera3DObject)))
         {
             Camera3DObject cam = (Camera3DObject)g;
             if (cam.MyPlayer == p)
             {
                 cam.MyPlayer = null;
                 return;
             }
         }
     }
 }
 public override void PlayerJoinedEvent(PlayerProfile p)
 {
     foreach (GameObject g in WorldViewerChildren)
     {
         if (g.GetType().Equals(typeof(Camera3DObject)))
         {
             Camera3DObject cam = (Camera3DObject)g;
             if (cam.MyPlayer == null && cam.AllowTakeover.get())
             {
                 cam.MyPlayer = p;
                 return;
             }
         }
     }
 }
Ejemplo n.º 6
0
        public override void Update(GameTime gameTime, Window Updater)
        {
            if (CurrentMode != LockMode.None)
            {
                if (MouseManager.mouseState.LeftButton == ButtonState.Pressed)
                {
                    bool    Success = false;
                    Vector3 Result  = Vector3.Zero;
                    Basic3DObject.GetAveragePosition(ParentScene.SelectedGameObjects, ref Result, ref Success);

                    Vector3 Direction = -Vector3.One;
                    if (CurrentMode == LockMode.MoveX)
                    {
                        Direction = new Vector3(1, 0, 0);
                    }
                    if (CurrentMode == LockMode.MoveY)
                    {
                        Direction = new Vector3(0, 1, 0);
                    }
                    if (CurrentMode == LockMode.MoveZ)
                    {
                        Direction = new Vector3(0, 0, 1);
                    }

                    Vector2 MouseMult = Vector2.One;

                    if (CurrentMode != LockMode.MoveAll)
                    {
                        Vector2 CenterScreenPos = ScreenPositions[3];
                        Vector2 ScreenPos2D     = ScreenPositions[CurrentMode == LockMode.MoveX ? 0 : CurrentMode == LockMode.MoveY ? 1 : 2];
                        MouseMult = Vector2.Normalize(ScreenPos2D - CenterScreenPos);
                    }

                    Vector2        MouseForce = new Vector2(MouseManager.MousePosition.X - MouseLockPosition.X, MouseManager.MousePosition.Y - MouseLockPosition.Y) * MouseMult / 1000;
                    Camera3DObject c          = (Camera3DObject)ParentScene.MyCamera.get();
                    float          Value      = (MouseForce.X + MouseForce.Y) * c.ZoomDistance.get();

                    switch (controlMode)
                    {
                    case ControlMode.Move:
                        ParentScene.MoveSelected(Value * Direction);
                        break;

                    case ControlMode.Rotate:
                        ParentScene.RotateSelected(Value * Direction, Result);
                        break;

                    case ControlMode.Scale:
                        ParentScene.ScaleSelected(Vector3.One + Value / 300 * Direction, Result);
                        break;
                    }
                }
                else
                {
                    Game1.self.IsMouseVisible = true;
                    CurrentMode = LockMode.None;
                }
                Mouse.SetPosition((int)MouseLockPosition.X, (int)MouseLockPosition.Y);
            }

            base.Update(gameTime, Updater);
        }
        public override void Update(GameTime gameTime, Window Updater)
        {
            if (ParentScene.MyCamera.get() != null)
            {
                editorCamera = (Camera3DObject)ParentScene.MyCamera.get();
            }

            if (Updater.Size.X != TopRightCorner.X)
            {
                TopRightCorner.X = Updater.Size.X;
                CreateForms(TopRightCorner);
            }

            else if (CurrentMode != LockMode.None)
            {
                if (MouseManager.mouseState.LeftButton == ButtonState.Pressed)
                {
                    if (CurrentMode == LockMode.Scale)
                    {
                        editorCamera.ZoomDistance.add(((MouseManager.MousePosition - MouseLockPosition).X + (MouseManager.MousePosition - MouseLockPosition).Y) * ZoomLock / 1000);
                    }
                    if (CurrentMode == LockMode.Rotate)
                    {
                        editorCamera.Rotation.add(-new Vector3(MathHelper.ToRadians(MouseManager.MousePosition.Y - MouseLockPosition.Y), MathHelper.ToRadians(MouseManager.MousePosition.X - MouseLockPosition.X), 0) / 2.5f * 25);
                    }
                    if (CurrentMode == LockMode.MoveX || CurrentMode == LockMode.MoveY || CurrentMode == LockMode.MoveZ)
                    {
                        Vector3 Direction = Vector3.Zero;
                        if (CurrentMode == LockMode.MoveX)
                        {
                            Direction = new Vector3(1, 0, 0);
                        }
                        if (CurrentMode == LockMode.MoveY)
                        {
                            Direction = new Vector3(0, 1, 0);
                        }
                        if (CurrentMode == LockMode.MoveZ)
                        {
                            Direction = new Vector3(0, 0, 1);
                        }

                        Vector3 CenterScreenPos3D = WorldViewer.self.MyViewport.Project(editorCamera.Position.get(), editorCamera.MyCamera.ProjectionMatrix, editorCamera.MyCamera.ViewMatrix, Matrix.Identity);
                        Vector2 CenterScreenPos   = new Vector2(CenterScreenPos3D.X, CenterScreenPos3D.Y);
                        Vector3 ProjectedPosition = Direction + editorCamera.Position.get();
                        Vector3 ScreenPos3D       = WorldViewer.self.MyViewport.Project(ProjectedPosition, editorCamera.MyCamera.ProjectionMatrix, editorCamera.MyCamera.ViewMatrix, Matrix.Identity);
                        Vector2 ScreenPos2D       = new Vector2(ScreenPos3D.X, ScreenPos3D.Y);
                        Vector2 MouseMult         = Vector2.Normalize(ScreenPos2D - CenterScreenPos);
                        Vector2 MouseForce        = new Vector2(MouseManager.MousePosition.X - MouseLockPosition.X, MouseManager.MousePosition.Y - MouseLockPosition.Y) * MouseMult / 1000;

                        float Value = (MouseForce.X + MouseForce.Y) * ZoomLock;

                        if (CurrentMode == LockMode.MoveX)
                        {
                            editorCamera.Position.addX(Value);
                        }
                        if (CurrentMode == LockMode.MoveY)
                        {
                            editorCamera.Position.addY(Value);
                        }
                        if (CurrentMode == LockMode.MoveZ)
                        {
                            editorCamera.Position.addZ(Value);
                        }
                    }
                    Mouse.SetPosition((int)MouseLockPosition.X, (int)MouseLockPosition.Y);

                    Updater.NeedsToRedraw = true;
                }
                else
                {
                    CurrentMode = LockMode.None;
                    Game1.self.IsMouseVisible = true;
                }
            }

            base.Update(gameTime, Updater);
        }