home *** CD-ROM | disk | FTP | other *** search
/ Cutting-Edge 3D Game Programming with C++ / CE3DC++.ISO / BOOK / CHAP12 / PANEL3D.HPP < prev    next >
C/C++ Source or Header  |  1996-04-23  |  3KB  |  106 lines

  1. //
  2. // File name: Panel3D.HPP
  3. //
  4. // Description: Header file for a 3D panel class
  5. //
  6. // Author: John De Goes
  7. //
  8. // Project: Cutting Edge 3D Game Programming
  9. //
  10.  
  11. #ifndef PANEL3DHPP
  12. #define PANEL3DHPP
  13.  
  14. #include "Point3D.HPP"
  15. #include "Point2D.HPP"
  16. #include "Vector3D.HPP"
  17. #include "Detail3D.HPP"
  18. #include "ATypes.HPP"
  19. #include "PolyEdge.HPP"
  20. #include "Matrix3D.HPP"
  21. #include "TextType.HPP"
  22.  
  23. #include <Dos.H>
  24.  
  25. // Forward declaration:
  26. class PanelObject;
  27.  
  28. // The panel class:
  29. class Panel3D {
  30. protected:                 // Data is protected
  31.   // Functions:
  32.   void CalcRadius ();      // Calculates panel radius
  33.   long CalcCenterZ ();     // Calculates center Z  
  34.   int inline CalcBFace (); // Determines if panel is backface
  35.   void CalcNormal ();      // Calculates the panel normal
  36.   int CheckExtents ();     // Determines if panel lies within
  37.                            // the Z extents
  38.   int CalcVisible3D ();    // Determines panel's visibility 
  39.                            // in 3D
  40.   int CalcVisible2D ();    // Determines panel's visibility
  41.                            // in 2D
  42.   void DisplaySel ( unsigned char *Dest );
  43.   void DisplayNorm ( unsigned char *Dest );
  44.   // Data:
  45.   Point3D *VPoint [ 4 ];   // 4 pointers to a vertex list
  46.   Detail3D Attrib [ 4 ];   // The panel's detail attributes
  47.   Vector Normal;           // The panel normal
  48.   Point2D SPoint [ 5 ];    // Maximum of 5 on-screen points
  49.   WORD SPCount, Invis;     // Screen point count & invisible flag
  50.   BYTE Color, TextHan;     // The panel color * texture handle
  51.   BYTE A, Pad1;
  52.   float RadiusXZ;         // The panel's X/Z extent
  53.   float RadiusY;          // The panel's Y extent
  54.   float Radius;
  55. public:                   // Data is public
  56.   Panel3D () { A = Color = Invis = 0; } // Constructor:
  57.   void Update ( Matrix3D &M );          // Update normal and misc. information
  58.   void Display ( unsigned char *Dest )
  59.      {
  60.      if ( A )
  61.         DisplaySel ( Dest );
  62.      else 
  63.      DisplayNorm ( Dest );
  64.      }
  65.   void Project ();                      // Project panel onto screen
  66.   void InitPosition () { CalcNormal (); CalcRadius (); } // Performs initialization
  67.   void CalcInten ();                    // Calculates panel's intensity
  68.   int Invisible () { return Invis; }    // Determine invisibility
  69.   int IsVisible2D () { return CalcVisible2D (); } // Determine visibility in 3D
  70.   int IsVisible3D () { return CalcVisible3D (); } // Determine visibility in 2D
  71.   
  72.   friend class PanelObject;   // Declare a friend class
  73.  
  74.   int HasVert ( Point3D &P )
  75.     {
  76.     if ( ( *VPoint [ 0 ] ) == P )
  77.        return 1;
  78.     if ( ( *VPoint [ 1 ] ) == P )
  79.        return 1;
  80.     if ( ( *VPoint [ 2 ] ) == P )
  81.        return 1;
  82.     if ( ( *VPoint [ 3 ] ) == P )
  83.        return 1;
  84.     return 0;
  85.     }
  86.  
  87.   void Select () { A = 10; }
  88.   void Deselect () { A = 0; }
  89.   BYTE GetState () { return A; }
  90.   void NexText ()
  91.      {
  92.      TextHan = ( BYTE ) ( ( TextHan + 1 ) % TextDat.TCount );
  93.      }
  94.   void RotText ()
  95.      {
  96.      Detail3D Temp;
  97.      Temp = Attrib [ 0 ];
  98.      Attrib [ 0 ] = Attrib [ 1 ];
  99.      Attrib [ 1 ] = Attrib [ 2 ];
  100.      Attrib [ 2 ] = Attrib [ 3 ];
  101.      Attrib [ 3 ] = Temp;
  102.      }
  103. };
  104.  
  105. #endif
  106.