コード例 #1
0
/* 
======================================									
Listen for possible changes that the selected backdrop (the one where the cursos is over) can suffer
====================================== 
*/
void Listener::ListenHoverBackDrop ()
{
	static int mMouseClickX;
	static int mMouseClickY;

	IND_Entity2d *mBackDropOver = mBackDropNodeOver->GetEntity();

	// -------------------- Translate the selected backdrop image --------------------

	static float mInitialPosX, mInitialPosY;
	float mNewPosX, mNewPosY;

	if (!mIsRotatingBackDrop && !mIsScalingBackDrop)
	{
		if (mI->_input->onMouseButtonPress(IND_MBUTTON_LEFT))
		{
			mMouseClickX = (int) mPosBrushX;
			mMouseClickY = (int) mPosBrushY;

			mInitialPosX = mBackDropOver->getPosX();
			mInitialPosY = mBackDropOver->getPosY();
		}

		if (mI->_input->isMouseButtonPressed (IND_MBUTTON_LEFT))
		{
			mNewPosX = mInitialPosX + (mPosBrushX - mMouseClickX);
			mNewPosY = mInitialPosY + (mPosBrushY - mMouseClickY);

			mBackDropOver->setPosition (mNewPosX, 
										mNewPosY, 
										mBackDropOver->getPosZ());

			mIsTranslatingBackDrop = true;
		}


		if (mI->_input->onMouseButtonRelease(IND_MBUTTON_LEFT))
		{
			mIsTranslatingBackDrop = false;
		}
	}

	// -------------------- Translate pixel by pixel --------------------

	if (mI->_input->onKeyPress	(IND_F))
	{
		mBackDropOver->setPosition (mBackDropOver->getPosX() - 1, 
									mBackDropOver->getPosY(), 
									mBackDropOver->getPosZ());
	}

	if (mI->_input->onKeyPress	(IND_G))
	{
		mBackDropOver->setPosition (mBackDropOver->getPosX() + 1, 
									mBackDropOver->getPosY(), 
									mBackDropOver->getPosZ());
	}

	if (mI->_input->onKeyPress	(IND_C))
	{
		mBackDropOver->setPosition (mBackDropOver->getPosX(), 
									mBackDropOver->getPosY() - 1, 
									mBackDropOver->getPosZ());
	}

	if (mI->_input->onKeyPress	(IND_V))
	{
		mBackDropOver->setPosition (mBackDropOver->getPosX(), 
									mBackDropOver->getPosY() + 1, 
									mBackDropOver->getPosZ());
	}

	// -------------------- Scale the selected backdrop image --------------------

	static float mInitialScale;
	float mNewScale;
	static int mInitialRegionX, mInitialRegionY;
	int mNewRegionX, mNewRegionY;

	if (!mIsRotatingBackDrop && !mIsTranslatingBackDrop)
	{
		if (mI->_input->onMouseButtonPress (IND_MBUTTON_RIGHT) && mI->_input->isKeyPressed (IND_LSHIFT))
		{
			mMouseClickX = (int) mPosBrushX;

			if (!mBackDropOver->ifWrap())
			{
				mInitialScale = mBackDropOver->getScaleX();
			}
			else
			{
				mInitialRegionX = mBackDropOver->getRegionWidth();
				mInitialRegionY = mBackDropOver->getRegionHeight();
			}
		}

		if (mI->_input->isMouseButtonPressed (IND_MBUTTON_RIGHT) && mI->_input->isKeyPressed(IND_LSHIFT))
		{
			mIsScalingBackDrop = true;

			if (!mBackDropOver->ifWrap())
			{	
				mNewScale = mInitialScale + ((mPosBrushX - mMouseClickX) / 1000);
				if (mNewScale < 0.05f) mNewScale = 0.1f;
				mBackDropOver->setScale (mNewScale, mNewScale);
			}
			else
			{
				mNewRegionX = mInitialRegionX + ((int) mPosBrushX - mMouseClickX);
				mNewRegionY = mInitialRegionY + ((int) mPosBrushX - mMouseClickX);
				mBackDropOver->setRegion	(0, 
											0, 
											(int) mNewRegionX, 
											(int) mNewRegionY);

			}
		}

		if (mI->_input->onMouseButtonRelease (IND_MBUTTON_RIGHT))
		{
			mIsScalingBackDrop = false;
		}
	}

	// -------------------- Rotate the selected backdrop image --------------------

	static float mInitialAngle;
	float mNewAngle;

	if (!mIsTranslatingBackDrop && !mIsScalingBackDrop)
	{
		if (mI->_input->onMouseButtonPress (IND_MBUTTON_RIGHT))
		{
			mMouseClickX = (int) mPosBrushX;
			mInitialAngle = mBackDropOver->getAngleZ();
		}

		if (mI->_input->isMouseButtonPressed (IND_MBUTTON_RIGHT))
		{
			mNewAngle = mInitialAngle + (mPosBrushX - mMouseClickX);
			mBackDropOver->setAngleXYZ (0, 0, mNewAngle);
			mIsRotatingBackDrop = true;
		}

		if (mI->_input->onMouseButtonRelease (IND_MBUTTON_RIGHT))
		{
			mIsRotatingBackDrop = false;
		}
	}

	// -------------------- Flip backdrop image --------------------

	if (mI->_input->onKeyPress(IND_T))
	{
		(mBackDropOver->getMirrorX() == true) ? mBackDropOver->setMirrorX (false) : mBackDropOver->setMirrorX (true);
	}

	if (mI->_input->onKeyPress(IND_Y))
	{
		(mBackDropOver->getMirrorY() == true) ? mBackDropOver->setMirrorY (false) : mBackDropOver->setMirrorY (true);
	}

	// -------------------- Transparency --------------------

	if (mI->_input->isKeyPressed (IND_U, 5))
	{
		if (mBackDropOver->getTransparency() > 0) mBackDropOver->setTransparency (mBackDropOver->getTransparency() - 1);
	}

	if (mI->_input->isKeyPressed (IND_I, 5))
	{
		if (mBackDropOver->getTransparency() < 255) mBackDropOver->setTransparency (mBackDropOver->getTransparency() + 1);
	}

	// -------------------- Tiling --------------------

	if (mI->_input->onKeyPress(IND_L) && !mI->_input->isKeyPressed (IND_LCTRL))
	{
		(mBackDropOver->ifWrap() == true) ? mBackDropOver->toggleWrap (false) : mBackDropOver->toggleWrap (true);
		mBackDropOver->setRegion	(0, 
									0, 
									mBackDropOver->getSurface()->getWidth(), 
									mBackDropOver->getSurface()->getHeight());
	}

	// -------------------- Tinting --------------------

	if (mI->_input->isKeyPressed(IND_SPACE))
	{
		mBackDropOver->setTint ((BYTE) mMouseX, (BYTE) mMouseY, (BYTE) mMouseX);
		mIsTintingBackDrop = true;
	}

	if (mI->_input->onKeyRelease(IND_SPACE))
	{
		mIsTintingBackDrop = false;
	}

	// -------------------- Z ordering --------------------

	if (mI->_input->onKeyPress(IND_Z))
	{
		mBackDropOver->setPosition (mBackDropOver->getPosX(), mBackDropOver->getPosY(), mBackDropOver->getPosZ() - 1);
	}

	if (mI->_input->onKeyPress(IND_X))
	{
		mBackDropOver->setPosition (mBackDropOver->getPosX(), mBackDropOver->getPosY(), mBackDropOver->getPosZ() + 1);
	}

	// -------------------- Clone --------------------

	if (mI->_input->isKeyPressed(IND_LSHIFT) && mI->_input->onMouseButtonPress (IND_MBUTTON_LEFT))
	{
		mMap->CloneNode (mBackDropNodeOver);	// Clone node
	}

	// -------------------- Delete --------------------

	if (mI->_input->onKeyPress(IND_DELETE))
	{
		mMap->DeleteNode (mBackDropNodeOver);	// Erase the node from the map vector
	}
}
コード例 #2
0
/*
==================
Main
==================
*/
int IndieLib()			
{
	// ----- IndieLib intialization -----

	CIndieLib *mI = CIndieLib::instance();
	if (!mI->init()) return 0;									

	// ----- Set the primitives into 2d entities -----

	// Pixel
	IND_Entity2d *mPixel = new IND_Entity2d();					
	mI->_entity2dManager->add(mPixel);			
	mPixel->setPrimitive2d(IND_PIXEL);
	mPixel->setPosition(200, 75, 0);
	mPixel->setTint(255, 255, 255);
	
	// Regular poly
	IND_Entity2d *mRegularPoly = new IND_Entity2d();					
	mI->_entity2dManager->add(mRegularPoly);			
	mRegularPoly->setPrimitive2d(IND_REGULAR_POLY);		
	mRegularPoly->setPosition(200, 75, 0);									
	mRegularPoly->setNumSides(5);
	mRegularPoly->setRadius(50);
	mRegularPoly->setTint(255, 0, 0);

	// Line
	IND_Entity2d *mLine  = new IND_Entity2d();					
	mI->_entity2dManager->add(mLine);			
	mLine->setPrimitive2d (IND_LINE);
	mLine->setLine(100, 100, 50, 50);
	mLine->setTint(0, 255, 0);

	// Rectangle
	IND_Entity2d *mRectangle = new IND_Entity2d();					
	mI->_entity2dManager->add(mRectangle);			
	mRectangle->setPrimitive2d(IND_RECTANGLE);
	mRectangle->setRectangle(350, 50, 400, 100);
	mRectangle->setTint(0, 0, 255);

	// Filled rectangle
	IND_Entity2d *mFillRectangle = new IND_Entity2d();					
	mI->_entity2dManager->add(mFillRectangle);			
	mFillRectangle->setPrimitive2d(IND_FILL_RECTANGLE);
	mFillRectangle->setRectangle(550, 40, 650, 110);
	mFillRectangle->setTint(255, 0, 0);
	mFillRectangle->setTransparency(50);

	// 2d Poly
	IND_Entity2d *mPoly2d  = new IND_Entity2d();					
	mI->_entity2dManager->add(mPoly2d);			
	mPoly2d->setPrimitive2d(IND_POLY2D);
	IND_Point mVertPoly2 [] = { {440, 200},  {480, 100},  {450, 10},  {470, 220} };		// Poly points
	mPoly2d->setPolyPoints(mVertPoly2);													
	mPoly2d->setNumLines(3);	 							// Number of edges - 1
	mPoly2d->setTint(255, 128, 255);

	// ----- Main Loop -----

	while (!mI->_input->onKeyPress(IND_ESCAPE) && !mI->_input->quit())
	{
		// ----- Input update -----

		mI->_input->update();

		// ----- Render -----

		mI->_render->clearViewPort (0, 0, 0);
		mI->_render->beginScene();

		// Direct bliting of primitives
		for (int i = 0; i < 400; i += 5)
		{	
			mI->_render->blitLine(70, 150, i * 2, 500, i, 255 -i, 255, 255);
			mI->_render->blitRegularPoly(600, 600, i, 70, 0, 255 - i, i, i*4, 255);
		}

		mI->_entity2dManager->renderEntities2d();
		mI->_render->endScene();	
	}

	// ----- Free -----

	mI->end();

	return 0;
}