Bugfixes and more relighting control

This commit is contained in:
Justin Aquadro 2011-04-16 01:46:46 +00:00
parent 6fa2538130
commit 0657cf5bd3
7 changed files with 48 additions and 25 deletions

View file

@ -15,6 +15,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Skyscraper", "Skyscraper\Sk
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Relight", "Relight\Relight.csproj", "{EBDD447B-01FA-4A29-B4AB-380EC4379B5F}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Maze", "Maze\Maze.csproj", "{62D70576-FE3A-4530-B283-889C14B52E9E}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@ -49,6 +51,10 @@ Global
{EBDD447B-01FA-4A29-B4AB-380EC4379B5F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EBDD447B-01FA-4A29-B4AB-380EC4379B5F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EBDD447B-01FA-4A29-B4AB-380EC4379B5F}.Release|Any CPU.Build.0 = Release|Any CPU
{62D70576-FE3A-4530-B283-889C14B52E9E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{62D70576-FE3A-4530-B283-889C14B52E9E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{62D70576-FE3A-4530-B283-889C14B52E9E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{62D70576-FE3A-4530-B283-889C14B52E9E}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

View file

@ -28,7 +28,7 @@ namespace Substrate
protected ChunkRef _cache;
private bool _autoLight;
private bool _autoLight = true;
public bool AutoRecalcLight
{

View file

@ -18,8 +18,8 @@ namespace Substrate
new NBTArrayNode("SkyLight", 16384),
new NBTArrayNode("BlockLight", 16384),
new NBTArrayNode("HeightMap", 256),
new NBTListNode("Entities", TagType.TAG_COMPOUND),
new NBTListNode("TileEntities", TagType.TAG_COMPOUND, TileEntity.BaseSchema),
new NBTListNode("Entities", TagType.TAG_COMPOUND, 0, NBTOptions.CREATE_ON_MISSING),
new NBTListNode("TileEntities", TagType.TAG_COMPOUND, TileEntity.BaseSchema, NBTOptions.CREATE_ON_MISSING),
new NBTScalerNode("LastUpdate", TagType.TAG_LONG, NBTOptions.CREATE_ON_MISSING),
new NBTScalerNode("xPos", TagType.TAG_INT),
new NBTScalerNode("zPos", TagType.TAG_INT),
@ -633,7 +633,8 @@ namespace Substrate
public bool ValidateTree (TagValue tree)
{
return new NBTVerifier(tree, LevelSchema).Verify();
NBTVerifier v = new NBTVerifier(tree, LevelSchema);
return v.Verify();
}
#endregion
@ -736,30 +737,12 @@ namespace Substrate
public void ResetBlockLight ()
{
for (int i = 0; i < _blocks.Length; i++) {
//BlockInfo info = BlockInfo.BlockTable[_blocks[i]];
_blockLight[i] = 0; // Math.Max(info.Luminance - info.Opacity, 0);
}
_blockLight.Clear();
}
public void ResetSkyLight ()
{
for (int x = 0; x < XDim; x++) {
for (int z = 0; z < ZDim; z++) {
int height = GetHeight(x, z);
int ystride = x << 11 | z << 7;
for (int y = 0; y < YDim; y++ ) {
int index = ystride + y;
if (y >= height) {
_skyLight[index] = BlockInfo.MIN_LUMINANCE;
}
else {
_skyLight[index] = BlockInfo.MIN_LUMINANCE;
}
}
}
}
_skyLight.Clear();
}
private int Timestamp ()

View file

@ -179,6 +179,31 @@ namespace Substrate
return true;
}
public void RelightDirtyChunks ()
{
List<ChunkRef> dirty = new List<ChunkRef>();
IEnumerator<ChunkRef> en = _cache.GetDirtyEnumerator();
while (en.MoveNext()) {
dirty.Add(en.Current);
}
foreach (ChunkRef chunk in dirty) {
chunk.ResetBlockLight();
chunk.ResetSkyLight();
}
foreach (ChunkRef chunk in dirty) {
chunk.RebuildBlockLight();
chunk.RebuildSkyLight();
}
foreach (ChunkRef chunk in dirty) {
chunk.UpdateEdgeBlockLight();
chunk.UpdateEdgeSkyLight();
}
}
public RegionManager GetRegionManager ()
{
return _regionMan;

View file

@ -775,12 +775,14 @@ namespace Substrate
public void UpdateEdgeBlockLight ()
{
GetChunk();
QueueChunkEdges();
UpdateBlockLight();
}
public void UpdateEdgeSkyLight ()
{
GetChunk();
QueueChunkEdges();
UpdateSkyLight();
}

View file

@ -211,7 +211,7 @@ namespace Substrate.NBT
if (value == null) {
if ((node.Options & NBTOptions.CREATE_ON_MISSING) == NBTOptions.CREATE_ON_MISSING) {
_scratch[node.Name] = schema.BuildDefaultTree();
_scratch[node.Name] = node.BuildDefaultTree();
continue;
}
else if ((node.Options & NBTOptions.OPTIONAL) == NBTOptions.OPTIONAL) {

View file

@ -47,6 +47,13 @@ namespace Substrate.Utility
}
}
public void Clear ()
{
for (int i = 0; i < _data.Length; i++) {
_data[i] = 0;
}
}
#region ICopyable<NibbleArray> Members
public NibbleArray Copy ()