All pastes #1454968 Raw Edit

ufoai door patch

public text v1 · immutable
#1454968 ·published 2009-06-10 06:25 UTC
rendered paste body
Index: client/renderer/r_bsp.c
===================================================================
--- client/renderer/r_bsp.c	(revision 24654)
+++ client/renderer/r_bsp.c	(working copy)
@@ -149,10 +149,14 @@
 		modelorg[1] = -DotProduct(temp, right);
 		modelorg[2] = DotProduct(temp, up);
 	}
+	if (VectorNotEmpty(e->origin)) {
+		VectorSubtract(modelorg, e->model->shift, modelorg);
+	}
 
 	R_ShiftLights(e->origin);
 
 	glPushMatrix();
+	/* This positions and rotates the model based on e->origin, e->angles, and e->model->shift. */
 	R_TransformForEntity(e);
 
 	R_DrawBspModelSurfaces(e, modelorg);
Index: client/renderer/r_entity.c
===================================================================
--- client/renderer/r_entity.c	(revision 24654)
+++ client/renderer/r_entity.c	(working copy)
@@ -58,6 +58,10 @@
 	glRotatef(e->angles[YAW], 0, 0, 1);
 	glRotatef(e->angles[PITCH], 0, 1, 0);
 	glRotatef(e->angles[ROLL], 1, 0, 0);
+
+	if (VectorNotEmpty(e->origin)) {
+		glTranslatef(-e->model->shift[0], -e->model->shift[1], -e->model->shift[2]);
+	}
 }
 
 /**
Index: client/renderer/r_model.h
===================================================================
--- client/renderer/r_model.h	(revision 24654)
+++ client/renderer/r_model.h	(working copy)
@@ -53,6 +53,9 @@
 	vec3_t mins, maxs;
 	float radius;
 
+	/** Noted offset for entities with origins */
+	vec3_t shift;
+
 	/** solid volume for clipping */
 	qboolean clipbox;
 	vec3_t clipmins, clipmaxs;
Index: client/renderer/r_model_brush.c
===================================================================
--- client/renderer/r_model_brush.c	(revision 24654)
+++ client/renderer/r_model_brush.c	(working copy)
@@ -1017,6 +1017,14 @@
 		VectorCopy(sub->mins, mod->mins);
 		mod->radius = sub->radius;
 
+		/* So origin based models render correctly, copy the shift if needed. */
+		if (VectorNotEmpty(sub->origin)) {
+			VectorCopy(shift, mod->shift);
+		} else {
+			VectorClear(mod->shift);
+		}
+
+
 		mod->bsp.firstnode = sub->headnode;
 		mod->bsp.nodes = &r_worldmodel->bsp.nodes[mod->bsp.firstnode];
 		mod->bsp.maptile = r_numMapTiles - 1;