public static Reverse ( VehicleDirection12 direction ) : VehicleDirection12 | ||
direction | VehicleDirection12 | |
리턴 | VehicleDirection12 |
private void Reverse() { currentdirection = DirectionUtils.Reverse(currentdirection); currentrailblockprogress = 1 - currentrailblockprogress; lastdirection = currentdirection; //currentvehiclespeed = 0; }
void RailOnNewFrame(float dt) { LocalPlayerAnimationHint.InVehicle = railriding; LocalPlayerAnimationHint.DrawFix = railriding ? new Vector3(0, -0.7f, 0) : new Vector3(); bool turnright = keyboardstate[GetKey(OpenTK.Input.Key.D)]; bool turnleft = keyboardstate[GetKey(OpenTK.Input.Key.A)]; RailSound(); if (railriding) { ENABLE_FREEMOVE = true; ENABLE_MOVE = false; LocalPlayerPosition = CurrentRailPos(); currentrailblockprogress += currentvehiclespeed * (float)dt; if (currentrailblockprogress >= 1) { lastdirection = currentdirection; currentrailblockprogress = 0; var newenter = new TileEnterData(); newenter.BlockPosition = NextTile(currentdirection, currentrailblock); //slope if (GetUpDownMove(currentrailblock, DirectionUtils.ResultEnter(DirectionUtils.ResultExit(currentdirection))) == UpDown.Up) { newenter.BlockPosition.Z++; } if (GetUpDownMove(newenter.BlockPosition + new Vector3(0, 0, -1), DirectionUtils.ResultEnter(DirectionUtils.ResultExit(currentdirection))) == UpDown.Down) { newenter.BlockPosition.Z--; } newenter.EnterDirection = DirectionUtils.ResultEnter(DirectionUtils.ResultExit(currentdirection)); var newdir = BestNewDirection(PossibleRails(newenter), turnleft, turnright); if (newdir == null) { //end of rail currentdirection = DirectionUtils.Reverse(currentdirection); } else { currentdirection = newdir.Value; currentrailblock = newenter.BlockPosition; } } } if (keyboardstate[GetKey(OpenTK.Input.Key.W)] && GuiTyping != TypingState.Typing) { currentvehiclespeed += 1f * (float)dt; } if (keyboardstate[GetKey(OpenTK.Input.Key.S)] && GuiTyping != TypingState.Typing) { currentvehiclespeed -= 5f * (float)dt; } if (currentvehiclespeed < 0) { currentvehiclespeed = 0; } //todo fix //if (viewport.keypressed != null && viewport.keypressed.Key == OpenTK.Input.Key.Q) if (!wasqpressed && keyboardstate[GetKey(OpenTK.Input.Key.Q)] && GuiTyping != TypingState.Typing) { Reverse(); } if (!wasepressed && keyboardstate[GetKey(OpenTK.Input.Key.E)] && !railriding && !ENABLE_FREEMOVE && GuiTyping != TypingState.Typing) { currentrailblock = new Vector3((int)LocalPlayerPosition.X, (int)LocalPlayerPosition.Z, (int)LocalPlayerPosition.Y - 1); if (!MapUtil.IsValidPos(d_Map, (int)currentrailblock.X, (int)currentrailblock.Y, (int)currentrailblock.Z)) { ExitVehicle(); } else { var railunderplayer = d_Data.Rail[d_Map.GetBlock((int)currentrailblock.X, (int)currentrailblock.Y, (int)currentrailblock.Z)]; railriding = true; CharacterHeight = minecartheight; currentvehiclespeed = 0; if ((railunderplayer & RailDirectionFlags.Horizontal) != 0) { currentdirection = VehicleDirection12.HorizontalRight; } else if ((railunderplayer & RailDirectionFlags.Vertical) != 0) { currentdirection = VehicleDirection12.VerticalUp; } else if ((railunderplayer & RailDirectionFlags.UpLeft) != 0) { currentdirection = VehicleDirection12.UpLeftUp; } else if ((railunderplayer & RailDirectionFlags.UpRight) != 0) { currentdirection = VehicleDirection12.UpRightUp; } else if ((railunderplayer & RailDirectionFlags.DownLeft) != 0) { currentdirection = VehicleDirection12.DownLeftLeft; } else if ((railunderplayer & RailDirectionFlags.DownRight) != 0) { currentdirection = VehicleDirection12.DownRightRight; } else { ExitVehicle(); } lastdirection = currentdirection; } } else if (!wasepressed && keyboardstate[GetKey(OpenTK.Input.Key.E)] && railriding && GuiTyping != TypingState.Typing) { ExitVehicle(); LocalPlayerPosition += new Vector3(0, 0.7f, 0); } wasqpressed = keyboardstate[GetKey(OpenTK.Input.Key.Q)] && GuiTyping != TypingState.Typing; wasepressed = keyboardstate[GetKey(OpenTK.Input.Key.E)] && GuiTyping != TypingState.Typing; }