tools/templates/mainform.cpp
author nemo
Sun, 11 Mar 2012 20:12:31 -0400
changeset 6770 7d2c6cdb816a
parent 1774 3627ba6099ca
child 8442 535a00ca0d35
permissions -rw-r--r--
Start on adding drowning bonus to bat/firepunch/whip. AI still is not smart enough to change direction when firepunching to face the water, or change the angle of the bat. Also try to weight cost of switches based on how many switches were available.

#include <QGridLayout>
#include <QImage>
#include <QPixmap>
#include <QMessageBox>
#include <QFile>
#include <QTextStream>
#include <QRegExp>
#include <QDebug>
#include "mainform.h"

MyWindow::MyWindow(QWidget * parent, Qt::WFlags flags)
		: QMainWindow(parent, flags)

{
	QWidget * centralWidget = new QWidget(this);
	QGridLayout * mainlayout = new QGridLayout(centralWidget);
	mainlayout->setMargin(1);
	mainlayout->setSpacing(1);

	sa_xy = new QScrollArea(centralWidget);
	xy = new PixLabel();
	xy->setFixedSize(1024, 512);
	sa_xy->setWidget(xy);

	mainlayout->addWidget(sa_xy, 0, 0, 1, 4);

	setCentralWidget(centralWidget);

	buttAdd = new QPushButton(centralWidget);
	buttAdd->setText(tr("Add"));
	mainlayout->addWidget(buttAdd, 1, 0);

	buttCode = new QPushButton(centralWidget);
	buttCode->setText(tr("Code"));
	mainlayout->addWidget(buttCode, 1, 1);

	buttSave = new QPushButton(centralWidget);
	buttSave->setText(tr("Save"));
	mainlayout->addWidget(buttSave, 1, 3);

	buttLoad = new QPushButton(centralWidget);
	buttLoad->setText(tr("Load"));
	mainlayout->addWidget(buttLoad, 1, 2);

	connect(buttAdd, SIGNAL(clicked()), xy, SLOT(AddRect()));
	connect(buttCode, SIGNAL(clicked()), this, SLOT(Code()));
	connect(buttSave, SIGNAL(clicked()), this, SLOT(Save()));
	connect(buttLoad, SIGNAL(clicked()), this, SLOT(Load()));
}

void MyWindow::Code()
{
	if (xy->rects.size())
	{
		QFile f("template.pas");
		if (!f.open(QIODevice::WriteOnly))
		{
			QMessageBox::information(this, tr("Error"),
						tr("Cannot save"));
			return ;
		}

		QTextStream stream(&f);
		stream << QString("const Template0Points: array[0..%1] of TSDL_Rect =").arg(xy->rects.size() - 1) << endl;
		stream << "      (" << endl;
		for(int i = 0; i < xy->rects.size(); i++)
		{
			QRect r = xy->rects[i].normalized();
			stream << QString("       (x: %1; y: %2; w: %3; h: %4),").
					arg(r.x() * 4, 4).arg(r.y() * 4, 4).arg(r.width() * 4, 4).arg(r.height() * 4, 4) << endl;
		}
		stream << "      );" << endl;
		f.close();
	}
}

void MyWindow::Save()
{
	Code();
}

void MyWindow::Load()
{
	QFile f("template.pas");
	if (!f.open(QIODevice::ReadOnly))
	{
		QMessageBox::information(this, tr("Error"),
					tr("Cannot open file"));
		return ;
	}

	QTextStream stream(&f);
	QStringList sl;
	while (!stream.atEnd())
	{
		sl << stream.readLine();
	}
	xy->rects.clear();
	for (int i = 0; i < sl.size(); ++i)
	{
		QRegExp re("x:\\s+(\\d+);\\sy:\\s+(\\d+);\\sw:\\s+(\\d+);\\sh:\\s+(\\d+)");
		re.indexIn(sl.at(i));
		QStringList coords = re.capturedTexts();
		qDebug() << sl.at(i) << coords;
		if ((coords.size() == 5) && (coords[0].size()))
			xy->rects.push_back(QRect(coords[1].toInt() / 4, coords[2].toInt() / 4, coords[3].toInt() / 4, coords[4].toInt() / 4));
	}
	f.close();
	xy->repaint();
}