summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--xd.c144
1 files changed, 143 insertions, 1 deletions
diff --git a/xd.c b/xd.c
index bd6f4dc..c64251c 100644
--- a/xd.c
+++ b/xd.c
@@ -165,10 +165,11 @@ static void CraterDemo(void);
static void TriangleDemo(void);
static void TriangleDemo2(void);
static void FollowDemo(void);
+static void CatwalkDemo(void);
/* ---------------------------------------- GLOBAL VARS
*/
-#define NO_DEMOS 16
+#define NO_DEMOS 17
static int demo=NO_DEMOS-1;
@@ -256,6 +257,11 @@ static DemoInfo demotbl[NO_DEMOS]=
FollowDemo,
UsesPixmap
},
+ {
+ "Catwalk trench",
+ CatwalkDemo,
+ UsesPixmap
+ },
};
/* ---------------------------------------- X11 VARS
@@ -3750,4 +3756,140 @@ static void FollowDemo(void)
}
+/* ---------------------------------------- CATWALK DEMO
+ */
+
+#define TRENCH_X 300
+#define TRENCH_Y_TOP -200
+#define TRENCH_Y_BOT 100
+#define TRENCH_Z_MAX 10000
+#define TRENCH_Z_MIN 10
+#define TRENCH_CWH 50
+
+static void CatwalkDemo(void)
+{
+ static const int speed=5;
+
+ static unsigned long col[2];
+
+ static Point3D trench_point[8] =
+ {
+ {-TRENCH_X, TRENCH_Y_TOP, TRENCH_Z_MAX}, /* 0 */
+ {TRENCH_X, TRENCH_Y_TOP, TRENCH_Z_MAX}, /* 1 */
+ {-TRENCH_X, TRENCH_Y_BOT, TRENCH_Z_MAX}, /* 2 */
+ {TRENCH_X, TRENCH_Y_BOT, TRENCH_Z_MAX}, /* 3 */
+ {-TRENCH_X, TRENCH_Y_TOP, TRENCH_Z_MIN}, /* 4 */
+ {TRENCH_X, TRENCH_Y_TOP, TRENCH_Z_MIN}, /* 5 */
+ {-TRENCH_X, TRENCH_Y_BOT, TRENCH_Z_MIN}, /* 6 */
+ {TRENCH_X, TRENCH_Y_BOT, TRENCH_Z_MIN} /* 7 */
+ };
+
+ static Poly3D trench_poly[3] =
+ {
+ {{2, 3, 7, 6}, 4, 0},
+ {{1, 5, 7, 3}, 4, 0},
+ {{0, 2, 6, 4}, 4, 0},
+ };
+
+ static Point3D cw_point[4] =
+ {
+ {-TRENCH_X, 0, 0},
+ {TRENCH_X, 0, 0},
+ {TRENCH_X, TRENCH_CWH, 0},
+ {-TRENCH_X, TRENCH_CWH, 0}
+
+ };
+
+ static Poly3D cw_poly[1] =
+ {
+ {{0, 1, 2, 3}, 4, 1}
+ };
+
+ static Point3D trench_work_3d[8];
+ static XPoint trench_work_xp[8];
+
+ static Obj3D trench =
+ {8,3,{0,0,0},trench_point,trench_poly,trench_work_3d,trench_work_xp,
+ 0,0,0,MODE_EDGE,-1,True};
+
+ static const int no_catwalk = 5;
+
+ static Obj3D *catwalk;
+
+ static int move=0;
+
+ static int init=FALSE;
+
+ int f,r;
+
+ if (!init)
+ {
+ col[0]=GetCol(255, 255, 255);
+ col[1]=GetCol(255, 255, 0);
+
+ catwalk = Grab(sizeof *catwalk * no_catwalk);
+
+ for(f = 0; f < no_catwalk; f++)
+ {
+ catwalk[f].no_points = 4;
+ catwalk[f].no_poly = 1;
+
+ catwalk[f].origin.x = 0;
+ catwalk[f].origin.y = RND2(TRENCH_Y_BOT, TRENCH_Y_TOP - TRENCH_CWH);
+ catwalk[f].origin.z = TRENCH_Z_MAX - 1500 * f;
+
+ catwalk[f].ps = cw_point;
+ catwalk[f].poly = cw_poly;
+
+ catwalk[f].workp3 = Grab(sizeof *catwalk[f].workp3 * 4);
+ catwalk[f].workxp = Grab(sizeof *catwalk[f].workxp * 4);
+
+ catwalk[f].x_rot = 0;
+ catwalk[f].y_rot = 0;
+ catwalk[f].z_rot = 0;
+
+ catwalk[f].mode = MODE_EDGE;
+
+ catwalk[f].col = -1;
+
+ catwalk[f].cull = True;
+ }
+
+ init=TRUE;
+ }
+
+ Cls();
+
+ DrawObj(&trench,col);
+
+ for(f = 0; f < no_catwalk; f++)
+ {
+ DrawObj(catwalk + f,col);
+
+ catwalk[f].origin.z -= speed;
+ }
+
+ while(catwalk[no_catwalk-1].origin.z < TRENCH_Z_MIN)
+ {
+ Obj3D t = catwalk[no_catwalk-1];
+
+ for(f = no_catwalk-2; f >= 0; f--)
+ {
+ catwalk[f+1] = catwalk[f];
+ }
+
+ catwalk[0] = t;
+
+ catwalk[0].origin.z = TRENCH_Z_MAX;
+ catwalk[0].origin.y = RND2(TRENCH_Y_BOT, TRENCH_Y_TOP - TRENCH_CWH);
+ }
+}
+
+#undef TRENCH_X
+#undef TRENCH_Y_TOP
+#undef TRENCH_Y_BOT
+#undef TRENCH_Z_MAX
+#undef TRENCH_Z_MIN
+
+
/* END OF FILE */