#include #include #include "Core.h" #include "Console.h" #include "Export.h" #include "PluginManager.h" #include #include "df/renderer.h" #include "df/enabler.h" #include "renderer_opengl.hpp" using namespace DFHack; using std::vector; using std::string; enum RENDERER_MODE { MODE_DEFAULT,MODE_TRIPPY,MODE_TRUECOLOR }; RENDERER_MODE current_mode=MODE_DEFAULT; static command_result rendermax(color_ostream &out, vector & parameters); DFHACK_PLUGIN("rendermax"); DFhackCExport command_result plugin_init (color_ostream &out, std::vector &commands) { commands.push_back(PluginCommand( "rendermax", "switch rendering engine.", rendermax, false, " rendermax trippy\n" " rendermax truecolor red|green|blue|white\n" " rendermax disable\n" )); return CR_OK; } void removeOld() { if(current_mode!=MODE_DEFAULT) delete df::global::enabler->renderer; current_mode=MODE_DEFAULT; } void installNew(df::renderer* r,RENDERER_MODE newMode) { df::global::enabler->renderer=r; current_mode=newMode; } static command_result rendermax(color_ostream &out, vector & parameters) { if(parameters.size()==0) return CR_WRONG_USAGE; string cmd=parameters[0]; if(cmd=="trippy") { removeOld(); installNew(new renderer_trippy(df::global::enabler->renderer),MODE_TRIPPY); return CR_OK; } else if(cmd=="truecolor") { if(current_mode!=MODE_TRUECOLOR) { removeOld(); installNew(new renderer_test(df::global::enabler->renderer),MODE_TRUECOLOR); } if(current_mode==MODE_TRUECOLOR && parameters.size()==2) { lightCell red(1,0,0),green(0,1,0),blue(0,0,1),white(1,1,1); lightCell cur=white; lightCell dim(0.2,0.2,0.2); string col=parameters[1]; if(col=="red") cur=red; else if(col=="green") cur=green; else if(col=="blue") cur=blue; renderer_test* r=reinterpret_cast(df::global::enabler->renderer); tthread::lock_guard guard(r->dataMutex); int h=df::global::gps->dimy; int w=df::global::gps->dimx; int cx=w/2; int cy=h/2; int rad=cx; if(rad>cy)rad=cy; rad/=2; int radsq=rad*rad; for(size_t i=0;ilightGrid.size();i++) { r->lightGrid[i]=dim; } for(int i=-rad;ilightGrid[(cx+i)*h+(cy+j)]=dim+cur*val; } } return CR_OK; } } else if(cmd=="disable") { if(current_mode==MODE_DEFAULT) out.print("%s\n","Not installed, doing nothing."); else removeOld(); return CR_OK; } return CR_WRONG_USAGE; }