public void Move(CameraMove move, float p) { }
public void Move(CameraMove camera_move, float p) { p *= 2; p *= 2; if (camera_move.TurnLeft) { TurnLeft(p); } if (camera_move.TurnRight) { TurnRight(p); } if (camera_move.DistanceUp) { Distance += p; } if (camera_move.DistanceDown) { Distance -= p; } if (camera_move.AngleUp) { Angle += p * 10; } if (camera_move.AngleDown) { Angle -= p * 10; } Distance = camera_move.Distance; if (MaximumAngle < MinimumAngle) { throw new Exception(); } if (Angle > MaximumAngle) { Angle = MaximumAngle; } if (Angle < MinimumAngle) { Angle = MinimumAngle; } }
void FrameTick(FrameEventArgs e) { //if ((DateTime.Now - lasttodo).TotalSeconds > BuildDelay && todo.Count > 0) UpdateTerrain(); OnNewFrame(e.Time); UpdateMousePosition(); if (guistate == GuiState.Normal) { UpdateMouseViewportControl(e); } NetworkProcess(); if (guistate == GuiState.MapLoading) { return; } bool angleup = false; bool angledown = false; float overheadcameraanglemovearea = 0.05f; float overheadcameraspeed = 3; if (guistate == GuiState.Normal && d_MainWindow.Focused && cameratype == CameraType.Overhead) { if (mouse_current.X > Width - Width * overheadcameraanglemovearea) { overheadcameraK.TurnLeft((float)e.Time * overheadcameraspeed); } if (mouse_current.X < Width * overheadcameraanglemovearea) { overheadcameraK.TurnRight((float)e.Time * overheadcameraspeed); } if (mouse_current.Y < Height * overheadcameraanglemovearea) { angledown = true; } if (mouse_current.Y > Height - Height * overheadcameraanglemovearea) { angleup = true; } } bool wantsjump = GuiTyping == TypingState.None && Keyboard[GetKey(OpenTK.Input.Key.Space)]; int movedx = 0; int movedy = 0; bool moveup = false; bool movedown = false; if (guistate == GuiState.Normal) { if (GuiTyping == TypingState.None) { if (overheadcamera) { CameraMove m = new CameraMove(); if (Keyboard[GetKey(OpenTK.Input.Key.A)]) { overheadcameraK.TurnRight((float)e.Time * overheadcameraspeed); } if (Keyboard[GetKey(OpenTK.Input.Key.D)]) { overheadcameraK.TurnLeft((float)e.Time * overheadcameraspeed); } if (Keyboard[GetKey(OpenTK.Input.Key.W)]) { angleup = true; } if (Keyboard[GetKey(OpenTK.Input.Key.S)]) { angledown = true; } overheadcameraK.Center = player.playerposition; m.Distance = overheadcameradistance; m.AngleUp = angleup; m.AngleDown = angledown; overheadcameraK.Move(m, (float)e.Time); if ((player.playerposition - playerdestination).Length >= 1f) { movedy += 1; if (d_Physics.reachedwall) { wantsjump = true; } //player orientation Vector3 q = playerdestination - player.playerposition; float angle = VectorAngleGet(q); player.playerorientation.Y = (float)Math.PI / 2 + angle; player.playerorientation.X = (float)Math.PI; } } else if (ENABLE_MOVE) { if (Keyboard[GetKey(OpenTK.Input.Key.W)]) { movedy += 1; } if (Keyboard[GetKey(OpenTK.Input.Key.S)]) { movedy += -1; } if (Keyboard[GetKey(OpenTK.Input.Key.A)]) { movedx += -1; } if (Keyboard[GetKey(OpenTK.Input.Key.D)]) { movedx += 1; } } } if (ENABLE_FREEMOVE || Swimming) { if (GuiTyping == TypingState.None && Keyboard[GetKey(OpenTK.Input.Key.Space)]) { moveup = true; } if (GuiTyping == TypingState.None && Keyboard[GetKey(OpenTK.Input.Key.ControlLeft)]) { movedown = true; } } } else if (guistate == GuiState.EscapeMenu) { } else if (guistate == GuiState.Inventory) { } else if (guistate == GuiState.MapLoading) { //todo back to game when escape key pressed. } else if (guistate == GuiState.CraftingRecipes) { } else throw new Exception(); float movespeednow = MoveSpeedNow(); Acceleration acceleration = new Acceleration(); int? blockunderplayer = BlockUnderPlayer(); { //slippery walk on ice and when swimming if ((blockunderplayer != null && d_Data.IsSlipperyWalk[blockunderplayer.Value]) || Swimming) { acceleration = new Acceleration() { acceleration1 = 0.99f, acceleration2 = 0.2f, acceleration3 = 70, }; } } float jumpstartacceleration = 2.1f * d_Physics.gravity; if (blockunderplayer != null && blockunderplayer == d_Data.BlockIdTrampoline && (!player.isplayeronground)) { wantsjump = true; jumpstartacceleration = 5f * d_Physics.gravity; } Vector3 push = new Vector3(); foreach (var k in d_Clients.Players) { if ((k.Key == 255) || (k.Value.Position == LocalPlayerPosition) || (float.IsNaN(LocalPlayerPosition.X))) { continue; } if ((k.Value.Position - LocalPlayerPosition).Length < PlayerPushDistance) { Vector3 diff = LocalPlayerPosition - k.Value.Position; push += diff; } } var move = new CharacterPhysics.MoveInfo() { movedx = movedx, movedy = movedy, acceleration = acceleration, ENABLE_FREEMOVE = ENABLE_FREEMOVE, ENABLE_NOCLIP = ENABLE_NOCLIP, jumpstartacceleration = jumpstartacceleration, movespeednow = movespeednow, moveup = moveup, movedown = movedown, Swimming = Swimming, wantsjump = wantsjump, }; bool soundnow; d_Physics.Move(player, move, e.Time, out soundnow, push); if (soundnow) { UpdateWalkSound(-1); } if (player.isplayeronground && movedx != 0 || movedy != 0) { UpdateWalkSound(e.Time); } UpdateBlockDamageToPlayer(); UpdateFallDamageToPlayer(); if (guistate == GuiState.CraftingRecipes) { CraftingMouse(); } if (guistate == GuiState.EscapeMenu) { //EscapeMenuMouse(); } if (guistate == GuiState.Normal) { UpdatePicking(); } //must be here because frametick can be called more than once per render frame. keyevent = null; keyeventup = null; }
void FrameTick(FrameEventArgs e) { //if ((DateTime.Now - lasttodo).TotalSeconds > BuildDelay && todo.Count > 0) game.OnNewFrame(e.Time); while (todo.Count > 0) { lasttodo = DateTime.Now; var task = todo.Dequeue(); task(); } lock (frametickmainthreadtodo) { for (int i = 0; i < frametickmainthreadtodo.Count; i++) { frametickmainthreadtodo[i].Invoke(); } frametickmainthreadtodo.Clear(); } network.Process(); if (newnetwork != null) { newnetwork.Process(); } UpdateMousePosition(); bool angleup = false; bool angledown = false; float overheadcameraanglemovearea = 0.05f; float overheadcameraspeed = 3; if (guistate == GuiState.Normal && Focused && cameratype == CameraType.Overhead) { if (mouse_current.X > Width - Width * overheadcameraanglemovearea) { overheadcameraK.TurnLeft((float)e.Time * overheadcameraspeed); } if (mouse_current.X < Width * overheadcameraanglemovearea) { overheadcameraK.TurnRight((float)e.Time * overheadcameraspeed); } if (mouse_current.Y < Height * overheadcameraanglemovearea) { angledown = true; } if (mouse_current.Y > Height - Height * overheadcameraanglemovearea) { angleup = true; } } bool wantsjump = GuiTyping == TypingState.None && Keyboard[OpenTK.Input.Key.Space]; int movedx = 0; int movedy = 0; bool moveup = false; if (guistate == GuiState.Normal) { if (GuiTyping == TypingState.None) { if (overheadcamera) { CameraMove m = new CameraMove(); if (Keyboard[OpenTK.Input.Key.A]) { overheadcameraK.TurnRight((float)e.Time * overheadcameraspeed); } if (Keyboard[OpenTK.Input.Key.D]) { overheadcameraK.TurnLeft((float)e.Time * overheadcameraspeed); } if (Keyboard[OpenTK.Input.Key.W]) { angleup = true; } if (Keyboard[OpenTK.Input.Key.S]) { angledown = true; } overheadcameraK.Center = player.playerposition; m.Distance = overheadcameradistance; m.AngleUp = angleup; m.AngleDown = angledown; overheadcameraK.Move(m, (float)e.Time); if ((player.playerposition - playerdestination).Length >= 1f) { movedy += 1; if (physics.reachedwall) { wantsjump = true; } //player orientation Vector3 q = playerdestination - player.playerposition; float angle = VectorAngleGet(q); player.playerorientation.Y = (float)Math.PI / 2 + angle; player.playerorientation.X = (float)Math.PI; } } else if (ENABLE_MOVE) { if (Keyboard[OpenTK.Input.Key.W]) { movedy += 1; } if (Keyboard[OpenTK.Input.Key.S]) { movedy += -1; } if (Keyboard[OpenTK.Input.Key.A]) { movedx += -1; } if (Keyboard[OpenTK.Input.Key.D]) { movedx += 1; } } } if (ENABLE_FREEMOVE || Swimming) { if (GuiTyping == TypingState.None && Keyboard[OpenTK.Input.Key.Space]) { moveup = true; } } } else if (guistate == GuiState.EscapeMenu) { } else if (guistate == GuiState.MainMenu) { } else if (guistate == GuiState.Inventory) { } else if (guistate == GuiState.MapLoading) { //todo back to game when escape key pressed. } else if (guistate == GuiState.CraftingRecipes) { } else throw new Exception(); float movespeednow = MoveSpeedNow(); Acceleration acceleration = new Acceleration(); int? blockunderplayer = BlockUnderPlayer(); { //slippery walk on ice and when swimming if ((blockunderplayer != null && data.IsSlipperyWalk(blockunderplayer.Value)) || Swimming) { acceleration = new Acceleration() { acceleration1 = 0.99f, acceleration2 = 0.2f, acceleration3 = 70, }; } } float jumpstartacceleration = 2.1f * physics.gravity; if (blockunderplayer != null && blockunderplayer == data.TileIdTrampoline && (!player.isplayeronground)) { wantsjump = true; jumpstartacceleration = 5f * physics.gravity; } var move = new CharacterPhysics.MoveInfo() { movedx = movedx, movedy = movedy, acceleration = acceleration, ENABLE_FREEMOVE = ENABLE_FREEMOVE, ENABLE_NOCLIP = ENABLE_NOCLIP, jumpstartacceleration = jumpstartacceleration, movespeednow = movespeednow, moveup = moveup, Swimming = Swimming, wantsjump = wantsjump, }; bool soundnow; physics.Move(player, move, e.Time, out soundnow); if (soundnow) { UpdateWalkSound(-1); } if (player.isplayeronground && movedx != 0 || movedy != 0) { UpdateWalkSound(e.Time); } if (guistate == GuiState.Inventory) { InventoryMouse(); } if (guistate == GuiState.CraftingRecipes) { CraftingMouse(); } if (guistate == GuiState.EscapeMenu) { EscapeMenuMouse(); } if (guistate == GuiState.Normal) { UpdateMouseViewportControl(e); } //must be here because frametick can be called more than once per render frame. keyevent = null; keyeventup = null; }