/*******************/ /*** Layer Shade ***/ /*******************/ #include "stdafx.h" #include #include #include #include "GLEnabledView.h" #include "MapEdit.h" #include "MapEditDoc.h" #include "MapEditView.h" #include "MainFrm.h" #include "Core.h" #include "Layer.h" #include "LayerShade.h" #include "Utils.h" #include "Select.h" #include "Export.h" #include "LayerShadeGUI.h" /*****************************************************************************/ /*****************************************************************************/ /*****************************************************************************/ // New Layer CLayerShade::CLayerShade(int _SubType,int _Width,int _Height) { SubType=_SubType; SetDefaultParams(); Width=TileLayerMinWidth+(_Width-TileLayerMinWidth)/ScaleFactor; Height=TileLayerMinHeight+(_Height-TileLayerMinHeight)/ScaleFactor; RGB[0].rgbRed=255; RGB[0].rgbGreen=255; RGB[0].rgbBlue=255; RGB[1].rgbRed=255; RGB[1].rgbGreen=0; RGB[1].rgbBlue=0; RGB[2].rgbRed=0; RGB[2].rgbGreen=255; RGB[2].rgbBlue=0; RGB[3].rgbRed=0; RGB[3].rgbGreen=0; RGB[3].rgbBlue=255; Count=2; } /*****************************************************************************/ // Load Layer CLayerShade::CLayerShade(CFile *File,int Version) { Load(File,Version); } /*****************************************************************************/ CLayerShade::~CLayerShade() { } /*****************************************************************************/ void CLayerShade::Load(CFile *File,int Version) { File->Read(&Render3dFlag,sizeof(BOOL)); File->Read(&ScaleFactor,sizeof(float)); File->Read(&ResizeFlag,sizeof(BOOL)); File->Read(&VisibleFlag,sizeof(BOOL)); File->Read(&SubType,sizeof(int)); File->Read(&Width,sizeof(int)); File->Read(&Height,sizeof(int)); if (Version==2) { File->Read(&RGB[0],sizeof(RGBQUAD)); File->Read(&RGB[1],sizeof(RGBQUAD)); } else { File->Read(&Count,sizeof(int)); if (Count<2) Count=2; for (int i=0; iRead(&Pos[i],sizeof(int)); File->Read(&RGB[i],sizeof(RGBQUAD)); } } TRACE1("%s\t",GetName()); TRACE1("Scl:%g\t",ScaleFactor); TRACE1("%i\n",VisibleFlag); } /*****************************************************************************/ void CLayerShade::Save(CFile *File) { // Always Save current version File->Write(&Render3dFlag,sizeof(BOOL)); File->Write(&ScaleFactor,sizeof(float)); File->Write(&ResizeFlag,sizeof(BOOL)); File->Write(&VisibleFlag,sizeof(BOOL)); File->Write(&SubType,sizeof(SubType)); File->Write(&Width,sizeof(int)); File->Write(&Height,sizeof(int)); File->Write(&Count,sizeof(int)); for (int i=0; iWrite(&Pos[i],sizeof(int)); File->Write(&RGB[i],sizeof(RGBQUAD)); } } /*****************************************************************************/ /*****************************************************************************/ /*****************************************************************************/ void CLayerShade::Render(CCore *Core,Vector3 &CamPos,bool Is3d) { Vector3 ThisCam=Core->OffsetCam(CamPos,GetScaleFactor()); float ZoomW=Core->GetZoomW(); float ZoomH=Core->GetZoomH(); float ScrOfsX=(ZoomW/2); float ScrOfsY=(ZoomH/2); Vector3 &Scale=Core->GetScaleVector(); int ThisCount=Count-1; float X0=0; float X1=Width; float Y=(0+1); float YInc=(float)Height/(float)ThisCount; glMatrixMode(GL_MODELVIEW); glPushMatrix(); glLoadIdentity(); glScalef(Scale.x,Scale.y,Scale.z); glTranslatef(-ThisCam.x,ThisCam.y,0); // Set scroll offset glTranslatef(-ScrOfsX,ScrOfsY,0); // Bring to top left corner glBegin (GL_QUADS); for (int i=0; iGUIAdd(ShadeDlg,IDD_LAYERSHADE_GUI); for (int i=0; iGUIRemove(ShadeDlg,IDD_LAYERSHADE_GUI); } /*****************************************************************************/ void CLayerShade::GUIUpdate(CCore *Core) { ShadeDlg.CheckData(); } /*****************************************************************************/ void CLayerShade::GUIChanged(CCore *Core) { for (int i=0; i