# the TempEntity message doesn't follow a pattern similar enough to # the other messages to bother beating the framework into being able # to cope with it, so we special case. structdef = '''typedef struct msg_TempEntity { PyObject_HEAD long opcode; long entitytype; long entity; long color; long range; float origin[3]; float trace_endpos[3]; } msg_TempEntity; ''' serializebodylencode = ''' int i; switch (self->entitytype) { case 0: case 1: case 2: case 3: case 4: case 7: case 8: case 10: case 11: length = 8; break; case 5: case 6: case 9: case 13: length = 16; break; case 12: length = 10; break; default: PyErr_Format(PyExc_ValueError, "read_TempEntity: bad type %d", (int)self->entitytype); return NULL; } ''' serializebodywritecode = ''' p = write_byte(p, self->opcode); p = write_byte(p, self->entitytype); switch (self->entitytype) { case 0: case 1: case 2: case 3: case 4: case 7: case 8: case 10: case 11: for (i=0 ; i<3 ; i++) p = write_short(p, self->origin[i]/0.125); break; case 5: case 6: case 9: case 13: p = write_short(p, self->entity); for (i=0 ; i<3 ; i++) p = write_short(p, self->origin[i]/0.125); for (i=0 ; i<3 ; i++) p = write_short(p, self->trace_endpos[i]/0.125); break; case 12: for (i=0 ; i<3 ; i++) p = write_short(p, self->origin[i]/0.125); p = write_byte(p, self->color); p = write_byte(p, self->range); break; default: /* should have been thrown out above */ Py_FatalError("TempEntity_serialize: wtf?"); return NULL; } ''' readcode = '''\ { int i=0; r->opcode = read_byte(block); r->entitytype = read_byte(block); switch (r->entitytype) { case 0: case 1: case 2: case 3: case 4: case 7: case 8: case 10: case 11: for (i=0 ; i<3 ; i++) r->origin[i] = read_short(block)*0.125; break; case 5: case 6: case 9: case 13: r->entity = read_short(block); for (i=0 ; i<3 ; i++) r->origin[i] = read_short(block)*0.125; for (i=0 ; i<3 ; i++) r->trace_endpos[i] = read_short(block)*0.125; break; case 12: for (i=0 ; i<3 ; i++) r->origin[i] = read_short(block)*0.125; r->color = read_byte(block); r->range = read_byte(block); break; default: PyErr_Format(PyExc_ValueError, "read_TempEntity: bad type %d", (int)r->entitytype); Py_DECREF(r); return NULL; } } '''