diff --git a/textures.cpp b/textures.cpp index 601acacd..d3c503c0 100644 --- a/textures.cpp +++ b/textures.cpp @@ -1676,6 +1676,16 @@ void texture_config::remap() { } } +#if CAP_TEXTURE +texture_data txp; + +EX double get_txp(ld x, ld y, int p) { + if(txp.texture_pixels.empty()) return 0.5; + color_t col = txp.get_texture_pixel(txp.twidth * x, txp.twidth * y); + return part(col, p) / 255.; + } +#endif + int textureArgs() { using namespace arg; @@ -1696,6 +1706,14 @@ int textureArgs() { shift(); config.configname = args(); } + else if(argis("-txpsize")) { + shift(); txp.twidth = argi(); + } + + else if(argis("-txpf")) { + shift(); txp.readtexture(args()); + } + else if(argis("-txcl")) { PHASE(3); drawscreen(); config.load(); diff --git a/util.cpp b/util.cpp index 92938788..ebdf4b62 100644 --- a/util.cpp +++ b/util.cpp @@ -219,6 +219,12 @@ cld exp_parser::parse(int prio) { dynamicval d(extra_params[name], val); return parsepar(); } + #if CAP_TEXTURE + else if(eat("txp(")) { + cld val = parsepar(); + return texture::get_txp(real(val), imag(val), int(real(extra_params["p"]) + .5)-1); + } + #endif else if(next() == '(') at++, res = parsepar(); else { string number;