/** Start at given point, move in given direction, find and Smooth coast in that direction */ static void HeightMapSmoothCoastInDirection(int org_x, int org_y, int dir_x, int dir_y) { const int max_coast_dist_from_edge = 35; const int max_coast_Smooth_depth = 35; int x, y; int ed; // coast distance from edge int depth; height_t h_prev = 16; height_t h; assert(IsValidXY(org_x, org_y)); /* Search for the coast (first non-water tile) */ for (x = org_x, y = org_y, ed = 0; IsValidXY(x, y) && ed < max_coast_dist_from_edge; x += dir_x, y += dir_y, ed++) { /* Coast found? */ if (_height_map.height(x, y) > 15) break; /* Coast found in the neighborhood? */ if (IsValidXY(x + dir_y, y + dir_x) && _height_map.height(x + dir_y, y + dir_x) > 0) break; /* Coast found in the neighborhood on the other side */ if (IsValidXY(x - dir_y, y - dir_x) && _height_map.height(x - dir_y, y - dir_x) > 0) break; } /* Coast found or max_coast_dist_from_edge has been reached. * Soften the coast slope */ for (depth = 0; IsValidXY(x, y) && depth <= max_coast_Smooth_depth; depth++, x += dir_x, y += dir_y) { h = _height_map.height(x, y); h = min(h, h_prev + (4 + depth)); // coast softening formula _height_map.height(x, y) = h; h_prev = h; } }
CSector * CPointBase::GetSector() const { ADDTOCALLSTACK("CPointBase::GetSector"); if ( !IsValidXY() ) { g_Log.Event(LOGL_ERROR, "Point(%d,%d): trying to get a sector for point on map #%d out of bounds for this map(%d,%d). Defaulting to sector 0 of the map.\n", m_x, m_y, m_map, g_MapList.GetX(m_map), g_MapList.GetY(m_map)); return g_World.GetSector(m_map, 0); } // Get the world Sector we are in. return g_World.GetSector(m_map, ((m_y / g_MapList.GetSectorSize(m_map) * g_MapList.GetSectorCols(m_map)) + ( m_x / g_MapList.GetSectorSize(m_map) ))); }
bool CPointBase::IsValidPoint() const { return( IsValidXY() && IsValidZ()); }