mirror of
https://github.com/ClassiCube/ClassiCube.git
synced 2025-01-24 18:13:15 -05:00
Allow placing blocks off map bedrock sides. (Thanks MrGoober)
This commit is contained in:
parent
c3ffec20a2
commit
21c1c031c6
8 changed files with 19 additions and 15 deletions
|
@ -218,10 +218,10 @@
|
|||
<Compile Include="Commands\CommandManager.cs" />
|
||||
<Compile Include="Commands\CommandReader.cs" />
|
||||
<Compile Include="Network\Utils\NetWriter.cs" />
|
||||
<Compile Include="Physics\BoundingBox.cs" />
|
||||
<Compile Include="Physics\IntersectionUtils.cs" />
|
||||
<Compile Include="Physics\PickedPos.cs" />
|
||||
<Compile Include="Physics\Picking.cs" />
|
||||
<Compile Include="Math\BoundingBox.cs" />
|
||||
<Compile Include="Math\IntersectionUtils.cs" />
|
||||
<Compile Include="Math\PickedPos.cs" />
|
||||
<Compile Include="Math\Picking.cs" />
|
||||
<Compile Include="Platform\Font.cs" />
|
||||
<Compile Include="Platform\IPlatformWindow.cs" />
|
||||
<Compile Include="Platform\Platform.cs" />
|
||||
|
@ -236,10 +236,10 @@
|
|||
<Compile Include="Rendering\FrustumCulling.cs" />
|
||||
<Compile Include="Rendering\MapBordersRenderer.cs" />
|
||||
<Compile Include="Rendering\MapRenderer.cs" />
|
||||
<Compile Include="Rendering\PickingRenderer.cs" />
|
||||
<Compile Include="Rendering\StandardEnvRenderer.cs" />
|
||||
<Compile Include="Rendering\WeatherRenderer.cs" />
|
||||
<Compile Include="Selections\AxisLinesRenderer.cs" />
|
||||
<Compile Include="Selections\PickedPosRenderer.cs" />
|
||||
<Compile Include="Selections\SelectionBox.cs" />
|
||||
<Compile Include="Selections\SelectionBoxComparer.cs" />
|
||||
<Compile Include="Selections\SelectionManager.cs" />
|
||||
|
@ -301,7 +301,7 @@
|
|||
<Folder Include="TexturePack" />
|
||||
<Folder Include="Singleplayer" />
|
||||
<Folder Include="Utils" />
|
||||
<Folder Include="Physics" />
|
||||
<Folder Include="Math" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\OpenTK\OpenTK.csproj">
|
||||
|
|
|
@ -69,7 +69,7 @@ namespace ClassicalSharp {
|
|||
public CommandManager CommandManager;
|
||||
public SelectionManager SelectionManager;
|
||||
public ParticleManager ParticleManager;
|
||||
public PickingRenderer Picking;
|
||||
public PickedPosRenderer Picking;
|
||||
public PickedPos SelectedPos = new PickedPos(), CameraClipPos = new PickedPos();
|
||||
public ModelCache ModelCache;
|
||||
internal string skinServer, chatInInputBuffer = null;
|
||||
|
|
|
@ -144,7 +144,7 @@ namespace ClassicalSharp {
|
|||
Culling = new FrustumCulling();
|
||||
EnvRenderer.Init();
|
||||
MapBordersRenderer.Init();
|
||||
Picking = new PickingRenderer( this );
|
||||
Picking = new PickedPosRenderer( this );
|
||||
AudioPlayer = new AudioPlayer( this );
|
||||
LiquidsBreakable = Options.GetBool( OptionsKey.LiquidsBreakable, false );
|
||||
AxisLinesRenderer = new AxisLinesRenderer( this );
|
||||
|
|
|
@ -112,7 +112,7 @@ namespace ClassicalSharp {
|
|||
case CpeBlockFace.ZMin:
|
||||
pickedPos.IntersectPoint.Z -= adjust; break;
|
||||
case CpeBlockFace.ZMax:
|
||||
pickedPos.IntersectPoint.Z += adjust; break;
|
||||
pickedPos.IntersectPoint.Z += adjust; break;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
@ -125,7 +125,7 @@ namespace ClassicalSharp {
|
|||
}
|
||||
|
||||
static void CalcVectors( Vector3 origin, Vector3 dir, out Vector3I step,
|
||||
out Vector3I cellBoundary, out Vector3 tMax, out Vector3 tDelta ) {
|
||||
out Vector3I cellBoundary, out Vector3 tMax, out Vector3 tDelta ) {
|
||||
Vector3I start = Vector3I.Floor( origin );
|
||||
// Determine which way we go.
|
||||
step.X = Math.Sign( dir.X ); step.Y = Math.Sign( dir.Y ); step.Z = Math.Sign( dir.Z );
|
||||
|
@ -174,11 +174,15 @@ namespace ClassicalSharp {
|
|||
if( x >= 0 && z >= 0 && x < map.Width && z < map.Length ) {
|
||||
if( y >= map.Height ) return 0;
|
||||
if( y >= 0 ) return map.GetBlock( x, y, z );
|
||||
|
||||
// special case: we want to be able to pick bedrock when we're standing on top of it
|
||||
if( origin.Y >= 0 && y == -1 )
|
||||
if( map.SidesBlock != Block.Air && y == -1 )
|
||||
return (byte)Block.Bedrock;
|
||||
}
|
||||
if( map.SidesBlock == Block.Air ) return 0;
|
||||
|
||||
bool validX = (x == -1 || x == map.Width) && (z >= 0 && z < map.Length);
|
||||
bool validZ = (z == -1 || z == map.Length) && (x >= 0 && x < map.Width);
|
||||
if( y >= 0 && y < Math.Max( 1, map.SidesHeight ) && (validX || validZ) )
|
||||
return (byte)Block.Bedrock;
|
||||
return 0;
|
||||
}
|
||||
}
|
|
@ -4,13 +4,13 @@ using OpenTK;
|
|||
|
||||
namespace ClassicalSharp.Renderers {
|
||||
|
||||
public class PickingRenderer : IDisposable {
|
||||
public sealed class PickedPosRenderer : IDisposable {
|
||||
|
||||
IGraphicsApi graphics;
|
||||
Game game;
|
||||
int vb;
|
||||
|
||||
public PickingRenderer( Game game ) {
|
||||
public PickedPosRenderer( Game game ) {
|
||||
graphics = game.Graphics;
|
||||
vb = graphics.CreateDynamicVb( VertexFormat.Pos3fCol4b, verticesCount );
|
||||
this.game = game;
|
Loading…
Add table
Reference in a new issue