//should be able to // update with new surface height... public void updateWindowsWithNewSurfaceHeight(int newHeight, int xx, int zz, bool removedABlock) { ChangeOfLightStatus lightChangeStatus = ChangeOfLightStatus.NO_CHANGE; List <LightColumn> needUpdateCols = new List <LightColumn>(); b.bug("upd with new surf height"); //REMOVE COLUMNS IF COLUMN REVEALED if (removedABlock) { b.bug("remove cols above at x: " + xx + " zz: " + zz + "height: " + newHeight); m_lightColumnMap.removeColumnsAbove(xx, newHeight, zz); ChunkManager.debugLinesAssistant.clearColumns(); //DBG } checkSurfaceStatusAt(newHeight, xx, zz, ref lightChangeStatus, ref needUpdateCols); //for now if (lightChangeStatus == ChangeOfLightStatus.DARKENED) { Quad area = LightDomainAround(xx, zz); b.bug("got darken by surface change. reset area" + area.toString()); resetAndUpdateColumnsWithin(area); //TEST WANT } else if (lightChangeStatus == ChangeOfLightStatus.LIGHTENED) { b.bug("got lightened"); updateColumnsWithin(LightDomainAround(xx, zz), needUpdateCols); } }
// this func. represnts our muddled strategy unfortuntly. private void checkSurfaceStatusAt(int newHeight, int xx, int zz, ref ChangeOfLightStatus lightChangeStatus, ref List <LightColumn> needUpdateCols) { foreach (PTwo neighborPoint in DirectionUtil.SurroundingPTwoCoordsFromPTwo(new PTwo(xx, zz))) { //inefficient? DiscreteDomainRangeList <LightColumn> lilcoms = m_lightColumnMap[neighborPoint]; b.bug("checking surface..."); if (lilcoms == null) { continue; } b.bug("not ull"); for (int i = 0; i < lilcoms.Count; ++i) { LightColumn lilc = lilcoms[i]; bool wasAboveSurface = surfaceExposedColumns.Contains(lilc); if (lilc.range.extent() > newHeight) { b.bug("extent was greater than new height"); if (!wasAboveSurface) { b.bug("added a column now surf exposed"); lightChangeStatus = ChangeOfLightStatus.LIGHTENED; surfaceExposedColumns.Add(lilc); needUpdateCols.Add(lilc); } } else { b.bug("below surface new height is: " + newHeight + "lilc range extent is: " + lilc.range.extent()); if (wasAboveSurface) { lightChangeStatus = ChangeOfLightStatus.DARKENED; needUpdateCols.Add(lilc); surfaceExposedColumns.Remove(lilc); } } } } }