/*****************/ /*** Map Stuph ***/ /*****************/ #include "stdafx.h" #include #include #include #include "Map.h" /*****************************************************************************/ void CMap::Load(CFile *File,int Version) { // Version 1 int Width; int Height; int VFix=0; // Fix for New tileset shash if (Version<2) VFix=1; File->Read(&Width,sizeof(int)); File->Read(&Height,sizeof(int)); Delete(); SetSize(Width,Height); for (int Y=0;YRead(&ThisElem,sizeof(sMapElem)); ThisElem.Set+=VFix; if (Version==3) { ThisElem.Set--; if (ThisElem.Set<0) { ThisElem.Set=0; } } Set(X,Y,ThisElem,TRUE); } } } /*****************************************************************************/ void CMap::Save(CFile *File) { int Width=GetWidth(); int Height=GetHeight(); File->Write(&Width,sizeof(int)); File->Write(&Height,sizeof(int)); for (int Y=0;YWrite(&ThisElem,sizeof(sMapElem)); } } } /*****************************************************************************/ void CMap::SetSize(int Width,int Height,BOOL ClearFlag) { Map.resize(Width); for (int i=0;i=0 && X=0 && Yright+R->left)-1; for (int Y=R->top; Ybottom; Y++) { for (int X=R->left; Xright; X++) { sMapElem &ThisElem=Old.Get(X,Y); ThisElem.Flags^=Flag; Set(Ofs-X,Y,ThisElem,true); } } } /*****************************************************************************/ void CMap::MirrorY(int Flag,CRect *R) { CMap Old=*this; if (!R) { // No rect, use full R=new CRect(0,0,GetWidth(),GetHeight()); } int Ofs=(R->bottom+R->top)-1; for (int Y=R->top; Ybottom; Y++) { for (int X=R->left; Xright; X++) { sMapElem &ThisElem=Old.Get(X,Y); ThisElem.Flags^=Flag; Set(X,Ofs-Y,ThisElem,true); } } } /*****************************************************************************/ void CMap::SetFlags(int Flags,int Mask,CRect *R) { if (!R) { // No rect, use full R=new CRect(0,0,GetWidth(),GetHeight()); } for (int Y=R->top; Ybottom; Y++) { for (int X=R->left; Xright; X++) { sMapElem &ThisElem=Get(X,Y); ThisElem.Flags&=Mask; ThisElem.Flags|=Flags; } } } /*****************************************************************************/ void CMap::Paste(CMap &Src,CRect *R) { if (!R) { // No rect, use full R=new CRect(0,0,GetWidth(),GetHeight()); } for (int Y=0; YHeight(); Y++) { for (int X=0; XWidth(); X++) { int SrcX=X % Src.GetWidth(); int SrcY=Y % Src.GetHeight(); sMapElem &ThisElem=Src.Get(SrcX,SrcY); Set(X+R->left,Y+R->top,ThisElem,true); } } } /*****************************************************************************/ BOOL CMap::DoesContainTile(sMapElem &Tile) { int Width=GetWidth(); int Height=GetHeight(); for (int Y=0; Y