typedef struct { int maxpoints; int something; vector pos[64]; } spline_t; typedef struct { int numsplines; spline_t spline[64]; } splinedata_t; static splinedata_t *splinedata; static var float splinefile = -1; void() spline_init = { /*precache the shader*/ shaderforname("camsplineshader", "{\n{\nmap splinetexture.tga\nblendfunc blend\nrgbgen vertex\nalphagen vertex\n}\n}\n"); splinefile = fopen("spline.dat", FILE_MMAP_RW, sizeof(splinedata_t)); if (splinefile < 0) { /*too lazy to create a file, just use it as a malloc*/ splinefile = fopen("", FILE_MMAP_RW, sizeof(splinedata_t)); } splinedata = (splinedata_t*)(fgets(splinefile)); print("Temp test code\n"); splinedata->numsplines = 1; splinedata->spline[0].maxpoints = 4; splinedata->spline[0].pos[0] = '-1024 -1024'; splinedata->spline[0].pos[1] = '+1024 -1024'; splinedata->spline[0].pos[2] = '+1024 +1024'; splinedata->spline[0].pos[3] = '-1024 +1024'; splinedata->spline[0].pos[4] = '-1024 +1024'; splinedata->spline[0].pos[5] = '+1024 +1024'; splinedata->spline[0].pos[6] = '+1024 -1024'; splinedata->spline[0].pos[7] = '-1024 -1024'; }; void() spline_shutdown = { fclose(splinefile); splinefile = -1; }; /*called each frame*/ void(float attime) spline_overrides = { local spline_t *spline; /*find correct spline based upon time global*/ if (spline->something) { // setviewprop(VF_ORIGIN, somepos); // setviewprop(VF_ANGLE, someangle); // setviewprop(VF_AFOV, 90); } }; static void(spline_t *s) spline_draw = { /*example of drawing convex polygons*/ R_BeginPolygon("camsplineshader"); R_PolygonVertex(s->pos[0], '0 0', '1 1 1', 1); R_PolygonVertex(s->pos[1], '1 0', '1 1 1', 1); R_PolygonVertex(s->pos[2], '1 1', '1 1 1', 1); R_PolygonVertex(s->pos[3], '0 1', '1 1 1', 1); R_EndPolygon(); /*do another with the same shader*/ R_PolygonVertex(s->pos[4], '0 0', '1 1 1', 1); R_PolygonVertex(s->pos[5], '1 0', '1 1 1', 1); R_PolygonVertex(s->pos[6], '1 1', '1 1 1', 1); R_PolygonVertex(s->pos[7], '0 1', '1 1 1', 1); R_EndPolygon(); }; void() editor_spline_add = { int i; if (splinefile < 0) spline_init(); /*add visible splines to the scene*/ for (i = 0; i < splinedata->numsplines; i+=1i) spline_draw(&splinedata->spline[i]); /*sort out the overrides*/ // spline_overrides(simtime); }; void(vector curmousepos) editor_spline_overlay = { if (splinefile < 0) spline_init(); /*draw menu*/ /*dunno if the light editor has any convienient code*/ drawrawstring('0 32 0', "crappy not-implemented menu", '8 8 0', '1 1 1', 1); }; float(float keycode, float unicode, vector curmousepos) editor_spline_key { /*print/figure out the codes yourself :P */ return FALSE; };