コード例 #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
	}
}