compile fixes (oops) and start working on quaternion support in qfcc

This commit is contained in:
Bill Currie 2004-04-08 02:33:20 +00:00
parent 8d6f634f30
commit 4882005a49
7 changed files with 21 additions and 33 deletions

View file

@ -523,7 +523,7 @@ value_string (progs_t *pr, etype_t type, pr_type_t *val)
else
dsprintf (line, "[$%x]", ofs);
break;
case ev_quaternion:
case ev_quat:
dsprintf (line, "'%g %g %g %g'",
val->vector_var[0], val->vector_var[1],
val->vector_var[2], val->vector_var[3]);

View file

@ -339,7 +339,7 @@ set_address (sv_def_t *def, void *address)
break;
case ev_float:
case ev_vector:
case ev_quaternion:
case ev_quat:
*(float **)def->field = (float *) address;
break;
case ev_string:

View file

@ -338,7 +338,7 @@ set_address (sv_def_t *def, void *address)
break;
case ev_float:
case ev_vector:
case ev_quaternion:
case ev_quat:
*(float **)def->field = (float *) address;
break;
case ev_string:

View file

@ -342,15 +342,11 @@ do_op_vector (int op, expr_t *e, expr_t *e1, expr_t *e2)
break;
case EQ:
e1->type = ex_integer;
e1->e.integer_val = (v1[0] == v2[0])
&& (v1[1] == v2[1])
&& (v1[2] == v2[2]);
e1->e.integer_val = VectorCompare (v1, v2);
break;
case NE:
e1->type = ex_integer;
e1->e.integer_val = (v1[0] == v2[0])
|| (v1[1] != v2[1])
|| (v1[2] != v2[2]);
e1->e.integer_val = !VectorCompare (v1, v2);
break;
default:
internal_error (e1);
@ -415,7 +411,7 @@ do_op_pointer (int op, expr_t *e, expr_t *e1, expr_t *e2)
static int valid[] = {'=', 'b', PAS, '&', 'M', '.', EQ, NE, 0};
if (!valid_op (op, valid))
return error (e1, "invalid operand for quaternion");
return error (e1, "invalid operand for pointer");
if (op == PAS && (type = get_type (e1)->aux_type) != get_type (e2)) {
// make sure auto-convertions happen
@ -487,40 +483,32 @@ do_op_quaternion (int op, expr_t *e, expr_t *e1, expr_t *e2)
switch (op) {
case '+':
VectorAdd (q1, q2, q1);
QuatAdd (q1, q2, q1);
break;
case '-':
VectorSubtract (q1, q2, q1);
QuatSubtract (q1, q2, q1);
break;
case '/':
if (!q2[0])
return error (e1, "divide by zero");
VectorScale (q1, 1 / q2[0], q1);
QuatScale (q1, 1 / q2[0], q1);
q1[3] /= q2[0];
break;
case '*':
if (get_type (e2) == &type_quaternion) {
e1->type = ex_float;
e1->e.float_val = DotProduct (q1, q2);
e1->e.float_val += q1[3] * q2[3];
QuatMult (q1, q2, q1);
} else {
VectorScale (q1, q2[0], q1);
QuatScale (q1, q2[0], q1);
q1[3] *= q2[0];
}
break;
case EQ:
e1->type = ex_integer;
e1->e.integer_val = (q1[0] == q2[0])
&& (q1[1] == q2[1])
&& (q1[2] == q2[2])
&& (q1[3] == q2[3]);
e1->e.integer_val = QuatCompare (q1, q2);
break;
case NE:
e1->type = ex_integer;
e1->e.integer_val = (q1[0] == q2[0])
|| (q1[1] != q2[1])
|| (q1[2] != q2[2])
|| (q1[3] != q2[3]);
e1->e.integer_val = !QuatCompare (q1, q2);
break;
default:
internal_error (e1);
@ -1075,7 +1063,7 @@ static operation_t op_quaternion[ev_type_count] = {
do_op_invalid, // ev_void
do_op_invalid, // ev_string
do_op_quaternion, // ev_float
do_op_quaternion, // ev_vector
do_op_invalid, // ev_vector
do_op_invalid, // ev_entity
do_op_invalid, // ev_field
do_op_invalid, // ev_func

View file

@ -86,7 +86,7 @@ etype_t qc_types[] = {
ev_field, // ex_field
ev_func, // ex_func
ev_pointer, // ex_pointer
ev_quaternion, // ex_quaternion
ev_quat, // ex_quaternion
ev_integer, // ex_integer
ev_uinteger, // ex_uinteger
ev_short, // ex_short
@ -121,7 +121,7 @@ expr_type expr_types[] = {
ex_field, // ev_field
ex_func, // ev_func
ex_pointer, // ev_pointer
ex_quaternion, // ev_quaternion
ex_quaternion, // ev_quat
ex_integer, // ev_integer
ex_uinteger, // ev_uinteger
ex_short, // ev_short
@ -1054,7 +1054,7 @@ test_expr (expr_t *e, int test)
case ev_pointer:
new = new_nil_expr ();
break;
case ev_quaternion:
case ev_quat:
new = new_quaternion_expr (zero);
break;
case ev_struct:

View file

@ -247,7 +247,7 @@ get_auxtype (const char *type)
case '^':
return ev_pointer;
case 'Q':
return ev_quaternion;
return ev_quat;
case 'i':
return ev_integer;
case 'I':

View file

@ -74,7 +74,7 @@ type_t type_field = { ev_field, "field", NULL, &type_void };
// type_function is a void() function used for state defs
type_t type_function = { ev_func, "function", NULL, &type_void };
type_t type_pointer = { ev_pointer, "pointer", NULL, &type_void };
type_t type_quaternion = { ev_quaternion, "quaternion" };
type_t type_quaternion = { ev_quat, "quaternion" };
type_t type_integer = { ev_integer, "integer" };
type_t type_uinteger = { ev_uinteger, "uiniteger" };
type_t type_short = { ev_short, "short" };
@ -351,7 +351,7 @@ _encode_type (dstring_t *encoding, type_t *type, int level)
break;
}
break;
case ev_quaternion:
case ev_quat:
dstring_appendstr (encoding, "Q");
break;
case ev_integer:
@ -601,7 +601,7 @@ type_size (type_t *type)
case ev_field:
case ev_func:
case ev_pointer:
case ev_quaternion:
case ev_quat:
case ev_integer:
case ev_uinteger:
case ev_short: