This commit is contained in:
parent
98ff69a23e
commit
5a8d2b0d90
11 changed files with 267 additions and 198 deletions
|
@ -53,6 +53,7 @@ enum CmdMsg
|
|||
// Misc
|
||||
CmdMsg_Report, // 35
|
||||
CmdMsg_Undo, // 36
|
||||
CmdMsg_Filter, // 37
|
||||
|
||||
};
|
||||
#endif
|
||||
|
|
|
@ -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);}
|
||||
|
||||
|
||||
|
|
|
@ -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()
|
||||
};
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 *****************************************************************/
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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();
|
||||
|
|
Loading…
Add table
Reference in a new issue