00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #include "gAICharacter.h"
00029 #include "tDirectories.h"
00030 #include "tConfiguration.h"
00031 #include "tRecorder.h"
00032 #include <fstream>
00033 #include <sstream>
00034
00035 tString aiPlayersConfig("aiplayers.cfg");
00036 static tSettingItem<tString> aifile("AI_CHARACTER_FILE", aiPlayersConfig);
00037
00038 tArray<gAICharacter> gAICharacter::s_Characters(0);
00039
00040 static REAL weight[AI_PROPERTIES]=
00041 {
00042 10,
00043 10,
00044 10,
00045 10,
00046 10,
00047 10,
00048 10,
00049 10,
00050 10,
00051 10,
00052 0,
00053 0,
00054 0
00055 };
00056
00057
00058 bool gAICharacter::Load(std::istream& file)
00059 {
00060 file >> name;
00061
00062 iq = 1;
00063 REAL iqt = 1;
00064
00065 for (int i=0; i< AI_PROPERTIES; i++)
00066 {
00067 if (file.eof())
00068 return false;
00069
00070 file >> properties[i];
00071 iq += properties[i] * weight[i];
00072 iqt += weight[i];
00073 }
00074 iq *= 10/iqt;
00075
00076 description.ReadLine(file);
00077 return true;
00078 }
00079
00080
00081 static bool LoadSingleAI( tString const & line )
00082 {
00083
00084 std::stringstream str(static_cast< char const * >( line ) );
00085
00086
00087 int i = gAICharacter::s_Characters.Len();
00088 gAICharacter& c = gAICharacter::s_Characters[i];
00089 bool ret = c.Load(str);
00090
00091
00092 if ( !ret )
00093 gAICharacter::s_Characters.SetLen(i);
00094
00095 return ret;
00096 }
00097
00098 void gAICharacter::LoadAll(const tString& filename)
00099 {
00100 std::ifstream f;
00101
00102 tTextFileRecorder stream( tDirectories::Config(), filename );
00103 while( !stream.EndOfFile() )
00104 {
00105 tString line( stream.GetLine().c_str() );
00106 if ( line[0] != '#' )
00107 LoadSingleAI( line );
00108 }
00109 }
00110