Jogi's changes.
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@3985 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
parent
37ce84814d
commit
3c4100a2a9
4 changed files with 750 additions and 167 deletions
|
@ -13,8 +13,6 @@ typedef struct
|
|||
{
|
||||
float starttime;
|
||||
float endtime;
|
||||
float startfov;
|
||||
float endfov;
|
||||
spline_t spline;
|
||||
} cam_t;
|
||||
|
||||
|
@ -31,6 +29,8 @@ typedef struct
|
|||
|
||||
static camdata_t *camdata;
|
||||
static var float splinefile = -1;
|
||||
static int edit_type = 0;
|
||||
static vector submenu_position;
|
||||
|
||||
void() spline_init =
|
||||
{
|
||||
|
@ -113,29 +113,118 @@ void(vector p1, vector p2, vector color) fakeline = {
|
|||
R_PolygonVertex(p1-'0 0 1', '0 1', color,1);
|
||||
R_PolygonVertex(p2-'0 0 1', '1 1', color,1);
|
||||
R_PolygonVertex(p2+'0 0 1', '1 0', color,1);
|
||||
R_PolygonVertex(p1-'0 0 1', '0 0', color,1);
|
||||
R_PolygonVertex(p1+'0 0 1', '0 1', color,1);
|
||||
R_PolygonVertex(p2+'0 0 1', '1 1', color,1);
|
||||
R_PolygonVertex(p2-'0 0 1', '1 0', color,1);
|
||||
|
||||
R_PolygonVertex(p2+'0 0 1', '0 0', color,1);
|
||||
R_PolygonVertex(p2-'0 0 1', '0 1', color,1);
|
||||
R_PolygonVertex(p1-'0 0 1', '1 1', color,1);
|
||||
R_PolygonVertex(p1-'0 0 1', '1 0', color,1);
|
||||
R_EndPolygon();
|
||||
};
|
||||
|
||||
void (vector pos, vector color) draw_point
|
||||
void (vector p1, vector p2, float size, vector color) fakeline_new
|
||||
{
|
||||
local vector pos1, pos2;
|
||||
//x
|
||||
pos1 = pos - '10 0 0';
|
||||
pos2 = pos + '10 0 0';
|
||||
fakeline(pos1, pos2, color);
|
||||
//y
|
||||
pos1 = pos - '0 10 0';
|
||||
pos2 = pos + '0 10 0';
|
||||
fakeline(pos1, pos2, color);
|
||||
//z -- this isnt drawing right for some reason
|
||||
pos1 = pos - '0 0 10';
|
||||
pos2 = pos + '0 0 10';
|
||||
fakeline(pos1, pos2, color);
|
||||
local vector diff;
|
||||
|
||||
diff = p2 - p1;
|
||||
normalize(diff);
|
||||
};
|
||||
|
||||
void (vector pos, float size, vector color) draw_point
|
||||
{
|
||||
local int i;
|
||||
local vector offsets[5];
|
||||
local vector points[8];
|
||||
local vector point, point1;
|
||||
|
||||
if (size == 0)
|
||||
return;
|
||||
|
||||
point_x = -(size/2);
|
||||
point_y = -(size/2);
|
||||
offsets[0] = point;
|
||||
point_x = size/2;
|
||||
point_y = -(size/2);
|
||||
offsets[1] = point;
|
||||
point_x = -(size/2);
|
||||
point_y = (size/2);
|
||||
offsets[2] = point;
|
||||
point_x = (size/2);
|
||||
point_y = (size/2);
|
||||
offsets[3] = point;
|
||||
|
||||
point1_z = -(size/2);
|
||||
for (i=0; i<4; i++)
|
||||
points[i] = offsets[i] + point1 + pos;
|
||||
|
||||
point1_z = (size/2);
|
||||
for (i=4; i<8; i++)
|
||||
points[i] = offsets[i-4] + point1 + pos;
|
||||
|
||||
/*
|
||||
* bottom
|
||||
* 2 3
|
||||
* 0 1
|
||||
*
|
||||
* top
|
||||
* 6 7
|
||||
* 4 5
|
||||
*/
|
||||
|
||||
// bottom
|
||||
R_BeginPolygon("camsplineshader");
|
||||
R_PolygonVertex(points[3], '0 0', color ,1);
|
||||
R_PolygonVertex(points[2], '0 1', color ,1);
|
||||
R_PolygonVertex(points[0], '1 1', color,1);
|
||||
R_PolygonVertex(points[1], '1 0', color,1);
|
||||
R_EndPolygon();
|
||||
|
||||
// top
|
||||
R_BeginPolygon("camsplineshader");
|
||||
R_PolygonVertex(points[5], '0 0', color ,1);
|
||||
R_PolygonVertex(points[4], '0 1', color ,1);
|
||||
R_PolygonVertex(points[6], '1 1', color,1);
|
||||
R_PolygonVertex(points[7], '1 0', color,1);
|
||||
R_EndPolygon();
|
||||
|
||||
// front
|
||||
R_BeginPolygon("camsplineshader");
|
||||
R_PolygonVertex(points[4], '0 0', color ,1);
|
||||
R_PolygonVertex(points[5], '0 1', color ,1);
|
||||
R_PolygonVertex(points[1], '1 1', color,1);
|
||||
R_PolygonVertex(points[0], '1 0', color,1);
|
||||
R_EndPolygon();
|
||||
|
||||
//back
|
||||
R_BeginPolygon("camsplineshader");
|
||||
R_PolygonVertex(points[7], '0 0', color ,1);
|
||||
R_PolygonVertex(points[6], '0 1', color ,1);
|
||||
R_PolygonVertex(points[2], '1 1', color,1);
|
||||
R_PolygonVertex(points[3], '1 0', color,1);
|
||||
R_EndPolygon();
|
||||
|
||||
//left
|
||||
R_BeginPolygon("camsplineshader");
|
||||
R_PolygonVertex(points[6], '0 0', color ,1);
|
||||
R_PolygonVertex(points[4], '0 1', color ,1);
|
||||
R_PolygonVertex(points[0], '1 1', color,1);
|
||||
R_PolygonVertex(points[2], '1 0', color,1);
|
||||
R_EndPolygon();
|
||||
|
||||
//right
|
||||
R_BeginPolygon("camsplineshader");
|
||||
R_PolygonVertex(points[5], '0 0', color ,1);
|
||||
R_PolygonVertex(points[7], '0 1', color ,1);
|
||||
R_PolygonVertex(points[3], '1 1', color,1);
|
||||
R_PolygonVertex(points[1], '1 0', color,1);
|
||||
R_EndPolygon();
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
};
|
||||
|
||||
// time has to be between 0 and 1
|
||||
|
@ -198,11 +287,9 @@ vector(spline_t *s, float frac_time) spline_calculate_position =
|
|||
// first point is always an entry point last point also
|
||||
t5 = 1 / (s->numpoints - 3);
|
||||
for (i=1, t4=t5; t4<frac_time; t4 = t4 + t5)
|
||||
{
|
||||
i++;
|
||||
}
|
||||
//print(sprintf("end: %i\n", i));
|
||||
if (i > s->numpoints)
|
||||
|
||||
if (i >= s->numpoints)
|
||||
{
|
||||
print(sprintf("something went wrong while getting the start point!\n"));
|
||||
return s->pos[0];
|
||||
|
@ -243,9 +330,6 @@ vector(spline_t *s, float frac_time) spline_calculate_position =
|
|||
t4 = -0.5 * point1_z + 1.5 * point2_z + (-1.5 * point3_z) + 0.5 * point4_z;
|
||||
r_z = ((t4 * t_scaled + t3)*t_scaled + t2)*t_scaled + t1;
|
||||
|
||||
|
||||
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
|
@ -260,9 +344,10 @@ static void(spline_t *s) spline_draw =
|
|||
local vector bdir;
|
||||
local int i;
|
||||
local vector color;
|
||||
local float psize;
|
||||
|
||||
/*example of drawing convex polygons*/
|
||||
R_BeginPolygon("camsplineshader");
|
||||
///R_BeginPolygon("camsplineshader");
|
||||
|
||||
vpos = getviewprop(VF_ORIGIN);
|
||||
|
||||
|
@ -295,18 +380,56 @@ static void(spline_t *s) spline_draw =
|
|||
// draw points
|
||||
for (i=0; i<s->numpoints; i++)
|
||||
{
|
||||
psize = 5;
|
||||
color = '0.25 0.25 0.25';
|
||||
if (i == s->selected_point)
|
||||
{
|
||||
psize = 10;
|
||||
color = '1 1 1';
|
||||
draw_point(s->pos[i], color);
|
||||
}
|
||||
draw_point(s->pos[i], psize, color);
|
||||
}
|
||||
// draw position
|
||||
pos = spline_calculate_position(s, s->position);
|
||||
draw_point(pos, '1 0 0');
|
||||
draw_point(pos, 3, '1 0 0');
|
||||
};
|
||||
|
||||
void(float attime) spline_overrides =
|
||||
{
|
||||
local vector position, view;
|
||||
local cam_t *cpos;
|
||||
local cam_t *cview;
|
||||
local float stime;
|
||||
local int i;
|
||||
|
||||
for (i=0; i < camdata->position_count; i++)
|
||||
{
|
||||
cpos = &camdata->position[i];
|
||||
if (cpos->starttime <= attime && cpos->endtime > attime)
|
||||
break;
|
||||
}
|
||||
|
||||
if (i == camdata->position_count)
|
||||
return;
|
||||
|
||||
for (i=0; i < camdata->view_count; i++)
|
||||
{
|
||||
cview = &camdata->view[i];
|
||||
if (cview->starttime <= attime && cview->endtime > attime)
|
||||
break;
|
||||
}
|
||||
|
||||
if (i == camdata->view_count)
|
||||
return;
|
||||
|
||||
stime = (attime - cpos->starttime) / (cpos->endtime - cpos->starttime);
|
||||
position = spline_calculate_position(&cpos->spline, stime);
|
||||
|
||||
stime = (attime - cview->starttime) / (cview->endtime - cview->starttime);
|
||||
view = spline_calculate_position(&cview->spline, stime);
|
||||
|
||||
setviewprop(VF_ORIGIN, position);
|
||||
setviewprop(VF_ANGLES, vectoangles(view - position));
|
||||
};
|
||||
/*called to move the view to some simulation time*/
|
||||
/*
|
||||
|
@ -340,123 +463,82 @@ void(float attime) spline_overrides =
|
|||
|
||||
void() editor_spline_add =
|
||||
{
|
||||
int i;
|
||||
local int i;
|
||||
local float ctime, stime;
|
||||
|
||||
if (splinefile < 0)
|
||||
spline_init();
|
||||
|
||||
ctime = gettime(5);
|
||||
|
||||
/*add visible splines to the scene*/
|
||||
for (i = 0; i < camdata->position_count; i+=1i)
|
||||
spline_draw(&camdata->position[i].spline);
|
||||
for (i = 0; i < camdata->view_count; i+=1i)
|
||||
spline_draw(&camdata->view[i].spline);
|
||||
|
||||
/*sort out the overrides*/
|
||||
// spline_overrides(simtime);
|
||||
};
|
||||
float slidertestfloat1, slidertestfloat2;
|
||||
float slidertestfloat1, slidertestfloat2, slidertestfloat3;
|
||||
static float *curslider;
|
||||
void(string fieldname, vector pos, vector mousepos, float *value, float minv, float maxv, float key) sliderf_widgit =
|
||||
static menu_t menu;
|
||||
|
||||
int (vector *curmousepos, vector mousediff, float key) submenu =
|
||||
{
|
||||
local vector rpos, col;
|
||||
local float f;
|
||||
rpos = pos + '132 0 0';
|
||||
/*if they're dragging us, update*/
|
||||
if ((int)curslider == (int)value)
|
||||
local vector pos;
|
||||
local spline_t *s;
|
||||
local vector point;
|
||||
|
||||
pos = submenu_position;
|
||||
|
||||
menu->key = key;
|
||||
menu->mousepos = curmousepos;
|
||||
menu->mousediff = mousediff;
|
||||
|
||||
if (edit_type == 0)
|
||||
s = &camdata.position[camdata.position_selected].spline;
|
||||
else
|
||||
s = &camdata.view[camdata.view_selected].spline;
|
||||
if (s->numpoints > 0)
|
||||
{
|
||||
if (mousedown == 1)
|
||||
{
|
||||
*value = ((mousepos_x - 4 - rpos)/(9*8)*(maxv-minv)) + minv;
|
||||
*value = bound(minv, *value, maxv);
|
||||
}
|
||||
else
|
||||
curslider = (int*)__NULL__;
|
||||
point = s->pos[s->selected_point];
|
||||
sliderf_fixed_widgit(&menu, "x:", pos, &point_x);pos_y+=8;
|
||||
sliderf_fixed_widgit(&menu, "y:", pos, &point_y);pos_y+=8;
|
||||
sliderf_fixed_widgit(&menu, "z:", pos, &point_z);pos_y+=8;
|
||||
s->pos[s->selected_point] = point;
|
||||
}
|
||||
|
||||
if (key == -1)
|
||||
{
|
||||
if (mousepos_y >= pos_y && mousepos_y < pos_y + 8)
|
||||
{
|
||||
col_x = (sin(time*3.14)+1) / 2;
|
||||
col_y = col_x;
|
||||
col_z = 1;
|
||||
}
|
||||
else
|
||||
col = '1 1 1';
|
||||
|
||||
f = *value;
|
||||
if (f < minv)
|
||||
f = minv;
|
||||
if (f > maxv)
|
||||
f = maxv;
|
||||
drawstring(pos, fieldname, '8 8 0', col, 1, 0);
|
||||
pos = rpos;
|
||||
rpos_x -= 4;
|
||||
drawstring(rpos, "^Ue080^Ue081^Ue081^Ue081^Ue081^Ue081^Ue081^Ue081^Ue081^Ue081^Ue082", '8 8 0', '1 1 1', 1, 0);
|
||||
drawstring(rpos + '88 0', ftos(f), '8 8 0', col, 1, 0);
|
||||
rpos_x += 4;
|
||||
rpos_x += 9*8*(f - minv) / (maxv - minv);
|
||||
drawstring(rpos, "^Ue083", '8 8 0', '1 1 1', 1, 0);
|
||||
}
|
||||
else if (mousepos_y >= pos_y && mousepos_y < pos_y + 8)
|
||||
{
|
||||
if (key == 512)
|
||||
curslider = value;
|
||||
else if (key == 515)
|
||||
*value = bound(minv, *value + (maxv - minv) / 10, maxv);
|
||||
else if (key == 516)
|
||||
*value = bound(minv, *value - (maxv - minv) / 10, maxv);
|
||||
}
|
||||
};
|
||||
|
||||
void(string fieldname, vector pos, vector mousepos, float *value, float key) checkboxf_widgit =
|
||||
{
|
||||
local vector rpos, col;
|
||||
rpos = pos + '132 0 0';
|
||||
|
||||
if (key == -1)
|
||||
{
|
||||
if (mousepos_y >= pos_y && mousepos_y < pos_y + 8)
|
||||
{
|
||||
col_x = (sin(time*3.14)+1) / 2;
|
||||
col_y = col_x;
|
||||
col_z = 1;
|
||||
}
|
||||
else
|
||||
col = '1 1 1';
|
||||
|
||||
drawstring(pos, fieldname, '8 8 0', col, 1, 0);
|
||||
rpos_x -= 4;
|
||||
drawstring(rpos, "^Ue080^Ue082", '8 8 0', '1 1 1', 1, 0);
|
||||
drawstring(rpos + '88 0', ((*value) ?"TRUE":"FALSE"), '8 8 0', col, 1, 0);
|
||||
rpos_x += 4;
|
||||
if (*value)
|
||||
drawstring(rpos, "^Ue083", '8 8 0', '1 1 1', 1, 0);
|
||||
}
|
||||
else if (mousepos_y >= pos_y && mousepos_y < pos_y + 8)
|
||||
{
|
||||
if (key == 512)
|
||||
*value = !*value;
|
||||
else if (key == 515)
|
||||
*value = !*value;
|
||||
else if (key == 516)
|
||||
*value = !*value;
|
||||
}
|
||||
};
|
||||
|
||||
void(vector curmousepos, float key) testmenu =
|
||||
{
|
||||
vector pos;
|
||||
|
||||
pos = '0 80';
|
||||
sliderf_widgit ("test float a", pos, curmousepos, &slidertestfloat1, 100, 200, key);pos_y += 8;
|
||||
sliderf_widgit ("test float b", pos, curmousepos, &slidertestfloat2, 0, 1, key);pos_y += 8;
|
||||
|
||||
checkboxf_widgit ("checkbox test", pos, curmousepos, &slidertestfloat2, key);pos_y += 8;
|
||||
}
|
||||
|
||||
void(vector curmousepos) editor_spline_overlay =
|
||||
/*
|
||||
* the widgets have to handle mouse properly
|
||||
* if mousedown == 1 && curslider == self -> return
|
||||
*/
|
||||
int (vector *curmousepos, vector mousediff, float key) testmenu =
|
||||
{
|
||||
local vector pos;
|
||||
local int reset_mouse = 0;
|
||||
|
||||
pos = '0 80';
|
||||
/*
|
||||
sliderf_widgit ("test float a", pos, curmousepos, mousediff, &slidertestfloat1, 100, 200);pos_y += 8;
|
||||
sliderf_widgit ("test float b", pos, curmousepos, mousediff, &slidertestfloat2, 0, 1);pos_y += 8;
|
||||
|
||||
checkboxf_widgit ("checkbox test", pos, curmousepos, &slidertestfloat2, key);pos_y += 32;
|
||||
sliderf_fixed_widgit("test float c", pos, curmousepos, mousediff, &slidertestfloat3, key, 1i);pos_y += 32;
|
||||
*/
|
||||
|
||||
//curmousepos = '0 0 0';
|
||||
|
||||
return reset_mouse;
|
||||
}
|
||||
|
||||
int (vector *curmousepos, vector mousediff) editor_spline_overlay =
|
||||
{
|
||||
local vector pos, v;
|
||||
local spline_t *s;
|
||||
local int ri;
|
||||
|
||||
if (splinefile < 0)
|
||||
spline_init();
|
||||
|
@ -465,7 +547,11 @@ void(vector curmousepos) editor_spline_overlay =
|
|||
/*draw menu*/
|
||||
/*dunno if the light editor has any convienient code*/
|
||||
pos_y = 40;
|
||||
drawrawstring(pos, sprintf("cam : %i / %i", camdata->position_selected + 1i , camdata->position_count), '8 8 0', '1 1 1', 1);
|
||||
if (edit_type == 0)
|
||||
drawrawstring(pos, "cam", '8 8 0', '1 0 0', 1);
|
||||
else
|
||||
drawrawstring(pos, "cam", '8 8 0', '1 1 1', 1);
|
||||
drawrawstring(pos + '24 0 0', sprintf(" : %i / %i", camdata->position_selected + 1i , camdata->position_count), '8 8 0', '1 1 1', 1);
|
||||
if (camdata->position_count)
|
||||
{
|
||||
pos_y += 8;
|
||||
|
@ -474,9 +560,24 @@ void(vector curmousepos) editor_spline_overlay =
|
|||
drawrawstring(pos, sprintf(" point: %i / %i -- %f %f %f", s->selected_point + 1i, s->numpoints, v_x, v_y, v_z), '8 8 0', '1 1 1', 1);
|
||||
}
|
||||
pos_y += 8;
|
||||
drawrawstring(pos, sprintf("view : %i / %i", camdata->view_selected + 1i, camdata->view_count), '8 8 0', '1 1 1', 1);
|
||||
if (edit_type == 1)
|
||||
drawrawstring(pos, "view", '8 8 0', '1 0 0', 1);
|
||||
else
|
||||
drawrawstring(pos, "view", '8 8 0', '1 1 1', 1);
|
||||
drawrawstring(pos + '32 0 0', sprintf(" : %i / %i", camdata->view_selected + 1i, camdata->view_count), '8 8 0', '1 1 1', 1);
|
||||
if (camdata->view_count)
|
||||
{
|
||||
pos_y += 8;
|
||||
s = &camdata->view[camdata->view_selected].spline;
|
||||
v = s->pos[s->selected_point];
|
||||
drawrawstring(pos, sprintf(" point: %i / %i -- %f %f %f", s->selected_point + 1i, s->numpoints, v_x, v_y, v_z), '8 8 0', '1 1 1', 1);
|
||||
}
|
||||
|
||||
testmenu(curmousepos, -1);
|
||||
submenu_position = pos + '0 8';
|
||||
|
||||
submenu(curmousepos, mousediff, -1);
|
||||
|
||||
return ri;
|
||||
};
|
||||
|
||||
int (spline_t *s, vector point) spline_add_point =
|
||||
|
@ -521,6 +622,31 @@ void (int type) position_add_point =
|
|||
}
|
||||
}
|
||||
|
||||
void (int type) view_add_point =
|
||||
{
|
||||
vector v;
|
||||
int i;
|
||||
local cam_t *c;
|
||||
local spline_t *s;
|
||||
|
||||
i = camdata->view_selected;
|
||||
c = &camdata->view[i];
|
||||
s = &c->spline;
|
||||
v = getviewprop(VF_ORIGIN);
|
||||
if (type == 0)
|
||||
{
|
||||
if (spline_add_point(s, v))
|
||||
{
|
||||
// print(sprintf("point could not be added.\n"));
|
||||
}
|
||||
else
|
||||
{
|
||||
// print(sprintf("added point: %i %f %f %f\n", s->selected_point, v_x, v_y, v_z));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void(void) position_add
|
||||
{
|
||||
print(sprintf("test\n"));
|
||||
|
@ -552,6 +678,20 @@ void(spline_t *s, vector change) spline_change_point_position
|
|||
s->pos[s->selected_point] = s->pos[s->selected_point] + change;
|
||||
};
|
||||
|
||||
void (cam_t *c, float starttime) cam_set_start_time
|
||||
{
|
||||
c->starttime = starttime;
|
||||
if (starttime > c->endtime)
|
||||
c->endtime = starttime;
|
||||
}
|
||||
|
||||
void (cam_t *c, float endtime) cam_set_stop_time
|
||||
{
|
||||
c->endtime = endtime;
|
||||
if (endtime < c->starttime)
|
||||
c->starttime = endtime;
|
||||
}
|
||||
|
||||
void (spline_t *s, float change) spline_change_position
|
||||
{
|
||||
s->position = s->position + change;
|
||||
|
@ -574,20 +714,40 @@ void(spline_t *s, int change) spline_change_selected_point
|
|||
s->selected_point = s->selected_point + change;
|
||||
};
|
||||
|
||||
float(float keycode, float unicode, vector curmousepos) editor_spline_key
|
||||
float(float keycode, float unicode, vector *curmousepos_in, vector mousediff) editor_spline_key
|
||||
{
|
||||
local vector curmousepos = *curmousepos_in;
|
||||
if (keycode == 'j')
|
||||
{
|
||||
if (camdata->position_count == 0)
|
||||
position_add();
|
||||
position_add_point(0);
|
||||
if (edit_type == 0)
|
||||
{
|
||||
if (camdata->position_count == 0)
|
||||
position_add();
|
||||
position_add_point(0);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (camdata->view_count == 0)
|
||||
view_add();
|
||||
view_add_point(0);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (keycode == 'k')
|
||||
{
|
||||
if (camdata->position_count == 0)
|
||||
return FALSE;
|
||||
spline_change_selected_point(&camdata->position[camdata->position_selected].spline, -1);
|
||||
if (edit_type == 0)
|
||||
{
|
||||
if (camdata->position_count == 0)
|
||||
return FALSE;
|
||||
spline_change_selected_point(&camdata->position[camdata->position_selected].spline, -1);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (camdata->view_count == 0)
|
||||
return FALSE;
|
||||
spline_change_selected_point(&camdata->view[camdata->view_selected].spline, -1);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
@ -601,75 +761,198 @@ float(float keycode, float unicode, vector curmousepos) editor_spline_key
|
|||
|
||||
if (keycode == '9')
|
||||
{
|
||||
if (camdata->position_count == 0)
|
||||
return FALSE;
|
||||
spline_change_point_position(&camdata->position[camdata->position_selected].spline, '0 0 -1');
|
||||
if (edit_type == 0)
|
||||
{
|
||||
if (camdata->position_count == 0)
|
||||
return FALSE;
|
||||
spline_change_point_position(&camdata->position[camdata->position_selected].spline, '0 0 -1');
|
||||
}
|
||||
else
|
||||
{
|
||||
if (camdata->view_count == 0)
|
||||
return FALSE;
|
||||
spline_change_point_position(&camdata->view[camdata->view_selected].spline, '0 0 -1');
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (keycode == '0')
|
||||
{
|
||||
if (camdata->position_count == 0)
|
||||
return FALSE;
|
||||
spline_change_point_position(&camdata->position[camdata->position_selected].spline, '0 0 1');
|
||||
if (edit_type == 0)
|
||||
{
|
||||
if (camdata->position_count == 0)
|
||||
return FALSE;
|
||||
spline_change_point_position(&camdata->position[camdata->position_selected].spline, '0 0 1');
|
||||
}
|
||||
else
|
||||
{
|
||||
if (camdata->view_count == 0)
|
||||
return FALSE;
|
||||
spline_change_point_position(&camdata->view[camdata->view_selected].spline, '0 0 1');
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (keycode == '7')
|
||||
{
|
||||
if (camdata->position_count == 0)
|
||||
return FALSE;
|
||||
spline_change_point_position(&camdata->position[camdata->position_selected].spline, '0 -1 0');
|
||||
if (edit_type == 0)
|
||||
{
|
||||
if (camdata->position_count == 0)
|
||||
return FALSE;
|
||||
spline_change_point_position(&camdata->position[camdata->position_selected].spline, '0 -1 0');
|
||||
}
|
||||
else
|
||||
{
|
||||
if (camdata->view_count == 0)
|
||||
return FALSE;
|
||||
spline_change_point_position(&camdata->view[camdata->view_selected].spline, '0 -1 0');
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (keycode == '8')
|
||||
{
|
||||
if (camdata->position_count == 0)
|
||||
return FALSE;
|
||||
spline_change_point_position(&camdata->position[camdata->position_selected].spline, '0 1 0');
|
||||
if (edit_type == 0)
|
||||
{
|
||||
if (camdata->position_count == 0)
|
||||
return FALSE;
|
||||
spline_change_point_position(&camdata->position[camdata->position_selected].spline, '0 1 0');
|
||||
}
|
||||
else
|
||||
{
|
||||
if (camdata->view_count== 0)
|
||||
return FALSE;
|
||||
spline_change_point_position(&camdata->view[camdata->view_selected].spline, '0 1 0');
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (keycode == '5')
|
||||
{
|
||||
if (camdata->position_count == 0)
|
||||
return FALSE;
|
||||
spline_change_point_position(&camdata->position[camdata->position_selected].spline, '-1 0 0');
|
||||
if (edit_type == 0)
|
||||
{
|
||||
if (camdata->position_count == 0)
|
||||
return FALSE;
|
||||
spline_change_point_position(&camdata->position[camdata->position_selected].spline, '-1 0 0');
|
||||
}
|
||||
else
|
||||
{
|
||||
if (camdata->view_count == 0)
|
||||
return FALSE;
|
||||
spline_change_point_position(&camdata->view[camdata->view_selected].spline, '-1 0 0');
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (keycode == '6')
|
||||
{
|
||||
if (camdata->position_count == 0)
|
||||
return FALSE;
|
||||
spline_change_point_position(&camdata->position[camdata->position_selected].spline, '1 0 0');
|
||||
if (edit_type == 0)
|
||||
{
|
||||
if (camdata->position_count == 0)
|
||||
return FALSE;
|
||||
spline_change_point_position(&camdata->position[camdata->position_selected].spline, '1 0 0');
|
||||
}
|
||||
else
|
||||
{
|
||||
if (camdata->view_count == 0)
|
||||
return FALSE;
|
||||
spline_change_point_position(&camdata->view[camdata->view_selected].spline, '1 0 0');
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (keycode == '6')
|
||||
{
|
||||
if (edit_type == 0)
|
||||
{
|
||||
if (camdata->position_count == 0)
|
||||
return FALSE;
|
||||
spline_change_point_position(&camdata->position[camdata->position_selected].spline, '1 0 0');
|
||||
}
|
||||
else
|
||||
{
|
||||
if (camdata->view_count == 0)
|
||||
return FALSE;
|
||||
spline_change_point_position(&camdata->view[camdata->view_selected].spline, '1 0 0');
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (keycode == '-')
|
||||
{
|
||||
if (camdata->position_count == 0)
|
||||
return FALSE;
|
||||
spline_change_position(&camdata->position[camdata->position_selected].spline, -0.01);
|
||||
if (edit_type == 0)
|
||||
{
|
||||
if (camdata->position_count == 0)
|
||||
return FALSE;
|
||||
spline_change_position(&camdata->position[camdata->position_selected].spline, -0.01);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (camdata->view_count == 0)
|
||||
return FALSE;
|
||||
spline_change_position(&camdata->view[camdata->view_selected].spline, -0.01);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (keycode == '=')
|
||||
{
|
||||
if (camdata->position_count == 0)
|
||||
return FALSE;
|
||||
spline_change_position(&camdata->position[camdata->position_selected].spline, 0.01);
|
||||
if (edit_type == 0)
|
||||
{
|
||||
if (camdata->position_count == 0)
|
||||
return FALSE;
|
||||
spline_change_position(&camdata->position[camdata->position_selected].spline, 0.01);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (camdata->view_count == 0)
|
||||
return FALSE;
|
||||
spline_change_position(&camdata->view[camdata->view_selected].spline, 0.01);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (keycode == '1')
|
||||
{
|
||||
edit_type = !edit_type;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
testmenu(curmousepos, keycode);
|
||||
|
||||
|
||||
if (keycode == '2')
|
||||
{
|
||||
if (edit_type == 0)
|
||||
{
|
||||
if (camdata->position_count == 0)
|
||||
return FALSE;
|
||||
cam_set_start_time(&camdata->position[camdata->position_selected], gettime(5));
|
||||
}
|
||||
else
|
||||
{
|
||||
if (camdata->view_count == 0)
|
||||
return FALSE;
|
||||
cam_set_start_time(&camdata->view[camdata->view_selected], gettime(5));
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (keycode == '2')
|
||||
{
|
||||
if (edit_type == 0)
|
||||
{
|
||||
if (camdata->position_count == 0)
|
||||
return FALSE;
|
||||
cam_set_stop_time(&camdata->position[camdata->position_selected], gettime(5));
|
||||
}
|
||||
else
|
||||
{
|
||||
if (camdata->view_count == 0)
|
||||
return FALSE;
|
||||
cam_set_stop_time(&camdata->view[camdata->view_selected], gettime(5));
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
submenu(curmousepos_in, mousediff, keycode);
|
||||
|
||||
return FALSE;
|
||||
};
|
||||
|
||||
|
|
|
@ -13,11 +13,14 @@ enum
|
|||
|
||||
var vector vidsize = '640 480 0';
|
||||
vector curmousepos;
|
||||
vector mousediff;
|
||||
vector originalmousepos;
|
||||
float mousedown;
|
||||
|
||||
/*the renderscene builtin in the parent progs is redirected to here*/
|
||||
void() wrap_renderscene =
|
||||
{
|
||||
local int retval;
|
||||
vector col;
|
||||
/*inactive? then show nothing*/
|
||||
if (!autocvar_ca_show)
|
||||
|
@ -119,7 +122,11 @@ void() wrap_renderscene =
|
|||
if (autocvar_ca_editormode == MODE_LIGHTEDIT)
|
||||
editor_lights_overlay(curmousepos);
|
||||
else if (autocvar_ca_editormode == MODE_SPLINEEDIT)
|
||||
editor_spline_overlay(curmousepos);
|
||||
{
|
||||
editor_spline_overlay(&curmousepos, mousediff);
|
||||
originalmousepos = curmousepos;
|
||||
mousediff = '0 0 0';
|
||||
}
|
||||
else if (autocvar_ca_editormode == MODE_PARTICLEEDIT)
|
||||
editor_particles_overlay(curmousepos);
|
||||
|
||||
|
@ -145,8 +152,12 @@ float (float event, float parama, float paramb) wrap_InputEvent =
|
|||
}
|
||||
else if (autocvar_ca_editormode == MODE_SPLINEEDIT)
|
||||
{
|
||||
if (editor_spline_key(parama, paramb, curmousepos))
|
||||
if (editor_spline_key(parama, paramb, &curmousepos, mousediff))
|
||||
{
|
||||
originalmousepos = curmousepos;
|
||||
mousediff = '0 0 0';
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
else if (autocvar_ca_editormode == MODE_PARTICLEEDIT)
|
||||
{
|
||||
|
@ -173,8 +184,10 @@ float (float event, float parama, float paramb) wrap_InputEvent =
|
|||
{
|
||||
if (mousedown == 2)
|
||||
return FALSE;
|
||||
originalmousepos = curmousepos;
|
||||
curmousepos_x += parama;
|
||||
curmousepos_y += paramb;
|
||||
mousediff = curmousepos - originalmousepos;
|
||||
if (curmousepos_x < 0)
|
||||
curmousepos_x = 0;
|
||||
if (curmousepos_y < 0)
|
||||
|
|
|
@ -6,5 +6,6 @@ csplat.qc
|
|||
editor_lights.qc
|
||||
textfield.qc
|
||||
editor_particles.qc
|
||||
menu.qc
|
||||
cam.qc
|
||||
csaddon.qc
|
||||
|
|
286
quakec/csaddon/src/menu.qc
Normal file
286
quakec/csaddon/src/menu.qc
Normal file
|
@ -0,0 +1,286 @@
|
|||
typedef struct
|
||||
{
|
||||
float *current;
|
||||
float key;
|
||||
vector *mousepos;
|
||||
vector mousediff;
|
||||
} menu_t;
|
||||
|
||||
void(menu_t menu, string fieldname, vector pos, float *value, float minv, float maxv) sliderf_widgit =
|
||||
{
|
||||
local vector rpos, spos, col;
|
||||
local float f;
|
||||
local int render_only;
|
||||
local vector mousepos = *menu->mousepos;
|
||||
local vector mp = *menu->mousepos;
|
||||
local vector mousediff = menu->mousediff;
|
||||
local int draw_value = 1; // 8 parameter limit?
|
||||
local float key = menu->key;
|
||||
|
||||
render_only = 0;
|
||||
|
||||
rpos = pos;
|
||||
spos = rpos;
|
||||
spos_x = pos_x + strlen(fieldname) * 8 + 4;
|
||||
/*if they're dragging us, update*/
|
||||
if ((int)menu->current == (int)value)
|
||||
{
|
||||
if (mousedown == 1)
|
||||
{
|
||||
*value = *value + mousediff_x/10;
|
||||
*value = bound(minv, *value, maxv);
|
||||
f = *value;
|
||||
mp_y = spos_y + 4;
|
||||
mp_x = spos_x + 9 * 8 * (f - minv) / (maxv - minv) + 4;
|
||||
*menu->mousepos = mp;
|
||||
}
|
||||
else
|
||||
{
|
||||
menu->current = (int*)__NULL__;
|
||||
}
|
||||
}
|
||||
else
|
||||
if (mousedown == 1)
|
||||
render_only = 1;
|
||||
|
||||
if (key == -1 || render_only == 1 )
|
||||
{
|
||||
if (mousepos_y >= pos_y && mousepos_y < pos_y + 8 && render_only == 0)
|
||||
{
|
||||
col_x = (sin(time*3.14)+1) / 2;
|
||||
col_y = col_x;
|
||||
col_z = 1;
|
||||
}
|
||||
else
|
||||
col = '1 1 1';
|
||||
|
||||
f = *value;
|
||||
if (f < minv)
|
||||
f = minv;
|
||||
if (f > maxv)
|
||||
f = maxv;
|
||||
drawstring(pos, fieldname, '8 8 0', col, 1, 0);
|
||||
drawstring(spos, "^Ue080^Ue081^Ue081^Ue081^Ue081^Ue081^Ue081^Ue081^Ue081^Ue081^Ue082", '8 8 0', '1 1 1', 1, 0);
|
||||
if (draw_value == 1)
|
||||
{
|
||||
drawstring(spos + '88 0', ftos(f), '8 8 0', col, 1, 0);
|
||||
}
|
||||
spos_x += 9*8*(f - minv) / (maxv - minv);
|
||||
drawstring(spos, "^Ue083", '8 8 0', '1 1 1', 1, 0);
|
||||
}
|
||||
else if (mousepos_y >= pos_y && mousepos_y < pos_y + 8)
|
||||
{
|
||||
if (key == 512)
|
||||
{
|
||||
f = *value;
|
||||
menu->current = value;
|
||||
mp_x = spos_x + 9 * 8 * (f - minv) / (maxv - minv) + 4;
|
||||
*menu->mousepos = mp;
|
||||
}
|
||||
else if (key == 515)
|
||||
*value = bound(minv, *value + (maxv - minv) / 10, maxv);
|
||||
else if (key == 516)
|
||||
*value = bound(minv, *value - (maxv - minv) / 10, maxv);
|
||||
}
|
||||
};
|
||||
|
||||
#pragma wrasm 1
|
||||
void(menu_t *menu, string fieldname, vector pos, float *value) sliderf_fixed_widgit =
|
||||
{
|
||||
local vector rpos, spos, col;
|
||||
local float f;
|
||||
local int render_only;
|
||||
local vector mousepos = *menu->mousepos;
|
||||
local vector mp = *menu->mousepos;
|
||||
local vector mousediff = menu->mousediff;
|
||||
local vector *mpp = menu->mousepos;
|
||||
local int draw_value = 1; // 8 parameter limit?
|
||||
local float key = menu->key;
|
||||
|
||||
render_only = 0;
|
||||
|
||||
rpos = pos;
|
||||
spos = rpos;
|
||||
spos_x = pos_x + strlen(fieldname) * 8 + 4;
|
||||
/*if they're dragging us, update*/
|
||||
//print(sprintf("%i %i\n", (int) menu->current, (int) value));
|
||||
if ((int)menu->current == (int)value)
|
||||
{
|
||||
print(sprintf("mousedown: %i\n", mousedown));
|
||||
if (mousedown == 1)
|
||||
{
|
||||
*value = *value + mousediff_x/10;
|
||||
f = *value;
|
||||
mp_y = spos_y + 4;
|
||||
mp_x = spos_x + 4;
|
||||
*menu->mousepos = mp;
|
||||
}
|
||||
else
|
||||
{
|
||||
menu->current = (int*)__NULL__;
|
||||
}
|
||||
}
|
||||
else
|
||||
if (mousedown == 1)
|
||||
render_only = 1;
|
||||
|
||||
if (key == -1 || render_only == 1 )
|
||||
{
|
||||
if (mousepos_y >= pos_y && mousepos_y < pos_y + 8 && render_only == 0)
|
||||
{
|
||||
col_x = (sin(time*3.14)+1) / 2;
|
||||
col_y = col_x;
|
||||
col_z = 1;
|
||||
}
|
||||
else
|
||||
col = '1 1 1';
|
||||
|
||||
f = *value;
|
||||
drawstring(pos, fieldname, '8 8 0', col, 1, 0);
|
||||
|
||||
drawstring(spos, "^Ue080^Ue082", '8 8 0', '1 1 1', 1, 0);
|
||||
if (draw_value)
|
||||
drawstring(spos + '20 0', ftos(f), '8 8 0', col, 1, 0);
|
||||
drawstring(spos + '4 0', "^Ue083", '8 8 0', '1 1 1', 1, 0);
|
||||
}
|
||||
else if (mousepos_y >= pos_y && mousepos_y < pos_y + 8)
|
||||
{
|
||||
if (key == 512)
|
||||
{
|
||||
f = *value;
|
||||
int*tmp=(int*)menu;tmp[0] = (int)value; //fteqcc bug - really menu->current = value;
|
||||
print(sprintf("test thing: %i %i\n", menu->current, value));
|
||||
mp_x = spos_x + 4;
|
||||
*mpp = mp;
|
||||
}
|
||||
else if (key == 515)
|
||||
*value = *value + 0.1;
|
||||
else if (key == 516)
|
||||
*value = *value - 0.1;
|
||||
}
|
||||
};
|
||||
#pragma wrasm 0
|
||||
|
||||
void(menu_t menu, string fieldname, vector pos, int *value, int minv, int maxv) slideri_widgit =
|
||||
{
|
||||
local vector rpos, spos, col;
|
||||
local int f;
|
||||
local int render_only;
|
||||
local vector mousepos = *menu->mousepos;
|
||||
local vector mp = *menu->mousepos;
|
||||
local vector mousediff = menu->mousediff;
|
||||
local int draw_value = 1; // 8 parameter limit?
|
||||
local float key;
|
||||
|
||||
key = menu->key;
|
||||
|
||||
render_only = 0;
|
||||
|
||||
rpos = pos;
|
||||
spos = rpos;
|
||||
spos_x = pos_x + strlen(fieldname) * 8 + 4;
|
||||
/*if they're dragging us, update*/
|
||||
if ((int)menu->current == (int)value)
|
||||
{
|
||||
if (mousedown == 1)
|
||||
{
|
||||
*value = *value + mousediff_x/10;
|
||||
*value = bound(minv, *value, maxv);
|
||||
f = *value;
|
||||
mp_y = spos_y + 4;
|
||||
mp_x = spos_x + 9 * 8 * (f - minv) / (maxv - minv) + 4;
|
||||
*menu->mousepos = mp;
|
||||
}
|
||||
else
|
||||
{
|
||||
menu->current = (int*)__NULL__;
|
||||
}
|
||||
}
|
||||
else
|
||||
if (mousedown == 1)
|
||||
render_only = 1;
|
||||
|
||||
if (key == -1 || render_only == 1 )
|
||||
{
|
||||
if (mousepos_y >= pos_y && mousepos_y < pos_y + 8 && render_only == 0)
|
||||
{
|
||||
col_x = (sin(time*3.14)+1) / 2;
|
||||
col_y = col_x;
|
||||
col_z = 1;
|
||||
}
|
||||
else
|
||||
col = '1 1 1';
|
||||
|
||||
f = *value;
|
||||
if (f < minv)
|
||||
f = minv;
|
||||
if (f > maxv)
|
||||
f = maxv;
|
||||
drawstring(pos, fieldname, '8 8 0', col, 1, 0);
|
||||
drawstring(spos, "^Ue080^Ue081^Ue081^Ue081^Ue081^Ue081^Ue081^Ue081^Ue081^Ue081^Ue082", '8 8 0', '1 1 1', 1, 0);
|
||||
if (draw_value == 1)
|
||||
{
|
||||
drawstring(spos + '88 0', ftos(f), '8 8 0', col, 1, 0);
|
||||
}
|
||||
spos_x += 9*8*(f - minv) / (maxv - minv);
|
||||
drawstring(spos, "^Ue083", '8 8 0', '1 1 1', 1, 0);
|
||||
}
|
||||
else if (mousepos_y >= pos_y && mousepos_y < pos_y + 8)
|
||||
{
|
||||
if (key == 512)
|
||||
{
|
||||
f = *value;
|
||||
menu->current = value;
|
||||
mp_x = spos_x + 9 * 8 * (f - minv) / (maxv - minv) + 4;
|
||||
*menu->mousepos = mp;
|
||||
}
|
||||
else if (key == 515)
|
||||
*value = bound(minv, *value + (maxv - minv) / 10, maxv);
|
||||
else if (key == 516)
|
||||
*value = bound(minv, *value - (maxv - minv) / 10, maxv);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
void(string fieldname, vector pos, vector *mousepos_in, float *value, float key) checkboxf_widgit =
|
||||
{
|
||||
local vector rpos, col;
|
||||
local int render_only;
|
||||
local vector mousepos = *mousepos_in;
|
||||
rpos = pos + '132 0 0';
|
||||
|
||||
render_only = 0;
|
||||
// fix this
|
||||
if (mousedown == 1)
|
||||
render_only = 1;
|
||||
|
||||
if (key == -1 || render_only == 1)
|
||||
{
|
||||
if (mousepos_y >= pos_y && mousepos_y < pos_y + 8 && render_only == 0)
|
||||
{
|
||||
col_x = (sin(time*3.14)+1) / 2;
|
||||
col_y = col_x;
|
||||
col_z = 1;
|
||||
}
|
||||
else
|
||||
col = '1 1 1';
|
||||
|
||||
drawstring(pos, fieldname, '8 8 0', col, 1, 0);
|
||||
rpos_x -= 4;
|
||||
drawstring(rpos, "^Ue080^Ue082", '8 8 0', '1 1 1', 1, 0);
|
||||
drawstring(rpos + '88 0', ((*value) ?"TRUE":"FALSE"), '8 8 0', col, 1, 0);
|
||||
rpos_x += 4;
|
||||
if (*value)
|
||||
drawstring(rpos, "^Ue083", '8 8 0', '1 1 1', 1, 0);
|
||||
}
|
||||
else if (mousepos_y >= pos_y && mousepos_y < pos_y + 8)
|
||||
{
|
||||
if (key == 512)
|
||||
*value = !*value;
|
||||
else if (key == 515)
|
||||
*value = !*value;
|
||||
else if (key == 516)
|
||||
*value = !*value;
|
||||
}
|
||||
};
|
||||
|
Loading…
Reference in a new issue