From 84d1f79fdf02e0010e4b2d118458e8cd8ce0dd71 Mon Sep 17 00:00:00 2001 From: Krzysztof H Date: Fri, 9 Mar 2012 17:08:05 +0100 Subject: Added license info using a small program SrcHead. --- src/terrain.cpp | 140 +++++++++++++++++++++++++++++++------------------------- 1 file changed, 77 insertions(+), 63 deletions(-) (limited to 'src/terrain.cpp') diff --git a/src/terrain.cpp b/src/terrain.cpp index 3d19cac..c87494f 100644 --- a/src/terrain.cpp +++ b/src/terrain.cpp @@ -1,4 +1,18 @@ -// terrain.cpp +// * This file is part of the COLOBOT source code +// * Copyright (C) 2001-2008, Daniel ROUX & EPSITEC SA, www.epsitec.ch +// * +// * This program is free software: you can redistribute it and/or modify +// * it under the terms of the GNU General Public License as published by +// * the Free Software Foundation, either version 3 of the License, or +// * (at your option) any later version. +// * +// * This program is distributed in the hope that it will be useful, +// * but WITHOUT ANY WARRANTY; without even the implied warranty of +// * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// * GNU General Public License for more details. +// * +// * You should have received a copy of the GNU General Public License +// * along with this program. If not, see . #define STRICT #define D3D_OVERLOADS @@ -71,14 +85,14 @@ CTerrain::~CTerrain() } -// Génère un nouveau terrain plat. -// Le terrain est composé de mosaïques, elles-mêmes composées -// de briques. Chaque brique est composée de 2 triangles. -// mosaic: nombre de mosaïques selon les axes X et Z +// G�n�re un nouveau terrain plat. +// Le terrain est compos� de mosa�ques, elles-m�mes compos�es +// de briques. Chaque brique est compos�e de 2 triangles. +// mosaic: nombre de mosa�ques selon les axes X et Z // brick: nombre de briques (puissance de 2) // size: taille d'une brique selon les axes X et Z -// vision: vision avant un changement de résolution -// scaleMapping: échelle pour mapper les textures +// vision: vision avant un changement de r�solution +// scaleMapping: �chelle pour mapper les textures // // ^ z // | <---> brick*size @@ -153,7 +167,7 @@ float CTerrain::RetScaleRelief() } -// Initialise les noms des textures à utiliser pour le terrain. +// Initialise les noms des textures � utiliser pour le terrain. BOOL CTerrain::InitTextures(char* baseName, int* table, int dx, int dy) { @@ -163,7 +177,7 @@ BOOL CTerrain::InitTextures(char* baseName, int* table, int dx, int dy) m_bLevelText = FALSE; strcpy(m_texBaseName, baseName); - p = strchr(m_texBaseName, '.'); // p <- ^début de l'extension + p = strchr(m_texBaseName, '.'); // p <- ^d�but de l'extension if ( p == 0 ) { strcpy(m_texBaseExt, ".tga"); @@ -195,7 +209,7 @@ void CTerrain::LevelFlush() LevelCloseTable(); } -// Initialise les noms des textures à utiliser pour le terrain. +// Initialise les noms des textures � utiliser pour le terrain. BOOL CTerrain::LevelMaterial(int id, char* baseName, float u, float v, int up, int right, int down, int left, @@ -237,16 +251,16 @@ BOOL CTerrain::LevelMaterial(int id, char* baseName, float u, float v, // Charge le relief dans un fichier BMP. -// La taille de l'image doit être de dimension dx et dy, +// La taille de l'image doit �tre de dimension dx et dy, // avec dx=dy=(mosaic*brick)+1. // L'image doit avoir 8 bits/pixels, 256 couleurs avec // une palette standard. -// Conversion coordonnée image (x;y) -> world (x;-;z) : +// Conversion coordonn�e image (x;y) -> world (x;-;z) : // Wx = 5*Ix-400 // Wz = -(5*Iy-400) -// Conversion coordonnée world (x;-;z) -> image (x;y) : +// Conversion coordonn�e world (x;-;z) -> image (x;y) : // Ix = (400+Wx)/5 // Iy = (400-Wz)/5 @@ -259,7 +273,7 @@ BOOL CTerrain::ResFromBMP(const char* filename) if ( file == NULL ) return FALSE; size = (m_mosaic*m_brick)+1; - sizem = ((size+4-1)/4)*4; // taille multiple de 4 supérieur + sizem = ((size+4-1)/4)*4; // taille multiple de 4 sup�rieur if ( m_resources != 0 ) { @@ -297,7 +311,7 @@ TerrainRes CTerrain::RetResource(const D3DVECTOR &p) y < 0 || y > m_mosaic*m_brick ) return TR_NULL; size = (m_mosaic*m_brick)+1; - sizem = ((size+4-1)/4)*4; // taille multiple de 4 supérieur + sizem = ((size+4-1)/4)*4; // taille multiple de 4 sup�rieur ress = m_resources[BMPHEAD+x+sizem*y]; if ( ress == 5 ) return TR_STONE; // rouge ? @@ -321,17 +335,17 @@ void CTerrain::FlushRelief() } // Charge le relief dans un fichier BMP. -// La taille de l'image doit être de dimension dx et dy, +// La taille de l'image doit �tre de dimension dx et dy, // avec dx=dy=(mosaic*brick)+1. // L'image doit avoir 8 bits/pixels, 256 niveaux de gris : // blanc = sol (y=0) // noir = montagne (y=255*scaleRelief) -// Conversion coordonnée image (x;y) -> world (x;-;z) : +// Conversion coordonn�e image (x;y) -> world (x;-;z) : // Wx = 5*Ix-400 // Wz = -(5*Iy-400) -// Conversion coordonnée world (x;-;z) -> image (x;y) : +// Conversion coordonn�e world (x;-;z) -> image (x;y) : // Ix = (400+Wx)/5 // Iy = (400-Wz)/5 @@ -349,7 +363,7 @@ BOOL CTerrain::ReliefFromBMP(const char* filename, float scaleRelief, if ( file == NULL ) return FALSE; size = (m_mosaic*m_brick)+1; - sizem = ((size+4-1)/4)*4; // taille multiple de 4 supérieur + sizem = ((size+4-1)/4)*4; // taille multiple de 4 sup�rieur buffer = (unsigned char*)malloc(BMPHEAD+sizem*size); fread(buffer, BMPHEAD+sizem*size, 1, file); @@ -389,7 +403,7 @@ BOOL CTerrain::ReliefFromBMP(const char* filename, float scaleRelief, return TRUE; } -// Ajoute un point d'élévation dans le buffer du relief. +// Ajoute un point d'�l�vation dans le buffer du relief. BOOL CTerrain::ReliefAddDot(D3DVECTOR pos, float scaleRelief) { @@ -550,7 +564,7 @@ BOOL CTerrain::ReliefFromDXF(const char* filename, float scaleRelief) } -// Ajuste une position pour qu'elle ne dépasse pas les limites. +// Ajuste une position pour qu'elle ne d�passe pas les limites. void CTerrain::LimitPos(D3DVECTOR &pos) { @@ -569,8 +583,8 @@ void CTerrain::LimitPos(D3DVECTOR &pos) } -// Ajuste les bords de chaque mosaïque pour être compatible -// avec toutes les résolutions inférieures. +// Ajuste les bords de chaque mosa�que pour �tre compatible +// avec toutes les r�solutions inf�rieures. void CTerrain::AdjustRelief() { @@ -735,8 +749,8 @@ D3DVERTEX2 CTerrain::RetVertex(int x, int y, int step) return v; } -// Crée tous les objets d'une mosaïque. -// L'origine d'une mosaïque est son centre. +// Cr�e tous les objets d'une mosa�que. +// L'origine d'une mosa�que est son centre. // // ^ z // | @@ -920,12 +934,12 @@ BOOL CTerrain::CreateMosaic(int ox, int oy, int step, int objRank, // | | | | // 0.0 min max 1.0 // -// Les coordonnées u-v utilisées pour le texturage sont comprises +// Les coordonn�es u-v utilis�es pour le texturage sont comprises // entre min et max (au lieu de 0 et 1). Ceci permet d'exclure les -// pixels situés dans une marge d'un pixel tout autour de la surface. +// pixels situ�s dans une marge d'un pixel tout autour de la surface. -// Cherche un matériaux d'après son identificateur. +// Cherche un mat�riaux d'apr�s son identificateur. TerrainMaterial* CTerrain::LevelSearchMat(int id) { @@ -942,7 +956,7 @@ TerrainMaterial* CTerrain::LevelSearchMat(int id) return 0; } -// Choix de la texture à utiliser pour un carré donné. +// Choix de la texture � utiliser pour un carr� donn�. void CTerrain::LevelTextureName(int x, int y, char *name, FPOINT &uv) { @@ -983,7 +997,7 @@ float CTerrain::LevelRetHeight(int x, int y) return m_relief[x+y*size]; } -// Décide si un point utilise le matériaux. +// D�cide si un point utilise le mat�riaux. BOOL CTerrain::LevelGetDot(int x, int y, float min, float max, float slope) { @@ -1031,7 +1045,7 @@ BOOL CTerrain::LevelGetDot(int x, int y, float min, float max, float slope) return FALSE; } -// Cherche si un matériau existe. +// Cherche si un mat�riau existe. // Retourne l'index dans m_levelMat ou -1 s'il n'existe pas. // m_levelMat[i].id donne l'identificateur. @@ -1050,7 +1064,7 @@ int CTerrain::LevelTestMat(char *mat) return -1; } -// Modifie l'état d'un point et de ses 4 voisins, sans tester si +// Modifie l'�tat d'un point et de ses 4 voisins, sans tester si // c'est possible. void CTerrain::LevelSetDot(int x, int y, int id, char *mat) @@ -1078,7 +1092,7 @@ void CTerrain::LevelSetDot(int x, int y, int id, char *mat) m_levelDot[x+y*m_levelDotSize].mat[2] = mat[2]; m_levelDot[x+y*m_levelDotSize].mat[3] = mat[3]; - // Modifie le voisin inférieur. + // Modifie le voisin inf�rieur. if ( (x+0) >= 0 && (x+0) < m_levelDotSize && (y-1) >= 0 && (y-1) < m_levelDotSize ) { @@ -1110,7 +1124,7 @@ void CTerrain::LevelSetDot(int x, int y, int id, char *mat) } } - // Modifie le voisin supérieur. + // Modifie le voisin sup�rieur. if ( (x+0) >= 0 && (x+0) < m_levelDotSize && (y+1) >= 0 && (y+1) < m_levelDotSize ) { @@ -1143,14 +1157,14 @@ void CTerrain::LevelSetDot(int x, int y, int id, char *mat) } } -// Teste si un matériau est possible à un endroit donné, en fonction +// Teste si un mat�riau est possible � un endroit donn�, en fonction // de ses 4 voisins. Si oui, met le point. BOOL CTerrain::LevelIfDot(int x, int y, int id, char *mat) { char test[4]; - // Compatible avec voisin inférieur ? + // Compatible avec voisin inf�rieur ? if ( x+0 >= 0 && x+0 < m_levelDotSize && y-1 >= 0 && y-1 < m_levelDotSize ) { @@ -1174,7 +1188,7 @@ BOOL CTerrain::LevelIfDot(int x, int y, int id, char *mat) if ( LevelTestMat(test) == -1 ) return FALSE; } - // Compatible avec voisin supérieur ? + // Compatible avec voisin sup�rieur ? if ( x+0 >= 0 && x+0 < m_levelDotSize && y+1 >= 0 && y+1 < m_levelDotSize ) { @@ -1202,7 +1216,7 @@ BOOL CTerrain::LevelIfDot(int x, int y, int id, char *mat) return TRUE; } -// Modifie l'état d'un point. +// Modifie l'�tat d'un point. BOOL CTerrain::LevelPutDot(int x, int y, int id) { @@ -1366,7 +1380,7 @@ BOOL CTerrain::LevelPutDot(int x, int y, int id) return FALSE; } -// Initialise tout le terrain avec un matériau. +// Initialise tout le terrain avec un mat�riau. BOOL CTerrain::LevelInit(int id) { @@ -1389,7 +1403,7 @@ BOOL CTerrain::LevelInit(int id) return TRUE; } -// Génère un niveau dans le terrain. +// G�n�re un niveau dans le terrain. BOOL CTerrain::LevelGenerate(int *id, float min, float max, float slope, float freq, @@ -1424,7 +1438,7 @@ BOOL CTerrain::LevelGenerate(int *id, float min, float max, group = m_brick/m_subdivMapping; - if ( radius > 0.0f && radius < 5.0f ) // juste un carré ? + if ( radius > 0.0f && radius < 5.0f ) // juste un carr� ? { dim = (m_mosaic*m_brick*m_size)/2.0f; @@ -1483,7 +1497,7 @@ void CTerrain::LevelOpenTable() int i, j; if ( !m_bLevelText ) return; - if ( m_levelDot != 0 ) return; // déjà alloué + if ( m_levelDot != 0 ) return; // d�j� allou� m_levelDotSize = (m_mosaic*m_brick)/(m_brick/m_subdivMapping)+1; m_levelDot = (DotLevel*)malloc(m_levelDotSize*m_levelDotSize*sizeof(DotLevel)); @@ -1507,7 +1521,7 @@ void CTerrain::LevelCloseTable() -// Crée tous les objets pour une maille carrée du terrain. +// Cr�e tous les objets pour une maille carr�e du terrain. BOOL CTerrain::CreateSquare(BOOL bMultiRes, int x, int y) { @@ -1549,7 +1563,7 @@ BOOL CTerrain::CreateSquare(BOOL bMultiRes, int x, int y) return TRUE; } -// Crée tous les objets du terrain dans le moteur 3D. +// Cr�e tous les objets du terrain dans le moteur 3D. BOOL CTerrain::CreateObjects(BOOL bMultiRes) { @@ -1650,7 +1664,7 @@ BOOL CTerrain::Terraform(const D3DVECTOR &p1, const D3DVECTOR &p2, float height) for ( x=pp1.x ; x<=pp2.x ; x++ ) { m_engine->DeleteObject(m_objRank[x+y*m_mosaic]); - CreateSquare(m_bMultiText, x, y); // recrée le carré + CreateSquare(m_bMultiText, x, y); // recr�e le carr� } } m_engine->Update(); @@ -1672,7 +1686,7 @@ D3DVECTOR CTerrain::RetWind() } -// Donne la pente exacte du terrain à un endroit donné. +// Donne la pente exacte du terrain � un endroit donn�. float CTerrain::RetFineSlope(const D3DVECTOR &pos) { @@ -1682,7 +1696,7 @@ float CTerrain::RetFineSlope(const D3DVECTOR &pos) return Abs(RotateAngle(Length(n.x, n.z), n.y)-PI/2.0f); } -// Donne la pente approximative du terrain à un endroit donné. +// Donne la pente approximative du terrain � un endroit donn�. float CTerrain::RetCoarseSlope(const D3DVECTOR &pos) { @@ -1710,7 +1724,7 @@ float CTerrain::RetCoarseSlope(const D3DVECTOR &pos) return atanf((max-min)/m_size); } -// Donne le vecteur normal à la position p(x,-,z) du terrain. +// Donne le vecteur normal � la position p(x,-,z) du terrain. BOOL CTerrain::GetNormal(D3DVECTOR &n, const D3DVECTOR &p) { @@ -1827,7 +1841,7 @@ float CTerrain::RetFloorHeight(const D3DVECTOR &p, BOOL bBrut, BOOL bWater) return p.y-ps.y; } -// Modifie la coordonnée "y" du point "p" pour qu'il repose +// Modifie la coordonn�e "y" du point "p" pour qu'il repose // sur le sol du terrain. BOOL CTerrain::MoveOnFloor(D3DVECTOR &p, BOOL bBrut, BOOL bWater) @@ -1869,8 +1883,8 @@ BOOL CTerrain::MoveOnFloor(D3DVECTOR &p, BOOL bBrut, BOOL bWater) return TRUE; } -// Modifie une coordonnée pour qu'elle soit sur le terrain. -// Retourne FALSE si la coordonnée initiale était trop loin. +// Modifie une coordonn�e pour qu'elle soit sur le terrain. +// Retourne FALSE si la coordonn�e initiale �tait trop loin. BOOL CTerrain::ValidPosition(D3DVECTOR &p, float marging) { @@ -1908,14 +1922,14 @@ BOOL CTerrain::ValidPosition(D3DVECTOR &p, float marging) -// Vide la table des élévations. +// Vide la table des �l�vations. void CTerrain::FlushBuildingLevel() { m_buildingUsed = 0; } -// Ajoute une nouvelle élévation pour un batiment. +// Ajoute une nouvelle �l�vation pour un batiment. BOOL CTerrain::AddBuildingLevel(D3DVECTOR center, float min, float max, float height, float factor) @@ -1949,8 +1963,8 @@ BOOL CTerrain::AddBuildingLevel(D3DVECTOR center, float min, float max, return TRUE; } -// Met à jour l'élévation pour un batiment lorsqu'il a été déplacé -// en hauteur (suite à un terraformage). +// Met � jour l'�l�vation pour un batiment lorsqu'il a �t� d�plac� +// en hauteur (suite � un terraformage). BOOL CTerrain::UpdateBuildingLevel(D3DVECTOR center) { @@ -1969,7 +1983,7 @@ BOOL CTerrain::UpdateBuildingLevel(D3DVECTOR center) return FALSE; } -// Supprime l'élévation pour un batiment lorsqu'il a été détruit. +// Supprime l'�l�vation pour un batiment lorsqu'il a �t� d�truit. BOOL CTerrain::DeleteBuildingLevel(D3DVECTOR center) { @@ -1992,7 +2006,7 @@ BOOL CTerrain::DeleteBuildingLevel(D3DVECTOR center) } // Retourne le facteur d'influence si une position est sur une -// élévation éventuelle. +// �l�vation �ventuelle. float CTerrain::RetBuildingFactor(const D3DVECTOR &p) { @@ -2016,7 +2030,7 @@ float CTerrain::RetBuildingFactor(const D3DVECTOR &p) return 1.0f; // on est sur le sol normnal } -// Ajuste une position en fonction d'une élévation éventuelle. +// Ajuste une position en fonction d'une �l�vation �ventuelle. void CTerrain::AdjustBuildingLevel(D3DVECTOR &p) { @@ -2067,8 +2081,8 @@ void CTerrain::AdjustBuildingLevel(D3DVECTOR &p) } -// Retourne la dureté du terrain à un endroit donné. -// La dureté détermine le bruit (SOUND_STEP et SOUND_BOUM). +// Retourne la duret� du terrain � un endroit donn�. +// La duret� d�termine le bruit (SOUND_STEP et SOUND_BOUM). float CTerrain::RetHardness(const D3DVECTOR &p) { @@ -2077,7 +2091,7 @@ float CTerrain::RetHardness(const D3DVECTOR &p) int x, y, id; factor = RetBuildingFactor(p); - if ( factor != 1.0f ) return 1.0f; // sur bâtiment + if ( factor != 1.0f ) return 1.0f; // sur b�timent if ( m_levelDot == 0 ) return m_defHardness; @@ -2145,7 +2159,7 @@ void CTerrain::GroundFlat(D3DVECTOR pos) // Calcule le rayon de la plus grande zone platte disponible. -// Ce calcul n'est pas optimisé ! +// Ce calcul n'est pas optimis� ! float CTerrain::RetFlatZoneRadius(D3DVECTOR center, float max) { @@ -2186,7 +2200,7 @@ float CTerrain::RetFlatZoneRadius(D3DVECTOR center, float max) -// Spécifie la hauteur maximale de vol. +// Sp�cifie la hauteur maximale de vol. void CTerrain::SetFlyingMaxHeight(float height) { -- cgit v1.2.3-1-g7c22