/*
**      $VER: cubetower.c 1.00 (20.3.1999)
**
**      Creation date     : 20.3.1999
**
**      Description       :
**         MeshWriter testprogram shape module.
**
**
**      Written by Stephan Bielmann
**
*/

/*************************** Includes *******************************/

#include <meshwriter/meshwriter.h>
#include <pragma/meshwriter_lib.h>

/**************************** Defines *******************************/

/*********************** Type definitions ***************************/

/********************** Private functions ***************************/
static void cube(ULONG mesh, ULONG color) {
  TOCLVertex v1,v2,v3,v4,v5,v6,v7,v8;

  v1.x=-0.5,v1.y=-0.5,v1.z=-0.5;
  v2.x=0.5,v2.y=-0.5,v2.z=-0.5;
  v3.x=0.5,v3.y=0.5,v3.z=-0.5;
  v4.x=-0.5,v4.y=0.5,v4.z=-0.5;
  v5.x=-0.5,v5.y=-0.5,v5.z=0.5;
  v6.x=0.5,v6.y=-0.5,v6.z=0.5;
  v7.x=0.5,v7.y=0.5,v7.z=0.5;
  v8.x=-0.5,v8.y=0.5,v8.z=0.5;

  MWLMeshTriangleAdd(mesh,color,&v1,&v2,&v3);
  MWLMeshTriangleAdd(mesh,color,&v1,&v3,&v4);

  MWLMeshTriangleAdd(mesh,color,&v5,&v6,&v7);
  MWLMeshTriangleAdd(mesh,color,&v5,&v7,&v8);

  MWLMeshTriangleAdd(mesh,color,&v4,&v1,&v5);
  MWLMeshTriangleAdd(mesh,color,&v4,&v5,&v8);

  MWLMeshTriangleAdd(mesh,color,&v7,&v6,&v2);
  MWLMeshTriangleAdd(mesh,color,&v7,&v2,&v3);

  MWLMeshTriangleAdd(mesh,color,&v1,&v6,&v5);
  MWLMeshTriangleAdd(mesh,color,&v1,&v2,&v6);

  MWLMeshTriangleAdd(mesh,color,&v4,&v8,&v7);
  MWLMeshTriangleAdd(mesh,color,&v4,&v7,&v3);
}

/********************** Public functions ****************************/

/********************************************************************\
*                                                                    *
* Name         : cubetower                                           *
*                                                                    *
* Description  : Draws a tower of cubes with the help of the scaling *
*                and translation functions.                          *
*                                                                    *
* Arguments    : mesh    IN  : An initialized mesh handle.           *
*                                                                    *
* Comment      :                                                     *
*                                                                    *
\********************************************************************/
void cubetower (ULONG mesh) {
  ULONG red,green,blue,white,black;
  TOCLColor color;
  TOCLVertex vt,vs;
  
  MWLMeshMaterialAdd(mesh,&red);
  color.r=255,color.g=0,color.b=0;
  MWLMeshMaterialNameSet(mesh,red,"Red");
  MWLMeshMaterialDiffuseColorSet(mesh,red,&color);
  MWLMeshMaterialShininessSet(mesh,red,0);
  MWLMeshMaterialTransparencySet(mesh,red,0);

  MWLMeshMaterialAdd(mesh,&green);
  color.r=0,color.g=255,color.b=0;
  MWLMeshMaterialNameSet(mesh,green,"Green");
  MWLMeshMaterialDiffuseColorSet(mesh,green,&color);
  MWLMeshMaterialShininessSet(mesh,green,0);
  MWLMeshMaterialTransparencySet(mesh,green,0);

  MWLMeshMaterialAdd(mesh,&blue);
  color.r=0,color.g=0,color.b=255;
  MWLMeshMaterialNameSet(mesh,blue,"Blue");
  MWLMeshMaterialDiffuseColorSet(mesh,blue,&color);
  MWLMeshMaterialShininessSet(mesh,blue,0);
  MWLMeshMaterialTransparencySet(mesh,blue,0);

  MWLMeshMaterialAdd(mesh,&white);
  color.r=255,color.g=255,color.b=255;
  MWLMeshMaterialNameSet(mesh,white,"White");
  MWLMeshMaterialDiffuseColorSet(mesh,white,&color);
  MWLMeshMaterialShininessSet(mesh,white,0);
  MWLMeshMaterialTransparencySet(mesh,white,0);

  MWLMeshMaterialAdd(mesh,&black);
  color.r=0,color.g=0,color.b=0;
  MWLMeshMaterialNameSet(mesh,black,"Black");
  MWLMeshMaterialDiffuseColorSet(mesh,black,&color);
  MWLMeshMaterialShininessSet(mesh,black,0);
  MWLMeshMaterialTransparencySet(mesh,black,0);

  MWLMeshNameSet(mesh,"Cubetower");

  vs.x=10,vs.y=10,vs.z=10;

  MWLMeshScaleChange(mesh,&vs,CTMSET);
  cube(mesh,black);

  vs.x=2,vs.y=2,vs.z=2;

  MWLMeshScaleGet(mesh,&vt);
  vt.x=0;vt.y=0;vt.z-=1;

  MWLMeshScaleChange(mesh,&vs,CTMSUB);
  MWLMeshTranslationChange(mesh,&vt,CTMSET);
  cube(mesh,red);

  MWLMeshScaleGet(mesh,&vt);
  vt.x=0;vt.y=0;vt.z-=1;

  MWLMeshScaleChange(mesh,&vs,CTMSUB);
  MWLMeshTranslationChange(mesh,&vt,CTMADD);
  cube(mesh,blue);

  MWLMeshScaleGet(mesh,&vt);
  vt.x=0;vt.y=0;vt.z-=1;

  MWLMeshScaleChange(mesh,&vs,CTMSUB);
  MWLMeshTranslationChange(mesh,&vt,CTMADD);
  cube(mesh,green);

  MWLMeshScaleGet(mesh,&vt);
  vt.x=0;vt.y=0;vt.z-=1;

  MWLMeshScaleChange(mesh,&vs,CTMSUB);
  MWLMeshTranslationChange(mesh,&vt,CTMADD);
  cube(mesh,white);
}

/************************* End of file ******************************/
