mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2025-02-16 17:01:53 +00:00
compile fixes (oops) and start working on quaternion support in qfcc
This commit is contained in:
parent
8d6f634f30
commit
4882005a49
7 changed files with 21 additions and 33 deletions
|
@ -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]);
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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':
|
||||
|
|
|
@ -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:
|
||||
|
|
Loading…
Reference in a new issue