void addData(ObjectProperties::SPtr properties, sfe::Data data)
{
	if(!data || !data.displayed())
		return;

	auto storageType = data.supportedType();

	auto typeTrait = data.typeInfo();
	std::string valueType;
	int columnCount = 1;
	bool fixedSize = false;
	if(typeTrait && typeTrait->ValidInfo())
	{
		valueType = typeTrait->ValueType()->name();
		columnCount = typeTrait->size();
		fixedSize = typeTrait->FixedSize();
	}

	BaseValueWrapper::SPtr wrapper;
	switch(storageType)
	{
	case sfe::Data::DataType::Int:		wrapper = createProp<int>(data);			break;
	case sfe::Data::DataType::Float:	wrapper = createProp<float>(data);			break;
	case sfe::Data::DataType::Double:	wrapper = createProp<double>(data);			break;
	case sfe::Data::DataType::String:	wrapper = createProp<std::string>(data);	break;
	case sfe::Data::DataType::Vector_Int:		wrapper = createVectorProp<int>(data, fixedSize, columnCount);			break;
	case sfe::Data::DataType::Vector_Float:		wrapper = createVectorProp<float>(data, fixedSize, columnCount);		break;
	case sfe::Data::DataType::Vector_Double:	wrapper = createVectorProp<double>(data, fixedSize, columnCount);		break;
	case sfe::Data::DataType::Vector_String:	wrapper = createVectorProp<std::string>(data, fixedSize, columnCount);	break;
	}

	auto prop = wrapper->property();
	if (valueType == "bool")
		prop->value()->baseMetaContainer().add(meta::Checkbox());

	properties->addProperty(wrapper->property());
	properties->addValueWrapper(wrapper);
}
bool SweeperStatisticsScene::init()
{
	if (!BaseScene::init())
	{
		return false;
	}

	// 创建时代显示标签;
	m_labelGeneration = Label::createWithSystemFont("Generation: 0", "Arial", 20);
	m_labelGeneration->setAnchorPoint(Vec2(0, 1));
	m_labelGeneration->setPosition(DISPLAY->left(), DISPLAY->top());
	this->addChild(m_labelGeneration);

	// 创建切换按钮;
	auto label = Label::createWithSystemFont("Switch Live", "Arial", 20);
	auto item = MenuItemLabel::create(label, [=](Ref *) {
		auto scene = SweeperLiveScene::create();
		Director::getInstance()->replaceScene(scene);
	});
	auto menu = Menu::create(item, nullptr);
	menu->setPosition(DISPLAY->right()-100, DISPLAY->top()-20);
	this->addChild(menu);

	// 创建地雷;
	for (int i=0; i<CONSTANTS.MineNumber; ++i)
	{
		auto mine = MineObject::create(nullptr);
		m_mines.insert(mine);

		// 设置随机位置;
		mine->setFixedPosition(this->randomFixedPosition());
	}

	// 创建sweeper;
	for (int i=0; i<CONSTANTS.SweeperNumber; ++i)
	{
		auto sweeper = SweeperObject::create(nullptr);
		sweeper->setFixedSize(FixedSize(20, 20));
		m_sweepers.push_back(sweeper);

		// 设置随机位置;
		sweeper->setFixedPosition(this->randomFixedPosition());

		// 设置基因;
		const auto &genes = GeneticAlgorithm::instance()->getGenome(i);
		sweeper->setGenome(genes);
	}

	// 创建统计曲线渲染器;
	m_coordinateRenderer = DrawNode::create();
	this->addChild(m_coordinateRenderer);
	m_bestFitnessRenderer = DrawNode::create();
	this->addChild(m_bestFitnessRenderer);
	m_averageFitnessRenderer = DrawNode::create();
	this->addChild(m_averageFitnessRenderer);
	m_worstFitnessRenderer = DrawNode::create();
	this->addChild(m_worstFitnessRenderer);

	m_labelBestFitness = Label::createWithSystemFont("", "Arial", 18);
	m_labelBestFitness->setPosition(200, 550);
	m_labelBestFitness->setTextColor(Color4B(0, 255, 0, 255));
	this->addChild(m_labelBestFitness);

	m_labelAverageFitness = Label::createWithSystemFont("", "Arial", 18);
	m_labelAverageFitness->setPosition(400, 550);
	m_labelAverageFitness->setTextColor(Color4B(0, 0, 255, 255));
	this->addChild(m_labelAverageFitness);

	m_labelWorstFitness = Label::createWithSystemFont("", "Arial", 18);
	m_labelWorstFitness->setPosition(600, 550);
	m_labelWorstFitness->setTextColor(Color4B(255, 0, 0, 255));
	this->addChild(m_labelWorstFitness);


	// 开始时代;
	this->startGeneration();

	// 绘制统计图;
	this->drawStatistics();

	// 注册更新回调;
	this->scheduleUpdate();

	return true;
}
Exemple #3
0
bool SweeperLiveScene::init()
{
	if (!BaseScene::init())
	{
		return false;
	}

	// 创建时代显示标签;
	m_labelGeneration = Label::createWithSystemFont("Generation: 0", "Arial", 20);
	m_labelGeneration->setAnchorPoint(Vec2(0, 1));
	m_labelGeneration->setPosition(DISPLAY->left(), DISPLAY->top());
	this->addChild(m_labelGeneration);

	// 创建切换按钮;
	auto label = Label::createWithSystemFont("Switch Statistics", "Arial", 20);
	auto item = MenuItemLabel::create(label, [=](Ref *) {
		auto scene = SweeperStatisticsScene::create();
		Director::getInstance()->replaceScene(scene);
		return;
	});
	auto menu = Menu::create(item, nullptr);
	menu->setPosition(DISPLAY->right()-100, DISPLAY->top()-20);
	this->addChild(menu);

	// 创建地雷;
	for (int i=0; i<CONSTANTS.MineNumber; ++i)
	{
		MineView *mineView = nullptr;
		mineView = MineView::create();
		this->addChild(mineView);
		auto mine = MineObject::create(mineView);
		m_mines.insert(mine);

		// 设置随机位置;
		mine->setFixedPosition(this->randomFixedPosition());
	}

	// 创建sweeper;
	for (int i=0; i<CONSTANTS.SweeperNumber; ++i)
	{
		SweeperView *sweeperView = nullptr;
		sweeperView = SweeperView::create();
		this->addChild(sweeperView);
		auto sweeper = SweeperObject::create(sweeperView);
		sweeper->setFixedSize(FixedSize(20, 20));
		m_sweepers.push_back(sweeper);

		// 设置随机位置;
		sweeper->setFixedPosition(this->randomFixedPosition());

		// 设置基因;
		const auto &genes = GeneticAlgorithm::instance()->getGenome(i);
		sweeper->setGenome(genes);
	}

	// 开始新时代;
	this->startGeneration();

	// 注册回调;
	this->scheduleUpdate();

	return true;
}