step1 for cliffs; enable manually in map.cpp in Map::smoothSurface(...) ; set minCliffHeightDifference to 3.0f
This commit is contained in:
parent
ef3aaacbc2
commit
f2caf186f9
|
@ -1 +1 @@
|
|||
../../data/glest_game/data
|
||||
../../data/glest_game/data/
|
|
@ -3,6 +3,9 @@
|
|||
VERSION=`./mg-version.sh --version`
|
||||
RELEASENAME=megaglest-source
|
||||
RELEASEDIR="`pwd`/release/$RELEASENAME-$VERSION"
|
||||
RELEASESOURCEDIR=$RELEASEDIR/source
|
||||
MKDIR=$RELEASEDIR/mk
|
||||
CMAKEDIR=$MKDIR/cmake
|
||||
|
||||
echo "Creating source package in $RELEASEDIR"
|
||||
|
||||
|
@ -27,10 +30,12 @@ popd
|
|||
popd
|
||||
|
||||
cp -p ../../docs/readme*.txt ../../docs/*license*.txt $RELEASEDIR
|
||||
cp -p ../../build-mg*.sh $RELEASEDIR
|
||||
cp -p ../../CMakeLists.txt $RELEASEDIR
|
||||
cp -p glest.ini $RELEASEDIR
|
||||
cp -p glestkeys.ini $RELEASEDIR
|
||||
cp -p servers.ini $RELEASEDIR
|
||||
cp -p glest.ico $RELEASEDIR
|
||||
cp -p megaglest.ico $RELEASEDIR
|
||||
cp -p glest.ico $RELEASEDIR
|
||||
cp -p ../../CMake* $RELEASEDIR
|
||||
|
||||
|
|
|
@ -271,9 +271,9 @@ Checksum Map::load(const string &path, TechTree *techTree, Tileset *tileset) {
|
|||
return mapChecksum;
|
||||
}
|
||||
|
||||
void Map::init() {
|
||||
void Map::init(Tileset *tileset) {
|
||||
Logger::getInstance().add("Heightmap computations", true);
|
||||
smoothSurface();
|
||||
smoothSurface(tileset);
|
||||
computeNormals();
|
||||
computeInterpolatedHeights();
|
||||
computeNearSubmerged();
|
||||
|
@ -1076,34 +1076,61 @@ void Map::computeInterpolatedHeights(){
|
|||
}
|
||||
|
||||
|
||||
void Map::smoothSurface(){
|
||||
void Map::smoothSurface(Tileset *tileset) {
|
||||
|
||||
float *oldHeights= new float[getSurfaceCellArraySize()];
|
||||
float minCliffHeightDifference=0.0f;
|
||||
float *oldHeights = new float[getSurfaceCellArraySize()];
|
||||
|
||||
for(int i=0; i < getSurfaceCellArraySize(); ++i) {
|
||||
oldHeights[i]= surfaceCells[i].getHeight();
|
||||
for (int i = 0; i < getSurfaceCellArraySize(); ++i) {
|
||||
oldHeights[i] = surfaceCells[i].getHeight();
|
||||
}
|
||||
|
||||
for(int i=1; i<surfaceW-1; ++i){
|
||||
for(int j=1; j<surfaceH-1; ++j){
|
||||
for (int i = 1; i < surfaceW - 1; ++i) {
|
||||
for (int j = 1; j < surfaceH - 1; ++j) {
|
||||
|
||||
float height= 0.f;
|
||||
for(int k=-1; k<=1; ++k){
|
||||
for(int l=-1; l<=1; ++l){
|
||||
height+= oldHeights[(j+k)*surfaceW+(i+l)];
|
||||
float height = 0.f;
|
||||
float numUsedToSmooth = 0.f;
|
||||
for (int k = -1; k <= 1; ++k) {
|
||||
for (int l = -1; l <= 1; ++l) {
|
||||
if (minCliffHeightDifference<=0.1f || minCliffHeightDifference > abs(oldHeights[(j) * surfaceW + (i)]
|
||||
- oldHeights[(j + k) * surfaceW + (i + l)])) {
|
||||
height += oldHeights[(j + k) * surfaceW + (i + l)];
|
||||
numUsedToSmooth++;
|
||||
} else {
|
||||
// we have something which should not be smoothed!
|
||||
// This is a cliff and must be textured -> set cliff texture
|
||||
getSurfaceCell(i, j)->setSurfaceType(5);
|
||||
//set invisible blocking object and replace resource objects
|
||||
//and non blocking objects with invisible blocker too
|
||||
Object *formerObject =
|
||||
getSurfaceCell(i, j)->getObject();
|
||||
if (formerObject != NULL) {
|
||||
if (formerObject->getWalkable()
|
||||
|| formerObject->getResource() != NULL) {
|
||||
delete formerObject;
|
||||
formerObject = NULL;
|
||||
}
|
||||
}
|
||||
if (formerObject == NULL) {
|
||||
Object *o = new Object(tileset->getObjectType(9),
|
||||
getSurfaceCell(i, j)->getVertex(), Vec2i(i,
|
||||
j));
|
||||
getSurfaceCell(i, j)->setObject(o);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
height/= 9.f;
|
||||
|
||||
height /= numUsedToSmooth;
|
||||
|
||||
getSurfaceCell(i, j)->setHeight(height);
|
||||
Object *object= getSurfaceCell(i, j)->getObject();
|
||||
if(object!=NULL){
|
||||
Object *object = getSurfaceCell(i, j)->getObject();
|
||||
if (object != NULL) {
|
||||
object->setHeight(height);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
delete [] oldHeights;
|
||||
delete[] oldHeights;
|
||||
}
|
||||
|
||||
void Map::computeNearSubmerged(){
|
||||
|
|
|
@ -175,7 +175,7 @@ public:
|
|||
~Map();
|
||||
Checksum * getChecksumValue() { return &checksumValue; }
|
||||
|
||||
void init();
|
||||
void init(Tileset *tileset);
|
||||
Checksum load(const string &path, TechTree *techTree, Tileset *tileset);
|
||||
|
||||
//get
|
||||
|
@ -250,7 +250,7 @@ public:
|
|||
|
||||
private:
|
||||
//compute
|
||||
void smoothSurface();
|
||||
void smoothSurface(Tileset *tileset);
|
||||
void computeNearSubmerged();
|
||||
void computeCellColors();
|
||||
};
|
||||
|
|
|
@ -136,7 +136,15 @@ void Tileset::load(const string &dir, Checksum *checksum, Checksum *tilesetCheck
|
|||
//surfaces
|
||||
const XmlNode *surfacesNode= tilesetNode->getChild("surfaces");
|
||||
for(int i=0; i<surfCount; ++i){
|
||||
const XmlNode *surfaceNode= surfacesNode->getChild("surface", i);
|
||||
const XmlNode *surfaceNode;
|
||||
if(surfacesNode->hasChildAtIndex("surface",i)){
|
||||
surfaceNode= surfacesNode->getChild("surface", i);
|
||||
}
|
||||
else {
|
||||
// cliff texture does not exist, use texture 2 instead
|
||||
surfaceNode= surfacesNode->getChild("surface", 2);
|
||||
}
|
||||
|
||||
|
||||
int childCount= surfaceNode->getChildCount();
|
||||
surfPixmaps[i].resize(childCount);
|
||||
|
|
|
@ -100,7 +100,7 @@ public:
|
|||
class Tileset{
|
||||
public:
|
||||
static const int waterTexCount= 1;
|
||||
static const int surfCount= 5;
|
||||
static const int surfCount= 6;
|
||||
static const int objCount= 10;
|
||||
static const int transitionVars= 2; //number or different transition textures
|
||||
|
||||
|
|
|
@ -1224,7 +1224,7 @@ void World::initUnits() {
|
|||
|
||||
void World::initMap() {
|
||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||
map.init();
|
||||
map.init(&tileset);
|
||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue