Commit 0ec72346 authored by Denis Khachko's avatar Denis Khachko

no message

parent 38c0add4
......@@ -1382,6 +1382,525 @@ namespace ActorRobot {
};
/**
* Загрузка обстановки из файла, отображение не производится.
* @param fileName Имя файла
* @return Код ошибки
* 1 - Ошибка чтения файла
* 2 - Пустой файл
* 3 - Ошибка чтения размеров обстановки
* 4 - Неверные размеры поля
* 5 - Пустя строка
* 6 - Неверное положение робота
* 0< - Ошибка в строке
* 10 - Ошибки основного прогона
*/
int RoboField::loadFromDataStream(QIODevice * l_File)
{
//destroyField();
QString tmp = "";
int NStrok;
NStrok = 0;
QString l_String;
// long l_Err;
int CurX,CurY;
int SizeX, SizeY;
destroyField();
// Тестовый прогон
if (!l_File->open(QIODevice::ReadOnly))
{
return 1;
}
// 1 stroka - razmery polya
tmp = l_File->readLine();
//QMessageBox::information( 0, "", tmp, 0,0,0);
if (tmp.isNull()||tmp.isEmpty())
{
l_File->close();
return 2;
}
//QMessageBox::information( 0, "", tmp, 0,0,0);
while (tmp.left(1) == ";" || tmp == "")
{
tmp = l_File->readLine();
NStrok++;
if (tmp.isNull())
{
return 1;
}
}
tmp = tmp.simplified();
QStringList l_List = tmp.split(' ');
if (l_List.count() != 2)
{
l_File->close();
return 3;
}
SizeX = (l_List[0]).toInt();
SizeY = (l_List[1]).toInt();
if ( (SizeX<= 0) || (SizeY <= 0) )
{
return 4;
}
// field.destroyField();
// field.createField(l_List[0].toInt(),l_List[1].toInt());
// Вторая строка - положение робота
tmp = l_File->readLine();
if (tmp.isNull())
{
l_File->close();
return 5;
}
while (tmp.left(1) == ";" || tmp == "")
{
tmp = l_File->readLine();
NStrok++;
if (tmp.isNull())
{
l_File->close();
return 5;
}
}
tmp = tmp.simplified();
l_List = tmp.split(' ');
// koordinaty robota
// proverka
if ((l_List[0]).toInt() < 0 || (l_List[1]).toInt() < 0)
{
l_File->close();return 6;
}
if ((l_List[0]).toInt() > SizeX || (l_List[1]).toInt() > SizeY )
{
l_File->close(); return 6;
}
// m_DefaultSett = l_Sett;
while (!l_File->atEnd())
{
//l_Err = l_File.readLine(l_String, 255);
tmp = QString::fromUtf8(l_File->readLine());
NStrok++;
if (tmp.isNull())
{
return 5;
}
if (tmp.left(1) == ";" || tmp == "")
{
continue;
}
tmp = tmp.simplified();
l_List = tmp.split(' ');
if (l_List.count() == 0)continue;
if (l_List.count() > 9 )
{
l_File->close();
return -NStrok;
}
if(l_List.count()<6)
{
l_File->close();
qDebug("N Lexem<6");
return -NStrok;
};
bool ok;
CurX = l_List[0].toInt(&ok);
if(!ok)
{
l_File->close();
qDebug("Bad cur X<6");
return -NStrok;
};
CurY = l_List[1].toInt(&ok);
if(!ok){
l_File->close();
qDebug("Bad curY <6");
return -NStrok;
};
if (CurX < 0 || CurX > SizeX || CurY < 0 || CurY > SizeY)
{
l_File->close(); return -NStrok;
}
if (l_List[4].toFloat() < 0)
{
l_File->close(); return -NStrok;
}
if (l_List[5].toFloat() < MIN_TEMP)
{
l_File->close(); return -NStrok;
}
if (l_List.count() >= 7)
{
QString tmp1 = l_List[6];
//dlina lexemy dolzna ravnyatsa 1
if (!(tmp1.length() == 1))
{
l_File->close(); return -NStrok;
}
}
if (l_List.count() >= 8)
{
QString tmp1 = l_List[7];
//dlina lexemy dolzna ravnyatsa 1
if (!(tmp1.length() == 1))
{
l_File->close(); return -NStrok;
}
}
}
l_File->close();
//реальный прогон
//destroyField();
if (!l_File->open(QIODevice::ReadOnly))
{
return 10;
}
// 1 stroka - razmery polya
tmp = l_File->readLine();
if (tmp.isNull())
{
l_File->close();
return 10;
}
while (tmp.left(1) == ";" || tmp == "")
{
tmp = QString::fromUtf8(l_File->readLine());
NStrok++;
if (tmp.isNull())
{
l_File->close();
return 10;
}
}
tmp = tmp.simplified();
l_List = tmp.split(' ');
if (l_List.count() != 2)
{
l_File->close();
return -NStrok;
}
SizeX = (l_List[0]).toInt();
SizeY = (l_List[1]).toInt();
// //NEW ROBO CODE
createField(SizeY,SizeX);
//END
if ((l_List[0]).toInt() <= 0 || (l_List[1]).toInt() <= 0)
{
l_File->close();
return - NStrok;
}
// Вторая строка - положение робота
tmp = l_File->readLine();
if (tmp.isNull())
{
l_File->close();
return 10;
}
while (tmp.left(1) == ";" || tmp == "")
{
tmp = l_File->readLine();
NStrok++;
if (tmp.isNull())
{
l_File->close();
return 10;
}
}
tmp = tmp.simplified();
l_List = tmp.split(' ');
// koordinaty robota
if ((l_List[0]).toInt() < 0 || (l_List[1]).toInt() < 0)
{
l_File->close();return - NStrok;
}
if ((l_List[0]).toInt() > SizeX || (l_List[1]).toInt() > SizeY )
{
l_File->close(); return - NStrok;
}
robo_x = (l_List[0]).toInt();
robo_y = (l_List[1]).toInt();
//InitialX = m_x;
//InitialY = m_y;
// delete []m_FieldDubl;
while (!l_File->atEnd())
{
tmp = QString::fromUtf8(l_File->readLine());
NStrok++;
if (tmp.isNull())
{
l_File->close();
return 10;
}
if (tmp.left(1) == ";" || tmp == "")
{
continue;
}
tmp = tmp.simplified();
l_List = tmp.split(' ');
if (l_List.count() == 0)continue;
if (l_List.count() > 9)
{
l_File->close();
return -NStrok;
}
CurX = l_List[0].toInt();
CurY = l_List[1].toInt();
if (CurX < 0 || CurX > SizeX || CurY < 0 || CurY > SizeY)
{
l_File->close(); return -NStrok;
}
// TODO STENI
if (getFieldItem(CurY, CurX))
getFieldItem(CurY,CurX)->setWalls((l_List[2]).toInt());
// int ix = (l_List[0]).toInt();
// int iy = (l_List[1]).toInt();
if (!((l_List[3]).toInt() == 0))
{
getFieldItem(CurY,CurX)->IsColored = true;
// //QMessageBox::information( 0, "","test1" , 0,0,0);
}
else {
if (getFieldItem(CurY,CurX))
getFieldItem(CurY,CurX)->IsColored = false;
}
qreal radiation = (l_List[4].replace(",",".")).toDouble();
if (getFieldItem(CurY,CurX))
getFieldItem(CurY,CurX)->radiation=radiation;
if (l_List[4].toFloat() < 0)
{
l_File->close(); return -NStrok;
}
qreal temperature = (l_List[5].replace(",",".")).toDouble();
if (getFieldItem(CurY,CurX))
getFieldItem(CurY,CurX)->temperature=temperature;
if (l_List[5].toFloat() < MIN_TEMP)
{
l_File->close(); return -NStrok;
}
if (l_List.count() >= 7)
{
QString tmp1 = l_List[6];
//dlina lexemy dolzna ravnyatsa 1
if (!(tmp1.length() == 1))
{
l_File->close(); return -NStrok;
}
//qDebug()<<QString::fromUtf8("Тест Up:")<<tmp1[0];
if(tmp1[0]!='$') {
if (getFieldItem(CurY,CurX))
getFieldItem(CurY,CurX)->upChar = tmp1[0];
}
else {
if (getFieldItem(CurY,CurX))
getFieldItem(CurY,CurX)->upChar = ' ' ;
}
}
else
{
if (getFieldItem(CurY,CurX))
getFieldItem(CurY,CurX)->upChar = ' ' ;
}
if (l_List.count() >= 8)
{
QString tmp1 = l_List[7];
//dlina lexemy dolzna ravnyatsa 1
if (!(tmp1.length() == 1))
{
l_File->close(); return -NStrok;
}
//qDebug()<<QString::fromUtf8("Тест Down:")<<tmp1[0];
if(tmp1[0]!='$') {
if (getFieldItem(CurY,CurX))
getFieldItem(CurY,CurX)->downChar = tmp1[0];
}
else {
if (getFieldItem(CurY,CurX))
getFieldItem(CurY,CurX)->downChar = ' ' ;
}
}
else
{
if (getFieldItem(CurY,CurX))
getFieldItem(CurY,CurX)->downChar = ' ' ;
}
if (l_List.count() >= 9)
{
QString tmp1 = l_List[8];
//dlina lexemy dolzna ravnyatsa 1
if (!(tmp1.length() == 1))
{
l_File->close(); return -NStrok;
}
if(tmp1[0]=='1') {
if (getFieldItem(CurY,CurX))
getFieldItem(CurY,CurX)->mark = true;
}
else {
if (getFieldItem(CurY,CurX))
getFieldItem(CurY,CurX)->mark = false ;
}
}
else
{
if (getFieldItem(CurY,CurX))
getFieldItem(CurY,CurX)->mark = false ;
}
}
l_File->close();
wasEdit=false;
//robot->setZValue(100);
return(0);
}
/**
* Загрузка обстановки из файла, отображение не производится.
......@@ -2737,7 +3256,7 @@ namespace ActorRobot {
RobotModule::RobotModule(ExtensionSystem::KPlugin * parent)
: RobotModuleBase(parent)
......@@ -2796,8 +3315,30 @@ RobotModule::RobotModule(ExtensionSystem::KPlugin * parent)
{
// Set actor specific data (like environment)
// The source should be ready-to-read QIODevice like QBuffer or QFile
Q_UNUSED(source); // By default do nothing
qDebug()<<"Load env";
if(field->loadFromDataStream(source)!=0)return ;
startField=field->Clone();
field->dropWasEdit();
// ajustWindowSize();//NEW ROBOT
// ToDubl();
// SizeX = m_Size_x * m_FieldSize;
// SizeY = m_Size_y * m_FieldSize + MenuHigth;
// WasEditFlag=false;
//delete btnFind;
//CreatebtnFind();
return;
}
......@@ -3113,12 +3654,12 @@ bool RobotModule::runIsColor()
QChar RobotModule::runUpChar(const int row, const int col)
{
qDebug()<<field->cellAt(row-1,col-1)->upChar;
return field->cellAt(row-1,col-1)->upChar;
qDebug()<<field->cellAt(col-1,row-1)->upChar;
return field->cellAt(col-1,row-1)->upChar;
};
QChar RobotModule::runDownChar(const int row, const int col)
{qDebug()<<field->cellAt(row-1,col-1)->downChar;
return field->cellAt(row-1,col-1)->downChar;
{qDebug()<<field->cellAt(col-1,row-1)->downChar;
return field->cellAt(col-1,row-1)->downChar;
};
int RobotModule::LoadFromFile(QString p_FileName)
......
......@@ -328,6 +328,7 @@ namespace ActorRobot {
void debug();
void setColorFromSett();
int loadFromFile(QString fileName);
int loadFromDataStream(QIODevice * l_File);
int saveToFile(QString fileName);
void createRobot();
void UpdateColors();
......@@ -511,7 +512,7 @@ namespace ActorRobot {
void reset();
void loadActorData(QIODevice * source);
// Set animation flag
void setAnimationEnabled(bool enabled);
// Actor methods
void runGoUp();
......
......@@ -17,7 +17,7 @@ Plugin::Plugin()
MW=new MainWindowTask();
MW->setup();
mainWindow_=MW;
field_no=0;
}
QList<QMenu*> Plugin::menus()const
......@@ -71,32 +71,36 @@ QWidget* Plugin::mainWindow() const
AI * Plugin::getActor(QString name)
{
QList<AI*> Actors= ExtensionSystem::PluginManager::instance()->findPlugins<AI>();
if(name=="Robot")name=QString::fromUtf8("Робот");//Pach for K1
for(int i=0;i<Actors.count();i++)