This commit is contained in:
Daveo 2001-03-27 16:26:43 +00:00
parent f2c2ce0fd2
commit 9087f4cc16
12 changed files with 94 additions and 87 deletions

View file

@ -55,7 +55,6 @@ GString Filename;
GetExecPath(Filename); GetExecPath(Filename);
Filename+=IconzFileName; Filename+=IconzFileName;
IconBank->AddSet(Filename); IconBank->AddSet(Filename);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -110,7 +109,6 @@ Vector3 DuffVector;
CString mexstr; CString mexstr;
mexstr.Format("Old File Format\n\nPlease re-save\n"); mexstr.Format("Old File Format\n\nPlease re-save\n");
AfxMessageBox(mexstr,MB_OK | MB_ICONEXCLAMATION); AfxMessageBox(mexstr,MB_OK | MB_ICONEXCLAMATION);
} }
#endif #endif
@ -231,26 +229,31 @@ void CCore::RenderLayers(bool OneShot)
Vector3 &ThisCam=GetCam(); Vector3 &ThisCam=GetCam();
int ListSize=Layer.size(); int ListSize=Layer.size();
int StartLayer,EndLayer; int StartLayer,EndLayer;
CLayer *ThisLayer;
if (OneShot) if (OneShot)
{ {
StartLayer=ActiveLayer; StartLayer=ActiveLayer;
EndLayer=StartLayer+1; EndLayer=StartLayer+1;
ThisLayer=CurrentLayer;
} }
else else
{ {
StartLayer=0; StartLayer=0;
EndLayer=ListSize; EndLayer=ListSize;
while (Layer[StartLayer]->IsUnique()) StartLayer++; while (Layer[StartLayer]->IsUnique()) StartLayer++;
ThisLayer=Layer[StartLayer];
} }
for (int i=StartLayer; i<EndLayer; i++) for (int i=StartLayer; i<EndLayer; i++)
{ {
if (Layer[i]->IsVisible()) if (ThisLayer->IsVisible())
{ {
Layer[i]->Render(this,ThisCam,Is3dFlag); ThisLayer->Render(this,ThisCam,Is3dFlag);
if (GridFlag) Layer[i]->RenderGrid(this,ThisCam,i==ActiveLayer); if (GridFlag) ThisLayer->RenderGrid(this,ThisCam,i==ActiveLayer);
} }
if (i!=EndLayer) ThisLayer=Layer[i+1];
} }
CurrentLayer->RenderCursor(this,ThisCam,Is3dFlag); CurrentLayer->RenderCursor(this,ThisCam,Is3dFlag);
// Get Cursor Pos // Get Cursor Pos

View file

@ -25,6 +25,9 @@
const Vector3 DefOfs(+0.5f,0,+4.0f); const Vector3 DefOfs(+0.5f,0,+4.0f);
int CElem::BlankID=-1;
int CElem::InvalidID=-1;
bool CElem::DefTexFlag=false;
/*****************************************************************************/ /*****************************************************************************/
// All Elems MUST run from 0,0 -> // All Elems MUST run from 0,0 ->
@ -67,7 +70,7 @@ CElem::CElem(int Width,int Height)
Type=ElemType2d; Type=ElemType2d;
TexXOfs=0; TexXOfs=0;
TexYOfs=0; TexYOfs=0;
CreateBlankTileGfx(); for (int i=0; i<ElemTypeMax; i++) DrawList[i]=BlankID;
} }
/*****************************************************************************/ /*****************************************************************************/
@ -92,8 +95,11 @@ GFName Path=Filename;
Ofs.Zero(); Ofs.Zero();
Create2dTexture(TexCache,Path.File(),Node); Create2dTexture(TexCache,Path.File(),Node);
Build2dDrawList(TexCache,DrawList[ElemType2d]); Build2dDrawList(TexCache,DrawList[ElemType2d]);
if (!ValidFlag) CreateInvalidTileGfx(); if (!ValidFlag)
{
Purge(); // Clear whatever is already there
for (int i=0; i<ElemTypeMax; i++) DrawList[i]=InvalidID;
}
} }
/*****************************************************************************/ /*****************************************************************************/
@ -122,7 +128,11 @@ GFName Path=Filename;
Build3dDrawList(TexCache,DrawList[ElemType3d]); Build3dDrawList(TexCache,DrawList[ElemType3d]);
Create2dTexture(TexCache,Path.File(),TexID); Create2dTexture(TexCache,Path.File(),TexID);
Build2dDrawList(TexCache,DrawList[ElemType2d]); Build2dDrawList(TexCache,DrawList[ElemType2d]);
if (!ValidFlag) CreateInvalidTileGfx(); if (!ValidFlag)
{
Purge(); // Clear whatever is already there
for (int i=0; i<ElemTypeMax; i++) DrawList[i]=InvalidID;
}
} }
/*****************************************************************************/ /*****************************************************************************/
@ -409,26 +419,6 @@ int ColFlags=Flags >> PC_TILE_FLAG_COLLISION_SHIFT;
glPopMatrix(); glPopMatrix();
} }
/*****************************************************************************/
void CElem::RenderInvalid()
{
float X0=0;
float X1=UnitWidth;
float Y0=0;
float Y1=UnitHeight;
glBindTexture(GL_TEXTURE_2D, 0);
glBegin(GL_LINES);
glColor4f(1,1,1,1);
glVertex3f( X0,Y0,0);
glVertex3f( X1,Y1,0);
glVertex3f( X1,Y0,0);
glVertex3f( X0,Y1,0);
glEnd();
}
/*****************************************************************************/ /*****************************************************************************/
void CElem::Purge() void CElem::Purge()
{ {
@ -439,18 +429,18 @@ void CElem::Purge()
/*****************************************************************************/ /*****************************************************************************/
// Only created for the tile browser, should NEVER appear in main view // Only created for the tile browser, should NEVER appear in main view
void CElem::CreateBlankTileGfx() void CElem::CreateDefaultTileGfx()
{ {
float X0=0; float X0=0;
float X1=UnitWidth; float X1=1.0f;
float Y0=0; float Y0=0;
float Y1=UnitHeight; float Y1=1.0f;
DefTexFlag=true;
Purge(); // Blank
for (int i=0; i<ElemTypeMax; i++) if (BlankID==-1)
{ {
DrawList[i]=glGenLists(1); BlankID=glGenLists(1);
glNewList(DrawList[i],GL_COMPILE); glNewList(BlankID,GL_COMPILE);
glBindTexture(GL_TEXTURE_2D, 0); glBindTexture(GL_TEXTURE_2D, 0);
glBegin(GL_LINES); glBegin(GL_LINES);
glColor4f(1,1,1,1); glColor4f(1,1,1,1);
@ -469,21 +459,11 @@ float Y1=UnitHeight;
glEnd(); glEnd();
glEndList(); glEndList();
} }
} // Invalid
if (InvalidID==-1)
/*****************************************************************************/
void CElem::CreateInvalidTileGfx()
{
float X0=0;
float X1=UnitWidth;
float Y0=0;
float Y1=UnitHeight;
Purge();
for (int i=0; i<ElemTypeMax; i++)
{ {
DrawList[i]=glGenLists(1); InvalidID=glGenLists(1);
glNewList(DrawList[i],GL_COMPILE); glNewList(InvalidID,GL_COMPILE);
glBindTexture(GL_TEXTURE_2D, 0); glBindTexture(GL_TEXTURE_2D, 0);
glBegin(GL_LINES); glBegin(GL_LINES);
glColor4f(1,1,1,1); glColor4f(1,1,1,1);
@ -498,6 +478,7 @@ float Y1=UnitHeight;
} }
} }
/*****************************************************************************/ /*****************************************************************************/
void CElem::RenderElem4Texture(sRGBData &RGBData) void CElem::RenderElem4Texture(sRGBData &RGBData)
{ {
@ -632,7 +613,7 @@ void CElemSet::Load(CCore *Core)
GFName FName=Filename; GFName FName=Filename;
GString Ext=FName.Ext(); GString Ext=FName.Ext();
Ext.Upper(); Ext.Upper();
if (!CElem::DefTexFlag) CElem::CreateDefaultTileGfx();
if (Ext=="GIN") if (Ext=="GIN")
Load3d(Core); Load3d(Core);
else else
@ -708,7 +689,7 @@ CPoint CElemSet::GetElemPos(int ID)
bool CElemSet::IsValid(int No) bool CElemSet::IsValid(int No)
{ {
int ListSize=ElemList.size(); int ListSize=ElemList.size();
if (No>ListSize) return(false); if (No>=ListSize) return(false);
return(ElemList[No].IsValid()); return(ElemList[No].IsValid());
} }
@ -880,8 +861,8 @@ bool CElemBank::IsValid(int Set,int Elem)
{ {
if (Set<0 || Elem<0) return(false); if (Set<0 || Elem<0) return(false);
if (Elem==0) return(true); if (Elem==0) return(true);
// if (Set>=SetList.size()) return(false); if (Set>=SetList.size()) return(false);
if (Set>SetList.size()) return(false); // if (Set>SetList.size()) return(false);
ASSERT(Set<SetList.size()); ASSERT(Set<SetList.size());
return(SetList[Set].IsValid(Elem)); return(SetList[Set].IsValid(Elem));
} }
@ -908,7 +889,7 @@ void CElemBank::RenderElem(int Set,int Elem,int Flags,bool Is3d)
} }
else else
{ {
SetList[0].RenderInvalid(); RenderInvalid();
} }
} }

View file

@ -51,7 +51,6 @@ public:
void Purge(); void Purge();
void Render(int Flags,bool Render3d); void Render(int Flags,bool Render3d);
void RenderInvalid();
int GetElemWidth() {return(ElemWidth);} int GetElemWidth() {return(ElemWidth);}
int GetElemHeight() {return(ElemHeight);} int GetElemHeight() {return(ElemHeight);}
@ -63,8 +62,10 @@ public:
int GetTexXOfs() {return(TexXOfs);} int GetTexXOfs() {return(TexXOfs);}
int GetTexYOfs() {return(TexYOfs);} int GetTexYOfs() {return(TexYOfs);}
void CreateBlankTileGfx(); static void CreateDefaultTileGfx();
void CreateInvalidTileGfx(); static int BlankID;
static int InvalidID;
static bool DefTexFlag;
std::vector<sTriFace> &GetTriList() {return(TriList);} std::vector<sTriFace> &GetTriList() {return(TriList);}
@ -93,7 +94,6 @@ protected:
float UnitWidth,UnitHeight; float UnitWidth,UnitHeight;
int ElemID; int ElemID;
u8 *ElemRGB; u8 *ElemRGB;
}; };
/*****************************************************************************/ /*****************************************************************************/
@ -119,7 +119,6 @@ const char *GetName() {return(Name);}
int GetBrowserWidth() {return(ElemBrowserWidth);} int GetBrowserWidth() {return(ElemBrowserWidth);}
void RenderElem(int Elem,int Flags,bool Render3d) {ElemList[Elem].Render(Flags,Render3d);} void RenderElem(int Elem,int Flags,bool Render3d) {ElemList[Elem].Render(Flags,Render3d);}
void RenderInvalid() {ElemList[0].RenderInvalid();}
CElem &GetElem(int No) {return(ElemList[No]);} CElem &GetElem(int No) {return(ElemList[No]);}
void Purge(); void Purge();
bool IsValid(int No); bool IsValid(int No);
@ -163,7 +162,7 @@ virtual void Save(CFile *File);
CElem &GetElem(int Set,int Elem) {return(SetList[Set].GetElem(Elem));} CElem &GetElem(int Set,int Elem) {return(SetList[Set].GetElem(Elem));}
bool IsValid(int Set,int Elem); bool IsValid(int Set,int Elem);
void RenderElem(int Set,int Elem,int Flags,bool Is3d); void RenderElem(int Set,int Elem,int Flags,bool Is3d);
void RenderInvalid() {glCallList(CElem::InvalidID);}
int GetSetCount() {return(SetList.size());} int GetSetCount() {return(SetList.size());}
const char *GetSetName(int Set) {return(SetList[Set].GetName());} const char *GetSetName(int Set) {return(SetList[Set].GetName());}

View file

@ -77,7 +77,7 @@ void CElemStore::RenderElem(int Set,int Elem,int Flags,bool Is3d)
} }
else else
{ {
SetList[0].RenderInvalid(); RenderInvalid();
} }
} }

View file

@ -134,6 +134,7 @@ CLayer *New;
File->Read(&ThisDef,sizeof(sLayerDef)); File->Read(&ThisDef,sizeof(sLayerDef));
New=NewLayer(ThisDef);//Type,SubType,0,0); New=NewLayer(ThisDef);//Type,SubType,0,0);
New->Load(File,Version);
} }
return(New); return(New);
} }

View file

@ -52,7 +52,7 @@ static int GetLayerIdx(int Type,int SubType);
static CLayer *NewLayer(sLayerDef &Def); static CLayer *NewLayer(sLayerDef &Def);
static CLayer *LoadLayer(CFile *File,int Version); static CLayer *LoadLayer(CFile *File,int Version);
char *GetName() {TRACE1("%i\n",TableIdx);return(InfoTable[TableIdx].Name);} char *GetName() {return(InfoTable[TableIdx].Name);}
bool CanDelete() {return(InfoTable[TableIdx].DeleteFlag);} bool CanDelete() {return(InfoTable[TableIdx].DeleteFlag);}
float GetScaleFactor() {return(InfoTable[TableIdx].ScaleFactor);} float GetScaleFactor() {return(InfoTable[TableIdx].ScaleFactor);}
bool GetRender3dFlag() {return(InfoTable[TableIdx].Render3dFlag);} bool GetRender3dFlag() {return(InfoTable[TableIdx].Render3dFlag);}

View file

@ -80,6 +80,7 @@ void CLayerCollision::Load(CFile *File,int Version)
void CLayerCollision::Save(CFile *File) void CLayerCollision::Save(CFile *File)
{ {
// Always Save current version // Always Save current version
File->Write(&Mode,sizeof(MouseMode));
Map.Save(File); Map.Save(File);
} }

View file

@ -70,7 +70,6 @@ void CLayerShade::Load(CFile *File,int Version)
} }
InitLayer(LayerDef); InitLayer(LayerDef);
File->Read(&Count,sizeof(int)); File->Read(&Count,sizeof(int));
if (Count<2) Count=2;
for (int i=0; i<LAYER_SHADE_RGB_MAX; i++) for (int i=0; i<LAYER_SHADE_RGB_MAX; i++)
{ {
File->Read(&Pos[i],sizeof(int)); File->Read(&Pos[i],sizeof(int));

View file

@ -116,7 +116,6 @@ CElemBank *IconBank=Core->GetIconBank();
glTranslatef(-ScrOfsX,ScrOfsY,0); // Bring to top left corner glTranslatef(-ScrOfsX,ScrOfsY,0); // Bring to top left corner
int ListSize=ThisThing.XY.size(); int ListSize=ThisThing.XY.size();
TRACE1("%i\n",ListSize);
for (int i=0;i<ListSize; i++) for (int i=0;i<ListSize; i++)
{ {
// Render Thing // Render Thing

View file

@ -28,9 +28,11 @@
/*****************************************************************************/ /*****************************************************************************/
CLayerTile::CLayerTile(sLayerDef &Def) CLayerTile::CLayerTile(sLayerDef &Def)
{ {
TileBank=0;
InitLayer(Def); InitLayer(Def);
} }
/*****************************************************************************/ /*****************************************************************************/
CLayerTile::~CLayerTile() CLayerTile::~CLayerTile()
{ {
@ -47,10 +49,11 @@ void CLayerTile::InitLayer(sLayerDef &Def)
CLayer::InitLayer(Def); CLayer::InitLayer(Def);
Mode=MouseModePaint; Mode=MouseModePaint;
if (LayerDef.SubType==LAYER_SUBTYPE_ACTION) if (LayerDef.SubType==LAYER_SUBTYPE_ACTION && !TileBank)
{
TileBank=new CTileBank; TileBank=new CTileBank;
else }
TileBank=0;
SubView=TileBank; SubView=TileBank;
if (!GetResizeFlag()) if (!GetResizeFlag())
@ -67,6 +70,7 @@ void CLayerTile::Load(CFile *File,int Version)
{ {
if (Version<=5) if (Version<=5)
{ {
TileBank=0;
LayerDef.Type=LAYER_TYPE_TILE; LayerDef.Type=LAYER_TYPE_TILE;
BOOL DB; BOOL DB;
float DF; float DF;
@ -83,13 +87,6 @@ void CLayerTile::Load(CFile *File,int Version)
} }
InitLayer(LayerDef); InitLayer(LayerDef);
Map.Load(File,Version); Map.Load(File,Version);
// if (LayerDef.SubType==LAYER_SUBTYPE_ACTION)
// TileBank=new CTileBank;
// else
// TileBank=0;
// SubView=TileBank;
} }
/*****************************************************************************/ /*****************************************************************************/

View file

@ -109,6 +109,14 @@ SOURCE=.\Layer.h
# End Source File # End Source File
# Begin Source File # Begin Source File
SOURCE=.\LayerActor.cpp
# End Source File
# Begin Source File
SOURCE=.\LayerActor.h
# End Source File
# Begin Source File
SOURCE=.\LayerCollision.cpp SOURCE=.\LayerCollision.cpp
# End Source File # End Source File
# Begin Source File # Begin Source File
@ -121,6 +129,22 @@ SOURCE=.\LayerDef.h
# End Source File # End Source File
# Begin Source File # Begin Source File
SOURCE=.\LayerItem.cpp
# End Source File
# Begin Source File
SOURCE=.\LayerItem.h
# End Source File
# Begin Source File
SOURCE=.\LayerPlatform.cpp
# End Source File
# Begin Source File
SOURCE=.\LayerPlatform.h
# End Source File
# Begin Source File
SOURCE=.\LayerShade.cpp SOURCE=.\LayerShade.cpp
# End Source File # End Source File
# Begin Source File # Begin Source File

View file

@ -127,7 +127,9 @@ float Scale=CamPos.z/(float)BrowserWidth/2.0;
glTranslatef(-CamPos.x+XPos,CamPos.y-YPos,0); glTranslatef(-CamPos.x+XPos,CamPos.y-YPos,0);
glColor3f(1,1,1); glColor3f(1,1,1);
ThisSet.RenderElem(TileID,0,Is3d);
RenderElem(CurrentSet,TileID,0,Is3d);
// Selection // Selection
ThisElem.Tile=TileID; ThisElem.Tile=TileID;
SelFlag=0; SelFlag=0;
@ -158,6 +160,7 @@ float Scale=CamPos.z/(float)BrowserWidth/2.0;
glEnd(); glEnd();
} }
TileID++; TileID++;
} }
glPopMatrix(); glPopMatrix();