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); } }
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; } } } }
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); }