本文整理汇总了C++中MYMAX函数的典型用法代码示例。如果您正苦于以下问题:C++ MYMAX函数的具体用法?C++ MYMAX怎么用?C++ MYMAX使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了MYMAX函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: m_tsrc
GUITable::GUITable(gui::IGUIEnvironment *env,
gui::IGUIElement* parent, s32 id,
core::rect<s32> rectangle,
ISimpleTextureSource *tsrc
):
gui::IGUIElement(gui::EGUIET_ELEMENT, env, parent, id, rectangle),
m_tsrc(tsrc),
m_is_textlist(false),
m_has_tree_column(false),
m_selected(-1),
m_sel_column(0),
m_sel_doubleclick(false),
m_keynav_time(0),
m_keynav_buffer(L""),
m_border(true),
m_color(255, 255, 255, 255),
m_background(255, 0, 0, 0),
m_highlight(255, 70, 100, 50),
m_highlight_text(255, 255, 255, 255),
m_rowheight(1),
m_font(NULL),
m_scrollbar(NULL)
{
assert(tsrc != NULL);
gui::IGUISkin* skin = Environment->getSkin();
m_font = skin->getFont();
if (m_font) {
m_font->grab();
m_rowheight = m_font->getDimension(L"A").Height + 4;
m_rowheight = MYMAX(m_rowheight, 1);
}
const s32 s = skin->getSize(gui::EGDS_SCROLLBAR_SIZE);
m_scrollbar = Environment->addScrollBar(false,
core::rect<s32>(RelativeRect.getWidth() - s,
0,
RelativeRect.getWidth(),
RelativeRect.getHeight()),
this, -1);
m_scrollbar->setSubElement(true);
m_scrollbar->setTabStop(false);
m_scrollbar->setAlignment(gui::EGUIA_LOWERRIGHT, gui::EGUIA_LOWERRIGHT,
gui::EGUIA_UPPERLEFT, gui::EGUIA_LOWERRIGHT);
m_scrollbar->setVisible(false);
m_scrollbar->setPos(0);
setTabStop(true);
setTabOrder(-1);
updateAbsolutePosition();
core::rect<s32> relative_rect = m_scrollbar->getRelativePosition();
s32 width = (relative_rect.getWidth()/(2.0/3.0)) * porting::getDisplayDensity() *
g_settings->getFloat("gui_scaling");
m_scrollbar->setRelativePosition(core::rect<s32>(
relative_rect.LowerRightCorner.X-width,relative_rect.UpperLeftCorner.Y,
relative_rect.LowerRightCorner.X,relative_rect.LowerRightCorner.Y
));
}
开发者ID:Bremaweb,项目名称:minetest,代码行数:60,代码来源:guiTable.cpp
示例2: NoisePerlin2D
void MapgenV6::generateCaves(int max_stone_y)
{
float cave_amount = NoisePerlin2D(np_cave, node_min.X, node_min.Y, seed);
int volume_nodes = (node_max.X - node_min.X + 1) *
(node_max.Y - node_min.Y + 1) * MAP_BLOCKSIZE;
cave_amount = MYMAX(0.0, cave_amount);
u32 caves_count = cave_amount * volume_nodes / 50000;
u32 bruises_count = 1;
PseudoRandom ps(blockseed + 21343);
PseudoRandom ps2(blockseed + 1032);
if (ps.range(1, 6) == 1)
bruises_count = ps.range(0, ps.range(0, 2));
if (getBiome(v2s16(node_min.X, node_min.Z)) == BT_DESERT) {
caves_count /= 3;
bruises_count /= 3;
}
for (u32 i = 0; i < caves_count + bruises_count; i++) {
bool large_cave = (i >= caves_count);
CaveV6 cave(this, &ps, &ps2, large_cave);
cave.makeCave(node_min, node_max, max_stone_y);
}
}
开发者ID:4aiman,项目名称:Magichet-stable,代码行数:26,代码来源:mapgen_v6.cpp
示例3: sizeof
void MeshUpdateQueue::cleanupCache()
{
const int mapblock_kB = MAP_BLOCKSIZE * MAP_BLOCKSIZE * MAP_BLOCKSIZE *
sizeof(MapNode) / 1000;
g_profiler->avg("MeshUpdateQueue MapBlock cache size kB",
mapblock_kB * m_cache.size());
// The cache size is kept roughly below cache_soft_max_size, not letting
// anything get older than cache_seconds_max or deleted before 2 seconds.
const int cache_seconds_max = 10;
const int cache_soft_max_size = m_meshgen_block_cache_size * 1000 / mapblock_kB;
int cache_seconds = MYMAX(2, cache_seconds_max -
m_cache.size() / (cache_soft_max_size / cache_seconds_max));
int t_now = time(0);
for (std::map<v3s16, CachedMapBlockData*>::iterator it = m_cache.begin();
it != m_cache.end(); ) {
CachedMapBlockData *cached_block = it->second;
if (cached_block->refcount_from_queue == 0 &&
cached_block->last_used_timestamp < t_now - cache_seconds) {
m_cache.erase(it++);
delete cached_block;
} else {
++it;
}
}
}
开发者ID:Caellian,项目名称:minetest,代码行数:28,代码来源:mesh_generator_thread.cpp
示例4: compare2atoms
/* compare 2 atoms -- Hierarchy:
1. Atom type
2. distance from z-axis (bigger distances first)
3. angle around z -axis
4. z coordinate
*/
gint compare2atoms(const void* av,const void* bv)
{
gint d;
gdouble dd;
gdouble xa,xb;
gdouble eps;
MolSymAtom *a, *b;
a = (MolSymAtom*)av;
b = (MolSymAtom*)bv;
eps = (a->eps + b->eps)/2;
d = a->type - b->type;
if (d != 0) return d;
xa = a->position[0]*a->position[0] + a->position[1]*a->position[1];
xb = b->position[0]*b->position[0] + b->position[1]*b->position[1];
if (fabs(xa-xb) > eps*(xa+xb)) return (xa < xb) ? 1 : -1;
if ((xa > eps*eps) && (xb > eps*eps))
{
/* angle is only significant if not on z-axis */
xa = (a->position[1]>0) ? -1-a->position[0]/sqrt(xa) : 1+a->position[0]/sqrt(xa);
xb = (b->position[1]>0) ? -1-b->position[0]/sqrt(xb) : 1+b->position[0]/sqrt(xb);
if (fabs(xa-xb) > eps*2.*MYMAX(xa,xb)) return (xa > xb) ? 1 : -1;
}
dd = a->position[2] - b->position[2];
if (dd != 0.0) return (dd > 0) ? 1 : -1;
return 0;
}
开发者ID:xomachine,项目名称:gabedit,代码行数:37,代码来源:SymmetryOperators.c
示例5: NoisePerlin2D
void MapgenV6::generateCaves(int max_stone_y)
{
float cave_amount = NoisePerlin2D(np_cave, node_min.X, node_min.Y, seed);
int volume_nodes = (node_max.X - node_min.X + 1) *
(node_max.Y - node_min.Y + 1) * MAP_BLOCKSIZE;
cave_amount = MYMAX(0.0, cave_amount);
u32 caves_count = cave_amount * volume_nodes / 50000;
u32 bruises_count = 1;
PseudoRandom ps(blockseed + 21343);
PseudoRandom ps2(blockseed + 1032);
if (ps.range(1, 6) == 1)
bruises_count = ps.range(0, ps.range(0, 2));
if (getBiome(node_min) == BT_DESERT) {
caves_count /= 3;
bruises_count /= 3;
}
for (u32 i = 0; i < caves_count + bruises_count; i++) {
CavesV6 cave(ndef, &gennotify, water_level, c_water_source, c_lava_source);
bool large_cave = (i >= caves_count);
cave.makeCave(vm, node_min, node_max, &ps, &ps2,
large_cave, max_stone_y, heightmap);
}
}
开发者ID:alexxvk,项目名称:freeminer,代码行数:27,代码来源:mapgen_v6.cpp
示例6: n_water
void MapgenV7::generateRidgeTerrain()
{
if ((node_max.Y < water_level - 16) || (node_max.Y > shadow_limit))
return;
noise_ridge->perlinMap3D(node_min.X, node_min.Y - 1, node_min.Z);
noise_ridge_uwater->perlinMap2D(node_min.X, node_min.Z);
MapNode n_water(c_water_source);
MapNode n_air(CONTENT_AIR);
u32 index = 0;
float width = 0.2;
for (s16 z = node_min.Z; z <= node_max.Z; z++)
for (s16 y = node_min.Y - 1; y <= node_max.Y + 1; y++) {
u32 vi = vm->m_area.index(node_min.X, y, z);
for (s16 x = node_min.X; x <= node_max.X; x++, index++, vi++) {
int j = (z - node_min.Z) * csize.X + (x - node_min.X);
float uwatern = noise_ridge_uwater->result[j] * 2;
if (fabs(uwatern) > width)
continue;
float altitude = y - water_level;
float height_mod = (altitude + 17) / 2.5;
float width_mod = width - fabs(uwatern);
float nridge = noise_ridge->result[index] * MYMAX(altitude, 0) / 7.0;
if (nridge + width_mod * height_mod < 0.6)
continue;
vm->m_data[vi] = (y > water_level) ? n_air : n_water;
}
}
}
开发者ID:DarkDracoon,项目名称:minetest,代码行数:35,代码来源:mapgen_v7.cpp
示例7: MYMAX
size_t Ore::placeOre(Mapgen *mg, u32 blockseed,
v3s16 nmin, v3s16 nmax, s16 ore_zero_level)
{
// Ore y_min / y_max is displaced by ore_zero_level or remains unchanged.
// Any ore with a limit at +-MAX_MAP_GENERATION_LIMIT is considered to have
// that limit at +-infinity, so we do not alter that limit.
s32 y_min_disp = (y_min <= -MAX_MAP_GENERATION_LIMIT) ?
-MAX_MAP_GENERATION_LIMIT : y_min + ore_zero_level;
s32 y_max_disp = (y_max >= MAX_MAP_GENERATION_LIMIT) ?
MAX_MAP_GENERATION_LIMIT : y_max + ore_zero_level;
if (nmin.Y > y_max_disp || nmax.Y < y_min_disp)
return 0;
int actual_ymin = MYMAX(nmin.Y, y_min_disp);
int actual_ymax = MYMIN(nmax.Y, y_max_disp);
if (clust_size >= actual_ymax - actual_ymin + 1)
return 0;
nmin.Y = actual_ymin;
nmax.Y = actual_ymax;
generate(mg->vm, mg->seed, blockseed, nmin, nmax, mg->biomemap);
return 1;
}
开发者ID:Ekdohibs,项目名称:minetest,代码行数:26,代码来源:mg_ore.cpp
示例8: NoisePerlin2D
int MapgenV5::getSpawnLevelAtPoint(v2s16 p)
{
float f = 0.55 + NoisePerlin2D(&noise_factor->np, p.X, p.Y, seed);
if (f < 0.01)
f = 0.01;
else if (f >= 1.0)
f *= 1.6;
float h = NoisePerlin2D(&noise_height->np, p.X, p.Y, seed);
// noise_height 'offset' is the average level of terrain. At least 50% of
// terrain will be below this.
// Raising the maximum spawn level above 'water_level + 16' is necessary
// for when noise_height 'offset' is set much higher than water_level.
s16 max_spawn_y = MYMAX(noise_height->np.offset, water_level + 16);
// Starting spawn search at max_spawn_y + 128 ensures 128 nodes of open
// space above spawn position. Avoids spawning in possibly sealed voids.
for (s16 y = max_spawn_y + 128; y >= water_level; y--) {
float n_ground = NoisePerlin3D(&noise_ground->np, p.X, y, p.Y, seed);
if (n_ground * f > y - h) { // If solid
if (y < water_level || y > max_spawn_y)
return MAX_MAP_GENERATION_LIMIT; // Unsuitable spawn point
// y + 2 because y is surface and due to biome 'dust' nodes.
return y + 2;
}
}
// Unsuitable spawn position, no ground found
return MAX_MAP_GENERATION_LIMIT;
}
开发者ID:yzziizzy,项目名称:minetest,代码行数:32,代码来源:mapgen_v5.cpp
示例9: MYMAX
void MapgenV7::floatBaseExtentFromMap(s16 *float_base_min, s16 *float_base_max, int idx_xz)
{
// '+1' to avoid a layer of stone at y = MAX_MAP_GENERATION_LIMIT
s16 base_min = MAX_MAP_GENERATION_LIMIT + 1;
s16 base_max = MAX_MAP_GENERATION_LIMIT;
float n_base = noise_floatland_base->result[idx_xz];
if (n_base > 0.0f) {
float n_base_height =
MYMAX(noise_float_base_height->result[idx_xz], 1.0f);
float amp = n_base * n_base_height;
float ridge = n_base_height / 3.0f;
base_min = floatland_level - amp / 1.5f;
if (amp > ridge * 2.0f) {
// Lake bed
base_max = floatland_level - (amp - ridge * 2.0f) / 2.0f;
} else {
// Hills and ridges
float diff = fabs(amp - ridge) / ridge;
// Smooth ridges using the 'smoothstep function'
float smooth_diff = diff * diff * (3.0f - 2.0f * diff);
base_max = floatland_level + ridge - smooth_diff * ridge;
}
}
*float_base_min = base_min;
*float_base_max = base_max;
}
开发者ID:nilcity,项目名称:minetest,代码行数:29,代码来源:mapgen_v7.cpp
示例10: v3f
void CaveV7::makeCave(v3s16 nmin, v3s16 nmax, int max_stone_height) {
node_min = nmin;
node_max = nmax;
max_stone_y = max_stone_height;
main_direction = v3f(0, 0, 0);
// Allowed route area size in nodes
ar = node_max - node_min + v3s16(1, 1, 1);
// Area starting point in nodes
of = node_min;
// Allow a bit more
//(this should be more than the maximum radius of the tunnel)
s16 insure = 10;
s16 more = MYMAX(MAP_BLOCKSIZE - max_tunnel_diameter / 2 - insure, 1);
ar += v3s16(1,0,1) * more * 2;
of -= v3s16(1,0,1) * more;
route_y_min = 0;
// Allow half a diameter + 7 over stone surface
route_y_max = -of.Y + max_stone_y + max_tunnel_diameter / 2 + 7;
// Limit maximum to area
route_y_max = rangelim(route_y_max, 0, ar.Y - 1);
s16 min = 0;
if (node_min.Y < water_level && node_max.Y > water_level) {
min = water_level - max_tunnel_diameter/3 - of.Y;
route_y_max = water_level + max_tunnel_diameter/3 - of.Y;
}
route_y_min = ps->range(min, min + max_tunnel_diameter);
route_y_min = rangelim(route_y_min, 0, route_y_max);
s16 route_start_y_min = route_y_min;
s16 route_start_y_max = route_y_max;
route_start_y_min = rangelim(route_start_y_min, 0, ar.Y - 1);
route_start_y_max = rangelim(route_start_y_max, route_start_y_min, ar.Y - 1);
// Randomize starting position
orp = v3f(
(float)(ps->next() % ar.X) + 0.5,
(float)(ps->range(route_start_y_min, route_start_y_max)) + 0.5,
(float)(ps->next() % ar.Z) + 0.5
);
// Add generation notify begin event
v3s16 abs_pos(of.X + orp.X, of.Y + orp.Y, of.Z + orp.Z);
GenNotifyType notifytype = GENNOTIFY_LARGECAVE_BEGIN;
mg->gennotify.addEvent(notifytype, abs_pos);
// Generate some tunnel starting from orp
for (u16 j = 0; j < tunnel_routepoints; j++)
makeTunnel(j % dswitchint == 0);
// Add generation notify end event
abs_pos = v3s16(of.X + orp.X, of.Y + orp.Y, of.Z + orp.Z);
notifytype = GENNOTIFY_LARGECAVE_END;
mg->gennotify.addEvent(notifytype, abs_pos);
}
开发者ID:DaErHuo,项目名称:minetest,代码行数:60,代码来源:cavegen.cpp
示例11: time
void Client::makeScreenshot()
{
irr::video::IVideoDriver *driver = RenderingEngine::get_video_driver();
irr::video::IImage* const raw_image = driver->createScreenShot();
if (!raw_image)
return;
time_t t = time(NULL);
struct tm *tm = localtime(&t);
char timetstamp_c[64];
strftime(timetstamp_c, sizeof(timetstamp_c), "%Y%m%d_%H%M%S", tm);
std::string filename_base = g_settings->get("screenshot_path")
+ DIR_DELIM
+ std::string("screenshot_")
+ std::string(timetstamp_c);
std::string filename_ext = "." + g_settings->get("screenshot_format");
std::string filename;
u32 quality = (u32)g_settings->getS32("screenshot_quality");
quality = MYMIN(MYMAX(quality, 0), 100) / 100.0 * 255;
// Try to find a unique filename
unsigned serial = 0;
while (serial < SCREENSHOT_MAX_SERIAL_TRIES) {
filename = filename_base + (serial > 0 ? ("_" + itos(serial)) : "") + filename_ext;
std::ifstream tmp(filename.c_str());
if (!tmp.good())
break; // File did not apparently exist, we'll go with it
serial++;
}
if (serial == SCREENSHOT_MAX_SERIAL_TRIES) {
infostream << "Could not find suitable filename for screenshot" << std::endl;
} else {
irr::video::IImage* const image =
driver->createImage(video::ECF_R8G8B8, raw_image->getDimension());
if (image) {
raw_image->copyTo(image);
std::ostringstream sstr;
if (driver->writeImageToFile(image, filename.c_str(), quality)) {
sstr << "Saved screenshot to '" << filename << "'";
} else {
sstr << "Failed to save screenshot '" << filename << "'";
}
pushToChatQueue(new ChatMessage(CHATMESSAGE_TYPE_SYSTEM,
narrow_to_wide(sstr.str())));
infostream << sstr.str() << std::endl;
image->drop();
}
}
raw_image->drop();
}
开发者ID:EXio4,项目名称:minetest,代码行数:59,代码来源:client.cpp
示例12: getDigParams
DigParams getDigParams(const ItemGroupList &groups,
const ToolCapabilities *tp, float time_from_last_punch)
{
//infostream<<"getDigParams"<<std::endl;
/* Check group dig_immediate */
switch(itemgroup_get(groups, "dig_immediate")){
case 2:
//infostream<<"dig_immediate=2"<<std::endl;
return DigParams(true, 0.5, 0, "dig_immediate");
case 3:
//infostream<<"dig_immediate=3"<<std::endl;
return DigParams(true, 0.0, 0, "dig_immediate");
default:
break;
}
// Values to be returned (with a bit of conversion)
bool result_diggable = false;
float result_time = 0.0;
float result_wear = 0.0;
std::string result_main_group = "";
int level = itemgroup_get(groups, "level");
//infostream<<"level="<<level<<std::endl;
for(std::map<std::string, ToolGroupCap>::const_iterator
i = tp->groupcaps.begin(); i != tp->groupcaps.end(); i++){
const std::string &name = i->first;
//infostream<<"group="<<name<<std::endl;
const ToolGroupCap &cap = i->second;
int rating = itemgroup_get(groups, name);
float time = 0;
bool time_exists = cap.getTime(rating, &time);
if(!result_diggable || time < result_time){
if(cap.maxlevel >= level && time_exists){
result_diggable = true;
int leveldiff = cap.maxlevel - level;
result_time = time / MYMAX(1, leveldiff);
if(cap.uses != 0)
result_wear = 1.0 / cap.uses / pow(3.0, (double)leveldiff);
else
result_wear = 0;
result_main_group = name;
}
}
}
//infostream<<"result_diggable="<<result_diggable<<std::endl;
//infostream<<"result_time="<<result_time<<std::endl;
//infostream<<"result_wear="<<result_wear<<std::endl;
if(time_from_last_punch < tp->full_punch_interval){
float f = time_from_last_punch / tp->full_punch_interval;
//infostream<<"f="<<f<<std::endl;
result_time /= f;
result_wear /= f;
}
u16 wear_i = 65535.*result_wear;
return DigParams(result_diggable, result_time, wear_i, result_main_group);
}
开发者ID:0gb-us,项目名称:minetest,代码行数:59,代码来源:tool.cpp
示例13: n_dirt
void MapgenV6::addMud()
{
// 15ms @cs=8
//TimeTaker timer1("add mud");
MapNode n_dirt(c_dirt), n_gravel(c_gravel);
MapNode n_sand(c_sand), n_desert_sand(c_desert_sand);
MapNode addnode;
u32 index = 0;
for (s16 z = node_min.Z; z <= node_max.Z; z++)
for (s16 x = node_min.X; x <= node_max.X; x++, index++) {
// Randomize mud amount
s16 mud_add_amount = getMudAmount(index) / 2.0 + 0.5;
// Find ground level
s16 surface_y = find_stone_level(v2s16(x, z)); /////////////////optimize this!
// Handle area not found
if (surface_y == vm->m_area.MinEdge.Y - 1)
continue;
BiomeV6Type bt = getBiome(v3POS(x, surface_y, z));
addnode = (bt == BT_DESERT) ? n_desert_sand : n_dirt;
if (bt == BT_DESERT && surface_y + mud_add_amount <= water_level + 1) {
addnode = n_sand;
} else if (mud_add_amount <= 0) {
mud_add_amount = 1 - mud_add_amount;
addnode = n_gravel;
} else if (bt != BT_DESERT && getHaveBeach(index) &&
surface_y + mud_add_amount <= water_level + 2) {
addnode = n_sand;
}
if ((bt == BT_DESERT || bt == BT_TUNDRA) && surface_y > 20)
mud_add_amount = MYMAX(0, mud_add_amount - (surface_y - 20) / 5);
/* If topmost node is grass, change it to mud. It might be if it was
// flown to there from a neighboring chunk and then converted.
u32 i = vm->m_area.index(x, surface_y, z);
if (vm->m_data[i].getContent() == c_dirt_with_grass)
vm->m_data[i] = n_dirt;*/
// Add mud on ground
s16 mudcount = 0;
v3s16 em = vm->m_area.getExtent();
s16 y_start = surface_y + 1;
u32 i = vm->m_area.index(x, y_start, z);
for (s16 y = y_start; y <= node_max.Y; y++) {
if (mudcount >= mud_add_amount)
break;
vm->m_data[i] = addnode;
mudcount++;
vm->m_area.add_y(em, i, 1);
}
}
}
开发者ID:Wayward1,项目名称:freeminer,代码行数:59,代码来源:mapgen_v6.cpp
示例14: MYMAX
void Array::allocate(cl_vars_t clv)
{
size_t dim0 = MYMAX(get_property_int("dim0"), 1);
size_t dim1 = MYMAX(get_property_int("dim1"), 1);
bytes_per_element = get_num_bytes(properties["dtype"]);
nbytes = dim0 * dim1 * bytes_per_element;
#ifdef VERBOSE_COMPILATION
docs.compilation_ss << "Allocating: " << nbytes << "\tFor array: " << properties["name"] << std::endl;
#endif
cpu_data = (char *) calloc(nbytes, sizeof(char));
for(int i = 0 ; i < clv.num_devices ; i++)
{
cl_int err;
gpu_data[i] = clCreateBuffer(clv.context, CL_MEM_READ_WRITE, nbytes, NULL, &err);
CHK_ERR(err);
}
}
开发者ID:chick,项目名称:hindemith,代码行数:17,代码来源:Array.cpp
示例15: engrid_cell
static int engrid_cell(grid * gold, gridindex *index) {
vector gmin, gmax, gsize;
flt len;
int numobj, numcbrt, xs, ys, zs;
grid * g;
objectlist **list;
objectlist * newobj;
list = &gold->cells[index->z*gold->xsize*gold->ysize +
index->y*gold->xsize + index->x];
if (*list == NULL)
return 0;
numobj = cellbound(gold, index, &gmin, &gmax);
VSub(&gmax, &gmin, &gsize);
len = 1.0 / (MYMAX( MYMAX(gsize.x, gsize.y), gsize.z ));
gsize.x *= len;
gsize.y *= len;
gsize.z *= len;
if (numobj > 16) {
numcbrt = (int) cbrt(2*numobj);
xs = (int) ((flt) numcbrt * gsize.x);
if (xs < 1) xs = 1;
ys = (int) ((flt) numcbrt * gsize.y);
if (ys < 1) ys = 1;
zs = (int) ((flt) numcbrt * gsize.z);
if (zs < 1) zs = 1;
g = (grid *) newgrid(xs, ys, zs, gmin, gmax);
engrid_objectlist(g, list);
newobj = (objectlist *) rt_getmem(sizeof(objectlist));
newobj->obj = (object *) g;
newobj->next = *list;
*list = newobj;
g->nextobj = gold->objects;
gold->objects = (object *) g;
}
return 1;
}
开发者ID:YoonJungsik,项目名称:Kinect,代码行数:46,代码来源:grid.cpp
示例16: MYMAX
void GUITable::updateScrollBar()
{
s32 totalheight = m_rowheight * m_visible_rows.size();
s32 scrollmax = MYMAX(0, totalheight - AbsoluteRect.getHeight());
m_scrollbar->setVisible(scrollmax > 0);
m_scrollbar->setMax(scrollmax);
m_scrollbar->setSmallStep(m_rowheight);
m_scrollbar->setLargeStep(2 * m_rowheight);
}
开发者ID:Bremaweb,项目名称:minetest,代码行数:9,代码来源:guiTable.cpp
示例17: MYMAX
bool PlayerSAO::checkMovementCheat()
{
if (isAttached() || m_is_singleplayer ||
g_settings->getBool("disable_anticheat")) {
m_last_good_position = m_base_position;
return false;
}
bool cheated = false;
/*
Check player movements
NOTE: Actually the server should handle player physics like the
client does and compare player's position to what is calculated
on our side. This is required when eg. players fly due to an
explosion. Altough a node-based alternative might be possible
too, and much more lightweight.
*/
float player_max_speed = 0;
if (m_privs.count("fast") != 0) {
// Fast speed
player_max_speed = m_player->movement_speed_fast * m_physics_override_speed;
} else {
// Normal speed
player_max_speed = m_player->movement_speed_walk * m_physics_override_speed;
}
// Tolerance. The lag pool does this a bit.
//player_max_speed *= 2.5;
v3f diff = (m_base_position - m_last_good_position);
float d_vert = diff.Y;
diff.Y = 0;
float d_horiz = diff.getLength();
float required_time = d_horiz / player_max_speed;
if (d_vert > 0 && d_vert / player_max_speed > required_time)
required_time = d_vert / player_max_speed; // Moving upwards
if (m_move_pool.grab(required_time)) {
m_last_good_position = m_base_position;
} else {
const float LAG_POOL_MIN = 5.0;
float lag_pool_max = m_env->getMaxLagEstimate() * 2.0;
lag_pool_max = MYMAX(lag_pool_max, LAG_POOL_MIN);
if (m_time_from_last_teleport > lag_pool_max) {
actionstream << "Player " << m_player->getName()
<< " moved too fast; resetting position"
<< std::endl;
cheated = true;
}
setBasePosition(m_last_good_position);
}
return cheated;
}
开发者ID:MultiCraftProject,项目名称:MultiCraft,代码行数:56,代码来源:content_sao.cpp
示例18: MYMAX
bool MapNode::isLightDayNightEq(INodeDefManager *nodemgr) const
{
const ContentFeatures &f = nodemgr->get(*this);
bool isEqual;
if (f.param_type == CPT_LIGHT) {
u8 day = MYMAX(f.light_source, param1 & 0x0f);
u8 night = MYMAX(f.light_source, (param1 >> 4) & 0x0f);
isEqual = day == night;
} else {
开发者ID:hellotanm,项目名称:freeminer,代码行数:10,代码来源:mapnode.cpp
示例19: n_stone
int MapgenV7P::generateTerrain()
{
MapNode n_stone(c_stone);
MapNode n_bedrock(c_bedrock);
MapNode n_water(c_water_source);
MapNode n_air(CONTENT_AIR);
//// Calculate noise for terrain generation
noise_terrain_persist->perlinMap2D(node_min.X, node_min.Z);
float *persistmap = noise_terrain_persist->result;
noise_terrain_base ->perlinMap2D(node_min.X, node_min.Z, persistmap);
noise_terrain_alt ->perlinMap2D(node_min.X, node_min.Z, persistmap);
noise_height_select->perlinMap2D(node_min.X, node_min.Z);
if (spflags & MGV7P_MOUNTAINS) {
noise_mount_height->perlinMap2D(node_min.X, node_min.Z);
noise_mountain ->perlinMap2D(node_min.X, node_min.Z);
}
//// Place nodes
const v3s16 &em = vm->m_area.getExtent();
s16 stone_surface_max_y = -MAX_MAP_GENERATION_LIMIT;
u32 index2d = 0;
for (s16 z = node_min.Z; z <= node_max.Z; z++)
for (s16 x = node_min.X; x <= node_max.X; x++, index2d++) {
s16 surface_y = baseTerrainLevelFromMap(index2d);
if (spflags & MGV7P_MOUNTAINS)
surface_y = MYMAX(mountainLevelFromMap(index2d), surface_y);
if (surface_y > stone_surface_max_y)
stone_surface_max_y = surface_y;
u32 vi = vm->m_area.index(x, node_min.Y - 1, z);
for (s16 y = node_min.Y - 1; y <= node_max.Y + 1; y++) {
if (vm->m_data[vi].getContent() == CONTENT_IGNORE) {
if (y <= surface_y) {
if (y <= bedrock_level)
vm->m_data[vi] = n_bedrock; // Bedrock
else
vm->m_data[vi] = n_stone; // Base and mountain terrain
} else if (y <= water_level) {
vm->m_data[vi] = n_water; // Water
} else {
vm->m_data[vi] = n_air; // Air
}
}
vm->m_area.add_y(em, vi, 1);
}
}
return stone_surface_max_y;
}
开发者ID:MultiCraftProject,项目名称:MultiCraft,代码行数:55,代码来源:mapgen_v7p.cpp
示例20: pr
void OreStratum::generate(MMVManip *vm, int mapseed, u32 blockseed,
v3s16 nmin, v3s16 nmax, u8 *biomemap)
{
PcgRandom pr(blockseed + 4234);
MapNode n_ore(c_ore, 0, ore_param2);
if (flags & OREFLAG_USE_NOISE) {
if (!(noise && noise_stratum_thickness)) {
int sx = nmax.X - nmin.X + 1;
int sz = nmax.Z - nmin.Z + 1;
noise = new Noise(&np, 0, sx, sz);
noise_stratum_thickness = new Noise(&np_stratum_thickness, 0, sx, sz);
}
noise->perlinMap2D(nmin.X, nmin.Z);
noise_stratum_thickness->perlinMap2D(nmin.X, nmin.Z);
}
size_t index = 0;
for (int z = nmin.Z; z <= nmax.Z; z++)
for (int x = nmin.X; x <= nmax.X; x++, index++) {
if (biomemap && !biomes.empty()) {
std::unordered_set<u8>::const_iterator it = biomes.find(biomemap[index]);
if (it == biomes.end())
continue;
}
int y0;
int y1;
if (flags & OREFLAG_USE_NOISE) {
float nmid = noise->result[index];
float nhalfthick = noise_stratum_thickness->result[index] / 2.0f;
y0 = MYMAX(nmin.Y, nmid - nhalfthick);
y1 = MYMIN(nmax.Y, nmid + nhalfthick);
} else {
y0 = nmin.Y;
y1 = nmax.Y;
}
for (int y = y0; y <= y1; y++) {
if (pr.range(1, clust_scarcity) != 1)
continue;
u32 i = vm->m_area.index(x, y, z);
if (!vm->m_area.contains(i))
continue;
if (!CONTAINS(c_wherein, vm->m_data[i].getContent()))
continue;
vm->m_data[i] = n_ore;
}
}
}
开发者ID:EXio4,项目名称:minetest,代码行数:54,代码来源:mg_ore.cpp
注:本文中的MYMAX函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论