From d5b2bbdf403e0f8178f3c68eeccd0a6e34265189 Mon Sep 17 00:00:00 2001 From: Daveo Date: Fri, 9 Feb 2001 21:17:01 +0000 Subject: [PATCH] --- Utils/MapEdit/Core.cpp | 302 ++++++++++++++++--------------- Utils/MapEdit/Core.h | 50 +++-- Utils/MapEdit/Layer.cpp | 13 +- Utils/MapEdit/Layer.h | 8 +- Utils/MapEdit/LayerCollision.cpp | 23 ++- Utils/MapEdit/LayerCollision.h | 8 +- Utils/MapEdit/LayerDef.h | 11 +- Utils/MapEdit/LayerShade.cpp | 179 ++++++++++++++++++ Utils/MapEdit/LayerShade.h | 68 +++++++ Utils/MapEdit/LayerTile.cpp | 50 ++--- Utils/MapEdit/LayerTile.h | 17 +- Utils/MapEdit/MainFrm.h | 23 ++- Utils/MapEdit/MapEdit.clw | 59 ++++-- Utils/MapEdit/MapEdit.dsp | 30 +++ Utils/MapEdit/MapEdit.rc | 30 ++- Utils/MapEdit/MapEditDoc.cpp | 49 +++-- Utils/MapEdit/MapEditDoc.h | 2 + Utils/MapEdit/MapEditView.cpp | 24 +-- Utils/MapEdit/MapEditView.h | 3 +- Utils/MapEdit/TileSet.cpp | 43 +++-- Utils/MapEdit/TileSet.h | 21 +-- Utils/MapEdit/resource.h | 13 +- tools/MapEdit/MapEdit.exe | Bin 208896 -> 212992 bytes 23 files changed, 714 insertions(+), 312 deletions(-) create mode 100644 Utils/MapEdit/LayerShade.cpp create mode 100644 Utils/MapEdit/LayerShade.h diff --git a/Utils/MapEdit/Core.cpp b/Utils/MapEdit/Core.cpp index 0a89ff771..5777bd3a8 100644 --- a/Utils/MapEdit/Core.cpp +++ b/Utils/MapEdit/Core.cpp @@ -21,41 +21,30 @@ #include "Layer.h" #include "LayerTile.h" #include "LayerCollision.h" +#include "LayerShade.h" #include "utils.h" #include "Export.h" +#include "LayerList.h" + /*****************************************************************************/ /*****************************************************************************/ /*****************************************************************************/ CCore::CCore() { -CMainFrame *Frm=(CMainFrame*)AfxGetApp()->GetMainWnd(); -CMultiBar *ParamBar=Frm->GetParamBar(); - CurrentMousePos=CPoint(0,0); - -// Add default param bar items - ParamBar->RemoveAll(); - ParamBar->Add(Frm->GetLayerList(),IDD_LAYER_LIST_DIALOG,TRUE,TRUE); - } /*****************************************************************************/ CCore::~CCore() { + GUIRemoveAll(); int ListSize=Layer.size(); for (int i=0; iGetHeight(); { Layer[i]->CheckLayerSize(MapWidth,MapHeight); } - - Init(); - } /*****************************************************************************/ @@ -278,7 +267,7 @@ BOOL RedrawFlag=FALSE; } GetTileBank().SetActiveBrushL(); - if (RedrawFlag) View->Invalidate(); + if (RedrawFlag) RedrawView();//View->Invalidate(); } /*****************************************************************************/ @@ -307,16 +296,16 @@ BOOL RedrawFlag=FALSE; } GetTileBank().SetActiveBrushR(); - if (RedrawFlag) View->Invalidate(); + if (RedrawFlag) RedrawView();//View->Invalidate(); } /*****************************************************************************/ -void CCore::Zoom(CMapEditView *View,float Dst) +void CCore::Zoom(float Dst) { Vector3 Ofs; Ofs.Zero(); Ofs.z=Dst; - UpdateView(View,Ofs); + UpdateView(&Ofs); } @@ -324,9 +313,9 @@ Vector3 Ofs; void CCore::MouseWheel(CMapEditView *View,UINT nFlags, short zDelta, CPoint &pt) { if (zDelta>0) - Zoom(View,-0.1f); + Zoom(-0.1f); else - Zoom(View,+0.1f); + Zoom(+0.1f); } /*****************************************************************************/ @@ -337,7 +326,6 @@ Vector3 &ThisCam=GetCam(); // check if active doc Ofs.Zero(); if (theApp.GetCurrent()!=View->GetDocument()) return; - CurrentMousePos=point; @@ -363,7 +351,7 @@ Vector3 &ThisCam=GetCam(); Ofs.x*=XS; Ofs.y*=YS; - UpdateView(View,Ofs); + UpdateView(&Ofs); } else { @@ -377,7 +365,8 @@ Vector3 &ThisCam=GetCam(); Layer[ActiveLayer]->MouseMove(this,View,nFlags,CursorPos); } } - View->Invalidate(); // Mouse still moved, so need to redraw windows, to get CursorPos (And pos render) +// Mouse still moved, so need to redraw windows, to get CursorPos (And pos render) + RedrawView(); } LastMousePos=CurrentMousePos; } @@ -389,61 +378,56 @@ Vector3 &ThisCam=GetCam(); void CCore::UpdateParamBar() { CMainFrame *Frm=(CMainFrame*)AfxGetApp()->GetMainWnd(); -CToolBar *ToolBar=Frm->GetToolBar(); CMultiBar *ParamBar=Frm->GetParamBar(); - ParamBar->RemoveAll(); - Layer[ActiveLayer]->InitGUI(this); - Layer[ActiveLayer]->UpdateGUI(this); - - ParamBar->Update(); - + GUIRemoveAll(); + GUIAdd(LayerList,IDD_LAYER_LIST_DIALOG); + Layer[ActiveLayer]->GUIInit(this); +// Layer[ActiveLayer]->GUIUpdate(this); + GUIUpdate(); } /*****************************************************************************/ -void CCore::UpdateLayerGUI(CMapEditView *View) +void CCore::UpdateLayerGUI() { -CMainFrame *Frm=(CMainFrame*)AfxGetApp()->GetMainWnd(); -CMultiBar *ParamBar=Frm->GetParamBar(); -CLayerList *List=(CLayerList*)Frm->GetDialog(IDD_LAYER_LIST_DIALOG); int ListSize=Layer.size(); - List->ListBox.ResetContent(); + if (LayerList.ListBox) + { + LayerList.ListBox.ResetContent(); - for (int i=0; iListBox.AddString(Layer[i]->GetName()); - } + for (int i=0; iGetName()); + } // Now sets checks (silly MSoft bug!!) - for (i=0; iListBox.SetCheck(i,Layer[i]->IsVisible()); + for (i=0; iIsVisible()); + } + LayerList.ListBox.SetCurSel(ActiveLayer); } - List->ListBox.SetCurSel(ActiveLayer); } /*****************************************************************************/ void CCore::SetLayer(int NewLayer) { -CMainFrame *Frm=(CMainFrame*)AfxGetApp()->GetMainWnd(); -CMultiBar *ParamBar=Frm->GetParamBar(); -CLayerList *List=(CLayerList*)Frm->GetDialog(IDD_LAYER_LIST_DIALOG); - if (NewLayer<0) NewLayer=0; + // If toggling layer, dont change the layer - if ((int)List->ListBox.GetCheck(NewLayer)!=(int)Layer[NewLayer]->IsVisible()) + if ((int)LayerList.ListBox.GetCheck(NewLayer)!=(int)Layer[NewLayer]->IsVisible()) { - Layer[NewLayer]->SetVisible(List->ListBox.GetCheck(NewLayer)); - List->ListBox.SetCurSel(ActiveLayer); + Layer[NewLayer]->SetVisible(LayerList.ListBox.GetCheck(NewLayer)); + LayerList.ListBox.SetCurSel(ActiveLayer); } else { bool IsCol=Layer[NewLayer]->GetType()==LAYER_TYPE_COLLISION; TileBank.SetCollision(IsCol); ActiveLayer=NewLayer; - UpdateParamBar(); } - + UpdateParamBar(); + RedrawView(); } /*****************************************************************************/ @@ -479,6 +463,9 @@ CLayer *Layer; case LAYER_TYPE_COLLISION: Layer=AddLayer(new CLayerCollision(SubType, Width,Height)); break; + case LAYER_TYPE_SHADE: + Layer=AddLayer(new CLayerShade(SubType, Width,Height)); + break; default: ASSERT(!"AddLayer - Invalid Layer Type"); break; @@ -514,8 +501,7 @@ int Width=Layer[FindActionLayer()]->GetWidth(); int Height=Layer[FindActionLayer()]->GetHeight(); AddLayer(CLayer::InfoTable[NewLayerId].Type,CLayer::InfoTable[NewLayerId].SubType,Width,Height); - - + UpdateAll(); } /*****************************************************************************/ @@ -523,10 +509,11 @@ void CCore::DeleteLayer(int CurrentLayer) { if (Layer[CurrentLayer]->CanDelete()) { + Layer[CurrentLayer]->GUIKill(this); delete Layer[CurrentLayer]; Layer.erase(Layer.begin() + CurrentLayer); SetLayer(CurrentLayer-1); - UpdateAll(NULL); + UpdateAll(); TRACE1("Deleted Layer %i\n",CurrentLayer); } else @@ -538,39 +525,29 @@ void CCore::DeleteLayer(int CurrentLayer) /*****************************************************************************/ /*** Grid ********************************************************************/ /*****************************************************************************/ -void CCore::UpdateGrid(CMapEditView *View,BOOL Toggle) +void CCore::UpdateGrid(BOOL Toggle) { -CMainFrame *Frm=(CMainFrame*)AfxGetApp()->GetMainWnd(); -CToolBar *ToolBar=Frm->GetToolBar(); - if (Toggle) GridFlag=!GridFlag; - - ToolBar->GetToolBarCtrl().PressButton(ID_TOOLBAR_GRID,GridFlag); - UpdateView(View); + UpdateView(); } /*****************************************************************************/ /*** TileBank ****************************************************************/ /*****************************************************************************/ -void CCore::UpdateTileView(CMapEditView *View,BOOL Toggle) +void CCore::UpdateTileView(BOOL Toggle) { -CMainFrame *Frm=(CMainFrame*)AfxGetApp()->GetMainWnd(); -CToolBar *ToolBar=Frm->GetToolBar(); -CMultiBar *ParamBar=Frm->GetParamBar(); - - if (Toggle) TileViewFlag=!TileViewFlag; - ParamBar->RemoveAll(); - ToolBar->GetToolBarCtrl().PressButton(ID_TOOLBAR_TILEPALETTE,TileViewFlag); - UpdateParamBar(); - UpdateView(View); + if (Toggle) TileViewFlag=!TileViewFlag; + GUIRemoveAll(); + UpdateParamBar(); + UpdateView(); } /*****************************************************************************/ void CCore::TileBankLoad(char *Filename) { TileBank.AddTileSet(Filename); - TileBank.UpdateGUI(this,TileViewFlag); - UpdateView(NULL); + TileBank.GUIUpdate(this); + UpdateView(); } /*****************************************************************************/ @@ -596,7 +573,7 @@ void CCore::TileBankDelete() Layer[i]->RemapSet(Set,Set-1); } } - UpdateView(NULL); + UpdateView(); } } @@ -605,50 +582,43 @@ void CCore::TileBankReload() { TileBank.Reload(); TexCache.Purge(); - UpdateView(NULL); + UpdateView(); } /*****************************************************************************/ void CCore::TileBankSet() { -CMainFrame *Frm=(CMainFrame*)AfxGetApp()->GetMainWnd(); -CLayerTileGUI *Dlg=(CLayerTileGUI*)Frm->GetDialog(IDD_LAYERTILE_GUI); - - TileBank.SetCurrent(Dlg->m_List.GetCurSel()); + TileBank.SetCurrent(); } /*****************************************************************************/ -void CCore::MirrorX(CMapEditView *View) +void CCore::MirrorX() { - if (!TileViewFlag) - { - Layer[ActiveLayer]->MirrorX(this); - UpdateView(View); - } + if (TileViewFlag) return; + Layer[ActiveLayer]->MirrorX(this); + UpdateView(); } /*****************************************************************************/ -void CCore::MirrorY(CMapEditView *View) +void CCore::MirrorY() { - if (!TileViewFlag) - { - Layer[ActiveLayer]->MirrorY(this); - UpdateView(View); - } + if (TileViewFlag) return; + Layer[ActiveLayer]->MirrorY(this); + UpdateView(); } /*****************************************************************************/ -void CCore::ActiveBrushLeft(CMapEditView *View) +void CCore::ActiveBrushLeft() { GetTileBank().SetActiveBrushL(); - UpdateView(View); + UpdateView(); } /*****************************************************************************/ -void CCore::ActiveBrushRight(CMapEditView *View) +void CCore::ActiveBrushRight() { GetTileBank().SetActiveBrushR(); - UpdateView(View); + UpdateView(); } /*****************************************************************************/ @@ -658,17 +628,17 @@ BOOL CCore::IsTileValid(int Set,int Tile) } /*****************************************************************************/ -void CCore::CopySelection(CMapEditView *View) +void CCore::CopySelection() { Layer[ActiveLayer]->CopySelection(this); - UpdateView(View); + UpdateView(); } /*****************************************************************************/ -void CCore::PasteSelection(CMapEditView *View) +void CCore::PasteSelection() { Layer[ActiveLayer]->PasteSelection(this); - UpdateView(View); + UpdateView(); } /*****************************************************************************/ @@ -700,7 +670,7 @@ float CCore::GetZoomW() { Vector3 &ThisCam=GetCam(); - return((float)SCREEN_MAP_WIDTH/ThisCam.z); + return((float)SCREEN_MAP_WIDTH/ThisCam.z); } /*****************************************************************************/ @@ -708,72 +678,116 @@ float CCore::GetZoomH() { Vector3 &ThisCam=GetCam(); - return((float)SCREEN_MAP_HEIGHT/ThisCam.z); + return((float)SCREEN_MAP_HEIGHT/ThisCam.z); } /*****************************************************************************/ -void CCore::UpdateGUI(CMapEditView *View) +/*** GUI *********************************************************************/ +/*****************************************************************************/ +void CCore::GUIAdd(CDialog &Dlg,int ID,bool Visible,bool Lock) { - UpdateLayerGUI(View); - UpdateGrid(View); - - Layer[ActiveLayer]->UpdateGUI(this); +CMainFrame *Frm=(CMainFrame*)AfxGetApp()->GetMainWnd(); +CMultiBar *ParamBar=Frm->GetParamBar(); + ParamBar->Add(Dlg,ID,Visible,Lock); } /*****************************************************************************/ -void CCore::UpdateAll(CMapEditView *View) +void CCore::GUIRemove(CDialog &Dlg,int ID,bool Force) { - UpdateGUI(View); - UpdateView(View); +CMainFrame *Frm=(CMainFrame*)AfxGetApp()->GetMainWnd(); +CMultiBar *ParamBar=Frm->GetParamBar(); + + ParamBar->Remove(Dlg,Force); } /*****************************************************************************/ -void CCore::UpdateView(CMapEditView *View) +void CCore::GUIRemoveAll(bool Force) { - SetScale(); - if (View) View->Invalidate(); -} +CMainFrame *Frm=(CMainFrame*)AfxGetApp()->GetMainWnd(); +CMultiBar *ParamBar=Frm->GetParamBar(); + + ParamBar->RemoveAll(Force); +} /*****************************************************************************/ -void CCore::UpdateView(CMapEditView *View,Vector3 &Ofs) +void CCore::GUIUpdate() { -Vector3 &ThisCam=GetCam(); +CMainFrame *Frm=(CMainFrame*)AfxGetApp()->GetMainWnd(); +CMultiBar *ParamBar=Frm->GetParamBar(); - ThisCam.x+=Ofs.x; - ThisCam.y+=Ofs.y; - ThisCam.z-=Ofs.z; - if (!TileViewFlag) + UpdateLayerGUI(); + UpdateGrid(); + Layer[ActiveLayer]->GUIUpdate(this); + ParamBar->Update(); +} + +/*****************************************************************************/ +void CCore::GUIChanged() +{ +// UpdateLayerGUI(); + Layer[ActiveLayer]->GUIChanged(this); +} + +/*****************************************************************************/ +void CCore::UpdateAll() +{ + UpdateParamBar(); + GUIUpdate(); + UpdateView(); +} + +/*****************************************************************************/ +void CCore::RedrawView() +{ + if (theApp.GetCurrent()) { - if (ThisCam.x<0) ThisCam.x=0; - if (ThisCam.y<0) ThisCam.y=0; + theApp.GetCurrent()->UpdateAllViews(NULL); } - if (ThisCam.z<0.1) ThisCam.z=0.1f; -// TRACE1("ZoomVal %f\n",ThisCam.z); +} - UpdateView(View); +/*****************************************************************************/ +void CCore::UpdateView(Vector3 *Ofs) +{ + if (Ofs) + { + Vector3 &ThisCam=GetCam(); + + ThisCam.x+=Ofs->x; + ThisCam.y+=Ofs->y; + ThisCam.z-=Ofs->z; + if (!TileViewFlag) + { + if (ThisCam.x<0) ThisCam.x=0; + if (ThisCam.y<0) ThisCam.y=0; + } + if (ThisCam.z<0.1) ThisCam.z=0.1f; + } + + SetScale(); + RedrawView(); } /*****************************************************************************/ -void CCore::SetMapSize(CMapEditView *View,int Width,int Height) +void CCore::SetMapSize(int Width,int Height) { - if (Width==GetMapWidth() && Height==GetMapHeight()) return; + if (Width==GetMapWidth() && Height==GetMapHeight()) return; int ListSize=Layer.size(); - for (int i=0; iResize(Width,Height); - } + for (int i=0; iResize(Width,Height); + } - UpdateView(View); + UpdateView(); } /*****************************************************************************/ -void CCore::Toggle2d3d(CMapEditView *View) +void CCore::Toggle2d3d() { Is3dFlag=!Is3dFlag; - UpdateView(View); + UpdateView(); } /*****************************************************************************/ @@ -793,7 +807,7 @@ int ListSize=Layer.size(); /*****************************************************************************/ int CCore::FindActionLayer() { -int Idx=FindLayer(LAYER_TYPE_TILE,LAYERTILE_ACTION); +int Idx=FindLayer(LAYER_TYPE_TILE,LAYER_SUBTYPE_ACTION); return(Idx); } @@ -843,5 +857,3 @@ GString Path=FullPath.Dir(); return(Path); } - - diff --git a/Utils/MapEdit/Core.h b/Utils/MapEdit/Core.h index 5d8509eee..2611c3bac 100644 --- a/Utils/MapEdit/Core.h +++ b/Utils/MapEdit/Core.h @@ -12,6 +12,10 @@ #include "TexCache.h" #include "TileSet.h" +#include "MApEdit.h" +#include "LayerList.h" +#include "LayerTileGUI.h" + const s32 FileVersion=2; #define SCREEN_MAP_WIDTH 30 @@ -43,27 +47,33 @@ public: void RButtonControl(CMapEditView *View,UINT nFlags, CPoint &point,BOOL DownFlag); void MouseWheel(CMapEditView *View,UINT nFlags, short zDelta, CPoint &pt); void MouseMove(CMapEditView *View,UINT nFlags, CPoint &point); - void Zoom(CMapEditView *View,float Dst); + void Zoom(float Dst); // TileBank CTileBank &GetTileBank() {return(TileBank);} - void UpdateTileView(CMapEditView *View,BOOL Toggle=FALSE); - - void UpdateTileViewGUI() {TileBank.UpdateGUI(this,TileViewFlag);} + void UpdateTileView(BOOL Toggle=FALSE); CTile &GetTile(int Bank,int TileNo) {return(TileBank.GetTile(Bank,TileNo));} void TileBankLoad(char *Filename); void TileBankDelete(); void TileBankReload(); void TileBankSet(); - void MirrorX(CMapEditView *View); - void MirrorY(CMapEditView *View); - void ActiveBrushLeft(CMapEditView *View); - void ActiveBrushRight(CMapEditView *View); + void MirrorX(); + void MirrorY(); + void ActiveBrushLeft(); + void ActiveBrushRight(); BOOL IsTileValid(int Set,int Tile); + BOOL IsTileView() {return(TileViewFlag);} + void TileBankGUIInit() {TileBank.GUIInit(this);} + void TileBankGUIUpdate() {TileBank.GUIUpdate(this);} -// Param Bar +// GUI void UpdateParamBar(); + void GUIAdd(CDialog &Dlg,int ID,bool Visible=true,bool Lock=false); + void GUIRemove(CDialog &Dlg,int ID,bool Force=false); + void GUIRemoveAll(bool Force=false); + void GUIUpdate(); + void GUIChanged(); // Layers void AddLayer(int Type, int SubType, int Width, int Height); @@ -71,31 +81,30 @@ public: void SetLayer(int Layer); void AddLayer(int Layer); void DeleteLayer(int Layer); - void UpdateLayerGUI(CMapEditView *View); + void UpdateLayerGUI(); // Grid - void UpdateGrid(CMapEditView *View,BOOL Toggle=FALSE); + void UpdateGrid(BOOL Toggle=FALSE); BOOL IsGridOn() {return(GridFlag);} // Tex Cache CTexCache &GetTexCache() {return(TexCache);} // Misc - void UpdateGUI(CMapEditView *View); - void UpdateAll(CMapEditView *View); - void UpdateView(CMapEditView *View); - void UpdateView(CMapEditView *View,Vector3 &Ofs); + void UpdateAll(); + void RedrawView(); + void UpdateView(Vector3 *Ofs=NULL); Vector3 &GetCam(); Vector3 OffsetCam(Vector3 &Cam,float DivVal); void SetCursorPos(CPoint &Pos) {CursorPos=Pos;} CPoint &GetCursorPos() {return(CursorPos);} - void SetMapSize(CMapEditView *View,int Width,int Height); + void SetMapSize(int Width,int Height); int GetMapWidth() {return(Layer[FindActionLayer()]->GetWidth());} int GetMapHeight() {return(Layer[FindActionLayer()]->GetHeight());} - void Toggle2d3d(CMapEditView *View); + void Toggle2d3d(); int FindLayer(int Type,int SubType=-1); int FindActionLayer(); @@ -104,10 +113,11 @@ public: float GetZoomW(); float GetZoomH(); - void CopySelection(CMapEditView *View); - void PasteSelection(CMapEditView *View); + void CopySelection(); + void PasteSelection(); GString GetCurrentPath(); + private: CPoint CurrentMousePos,LastMousePos; CPoint CursorPos,LastCursorPos; @@ -119,9 +129,9 @@ private: int ActiveLayer; CTileBank TileBank; - CTexCache TexCache; + CLayerListGUI LayerList; BOOL TileViewFlag; BOOL GridFlag; diff --git a/Utils/MapEdit/Layer.cpp b/Utils/MapEdit/Layer.cpp index 31ffbbf29..fdb495a0b 100644 --- a/Utils/MapEdit/Layer.cpp +++ b/Utils/MapEdit/Layer.cpp @@ -16,12 +16,13 @@ /*****************************************************************************/ sLayerInfoTable CLayer::InfoTable[]= { - //Type SubType Name delete?Scale 3d Resizable Export - {LAYER_TYPE_TILE, LAYERTILE_SCRATCH, "WorkPad", false, 1.0f, true, false, false,}, - {LAYER_TYPE_TILE, LAYERTILE_BACK, "Back", true, 4.0f, false, false, true,}, - {LAYER_TYPE_TILE, LAYERTILE_MID, "Mid", true, 2.0f, false, true, true,}, - {LAYER_TYPE_TILE, LAYERTILE_ACTION, "Action", false, 1.0f, true, true, true,}, - {LAYER_TYPE_COLLISION, LAYER_SUBTYPE_NONE, "Collision", true, 1.0f, false, true, true,}, + //Type SubType Name delete? Scale 3d Resizable Export + {LAYER_TYPE_TILE, LAYER_SUBTYPE_SCRATCH, "WorkPad", false, 1.0f, true, false, false,}, + {LAYER_TYPE_SHADE, LAYER_SUBTYPE_BACK, "Back Shade", true, 4.0f, false, true, true,}, + {LAYER_TYPE_TILE, LAYER_SUBTYPE_BACK, "Back", true, 4.0f, false, false, true,}, + {LAYER_TYPE_TILE, LAYER_SUBTYPE_MID, "Mid", true, 2.0f, false, true, true,}, + {LAYER_TYPE_TILE, LAYER_SUBTYPE_ACTION, "Action", false, 1.0f, true, true, true,}, + {LAYER_TYPE_COLLISION, LAYER_SUBTYPE_NONE, "Collision", true, 1.0f, false, true, true,}, }; int CLayer::InfoTableSize=sizeof(InfoTable)/sizeof(sLayerInfoTable); diff --git a/Utils/MapEdit/Layer.h b/Utils/MapEdit/Layer.h index 9767a0a26..a4d78b1e6 100644 --- a/Utils/MapEdit/Layer.h +++ b/Utils/MapEdit/Layer.h @@ -30,6 +30,8 @@ struct sLayerInfoTable enum LAYER_ENUMS { SELECT_BUFFER_SIZE=16, +TileLayerMinWidth=32, +TileLayerMinHeight=22, }; /*****************************************************************************/ @@ -69,8 +71,10 @@ virtual void RenderSelection(CCore *Core,Vector3 &ThisCam)=0; virtual void FindCursorPos(CCore *Core,CMapEditView *View,Vector3 &CamPos,CPoint &MousePos)=0; virtual void RenderCursor(CCore *Core,Vector3 &CamPos,BOOL Is3d)=0; -virtual void InitGUI(CCore *Core)=0; -virtual void UpdateGUI(CCore *Core)=0; +virtual void GUIInit(CCore *Core)=0; +virtual void GUIKill(CCore *Core)=0; +virtual void GUIUpdate(CCore *Core)=0; +virtual void GUIChanged(CCore *Core)=0; virtual int GetWidth()=0; virtual int GetHeight()=0; diff --git a/Utils/MapEdit/LayerCollision.cpp b/Utils/MapEdit/LayerCollision.cpp index bf3542559..f05b30914 100644 --- a/Utils/MapEdit/LayerCollision.cpp +++ b/Utils/MapEdit/LayerCollision.cpp @@ -82,18 +82,27 @@ void CLayerCollision::Save(CFile *File) /*****************************************************************************/ /*** Gui *********************************************************************/ /*****************************************************************************/ -void CLayerCollision::InitGUI(CCore *Core) +void CLayerCollision::GUIInit(CCore *Core) { -CMainFrame *Frm=(CMainFrame*)AfxGetApp()->GetMainWnd(); -CMultiBar *ParamBar=Frm->GetParamBar(); - - ParamBar->Add(Frm->GetLayerTileToolbar(),IDD_LAYERTILE_TOOLBAR,TRUE); + Core->GUIAdd(ToolBarGUI,IDD_LAYERTILE_TOOLBAR); } /*****************************************************************************/ -void CLayerCollision::UpdateGUI(CCore *Core) +void CLayerCollision::GUIKill(CCore *Core) { - CLayerTile::UpdateGUI(Core); + Core->GUIRemove(ToolBarGUI,IDD_LAYERTILE_TOOLBAR); +} + +/*****************************************************************************/ +void CLayerCollision::GUIUpdate(CCore *Core) +{ + CLayerTile::GUIUpdate(Core); +} + +/*****************************************************************************/ +void CLayerCollision::GUIChanged(CCore *Core) +{ + CLayerTile::GUIChanged(Core); } /*****************************************************************************/ diff --git a/Utils/MapEdit/LayerCollision.h b/Utils/MapEdit/LayerCollision.h index b85dee427..b92231572 100644 --- a/Utils/MapEdit/LayerCollision.h +++ b/Utils/MapEdit/LayerCollision.h @@ -20,8 +20,10 @@ public: int GetType() {return(LAYER_TYPE_COLLISION);} - void InitGUI(CCore *Core); - void UpdateGUI(CCore *Core); + void GUIInit(CCore *Core); + void GUIKill(CCore *Core); + void GUIUpdate(CCore *Core); + void GUIChanged(CCore *Core); void Load(CFile *File,int Version); void Save(CFile *File); @@ -33,6 +35,8 @@ public: void RemapSet(int OrigSet,int NewSet); protected: +// CLayerTileToolbar ToolBarGUI; + }; /*****************************************************************************/ diff --git a/Utils/MapEdit/LayerDef.h b/Utils/MapEdit/LayerDef.h index 989009025..33a5da0e1 100644 --- a/Utils/MapEdit/LayerDef.h +++ b/Utils/MapEdit/LayerDef.h @@ -12,6 +12,7 @@ enum LAYER_TYPE { LAYER_TYPE_TILE=0, LAYER_TYPE_COLLISION, + LAYER_TYPE_SHADE, LAYER_TYPE_MAX }; @@ -19,11 +20,11 @@ enum LAYER_SUBTYPE { LAYER_SUBTYPE_NONE=-1, - LAYERTILE_BACK=0, - LAYERTILE_MID, - LAYERTILE_ACTION, - LAYERTILE_FORE, - LAYERTILE_SCRATCH, + LAYER_SUBTYPE_BACK=0, + LAYER_SUBTYPE_MID, + LAYER_SUBTYPE_ACTION, + LAYER_SUBTYPE_FORE, + LAYER_SUBTYPE_SCRATCH, }; enum TILE_FLAG diff --git a/Utils/MapEdit/LayerShade.cpp b/Utils/MapEdit/LayerShade.cpp new file mode 100644 index 000000000..76d1d180b --- /dev/null +++ b/Utils/MapEdit/LayerShade.cpp @@ -0,0 +1,179 @@ +/*******************/ +/*** 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; + +} + +/*****************************************************************************/ +// 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)); + + File->Read(&RGB[0],sizeof(RGBQUAD)); + File->Read(&RGB[1],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(&RGB[0],sizeof(RGBQUAD)); + File->Write(&RGB[1],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(); + +float x0=0; +float x1=x0+Width; +float y0=(0+1); +float y1=y0-Height; + + 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); + glColor3ub(RGB[0].rgbRed,RGB[0].rgbGreen,RGB[0].rgbBlue); + glVertex3f( x0,y0,0.0f); + glVertex3f( x1,y0,0.0f); + + glColor3ub(RGB[1].rgbRed,RGB[1].rgbGreen,RGB[1].rgbBlue); + glVertex3f( x1,y1,0.0f); + glVertex3f( x0,y1,0.0f); + + glEnd(); + glPopMatrix(); +} + + +/*****************************************************************************/ +BOOL CLayerShade::Resize(int Width,int Height) +{ + Width=TileLayerMinWidth+(Width-TileLayerMinWidth)/ScaleFactor; + Height=TileLayerMinHeight+(Height-TileLayerMinHeight)/ScaleFactor; + + return(true); +} + +/*****************************************************************************/ +/*** Gui *********************************************************************/ +/*****************************************************************************/ +void CLayerShade::GUIInit(CCore *Core) +{ + Core->GUIAdd(ShadeDlg,IDD_LAYERSHADE_GUI); + ShadeDlg.SetRGB0(RGB[0]); + ShadeDlg.SetRGB1(RGB[1]); +} + +/*****************************************************************************/ +void CLayerShade::GUIKill(CCore *Core) +{ + ShadeDlg.GetRGB0(RGB[0]); + ShadeDlg.GetRGB1(RGB[1]); + Core->GUIRemove(ShadeDlg,IDD_LAYERSHADE_GUI); +} + +/*****************************************************************************/ +void CLayerShade::GUIUpdate(CCore *Core) +{ +} + +/*****************************************************************************/ +void CLayerShade::GUIChanged(CCore *Core) +{ + ShadeDlg.GetRGB0(RGB[0]); + ShadeDlg.GetRGB1(RGB[1]); + + TRACE3("RGB0 is %i,%i,%i\n",RGB[0].rgbRed,RGB[0].rgbGreen,RGB[0].rgbBlue); + TRACE3("RGB1 is %i,%i,%i\n",RGB[1].rgbRed,RGB[1].rgbGreen,RGB[1].rgbBlue); +} + +/*****************************************************************************/ +/*** Functions ***************************************************************/ +/*****************************************************************************/ +void CLayerShade::Export(CCore *Core,CExport &Exp) +{ +// Exp.ExportLayerTile(Core,GetName(),SubType,Map); +} + diff --git a/Utils/MapEdit/LayerShade.h b/Utils/MapEdit/LayerShade.h new file mode 100644 index 000000000..0c99016c0 --- /dev/null +++ b/Utils/MapEdit/LayerShade.h @@ -0,0 +1,68 @@ +/*******************/ +/*** Layer Shade ***/ +/*******************/ + +#ifndef __LAYER_SHADE_HEADER__ +#define __LAYER_SHADE_HEADER__ + +#include "Layer.h" +#include "MapEdit.h" +#include "LayerShadeGui.h" + +/*****************************************************************************/ +class CCore; +class CMapEditView; +class CLayerShade : public CLayer +{ + +public: + CLayerShade(){}; + CLayerShade(int SubType,int Width,int Height); // New Layer + CLayerShade(CFile *File,int Version); // Load Layer + ~CLayerShade(); + + int GetType() {return(LAYER_TYPE_SHADE);} + int GetSubType() {return(SubType);} + + void Render(CCore *Core,Vector3 &CamPos,BOOL Is3d); + void RenderGrid(CCore *Core,Vector3 &CamPos,BOOL Active){}; + void RenderSelection(CCore *Core,Vector3 &ThisCam){}; + + void FindCursorPos(CCore *Core,CMapEditView *View,Vector3 &CamPos,CPoint &MousePos){}; + void RenderCursor(CCore *Core,Vector3 &CamPos,BOOL Is3d){}; + + void GUIInit(CCore *Core); + void GUIKill(CCore *Core); + void GUIUpdate(CCore *Core); + void GUIChanged(CCore *Core); + + int GetWidth() {return(Width);} + int GetHeight() {return(Height);} + BOOL Resize(int _Width,int _Height); + + void Load(CFile *File,int Version); + void Save(CFile *File); + + void Export(CCore *Core,CExport &Exp); + +// Functions + BOOL SetMode(int NewMode) {return(false);} + BOOL InitMode() {return(false);} + BOOL ExitMode() {return(false);} + BOOL LButtonControl(CCore *Core,CMapEditView *View,UINT nFlags, CPoint &CursorPos,BOOL DownFlag) {return(false);} + BOOL RButtonControl(CCore *Core,CMapEditView *View,UINT nFlags, CPoint &CursorPos,BOOL DownFlag) {return(false);} + BOOL MouseMove(CCore *Core,CMapEditView *View,UINT nFlags, CPoint &CursorPos) {return(false);} + +protected: + void Render(CCore *Core,Vector3 &CamPos,CMap &ThisMap,BOOL Render3d,float Alpha=1.0f,Vector3 *Ofs=0); + + int Width,Height; + int SubType; + + CLayerShadeGUI ShadeDlg; + + RGBQUAD RGB[2]; +}; + +/*****************************************************************************/ +#endif diff --git a/Utils/MapEdit/LayerTile.cpp b/Utils/MapEdit/LayerTile.cpp index d4360f095..63a62fe90 100644 --- a/Utils/MapEdit/LayerTile.cpp +++ b/Utils/MapEdit/LayerTile.cpp @@ -391,38 +391,40 @@ GLuint *HitPtr=SelectBuffer; /*****************************************************************************/ /*** Gui *********************************************************************/ /*****************************************************************************/ -void CLayerTile::InitGUI(CCore *Core) +void CLayerTile::GUIInit(CCore *Core) { -CMainFrame *Frm=(CMainFrame*)AfxGetApp()->GetMainWnd(); -CMultiBar *ParamBar=Frm->GetParamBar(); - - ParamBar->Add(Frm->GetLayerTileToolbar(),IDD_LAYERTILE_TOOLBAR,TRUE); - ParamBar->Add(Frm->GetLayerTileGUI(),IDD_LAYERTILE_GUI,TRUE); + Core->GUIAdd(ToolBarGUI,IDD_LAYERTILE_TOOLBAR); + Core->TileBankGUIInit(); } /*****************************************************************************/ -void CLayerTile::UpdateGUI(CCore *Core) +void CLayerTile::GUIKill(CCore *Core) { -CMainFrame *Frm=(CMainFrame*)AfxGetApp()->GetMainWnd(); -CLayerTileToolbar *Bar=(CLayerTileToolbar *)Frm->GetDialog(IDD_LAYERTILE_TOOLBAR); + Core->GUIRemove(ToolBarGUI,IDD_LAYERTILE_TOOLBAR); +} - if (Bar) +/*****************************************************************************/ +void CLayerTile::GUIUpdate(CCore *Core) +{ + ToolBarGUI.ResetButtons(); + switch(Mode) { - Bar->ResetButtons(); - switch(Mode) - { - case MouseModePaint: - Bar->SetButtonState(CLayerTileToolbar::PAINT,TRUE); - break; - case MouseModeSelect: - Bar->SetButtonState(CLayerTileToolbar::SELECT,TRUE); - break; - default: - break; - } + case MouseModePaint: + ToolBarGUI.SetButtonState(CLayerTileToolbar::PAINT,TRUE); + break; + case MouseModeSelect: + ToolBarGUI.SetButtonState(CLayerTileToolbar::SELECT,TRUE); + break; + default: + break; } - Core->UpdateTileViewGUI(); + Core->TileBankGUIUpdate(); +} + +/*****************************************************************************/ +void CLayerTile::GUIChanged(CCore *Core) +{ } /*****************************************************************************/ @@ -436,7 +438,7 @@ BOOL Ret=FALSE; Ret|=ExitMode(); Mode=(MouseMode)NewMode; Ret|=InitMode(); - return(Ret); + return(Ret); } /*****************************************************************************/ diff --git a/Utils/MapEdit/LayerTile.h b/Utils/MapEdit/LayerTile.h index 7394cd9bd..8692bede8 100644 --- a/Utils/MapEdit/LayerTile.h +++ b/Utils/MapEdit/LayerTile.h @@ -6,13 +6,8 @@ #define __LAYER_TILE_HEADER__ #include "Layer.h" - -/*****************************************************************************/ -enum TileLayerEnum -{ - TileLayerMinWidth=32, - TileLayerMinHeight=22, -}; +#include "MapEdit.h" +#include "LayerTileToolbar.h" /*****************************************************************************/ class CCore; @@ -42,8 +37,10 @@ public: void FindCursorPos(CCore *Core,CMapEditView *View,Vector3 &CamPos,CPoint &MousePos); void RenderCursor(CCore *Core,Vector3 &CamPos,BOOL Is3d); - void InitGUI(CCore *Core); - void UpdateGUI(CCore *Core); + void GUIInit(CCore *Core); + void GUIKill(CCore *Core); + void GUIUpdate(CCore *Core); + void GUIChanged(CCore *Core); int GetWidth() {return(Map.GetWidth());} int GetHeight() {return(Map.GetHeight());} @@ -84,7 +81,7 @@ protected: int SubType; MouseMode Mode; -//static char *LayerName[]; + CLayerTileToolbar ToolBarGUI; }; diff --git a/Utils/MapEdit/MainFrm.h b/Utils/MapEdit/MainFrm.h index 32e74a97d..81767a05a 100644 --- a/Utils/MapEdit/MainFrm.h +++ b/Utils/MapEdit/MainFrm.h @@ -6,9 +6,10 @@ #define AFX_MAINFRM_H__CEC14D79_A1F2_4281_AA53_544F0924E7D8__INCLUDED_ #include "MultiBar.h" -#include "LayerList.h" -#include "LayerTileGUI.h" -#include "LayerTileToolbar.h" +//#include "LayerList.h" +//#include "LayerTileGUI.h" +//#include "LayerTileToolbar.h" +//#include "LayerShadeGUI.h" #if _MSC_VER > 1000 #pragma once @@ -34,13 +35,14 @@ public: public: CStatusBar *GetStatusBar() {return(&StatusBar);} CMainToolBar *GetToolBar() {return(&ToolBar);} - CDialog *GetDialog(int ID) {return(ParamBar.GetDialog(ID));} +// CDialog *GetDialog(int ID) {return(ParamBar.GetDialog(ID));} // Param Bar CMultiBar *GetParamBar() {return(&ParamBar);} - CDialog &GetLayerList() {return(LayerList);} - CDialog &GetLayerTileGUI() {return(LayerTileGUI);} - CDialog &GetLayerTileToolbar() {return(LayerTileToolBar);} +// CDialog &GetLayerList() {return(LayerList);} +// CDialog &GetLayerTileGUI() {return(LayerTileGUI);} +// CDialog &GetLayerTileToolbar() {return(LayerTileToolBar);} +// CDialog &GetLayerShadeGUI() {return(LayerShadeGUI);} // Operations public: @@ -65,9 +67,10 @@ protected: // control bar embedded members CMultiBar ParamBar; // Sub Dialogs - CLayerList LayerList; - CLayerTileGUI LayerTileGUI; - CLayerTileToolbar LayerTileToolBar; +// CLayerList LayerList; +// CLayerTileGUI LayerTileGUI; +// CLayerTileToolbar LayerTileToolBar; +// CLayerShadeGUI LayerShadeGUI; // Generated message map functions protected: diff --git a/Utils/MapEdit/MapEdit.clw b/Utils/MapEdit/MapEdit.clw index 0c129d2db..c9711b0a4 100644 --- a/Utils/MapEdit/MapEdit.clw +++ b/Utils/MapEdit/MapEdit.clw @@ -8,7 +8,7 @@ NewFileInclude1=#include "stdafx.h" NewFileInclude2=#include "mapedit.h" LastPage=0 -ClassCount=16 +ClassCount=17 Class1=CChildFrame Class2=CGLEnabledView Class3=CMainFrame @@ -17,29 +17,31 @@ Class5=CAboutDlg Class6=CMapEditDoc Class7=CMapEditView -ResourceCount=13 +ResourceCount=14 Resource1=IDD_NEW_LAYER Resource2=IDR_MAPEDITYPE (English (U.S.)) -Resource3=IDR_MAINFRAME (English (U.S.)) +Resource3=IDD_ADDLAYER Resource4=IDD_DIALOGBAR (English (U.S.)) -Resource5=IDD_LAYER_LIST_DIALOG +Resource5=IDR_MAINFRAME (English (U.S.)) Class8=CMultiBar -Resource6=IDD_ADDLAYER -Resource7=IDD_NEWMAP +Resource6=IDD_LAYER_LIST_DIALOG +Resource7=IDD_MULTIBAR (English (U.S.)) Class9=CLayerList Class10=CMapSizeDlg -Resource8=IDD_LAYERTILE_TOOLBAR +Resource8=IDD_NEWMAP Class11=CGfxToolBar Class12=CLayerTileGUI -Resource9=IDD_MULTIBAR (English (U.S.)) -Resource10=IDD_MAPSIZE +Resource9=IDD_LAYERTILE_TOOLBAR +Resource10=IDR_TOOLBAR (English (U.S.)) Class13=CNewMapGUI Class14=CProgressDlg -Resource11=IDD_ABOUTBOX (English (U.S.)) +Resource11=IDD_LAYERTILE_GUI Class15=CAddLayerDlg -Resource12=IDD_LAYERTILE_GUI +Resource12=IDD_MAPSIZE Class16=CLayerTileToolbar -Resource13=IDR_TOOLBAR (English (U.S.)) +Resource13=IDD_ABOUTBOX (English (U.S.)) +Class17=CLayerShadeGUI +Resource14=IDD_LAYERSHADE_GUI [CLS:CChildFrame] Type=0 @@ -91,7 +93,7 @@ Type=0 BaseClass=CGLEnabledView HeaderFile=MapEditView.h ImplementationFile=MapEditView.cpp -LastObject=ID_EXPORT +LastObject=ID_TOGGLE_GRID Filter=C VirtualFilter=VWC @@ -108,9 +110,7 @@ Command3=ID_FILE_SAVE Command4=ID_EDIT_CUT Command5=ID_EDIT_COPY Command6=ID_EDIT_PASTE -Command7=ID_TOOLBAR_TILEPALETTE -Command8=ID_TOOLBAR_GRID -CommandCount=8 +CommandCount=6 [MNU:IDR_MAINFRAME (English (U.S.))] Type=1 @@ -262,6 +262,7 @@ ImplementationFile=MapSizeDlg.cpp BaseClass=CDialog Filter=D VirtualFilter=dWC +LastObject=CMapSizeDlg [DLG:IDD_LAYERTILE_GUI] Type=1 @@ -279,7 +280,7 @@ ImplementationFile=LayerTileGUI.cpp BaseClass=CDialog Filter=D VirtualFilter=dWC -LastObject=IDD_LAYERTILE_BTN_UPDATE +LastObject=CLayerTileGUI [DLG:IDD_NEW_LAYER] Type=1 @@ -333,7 +334,7 @@ HeaderFile=AddLayerDlg.h ImplementationFile=AddLayerDlg.cpp BaseClass=CDialog Filter=D -LastObject=IDC_ADDLAYER_LIST +LastObject=CAddLayerDlg VirtualFilter=dWC [DLG:IDD_ADDLAYER] @@ -360,3 +361,25 @@ Filter=D LastObject=CLayerTileToolbar VirtualFilter=dWC +[DLG:IDD_LAYERSHADE_GUI] +Type=1 +Class=CLayerShadeGUI +ControlCount=8 +Control1=IDC_LAYERSHADE_TEXT0,static,1342308352 +Control2=IDC_LAYERSHADE_EDITR0,edit,1350770688 +Control3=IDC_LAYERSHADE_EDITG0,edit,1350770816 +Control4=IDC_LAYERSHADE_EDITB0,edit,1350770816 +Control5=IDC_LAYERSHADE_TEXT1,static,1342308352 +Control6=IDC_LAYERSHADE_EDITR1,edit,1350639744 +Control7=IDC_LAYERSHADE_EDITG1,edit,1350639744 +Control8=IDC_LAYERSHADE_EDITB1,edit,1350639744 + +[CLS:CLayerShadeGUI] +Type=0 +HeaderFile=LayerShadeGUI.h +ImplementationFile=LayerShadeGUI.cpp +BaseClass=CDialog +Filter=D +VirtualFilter=dWC +LastObject=CLayerShadeGUI + diff --git a/Utils/MapEdit/MapEdit.dsp b/Utils/MapEdit/MapEdit.dsp index 23dd68d9e..b3d8d7540 100644 --- a/Utils/MapEdit/MapEdit.dsp +++ b/Utils/MapEdit/MapEdit.dsp @@ -115,6 +115,28 @@ SOURCE=.\LayerDef.h # End Source File # Begin Source File +SOURCE=.\LayerShade.cpp + +!IF "$(CFG)" == "MapEdit - Win32 Release" + +!ELSEIF "$(CFG)" == "MapEdit - Win32 Debug" + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\LayerShade.h + +!IF "$(CFG)" == "MapEdit - Win32 Release" + +!ELSEIF "$(CFG)" == "MapEdit - Win32 Debug" + +!ENDIF + +# End Source File +# Begin Source File + SOURCE=.\LayerTile.cpp # End Source File # Begin Source File @@ -348,6 +370,14 @@ SOURCE=.\LayerList.h # End Source File # Begin Source File +SOURCE=.\LayerShadeGUI.cpp +# End Source File +# Begin Source File + +SOURCE=.\LayerShadeGUI.h +# End Source File +# Begin Source File + SOURCE=.\LayerTileGUI.cpp # End Source File # Begin Source File diff --git a/Utils/MapEdit/MapEdit.rc b/Utils/MapEdit/MapEdit.rc index 69086f75d..a276a97a5 100644 --- a/Utils/MapEdit/MapEdit.rc +++ b/Utils/MapEdit/MapEdit.rc @@ -52,9 +52,6 @@ BEGIN BUTTON ID_EDIT_CUT BUTTON ID_EDIT_COPY BUTTON ID_EDIT_PASTE - SEPARATOR - BUTTON ID_TOOLBAR_TILEPALETTE - BUTTON ID_TOOLBAR_GRID END @@ -532,6 +529,25 @@ BEGIN WS_TABSTOP END +IDD_LAYERSHADE_GUI DIALOG DISCARDABLE 0, 0, 186, 36 +STYLE WS_CHILD +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "RGB0",IDC_LAYERSHADE_TEXT0,5,7,24,8 + EDITTEXT IDC_LAYERSHADE_EDITR0,5,15,20,12,ES_NUMBER | WS_GROUP + EDITTEXT IDC_LAYERSHADE_EDITG0,25,15,20,12,ES_AUTOHSCROLL | + ES_NUMBER | WS_GROUP + EDITTEXT IDC_LAYERSHADE_EDITB0,45,15,20,12,ES_AUTOHSCROLL | + ES_NUMBER | WS_GROUP + LTEXT "RGB1",IDC_LAYERSHADE_TEXT1,85,5,24,8 + EDITTEXT IDC_LAYERSHADE_EDITR1,85,15,20,12,ES_AUTOHSCROLL | + ES_NUMBER + EDITTEXT IDC_LAYERSHADE_EDITG1,105,15,20,12,ES_AUTOHSCROLL | + ES_NUMBER + EDITTEXT IDC_LAYERSHADE_EDITB1,125,15,20,12,ES_AUTOHSCROLL | + ES_NUMBER +END + ///////////////////////////////////////////////////////////////////////////// // @@ -588,6 +604,14 @@ BEGIN TOPMARGIN, 4 BOTTOMMARGIN, 9 END + + IDD_LAYERSHADE_GUI, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 179 + TOPMARGIN, 7 + BOTTOMMARGIN, 29 + END END #endif // APSTUDIO_INVOKED diff --git a/Utils/MapEdit/MapEditDoc.cpp b/Utils/MapEdit/MapEditDoc.cpp index a5bd7463a..0c5545d40 100644 --- a/Utils/MapEdit/MapEditDoc.cpp +++ b/Utils/MapEdit/MapEditDoc.cpp @@ -91,19 +91,22 @@ void CMapEditDoc::Dump(CDumpContext& dc) const /*********************************************************************************/ void CMapEditDoc::UpdateView(CMapEditView *View) { - Core.UpdateView(View); +CView *V=(CView*)View; + V->Invalidate(); } /*********************************************************************************/ void CMapEditDoc::Render(CMapEditView *View) { + if (View) Core.Render(View); } /*********************************************************************************/ void CMapEditDoc::UpdateAll(CMapEditView *View) { - Core.UpdateAll(View); + if (View) + Core.UpdateAll(); } /*********************************************************************************/ @@ -128,6 +131,22 @@ int Ret=AfxMessageBox(Str,MB_YESNO , MB_ICONQUESTION); return(false); } + +/*********************************************************************************/ +void CMapEditDoc::GUIUpdate() +{ + Core.GUIUpdate(); + +} + +/*********************************************************************************/ +void CMapEditDoc::GUIChanged() +{ + Core.GUIChanged(); + UpdateAllViews(NULL); +// theApp.GetMainWnd()->Invalidate(); +} + /*********************************************************************************/ /*********************************************************************************/ /*** Windows Message Handlers ****************************************************/ @@ -165,43 +184,43 @@ void CMapEditDoc::MouseMove(CMapEditView *View,UINT nFlags, CPoint &point) /*********************************************************************************/ void CMapEditDoc::ToggleTileView(CMapEditView *View) { - Core.UpdateTileView(View,TRUE); - Core.UpdateAll(View); + Core.UpdateTileView(true); + Core.UpdateAll(); FocusView(); } /*********************************************************************************/ void CMapEditDoc::ToggleGrid(CMapEditView *View) { - Core.UpdateGrid(View,TRUE); + Core.UpdateGrid(TRUE); FocusView(); } /*********************************************************************************/ void CMapEditDoc::MirrorX(CMapEditView *View) { - Core.MirrorX(View); + Core.MirrorX(); FocusView(); } /*********************************************************************************/ void CMapEditDoc::MirrorY(CMapEditView *View) { - Core.MirrorY(View); + Core.MirrorY(); FocusView(); } /*********************************************************************************/ void CMapEditDoc::CopySelection(CMapEditView *View) { - Core.CopySelection(View); + Core.CopySelection(); FocusView(); } /*********************************************************************************/ void CMapEditDoc::PasteSelection(CMapEditView *View) { - Core.PasteSelection(View); + Core.PasteSelection(); FocusView(); } @@ -292,13 +311,13 @@ void CMapEditDoc::TileBankSet() /*********************************************************************************/ void CMapEditDoc::ActiveBrushLeft(CMapEditView *View) { - Core.ActiveBrushLeft(View); + Core.ActiveBrushLeft(); } /*********************************************************************************/ void CMapEditDoc::ActiveBrushRight(CMapEditView *View) { - Core.ActiveBrushRight(View); + Core.ActiveBrushRight(); } /*********************************************************************************/ @@ -311,27 +330,27 @@ CMapSizeDlg Dlg; if (Dlg.DoModal()!=IDOK) return; - Core.SetMapSize(View,Dlg.m_Width,Dlg.m_Height); + Core.SetMapSize(Dlg.m_Width,Dlg.m_Height); } /*********************************************************************************/ void CMapEditDoc::OnZoomIn() { - Core.Zoom(NULL,-0.1f); + Core.Zoom(-0.1f); UpdateAllViews(NULL); } /*********************************************************************************/ void CMapEditDoc::OnZoomOut() { - Core.Zoom(NULL,+0.1f); + Core.Zoom(+0.1f); UpdateAllViews(NULL); } /*********************************************************************************/ void CMapEditDoc::Toggle2d3d(CMapEditView *View) { - Core.Toggle2d3d(View); + Core.Toggle2d3d(); } /*********************************************************************************/ diff --git a/Utils/MapEdit/MapEditDoc.h b/Utils/MapEdit/MapEditDoc.h index 47f3e9024..94f0e40d0 100644 --- a/Utils/MapEdit/MapEditDoc.h +++ b/Utils/MapEdit/MapEditDoc.h @@ -24,6 +24,8 @@ public: void UpdateAll(CMapEditView *View); void FocusView(); bool Question(char *Txt); + void GUIUpdate(); + void GUIChanged(); // Windows Messages Thru Point void LButtonControl(CMapEditView *View,UINT nFlags, CPoint &point,BOOL DownFlag); diff --git a/Utils/MapEdit/MapEditView.cpp b/Utils/MapEdit/MapEditView.cpp index c92b79cce..1c54ecdfd 100644 --- a/Utils/MapEdit/MapEditView.cpp +++ b/Utils/MapEdit/MapEditView.cpp @@ -25,7 +25,6 @@ IMPLEMENT_DYNCREATE(CMapEditView, CGLEnabledView) BEGIN_MESSAGE_MAP(CMapEditView, CGLEnabledView) //{{AFX_MSG_MAP(CMapEditView) - ON_WM_SETFOCUS() ON_WM_LBUTTONUP() ON_WM_LBUTTONDOWN() ON_WM_MBUTTONDOWN() @@ -42,10 +41,10 @@ BEGIN_MESSAGE_MAP(CMapEditView, CGLEnabledView) ON_COMMAND(ID_ACTIVEBRUSH_RIGHT, OnActivebrushRight) ON_COMMAND(ID_MAP_SETSIZE, OnMapSetSize) ON_COMMAND(ID_2D_3D_TOGGLE, On2d3dToggle) - ON_COMMAND(ID_TOOLBAR_TILEPALETTE, OnToggleTileview) - ON_COMMAND(ID_TOGGLE_GRID, OnToggleGrid) ON_COMMAND(ID_EDIT_COPY, OnEditCopy) ON_COMMAND(ID_EDIT_PASTE, OnEditPaste) + ON_COMMAND(ID_TOOLBAR_TILEPALETTE, OnToggleTileview) + ON_COMMAND(ID_TOGGLE_GRID, OnToggleGrid) //}}AFX_MSG_MAP END_MESSAGE_MAP() @@ -137,14 +136,6 @@ CMapEditDoc* CMapEditView::GetDocument() // non-debug version is inline ///////////////////////////////////////////////////////////////////////////// // CMapEditView message handlers -void CMapEditView::OnSetFocus(CWnd* pOldWnd) -{ -CMapEditDoc *CurDoc=GetDocument(); - CGLEnabledView::OnSetFocus(pOldWnd); - theApp.SetCurrent(CurDoc); - CurDoc->UpdateAll(this); -} - /*********************************************************************************/ /*********************************************************************************/ /*********************************************************************************/ @@ -169,3 +160,14 @@ void CMapEditView::OnActivebrushRight() {GetDocument()->ActiveBrushRight void CMapEditView::OnMapSetSize() {GetDocument()->MapSetSize(this);} void CMapEditView::On2d3dToggle() {GetDocument()->Toggle2d3d(this);} + +void CMapEditView::OnActivateView(BOOL bActivate, CView* pActivateView, CView* pDeactiveView) +{ + CGLEnabledView::OnActivateView(bActivate, pActivateView, pDeactiveView); + if (bActivate) + { + CMapEditDoc *CurDoc=GetDocument(); + theApp.SetCurrent(CurDoc); + CurDoc->UpdateAll(this); + } +} diff --git a/Utils/MapEdit/MapEditView.h b/Utils/MapEdit/MapEditView.h index c825b4e9a..7ae6e763e 100644 --- a/Utils/MapEdit/MapEditView.h +++ b/Utils/MapEdit/MapEditView.h @@ -30,6 +30,8 @@ public: // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CMapEditView) + protected: + virtual void OnActivateView(BOOL bActivate, CView* pActivateView, CView* pDeactiveView); //}}AFX_VIRTUAL // Implementation @@ -46,7 +48,6 @@ protected: // Generated message map functions protected: //{{AFX_MSG(CMapEditView) - afx_msg void OnSetFocus(CWnd* pOldWnd); afx_msg void OnLButtonUp(UINT nFlags, CPoint point); afx_msg void OnLButtonDown(UINT nFlags, CPoint point); afx_msg void OnMButtonDown(UINT nFlags, CPoint point); diff --git a/Utils/MapEdit/TileSet.cpp b/Utils/MapEdit/TileSet.cpp index 3f0c077e7..98d1ce872 100644 --- a/Utils/MapEdit/TileSet.cpp +++ b/Utils/MapEdit/TileSet.cpp @@ -73,9 +73,9 @@ CTileBank::~CTileBank() /*****************************************************************************/ void CTileBank::SetCollision(bool f) { + LastSet=CurrentSet; if (f) { // Is collision - LastSet=CurrentSet; CurrentSet=0; } else @@ -84,7 +84,6 @@ void CTileBank::SetCollision(bool f) } } - /*****************************************************************************/ void CTileBank::Load(CFile *File,int Version) { @@ -267,30 +266,34 @@ void CTileBank::FindCursorPos(CCore *Core,CMapEditView *View,Vector3 &CamPos,CPo /*****************************************************************************/ /*** Gui *********************************************************************/ /*****************************************************************************/ -void CTileBank::UpdateGUI(CCore *Core,BOOL IsTileView) +void CTileBank::GUIInit(CCore *Core) { -CMainFrame *Frm=(CMainFrame*)AfxGetApp()->GetMainWnd(); -CLayerTileGUI *Dlg=(CLayerTileGUI*)Frm->GetDialog(IDD_LAYERTILE_GUI); -int ListSize=TileSet.size(); + Core->GUIAdd(TileBankGUI,IDD_LAYERTILE_GUI); +} - if (Dlg) - { - Dlg->m_List.ResetContent(); - if (ListSize-1) +/*****************************************************************************/ +void CTileBank::GUIUpdate(CCore *Core) +{ +int ListSize=TileSet.size(); +BOOL IsTileView=Core->IsTileView(); + + if (TileBankGUI.m_List) { - for (int i=1; im_List.AddString(TileSet[i].GetName()); + for (int i=1; im_List.SetCurSel(CurrentSet-1); + else + { + IsTileView=FALSE; + } + TileBankGUI.m_List.EnableWindow(IsTileView); } - else - { - IsTileView=FALSE; - } - Dlg->m_List.EnableWindow(IsTileView); - } - } /*****************************************************************************/ diff --git a/Utils/MapEdit/TileSet.h b/Utils/MapEdit/TileSet.h index 6dbbbacee..1db26da98 100644 --- a/Utils/MapEdit/TileSet.h +++ b/Utils/MapEdit/TileSet.h @@ -15,6 +15,9 @@ #include "TexCache.h" #include "Tile.h" +#include "MapEdit.h" +#include "LayerTileGui.h" + /*****************************************************************************/ enum TileSetEnum { @@ -48,7 +51,7 @@ public: void LoadTileSets(CCore *Core); CTile &GetTile(int Bank,int Tile); - void SetCurrent(int Set) {CurrentSet=Set+1;} + void SetCurrent() {CurrentSet=TileBankGUI.m_List.GetCurSel()+1;} int GetCurrent() {return(CurrentSet);} int GetSetCount() {return(TileSet.size());} @@ -61,10 +64,10 @@ public: void FindCursorPos(CCore *Core,CMapEditView *View,Vector3 &CamPos,CPoint &MousePos); void RenderCursor(CCore *Core,Vector3 &CamPos,BOOL Is3d); - void UpdateGUI(CCore *Core,BOOL IsTileView); + void GUIInit(CCore *Core); + void GUIUpdate(CCore *Core); BOOL IsTileValid(int Set,int Tile); -// BOOL IsTileValidGB(int Set,int Tile); void SetCollision(bool f); CTileSet &GetSet(int Set) {return(TileSet[Set]);} @@ -81,7 +84,7 @@ public: void Save(CFile *File); -private: +protected: BOOL Select(int BrushID,BOOL DownFlag); void SetBrush(CMap &ThisBrush); @@ -93,6 +96,9 @@ private: BOOL LoadFlag; int LastCursorPos,CursorPos; + + CLayerTileGUI TileBankGUI; + }; /*****************************************************************************/ @@ -109,12 +115,6 @@ public: void Load2d(CCore *Core); void Load3d(CCore *Core); -// const char *GetDrive() {return(Filename.Drive());} -// const char *GetPath() {return(Filename.Dir());} -// const char *GetName() {return(Filename.File());} -// const char *GetExt() {return(Filename.Ext());} -// const char *GetFilename() {return(Filename.FullName());} - const char *GetFilename() {return(Filename);} const char *GetName() {return(Name);} @@ -127,7 +127,6 @@ public: void RenderGrid(Vector3 &CamPos); int GetTileBrowserWidth() {return(TileBrowserWidth);} BOOL IsTileValid(int No); -// BOOL IsTileValidGB(int No); private: diff --git a/Utils/MapEdit/resource.h b/Utils/MapEdit/resource.h index 3f9b51641..3577323bc 100644 --- a/Utils/MapEdit/resource.h +++ b/Utils/MapEdit/resource.h @@ -16,6 +16,7 @@ #define IDD_ADDLAYER 172 #define IDD_LAYERTILE_GUI 173 #define IDD_LAYERTILE_TOOLBAR 174 +#define IDD_LAYERSHADE_GUI 175 #define IDC_TOOLBAR_COMBO 1018 #define IDC_LAYER_LIST 1019 #define IDD_LAYERTILE_BTN_UPDATE 1029 @@ -32,6 +33,14 @@ #define IDC_LAYERLIST_ADD 1056 #define IDC_LAYERLIST_DELETE 1057 #define IDC_ADDLAYER_LIST 1058 +#define IDC_LAYERSHADE_TEXT0 1059 +#define IDC_LAYERSHADE_EDITR0 1060 +#define IDC_LAYERSHADE_EDITG0 1061 +#define IDC_LAYERSHADE_EDITB0 1062 +#define IDC_LAYERSHADE_TEXT1 1063 +#define IDC_LAYERSHADE_EDITR1 1064 +#define IDC_LAYERSHADE_EDITG1 1065 +#define IDC_LAYERSHADE_EDITB1 1066 #define ID_TOOLBAR_LAYERBAR 32773 #define ID_TOOLBAR_TILEPALETTE 32774 #define ID_TOOLBAR_COMBO 32777 @@ -56,9 +65,9 @@ #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_3D_CONTROLS 1 -#define _APS_NEXT_RESOURCE_VALUE 173 +#define _APS_NEXT_RESOURCE_VALUE 177 #define _APS_NEXT_COMMAND_VALUE 32799 -#define _APS_NEXT_CONTROL_VALUE 1059 +#define _APS_NEXT_CONTROL_VALUE 1070 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif diff --git a/tools/MapEdit/MapEdit.exe b/tools/MapEdit/MapEdit.exe index 4791f6d6dbcd2fd322903ed443051606b39c0eff..794a28eaeabaf09c4023c0621406de3e1876bd6c 100644 GIT binary patch delta 84207 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 delta 79886 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