This commit is contained in:
Daveo 2001-08-02 18:45:20 +00:00
parent 98ff69a23e
commit 5a8d2b0d90
11 changed files with 267 additions and 198 deletions

View File

@ -53,6 +53,7 @@ enum CmdMsg
// Misc
CmdMsg_Report, // 35
CmdMsg_Undo, // 36
CmdMsg_Filter, // 37
};
#endif

View File

@ -30,10 +30,15 @@ void CGUILayerRGB::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CGUILayerRGB)
DDX_Control(pDX, IDC_LAYERSHADE_SHADEBSPIN, m_BSpin);
DDX_Control(pDX, IDC_LAYERSHADE_SHADEB, m_B);
DDX_Control(pDX, IDC_LAYERSHADE_SHADEGSPIN, m_GSpin);
DDX_Control(pDX, IDC_LAYERSHADE_SHADEG, m_G);
DDX_Control(pDX, IDC_LAYERSHADE_SHADERSPIN, m_RSpin);
DDX_Control(pDX, IDC_LAYERSHADE_SHADER, m_R);
DDX_Control(pDX, IDC_LAYERSHADE_RATELIST, m_RateList);
DDX_Control(pDX, IDC_LAYERSHADE_BRUSHLIST, m_BrushList);
DDX_Control(pDX, IDC_LAYERSHADE_MODELIST, m_ModeList);
DDX_Control(pDX, IDC_LAYERSHADE_SHADE, m_Shade);
//}}AFX_DATA_MAP
}
@ -41,14 +46,18 @@ void CGUILayerRGB::DoDataExchange(CDataExchange* pDX)
BEGIN_MESSAGE_MAP(CGUILayerRGB, CDialog)
//{{AFX_MSG_MAP(CGUILayerRGB)
ON_CBN_SELCHANGE(IDC_LAYERSHADE_MODELIST, OnParamChange)
ON_BN_CLICKED(IDC_LAYERSHADE_TRIFILTER, OnLayershadeTrifilter)
ON_BN_CLICKED(IDC_LAYERSHADE_BIFILTER, OnLayershadeBifilter)
ON_CBN_SELCHANGE(IDC_LAYERSHADE_BRUSHLIST, OnParamChange)
ON_CBN_SELCHANGE(IDC_LAYERSHADE_RATELIST, OnParamChange)
ON_EN_CHANGE(IDC_LAYERSHADE_SHADER, OnParamChange)
ON_EN_CHANGE(IDC_LAYERSHADE_SHADEG, OnParamChange)
ON_EN_CHANGE(IDC_LAYERSHADE_SHADEB, OnParamChange)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
/*
void CGUILayerRGB::SetVal(CEdit &Dlg,int &Val,int Min,int Max)
{
CString Str;
@ -116,6 +125,10 @@ int iR,iG,iB;
B=iB;
}
*/
/////////////////////////////////////////////////////////////////////////////
void CGUILayerRGB::OnParamChange() {if (CallbackFlag) theApp.GetCurrent()->GUIChanged();}
void CGUILayerRGB::OnLayershadeBifilter() {theApp.GetCurrent()->Command(CmdMsg_Filter,0);}
void CGUILayerRGB::OnLayershadeTrifilter() {theApp.GetCurrent()->Command(CmdMsg_Filter,1);}

View File

@ -22,10 +22,15 @@ public:
// Dialog Data
//{{AFX_DATA(CGUILayerRGB)
enum { IDD = IDD_LAYER_RGB };
CSpinButtonCtrl m_BSpin;
CEdit m_B;
CSpinButtonCtrl m_GSpin;
CEdit m_G;
CSpinButtonCtrl m_RSpin;
CEdit m_R;
CComboBox m_RateList;
CComboBox m_BrushList;
CComboBox m_ModeList;
CButton m_Shade;
//}}AFX_DATA
@ -41,10 +46,10 @@ public:
void EnableCallback() {CallbackFlag=true;}
void DisableCallback() {CallbackFlag=false;}
// void SetVal(CEdit &Dlg,int &Val,int Min=-1,int Max=-1);
// void GetVal(CEdit &Dlg,int &Val,int Min=-1,int Max=-1);
// void SetRGB(u8 &R,u8 &G,u8 &B);
// void GetRGB(u8 &R,u8 &G,u8 &B);
void SetVal(CEdit &Dlg,int &Val,int Min=-1,int Max=-1);
void GetVal(CEdit &Dlg,int &Val,int Min=-1,int Max=-1);
void SetRGB(u8 &R,u8 &G,u8 &B);
void GetRGB(u8 &R,u8 &G,u8 &B);
protected:
bool CallbackFlag;
@ -52,6 +57,9 @@ protected:
// Generated message map functions
//{{AFX_MSG(CGUILayerRGB)
afx_msg void OnParamChange();
afx_msg void OnLayershadeTrifilter();
afx_msg void OnLayershadeStrifilter();
afx_msg void OnLayershadeBifilter();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};

View File

@ -40,13 +40,12 @@ CLayerRGB::CLayerRGB(sLayerDef &Def)
{
InitLayer(Def);
CurrentRGB.R=128;
CurrentRGB.G=128;
CurrentRGB.B=128;
ShadeRGB.R=224;
ShadeRGB.G=224;
ShadeRGB.B=224;
CurrentMode=0;
CurrentBrush=0;
CurrentRate=0;
ShadeFlag=false;
LastCursPos.x=-1;
LastCursPos.y=-1;
CurrentUndo=0;
@ -71,10 +70,10 @@ void CLayerRGB::Load(CFile *File,int Version)
{
InitLayer(LayerDef);
File->Read(&CurrentRGB,sizeof(sRGBElem));
File->Read(&ShadeRGB,sizeof(sRGBElem));
File->Read(&CurrentBrush,sizeof(int));
File->Read(&CurrentMode,sizeof(int));
File->Read(&ShadeFlag,sizeof(bool));
File->Read(&SpareFlag,sizeof(bool));
// Read Map
File->Read(&MapWidth,sizeof(int));
@ -95,10 +94,10 @@ void CLayerRGB::Load(CFile *File,int Version)
void CLayerRGB::Save(CFile *File)
{
// Always Save current version
File->Write(&CurrentRGB,sizeof(sRGBElem));
File->Write(&ShadeRGB,sizeof(sRGBElem));
File->Write(&CurrentBrush,sizeof(int));
File->Write(&CurrentMode,sizeof(int));
File->Write(&ShadeFlag,sizeof(bool));
File->Write(&SpareFlag,sizeof(bool));
// Read Map
File->Write(&MapWidth,sizeof(int));
@ -192,6 +191,12 @@ bool Ret=false;
case CmdMsg_Undo:
Undo();
break;
case CmdMsg_Filter:
CreateUndo();
if (Param0==0) BiFilter(Core);
if (Param0==1) TriFilter(Core);
if (Param0==2) STriFilter(Core);
break;
default:
break;
}
@ -418,6 +423,9 @@ int ListSize,i;
GUIRGB.m_RateList.AddString(Str);
}
GUIRGB.m_RSpin.SetRange(0,255);
GUIRGB.m_GSpin.SetRange(0,255);
GUIRGB.m_BSpin.SetRange(0,255);
GUIRGB.EnableCallback();
Core->RedrawView();
}
@ -438,7 +446,7 @@ void CLayerRGB::GUIUpdate(CCore *Core)
GUIRGB.m_ModeList.SetCurSel(CurrentMode);
GUIRGB.m_BrushList.SetCurSel(CurrentBrush);
GUIRGB.m_RateList.SetCurSel(CurrentRate);
GUIRGB.m_Shade.SetCheck(ShadeFlag);
GUIRGB.SetRGB(ShadeRGB.R,ShadeRGB.G,ShadeRGB.B);
GUIRGB.EnableCallback();
}
@ -448,7 +456,8 @@ void CLayerRGB::GUIChanged(CCore *Core)
CurrentMode=GUIRGB.m_ModeList.GetCurSel();
CurrentBrush=GUIRGB.m_BrushList.GetCurSel();
CurrentRate=GUIRGB.m_RateList.GetCurSel();
ShadeFlag=GUIRGB.m_Shade.GetCheck()!=0;
GUIRGB.GetRGB(ShadeRGB.R,ShadeRGB.G,ShadeRGB.B);
}
/*****************************************************************************/
@ -568,7 +577,6 @@ int Ofs=0;
RGB=MapElem.R+RGBInc;
break;
case GUI_MODE_DARKEN:
// RGBInc=255-RGBInc;
RGB=MapElem.R-RGBInc;
break;
}
@ -593,20 +601,150 @@ void CLayerRGB::Grab(CCore *Core,CPoint &CursorPos)
GUIUpdate(Core);
*/
}
/*****************************************************************************/
void CLayerRGB::BiFilter(CCore *Core)
{
for(int Y=0;Y<MapHeight; Y++)
{
for(int X=0; X<MapWidth; X++)
{
int SCol=0,SCount=0;
// *p=(( (*p) + ( ( *(p+1)+*(p-1)+*(p-WIDTH)+*(p+WIDTH) ) >>2 ) )>>1);
GetFilterCol(Core,X-1,Y+0,SCol,SCount);
GetFilterCol(Core,X+1,Y+0,SCol,SCount);
GetFilterCol(Core,X+0,Y-1,SCol,SCount);
GetFilterCol(Core,X+0,Y+1,SCol,SCount);
if (SCount)
{
SCol/=SCount;
SetFilterCol(Core,X,Y,SCol,2);
}
}
}
}
/*****************************************************************************/
void CLayerRGB::TriFilter(CCore *Core)
{
for(int Y=0;Y<MapHeight; Y++)
{
for(int X=0; X<MapWidth; X++)
{
int SCol=0,SCount=0;
// *p=(( (*p) + ( (*(p+1)+*(p-1)+*(p-WIDTH)+*(p+WIDTH)+*(p-WIDTH-1)+*(p-WIDTH+1)+*(p+WIDTH-1)+*(p+WIDTH+1)) >>3 ) )>>1);
GetFilterCol(Core,X-1,Y-1,SCol,SCount);
GetFilterCol(Core,X+0,Y-1,SCol,SCount);
GetFilterCol(Core,X+1,Y-1,SCol,SCount);
GetFilterCol(Core,X-1,Y+0,SCol,SCount);
GetFilterCol(Core,X+1,Y+0,SCol,SCount);
GetFilterCol(Core,X-1,Y+1,SCol,SCount);
GetFilterCol(Core,X+0,Y+1,SCol,SCount);
GetFilterCol(Core,X+1,Y+1,SCol,SCount);
if (SCount)
{
SCol/=SCount;
SetFilterCol(Core,X,Y,SCol,2);
}
}
}
}
/*****************************************************************************/
void CLayerRGB::STriFilter(CCore *Core)
{
for(int Y=0;Y<MapHeight; Y++)
{
for(int X=0; X<MapWidth; X++)
{
int SCol=0,SCount=0;
// c=(( (*p) + ( (*(p+1)+*(p-1)+*(p-WIDTH)+*(p+WIDTH)+*(p-WIDTH-1)+*(p-WIDTH+1)+*(p+WIDTH-1)+*(p+WIDTH+1)) >>3 ) )>>1);
// *(p-WIDTH-1)=c;
// *(p-WIDTH+1)=c;
// *(p+WIDTH-1)=c;
// *(p+WIDTH+1)=c;
GetFilterCol(Core,X-1,Y-1,SCol,SCount);
GetFilterCol(Core,X+0,Y-1,SCol,SCount);
GetFilterCol(Core,X+1,Y-1,SCol,SCount);
GetFilterCol(Core,X-1,Y+0,SCol,SCount);
GetFilterCol(Core,X+1,Y+0,SCol,SCount);
GetFilterCol(Core,X-1,Y+1,SCol,SCount);
GetFilterCol(Core,X+0,Y+1,SCol,SCount);
GetFilterCol(Core,X+1,Y+1,SCol,SCount);
if (SCount)
{
SCol/=SCount;
SetFilterCol(Core,X-1,Y-1,SCol,1);
SetFilterCol(Core,X+1,Y-1,SCol,1);
SetFilterCol(Core,X-1,Y+1,SCol,1);
SetFilterCol(Core,X+1,Y+1,SCol,1);
}
}
}
}
/*****************************************************************************/
void CLayerRGB::GetFilterCol(CCore *Core,int X,int Y,int &SumCol,int &Count)
{
CLayerTile *ActionLayer=(CLayerTile*)Core->GetActionLayer();
if (X>=0 && X<MapWidth && Y>=0 && Y<MapHeight)
{
sMapElem &MapElem=ActionLayer->GetMapElem(X,Y);
if (MapElem.Tile)
{
sRGBElem &C=Map[X][Y];
SumCol+=C.R;
Count++;
}
}
}
/*****************************************************************************/
void CLayerRGB::SetFilterCol(CCore *Core,int X,int Y,int Col,int Div)
{
CLayerTile *ActionLayer=(CLayerTile*)Core->GetActionLayer();
if (X>=0 && X<MapWidth && Y>=0 && Y<MapHeight)
{
sMapElem &MapElem=ActionLayer->GetMapElem(X,Y);
if (MapElem.Tile)
{
sRGBElem &ThisElem=Map[X][Y];
Col+=ThisElem.R;
if (Div) Col/=Div;
ThisElem.R=Col;
ThisElem.G=Col;
ThisElem.B=Col;
}
}
}
/*****************************************************************************/
void CLayerRGB::Export(CCore *Core,CExport &Exp)
{
sRGBCol RGB;
Exp.ExportLayerHeader(LayerDef);//LAYER_TYPE_RGB,LayerDef.SubType,LayerDef.Width,LayerDef.Height);
int f=ShadeFlag;
Exp.Write(&f,sizeof(int));
RGB.R=ShadeRGB.R;
RGB.G=ShadeRGB.G;
RGB.B=ShadeRGB.B;
Exp.Write(&RGB,sizeof(sRGBCol));
for (int Y=0; Y<MapHeight; Y++)
{
for (int X=0; X<MapWidth; X++)
{
sRGBElem &ThisElem=Map[X][Y];
sRGBCol RGB;
RGB.R=ThisElem.R;
RGB.G=ThisElem.G;

View File

@ -87,6 +87,11 @@ protected:
void LoadBrush(const char *Name);
void CreateUndo();
void Undo();
void BiFilter(CCore *Core);
void TriFilter(CCore *Core);
void STriFilter(CCore *Core);
void GetFilterCol(CCore *Core,int X,int Y,int &Col,int &Count);
void SetFilterCol(CCore *Core,int X,int Y,int Col,int Div);
void Render(CCore *Core,Vector3 &CamPos,CMap &ThisMap,bool Render3d,float Alpha=1.0f,Vector3 *Ofs=0);
void Paint(CCore *Core,CPoint &CursorPos);
@ -95,11 +100,11 @@ protected:
CGUILayerRGB GUIRGB;
sRGBElem CurrentRGB;
sRGBElem ShadeRGB;
int CurrentBrush;
int CurrentMode;
int CurrentRate;
bool ShadeFlag;
bool SpareFlag;
int CurrentUndo;
int MapWidth,MapHeight;

View File

@ -2,7 +2,7 @@
[General Info]
Version=1
LastClass=CMapEditDoc
LastClass=CGUILayerRGB
LastTemplate=CDialog
NewFileInclude1=#include "stdafx.h"
NewFileInclude2=#include "mapedit.h"
@ -37,27 +37,27 @@ Class25=CMapEditDoc
Class26=CMapEditView
ResourceCount=22
Resource1=IDD_ADDLAYER
Resource2=IDD_LAYER_COLLISION
Resource3=IDD_LAYER_FX
Resource4=IDD_LAYER_SHADE
Resource5=IDR_MAINFRAME (English (U.S.))
Resource6=IDD_MULTIBAR (English (U.S.))
Resource7=IDD_NEWMAP
Resource8=IDD_LAYER_LIST
Resource9=IDD_ABOUTBOX (English (U.S.))
Resource10=IDD_ELEMLIST
Resource11=IDD_LAYER_THING
Resource12=IDD_RESIZE
Resource13=IDD_LAYER_HAZARD
Resource14=IDD_TOOLBAR
Resource15=IDD_LAYER_TRIGGER
Resource16=IDD_LAYER_ACTOR
Resource1=IDD_TOOLBAR
Resource2=IDD_LAYER_ACTOR
Resource3=IDR_TOOLBAR (English (U.S.))
Resource4=IDD_ELEMLIST
Resource5=IDD_MULTIBAR (English (U.S.))
Resource6=IDD_RESIZE
Resource7=IDD_TILEBANK
Resource8=IDD_NEWMAP
Resource9=IDD_LAYER_LIST
Resource10=IDD_LAYER_THING
Resource11=IDD_LAYER_PLATFORM
Resource12=IDD_ADDLAYER
Resource13=IDR_MAINFRAME (English (U.S.))
Resource14=IDD_LAYER_COLLISION
Resource15=IDD_LAYER_HAZARD
Resource16=IDD_LAYER_THING_POS
Resource17=IDR_MAPEDITYPE (English (U.S.))
Resource18=IDD_TILEBANK
Resource19=IDD_LAYER_THING_POS
Resource20=IDD_LAYER_PLATFORM
Resource21=IDR_TOOLBAR (English (U.S.))
Resource18=IDD_LAYER_SHADE
Resource19=IDD_LAYER_TRIGGER
Resource20=IDD_LAYER_FX
Resource21=IDD_ABOUTBOX (English (U.S.))
Class27=CGUILayerRGB
Resource22=IDD_LAYER_RGB
@ -111,7 +111,7 @@ Type=0
BaseClass=CDialog
HeaderFile=GUILayerHazard.h
ImplementationFile=GUILayerHazard.cpp
LastObject=CGUILayerHazard
LastObject=IDC_HAZARD_SPEED
[CLS:CGUILayerItem]
Type=0
@ -619,13 +619,21 @@ ControlCount=0
[DLG:IDD_LAYER_RGB]
Type=1
Class=CGUILayerRGB
ControlCount=6
ControlCount=14
Control1=IDC_LAYERSHADE_BRUSHTEXT,static,1342308352
Control2=IDC_LAYERSHADE_MODELIST,combobox,1344339971
Control3=IDC_LAYERSHADE_SHADE,button,1342242851
Control4=IDC_LAYERSHADE_MODETEXT,static,1342308352
Control5=IDC_LAYERSHADE_BRUSHLIST,combobox,1344339971
Control6=IDC_LAYERSHADE_RATELIST,combobox,1344339971
Control3=IDC_LAYERSHADE_MODETEXT,static,1342308352
Control4=IDC_LAYERSHADE_BRUSHLIST,combobox,1344339971
Control5=IDC_LAYERSHADE_RATELIST,combobox,1344339971
Control6=IDC_LAYERSHADE_BIFILTER,button,1342242816
Control7=IDC_LAYERSHADE_TRIFILTER,button,1342242816
Control8=IDC_LAYERSHADE_SHADER,edit,1350641792
Control9=IDC_LAYERSHADE_SHADERSPIN,msctls_updown32,1342177334
Control10=IDC_LAYERSHADE_SHADEG,edit,1350641792
Control11=IDC_LAYERSHADE_SHADEGSPIN,msctls_updown32,1342177334
Control12=IDC_LAYERSHADE_SHADEB,edit,1350641792
Control13=IDC_LAYERSHADE_SHADEBSPIN,msctls_updown32,1342177334
Control14=IDC_LAYERSHADE_SHADETEXT,static,1342308352
[CLS:CGUILayerRGB]
Type=0
@ -633,6 +641,6 @@ HeaderFile=GUILayerRGB.h
ImplementationFile=GUILayerRGB.cpp
BaseClass=CDialog
Filter=D
LastObject=CGUILayerRGB
LastObject=IDC_LAYERSHADE_SHADER
VirtualFilter=dWC

View File

@ -891,13 +891,29 @@ BEGIN
LTEXT "Brush",IDC_LAYERSHADE_BRUSHTEXT,10,5,25,10
COMBOBOX IDC_LAYERSHADE_MODELIST,35,20,75,65,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
CONTROL "Shade",IDC_LAYERSHADE_SHADE,"Button",BS_AUTOCHECKBOX |
BS_LEFTTEXT | WS_TABSTOP,5,50,35,10
LTEXT "Mode",IDC_LAYERSHADE_MODETEXT,10,20,20,10
COMBOBOX IDC_LAYERSHADE_BRUSHLIST,35,5,115,65,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
COMBOBOX IDC_LAYERSHADE_RATELIST,110,20,40,65,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "Bi-Linear",IDC_LAYERSHADE_BIFILTER,5,35,70,25
PUSHBUTTON "Tri-Linear",IDC_LAYERSHADE_TRIFILTER,80,35,70,25
EDITTEXT IDC_LAYERSHADE_SHADER,40,65,35,15,ES_AUTOHSCROLL |
ES_READONLY | ES_NUMBER
CONTROL "Spin1",IDC_LAYERSHADE_SHADERSPIN,"msctls_updown32",
UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY |
UDS_ARROWKEYS,5,80,11,20
EDITTEXT IDC_LAYERSHADE_SHADEG,75,65,35,15,ES_AUTOHSCROLL |
ES_READONLY | ES_NUMBER
CONTROL "Spin1",IDC_LAYERSHADE_SHADEGSPIN,"msctls_updown32",
UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY |
UDS_ARROWKEYS,15,80,11,20
EDITTEXT IDC_LAYERSHADE_SHADEB,110,65,35,15,ES_AUTOHSCROLL |
ES_READONLY | ES_NUMBER
CONTROL "Spin1",IDC_LAYERSHADE_SHADEBSPIN,"msctls_updown32",
UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY |
UDS_ARROWKEYS,25,80,11,20
LTEXT "Shade Color",IDC_LAYERSHADE_SHADETEXT,5,65,30,15
END

View File

@ -217,7 +217,15 @@
#define IDC_LAYERSHADE_MODELIST 1218
#define IDC_LAYERSHADE_BRUSHLIST 1219
#define IDC_LAYERSHADE_RATELIST 1220
#define IDC_LAYERSHADE_SHADE 1229
#define IDC_LAYERSHADE_BIFILTER 1230
#define IDC_LAYERSHADE_TRIFILTER 1231
#define IDC_LAYERSHADE_SHADER 1232
#define IDC_LAYERSHADE_SHADERSPIN 1233
#define IDC_LAYERSHADE_SHADEG 1234
#define IDC_LAYERSHADE_SHADEGSPIN 1235
#define IDC_LAYERSHADE_SHADEB 1236
#define IDC_LAYERSHADE_SHADEBSPIN 1237
#define IDC_LAYERSHADE_SHADETEXT 1238
#define ID_TOOLBAR_TILEPALETTE 32774
#define ID_TOOLBAR_PARAMBAR 32783
#define ID_TOGGLE_SUBVIEW 32785
@ -245,7 +253,7 @@
#define _APS_3D_CONTROLS 1
#define _APS_NEXT_RESOURCE_VALUE 180
#define _APS_NEXT_COMMAND_VALUE 32803
#define _APS_NEXT_CONTROL_VALUE 1230
#define _APS_NEXT_CONTROL_VALUE 1239
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif

View File

@ -25,9 +25,10 @@ u8 *Ptr=(u8*)LayerHdr;
iPtr=(int*)(Ptr+sizeof(sExpLayerHdr));
ShadeFlag=*iPtr++;
sRGBCol *RGB=(sRGBCol*)iPtr;
ShadeRGB=*RGB++;
for (int Y=0; Y<Height; Y++)
{
for (int X=0; X<Width; X++)
@ -101,8 +102,10 @@ int ColorCount=0;
printf("RGB remapped to %i colors\n",ColorCount);
// Build Out RGB Table
OutRGBTable.SetSize(ColorCount,16);
int RGBInc=6;
if (ShadeFlag) RGBInc=-6;
int RInc=(ShadeRGB.R-128)/16;
int GInc=(ShadeRGB.G-128)/16;
int BInc=(ShadeRGB.B-128)/16;
for (int c=0;c<ColorCount;c++)
{
int R=DestPal[(c*3)+0];
@ -114,146 +117,15 @@ int RGBInc=6;
RGB.R=R; RGB.G=G; RGB.B=B;
OutRGBTable.Set(c,s,RGB);
R+=RGBInc;
G+=RGBInc;
B+=RGBInc;
R+=RInc;
G+=GInc;
B+=BInc;
if (R<0) R=0; else if (R>255) R=255;
if (G<0) G=0; else if (G>255) G=255;
if (B<0) B=0; else if (B>255) B=255;
}
}
}
#if 0
void CMkLevelLayerRGB::PreProcess(CMkLevel *Core)
{
int X,Y;
int ColorCount;
int c;
// build RGB List
for (Y=0; Y<Height; Y++)
{
for (X=0; X<Width; X++)
{
sRGBElem &ThisElem=RGBMap.Get(X,Y);
sRGBList ThisRGB;
ThisRGB.RGB=ThisElem.RGB;
ThisRGB.Count=0;
int Idx=InRGBList.Add(ThisRGB);
ThisElem.TableIdx=Idx;
InRGBList[Idx].Count++;
}
}
ColorCount=InRGBList.size();
printf("------ %i Colors ------\n",ColorCount);
// Sort RGB List by usage
for (c=0; c<ColorCount; c++)
{
sRGBList &ThisRGB=InRGBList[c];
int s=0;
int SortListSize=SortRGBList.size();
for (; s<SortListSize; s++)
{
if (SortRGBList[s].Count<ThisRGB.Count) break;
}
SortRGBList.insert(s,ThisRGB);
}
// Build Remap table
for (c=0; c<ColorCount; c++)
{
int Idx=SortRGBList.Find(InRGBList[c]);
RemapTable.push_back(Idx);
/*
sRGBCol &In=InRGBList[c].RGB;
sRGBCol &Out=SortRGBList[RemapTable[c]].RGB;
if (In.R!=Out.R || In.G!=Out.G || In.B!=Out.B)
{
printf("%i %i %i\t%i %i %i\n",In.R,In.G,In.B,Out.R,Out.G,Out.B);
}
*/
}
// Remap all above 256
for (c=256;c<ColorCount;c++)
{
sRGBCol &ThisRGB=InRGBList[RemapTable[c]].RGB;
RemapTable[c ]=FindClosestRGB(ThisRGB);
}
// Build Out Map
OutMap.SetSize(Width,Height);
for (Y=0; Y<Height; Y++)
{
for (X=0; X<Width; X++)
{
sRGBElem &ThisElem=RGBMap.Get(X,Y);
u8 Idx=RemapTable[ThisElem.TableIdx];
OutMap.Set(X,Y,Idx);
}
}
// Build Out RGB Table
if (ColorCount>256) ColorCount=256;
OutRGBTable.SetSize(ColorCount,16);
int RGBInc=6;
if (ShadeFlag) RGBInc=-6;
for (c=0;c<ColorCount;c++)
{
sRGBCol &ThisRGB=SortRGBList[c].RGB;
int R=ThisRGB.R;
int G=ThisRGB.G;
int B=ThisRGB.B;
for (int s=0; s<16; s++)
{
sRGBCol RGB;
RGB.R=R; RGB.G=G; RGB.B=B;
OutRGBTable.Set(c,s,RGB);
R+=RGBInc;
G+=RGBInc;
B+=RGBInc;
if (R<0) R=0; else if (R>255) R=255;
if (G<0) G=0; else if (G>255) G=255;
if (B<0) B=0; else if (B>255) B=255;
}
}
}
/*****************************************************************************/
int CMkLevelLayerRGB::FindClosestRGB(sRGBCol const &RGB)
{
int CIdx=-1;
int CVal=0;
for (int i=0; i<256; i++)
{
sRGBCol &ListRGB=SortRGBList[i].RGB;
int Dr=abs(ListRGB.R-RGB.R);
int Dg=abs(ListRGB.G-RGB.G);
int Db=abs(ListRGB.B-RGB.B);
/*
int ThisVal=(SortRGBList[i].RGB.R*SortRGBList[i].RGB.R)+
(SortRGBList[i].RGB.G*SortRGBList[i].RGB.G)+
(SortRGBList[i].RGB.B*SortRGBList[i].RGB.B);
*/
int ThisVal=Dr+Dg+Db;
if (CIdx==-1 || ThisVal<CVal)
{
CIdx=i;
CVal=ThisVal;
}
}
return(CIdx);
}
#endif
/*****************************************************************************/
/*****************************************************************************/
/*** Process *****************************************************************/

View File

@ -38,10 +38,7 @@ protected:
int FindClosestRGB(sRGBCol const &RGB);
CList2d<sRGBElem> RGBMap;
// CList<sRGBList> InRGBList;
// CList<sRGBList> SortRGBList;
// CList<int> RemapTable;
int ShadeFlag;
sRGBCol ShadeRGB;
CList2d<u8> OutMap;
CList2d<sRGBCol> OutRGBTable;

View File

@ -58,8 +58,11 @@ const int LegXInc=4;
void CFXJellyFishLegs::render()
{
CThing *Parent=getParent();
CFX::render();
if (!canRender()) return;
// if (!canRender()) return;
if (!Parent->canRender()) return;
SpriteBank *SprBank=CGameScene::getSpriteBank();;
DVECTOR RenderPos=getRenderPos();