mirror of
https://github.com/alliedmodders/amxmodx.git
synced 2024-12-25 14:25:38 +03:00
135 lines
2.2 KiB
C++
135 lines
2.2 KiB
C++
// vim: set ts=4 sw=4 tw=99 noet:
|
|
//
|
|
// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO").
|
|
// Copyright (C) The AMX Mod X Development Team.
|
|
//
|
|
// This software is licensed under the GNU General Public License, version 3 or higher.
|
|
// Additional exceptions apply. For full license details, see LICENSE.txt or visit:
|
|
// https://alliedmods.net/amxmodx-license
|
|
|
|
//
|
|
// Natural Selection Module
|
|
//
|
|
|
|
#include "sdk/amxxmodule.h"
|
|
#include "ns.h"
|
|
|
|
#include "CVector.h"
|
|
#include "CString.h"
|
|
|
|
#include "ParticleManager.h"
|
|
|
|
|
|
void ParticleManager::ReadFile(void)
|
|
{
|
|
this->Prune();
|
|
if (m_iFileLoaded!=0)
|
|
{
|
|
return;
|
|
}
|
|
m_iFileLoaded=1;
|
|
|
|
char FileName[256];
|
|
|
|
snprintf(FileName,sizeof(FileName)-1,"%s/ns.ps",MF_GetModname());
|
|
FILE *fp=fopen(FileName,"r");
|
|
|
|
if (!fp)
|
|
{
|
|
MF_Log("ParticleManager: Cannot open \"%s\" for reading!",FileName);
|
|
return;
|
|
}
|
|
|
|
// Since I don't care about the actual parameters of each
|
|
// particle system, just their order and name
|
|
// I only have to scan for "start pSystemName NAME"
|
|
|
|
char Buffer[1024];
|
|
|
|
char *Start;
|
|
char *End;
|
|
|
|
int Count=0;
|
|
|
|
memset(&Buffer[0],0x0,sizeof(Buffer));
|
|
|
|
while (!feof(fp))
|
|
{
|
|
Buffer[0]='\0';
|
|
|
|
fgets(Buffer,1023,fp);
|
|
|
|
Start=&Buffer[0];
|
|
|
|
// strip whitespace from the front
|
|
while (*Start==' ' ||
|
|
*Start=='\t')
|
|
{
|
|
++Start;
|
|
}
|
|
|
|
// if the first character is ' ignore it
|
|
if (*Start=='\'')
|
|
{
|
|
continue;
|
|
}
|
|
|
|
// if the first word is "start" then this is a line we want
|
|
|
|
if (strncmp("start ",Start,6)!=0)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
// Move up past 2 space blocks
|
|
|
|
while (*Start!='\0' &&
|
|
*Start!=' ' &&
|
|
*Start!='\t')
|
|
{
|
|
++Start;
|
|
}
|
|
while (*Start==' ' ||
|
|
*Start=='\t')
|
|
{
|
|
++Start;
|
|
}
|
|
|
|
while (*Start!='\0' &&
|
|
*Start!=' ' &&
|
|
*Start!='\t')
|
|
{
|
|
++Start;
|
|
}
|
|
while (*Start==' ' ||
|
|
*Start=='\t')
|
|
{
|
|
++Start;
|
|
}
|
|
|
|
// now strip whitespace from the end
|
|
|
|
End=Start+strlen(Start)-1;
|
|
|
|
while (*End=='\n' ||
|
|
*End=='\r' ||
|
|
*End==' ' ||
|
|
*End=='\t')
|
|
{
|
|
*End--='\0';
|
|
}
|
|
|
|
// "Start" should now point to the name of this particle system
|
|
|
|
//printf("Particle system %d = \"%s\"\n",Count,Start);
|
|
|
|
|
|
this->Add(Start,1);
|
|
|
|
|
|
++Count;
|
|
}
|
|
|
|
fclose(fp);
|
|
};
|