コード例 #1
0
void
RoomContainer::_InitBlitMask()
{
	std::cout << "Initializing blit mask...";
	std::flush(std::cout);

	if (fBlitMask != NULL) {
		fBlitMask->Release();
		fBlitMask = NULL;
	}

	fBlitMask = new Bitmap(AreaRect().w, AreaRect().h, 8);

	fBlitMask->Lock();
	for (uint32 p = 0; p < fWed->CountPolygons(); p++) {
		const Polygon* poly = fWed->PolygonAt(p);
		uint32 mask = GraphicsEngine::MASK_COMPLETELY;
		if (poly->Flags() & IE::POLY_SHADE_WALL)
			mask = GraphicsEngine::MASK_SHADE;
		if (poly != NULL && poly->CountPoints() > 0) {
			fBlitMask->FillPolygon(*poly, mask);
		}
	}
	fBlitMask->Unlock();
	fBlitMask->Update();

	std::cout << "Done!" << std::endl;
}
コード例 #2
0
void
RoomContainer::_DrawSearchMap(GFX::rect visibleArea)
{
	if ((fSearchMap != NULL && fDrawSearchMap > 0)) {

		GFX::rect destRect(0, AreaRect().h - fSearchMap->Height(),
						AreaRect().w, AreaRect().h);

		GraphicsEngine::Get()->BlitToScreen(fSearchMap, NULL, &destRect);

		visibleArea.x /= fMapHorizontalRatio;
		visibleArea.y /= fMapVerticalRatio;
		visibleArea.w /= fMapHorizontalRatio;
		visibleArea.h /= fMapVerticalRatio;
		visibleArea = offset_rect(visibleArea, 0, AreaRect().h - fSearchMap->Height());
		GraphicsEngine::Get()->ScreenBitmap()->StrokeRect(visibleArea, 500);
	}
}
コード例 #3
0
void
RoomContainer::_InitSearchMap()
{
	std::cout << "Initializing search map...";
	std::flush(std::cout);

	std::string searchMapName = fArea->WedName().CString();
	searchMapName += "SR";
	BMPResource* resource = gResManager->GetBMP(searchMapName.c_str());
	if (resource != NULL) {
		fSearchMap = resource->Image();
		fMapHorizontalRatio = AreaRect().w / fSearchMap->Width();
		fMapVerticalRatio = AreaRect().h / fSearchMap->Height();
		gResManager->ReleaseResource(resource);
	}

	std::cout << "Done!" << std::endl;
}
コード例 #4
0
ファイル: RoomBase.cpp プロジェクト: jackburton79/bgemu
void
RoomBase::SanitizeOffsetCenter(IE::point& point) const
{
	const GFX::rect areaRect = AreaRect();
	point.x = std::max(fViewPort.w / 2, (int)point.x);
	point.y = std::max(fViewPort.h / 2, (int)point.y);
	point.x = std::min(areaRect.w - fViewPort.w / 2, (int)point.x);
	point.y = std::min(areaRect.h - fViewPort.h / 2, (int)point.y);
}
コード例 #5
0
ファイル: RoomBase.cpp プロジェクト: jackburton79/bgemu
void
RoomBase::SanitizeOffsetLeftTop(IE::point& point) const
{
	const GFX::rect areaRect = AreaRect();
	point.x = std::max(0, (int)point.x);
	point.y = std::max(0, (int)point.y);
	point.x = std::min((int)point.x, areaRect.w - fViewPort.w);
	point.y = std::min((int)point.y, areaRect.h - fViewPort.h);
}
コード例 #6
0
void
RoomContainer::SetAreaOffset(IE::point point)
{
	GFX::rect areaRect = AreaRect();
	fAreaOffset = point;
	if (fAreaOffset.x < 0)
		fAreaOffset.x = 0;
	else if (fAreaOffset.x + fViewPort.w > areaRect.w)
		fAreaOffset.x = std::max(areaRect.w - fViewPort.w, 0);
	if (fAreaOffset.y < 0)
		fAreaOffset.y = 0;
	else if (fAreaOffset.y + fViewPort.h > areaRect.h)
		fAreaOffset.y = std::max(areaRect.h - fViewPort.h, 0);

	fMapArea = offset_rect_to(fViewPort,
			fAreaOffset.x, fAreaOffset.y);
}
コード例 #7
0
ファイル: RoomBase.cpp プロジェクト: jackburton79/bgemu
void
RoomBase::SetAreaOffset(const IE::point& point)
{
	GFX::rect areaRect = AreaRect();
	fAreaOffset = point;
	if (fAreaOffset.x < 0)
		fAreaOffset.x = 0;
	else if (fAreaOffset.x + fViewPort.w > areaRect.w)
		fAreaOffset.x = std::max(areaRect.w - fViewPort.w, 0);
	if (fAreaOffset.y < 0)
		fAreaOffset.y = 0;
	else if (fAreaOffset.y + fViewPort.h > areaRect.h)
		fAreaOffset.y = std::max(areaRect.h - fViewPort.h, 0);

	fMapArea = gfx_rect_to_rect(offset_rect_to(fViewPort,
			fAreaOffset.x, fAreaOffset.y));
}
コード例 #8
0
ファイル: main.cpp プロジェクト: ducthangho/3D
int test1()
{	
	//srand(1989);
	MyRectangle enclosingRect(40, 40);
	MyRectangle r1(15, 30);
	MyRectangle r2(20, 25);
	MyRectangle r3(9, 7);
	MyRectangle r4(20, 8);
	MyRectangle r5(10, 10);

	std::vector<MyRectangle> listRect;
	listRect.push_back(r1);
	listRect.push_back(r2);
	listRect.push_back(r3);
	listRect.push_back(r4);
	listRect.push_back(r5);

	std::vector<std::vector<AreaRect>> listArea;
	std::vector<AreaRect> row1;
	row1.emplace_back(15, 25, 0, 0, false);
	row1.emplace_back(20, 25, 15, 0, false);
	row1.emplace_back(5, 25, 35, 0, true);

	std::vector<AreaRect> row2;
	row2.emplace_back(15, 5, 0, 25, false);
	row2.emplace_back(20, 5, 15, 25, true);
	row2.emplace_back(5, 5, 35, 25, true);

	std::vector<AreaRect> row3;
	row3.emplace_back(15, 10, 0, 30, true);
	row3.emplace_back(20, 10, 15, 30, true);
	row3.emplace_back(5, 10, 35, 30, true);

	std::vector<AreaRect> row4;
	row4.emplace_back(15, 9, 0, 40, true);
	row4.emplace_back(20, 9, 15, 40, true);
	row4.emplace_back(5, 9, 35, 40, true);

	listArea.push_back(row1);
	listArea.push_back(row2);
	listArea.push_back(row3);
	listArea.push_back(row4);

	vector<vector<AreaRect>> listArea2;
	listArea2.reserve(100000);
	listArea2.emplace_back(1, AreaRect(enclosingRect.w, enclosingRect.h, 0, 0, true));
	
	PackingAlogorithm pa;
	float places[6];

	/*if (pa.findPlace(r1, enclosingRect, listArea2, places))
	{
		r1.x = places[0];
		r1.y = places[1];
		r1.print();
		pa.updateListArea(listArea2, r1, places[2], places[3], places[4], places[5]);
		pa.printListArea(listArea2);
	}
	cout << "--------------------------------" << endl;
	if (pa.findPlace(r2, enclosingRect, listArea2, places))
	{
		r2.x = places[0];
		r2.y = places[1];
		r2.print();
		pa.updateListArea(listArea2, r2, places[2], places[3], places[4], places[5]);
		pa.printListArea(listArea2);
	}
	cout << "--------------------------------" << endl;
	if (pa.findPlace(r5, enclosingRect, listArea2, places))
	{
		r5.x = places[0];
		r5.y = places[1];
		r5.print();
		pa.updateListArea(listArea2, r5, places[2], places[3], places[4], places[5]);
		pa.printListArea(listArea2);
	}
	cout << "--------------------------------" << endl;
	if (pa.findPlace(r4, enclosingRect, listArea2, places))
	{
		r4.x = places[0];
		r4.y = places[1];
		r4.print();
		pa.updateListArea(listArea2, r4, places[2], places[3], places[4], places[5],true);
		pa.printListArea(listArea2);
	}
	cout << "--------------------------------" << endl;
	if (pa.findPlace(r3, enclosingRect, listArea2, places))
	{
		r3.x = places[0];
		r3.y = places[1];
		r3.print();
		cout << "i: " << places[2] << "j: " << places[3] << "er: " << places[4] << "ec: " << places[5];
		pa.updateListArea(listArea2, r3, places[2], places[3], places[4], places[5],true);
		pa.printListArea(listArea2);
	}*/
	/*std::vector<MyRectangle> result = pa.pack(listRect, enclosingRect);
	for (auto& a : result)
	{
		a.print();
	}*/
	

	//std::vector<MyRectangle> listRect;
	Time tt;
	for (int i = 0; i < 20000; i++)
	{
		auto w = rand() % 30 + 1;
		auto h = rand() % 40 + 1;
		MyRectangle a(w,h);
		listRect.push_back(a);
	}
	std::cout << "Data creation time = " << tt.duration() << " ms" << std::endl;
	Time t;
	MyRectangle enclosingRect2(500,500);
	std::vector<MyRectangle> r = pa.pack(listRect, enclosingRect2);
	cout << r.size() << endl;
	std::cout << "Execution time = " << t.duration() << " ms" << std::endl;
	for (auto& a : r)
	{
		a.print();
	}
	return 0;
}
コード例 #9
0
/* virtual */
IE::rect
RoomContainer::Frame() const
{
	return gfx_rect_to_rect(AreaRect());
}
コード例 #10
0
ファイル: RoomBase.cpp プロジェクト: jackburton79/bgemu
/* virtual */
IE::rect
RoomBase::Frame() const
{
	return gfx_rect_to_rect(AreaRect());
}