… | |
… | |
1323 | } |
1323 | } |
1324 | |
1324 | |
1325 | void _post_tick () |
1325 | void _post_tick () |
1326 | CODE: |
1326 | CODE: |
1327 | coroapi::next_cede = SvNV (sv_next_tick) - TICK * (1. - 1. / CEDES_PER_TICK); |
1327 | coroapi::next_cede = SvNV (sv_next_tick) - TICK * (1. - 1. / CEDES_PER_TICK); |
|
|
1328 | |
|
|
1329 | # support function for map-world.ext |
|
|
1330 | void _quantise (SV *data_sv, SV *plt_sv) |
|
|
1331 | CODE: |
|
|
1332 | { |
|
|
1333 | if (!SvROK (plt_sv) || SvTYPE (SvRV (plt_sv)) != SVt_PVAV) |
|
|
1334 | croak ("_quantise called with invalid agruments"); |
|
|
1335 | |
|
|
1336 | plt_sv = SvRV (plt_sv); |
|
|
1337 | SV **plt = AvARRAY (plt_sv); |
|
|
1338 | int plt_count = AvFILL (plt_sv) + 1; |
|
|
1339 | |
|
|
1340 | STRLEN len; |
|
|
1341 | char *data = SvPVbyte (data_sv, len); |
|
|
1342 | char *dst = data; |
|
|
1343 | |
|
|
1344 | while (len >= 3) |
|
|
1345 | { |
|
|
1346 | for (SV **val_sv = plt + plt_count; val_sv-- > plt; ) |
|
|
1347 | { |
|
|
1348 | char *val = SvPVX (*val_sv); |
|
|
1349 | |
|
|
1350 | if (val [0] == data [0] |
|
|
1351 | && val [1] == data [1] |
|
|
1352 | && val [2] == data [2]) |
|
|
1353 | { |
|
|
1354 | *dst++ = val [3]; |
|
|
1355 | goto next; |
|
|
1356 | } |
|
|
1357 | } |
|
|
1358 | |
|
|
1359 | croak ("_quantise: color not found in palette: #%02x%02x%02x, at offset %d %d", |
|
|
1360 | (uint8_t)data [0], (uint8_t)data [1], (uint8_t)data [2], |
|
|
1361 | dst - SvPVX (data_sv), len); |
|
|
1362 | |
|
|
1363 | next: |
|
|
1364 | data += 3; |
|
|
1365 | len -= 3; |
|
|
1366 | } |
|
|
1367 | |
|
|
1368 | SvCUR_set (data_sv, dst - SvPVX (data_sv)); |
|
|
1369 | } |
1328 | |
1370 | |
1329 | NV floor (NV x) |
1371 | NV floor (NV x) |
1330 | |
1372 | |
1331 | NV ceil (NV x) |
1373 | NV ceil (NV x) |
1332 | |
1374 | |