📄 script.cpp.svn-base
字号:
if(strstr(line,"Name"))
{
token=strtok(line," ");
token=strtok(NULL," ");
strcpy(got.name,token);
}
else if(strstr(line,"attackDist"))
{
token=strtok(line," ");
token=strtok(NULL," ");
got.obj.attackDist = atoi(token);
}
else if(strstr(line,"earDist"))
{
token=strtok(line," ");
token=strtok(NULL," ");
got.obj.earDist = atoi(token);
}
else if(strstr(line,"eyeDist"))
{
token=strtok(line," ");
token=strtok(NULL," ");
got.obj.eyeDist = atoi(token);
}
else if(strstr(line,"eyeDist"))
{
token=strtok(line," ");
token=strtok(NULL," ");
got.obj.eyeDist = atoi(token);
}
else if(strstr(line,"moveSpeed"))
{
token=strtok(line," ");
token=strtok(NULL," ");
got.obj.moveSpeed = atof(token);
}
else if(strstr(line,"health"))
{
token=strtok(line," ");
token=strtok(NULL," ");
got.obj.health = atoi(token);
}
else if(strstr(line,"maxHealth"))
{
token=strtok(line," ");
token=strtok(NULL," ");
got.obj.maxHealth = atoi(token);
}
else if(strstr(line,"aggressivity"))
{
token=strtok(line," ");
token=strtok(NULL," ");
got.obj.aggressivity = atoi(token);
}
else if(strstr(line,"Model"))
{
token=strtok(line," ");
token=strtok(NULL," ");
//got.obj.model = new MDLModel();
//got.obj.model->Init((char*)rtrim(token));
//got.obj.model->SetSeq(WALK);
strcpy(got.modelPath,token);
}
else{continue;}
}
enemyType.push_back(got);
continue;
}
}
fclose(pEnemy);
return true;
}
//从子脚本中读取关卡敌人设定
bool Script::LoadEnemyPos(char *enemyPos_path)
{
int x,z;
FILE *pEnemyPos = NULL;
char line[MAX_LINE_SIZE]; //当前行
char *token = NULL; //用于字符串处理
pEnemyPos = fopen(enemyPos_path,"r");
if(pEnemyPos == NULL)
{
MessageBox(NULL,NULL,"Open ini file Failed",NULL);
return false;
}
while (!feof(pEnemyPos)) //文件结束,退出处理
{
fgets(line,MAX_LINE_SIZE,pEnemyPos);
if(strstr(line,"#End")) //读到"#End",退出处理
{
break;
}
//忽略注释行
else if(strstr(line,"//"))
{continue;}
else if(strstr(line,"@Enemy"))
{
GameObject obj;
obj.attackDist = 25;
obj.earDist = 50;
obj.eyeDist = 100;
obj.moveSpeed = 0.005f;
obj.health = 100;
obj.maxHealth = 100;
obj.aggressivity = 1;
obj.model = new MDLModel();
obj.model->Init("../Data/model/zombie.mdl");
obj.model->SetSequence("walk");
while(!strstr(line,"@/Enemy"))
{
fgets(line,MAX_LINE_SIZE,pEnemyPos);
if(strstr(line,"Position"))
{
token=strtok(line," ");
token=strtok(NULL," ");
x = atoi(token);
token = strtok(NULL," ");
z = atoi(token);
obj.pos.x = x;
obj.pos.z = z;
obj.pos.y = map.getHeight(x,z);
float min[3];
float max[3];
obj.model->ExtractBbox(min,max);
obj.lenX = (max[0]-min[0])*0.03;
obj.lenY = (max[1]-min[1])*0.15;
obj.lenZ = (max[2]-min[2])*0.03;
}
else if(strstr(line,"Type"))
{
token=strtok(line," ");
token=strtok(NULL," ");
list<GameObjType>::iterator i=enemyType.begin();
while(i!=enemyType.end())
{
if(strstr(i->name,token))
{
obj.aggressivity = i->obj.aggressivity;
obj.attackDist = i->obj.attackDist;
obj.earDist = i->obj.earDist;
obj.eyeDist = i->obj.eyeDist;
obj.health = i->obj.health;
obj.maxHealth = i->obj.maxHealth;
obj.model = new MDLModel();
obj.model->Init((char*)rtrim((char*)(i->modelPath)));
obj.model->SetSeq(WALK);
break;
}
i++;
}
}
else {continue;}
}
//加到敌人链表
units.push_back(obj);
}
}
fclose(pEnemyPos);
return true;
}
//读取关卡树设定
bool Script::LoadTreeTypes(char *tree_path)
{
FILE *pTree = NULL;
char line[MAX_LINE_SIZE]; //当前行
char *token = NULL; //用于字符串处理
pTree = fopen(tree_path,"r");
if(pTree == NULL)
{
MessageBox(NULL,NULL,"Open ini file Failed",NULL);
return false;
}
while (!feof(pTree)) //文件结束,退出处理
{
fgets(line,MAX_LINE_SIZE,pTree);
if(strstr(line,"#End")) //读到"#End",退出处理
{
break;
}
//忽略注释行
else if(strstr(line,"//"))
{continue;}
else if(strstr(line,"@TreeType"))
{
TreeType t;
while(!strstr(line,"@/TreeType"))
{
fgets(line,MAX_LINE_SIZE,pTree);
if(strstr(line,"Name"))
{
token=strtok(line," ");
token=strtok(NULL," ");
strcpy(t.name,token);
}
if(strstr(line,"base0"))
{
token=strtok(line," ");
token=strtok(NULL," ");
t.ti.base[0] = token;
}
else if(strstr(line,"base1"))
{
token=strtok(line," ");
token=strtok(NULL," ");
t.ti.base[1] = token;
}
else if(strstr(line,"base2"))
{
token=strtok(line," ");
token=strtok(NULL," ");
t.ti.base[2] = token;
}
else if(strstr(line,"numBase"))
{
token=strtok(line," ");
token=strtok(NULL," ");
t.ti.numBase = atoi(token);
}
else if(strstr(line,"maxAlpha"))
{
token=strtok(line," ");
token=strtok(NULL," ");
t.ti.maxAlpha = atoi(token);
}
else if(strstr(line,"minAlpha"))
{
token=strtok(line," ");
token=strtok(NULL," ");
t.ti.minAlpha = atoi(token);
}
else if(strstr(line,"maxBeta"))
{
token=strtok(line," ");
token=strtok(NULL," ");
t.ti.maxBeta = atoi(token);
}
else if(strstr(line,"minBeta"))
{
token=strtok(line," ");
token=strtok(NULL," ");
t.ti.minBeta = atoi(token);
}
else if(strstr(line,"depth"))
{
token=strtok(line," ");
token=strtok(NULL," ");
t.ti.depth = atoi(token);
}
else if(strstr(line,"radius"))
{
token=strtok(line," ");
token=strtok(NULL," ");
t.ti.r= atof(token);
}
else if(strstr(line,"rfade"))
{
token=strtok(line," ");
token=strtok(NULL," ");
t.ti.rfade= atof(token);
}
else if(strstr(line,"length"))
{
token=strtok(line," ");
token=strtok(NULL," ");
t.ti.l = atof(token);
}
else if(strstr(line,"lfade"))
{
token=strtok(line," ");
token=strtok(NULL," ");
t.ti.lfade = atof(token);
}
else if(strstr(line,"bfade"))
{
token=strtok(line," ");
token=strtok(NULL," ");
t.ti.bfade = atof(token);
}
else if(strstr(line,"sizeleaf"))
{
token=strtok(line," ");
token=strtok(NULL," ");
t.ti.sizeleaf = atof(token);
}
else{continue;}
}
treeType.push_back(t);
continue;
}
}
fclose(pTree);
return true;
}
//从子脚本中读取每一棵树的具体设定
bool Script::LoadTreePos(char *treePos_path)
{
FILE *pTreePos = NULL;
char line[MAX_LINE_SIZE]; //当前行
char *token = NULL; //用于字符串处理
int x,y,z; //坐标
pTreePos = fopen(treePos_path,"r");
if(pTreePos == NULL)
{
MessageBox(NULL,NULL,"Open ini file Failed",NULL);
return false;
}
while (!feof(pTreePos)) //文件结束,退出处理
{
fgets(line,MAX_LINE_SIZE,pTreePos);
if(strstr(line,"#End")) //读到"#End",退出处理
{
break;
}
//忽略注释行
else if(strstr(line,"//"))
{continue;}
else if(strstr(line,"@Tree"))
{
TreeInfo *ti;
while(!strstr(line,"@/Tree"))
{
fgets(line,MAX_LINE_SIZE,pTreePos);
if(strstr(line,"Position"))
{
token=strtok(line," ");
token=strtok(NULL," ");
x = atoi(token);
token = strtok(NULL," ");
z = atoi(token);
y = map.getHeight(x,z);
}
else if(strstr(line,"Type"))
{
token=strtok(line," ");
token=strtok(NULL," ");
list<TreeType>::iterator i=treeType.begin();
while(i!=treeType.end())
{
if(strstr(i->name,token))
{
ti = &(i->ti);
Tree *tr = new Tree();
tr->center.x = x;
tr->center.y = y;
tr->center.z = z;
tr->InitTree(ti);
tr->InitTreeInfo();
tr->BuildTree();
trees.push_back(*tr);
break;
}
i++;
}
}
else {continue;}
}
continue;
}
}
fclose(pTreePos);
return true;
}
//截取字符串中的有效路径并返回const char*
const char* Script::rtrim(char s[MAX_LINE_SIZE])
{
const char* tmp;
int i;
for(i = 0;i<MAX_LINE_SIZE;i++)
{
if(s[i]=='\n'||s[i]=='\0')
{
s[i]=NULL;
break;
}
}
tmp = s;
return tmp;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -