//--------------------------------------------------------------------------- // // Vertex.h -- File contains class definitions for the Terrain Vertices // // MechCommander 2 // //---------------------------------------------------------------------------// // Copyright (C) Microsoft Corporation. All rights reserved. // //===========================================================================// #ifndef VERTEX_H #define VERTEX_H //--------------------------------------------------------------------------- // Include Files #ifndef DVERTEX_H #include "dvertex.h" #endif #include //--------------------------------------------------------------------------- // Macro Definitions #define BOTTOMRIGHT 0 #define BOTTOMLEFT 1 #ifndef NO_ERR #define NO_ERR 0 #endif //--------------------------------------------------------------------------- // Classes struct PostcompVertex { //--------------------------------------------------- // This Structure is used to store the data the 3D // version of the terrain uses so I don't have to // recalculate it every frame! // // Replaces the pVertex pointer in Vertex Class Stuff::Vector3D vertexNormal; //Used for lighting float elevation; //Stored here so terrain can be locally deformed DWORD textureData; //Top word is Overlay TXM, Bottom Word is Base TXM DWORD localRGBLight; //aRGB format DWORD terrainType; //terrainTypeNumber. BYTE selected; // selection BYTE water; //Additional Storage to pull into 16 Byte Alignment BYTE shadow; BYTE highlighted; //Used to highlight WHOLE FACES!!! float getElevation (void) { return elevation; } PostcompVertex& operator=( const PostcompVertex& src ); PostcompVertex( const PostcompVertex& ); PostcompVertex(); }; typedef PostcompVertex *PostcompVertexPtr; //--------------------------------------------------------------------------- class Vertex { //Data Members //------------- public: PostcompVertexPtr pVertex; //Pointer to PostcompVertex for this Vertex float vx,vy; //Unrotated World Coordinates of Vertex float px,py; //Screen Coordinates of vertex. float pz,pw; //Depth of vertex. long vertexNum; //Physical Vertex Position in mapData //Used by new Object positioning system. long blockVertex; //What terrain block is this vertex part of.vertexNumber; //What vertex number in the block long posTile; //Where are we on the tile! Saves 24 divides per tile if overlay on tile!!! //Saves a mere 8 if no overlay! DWORD clipInfo; //Stores data on vertex clip information. DWORD lightRGB; //Light at this vertex. DWORD fogRGB; //Fog at this vertex. float wx,wy; //Screen Coordinates of water face if there is one! float wz,ww; //Depth of vertex for water if there is one! float wAlpha; //Used to environment Map Sky onto water. DWORD calcThisFrame; //Calced this vertex this frame? float hazeFactor; //Used to distance fog the terrain. #ifdef _DEBUG bool selected; //Debug to show which triangle I am on. #endif //Member Functions //----------------- public: void init (void) { pVertex = NULL; px = py = 0.0f; pz = pw = 0.0f; wx = wy = 0.0f; wz = ww = 0.0f; posTile = -1; vertexNum = -1; lightRGB = fogRGB = 0xffffffff; calcThisFrame = false; } Vertex (void) { init(); } void destroy (void) { } ~Vertex (void) { destroy(); } long init (PostcompVertexPtr preVertex) { init(); pVertex = preVertex; return(NO_ERR); } long getBlockNumber (void) { return (blockVertex>>16); } long getVertexNumber (void) { return (blockVertex & 0x0000ffff); } }; //--------------------------------------------------------------------------- extern long numTerrainFaces; //--------------------------------------------------------------------------- #endif