public Cell(Cell cell) { data = cell.data; }
public bool DiffGrid(Cell cell) { return(data.grid_x != cell.data.grid_x || data.grid_y != cell.data.grid_y); }
public void Visit(CellCoord standing_cell, Visitor visitor, Map map, float x_off, float y_off, float radius) { if (!standing_cell.IsCoordValid()) { return; } //no jokes here... Actually placing ASSERT() here was good idea, but //we had some problems with DynamicObjects, which pass radius = 0.0f (DB issue?) //maybe it is better to just return when radius <= 0.0f? if (radius <= 0.0f) { map.Visit(this, visitor); return; } //lets limit the upper value for search radius if (radius > MapConst.SizeofGrids) { radius = MapConst.SizeofGrids; } //lets calculate object coord offsets from cell borders. CellArea area = CalculateCellArea(x_off, y_off, radius); //if radius fits inside standing cell if (area == null) { map.Visit(this, visitor); return; } //visit all cells, found in CalculateCellArea() //if radius is known to reach cell area more than 4x4 then we should call optimized VisitCircle //currently this technique works with MAX_NUMBER_OF_CELLS 16 and higher, with lower values //there are nothing to optimize because SIZE_OF_GRID_CELL is too big... if ((area.high_bound.x_coord > (area.low_bound.x_coord + 4)) && (area.high_bound.y_coord > (area.low_bound.y_coord + 4))) { VisitCircle(visitor, map, area.low_bound, area.high_bound); return; } //ALWAYS visit standing cell first!!! Since we deal with small radiuses //it is very essential to call visitor for standing cell firstly... map.Visit(this, visitor); // loop the cell range for (uint x = area.low_bound.x_coord; x <= area.high_bound.x_coord; ++x) { for (uint y = area.low_bound.y_coord; y <= area.high_bound.y_coord; ++y) { CellCoord cellCoord = new CellCoord(x, y); //lets skip standing cell since we already visited it if (cellCoord != standing_cell) { Cell r_zone = new Cell(cellCoord); r_zone.data.nocreate = data.nocreate; map.Visit(r_zone, visitor); } } } }
public bool DiffCell(Cell cell) { return(data.cell_x != cell.data.cell_x || data.cell_y != cell.data.cell_y); }