From 3602018f1ae6c190e32b5a2115edf0b8852b65fa Mon Sep 17 00:00:00 2001 From: Daveo Date: Mon, 26 Mar 2001 21:29:09 +0000 Subject: [PATCH] --- Utils/MapEdit/Core.cpp | 82 +++--- Utils/MapEdit/Core.h | 4 +- Utils/MapEdit/Elem.cpp | 33 ++- Utils/MapEdit/Export.cpp | 10 +- Utils/MapEdit/Export.h | 2 +- Utils/MapEdit/Layer.cpp | 117 ++++++++- Utils/MapEdit/Layer.h | 50 ++-- Utils/MapEdit/LayerActor.cpp | 414 +++---------------------------- Utils/MapEdit/LayerActor.h | 90 ++----- Utils/MapEdit/LayerCollision.cpp | 55 ++-- Utils/MapEdit/LayerCollision.h | 5 +- Utils/MapEdit/LayerDef.h | 10 + Utils/MapEdit/LayerItem.cpp | 334 ++----------------------- Utils/MapEdit/LayerItem.h | 42 +--- Utils/MapEdit/LayerPlatform.cpp | 33 +-- Utils/MapEdit/LayerPlatform.h | 24 +- Utils/MapEdit/LayerShade.cpp | 92 +++---- Utils/MapEdit/LayerShade.h | 19 +- Utils/MapEdit/LayerThing.cpp | 71 +++--- Utils/MapEdit/LayerThing.h | 16 +- Utils/MapEdit/LayerTile.cpp | 190 ++++++++------ Utils/MapEdit/LayerTile.h | 10 +- Utils/MapEdit/MapEdit.clw | 26 +- Utils/MapEdit/MapEdit.rc | 3 +- Utils/MapEdit/TileSet.cpp | 2 +- 25 files changed, 565 insertions(+), 1169 deletions(-) diff --git a/Utils/MapEdit/Core.cpp b/Utils/MapEdit/Core.cpp index 22ad50298..a949b8dbe 100644 --- a/Utils/MapEdit/Core.cpp +++ b/Utils/MapEdit/Core.cpp @@ -21,6 +21,9 @@ #include "LayerCollision.h" #include "LayerShade.h" #include "LayerThing.h" +#include "LayerActor.h" +#include "LayerItem.h" +#include "LayerPlatform.h" #include "utils.h" #include "Export.h" @@ -28,6 +31,7 @@ #include "GUIAddLayer.h" #include "GUINewMap.h" +#include GString IconzFileName="Iconz.bmp"; @@ -51,6 +55,7 @@ GString Filename; GetExecPath(Filename); Filename+=IconzFileName; IconBank->AddSet(Filename); + } /*****************************************************************************/ @@ -78,7 +83,7 @@ int Width,Height; // Create Tile Layers AddLayer(LAYER_TYPE_TILE,LAYER_SUBTYPE_ACTION, Width, Height); - AddLayer(LAYER_TYPE_ITEM,LAYER_SUBTYPE_NONE, Width, Height); +// AddLayer(LAYER_TYPE_ACTOR,LAYER_SUBTYPE_NONE, Width, Height); for (int i=0; iRead(&Type,sizeof(int)); - switch (Type) - { - case LAYER_TYPE_TILE: - AddLayer(new CLayerTile(File,Version)); - break; - case LAYER_TYPE_COLLISION: - AddLayer(new CLayerCollision(File,Version)); - break; - case LAYER_TYPE_SHADE: - AddLayer(new CLayerShade(File,Version)); - break; - case LAYER_TYPE_ITEM: - AddLayer(new CLayerThing(File,Version)); - break; - default: - ASSERT(!"poos"); - } + CLayer *Lyr=CLayer::LoadLayer(File,Version); + TRACE1("Loaded %s\n",Lyr->GetName()); + AddLayer(Lyr); } for (i=0; iInitSubView(this); } - GetTileBank()->Load(File,Version); CurrentLayer=Layer[ActiveLayer]; @@ -169,6 +156,16 @@ int MapHeight=ActionLayer->GetHeight(); } } +/*****************************************************************************/ +void CCore::Validate(int Type) +{ +int LayerCount=Layer.size(); + for (int i=0;iGetType()==Type) + Layer[i]->Validate(this); + } +} /*****************************************************************************/ void CCore::Save(CFile *File) @@ -190,8 +187,7 @@ int LayerCount=Layer.size(); for (int i=0;iGetType(); - File->Write(&Type,sizeof(int)); + Layer[i]->CLayer::Save(File); Layer[i]->Save(File); } GetTileBank()->Save(File); @@ -497,7 +493,17 @@ int Idx=ListSize; int CCore::AddLayer(int Type, int SubType, int Width, int Height) { int Idx; - switch (Type) +CLayer *Lyr; +sLayerDef ThisDef; + + ThisDef.Type=Type; + ThisDef.SubType=SubType; + ThisDef.Width=Width; + ThisDef.Height=Height; + + Lyr=CLayer::NewLayer(ThisDef); + Idx=AddLayer(Lyr); +/* switch (Type) { case LAYER_TYPE_TILE: Idx=AddLayer(new CLayerTile(SubType, Width,Height)); @@ -508,13 +514,20 @@ int Idx; case LAYER_TYPE_SHADE: Idx=AddLayer(new CLayerShade(SubType, Width,Height)); break; + case LAYER_TYPE_ACTOR: + Idx=AddLayer(new CLayerActor(SubType, Width,Height)); + break; case LAYER_TYPE_ITEM: - Idx=AddLayer(new CLayerThing(SubType, Width,Height)); + Idx=AddLayer(new CLayerItem(SubType, Width,Height)); + break; + case LAYER_TYPE_PLATFORM: + Idx=AddLayer(new CLayerPlatform(SubType, Width,Height)); break; default: ASSERT(!"AddLayer - Invalid Layer Type"); break; } +*/ if (ActionLayer) Layer[Idx]->InitSubView(this); return(Idx); } @@ -571,23 +584,6 @@ void CCore::DeleteLayer(int ThisLayer) } } -/*****************************************************************************/ -/* -CLayer *CCore::FindSubView(int Type) -{ -int i,ListSize=Layer.size(); - - for (i=0;iGetSubViewType()==Type) - { - CLayer *SV=Layer[i]->GetSubView(); - if (SV) return(SV); - } - } - return(0); -} -*/ /*****************************************************************************/ /*** Grid ********************************************************************/ /*****************************************************************************/ diff --git a/Utils/MapEdit/Core.h b/Utils/MapEdit/Core.h index 38414df27..71684a130 100644 --- a/Utils/MapEdit/Core.h +++ b/Utils/MapEdit/Core.h @@ -19,7 +19,7 @@ #include "Layer.h" #include "LayerTile.h" -const s32 FileVersion=5; +const s32 FileVersion=6; #define SCREEN_MAP_WIDTH 30 #define SCREEN_MAP_HEIGHT 20 @@ -39,6 +39,7 @@ public: bool New(); void Load(CFile *File); void Save(CFile *File); + void Validate(int Type); bool Question(char *Txt); void Render(bool ForceRender=FALSE); void RenderLayers(bool OneShot=false); @@ -60,7 +61,6 @@ public: // Subview & TileBank CTileBank *GetTileBank() {return(ActionLayer->GetTileBank());} void ToggleSubView(); -// CLayer *FindSubView(int Type); bool IsSubView() {return(CurrentLayer!=Layer[ActiveLayer]);} // GUI void UpdateParamBar(); diff --git a/Utils/MapEdit/Elem.cpp b/Utils/MapEdit/Elem.cpp index e29627c6b..e7e5d0da2 100644 --- a/Utils/MapEdit/Elem.cpp +++ b/Utils/MapEdit/Elem.cpp @@ -115,7 +115,6 @@ GFName Path=Filename; if (Centre) { Ofs.x=0.5-UnitWidth/2; -// Ofs.y=0.5-UnitHeight/2; Ofs.y=-1.0f; } @@ -193,6 +192,7 @@ std::vector const &NodeTriMat=ThisNode.GetTriMaterial(); std::vector const &SceneTexList=ThisScene.GetTexList(); std::vector const &SceneUsedMatList=ThisScene.GetUsedMaterialIdx(); +int TexCount=SceneTexList.size(); int TriCount=NodeTriList.size(); int ListSize=TriList.size(); @@ -207,17 +207,23 @@ int ListSize=TriList.size(); int TexID; -// Sort Textures - Only add the ones nthat are used :o) +// Sort Textures - Only add the ones that are used :o) TexID=SceneUsedMatList[ThisMat]; - - if (TexID!=-1) - { - GString ThisName; - - ThisName=SetPath+SceneTexList[TexID]; - TRACE2("%i !%s!\n",TexID,ThisName); - TexID=TexCache.ProcessTexture(ThisName); - } + if (TexID<0 || TexID>=TexCount) + { + CString mexstr; + mexstr.Format("Invalid TexId\n Wanted %i/%i for %s\nThis is gonna hurt!",TexID,TexCount-1,ThisNode.Name); + AfxMessageBox(mexstr,MB_OK | MB_ICONEXCLAMATION); + TexID=0; + } + else + { + GString ThisName; + GString TexName=SceneTexList[TexID]; + ThisName=SetPath+TexName; + TRACE2("%i !%s!\n",TexID,ThisName); + TexID=TexCache.ProcessTexture(ThisName); + } // Sort Rest of Tri info Matrix4x4 TransMtx; TransMtx.Identity(); @@ -721,7 +727,7 @@ CElemBank::CElemBank(int W,int H,bool Blank,bool Centre) LoadFlag=false; CurrentSet=0; - VisibleFlag=true; + LayerDef.VisibleFlag=true; } /*****************************************************************************/ @@ -874,7 +880,8 @@ bool CElemBank::IsValid(int Set,int Elem) { if (Set<0 || Elem<0) return(false); if (Elem==0) return(true); - if (Set>=SetList.size()) return(false); +// if (Set>=SetList.size()) return(false); + if (Set>SetList.size()) return(false); ASSERT(SetRead(&Type,sizeof(int)); + switch (Type) + { + case LAYER_TYPE_TILE: + New=new CLayerTile(File,Version); + break; + case LAYER_TYPE_COLLISION: + New=new CLayerCollision(File,Version); + break; + case LAYER_TYPE_SHADE: + New=new CLayerShade(File,Version); + break; + case LAYER_TYPE_ACTOR: + New=new CLayerActor(File,Version); + break; + case LAYER_TYPE_ITEM: + New=new CLayerItem(File,Version); + break; + case LAYER_TYPE_PLATFORM: + New=new CLayerPlatform(File,Version); + break; + default: + ASSERT(!"Unknown Layer"); + } + } + else + { + sLayerDef ThisDef; + + File->Read(&ThisDef,sizeof(sLayerDef)); + New=NewLayer(ThisDef);//Type,SubType,0,0); + } + return(New); +} + +/*****************************************************************************/ +void CLayer::Load(CFile *File,int Version) +{ + File->Read(&LayerDef,sizeof(sLayerDef)); +} + +/*****************************************************************************/ +void CLayer::Save(CFile *File) +{ + File->Write(&LayerDef,sizeof(sLayerDef)); } /*****************************************************************************/ int CLayer::GetLayerIdx(int Type,int SubType) { - for (int i=0; i @@ -15,67 +15,48 @@ #include "Core.h" #include "LayerThing.h" +#include "LayerActor.h" #include "Utils.h" #include "Export.h" /*****************************************************************************/ /*****************************************************************************/ /*****************************************************************************/ -// New Layer -CLayerThing::CLayerThing(int _SubType,int _Width,int _Height) +CLayerActor::CLayerActor(sLayerDef &Def) :CLayerThing(Def) { - SetDefaultParams(); - - Mode=MouseModeNormal; - Width=_Width; - Height=_Height; - ThingBank=new CElemBank(-1,-1,false,true); - CurrentThing=-1; - CurrentPoint=0; - +// CLayerThing::CLayerThing(_SubType,_Width,_Height); LoadThingScript("c:\\temp\\character.txt"); } /*****************************************************************************/ -// Load Layer -CLayerThing::CLayerThing(CFile *File,int Version) +//CLayerActor::CLayerActor(CFile *File,int Version) +//{ +// CLayerThing::CLayerThing(File,Version); +// +//} + +/*****************************************************************************/ +void CLayerActor::Load(CFile *File,int Version) { - Load(File,Version); +// CLayerThing::Load(File,Version); } /*****************************************************************************/ -CLayerThing::~CLayerThing() +void CLayerActor::Save(CFile *File) { - ThingBank->CleanUp(); - delete ThingBank; + CLayerThing::Save(File); } /*****************************************************************************/ -void CLayerThing::Load(CFile *File,int Version) -{ - File->Read(&VisibleFlag,sizeof(BOOL)); - File->Read(&Mode,sizeof(MouseMode)); - - TRACE1("%s\t",GetName()); -} - -/*****************************************************************************/ -void CLayerThing::Save(CFile *File) -{ -// Always Save current version - File->Write(&VisibleFlag,sizeof(BOOL)); - File->Write(&Mode,sizeof(MouseMode)); -} - -/*****************************************************************************/ -void CLayerThing::InitSubView(CCore *Core) +void CLayerActor::InitSubView(CCore *Core) { } /*****************************************************************************/ -void CLayerThing::LoadThingScript(const char *Filename) +void CLayerActor::LoadThingScript(const char *Filename) { - ThingScript.LoadAndImport(Filename); + CLayerThing::LoadThingScript(Filename); +// CLayerThing::ThingScript.LoadAndImport(Filename); int Count=ThingScript.GetGroupCount(); for (int i=0; iAddSet(Gfx); + if (Gfx) ThingBank->AddSet(Gfx); } } -/*****************************************************************************/ -/*****************************************************************************/ -/*****************************************************************************/ -void CLayerThing::Render(CCore *Core,Vector3 &CamPos,bool Is3d) -{ -Vector3 ThisCam=Core->OffsetCam(CamPos,GetScaleFactor()); -int i,ListSize=ThingList.size(); - -// Is3d&=Render3dFlag; - for (i=0; iGetZoomW(); -float ZoomH=Core->GetZoomH(); -float ScrOfsX=(ZoomW/2); -float ScrOfsY=(ZoomH/2); -Vector3 &Scale=Core->GetScaleVector(); -CElemBank *IconBank=Core->GetIconBank(); - - if (ThingBank->NeedLoad()) ThingBank->LoadAllSets(Core); - - 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 - -int ListSize=ThisThing.XY.size(); - for (int i=0;iRenderElem(0,i,0,Render3d); - if (i==0) - { - glColor4f(1,1,1,1); // Set default Color - ThingBank->RenderElem(ThisThing.Type,0,0,Render3d); - } - glPopMatrix(); - } - - glPopMatrix(); -} - /*****************************************************************************/ /*** Gui *********************************************************************/ /*****************************************************************************/ -void CLayerThing::GUIInit(CCore *Core) +void CLayerActor::GUIInit(CCore *Core) { // Core->GUIAdd(GUIToolBar,IDD_TOOLBAR); } /*****************************************************************************/ -void CLayerThing::GUIKill(CCore *Core) +void CLayerActor::GUIKill(CCore *Core) { // Core->GUIRemove(GUIToolBar,IDD_TOOLBAR); } /*****************************************************************************/ -void CLayerThing::GUIUpdate(CCore *Core) +void CLayerActor::GUIUpdate(CCore *Core) { } /*****************************************************************************/ -void CLayerThing::GUIChanged(CCore *Core) +void CLayerActor::GUIChanged(CCore *Core) { } /*****************************************************************************/ -/*** Functions ***************************************************************/ /*****************************************************************************/ -bool CLayerThing::LButtonControl(CCore *Core,UINT nFlags, CPoint &CursorPos,bool DownFlag) +/*****************************************************************************/ +void CLayerActor::Export(CCore *Core,CExport &Exp) { -bool Ret=false; - switch(Mode) - { - case MouseModeNormal: - if (DownFlag) - { - if (CurrentThing==-1) - AddThing(CursorPos); - else - AddThingPoint(CursorPos); - - } - break; - case MouseModePoints: - break; - default: - break; - } - - return(true); -} - -/*****************************************************************************/ -bool CLayerThing::RButtonControl(CCore *Core,UINT nFlags, CPoint &CursorPos,bool DownFlag) -{ -bool Ret=FALSE; - - switch(Mode) - { - case MouseModeNormal: - if (DownFlag) - { - SelectThing(CursorPos); - } - break; - case MouseModePoints: - break; - } - - return(Ret); -} - -/*****************************************************************************/ -bool CLayerThing::MouseMove(CCore *Core,UINT nFlags, CPoint &CursorPos) -{ -bool Ret=false; - - if (CurrentThing!=-1) - { - if (nFlags & MK_LBUTTON) // Drag - { - UpdatePos(CursorPos,CurrentThing,CurrentPoint,true); - Ret=true; - } - else - if (nFlags & MK_RBUTTON) // Cancel - { - CurrentThing=-1; - Ret=true; - } - } - return(Ret); -} - -/*****************************************************************************/ -bool CLayerThing::Command(int CmdMsg,CCore *Core,int Param0,int Param1) -{ -bool Ret=false; -/* - switch(CmdMsg) - { - case CmdMsg_SetMode: -// Mode=(MouseMode)Param0; -// Core->GUIUpdate(); -// break; -// case CmdMsg_SubViewSet: -// Ret=ThingBank->Command(CmdMsg,Core,Param0,Param1); - break; - default: - break; - } -*/ - return(Ret); -} - -/*****************************************************************************/ -void CLayerThing::RenderCursor(CCore *Core,Vector3 &CamPos,bool Is3d) -{ -Vector3 ThisCam=Core->OffsetCam(CamPos,GetScaleFactor()); -CPoint &CursPos=Core->GetCursorPos(); -Vector3 Ofs; - - if (CursPos.x<0 || CursPos.y<0) return; - - Ofs.x=-(CursPos.x-(int)ThisCam.x); - Ofs.y=-(CursPos.y-(int)ThisCam.y); - ThisCam.x-=(int)ThisCam.x; - ThisCam.y-=(int)ThisCam.y; - - if (Is3d && Render3dFlag) - { - glEnable(GL_DEPTH_TEST); -// Render(Core,ThisCam,,TRUE,0.5,&Ofs); - glDisable(GL_DEPTH_TEST); - } - else - { -// Render(Core,ThisCam,Brush,FALSE,0.5,&Ofs); - } -} - -/*****************************************************************************/ -/*****************************************************************************/ -/*****************************************************************************/ -int CLayerThing::CheckThing(CPoint &Pos) -{ -CList List; -int Idx=-1,i,ListSize=ThingList.size(); -int StartIdx=0; - -// Build List Of XY Matches - for (i=0; i List; -sLayerThing &ThisThing=ThingList[CurrentThing]; -int Idx=-1,i,ListSize=ThisThing.XY.size(); -int StartIdx=0; - -// Build List Of XY Matches - for (i=0; iGetElem(MapElem.Set,MapElem.Elem); - - OutElem.Set=MapElem.Set; - OutElem.Elem=MapElem.Elem; - OutElem.TriStart=0; - OutElem.TriCount=0; - OutElem.XOfs=ThisElem.GetTexXOfs(); - OutElem.YOfs=ThisElem.GetTexYOfs(); - OutElem.Elem=Exp.AddElem(OutElem); - OutElem.Flags=MapElem.Flags; - } - - Exp.Write(&OutElem,sizeof(sExpLayerThing)); - } - } -*/ } diff --git a/Utils/MapEdit/LayerActor.h b/Utils/MapEdit/LayerActor.h index 4ade9ee28..b07733ff9 100644 --- a/Utils/MapEdit/LayerActor.h +++ b/Utils/MapEdit/LayerActor.h @@ -1,94 +1,38 @@ /*******************/ -/*** Layer Thing ***/ +/*** Layer Actor ***/ /*******************/ -#ifndef __LAYER_THING_HEADER__ -#define __LAYER_THING_HEADER__ +#ifndef __LAYER_ACTOR_HEADER__ +#define __LAYER_ACTOR_HEADER__ +#include "LayerThing.h" #include "Layer.h" #include "MapEdit.h" #include "GUIToolbar.h" #include "Elem.h" /*****************************************************************************/ -struct sLayerThing -{ - std::vector XY; - int Type; - int SubType; - int Spare[8]; - -bool operator==(sLayerThing const &v1) -{ - if (XY[0]!=v1.XY[0]) return(false); - return(true); -} - -}; - -/*****************************************************************************/ -class CIni; -class CLayerThing : public CLayer +class CLayerActor : public CLayerThing { public: - enum MouseMode - { - MouseModeNormal=0, - MouseModePoints, - }; +// CLayerActor(int Type,int SubType,int Width,int Height); + CLayerActor(sLayerDef &Def); + CLayerActor(CFile *File,int Version) {Load(File,Version);} - CLayerThing(){}; - CLayerThing(int SubType,int Width,int Height); // New Layer - CLayerThing(CFile *File,int Version); // Load Layer - ~CLayerThing(); + void InitSubView(CCore *Core); -virtual int GetType() {return(LAYER_TYPE_ITEM);} -virtual void InitSubView(CCore *Core); + void GUIInit(CCore *Core); + void GUIKill(CCore *Core); + void GUIUpdate(CCore *Core); + void GUIChanged(CCore *Core); -virtual void Render(CCore *Core,Vector3 &CamPos,bool Is3d); - void RenderCursor(CCore *Core,Vector3 &CamPos,bool Is3d); -// void FindCursorPos(CCore *Core,Vector3 &CamPos,CPoint &MousePos); + void Load(CFile *File,int Version); + void Save(CFile *File); + void LoadThingScript(const char *Filename); -virtual void GUIInit(CCore *Core); -virtual void GUIKill(CCore *Core); -virtual void GUIUpdate(CCore *Core); -virtual void GUIChanged(CCore *Core); - - int GetWidth() {return(Width);} - int GetHeight() {return(Height);} - -virtual void Load(CFile *File,int Version); -virtual void Save(CFile *File); -virtual void LoadThingScript(const char *Filename); - -virtual void Export(CCore *Core,CExport &Exp); - -// Functions -virtual bool LButtonControl(CCore *Core,UINT nFlags, CPoint &point,bool DownFlag); -virtual bool RButtonControl(CCore *Core,UINT nFlags, CPoint &point,bool DownFlag); -virtual bool MouseMove(CCore *Core,UINT nFlags, CPoint &point); -virtual bool Command(int CmdMsg,CCore *Core,int Param0=0,int Param1=0); + void Export(CCore *Core,CExport &Exp); protected: - void RenderThing(CCore *Core,Vector3 &CamPos,sLayerThing &ThisThing,bool Render3d,bool Selected); - int CheckThing(CPoint &Pos); - void AddThing(CPoint &Pos); - void SelectThing(CPoint &Pos); - int CheckThingPoint(CPoint &Pos); - void AddThingPoint(CPoint &Pos); - void SelectThingPoint(CPoint &Pos); - - void UpdatePos(CPoint &Pos,int Thing,int PosNo,bool Recurs=false); - - - int Width,Height; - CIni ThingScript; - CElemBank *ThingBank; - CList ThingList; - int CurrentThing,CurrentPoint; - MouseMode Mode; - - CGUIToolBar GUIToolBar; }; diff --git a/Utils/MapEdit/LayerCollision.cpp b/Utils/MapEdit/LayerCollision.cpp index 72e7f4fc4..44ed71ce6 100644 --- a/Utils/MapEdit/LayerCollision.cpp +++ b/Utils/MapEdit/LayerCollision.cpp @@ -27,20 +27,10 @@ GString ColFName="Collision.bmp"; /*****************************************************************************/ /*****************************************************************************/ // New Layer -CLayerCollision::CLayerCollision(int _SubType,int Width,int Height) +//CLayerCollision::CLayerCollision(int Type,int SubType,int Width,int Height) :CLayerTile(LAYER_TYPE_COLLISION,SubType,Width,Height) +CLayerCollision::CLayerCollision(sLayerDef &Def) { - SubType=LAYER_SUBTYPE_NONE; - SetDefaultParams(); - Mode=MouseModePaint; - Map.SetSize(Width,Height,TRUE); - VisibleFlag=true; -} - -/*****************************************************************************/ -// Load Layer -CLayerCollision::CLayerCollision(CFile *File,int Version) -{ - Load(File,Version); + InitLayer(Def); } /*****************************************************************************/ @@ -65,31 +55,31 @@ GString Filename; /*****************************************************************************/ void CLayerCollision::Load(CFile *File,int Version) { -// Version 2 - File->Read(&Render3dFlag,sizeof(BOOL)); - File->Read(&ScaleFactor,sizeof(float)); - File->Read(&ResizeFlag,sizeof(BOOL)); - File->Read(&VisibleFlag,sizeof(BOOL)); - File->Read(&Mode,sizeof(MouseMode)); - File->Read(&SubType,sizeof(int)); + if (Version<=5) + { + BOOL DB; + float DF; + LayerDef.Type=LAYER_TYPE_COLLISION; + File->Read(&DB,sizeof(BOOL)); + File->Read(&DF,sizeof(float)); + File->Read(&DB,sizeof(BOOL)); + File->Read(&LayerDef.VisibleFlag,sizeof(BOOL)); + File->Read(&Mode,sizeof(MouseMode)); + File->Read(&LayerDef.SubType,sizeof(int)); + } + else + { + File->Read(&Mode,sizeof(MouseMode)); + } + InitLayer(LayerDef); Map.Load(File,Version); - TRACE1("%s\t",GetName()); - TRACE1("Scl:%g\t",ScaleFactor); - TRACE1("%i\n",VisibleFlag); } /*****************************************************************************/ void CLayerCollision::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(&Mode,sizeof(MouseMode)); - File->Write(&SubType,sizeof(SubType)); Map.Save(File); } @@ -153,7 +143,10 @@ void CLayerCollision::Export(CCore *Core,CExport &Exp) int Width=Map.GetWidth(); int Height=Map.GetHeight(); - Exp.ExportLayerHeader(LAYER_TYPE_COLLISION,SubType,Width,Height); + LayerDef.Width=Width; + LayerDef.Height=Height; + + Exp.ExportLayerHeader(LayerDef);//LAYER_TYPE_COLLISION,LayerDef.SubType,Width,Height); for (int Y=0; Y #include @@ -14,178 +13,59 @@ #include "MapEditView.h" #include "MainFrm.h" -//#include "ItemSet.h" - #include "Core.h" -#include "Layer.h" +#include "LayerThing.h" #include "LayerItem.h" #include "Utils.h" -//#include "Select.h" #include "Export.h" /*****************************************************************************/ /*****************************************************************************/ /*****************************************************************************/ // New Layer -CLayerItem::CLayerItem(int _SubType,int _Width,int _Height) +CLayerItem::CLayerItem(sLayerDef &Def) : CLayerThing (Def) { - SetDefaultParams(); - - Mode=MouseModePaint; + LoadThingScript("c:\\temp\\character.txt"); } /*****************************************************************************/ -// Load Layer -CLayerItem::CLayerItem(CFile *File,int Version) +//CLayerItem::CLayerItem(CFile *File,int Version) :CLayerThing (File,Version) +//{ +// +//} + +/*****************************************************************************/ +void CLayerItem::Load(CFile *File,int Version) { - Load(File,Version); + CLayerThing::Load(File,Version); } /*****************************************************************************/ -CLayerItem::~CLayerItem() +void CLayerItem::Save(CFile *File) { - ElemBank->CleanUp(); - delete ElemBank; -} - -/*****************************************************************************/ -void CLayerItem::Load(CFile *File,int Version) -{ - File->Read(&VisibleFlag,sizeof(BOOL)); - File->Read(&Mode,sizeof(MouseMode)); - - TRACE1("%s\t",GetName()); -} - -/*****************************************************************************/ -void CLayerItem::Save(CFile *File) -{ -// Always Save current version - File->Write(&VisibleFlag,sizeof(BOOL)); - File->Write(&Mode,sizeof(MouseMode)); + CLayerThing::Save(File); } /*****************************************************************************/ void CLayerItem::InitSubView(CCore *Core) { - ElemBank=new CElemStore; - SubView=ElemBank; } /*****************************************************************************/ -/*****************************************************************************/ -/*****************************************************************************/ -void CLayerItem::Render(CCore *Core,Vector3 &CamPos,bool Is3d) +void CLayerItem::LoadThingScript(const char *Filename) { -/* -Vector3 ThisCam=Core->OffsetCam(CamPos,GetScaleFactor()); + CLayerThing::LoadThingScript(Filename); +// CLayerThing::ThingScript.LoadAndImport(Filename); - Is3d&=Render3dFlag; - Render(Core,ThisCam,Map,Is3d); -*/ -} - -/*****************************************************************************/ -void CLayerItem::RenderCursorPaint(CCore *Core,Vector3 &CamPos,bool Is3d) -{ -/* -Vector3 ThisCam=Core->OffsetCam(CamPos,GetScaleFactor()); -CPoint &CursPos=Core->GetCursorPos(); -CMap &Brush=ElemBank->GetActiveBrush(); -Vector3 Ofs; - - if (!Brush.IsValid()) return; - - if (CursPos.x<0 || CursPos.y<0) return; - - Ofs.x=-(CursPos.x-(int)ThisCam.x); - Ofs.y=-(CursPos.y-(int)ThisCam.y); - ThisCam.x-=(int)ThisCam.x; - ThisCam.y-=(int)ThisCam.y; - - if (Is3d && Render3dFlag) +int Count=ThingScript.GetGroupCount(); + for (int i=0; iAddSet(Gfx); } - else - { - Render(Core,ThisCam,Brush,FALSE,0.5,&Ofs); - } -*/ -} - -/*****************************************************************************/ -void CLayerItem::Render(CCore *Core,Vector3 &ThisCam,CMap &ThisMap,bool Render3d,float Alpha,Vector3 *Ofs) -{ -/* -int MapWidth=ThisMap.GetWidth(); -int MapHeight=ThisMap.GetHeight(); -float ZoomW=Core->GetZoomW(); -float ZoomH=Core->GetZoomH(); -float ScrOfsX=(ZoomW/2); -float ScrOfsY=(ZoomH/2); -Vector3 &Scale=Core->GetScaleVector(); -bool WrapMap=SubType==LAYER_SUBTYPE_BACK; -int StartX=(int)ThisCam.x; -int StartY=(int)ThisCam.y; -float ShiftX=ThisCam.x - (int)ThisCam.x; -float ShiftY=ThisCam.y - (int)ThisCam.y; - - if (ElemBank->NeedLoad()) ElemBank->LoadAllSets(Core); - - if (StartX<0) StartX=0; - if (StartY<0) StartY=0; - -int DrawW=ZoomW+8; -int DrawH=ZoomH+8; - - if (StartX+DrawW>MapWidth) DrawW=MapWidth-StartX; - if (StartY+DrawH>MapHeight) DrawH=MapHeight-StartY; - - glMatrixMode(GL_MODELVIEW); - glPushMatrix(); - glLoadIdentity(); - glScalef(Scale.x,Scale.y,Scale.z); - glTranslatef(-ShiftX,ShiftY,0); // Set scroll offset - glTranslatef(-ScrOfsX,ScrOfsY,0); // Bring to top left corner - - - if (Ofs) - { - glTranslatef(-Ofs->x,Ofs->y,0); // Set scroll offset - } - - if (WrapMap) - { - DrawW=MapWidth; - DrawH=MapHeight; - } - for (int YLoop=0; YLoop0) - { // Render Non Zero and Valid Items - glColor4f(1,1,1,Alpha); // Set default Color - ElemBank->RenderItem(ThisElem.Set,ThisElem.Item,ThisElem.Flags,Render3d); - } - glTranslatef(1.0f,0,0); // Next X - } - glTranslatef(-DrawW,-1,0); // Next y, rewind to start X - } - glPopMatrix(); -*/ } /*****************************************************************************/ @@ -193,33 +73,18 @@ int DrawH=ZoomH+8; /*****************************************************************************/ void CLayerItem::GUIInit(CCore *Core) { - ElemBank->GUIInit(Core); - Core->GUIAdd(GUIToolBar,IDD_LAYERTILE_TOOLBAR); +// Core->GUIAdd(GUIToolBar,IDD_TOOLBAR); } /*****************************************************************************/ void CLayerItem::GUIKill(CCore *Core) { - ElemBank->GUIKill(Core); - Core->GUIRemove(GUIToolBar,IDD_LAYERTILE_TOOLBAR); +// Core->GUIRemove(GUIToolBar,IDD_TOOLBAR); } /*****************************************************************************/ void CLayerItem::GUIUpdate(CCore *Core) { - GUIToolBar.ResetButtons(); - switch(Mode) - { - case MouseModePaint: - GUIToolBar.SetButtonState(CGUIToolBar::PAINT,true); - break; - case MouseModeSelect: - GUIToolBar.SetButtonState(CGUIToolBar::SELECT,true); - break; - default: - break; - } - ElemBank->GUIUpdate(Core); } /*****************************************************************************/ @@ -228,158 +93,9 @@ void CLayerItem::GUIChanged(CCore *Core) } /*****************************************************************************/ -/*** Functions ***************************************************************/ /*****************************************************************************/ -bool CLayerItem::LButtonControl(CCore *Core,UINT nFlags, CPoint &CursorPos,bool DownFlag) -{ -bool Ret=false; -/* - switch(Mode) - { - case MouseModePaint: - if (DownFlag) - Ret=Paint(ElemBank->GetLBrush(),CursorPos); - break; - case MouseModeSelect: - Ret=Selection.Handle(CursorPos,nFlags); - if (Selection.HasSelection()) - { - TRACE0("LMB Selection\n"); - } - break; - default: - break; - } -*/ - return(Ret); -} - -/*****************************************************************************/ -bool CLayerItem::RButtonControl(CCore *Core,UINT nFlags, CPoint &CursorPos,bool DownFlag) -{ -bool Ret=FALSE; -/* - switch(Mode) - { - case MouseModePaint: - if (DownFlag) - Ret=Paint(ElemBank->GetRBrush(),CursorPos); - break; - case MouseModeSelect: - Ret=Selection.Handle(CursorPos,nFlags); - if (Selection.HasSelection()) - { - TRACE0("RMB Selection\n"); - } - break; - default: - break; - } -*/ - return(Ret); -} - -/*****************************************************************************/ -bool CLayerItem::MouseMove(CCore *Core,UINT nFlags, CPoint &CursorPos) -{ -bool Ret=FALSE; -/* - switch(Mode) - { - case MouseModePaint: - if (nFlags & MK_LBUTTON) - Ret=Paint(ElemBank->GetLBrush(),CursorPos); - else - if (nFlags & MK_RBUTTON) - Ret=Paint(ElemBank->GetRBrush(),CursorPos); - break; - case MouseModeSelect: - Ret=Selection.Handle(CursorPos,nFlags); - break; - default: - break; - } -*/ - return(Ret); -} - -/*****************************************************************************/ -bool CLayerItem::Command(int CmdMsg,CCore *Core,int Param0,int Param1) -{ -bool Ret=false; - - switch(CmdMsg) - { - case CmdMsg_SetMode: - Mode=(MouseMode)Param0; - Core->GUIUpdate(); - break; - case CmdMsg_SubViewSet: - Ret=ElemBank->Command(CmdMsg,Core,Param0,Param1); - break; - default: - TRACE3("LayerItem-Unhandled Command %i (%i,%i)\n",CmdMsg,Param0,Param1); - } - - return(Ret); -} - -/*****************************************************************************/ -void CLayerItem::RenderCursor(CCore *Core,Vector3 &CamPos,bool Is3d) -{ - RenderCursorPaint(Core,CamPos,Is3d); -} - -/*****************************************************************************/ -bool CLayerItem::Paint(CMap &Blk,CPoint &CursorPos) -{ - - if (CursorPos.x==-1 || CursorPos.y==-1) return(false); // Off Map? - if (!Blk.IsValid()) return(false); // Invalid Item? -/* - Map.Set(CursorPos.x,CursorPos.y,Blk); -*/ - return(true); -} - /*****************************************************************************/ void CLayerItem::Export(CCore *Core,CExport &Exp) { -/* -int Width=Map.GetWidth(); -int Height=Map.GetHeight(); - Exp.ExportLayerHeader(LAYER_TYPE_Item,SubType,Width,Height); - - for (int Y=0; YGetItem(MapElem.Set,MapElem.Item); - - OutItem.Set=MapElem.Set; - OutItem.Item=MapElem.Item; - OutItem.TriStart=0; - OutItem.TriCount=0; - OutItem.XOfs=ThisItem.GetTexXOfs(); - OutItem.YOfs=ThisItem.GetTexYOfs(); - OutElem.Item=Exp.AddItem(OutItem); - OutElem.Flags=MapElem.Flags; - } - - Exp.Write(&OutElem,sizeof(sExpLayerItem)); - } - } -*/ } diff --git a/Utils/MapEdit/LayerItem.h b/Utils/MapEdit/LayerItem.h index 2f8233ee3..ee5939a38 100644 --- a/Utils/MapEdit/LayerItem.h +++ b/Utils/MapEdit/LayerItem.h @@ -5,33 +5,21 @@ #ifndef __LAYER_ITEM_HEADER__ #define __LAYER_ITEM_HEADER__ +#include "LayerThing.h" #include "Layer.h" #include "MapEdit.h" #include "GUIToolbar.h" -#include "ElemStore.h" - +#include "Elem.h" /*****************************************************************************/ -class CLayerItem : public CLayer +class CLayerItem : public CLayerThing { public: - enum MouseMode - { - MouseModePaint=0, - MouseModeSelect, - }; + CLayerItem(sLayerDef &Def); + CLayerItem(CFile *File,int Version) {Load(File,Version);} - CLayerItem(){}; - CLayerItem(int SubType,int Width,int Height); // New Layer - CLayerItem(CFile *File,int Version); // Load Layer - ~CLayerItem(); - - int GetType() {return(LAYER_TYPE_ITEM);} void InitSubView(CCore *Core); - void Render(CCore *Core,Vector3 &CamPos,bool Is3d); - void RenderCursor(CCore *Core,Vector3 &CamPos,bool Is3d); - void GUIInit(CCore *Core); void GUIKill(CCore *Core); void GUIUpdate(CCore *Core); @@ -39,28 +27,12 @@ public: void Load(CFile *File,int Version); void Save(CFile *File); + void LoadThingScript(const char *Filename); void Export(CCore *Core,CExport &Exp); -// Functions - bool LButtonControl(CCore *Core,UINT nFlags, CPoint &point,bool DownFlag); - bool RButtonControl(CCore *Core,UINT nFlags, CPoint &point,bool DownFlag); - bool MouseMove(CCore *Core,UINT nFlags, CPoint &point); - bool Command(int CmdMsg,CCore *Core,int Param0=0,int Param1=0); - -// Local - CElemBank *GetElemBank() {return(ElemBank);} - protected: - void Render(CCore *Core,Vector3 &CamPos,CMap &ThisMap,bool Render3d,float Alpha=1.0f,Vector3 *Ofs=0); - void RenderCursorPaint(CCore *Core,Vector3 &CamPos,bool Is3d); - - bool Paint(CMap &Blk,CPoint &CursorPos); - - CElemStore *ElemBank; - MouseMode Mode; - - CGUIToolBar GUIToolBar; + CGUIToolBar GUIToolBar; }; diff --git a/Utils/MapEdit/LayerPlatform.cpp b/Utils/MapEdit/LayerPlatform.cpp index 22cf5e4ef..b579d2d1c 100644 --- a/Utils/MapEdit/LayerPlatform.cpp +++ b/Utils/MapEdit/LayerPlatform.cpp @@ -1,6 +1,6 @@ -/*******************/ -/*** Layer Actor ***/ -/*******************/ +/**********************/ +/*** Layer Platform ***/ +/**********************/ #include "stdafx.h" #include @@ -15,7 +15,7 @@ #include "Core.h" #include "LayerThing.h" -#include "LayerActor.h" +#include "LayerPlatform.h" #include "Utils.h" #include "Export.h" @@ -23,30 +23,35 @@ /*****************************************************************************/ /*****************************************************************************/ // New Layer -CLayerActor::CLayerActor(int _SubType,int _Width,int _Height) : CLayerThing (_SubType,_Width,_Height) +CLayerPlatform::CLayerPlatform(sLayerDef &Def) : CLayerThing(Def) { LoadThingScript("c:\\temp\\character.txt"); } /*****************************************************************************/ -void CLayerActor::Load(CFile *File,int Version) +//CLayerPlatform::CLayerPlatform(CFile *File,int Version) :CLayerThing (File,Version) +//{ +//} + +/*****************************************************************************/ +void CLayerPlatform::Load(CFile *File,int Version) { CLayerThing::Load(File,Version); } /*****************************************************************************/ -void CLayerActor::Save(CFile *File) +void CLayerPlatform::Save(CFile *File) { CLayerThing::Save(File); } /*****************************************************************************/ -void CLayerActor::InitSubView(CCore *Core) +void CLayerPlatform::InitSubView(CCore *Core) { } /*****************************************************************************/ -void CLayerActor::LoadThingScript(const char *Filename) +void CLayerPlatform::LoadThingScript(const char *Filename) { CLayerThing::LoadThingScript(Filename); // CLayerThing::ThingScript.LoadAndImport(Filename); @@ -65,31 +70,31 @@ int Count=ThingScript.GetGroupCount(); /*****************************************************************************/ /*** Gui *********************************************************************/ /*****************************************************************************/ -void CLayerActor::GUIInit(CCore *Core) +void CLayerPlatform::GUIInit(CCore *Core) { // Core->GUIAdd(GUIToolBar,IDD_TOOLBAR); } /*****************************************************************************/ -void CLayerActor::GUIKill(CCore *Core) +void CLayerPlatform::GUIKill(CCore *Core) { // Core->GUIRemove(GUIToolBar,IDD_TOOLBAR); } /*****************************************************************************/ -void CLayerActor::GUIUpdate(CCore *Core) +void CLayerPlatform::GUIUpdate(CCore *Core) { } /*****************************************************************************/ -void CLayerActor::GUIChanged(CCore *Core) +void CLayerPlatform::GUIChanged(CCore *Core) { } /*****************************************************************************/ /*****************************************************************************/ /*****************************************************************************/ -void CLayerActor::Export(CCore *Core,CExport &Exp) +void CLayerPlatform::Export(CCore *Core,CExport &Exp) { } diff --git a/Utils/MapEdit/LayerPlatform.h b/Utils/MapEdit/LayerPlatform.h index e6b762fae..905c60b06 100644 --- a/Utils/MapEdit/LayerPlatform.h +++ b/Utils/MapEdit/LayerPlatform.h @@ -1,9 +1,9 @@ -/*******************/ -/*** Layer Actor ***/ -/*******************/ +/**********************/ +/*** Layer Platform ***/ +/**********************/ -#ifndef __LAYER_ACTOR_HEADER__ -#define __LAYER_ACTOR_HEADER__ +#ifndef __LAYER_PLATFORM_HEADER__ +#define __LAYER_PLATFORM_HEADER__ #include "LayerThing.h" #include "Layer.h" @@ -12,22 +12,14 @@ #include "Elem.h" /*****************************************************************************/ -class CLayerActor : public CLayerThing +class CLayerPlatform : public CLayerThing { public: + CLayerPlatform(sLayerDef &Def); + CLayerPlatform(CFile *File,int Version) {Load(File,Version);} - CLayerActor(){}; - CLayerActor(int SubType,int Width,int Height); // New Layer - CLayerActor(CFile *File,int Version); // Load Layer -// ~CLayerActor(); - - int GetType() {return(LAYER_TYPE_ACTOR);} void InitSubView(CCore *Core); -//virtual void Render(CCore *Core,Vector3 &CamPos,bool Is3d); -// void RenderCursor(CCore *Core,Vector3 &CamPos,bool Is3d); -// void FindCursorPos(CCore *Core,Vector3 &CamPos,CPoint &MousePos); - void GUIInit(CCore *Core); void GUIKill(CCore *Core); void GUIUpdate(CCore *Core); diff --git a/Utils/MapEdit/LayerShade.cpp b/Utils/MapEdit/LayerShade.cpp index 659f3596e..b4a65e0d4 100644 --- a/Utils/MapEdit/LayerShade.cpp +++ b/Utils/MapEdit/LayerShade.cpp @@ -27,14 +27,23 @@ /*****************************************************************************/ /*****************************************************************************/ // New Layer -CLayerShade::CLayerShade(int _SubType,int _Width,int _Height) +CLayerShade::CLayerShade(sLayerDef &Def) { - SubType=_SubType; + InitLayer(Def); +} - SetDefaultParams(); - Width=TileLayerMinWidth+(_Width-TileLayerMinWidth)/ScaleFactor; - Height=TileLayerMinHeight+(_Height-TileLayerMinHeight)/ScaleFactor; +/*****************************************************************************/ +CLayerShade::~CLayerShade() +{ +} + +/*****************************************************************************/ +void CLayerShade::InitLayer(sLayerDef &Def) +{ + CLayer::InitLayer(Def); + LayerDef.Width=TileLayerMinWidth+(Def.Width-TileLayerMinWidth)/GetScaleFactor(); + LayerDef.Height=TileLayerMinHeight+(Def.Height-TileLayerMinHeight)/GetScaleFactor(); RGB[0].rgbRed=255; RGB[0].rgbGreen=255; RGB[0].rgbBlue=255; RGB[1].rgbRed=255; RGB[1].rgbGreen=0; RGB[1].rgbBlue=0; @@ -43,64 +52,37 @@ CLayerShade::CLayerShade(int _SubType,int _Width,int _Height) 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) + if (Version<=5) { - File->Read(&RGB[0],sizeof(RGBQUAD)); - File->Read(&RGB[1],sizeof(RGBQUAD)); + BOOL DB; + float DF; + LayerDef.Type=LAYER_TYPE_SHADE; + File->Read(&DB,sizeof(BOOL)); + File->Read(&DF,sizeof(float)); + File->Read(&DB,sizeof(BOOL)); + File->Read(&LayerDef.VisibleFlag,sizeof(BOOL)); + File->Read(&LayerDef.SubType,sizeof(int)); + File->Read(&LayerDef.Width,sizeof(int)); + File->Read(&LayerDef.Height,sizeof(int)); } - else + InitLayer(LayerDef); + File->Read(&Count,sizeof(int)); + if (Count<2) Count=2; + for (int i=0; iRead(&Count,sizeof(int)); - if (Count<2) Count=2; - for (int i=0; iRead(&Pos[i],sizeof(int)); - File->Read(&RGB[i],sizeof(RGBQUAD)); - } + File->Read(&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; iGetScaleVector(); int ThisCount=Count-1; float X0=0; -float X1=Width; +float X1=LayerDef.Width; float Y=(0+1); -float YInc=(float)Height/(float)ThisCount; +float YInc=(float)LayerDef.Height/(float)ThisCount; glMatrixMode(GL_MODELVIEW); glPushMatrix(); @@ -152,10 +134,10 @@ float YInc=(float)Height/(float)ThisCount; /*****************************************************************************/ -bool CLayerShade::Resize(int _Width,int _Height) +bool CLayerShade::Resize(int Width,int Height) { - Width=TileLayerMinWidth+(_Width-TileLayerMinWidth)/ScaleFactor; - Height=TileLayerMinHeight+(_Height-TileLayerMinHeight)/ScaleFactor; + LayerDef.Width=TileLayerMinWidth+(Width-TileLayerMinWidth)/GetScaleFactor(); + LayerDef.Height=TileLayerMinHeight+(Height-TileLayerMinHeight)/GetScaleFactor(); return(true); } @@ -200,7 +182,7 @@ void CLayerShade::GUIChanged(CCore *Core) /*****************************************************************************/ void CLayerShade::Export(CCore *Core,CExport &Exp) { - Exp.ExportLayerHeader(LAYER_TYPE_SHADE,SubType,Width,Height); + Exp.ExportLayerHeader(LayerDef);//LAYER_TYPE_SHADE,LayerDef.SubType,LayerDef.Width,LayerDef.Height); Exp.Write(&Count,sizeof(int)); for (int i=0; iAddSet("\\spongebob\\graphics\\Babyoctopus.bmp"); - ThingBank->AddSet("\\spongebob\\graphics\\barnicleboy.bmp"); - ThingBank->AddSet("\\spongebob\\graphics\\Caterpillar.bmp"); - ThingBank->AddSet("\\spongebob\\graphics\\clam.bmp"); - ThingBank->AddSet("\\spongebob\\graphics\\Eyeball.bmp"); - ThingBank->AddSet("\\spongebob\\graphics\\FlyingDutchman.bmp"); - ThingBank->AddSet("\\spongebob\\graphics\\gary.bmp"); - ThingBank->AddSet("\\spongebob\\graphics\\GiantWorm.bmp"); - ThingBank->AddSet("\\spongebob\\graphics\\HermitCrab.bmp"); - ThingBank->AddSet("\\spongebob\\graphics\\IronDogFish.bmp"); - ThingBank->AddSet("\\spongebob\\graphics\\Krusty.bmp"); - ThingBank->AddSet("\\spongebob\\graphics\\MermaidMan.bmp"); - ThingBank->AddSet("\\spongebob\\graphics\\Neptune.bmp"); - ThingBank->AddSet("\\spongebob\\graphics\\Patrick.bmp"); - ThingBank->AddSet("\\spongebob\\graphics\\plankton.bmp"); - ThingBank->AddSet("\\spongebob\\graphics\\PuffaFish.bmp"); - ThingBank->AddSet("\\spongebob\\graphics\\Sandy.bmp"); - ThingBank->AddSet("\\spongebob\\graphics\\SeaSnake.bmp"); - ThingBank->AddSet("\\spongebob\\graphics\\SharkSub.bmp"); - ThingBank->AddSet("\\spongebob\\graphics\\SpiderCrab.bmp"); - ThingBank->AddSet("\\spongebob\\graphics\\spongebob.bmp"); - ThingBank->AddSet("\\spongebob\\graphics\\Squidward.bmp"); - + InitLayer(Def); } /*****************************************************************************/ // Load Layer -CLayerThing::CLayerThing(CFile *File,int Version) -{ - Load(File,Version); -} +//CLayerThing::CLayerThing(CFile *File,int Version) +//{ + //Load(File,Version); +//} /*****************************************************************************/ CLayerThing::~CLayerThing() @@ -74,20 +43,28 @@ CLayerThing::~CLayerThing() delete ThingBank; } +/*****************************************************************************/ +void CLayerThing::InitLayer(sLayerDef &Def) +{ + Mode=MouseModeNormal; + LayerDef.Width=Width; + LayerDef.Height=Height; + ThingBank=new CElemBank(-1,-1,false,true); + CurrentThing=-1; + CurrentPoint=0; + +} + /*****************************************************************************/ void CLayerThing::Load(CFile *File,int Version) { - File->Read(&VisibleFlag,sizeof(BOOL)); File->Read(&Mode,sizeof(MouseMode)); - - TRACE1("%s\t",GetName()); } /*****************************************************************************/ void CLayerThing::Save(CFile *File) { // Always Save current version - File->Write(&VisibleFlag,sizeof(BOOL)); File->Write(&Mode,sizeof(MouseMode)); } @@ -96,6 +73,12 @@ void CLayerThing::InitSubView(CCore *Core) { } +/*****************************************************************************/ +void CLayerThing::LoadThingScript(const char *Filename) +{ + ThingScript.LoadAndImport(Filename); +} + /*****************************************************************************/ /*****************************************************************************/ /*****************************************************************************/ @@ -133,7 +116,7 @@ CElemBank *IconBank=Core->GetIconBank(); glTranslatef(-ScrOfsX,ScrOfsY,0); // Bring to top left corner int ListSize=ThisThing.XY.size(); - TRACE1("%i pts\n",ListSize); +TRACE1("%i\n",ListSize); for (int i=0;i ThingList; int CurrentThing,CurrentPoint; MouseMode Mode; - - - CGUIToolBar GUIToolBar; - }; /*****************************************************************************/ diff --git a/Utils/MapEdit/LayerTile.cpp b/Utils/MapEdit/LayerTile.cpp index d9dd9243f..4b3411bfc 100644 --- a/Utils/MapEdit/LayerTile.cpp +++ b/Utils/MapEdit/LayerTile.cpp @@ -26,50 +26,15 @@ /*****************************************************************************/ /*****************************************************************************/ /*****************************************************************************/ -// New Layer -CLayerTile::CLayerTile(int _SubType,int Width,int Height) +CLayerTile::CLayerTile(sLayerDef &Def) { - SubType=_SubType; - TileBank=0; - if (SubType==LAYER_SUBTYPE_ACTION) - TileBank=new CTileBank; - else - TileBank=0; - SubView=TileBank; - - SetDefaultParams(); - - Mode=MouseModePaint; - - if (ResizeFlag) - { - Width=TileLayerMinWidth+(Width-TileLayerMinWidth)/ScaleFactor; - Height=TileLayerMinHeight+(Height-TileLayerMinHeight)/ScaleFactor; - } - else - { - Width=32; - Height=32; - } - - if (WidthCleanUp(); delete TileBank; @@ -77,36 +42,61 @@ CLayerTile::~CLayerTile() } /*****************************************************************************/ -void CLayerTile::Load(CFile *File,int Version) +void CLayerTile::InitLayer(sLayerDef &Def) { - File->Read(&Render3dFlag,sizeof(BOOL)); - File->Read(&ScaleFactor,sizeof(float)); - File->Read(&ResizeFlag,sizeof(BOOL)); - File->Read(&VisibleFlag,sizeof(BOOL)); - File->Read(&Mode,sizeof(MouseMode)); - File->Read(&SubType,sizeof(int)); - Map.Load(File,Version); + CLayer::InitLayer(Def); + Mode=MouseModePaint; - if (SubType==LAYER_SUBTYPE_ACTION) + if (LayerDef.SubType==LAYER_SUBTYPE_ACTION) TileBank=new CTileBank; else TileBank=0; SubView=TileBank; + + if (!GetResizeFlag()) + { + LayerDef.Width=32; + LayerDef.Height=32; + } + + Resize(LayerDef.Width,LayerDef.Height); +} + +/*****************************************************************************/ +void CLayerTile::Load(CFile *File,int Version) +{ + if (Version<=5) + { + LayerDef.Type=LAYER_TYPE_TILE; + BOOL DB; + float DF; + File->Read(&DB,sizeof(BOOL)); + File->Read(&DF,sizeof(float)); + File->Read(&DB,sizeof(BOOL)); + File->Read(&LayerDef.VisibleFlag,sizeof(BOOL)); + File->Read(&Mode,sizeof(MouseMode)); + File->Read(&LayerDef.SubType,sizeof(int)); + } + else + { + File->Read(&Mode,sizeof(MouseMode)); + } + InitLayer(LayerDef); + Map.Load(File,Version); + +// if (LayerDef.SubType==LAYER_SUBTYPE_ACTION) +// TileBank=new CTileBank; +// else +// TileBank=0; +// SubView=TileBank; - TRACE1("%s\t",GetName()); } /*****************************************************************************/ void CLayerTile::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(&Mode,sizeof(MouseMode)); - File->Write(&SubType,sizeof(SubType)); Map.Save(File); } @@ -114,7 +104,7 @@ void CLayerTile::Save(CFile *File) void CLayerTile::InitSubView(CCore *Core) { // Fix up shared layers - if (SubType!=LAYER_SUBTYPE_ACTION) + if (LayerDef.SubType!=LAYER_SUBTYPE_ACTION) { TileBank=Core->GetTileBank(); SubView=(CLayer*)TileBank; @@ -133,22 +123,75 @@ void CLayerTile::CheckLayerSize(int Width,int Height) } } +/*****************************************************************************/ +void CLayerTile::Validate(CCore *Core) +{ +int Width=Map.GetWidth(); +int Height=Map.GetHeight(); +int Invalid=0; +int X,Y; +bool Ret=false; + + for (Y=0; YIsValid(MapElem.Set,MapElem.Tile)) + { + Invalid++; + } + } + } + if (Invalid) + { + char Txt[256]; + sprintf(Txt,"Map contains %i invalid tiles\n Do you want them removed?",Invalid); + Ret=Core->Question(Txt); + + } + if (Ret) + { + for (Y=0; YIsValid(MapElem.Set,MapElem.Tile)) + { + MapElem.Set=0; + MapElem.Tile=0; + } + } + } + } + +} + /*****************************************************************************/ bool CLayerTile::Resize(int Width,int Height) { - if (!ResizeFlag) return(FALSE); // Its a fixed size, so DONT DO IT! - int ThisWidth=Map.GetWidth(); int ThisHeight=Map.GetHeight(); - Width=TileLayerMinWidth+(Width-TileLayerMinWidth)/ScaleFactor; - Height=TileLayerMinHeight+(Height-TileLayerMinHeight)/ScaleFactor; +bool Flag=GetResizeFlag(); - if (ThisWidth!=Width || ThisHeight!=Height) + Width=TileLayerMinWidth+(Width-TileLayerMinWidth)/GetScaleFactor(); + Height=TileLayerMinHeight+(Height-TileLayerMinHeight)/GetScaleFactor(); + + if (WidthOffsetCam(CamPos,GetScaleFactor()); - Is3d&=Render3dFlag; + Is3d&=GetRender3dFlag(); Render(Core,ThisCam,Map,Is3d); } @@ -179,7 +222,8 @@ Vector3 Ofs; ThisCam.x-=(int)ThisCam.x; ThisCam.y-=(int)ThisCam.y; - if (Is3d && Render3dFlag) + Is3d&=GetRender3dFlag(); + if (Is3d) { glEnable(GL_DEPTH_TEST); Render(Core,ThisCam,Brush,TRUE,0.5,&Ofs); @@ -201,13 +245,17 @@ float ZoomH=Core->GetZoomH(); float ScrOfsX=(ZoomW/2); float ScrOfsY=(ZoomH/2); Vector3 &Scale=Core->GetScaleVector(); -bool WrapMap=SubType==LAYER_SUBTYPE_BACK; +bool WrapMap=LayerDef.SubType==LAYER_SUBTYPE_BACK; int StartX=(int)ThisCam.x; int StartY=(int)ThisCam.y; float ShiftX=ThisCam.x - (int)ThisCam.x; float ShiftY=ThisCam.y - (int)ThisCam.y; - if (TileBank->NeedLoad()) TileBank->LoadAllSets(Core); + if (TileBank->NeedLoad()) + { + TileBank->LoadAllSets(Core); + Core->Validate(GetType()); + } if (StartX<0) StartX=0; if (StartY<0) StartY=0; @@ -582,10 +630,12 @@ bool CLayerTile::Paint(CMap &Blk,CPoint &CursorPos) /*****************************************************************************/ void CLayerTile::Export(CCore *Core,CExport &Exp) { -int Width=Map.GetWidth(); -int Height=Map.GetHeight(); +int Width=Map.GetWidth(); +int Height=Map.GetHeight(); - Exp.ExportLayerHeader(LAYER_TYPE_TILE,SubType,Width,Height); + LayerDef.Width=Width; + LayerDef.Height=Height; + Exp.ExportLayerHeader(LayerDef); for (int Y=0; YRead(&LayerCam,sizeof(Vector3)); File->Read(&CurrentSet,sizeof(int));