This commit is contained in:
Daveo 2001-04-05 14:20:56 +00:00
parent b08c0884df
commit cb92498e70
13 changed files with 253 additions and 55 deletions

View file

@ -44,7 +44,7 @@ CCore::CCore()
GridFlag=true; GridFlag=true;
Is3dFlag=true; Is3dFlag=true;
CurrentView=NULL; CurrentView=NULL;
CursorPos.x=CursorPos.y=0; CursorPos.x=CursorPos.y=-1;
CurrentLayer=0; CurrentLayer=0;
GString Filename; GString Filename;
@ -53,6 +53,7 @@ GString Filename;
GetExecPath(Filename); GetExecPath(Filename);
Filename+=theApp.GetConfigStr("FileLocation","Iconz"); Filename+=theApp.GetConfigStr("FileLocation","Iconz");
IconBank->AddSet(Filename); IconBank->AddSet(Filename);
RenderTGAFlag=false;
} }
/*****************************************************************************/ /*****************************************************************************/
@ -104,6 +105,7 @@ void CCore::Load(CFile *File)
int Version,i; int Version,i;
BOOL F; BOOL F;
Vector3 DuffVector; Vector3 DuffVector;
File->Read(&Version,sizeof(int)); File->Read(&Version,sizeof(int));
if (Version>100000) Version=1; // Check fix for changing version to int from float if (Version>100000) Version=1; // Check fix for changing version to int from float
#ifndef _DEBUG #ifndef _DEBUG
@ -155,8 +157,8 @@ int MapHeight=ActionLayer->GetHeight();
{ {
Layer[i]->CheckLayerSize(MapWidth,MapHeight); Layer[i]->CheckLayerSize(MapWidth,MapHeight);
} }
} }
/*****************************************************************************/ /*****************************************************************************/
void CCore::Validate(int Type) void CCore::Validate(int Type)
{ {
@ -219,11 +221,10 @@ Vector3 &ThisCam=GetCam();
return; return;
} }
if (IconBank->NeedLoad()) IconBank->LoadAllSets(this); if (IconBank->NeedLoad()) IconBank->LoadAllSets(this);
if (RenderTGAFlag) RenderToTga();
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear Screen glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear Screen
RenderLayers(IsSubView() || CurrentLayer->IsUnique()); RenderLayers(IsSubView() || CurrentLayer->IsUnique());
} }
/*****************************************************************************/ /*****************************************************************************/
@ -835,3 +836,18 @@ CExport Exp(ExportName);
} }
/*****************************************************************************/
void CCore::RenderToTga(char *Filename)
{
TGAFilename=Filename;
RenderTGAFlag=true;
RedrawView();
}
/*****************************************************************************/
void CCore::RenderToTga()
{
RenderTGAFlag=false;
ActionLayer->Render4TGA(TGAFilename);
}

View file

@ -45,6 +45,8 @@ public:
void RenderLayers(bool OneShot=false); void RenderLayers(bool OneShot=false);
void RenderNumber(int No); void RenderNumber(int No);
void Export(char *Filename); void Export(char *Filename);
void RenderToTga(char *Filename);
void RenderToTga();
// View Stuff // View Stuff
void SetView(CMapEditView *View) {CurrentView=View;} void SetView(CMapEditView *View) {CurrentView=View;}
@ -139,6 +141,8 @@ private:
bool Is3dFlag; bool Is3dFlag;
CElemBank *IconBank; CElemBank *IconBank;
bool RenderTGAFlag;
GString TGAFilename;
}; };

View file

@ -72,6 +72,7 @@ virtual int GetSubType() {return(LayerDef.SubType);}
virtual void Render(CCore *Core,Vector3 &CamPos,bool Is3d){}; virtual void Render(CCore *Core,Vector3 &CamPos,bool Is3d){};
virtual void Render4TGA(const char *Filename){}
virtual void RenderGrid(CCore *Core,Vector3 &CamPos,bool Active); virtual void RenderGrid(CCore *Core,Vector3 &CamPos,bool Active);
virtual void RenderSelection(CCore *Core,Vector3 &ThisCam){}; virtual void RenderSelection(CCore *Core,Vector3 &ThisCam){};
virtual void RenderCursor(CCore *Core,Vector3 &CamPos,bool Is3d){}; virtual void RenderCursor(CCore *Core,Vector3 &CamPos,bool Is3d){};

View file

@ -69,6 +69,11 @@ int i,ListSize;
File->Read(&ThisThing.Data,sizeof(sLayerThingData)); File->Read(&ThisThing.Data,sizeof(sLayerThingData));
} }
LoadThingNames(File,Version); LoadThingNames(File,Version);
// CurrentDefThing=-1;
// CurrentThing=-1;
// CurrentThingPoint=-1;
} }
/*****************************************************************************/ /*****************************************************************************/
@ -79,7 +84,8 @@ int i,ListSize;
ThisThing.XY.resize(ListSize); ThisThing.XY.resize(ListSize);
for (i=0 ;i<ListSize; i++) for (i=0 ;i<ListSize; i++)
{ {
File->Read(&ThisThing.XY[i],sizeof(CPoint)); CPoint &ThisPoint=ThisThing.XY[i];
File->Read(&ThisPoint,sizeof(CPoint));
} }
} }
@ -131,8 +137,9 @@ void CLayerThing::SaveThing(CFile *File,sLayerThing &ThisThing)
int i,ListSize=ThisThing.XY.size(); int i,ListSize=ThisThing.XY.size();
File->Write(&ListSize,sizeof(int)); File->Write(&ListSize,sizeof(int));
for (i=0 ;i<ListSize; i++) for (i=0 ;i<ListSize; i++)
{ {
File->Write(&ThisThing.XY[i],sizeof(CPoint)); CPoint &ThisPoint=ThisThing.XY[i];
File->Write(&ThisPoint,sizeof(CPoint));
} }
} }
@ -327,12 +334,14 @@ int i,ListSize;
ListSize=ThisThing.XY.size(); ListSize=ThisThing.XY.size();
for (i=0; i<ListSize; i++) for (i=0; i<ListSize; i++)
{ {
CPoint &ThisPoint=ThisThing.XY[i];
CString Str; CString Str;
Str.Format("%i: %i, %i",i,ThisThing.XY[i].x,ThisThing.XY[i].y); Str.Format("%i: %i, %i",i,ThisPoint.x,ThisPoint.y);
List.AddString(Str); List.AddString(Str);
} }
} }
List.SetCurSel(CurrentThingPoint); List.SetCurSel(CurrentThingPoint);
} }
/*****************************************************************************/ /*****************************************************************************/

View file

@ -341,6 +341,135 @@ float Y1=Rect.bottom-1;
} }
/*****************************************************************************/
#define TGA_TILE_SIZE 8
void CLayerTile::Render4TGA(const char *Filename)
{
u8 *Buffer;
int MapW=Map.GetWidth();
int MapH=Map.GetHeight();
int PixW=MapW*8;
int PixH=MapH*8;
Buffer=(u8*)malloc(PixW*PixH*3);
ASSERT(Buffer);
memset(Buffer,0,PixW*PixH*3);
u8 *Ptr=Buffer;
for (int Y=0; Y<MapH; Y++)
{
Ptr=&Buffer[((MapH-1)-Y)*PixW*TGA_TILE_SIZE*3];
for (int X=0; X<MapW; X++)
{
sMapElem &Elem=Map.Get(X,Y);
if (Elem.Tile!=0)
{
WriteTile2Buffer(Elem,Ptr,X,Y,PixW,PixH);
}
Ptr+=(TGA_TILE_SIZE*3);
}
}
SaveTGA(Filename,PixW,PixH,Buffer,true);
free(Buffer);
}
/*****************************************************************************/
void ProcessRGB(u8 *Src,int SrcW,int SrcH,u8 *Dst,int DstW,int DstH)
{
for (int y=0;y<DstH;y++)
{
for (int x=0;x<DstW;x++)
{
float XFrac=float(x)/float(DstW);
float YFrac=float(y)/float(DstH);
int FromX=float(SrcW)*XFrac;
int FromY=float(SrcH)*YFrac;
u8 R=Src[((FromX+(FromY*SrcW))*3)+0];
u8 G=Src[((FromX+(FromY*SrcW))*3)+1];
u8 B=Src[((FromX+(FromY*SrcW))*3)+2];
if (R==255 && G==0 && B==255)
{
R=G=B=0;
}
Dst[((x+(y*DstW))*3)+0]=R;
Dst[((x+(y*DstW))*3)+1]=G;
Dst[((x+(y*DstW))*3)+2]=B;
}
}
}
void FlipX(u8 *_Src,u8 *_Dst,int W,int H)
{
int RGBW=W*3;
u8 Tmp[TGA_TILE_SIZE*TGA_TILE_SIZE*3];
u8 *Dst=Tmp;
for (int Y=0; Y<H; Y++)
{
for (int X=0; X<W; X++)
{
int PX=((W-1)-X);
u8 *Src=&_Src[(PX*3)+Y*RGBW];
*Dst++=*Src++;
*Dst++=*Src++;
*Dst++=*Src++;
}
}
memcpy(_Dst,Tmp,W*H*3);
}
/*****************************************************************************/
void FlipY(u8 *_Src,u8 *_Dst,int W,int H)
{
int RGBW=W*3;
u8 Tmp[TGA_TILE_SIZE*TGA_TILE_SIZE*3];
for (int Y=0; Y<H; Y++)
{
u8 *Src=&_Src[(Y)*RGBW];
u8 *Dst= &Tmp[((H-1)-Y)*RGBW];
memcpy(Dst,Src,RGBW);
}
memcpy(_Dst,Tmp,W*H*3);
}
/*****************************************************************************/
void CLayerTile::WriteTile2Buffer(sMapElem &Elem,u8 *Out,int XPos,int YPos,int PixW,int PixH)
{
u8 LilBlock[TGA_TILE_SIZE*TGA_TILE_SIZE*3];
CElem &Tile=TileBank->GetElem(Elem.Set,Elem.Tile);
int TileW=Tile.GetElemWidth();
int TileH=Tile.GetElemHeight();
if (TileW>16 || TileH>16 || TileW<0 || TileH<0)
{
TRACE2("%i %i\n",TileW,TileH);
return;
}
ProcessRGB(Tile.GetElemRGB(),TileW,TileH,LilBlock,TGA_TILE_SIZE,TGA_TILE_SIZE);
if (Elem.Flags & PC_TILE_FLAG_MIRROR_X) FlipX(LilBlock,LilBlock,TGA_TILE_SIZE,TGA_TILE_SIZE);
if (Elem.Flags & PC_TILE_FLAG_MIRROR_Y) FlipY(LilBlock,LilBlock,TGA_TILE_SIZE,TGA_TILE_SIZE);
u8 *RGB=LilBlock;
for (int Y=0; Y<TGA_TILE_SIZE; Y++)
{
u8 *NextOut=Out+(PixW*3);
for (int X=0; X<TGA_TILE_SIZE; X++)
{
*Out++=*RGB++;
*Out++=*RGB++;
*Out++=*RGB++;
}
Out=NextOut;
}
}
/*****************************************************************************/ /*****************************************************************************/
/*** Gui *********************************************************************/ /*** Gui *********************************************************************/
/*****************************************************************************/ /*****************************************************************************/

View file

@ -34,6 +34,8 @@ public:
virtual void Render(CCore *Core,Vector3 &CamPos,bool Is3d); virtual void Render(CCore *Core,Vector3 &CamPos,bool Is3d);
virtual void RenderSelection(CCore *Core,Vector3 &ThisCam); virtual void RenderSelection(CCore *Core,Vector3 &ThisCam);
void RenderCursor(CCore *Core,Vector3 &CamPos,bool Is3d); void RenderCursor(CCore *Core,Vector3 &CamPos,bool Is3d);
void Render4TGA(const char *Filename);
void WriteTile2Buffer(sMapElem &Elem,u8 *Buffer,int X,int Y,int PixW,int PixH);
virtual void GUIInit(CCore *Core); virtual void GUIInit(CCore *Core);
virtual void GUIKill(CCore *Core); virtual void GUIKill(CCore *Core);

View file

@ -2,7 +2,7 @@
[General Info] [General Info]
Version=1 Version=1
LastClass=CGUILayerItem LastClass=CMapEditDoc
LastTemplate=CDialog LastTemplate=CDialog
NewFileInclude1=#include "stdafx.h" NewFileInclude1=#include "stdafx.h"
NewFileInclude2=#include "mapedit.h" NewFileInclude2=#include "mapedit.h"
@ -29,24 +29,24 @@ Class17=CMapEditDoc
Class18=CMapEditView Class18=CMapEditView
ResourceCount=18 ResourceCount=18
Resource1=IDD_ABOUTBOX (English (U.S.)) Resource1=IDD_RESIZE
Resource2=IDR_MAPEDITYPE (English (U.S.)) Resource2=IDR_MAPEDITYPE (English (U.S.))
Resource3=IDD_LAYER_COLLISION Resource3=IDR_TOOLBAR (English (U.S.))
Resource4=IDD_MULTIBAR (English (U.S.)) Resource4=IDD_NEWMAP
Resource5=IDD_LAYER_LIST Resource5=IDD_ADDLAYER
Resource6=IDD_ADDLAYER Resource6=IDD_LAYER_SHADE
Resource7=IDR_TOOLBAR (English (U.S.)) Resource7=IDD_MULTIBAR (English (U.S.))
Resource8=xxxx Resource8=xxxx
Resource9=IDD_LAYER_SHADE Resource9=IDD_LAYER_ACTOR
Resource10=IDD_LAYER_ACTOR Resource10=IDD_ABOUTBOX (English (U.S.))
Resource11=IDD_TOOLBAR Resource11=IDD_ELEMLIST
Resource12=IDD_RESIZE Resource12=IDD_TILEBANK
Resource13=IDR_MAINFRAME (English (U.S.)) Resource13=IDD_LAYER_LIST
Resource14=IDD_NEWMAP Resource14=IDD_TOOLBAR
Resource15=IDD_LAYER_ACTOR2 Resource15=IDD_LAYER_ACTOR2
Class19=CGUILayerActor Class19=CGUILayerActor
Resource16=IDD_TILEBANK Resource16=IDD_LAYER_COLLISION
Resource17=IDD_ELEMLIST Resource17=IDR_MAINFRAME (English (U.S.))
Class20=CGUILayerItem Class20=CGUILayerItem
Resource18=IDD_LAYER_ITEM Resource18=IDD_LAYER_ITEM
@ -155,6 +155,9 @@ Type=0
BaseClass=CDocument BaseClass=CDocument
HeaderFile=MapEditDoc.h HeaderFile=MapEditDoc.h
ImplementationFile=MapEditDoc.cpp ImplementationFile=MapEditDoc.cpp
Filter=N
VirtualFilter=DC
LastObject=ID_RENDER_TO_TGA
[CLS:CMapEditView] [CLS:CMapEditView]
Type=0 Type=0
@ -263,31 +266,32 @@ Command3=ID_FILE_CLOSE
Command4=ID_FILE_SAVE Command4=ID_FILE_SAVE
Command5=ID_FILE_SAVE_AS Command5=ID_FILE_SAVE_AS
Command6=ID_EXPORT Command6=ID_EXPORT
Command7=ID_FILE_MRU_FILE1 Command7=ID_RENDER_TO_TGA
Command8=ID_APP_EXIT Command8=ID_FILE_MRU_FILE1
Command9=ID_EDIT_UNDO Command9=ID_APP_EXIT
Command10=ID_EDIT_CUT Command10=ID_EDIT_UNDO
Command11=ID_EDIT_COPY Command11=ID_EDIT_CUT
Command12=ID_EDIT_PASTE Command12=ID_EDIT_COPY
Command13=ID_RESET_VIEW Command13=ID_EDIT_PASTE
Command14=ID_VIEW_TOOLBAR Command14=ID_RESET_VIEW
Command15=ID_VIEW_STATUS_BAR Command15=ID_VIEW_TOOLBAR
Command16=ID_MAP_SETSIZE Command16=ID_VIEW_STATUS_BAR
Command17=ID_TOGGLE_GRID Command17=ID_MAP_SETSIZE
Command18=ID_ZOOM_IN Command18=ID_TOGGLE_GRID
Command19=ID_ZOOM_OUT Command19=ID_ZOOM_IN
Command20=ID_MIRRORX Command20=ID_ZOOM_OUT
Command21=ID_MIRRORY Command21=ID_MIRRORX
Command22=ID_ACTIVEBRUSH_LEFT Command22=ID_MIRRORY
Command23=ID_ACTIVEBRUSH_RIGHT Command23=ID_ACTIVEBRUSH_LEFT
Command24=ID_TOGGLE_SUBVIEW Command24=ID_ACTIVEBRUSH_RIGHT
Command25=ID_2D_3D_TOGGLE Command25=ID_TOGGLE_SUBVIEW
Command26=ID_WINDOW_NEW Command26=ID_2D_3D_TOGGLE
Command27=ID_WINDOW_CASCADE Command27=ID_WINDOW_NEW
Command28=ID_WINDOW_TILE_HORZ Command28=ID_WINDOW_CASCADE
Command29=ID_WINDOW_ARRANGE Command29=ID_WINDOW_TILE_HORZ
Command30=ID_APP_ABOUT Command30=ID_WINDOW_ARRANGE
CommandCount=30 Command31=ID_APP_ABOUT
CommandCount=31
[ACL:IDR_MAINFRAME (English (U.S.))] [ACL:IDR_MAINFRAME (English (U.S.))]
Type=1 Type=1
@ -444,5 +448,5 @@ ImplementationFile=GUILayerItem.cpp
BaseClass=CDialog BaseClass=CDialog
Filter=D Filter=D
VirtualFilter=dWC VirtualFilter=dWC
LastObject=IDC_ITEM_LIST LastObject=ID_MIRRORX

View file

@ -94,6 +94,8 @@ BEGIN
MENUITEM SEPARATOR MENUITEM SEPARATOR
MENUITEM "Export ", ID_EXPORT MENUITEM "Export ", ID_EXPORT
MENUITEM SEPARATOR MENUITEM SEPARATOR
MENUITEM "Create Map TGA", ID_RENDER_TO_TGA
MENUITEM SEPARATOR
MENUITEM "Recent File", ID_FILE_MRU_FILE1, GRAYED MENUITEM "Recent File", ID_FILE_MRU_FILE1, GRAYED
MENUITEM SEPARATOR MENUITEM SEPARATOR
MENUITEM "E&xit", ID_APP_EXIT MENUITEM "E&xit", ID_APP_EXIT

View file

@ -37,6 +37,7 @@ BEGIN_MESSAGE_MAP(CMapEditDoc, CDocument)
ON_COMMAND(ID_RESET_VIEW, OnResetView) ON_COMMAND(ID_RESET_VIEW, OnResetView)
ON_COMMAND(ID_TOOLBAR_TILEPALETTE, OnToggleSubView) ON_COMMAND(ID_TOOLBAR_TILEPALETTE, OnToggleSubView)
ON_COMMAND(ID_TOGGLE_GRID, OnToggleGrid) ON_COMMAND(ID_TOGGLE_GRID, OnToggleGrid)
ON_COMMAND(ID_RENDER_TO_TGA, OnRenderToTga)
//}}AFX_MSG_MAP //}}AFX_MSG_MAP
END_MESSAGE_MAP() END_MESSAGE_MAP()
@ -213,6 +214,19 @@ char Filename[256];
Core.Export(Filename); Core.Export(Filename);
} }
/*********************************************************************************/
void CMapEditDoc::OnRenderToTga()
{
char BASED_CODE Filter[]= "TGA File (*.TGA)|*.TGA||";
CFileDialog Dlg(FALSE,"*.TGA",NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,Filter);
if (Dlg.DoModal()!=IDOK) return;
char Filename[256];
sprintf(Filename,"%s",Dlg.GetPathName());
Core.RenderToTga(Filename);
}
/*********************************************************************************/ /*********************************************************************************/
/*** Tilebank Functions **********************************************************/ /*** Tilebank Functions **********************************************************/
/*********************************************************************************/ /*********************************************************************************/
@ -279,3 +293,4 @@ void CMapEditDoc::FocusView()
} }
/*********************************************************************************/ /*********************************************************************************/

View file

@ -80,6 +80,7 @@ protected:
afx_msg void OnEditPaste(); afx_msg void OnEditPaste();
afx_msg void On2d3dToggle(); afx_msg void On2d3dToggle();
afx_msg void OnResetView(); afx_msg void OnResetView();
afx_msg void OnRenderToTga();
//}}AFX_MSG //}}AFX_MSG
DECLARE_MESSAGE_MAP() DECLARE_MESSAGE_MAP()

View file

@ -100,6 +100,7 @@
#define ID_ZOOM_IN 32797 #define ID_ZOOM_IN 32797
#define ID_ZOOM_OUT 32798 #define ID_ZOOM_OUT 32798
#define ID_RESET_VIEW 32799 #define ID_RESET_VIEW 32799
#define ID_RENDER_TO_TGA 32800
#define ID_INDICATOR_CURSORXY 59142 #define ID_INDICATOR_CURSORXY 59142
// Next default values for new objects // Next default values for new objects
@ -108,7 +109,7 @@
#ifndef APSTUDIO_READONLY_SYMBOLS #ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_3D_CONTROLS 1 #define _APS_3D_CONTROLS 1
#define _APS_NEXT_RESOURCE_VALUE 180 #define _APS_NEXT_RESOURCE_VALUE 180
#define _APS_NEXT_COMMAND_VALUE 32800 #define _APS_NEXT_COMMAND_VALUE 32801
#define _APS_NEXT_CONTROL_VALUE 1103 #define _APS_NEXT_CONTROL_VALUE 1103
#define _APS_NEXT_SYMED_VALUE 101 #define _APS_NEXT_SYMED_VALUE 101
#endif #endif

View file

@ -163,9 +163,7 @@ struct sTgaHdr
char imagedesc; // 16 char imagedesc; // 16
}; };
void SaveTGA(const char *Filename,int W,int H,u8 *Data,bool IsBGR)
void SaveTGA(char *Filename,int W,int H,u8 *Data)
{ {
FILE *File; FILE *File;
sTgaHdr FileHdr; sTgaHdr FileHdr;
@ -180,8 +178,22 @@ sTgaHdr FileHdr;
FileHdr.depth=24; FileHdr.depth=24;
fwrite(&FileHdr,sizeof(sTgaHdr),1,File); fwrite(&FileHdr,sizeof(sTgaHdr),1,File);
if (!IsBGR)
{
fwrite(Data,W*H*3,1,File);
}
else
{
int Size=W*H;
for (int i=0; i<Size;i++)
{
fwrite(&Data[2],1,1,File);
fwrite(&Data[1],1,1,File);
fwrite(&Data[0],1,1,File);
Data+=3;
fwrite(Data,W*H*3,1,File); }
}
fclose(File); fclose(File);
} }

View file

@ -44,7 +44,9 @@ void BuildGLQuad(float XMin,float XMax,float YMin,float YMax,float Z);
CPoint IDToPoint(int ID,int Width); CPoint IDToPoint(int ID,int Width);
int PointToID(CPoint &Pnt,int Width); int PointToID(CPoint &Pnt,int Width);
void SaveTGA(char *Filename,int W,int H,u8 *Data); //void SaveTGA(const char *Filename,int W,int H,u8 *Data);
void SaveTGA(const char *Filename,int W,int H,u8 *Data,bool IsBGR=false);
void SaveBmp(char *Filename,int Width,int Height,RGBQUAD *Pal,u8 *Image); void SaveBmp(char *Filename,int Width,int Height,RGBQUAD *Pal,u8 *Image);
void BGR2RGB(int W,int H,u8 *Data); void BGR2RGB(int W,int H,u8 *Data);