Update client lighting on block change
This commit is contained in:
parent
0a3eca2745
commit
9de14e371b
@ -28,6 +28,8 @@ namespace TrueCraft.Client.Handlers
|
|||||||
}
|
}
|
||||||
chunk.SetBlockID(adjusted, (byte)packet.BlockID);
|
chunk.SetBlockID(adjusted, (byte)packet.BlockID);
|
||||||
chunk.SetMetadata(adjusted, (byte)packet.Metadata);
|
chunk.SetMetadata(adjusted, (byte)packet.Metadata);
|
||||||
|
client.OnBlockChanged(new BlockChangeEventArgs(coordinates, new TrueCraft.API.Logic.BlockDescriptor(),
|
||||||
|
new TrueCraft.API.Logic.BlockDescriptor()));
|
||||||
client.OnChunkModified(new ChunkEventArgs(new ReadOnlyChunk(chunk)));
|
client.OnChunkModified(new ChunkEventArgs(new ReadOnlyChunk(chunk)));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -110,6 +112,7 @@ namespace TrueCraft.Client.Handlers
|
|||||||
// TODO: Lighting
|
// TODO: Lighting
|
||||||
}
|
}
|
||||||
chunk.UpdateHeightMap();
|
chunk.UpdateHeightMap();
|
||||||
|
chunk.TerrainPopulated = true;
|
||||||
client.OnChunkLoaded(new ChunkEventArgs(new ReadOnlyChunk(chunk)));
|
client.OnChunkLoaded(new ChunkEventArgs(new ReadOnlyChunk(chunk)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,6 +9,9 @@ using TrueCraft.API;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using TrueCraft.Client.Events;
|
using TrueCraft.Client.Events;
|
||||||
|
using TrueCraft.API.World;
|
||||||
|
using TrueCraft.Core.Lighting;
|
||||||
|
using TrueCraft.Core.World;
|
||||||
|
|
||||||
namespace TrueCraft.Client.Modules
|
namespace TrueCraft.Client.Modules
|
||||||
{
|
{
|
||||||
@ -21,6 +24,7 @@ namespace TrueCraft.Client.Modules
|
|||||||
private HashSet<Coordinates2D> ActiveMeshes { get; set; }
|
private HashSet<Coordinates2D> ActiveMeshes { get; set; }
|
||||||
private List<ChunkMesh> ChunkMeshes { get; set; }
|
private List<ChunkMesh> ChunkMeshes { get; set; }
|
||||||
private ConcurrentBag<Mesh> IncomingChunks { get; set; }
|
private ConcurrentBag<Mesh> IncomingChunks { get; set; }
|
||||||
|
private WorldLighting WorldLighting { get; set; }
|
||||||
|
|
||||||
private BasicEffect OpaqueEffect { get; set; }
|
private BasicEffect OpaqueEffect { get; set; }
|
||||||
private AlphaTestEffect TransparentEffect { get; set; }
|
private AlphaTestEffect TransparentEffect { get; set; }
|
||||||
@ -33,8 +37,10 @@ namespace TrueCraft.Client.Modules
|
|||||||
Game.Client.ChunkLoaded += Game_Client_ChunkLoaded;
|
Game.Client.ChunkLoaded += Game_Client_ChunkLoaded;
|
||||||
Game.Client.ChunkUnloaded += (sender, e) => UnloadChunk(e.Chunk);
|
Game.Client.ChunkUnloaded += (sender, e) => UnloadChunk(e.Chunk);
|
||||||
Game.Client.ChunkModified += Game_Client_ChunkModified;
|
Game.Client.ChunkModified += Game_Client_ChunkModified;
|
||||||
|
Game.Client.BlockChanged += Game_Client_BlockChanged;
|
||||||
ChunkRenderer.MeshCompleted += MeshCompleted;
|
ChunkRenderer.MeshCompleted += MeshCompleted;
|
||||||
ChunkRenderer.Start();
|
ChunkRenderer.Start();
|
||||||
|
WorldLighting = new WorldLighting(Game.Client.World.World, Game.BlockRepository);
|
||||||
|
|
||||||
OpaqueEffect = new BasicEffect(Game.GraphicsDevice);
|
OpaqueEffect = new BasicEffect(Game.GraphicsDevice);
|
||||||
OpaqueEffect.TextureEnabled = true;
|
OpaqueEffect.TextureEnabled = true;
|
||||||
@ -56,6 +62,28 @@ namespace TrueCraft.Client.Modules
|
|||||||
ActiveMeshes = new HashSet<Coordinates2D>();
|
ActiveMeshes = new HashSet<Coordinates2D>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Game_Client_BlockChanged(object sender, BlockChangeEventArgs e)
|
||||||
|
{
|
||||||
|
WorldLighting.EnqueueOperation(new TrueCraft.API.BoundingBox(
|
||||||
|
e.Position, e.Position + Coordinates3D.One), false);
|
||||||
|
WorldLighting.EnqueueOperation(new TrueCraft.API.BoundingBox(
|
||||||
|
e.Position, e.Position + Coordinates3D.One), true);
|
||||||
|
var posA = e.Position;
|
||||||
|
posA.Y = 0;
|
||||||
|
var posB = e.Position;
|
||||||
|
posB.Y = World.Height;
|
||||||
|
posB.X++;
|
||||||
|
posB.Z++;
|
||||||
|
WorldLighting.EnqueueOperation(new TrueCraft.API.BoundingBox(posA, posB), true);
|
||||||
|
WorldLighting.EnqueueOperation(new TrueCraft.API.BoundingBox(posA, posB), false);
|
||||||
|
for (int i = 0; i < 100; i++)
|
||||||
|
{
|
||||||
|
if (!WorldLighting.TryLightNext())
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
private void Game_Client_ChunkModified(object sender, ChunkEventArgs e)
|
private void Game_Client_ChunkModified(object sender, ChunkEventArgs e)
|
||||||
{
|
{
|
||||||
ChunkRenderer.Enqueue(e.Chunk, true);
|
ChunkRenderer.Enqueue(e.Chunk, true);
|
||||||
@ -126,6 +154,7 @@ namespace TrueCraft.Client.Modules
|
|||||||
}
|
}
|
||||||
if (any)
|
if (any)
|
||||||
Game.FlushMainThreadActions();
|
Game.FlushMainThreadActions();
|
||||||
|
WorldLighting.TryLightNext();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static readonly BlendState ColorWriteDisable = new BlendState
|
private static readonly BlendState ColorWriteDisable = new BlendState
|
||||||
|
@ -19,6 +19,7 @@ using TrueCraft.Core.Physics;
|
|||||||
using TrueCraft.Core.Windows;
|
using TrueCraft.Core.Windows;
|
||||||
using TrueCraft.API.Windows;
|
using TrueCraft.API.Windows;
|
||||||
using TrueCraft.API.Logic;
|
using TrueCraft.API.Logic;
|
||||||
|
using TrueCraft.API.World;
|
||||||
|
|
||||||
namespace TrueCraft.Client
|
namespace TrueCraft.Client
|
||||||
{
|
{
|
||||||
@ -30,6 +31,7 @@ namespace TrueCraft.Client
|
|||||||
public event EventHandler<ChunkEventArgs> ChunkModified;
|
public event EventHandler<ChunkEventArgs> ChunkModified;
|
||||||
public event EventHandler<ChunkEventArgs> ChunkLoaded;
|
public event EventHandler<ChunkEventArgs> ChunkLoaded;
|
||||||
public event EventHandler<ChunkEventArgs> ChunkUnloaded;
|
public event EventHandler<ChunkEventArgs> ChunkUnloaded;
|
||||||
|
public event EventHandler<BlockChangeEventArgs> BlockChanged;
|
||||||
public event PropertyChangedEventHandler PropertyChanged;
|
public event PropertyChangedEventHandler PropertyChanged;
|
||||||
|
|
||||||
private long connected;
|
private long connected;
|
||||||
@ -265,6 +267,11 @@ namespace TrueCraft.Client
|
|||||||
if (ChunkModified != null) ChunkModified(this, e);
|
if (ChunkModified != null) ChunkModified(this, e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected internal void OnBlockChanged(BlockChangeEventArgs e)
|
||||||
|
{
|
||||||
|
if (BlockChanged != null) BlockChanged(this, e);
|
||||||
|
}
|
||||||
|
|
||||||
#region IAABBEntity implementation
|
#region IAABBEntity implementation
|
||||||
|
|
||||||
public const double Width = 0.6;
|
public const double Width = 0.6;
|
||||||
|
Reference in New Issue
Block a user