From 23d9f79f4ccb388f45b960b385e1510d7109f1ca Mon Sep 17 00:00:00 2001 From: Daveo Date: Thu, 2 Nov 2000 15:46:17 +0000 Subject: [PATCH] --- Utils/MapEdit/Core.cpp | 169 +++++++++++++++++++--------------- Utils/MapEdit/Core.h | 43 +++++---- Utils/MapEdit/Layer.cpp | 53 ++++++++--- Utils/MapEdit/Layer.h | 24 ++++- Utils/MapEdit/Map.cpp | 53 +++++++++++ Utils/MapEdit/Map.h | 37 ++++++++ Utils/MapEdit/MapEdit.dsp | 8 ++ Utils/MapEdit/MapEditView.cpp | 55 +---------- Utils/MapEdit/MapEditView.h | 3 - Utils/MapEdit/StdAfx.h | 1 + Utils/MapEdit/TileSet.h | 1 + 11 files changed, 283 insertions(+), 164 deletions(-) create mode 100644 Utils/MapEdit/Map.cpp create mode 100644 Utils/MapEdit/Map.h diff --git a/Utils/MapEdit/Core.cpp b/Utils/MapEdit/Core.cpp index df3fd6138..76bc55118 100644 --- a/Utils/MapEdit/Core.cpp +++ b/Utils/MapEdit/Core.cpp @@ -24,7 +24,6 @@ BOOL Test3dFlag=TRUE; -GLint TestTile; /*****************************************************************************/ /*****************************************************************************/ @@ -32,16 +31,20 @@ GLint TestTile; CCore::CCore() { MouseMode=MOUSE_MODE_NONE; - Layers[LAYER_TYPE_BACK]= new CLayerBack; - Layers[LAYER_TYPE_MID]= new CLayerMid; - Layers[LAYER_TYPE_ACTION]= new CLayerAction; - Layers[LAYER_TYPE_FORE]= new CLayerFore; + Layers[LAYER_TYPE_BACK]= new CLayerBack(this); + Layers[LAYER_TYPE_MID]= new CLayerMid(this); + Layers[LAYER_TYPE_ACTION]= new CLayerAction(this); + Layers[LAYER_TYPE_FORE]= new CLayerFore(this); + + TileViewFlag=0; + LayerViewFlag=1; } /*****************************************************************************/ CCore::~CCore() { - for (int i=0; iRender(CamPos,Test3dFlag); - glDisable(GL_DEPTH_TEST); } - } -// ParentWindow->Invalidate(); + else + { + for (int i=0;iRender(ThisCam,Test3dFlag); + glDisable(GL_DEPTH_TEST); + } + } } -/*****************************************************************************/ -void CCore::UpdateView(float XOfs,float YOfs,float ZOfs) -{ - CamPos=CamPos+Vec(XOfs,YOfs,ZOfs); - if (CamPos.z>-1) CamPos.z=-1; - - ParentWindow->Invalidate(); -} - /*****************************************************************************/ /*** Control *****************************************************************/ /*****************************************************************************/ @@ -106,25 +102,24 @@ void CCore::MButtonControl(UINT nFlags, CPoint &point,BOOL DownFlag) /*****************************************************************************/ void CCore::RButtonControl(UINT nFlags, CPoint &point,BOOL DownFlag) { -// Test3dFlag=!Test3dFlag; - UpdateView(0,0,0); } /*****************************************************************************/ void CCore::MouseWheel(UINT nFlags, short zDelta, CPoint &pt) { if (zDelta>0) - UpdateView(0,0,1.0f); + UpdateView(Vec(0,0,1.0f)); else - UpdateView(0,0,-1.0f); + UpdateView(Vec(0,0,-1.0f)); } /*****************************************************************************/ void CCore::MouseMove(UINT nFlags, CPoint &point) { -float XOfs=0; -float YOfs=0; - +Vec Ofs(0,0,0); +//float XOfs=0; +//float YOfs=0; +Vec &ThisCam=GetCam(); // check if active doc if (theApp.GetCurrent()!=ParentWindow->GetDocument()) return; @@ -137,85 +132,109 @@ float YOfs=0; RECT ThisRect; ParentWindow->GetWindowRect(&ThisRect); - XS=CamPos.z*2;//*Layers[ActiveLayer]->GetLayerZPos(); - YS=CamPos.z*2;//*Layers[ActiveLayer]->GetLayerZPos(); + XS=ThisCam.z*2;//*Layers[ActiveLayer]->GetLayerZPos(); + YS=ThisCam.z*2;//*Layers[ActiveLayer]->GetLayerZPos(); XS/=((ThisRect.right-ThisRect.left)); YS/=((ThisRect.bottom-ThisRect.top)); - XOfs=LastMousePos.x-CurrentMousePos.x; - YOfs=LastMousePos.y-CurrentMousePos.y; + Ofs.x=LastMousePos.x-CurrentMousePos.x; + Ofs.y=LastMousePos.y-CurrentMousePos.y; LastMousePos=CurrentMousePos; - XOfs*=XS; - YOfs*=YS; + Ofs.x*=XS; + Ofs.y*=YS; TRACE2("Move %i %i \n",point.x,point.y); - UpdateView(+XOfs,-YOfs,0); + UpdateView(Ofs); } } /*****************************************************************************/ -/*** Layer Code **************************************************************/ +/*** Layers ******************************************************************/ /*****************************************************************************/ -void CCore::LayerSetActive(int i) +void CCore::UpdateLayerBar(BOOL ViewFlag) { +CMainFrame *Frm=(CMainFrame*)AfxGetApp()->GetMainWnd(); +CToolBar *ToolBar=Frm->GetToolBar(); +CDialogBar *LayerBar=Frm->GetLayerBar(); +CListBox *Dlg=(CListBox *)LayerBar->GetDlgItem(IDC_LAYERBAR_LIST); + + LayerViewFlag=ViewFlag; + if (LayerViewFlag) + { + Dlg->ResetContent(); + + for (int i=0;iAddString(ThisLayer->GetName()); + } + Dlg->SetCurSel(ActiveLayer); + } + + ToolBar->GetToolBarCtrl().PressButton(ID_TOOLBAR_LAYERBAR,LayerViewFlag); + Frm->ShowControlBar(LayerBar, LayerViewFlag, FALSE); +// UpdateView(); } /*****************************************************************************/ -int CCore::LayerGetActive() +void CCore::SetActiveLayer(int i) { - return(ActiveLayer); + UpdateLayerBar(LayerViewFlag); } -/*****************************************************************************/ -CLayer *CCore::LayerGet(int i) -{ - return(Layers[i]); -} /*****************************************************************************/ +/*** TileBank ****************************************************************/ /*****************************************************************************/ -/*****************************************************************************/ -void CCore::SetTileView(BOOL f) +void CCore::UpdateTileView(BOOL ViewFlag) { CMainFrame *Frm=(CMainFrame*)AfxGetApp()->GetMainWnd(); CToolBar *ToolBar=Frm->GetToolBar(); - TileViewFlag=f; + TileViewFlag=ViewFlag; ToolBar->GetToolBarCtrl().PressButton(ID_TOOLBAR_TILEPALETTE,TileViewFlag); - + UpdateView(); } /*****************************************************************************/ -void CCore::ToggleTileView() +GLint CCore::GetTile(int Bank,int TileNo) { - SetTileView(!TileViewFlag); + TRACE1("%i\n",TileSet.size()); + return(TileSet[Bank].GetTile(TileNo)); } - - /*****************************************************************************/ +/*** Misc ********************************************************************/ /*****************************************************************************/ -/*****************************************************************************/ -void CCore::SetLayerPalette(BOOL f) +Vec &CCore::GetCam() { -CMainFrame *Frm=(CMainFrame*)AfxGetApp()->GetMainWnd(); -CToolBar *ToolBar=Frm->GetToolBar(); -CDialogBar *LayerPalette=Frm->GetLayerBar(); + if (GetTileView()) + return(TileCam); + else + return(MapCam); - LayerPaletteFlag=f; - ToolBar->GetToolBarCtrl().PressButton(ID_TOOLBAR_LAYERBAR,LayerPaletteFlag); - Frm->ShowControlBar(LayerPalette, LayerPaletteFlag, FALSE); } /*****************************************************************************/ -void CCore::ToggleLayerPalette() +void CCore::UpdateAll() { - SetLayerPalette(!LayerPaletteFlag); + UpdateView(); + UpdateLayerBar(LayerViewFlag); + UpdateTileView(TileViewFlag); } /*****************************************************************************/ +void CCore::UpdateView(Vec Ofs) +{ +Vec &ThisCam=GetCam(); + + ThisCam=ThisCam+Ofs; + if (ThisCam.z>-1) ThisCam.z=-1; + + ParentWindow->Invalidate(); +} diff --git a/Utils/MapEdit/Core.h b/Utils/MapEdit/Core.h index cab34ff8c..1aaf6bd20 100644 --- a/Utils/MapEdit/Core.h +++ b/Utils/MapEdit/Core.h @@ -32,6 +32,10 @@ class CCore public: CCore(); ~CCore(); + + void Init(CMapEditView *Wnd); + void Render(); + // Control void LButtonControl(UINT nFlags, CPoint &point,BOOL DownFlag); void MButtonControl(UINT nFlags, CPoint &point,BOOL DownFlag); @@ -39,36 +43,37 @@ public: void MouseWheel(UINT nFlags, short zDelta, CPoint &pt); void MouseMove(UINT nFlags, CPoint &point); -// Blah - void Init(CMapEditView *Wnd); - void Render(); - void UpdateView(float XOfs,float YOfs,float ZOfs); - void SetMouseMode(MOUSE_MODE CurrentMode,MOUSE_MODE NewMode); +// TileBank + void UpdateTileView(BOOL ViewFlag); + BOOL GetTileView() {return(TileViewFlag);} + void ToggleTileView() {UpdateTileView(!TileViewFlag);} - Vec &GetCamPos() {return(CamPos);} - - void SetTileView(BOOL f); - BOOL GetTileView() {return(TileViewFlag);} - void ToggleTileView(); - - void SetLayerPalette(BOOL f); - BOOL GetLayerPalette() {return(LayerPaletteFlag);} - void ToggleLayerPalette(); + GLint GetTile(int Bank,int TileNo); // Layers - void LayerSetActive(int Layer); - int LayerGetActive(); - CLayer *LayerGet(int i); + void UpdateLayerBar(BOOL ViewFlag); + BOOL GetLayerViewFlag() {return(LayerViewFlag);} + void ToggleLayerView() {UpdateLayerBar(!LayerViewFlag);} + + void SetActiveLayer(int Layer); + int GetActiveLayer() {return(ActiveLayer);} + CLayer *GetLayer(int i) {return(Layers[i]);} // Tex Cache CTexCache &GetTexCache() {return(TexCache);} +// Misc + void UpdateAll(); + void UpdateView(Vec Ofs=Vec(0,0,0)); + + Vec &GetCam(); + private: CMapEditView *ParentWindow; MOUSE_MODE MouseMode; CPoint CurrentMousePos,LastMousePos; - Vec CamPos; + Vec MapCam,TileCam; CLayer *Layers[LAYER_TYPE_MAX]; int ActiveLayer; @@ -77,7 +82,7 @@ private: CTexCache TexCache; BOOL TileViewFlag; - BOOL LayerPaletteFlag; + BOOL LayerViewFlag; }; diff --git a/Utils/MapEdit/Layer.cpp b/Utils/MapEdit/Layer.cpp index 6243f8614..954bd4e3a 100644 --- a/Utils/MapEdit/Layer.cpp +++ b/Utils/MapEdit/Layer.cpp @@ -13,6 +13,7 @@ //#include "MapEditDoc.h" //#include "MapEditView.h" +#include "Core.h" #include "Layer.h" #include "Utils.h" @@ -20,7 +21,7 @@ /*****************************************************************************/ /*****************************************************************************/ /*****************************************************************************/ -CLayer::CLayer() +CLayer::CLayer(CCore *_Core) { } @@ -29,6 +30,16 @@ CLayer::~CLayer() { } +/*****************************************************************************/ +void CLayer::InitLayer(CCore *_Core) +{ +int Width=Map.GetWidth(); +int Height=Map.GetHeight(); + + Core=_Core; + TRACE3("%i x %i = %i\t",Width,Height,Width*Height); +} + /*****************************************************************************/ void CLayer::Render(Vec &MapPos,BOOL Is3d) { @@ -39,22 +50,23 @@ void CLayer::Render(Vec &MapPos,BOOL Is3d) } /*****************************************************************************/ -extern GLint TestTile; - void CLayer::Render2d(Vec &MapPos) { float XYDiv=GetLayerZPosDiv(); return; +int Width=Map.GetWidth(); +int Height=Map.GetHeight(); + glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslatef(MapPos.x/XYDiv,MapPos.y/XYDiv,MapPos.z); glBegin(GL_QUADS); SetTestColor(); - BuildGLQuad(-1,LayerWidth+1,-1,0,0); // Bottom - BuildGLQuad(-1,LayerWidth+1,LayerHeight+1,LayerHeight,0); // Top - BuildGLQuad(-1,0,LayerHeight,0,0); // Left - BuildGLQuad(LayerWidth,LayerWidth+1,LayerHeight,0,0); // Right + BuildGLQuad(-1,Width+1,-1,0,0); // Bottom + BuildGLQuad(-1,Width+1,Height+1,Height,0); // Top + BuildGLQuad(-1,0,Height,0,0); // Left + BuildGLQuad(Width,Width+1,Height,0,0); // Right glEnd(); @@ -65,14 +77,31 @@ float asd=0; void CLayer::Render3d(Vec &MapPos) { float XYDiv=GetLayerZPosDiv(); +float X,Y; +int XX=0; +int YY=0; glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glTranslatef(MapPos.x/XYDiv,MapPos.y/XYDiv,MapPos.z); - glRotatef(asd,0,1,0); - asd+=0.5; - glCallList(TestTile); + Y=MapPos.y; + + for (YY=0; YY<3; YY++) + { + X=MapPos.x; + for (XX=0; XX<3; XX++) + { + glLoadIdentity(); + glTranslatef(X/XYDiv,Y/XYDiv,MapPos.z); +// glRotatef(asd,0,1,0); +// asd+=0.5; +// glCallList(Core->GetTile(0,2)); + glCallList(Core->GetTile(0,XX+(YY*3))); + + X+=1.0f; + } + Y+=1.0f; + } + } diff --git a/Utils/MapEdit/Layer.h b/Utils/MapEdit/Layer.h index e41955520..4ba3eb351 100644 --- a/Utils/MapEdit/Layer.h +++ b/Utils/MapEdit/Layer.h @@ -7,6 +7,7 @@ #include #include "gl3d.h" +#include "Map.h" enum LAYER_TYPE { @@ -18,15 +19,26 @@ enum LAYER_TYPE LAYER_TYPE_MAX }; - +/* +struct sMapElem +{ + int Bank; + int Tile; + int Flags; +}; +*/ /*****************************************************************************/ +class CCore; +class CMap; class CLayer { public: - CLayer(); + CLayer(){ASSERT(1);} + CLayer(CCore *_Core); ~CLayer(); + void InitLayer(CCore *_Core); // Virtual virtual void Init()=0; @@ -43,8 +55,14 @@ virtual void SetTestColor()=0; protected: - float LayerWidth,LayerHeight; +// float Width,Height; + CCore *Core; +// std::vector< std::vector > Map; +// sMapElem *Map; + CMap Map; + }; + /*****************************************************************************/ #endif diff --git a/Utils/MapEdit/Map.cpp b/Utils/MapEdit/Map.cpp new file mode 100644 index 000000000..1bcde0af7 --- /dev/null +++ b/Utils/MapEdit/Map.cpp @@ -0,0 +1,53 @@ +/******************/ +/*** Map Stuph ***/ +/*****************/ + + +#include "stdafx.h" +#include "Map.h" + + +/*****************************************************************************/ +int CMap::GetWidth() +{ + return(Map.size()); +} + +/*****************************************************************************/ +int CMap::GetHeight() +{ + return(Map[0].size()); +} + +/*****************************************************************************/ +void CMap::SetSize(int Width,int Height) +{ + Map.resize(Width); + for (int i=0;i + +struct sMapElem +{ + int Bank; + int Tile; + int Flags; +}; + +/*****************************************************************************/ +class CMap +{ +public: + CMap(){}; + ~CMap(){}; + + int GetWidth(); + int GetHeight(); + + void SetSize(int Width,int Height); + void SetWidth(int Width); + void SetHeight(int Height); + +protected: + std::vector< std::vector > Map; +}; + + +/*****************************************************************************/ +#endif diff --git a/Utils/MapEdit/MapEdit.dsp b/Utils/MapEdit/MapEdit.dsp index 71198fe44..bfbd8cd80 100644 --- a/Utils/MapEdit/MapEdit.dsp +++ b/Utils/MapEdit/MapEdit.dsp @@ -143,6 +143,14 @@ SOURCE=.\Core.h # End Source File # Begin Source File +SOURCE=.\Map.cpp +# End Source File +# Begin Source File + +SOURCE=.\Map.h +# End Source File +# Begin Source File + SOURCE=.\TexCache.cpp # End Source File # Begin Source File diff --git a/Utils/MapEdit/MapEditView.cpp b/Utils/MapEdit/MapEditView.cpp index 5a6210ac7..046af76f4 100644 --- a/Utils/MapEdit/MapEditView.cpp +++ b/Utils/MapEdit/MapEditView.cpp @@ -123,47 +123,7 @@ CMapEditDoc *CurDoc=GetDocument(); /*********************************************************************************/ void CMapEditView::UpdateAll() { - UpdateLayerBar(); - -} - -/*********************************************************************************/ -void CMapEditView::UpdateLayerBar() -{ -CMainFrame *Frm=(CMainFrame*)AfxGetApp()->GetMainWnd(); -CDialogBar *LayerBar=Frm->GetLayerBar(); -CListBox *Dlg=(CListBox *)LayerBar->GetDlgItem(IDC_LAYERBAR_LIST); -int CurSel=Dlg->GetCurSel(); - - Dlg->ResetContent(); - - for (int i=0;iAddString(ThisLayer->GetName()); - } - Dlg->SetCurSel(CurSel); - -} - -/*********************************************************************************/ -int CMapEditView::GetLayerCurSel() -{ -CMainFrame *Frm=(CMainFrame*)AfxGetApp()->GetMainWnd(); -CDialogBar *LayerBar=Frm->GetLayerBar(); -CListBox *Dlg=(CListBox *)LayerBar->GetDlgItem(IDC_LAYERBAR_LIST); - return(Dlg->GetCurSel()); - -} - -/*********************************************************************************/ -int CMapEditView::GetLayerCount() -{ -CMainFrame *Frm=(CMainFrame*)AfxGetApp()->GetMainWnd(); -CDialogBar *LayerBar=Frm->GetLayerBar(); -CListBox *Dlg=(CListBox *)LayerBar->GetDlgItem(IDC_LAYERBAR_LIST); - return(Dlg->GetCount()); - + Core.UpdateAll(); } /*********************************************************************************/ @@ -178,14 +138,5 @@ void CMapEditView::OnRButtonDown(UINT nFlags, CPoint point) {Core.RButtonCont void CMapEditView::OnRButtonUp(UINT nFlags, CPoint point) {Core.RButtonControl(nFlags,point,FALSE);} void CMapEditView::OnMouseMove(UINT nFlags, CPoint point) {Core.MouseMove(nFlags, point);} - - -void CMapEditView::OnToolbarLayerbar() -{ - Core.ToggleLayerPalette(); -} - -void CMapEditView::OnToolbarTilepalette() -{ - Core.ToggleTileView(); -} +void CMapEditView::OnToolbarLayerbar() {Core.ToggleLayerView();} +void CMapEditView::OnToolbarTilepalette() {Core.ToggleTileView();} diff --git a/Utils/MapEdit/MapEditView.h b/Utils/MapEdit/MapEditView.h index 9d6acd51c..a2eb6ca73 100644 --- a/Utils/MapEdit/MapEditView.h +++ b/Utils/MapEdit/MapEditView.h @@ -38,9 +38,6 @@ public: virtual void Dump(CDumpContext& dc) const; #endif void UpdateAll(); - void UpdateLayerBar(); - int GetLayerCurSel(); - int GetLayerCount(); protected: void VideoMode(ColorsNumber &c,ZAccuracy &z,BOOL &dbuf); diff --git a/Utils/MapEdit/StdAfx.h b/Utils/MapEdit/StdAfx.h index fb8d6fda7..29574b5de 100644 --- a/Utils/MapEdit/StdAfx.h +++ b/Utils/MapEdit/StdAfx.h @@ -2,6 +2,7 @@ // or project specific include files that are used frequently, but // are changed infrequently // +#pragma warning( disable : 4786 ) #if !defined(AFX_STDAFX_H__67922BC1_781B_4EBB_86D3_B87FA7642774__INCLUDED_) #define AFX_STDAFX_H__67922BC1_781B_4EBB_86D3_B87FA7642774__INCLUDED_ diff --git a/Utils/MapEdit/TileSet.h b/Utils/MapEdit/TileSet.h index c590e34be..a3abddd0f 100644 --- a/Utils/MapEdit/TileSet.h +++ b/Utils/MapEdit/TileSet.h @@ -30,6 +30,7 @@ public: int Load(CCore *Core,char *_Filename); char *GetPath() {return(Path);} char *GetFilename() {return(Filename);} + GLint GetTile(int No) {return(Tile[No].GetTile());} private: char Path[256];