Пример #1
0
    //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);
        }
    }
Пример #2
0
 // 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);
                 }
             }
         }
     }
 }