public VehicleDirection12Flags PossibleRails(TileEnterData enter) { Vector3 new_position = enter.BlockPosition; VehicleDirection12Flags possible_rails = VehicleDirection12Flags.None; if (MapUtil.IsValidPos(d_Map, (int)enter.BlockPosition.X, (int)enter.BlockPosition.Y, (int)enter.BlockPosition.Z)) { RailDirectionFlags newpositionrail = d_Data.Rail[ d_Map.GetBlock((int)enter.BlockPosition.X, (int)enter.BlockPosition.Y, (int)enter.BlockPosition.Z)]; List <VehicleDirection12> all_possible_rails = new List <VehicleDirection12>(); foreach (var z in DirectionUtils.PossibleNewRails(enter.EnterDirection)) { if ((newpositionrail & DirectionUtils.ToRailDirectionFlags(DirectionUtils.ToRailDirection(z))) != RailDirectionFlags.None) { all_possible_rails.Add(z); } } possible_rails = DirectionUtils.ToVehicleDirection12Flags(all_possible_rails); } return(possible_rails); }
internal int PossibleRails(Game game, TileEnterData enter) { int possible_railsVehicleDirection12Flags = 0; if (game.map.IsValidPos(enter.BlockPositionX, enter.BlockPositionY, enter.BlockPositionZ)) { int newpositionrail = game.d_Data.Rail()[ game.map.GetBlock(enter.BlockPositionX, enter.BlockPositionY, enter.BlockPositionZ)]; VehicleDirection12[] all_possible_rails = new VehicleDirection12[3]; int all_possible_railsCount = 0; VehicleDirection12[] possibleRails3 = DirectionUtils.PossibleNewRails3(enter.EnterDirection); for (int i = 0; i < 3; i++) { VehicleDirection12 z = possibleRails3[i]; if ((newpositionrail & DirectionUtils.ToRailDirectionFlags(DirectionUtils.ToRailDirection(z))) != 0) { all_possible_rails[all_possible_railsCount++] = z; } } possible_railsVehicleDirection12Flags = DirectionUtils.ToVehicleDirection12Flags_(all_possible_rails, all_possible_railsCount); } return(possible_railsVehicleDirection12Flags); }
internal void RailOnNewFrame(Game game, float dt) { if (localMinecart == null) { localMinecart = new Entity(); localMinecart.minecart = new Minecart(); game.EntityAddLocal(localMinecart); } localMinecart.minecart.enabled = railriding; if (railriding) { Minecart m = localMinecart.minecart; m.positionX = game.player.position.x; m.positionY = game.player.position.y; m.positionZ = game.player.position.z; m.direction = currentdirection; m.lastdirection = lastdirection; m.progress = currentrailblockprogress; } game.localplayeranimationhint.InVehicle = railriding; game.localplayeranimationhint.DrawFixX = 0; game.localplayeranimationhint.DrawFixY = railriding ? (-one * 7 / 10) : 0; game.localplayeranimationhint.DrawFixZ = 0; bool turnright = game.keyboardState[game.GetKey(GlKeys.D)]; bool turnleft = game.keyboardState[game.GetKey(GlKeys.A)]; RailSound(game); if (railriding) { game.controls.SetFreemove(FreemoveLevelEnum.Freemove); game.enable_move = false; Vector3Ref railPos = CurrentRailPos(game); game.player.position.x = railPos.X; game.player.position.y = railPos.Y; game.player.position.z = railPos.Z; currentrailblockprogress += currentvehiclespeed * dt; if (currentrailblockprogress >= 1) { lastdirection = currentdirection; currentrailblockprogress = 0; TileEnterData newenter = new TileEnterData(); Vector3IntRef nexttile = NextTile(currentdirection, currentrailblockX, currentrailblockY, currentrailblockZ); newenter.BlockPositionX = nexttile.X; newenter.BlockPositionY = nexttile.Y; newenter.BlockPositionZ = nexttile.Z; //slope if (GetUpDownMove(game, currentrailblockX, currentrailblockY, currentrailblockZ, DirectionUtils.ResultEnter(DirectionUtils.ResultExit(currentdirection))) == UpDown.Up) { newenter.BlockPositionZ++; } if (GetUpDownMove(game, newenter.BlockPositionX, newenter.BlockPositionY, newenter.BlockPositionZ - 1, DirectionUtils.ResultEnter(DirectionUtils.ResultExit(currentdirection))) == UpDown.Down) { newenter.BlockPositionZ--; } newenter.EnterDirection = DirectionUtils.ResultEnter(DirectionUtils.ResultExit(currentdirection)); BoolRef newdirFound = new BoolRef(); VehicleDirection12 newdir = BestNewDirection(PossibleRails(game, newenter), turnleft, turnright, newdirFound); if (!newdirFound.value) { //end of rail currentdirection = DirectionUtils.Reverse(currentdirection); } else { currentdirection = newdir; currentrailblockX = game.platform.FloatToInt(newenter.BlockPositionX); currentrailblockY = game.platform.FloatToInt(newenter.BlockPositionY); currentrailblockZ = game.platform.FloatToInt(newenter.BlockPositionZ); } } } if (game.keyboardState[game.GetKey(GlKeys.W)] && game.GuiTyping != TypingState.Typing) { currentvehiclespeed += 1 * dt; } if (game.keyboardState[game.GetKey(GlKeys.S)] && game.GuiTyping != TypingState.Typing) { currentvehiclespeed -= 5 * dt; } if (currentvehiclespeed < 0) { currentvehiclespeed = 0; } //todo fix //if (viewport.keypressed != null && viewport.keypressed.Key == GlKeys.Q) if (!wasqpressed && game.keyboardState[game.GetKey(GlKeys.Q)] && game.GuiTyping != TypingState.Typing) { Reverse(); } if (!wasepressed && game.keyboardState[game.GetKey(GlKeys.E)] && !railriding && (game.controls.GetFreemove() == FreemoveLevelEnum.None) && game.GuiTyping != TypingState.Typing) { currentrailblockX = game.platform.FloatToInt(game.player.position.x); currentrailblockY = game.platform.FloatToInt(game.player.position.z); currentrailblockZ = game.platform.FloatToInt(game.player.position.y) - 1; if (!game.map.IsValidPos(currentrailblockX, currentrailblockY, currentrailblockZ)) { ExitVehicle(game); } else { int railunderplayer = game.d_Data.Rail()[game.map.GetBlock(currentrailblockX, currentrailblockY, currentrailblockZ)]; railriding = true; originalmodelheight = game.GetCharacterEyesHeight(); game.SetCharacterEyesHeight(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(game); } lastdirection = currentdirection; } } else if (!wasepressed && game.keyboardState[game.GetKey(GlKeys.E)] && railriding && game.GuiTyping != TypingState.Typing) { ExitVehicle(game); game.player.position.y += one * 7 / 10; } wasqpressed = game.keyboardState[game.GetKey(GlKeys.Q)] && game.GuiTyping != TypingState.Typing; wasepressed = game.keyboardState[game.GetKey(GlKeys.E)] && game.GuiTyping != TypingState.Typing; }
internal void RailOnNewFrame(Game game, float dt) { if (localMinecart == null) { localMinecart = new Entity(); localMinecart.minecart = new Minecart(); game.EntityAddLocal(localMinecart); } localMinecart.minecart.enabled = railriding; if (railriding) { Minecart m = localMinecart.minecart; m.positionX = game.player.position.x; m.positionY = game.player.position.y; m.positionZ = game.player.position.z; m.direction = currentdirection; m.lastdirection = lastdirection; m.progress = currentrailblockprogress; } game.localplayeranimationhint.InVehicle = railriding; game.localplayeranimationhint.DrawFixX = 0; game.localplayeranimationhint.DrawFixY = railriding ? (-one * 7 / 10) : 0; game.localplayeranimationhint.DrawFixZ = 0; bool turnright = game.keyboardState[game.GetKey(GlKeys.D)]; bool turnleft = game.keyboardState[game.GetKey(GlKeys.A)]; RailSound(game); if (railriding) { game.controls.freemove = true; game.enable_move = false; Vector3Ref railPos = CurrentRailPos(game); game.player.position.x = railPos.X; game.player.position.y = railPos.Y; game.player.position.z = railPos.Z; currentrailblockprogress += currentvehiclespeed * dt; if (currentrailblockprogress >= 1) { lastdirection = currentdirection; currentrailblockprogress = 0; TileEnterData newenter = new TileEnterData(); Vector3IntRef nexttile = NextTile(currentdirection, currentrailblockX, currentrailblockY, currentrailblockZ); newenter.BlockPositionX = nexttile.X; newenter.BlockPositionY = nexttile.Y; newenter.BlockPositionZ = nexttile.Z; //slope if (GetUpDownMove(game, currentrailblockX, currentrailblockY, currentrailblockZ, DirectionUtils.ResultEnter(DirectionUtils.ResultExit(currentdirection))) == UpDown.Up) { newenter.BlockPositionZ++; } if (GetUpDownMove(game, newenter.BlockPositionX, newenter.BlockPositionY, newenter.BlockPositionZ - 1, DirectionUtils.ResultEnter(DirectionUtils.ResultExit(currentdirection))) == UpDown.Down) { newenter.BlockPositionZ--; } newenter.EnterDirection = DirectionUtils.ResultEnter(DirectionUtils.ResultExit(currentdirection)); BoolRef newdirFound = new BoolRef(); VehicleDirection12 newdir = BestNewDirection(PossibleRails(game, newenter), turnleft, turnright, newdirFound); if (!newdirFound.value) { //end of rail currentdirection = DirectionUtils.Reverse(currentdirection); } else { currentdirection = newdir; currentrailblockX = game.platform.FloatToInt(newenter.BlockPositionX); currentrailblockY = game.platform.FloatToInt(newenter.BlockPositionY); currentrailblockZ = game.platform.FloatToInt(newenter.BlockPositionZ); } } } if (game.keyboardState[game.GetKey(GlKeys.W)] && game.GuiTyping != TypingState.Typing) { currentvehiclespeed += 1 * dt; } if (game.keyboardState[game.GetKey(GlKeys.S)] && game.GuiTyping != TypingState.Typing) { currentvehiclespeed -= 5 * dt; } if (currentvehiclespeed < 0) { currentvehiclespeed = 0; } //todo fix //if (viewport.keypressed != null && viewport.keypressed.Key == GlKeys.Q) if (!wasqpressed && game.keyboardState[game.GetKey(GlKeys.Q)] && game.GuiTyping != TypingState.Typing) { Reverse(); } if (!wasepressed && game.keyboardState[game.GetKey(GlKeys.E)] && !railriding && !game.controls.freemove && game.GuiTyping != TypingState.Typing) { currentrailblockX = game.platform.FloatToInt(game.player.position.x); currentrailblockY = game.platform.FloatToInt(game.player.position.z); currentrailblockZ = game.platform.FloatToInt(game.player.position.y) - 1; if (!game.map.IsValidPos(currentrailblockX, currentrailblockY, currentrailblockZ)) { ExitVehicle(game); } else { int railunderplayer = game.d_Data.Rail()[game.map.GetBlock(currentrailblockX, currentrailblockY, currentrailblockZ)]; railriding = true; originalmodelheight = game.GetCharacterEyesHeight(); game.SetCharacterEyesHeight(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(game); } lastdirection = currentdirection; } } else if (!wasepressed && game.keyboardState[game.GetKey(GlKeys.E)] && railriding && game.GuiTyping != TypingState.Typing) { ExitVehicle(game); game.player.position.y += one * 7 / 10; } wasqpressed = game.keyboardState[game.GetKey(GlKeys.Q)] && game.GuiTyping != TypingState.Typing; wasepressed = game.keyboardState[game.GetKey(GlKeys.E)] && game.GuiTyping != TypingState.Typing; }
internal int PossibleRails(Game game, TileEnterData enter) { int possible_railsVehicleDirection12Flags = 0; if (game.map.IsValidPos(enter.BlockPositionX, enter.BlockPositionY, enter.BlockPositionZ)) { int newpositionrail = game.d_Data.Rail()[ game.map.GetBlock(enter.BlockPositionX, enter.BlockPositionY, enter.BlockPositionZ)]; VehicleDirection12[] all_possible_rails = new VehicleDirection12[3]; int all_possible_railsCount = 0; VehicleDirection12[] possibleRails3 = DirectionUtils.PossibleNewRails3(enter.EnterDirection); for (int i = 0; i < 3; i++) { VehicleDirection12 z = possibleRails3[i]; if ((newpositionrail & DirectionUtils.ToRailDirectionFlags(DirectionUtils.ToRailDirection(z))) != 0) { all_possible_rails[all_possible_railsCount++] = z; } } possible_railsVehicleDirection12Flags = DirectionUtils.ToVehicleDirection12Flags_(all_possible_rails, all_possible_railsCount); } return possible_railsVehicleDirection12Flags; }
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; }
public VehicleDirection12Flags PossibleRails(TileEnterData enter) { Vector3 new_position = enter.BlockPosition; VehicleDirection12Flags possible_rails = VehicleDirection12Flags.None; if (MapUtil.IsValidPos(d_Map, (int)enter.BlockPosition.X, (int)enter.BlockPosition.Y, (int)enter.BlockPosition.Z)) { RailDirectionFlags newpositionrail = d_Data.Rail[ d_Map.GetBlock((int)enter.BlockPosition.X, (int)enter.BlockPosition.Y, (int)enter.BlockPosition.Z)]; List<VehicleDirection12> all_possible_rails = new List<VehicleDirection12>(); foreach (var z in DirectionUtils.PossibleNewRails(enter.EnterDirection)) { if ((newpositionrail & DirectionUtils.ToRailDirectionFlags(DirectionUtils.ToRailDirection(z))) != RailDirectionFlags.None) { all_possible_rails.Add(z); } } possible_rails = DirectionUtils.ToVehicleDirection12Flags(all_possible_rails); } return possible_rails; }