180 lines
4.4 KiB
C++
180 lines
4.4 KiB
C++
#include "stdafx.h"
|
|
|
|
#include "_TextureMode.h"
|
|
K3DTexture * _spSpecular[8]={NULL,};
|
|
STRUCT_TEXTURE_MODE g_pTextureMode[MAX_TEXTURE_MODE] =
|
|
{
|
|
#include "TextureMode.txt"
|
|
};
|
|
|
|
|
|
#ifdef _DEV
|
|
STRUCT_TEXTURE_MODE_FILE g_pTextureModeFile[MAX_TEXTURE_MODE] =
|
|
{
|
|
#include "TextureModeFile.txt"
|
|
};
|
|
void _TextureModeBuild(void)
|
|
{
|
|
// if (g_pTextureMode[0].nHash1) return;
|
|
memset(g_pTextureMode,0,sizeof(g_pTextureMode));
|
|
FILE * fp = fopen("TextureMode.txt","wt");
|
|
for (int i=0;i<MAX_TEXTURE_MODE;i++)
|
|
{
|
|
char *pfile =g_pTextureModeFile[i].pFile;
|
|
if (pfile[0]==0) break;
|
|
|
|
int nhash1 = 0;
|
|
int nhash2 = 0;
|
|
_TextureModeEncode(pfile,&nhash1,&nhash2);
|
|
|
|
// 기존 테이블에 중복된 값이 있는지 검사
|
|
for (int j=0;j<i;j++)
|
|
{
|
|
if (g_pTextureMode[i].nHash1 == nhash1 && g_pTextureMode[i].nHash2 == nhash2 )
|
|
{ MessageBox(NULL,pfile,"error: same hash key",MB_OK);
|
|
}
|
|
}
|
|
int mode =g_pTextureModeFile[i].nMode;
|
|
g_pTextureMode[i].nHash1 = nhash1;
|
|
g_pTextureMode[i].nHash2 = nhash2;
|
|
g_pTextureMode[i].nMode = mode;
|
|
|
|
fprintf(fp,"%d,%d,%d,\n", nhash1,nhash2,mode);
|
|
}
|
|
|
|
fclose(fp);
|
|
|
|
};
|
|
|
|
void _TextureModeReload(void)
|
|
{
|
|
FILE * fp = fopen("TextureModeFile.txt","rt");
|
|
if (fp==NULL) return;
|
|
|
|
memset(g_pTextureModeFile,0,sizeof(g_pTextureModeFile));
|
|
for (int i=0;i<MAX_TEXTURE_MODE;i++)
|
|
{
|
|
while(TRUE)
|
|
{ char buf[256];
|
|
char * ret = fgets(buf,255,fp);
|
|
if (ret<=0) break;
|
|
int len = strlen(buf);
|
|
for (int j=0;j<len;j++)
|
|
{ if (buf[j]=='\"' || buf[j]==',' || buf[j]<' ') buf[j]=' ';
|
|
}
|
|
char token[2][256];
|
|
sscanf(buf,"%s %s",token[0],token[1]);
|
|
if (token[0][0] =='/') continue;
|
|
|
|
int mode = atoi(token[1]);
|
|
if (mode<=0) continue;
|
|
|
|
strcpy(g_pTextureModeFile[i].pFile,token[0]);
|
|
g_pTextureModeFile[i].nMode = mode;
|
|
break;
|
|
};
|
|
}
|
|
|
|
fclose(fp);
|
|
}
|
|
#endif
|
|
|
|
|
|
|
|
void _TextureModeEncode(char * name,int * nhash1,int * nhash2)
|
|
{
|
|
*nhash1=0;
|
|
*nhash2=0;
|
|
int len = strlen (name);
|
|
int count = 0;
|
|
|
|
for (int i=0;i<len;i++)
|
|
{
|
|
if (name[i]=='\\') // 경로와 함께 name이 오면 경로부분은 제거
|
|
{
|
|
*nhash1 = 0;
|
|
*nhash2 = 0;
|
|
count = 0;
|
|
continue;
|
|
}
|
|
if (name[i]=='.') break; // 확장자는 포함하지 않는다.
|
|
if (count&0x1)
|
|
{ *nhash1 += ((name[i]-'0') << (count>>1));
|
|
} else
|
|
{ *nhash2 += ((name[i]-'0') << (count>>1));
|
|
}
|
|
count++;
|
|
}
|
|
}
|
|
|
|
int _TextureModeGet(char *name)
|
|
{
|
|
int nhash1 = 0;
|
|
int nhash2 = 0;
|
|
_TextureModeEncode(name,&nhash1,&nhash2);
|
|
for (int i=0;i<MAX_TEXTURE_MODE;i++)
|
|
{ if (g_pTextureMode[i].nHash1 == nhash1 && g_pTextureMode[i].nHash2 == nhash2 )
|
|
{ return g_pTextureMode[i].nMode;
|
|
}
|
|
}
|
|
|
|
// 리스트에 없는경우
|
|
//_npc
|
|
//_face
|
|
//_foot
|
|
//가 있을경우
|
|
|
|
///*
|
|
int mode = 1;
|
|
int len = strlen(name);
|
|
|
|
int nPathPos = 0;
|
|
|
|
|
|
|
|
for (int i=0;i<len;i++)
|
|
{
|
|
if (name[i]=='\\') // 경로와 함께 name이 오면 경로부분 위치를 저장
|
|
{
|
|
nPathPos = i+1;
|
|
continue;
|
|
}
|
|
if (name[i]=='.') break; // 확장자는 포함하지 않는다.
|
|
}
|
|
|
|
if (len>7 && name[0]=='n' && name[1]=='p' && name[2]=='c') mode = 22;
|
|
else
|
|
{
|
|
|
|
for (int i=nPathPos;i<len-4;i++)
|
|
{
|
|
|
|
if (name[i]=='f' && name[i+1]=='x' && name[i+2]=='_') {mode= 21;break;}
|
|
if (name[i]=='b' && name[i+1]=='e' && name[i+2]=='a' && name[i+3]=='s' && name[i+4]=='t') {mode= 23;break;}
|
|
if (name[i]=='a' && name[i+1]=='i' && name[i+2]=='n' && name[i+3]=='_' ) {mode= 23;break;}
|
|
if (name[i]=='_')
|
|
{
|
|
if (name[i+1]=='h' && name[i+2]=='a' && name[i+3]=='i' && name[i+4]=='r') {mode= 21;break;}
|
|
if (name[i+1]=='m' && name[i+2]=='a' && name[i+3]=='n' && name[i+4]=='t') {mode= 21;break;}
|
|
|
|
|
|
if (name[i+1]=='n' && name[i+2]=='p' && name[i+3]=='c') {mode= 22;break;}
|
|
if (name[i+1]=='b' && name[i+2]=='o' && name[i+3]=='d' && name[i+4]=='y') {mode= 22;break;}
|
|
if (name[i+1]=='w' && name[i+2]=='a' && name[i+3]=='r' && name[i+4]=='r') {mode= 22;break;}
|
|
if (name[i+1]=='s' && name[i+2]=='u' && name[i+3]=='m' && name[i+4]=='m') {mode= 22;break;}
|
|
if (name[i+1]=='p' && name[i+2]=='r' && name[i+3]=='i' && name[i+4]=='e') {mode= 22;break;}
|
|
if (name[i+1]=='a' && name[i+2]=='r' && name[i+3]=='c' && name[i+4]=='h') {mode= 22;break;}
|
|
if (name[i+1]=='f' && name[i+2]=='o' && name[i+3]=='o' && name[i+4]=='t') {mode= 22;break;}
|
|
if (name[i+1]=='h' && name[i+2]=='a' && name[i+3]=='n' && name[i+4]=='d') {mode= 22;break;}
|
|
|
|
if (name[i+1]=='f' && name[i+2]=='a' && name[i+3]=='c' && name[i+4]=='e') {mode= 23;break;}
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
return mode;
|
|
}
|
|
|
|
|