bool ParticleEditor::OpenParticleBMP(char *oFilePathName, char *oFileName)
{
	FILE_FORM_FILTER filter(GS_L("Supported image files"), GS_L("png,bmp,tga,jpg,jpeg,dds"));
	std::string initDir = GetCurrentProjectPath(true) + "particles/";
	Platform::FixSlashes(initDir);
	return OpenForm(filter, initDir.c_str(), oFilePathName, oFileName);
}
bool ParticleEditor::SaveSystem(char *oFilePathName, char *oFileName)
{
	FILE_FORM_FILTER filter(GS_L("Particle effect file (*.par)"), GS_L("par"));
	std::string initDir = GetCurrentProjectPath(true) + "effects/";
	Platform::FixSlashes(initDir);
	return SaveForm(filter, initDir.c_str(), oFilePathName, oFileName);
}
bool ParticleEditor::OpenSoundFX(char *oFilePathName, char *oFileName)
{
	FILE_FORM_FILTER filter(GS_L("Supported sound files"), GS_L("ogg,wav,mp3"));
	std::string initDir = GetCurrentProjectPath(true) + "soundfx/";
	Platform::FixSlashes(initDir);
	return OpenForm(filter, initDir.c_str(), oFilePathName, oFileName);
}
void ParticleEditor::LoadSoundFX(const char *path, const char *file)
{
	std::string programPath = GetCurrentProjectPath(false);
	ETHGlobal::CopyFileToProject(utf8::c(programPath).wstr(), utf8::c(path).wstr(), ETHDirectories::GetSoundFXDirectory(), m_provider->GetFileManager());
	m_manager->SetSoundEffect(m_provider->GetAudio()->LoadSampleFromFile(utf8::c(path).wc_str(), m_provider->GetFileManager(), Audio::SOUND_EFFECT));
	m_system.soundFXFile = utf8::c(file).wstr();
	m_manager->SetSystem(m_system);
}
void ProjectManager::PrepareProjectDir()
{
	const ETH_FILE_TO_COPY fileToCopy[] = 
	{
		{"data/default_nm.png", true},
		{"data/shadow.dds", true},
		{"data/shadow.png", true},
		{"data/Verdana14_shadow.fnt", true},
		{"data/Verdana14_shadow_0.png", true},
		{"data/Verdana20.fnt", true},
		{"data/Verdana20_0.png", true},
		{"data/Verdana20_shadow.fnt", true},
		{"data/Verdana20_shadow.png", true},
		{"data/Verdana24.fnt", true},
		{"data/Verdana24_0.png", true},
		{"data/Verdana24_shadow.fnt", true},
		{"data/Verdana24_shadow.png", true},
		{"data/Verdana30.fnt", true},
		{"data/Verdana30_0.png", true},
		{"data/Verdana30_shadow.fnt", true},
		{"data/Verdana30_shadow.png", true},
		{"data/Verdana64.fnt", true},
		{"data/Verdana64_0.png", true},
		{"data/Verdana64_1.png", true},
		{"data/Verdana64_shadow.fnt", true},
		{"data/Verdana64_shadow_0.png", true},
		{"data/Verdana64_shadow_1.png", true},
		{"effects/readme.txt", true},
		{"entities/readme.txt", true},
		{"entities/normalmaps/readme.txt", true},
		{"particles/readme.txt", true},
		{"particles/particle.png", true},
		{"scenes/readme.txt", true},
		{"soundfx/readme.txt", true},
		{"app.enml", false},
		#if defined(WIN32) || defined(_WIN32) || defined(WINDOWS) || defined(__WIN32__)
		 {"machine.exe", true},
		 {"audiere.dll", true},
		 {"cg.dll", true},
		 {"cgD3D9.dll", true},
		 {"d3dx9_42.dll", true},
		#endif
		{utf8::Converter(_ETH_DEFAULT_MAIN_SCRIPT_FILE).str(), false},
		{"eth_util.angelscript", false},
		{"Collide.angelscript", true},
	};

	const std::string programPath = utf8::c(m_provider->GetFileIOHub()->GetProgramDirectory()).c_str();
	const std::string sProjectPath = GetCurrentProjectPath(true);
	const unsigned int size = sizeof(fileToCopy)/sizeof(ETH_FILE_TO_COPY);
	for (unsigned int t=0; t<size; t++)
	{
		const std::string sNewFolder = sProjectPath + fileToCopy[t].file;
		Platform::CreateDirectory(Platform::GetFileDirectory(utf8::c(sNewFolder).c_str()));
		ETHGlobal::_MoveFile( utf8::c(programPath + fileToCopy[t].file).wstr(), utf8::c(sNewFolder).wstr(), fileToCopy[t].overwrite);
	}
}
void ParticleEditor::ParticlePanel()
{
	std::string programPath = GetCurrentProjectPath(false);
	const VideoPtr& video = m_provider->GetVideo();
	const InputPtr& input = m_provider->GetInput();

	GSGUI_BUTTON file_r = m_fileMenu.PlaceMenu(Vector2(0,m_menuSize*2));
	if (file_r.text == LOAD_BMP)
	{
		char path[___OUTPUT_LENGTH], file[___OUTPUT_LENGTH];
		if (OpenParticleBMP(path, file))
		{
			ETHGlobal::CopyFileToProject(programPath, path, ETHDirectories::GetParticlesDirectory(), m_provider->GetFileManager());
			m_system.bitmapFile = file;
			m_provider->GetGraphicResourceManager()->ReleaseResource(m_system.bitmapFile);
			m_manager = ETHParticleManagerPtr(
				new ETHParticleManager(m_provider, m_system, m_v2Pos, Vector3(m_v2Pos, 0), m_systemAngle, 1.0f));
		}
	}

	if (file_r.text == SAVE_SYSTEM)
	{
		if (m_untitled)
			SaveAs();
		else
			Save();
	}

	if (file_r.text == SAVE_SYSTEM_AS)
	{
		SaveAs();
	}

	if (file_r.text == LOAD_BG)
	{
		char path[___OUTPUT_LENGTH], file[___OUTPUT_LENGTH];
		if (OpenParticleBMP(path, file))
		{
			m_backgroundSprite = video->CreateSprite(path);
		}	
	}

	if (file_r.text == OPEN_SYSTEM)
	{
		m_systemAngle = 0.0f;
		char path[___OUTPUT_LENGTH], file[___OUTPUT_LENGTH];
		if (OpenSystem(path, file))
		{
			m_manager = ETHParticleManagerPtr(
				new ETHParticleManager(m_provider, path, m_v2Pos, Vector3(m_v2Pos, 0), m_systemAngle));
			m_manager->SetZPosition(0.0f);
			m_manager->Kill(false);
			m_system = *m_manager->GetSystem();
			SetMenuConstants();

			SetCurrentFile(path);
			m_untitled = false;
		}
	}

	if (file_r.text == _S_GOTO_PROJ)
	{
		m_projManagerRequested = true;
	}

	if (input->GetKeyState(GSK_K) == GSKS_HIT)
		m_manager->Kill(!m_manager->Killed());
	
	if (!m_fileMenu.IsActive())
	{
		Vector2 v2ScreenDim = video->GetScreenSizeF();
		float menu = m_menuSize*m_menuScale+(m_menuSize*2);

		// places the alpha mode menu
		ShadowPrint(Vector2(v2ScreenDim.x-m_alphaModes.GetWidth(), menu), GS_L("Alpha mode:"), GS_L("Verdana14_shadow.fnt"), gs2d::constant::WHITE);
		menu += m_menuSize;
		m_alphaModes.PlaceMenu(Vector2(v2ScreenDim.x-m_alphaModes.GetWidth(), menu)); menu += m_alphaModes.GetNumButtons()*m_menuSize;

		// sets the alpha mode according to the selected item
		if (m_alphaModes.GetButtonStatus(ALPHA_MODE_PIXEL))
			m_system.alphaMode = Video::AM_PIXEL;
		if (m_alphaModes.GetButtonStatus(ALPHA_MODE_ADD))
			m_system.alphaMode = Video::AM_ADD;
		if (m_alphaModes.GetButtonStatus(ALPHA_MODE_MODULATE))
			m_system.alphaMode = Video::AM_MODULATE;

		// places the sprite cut fields to the right
		menu += m_menuSize/2;
		ShadowPrint(Vector2(v2ScreenDim.x-m_alphaModes.GetWidth(), menu), GS_L("Sprite cut:"), GS_L("Verdana14_shadow.fnt"), gs2d::constant::WHITE);
		menu += m_menuSize;
		m_system.spriteCut.x = Max(1, static_cast<int>(m_spriteCut[0].PlaceInput(Vector2(v2ScreenDim.x-m_alphaModes.GetWidth(),menu)))); menu += m_menuSize;
		m_system.spriteCut.y = Max(1, static_cast<int>(m_spriteCut[1].PlaceInput(Vector2(v2ScreenDim.x-m_alphaModes.GetWidth(),menu)))); menu += m_menuSize;

		// if there is sprite animation in the particle system, places the animation mode selector
		if (m_system.spriteCut.x > 1 || m_system.spriteCut.y > 1)
		{
			menu += m_menuSize/2;
			m_animationModes.PlaceMenu(Vector2(v2ScreenDim.x-m_animationModes.GetWidth(), menu)); menu += m_animationModes.GetNumButtons()*m_menuSize;

			if (m_animationModes.GetButtonStatus(ANIMATION_MODE_ANIMATE))
				m_system.animationMode = ETHParticleSystem::PLAY_ANIMATION;
			if (m_animationModes.GetButtonStatus(ANIMATION_MODE_PICK))
				m_system.animationMode = ETHParticleSystem::PICK_RANDOM_FRAME;
		}

		// inputs all data
		menu = m_menuSize*m_menuScale+(m_menuSize*2);
		menu += m_menuSize/2;
		ShadowPrint(Vector2(0.0f,menu), GS_L("Particles:"), GS_L("Verdana14_shadow.fnt"), gs2d::constant::WHITE);
		int nParticles = m_particles.PlaceInput(Vector2(m_menuWidth,menu)); menu += m_menuSize;

		ShadowPrint(Vector2(0.0f,menu), GS_L("Repeats:"), GS_L("Verdana14_shadow.fnt"), gs2d::constant::WHITE);
		m_system.repeat = m_repeats.PlaceInput(Vector2(m_menuWidth,menu)); menu += m_menuSize;
		menu += m_menuSize/2;

		if (nParticles != m_system.nParticles && nParticles > 0)
		{
			m_system.nParticles = nParticles;
			m_manager = ETHParticleManagerPtr(
				new ETHParticleManager(m_provider, m_system, m_v2Pos, Vector3(m_v2Pos, 0), m_systemAngle, 1.0f));
			m_manager->Kill(false);
		}

		m_system.gravityVector.x = m_gravity[0].PlaceInput(Vector2(0.0f,menu), Vector2(0.0f, v2ScreenDim.y-m_menuSize), m_menuSize); menu += m_menuSize;
		m_system.gravityVector.y = m_gravity[1].PlaceInput(Vector2(0.0f,menu), Vector2(0.0f, v2ScreenDim.y-m_menuSize), m_menuSize); menu += m_menuSize;

		m_system.directionVector.x = m_direction[0].PlaceInput(Vector2(0.0f,menu), Vector2(0.0f, v2ScreenDim.y-m_menuSize), m_menuSize); menu += m_menuSize;
		m_system.directionVector.y = m_direction[1].PlaceInput(Vector2(0.0f,menu), Vector2(0.0f, v2ScreenDim.y-m_menuSize), m_menuSize); menu += m_menuSize;

		m_system.randomizeDir.x = m_randDir[0].PlaceInput(Vector2(0.0f,menu), Vector2(0.0f, v2ScreenDim.y-m_menuSize), m_menuSize); menu += m_menuSize;
		m_system.randomizeDir.y = m_randDir[1].PlaceInput(Vector2(0.0f,menu), Vector2(0.0f, v2ScreenDim.y-m_menuSize), m_menuSize); menu += m_menuSize;
		menu += m_menuSize/2;

		m_system.boundingSphere = m_boundingSphere.PlaceInput(Vector2(0.0f,menu), Vector2(0.0f, v2ScreenDim.y-m_menuSize), m_menuSize); menu += m_menuSize;
		m_system.allAtOnce = (bool)(m_allAtOnce.PlaceInput(Vector2(0.0f,menu), Vector2(0.0f, v2ScreenDim.y-m_menuSize), m_menuSize) != 0); menu += m_menuSize;
		menu += m_menuSize/2;

		m_system.startPoint.x = m_startPoint[0].PlaceInput(Vector2(0.0f,menu), Vector2(0.0f, v2ScreenDim.y-m_menuSize), m_menuSize); menu += m_menuSize;
		m_system.startPoint.y = m_startPoint[1].PlaceInput(Vector2(0.0f,menu), Vector2(0.0f, v2ScreenDim.y-m_menuSize), m_menuSize); menu += m_menuSize;
		menu += m_menuSize/2;

		m_system.randStartPoint.x = m_randStart[0].PlaceInput(Vector2(0.0f,menu), Vector2(0.0f, v2ScreenDim.y-m_menuSize), m_menuSize); menu += m_menuSize;
		m_system.randStartPoint.y = m_randStart[1].PlaceInput(Vector2(0.0f,menu), Vector2(0.0f, v2ScreenDim.y-m_menuSize), m_menuSize); menu += m_menuSize;
		menu += m_menuSize/2;

		m_system.color0.w = m_color0[0].PlaceInput(Vector2(0.0f,menu), Vector2(0.0f, v2ScreenDim.y-m_menuSize), m_menuSize); menu += m_menuSize;
		m_system.color0.x = m_color0[1].PlaceInput(Vector2(0.0f,menu), Vector2(0.0f, v2ScreenDim.y-m_menuSize), m_menuSize); menu += m_menuSize;
		m_system.color0.y = m_color0[2].PlaceInput(Vector2(0.0f,menu), Vector2(0.0f, v2ScreenDim.y-m_menuSize), m_menuSize); menu += m_menuSize;
		m_system.color0.z = m_color0[3].PlaceInput(Vector2(0.0f,menu), Vector2(0.0f, v2ScreenDim.y-m_menuSize), m_menuSize); menu += m_menuSize;
		menu += m_menuSize/2;

		m_system.color1.w = m_color1[0].PlaceInput(Vector2(0.0f,menu), Vector2(0.0f, v2ScreenDim.y-m_menuSize), m_menuSize); menu += m_menuSize;
		m_system.color1.x = m_color1[1].PlaceInput(Vector2(0.0f,menu), Vector2(0.0f, v2ScreenDim.y-m_menuSize), m_menuSize); menu += m_menuSize;
		m_system.color1.y = m_color1[2].PlaceInput(Vector2(0.0f,menu), Vector2(0.0f, v2ScreenDim.y-m_menuSize), m_menuSize); menu += m_menuSize;
		m_system.color1.z = m_color1[3].PlaceInput(Vector2(0.0f,menu), Vector2(0.0f, v2ScreenDim.y-m_menuSize), m_menuSize); menu += m_menuSize;
		menu += m_menuSize/2;

		m_system.size = m_size.PlaceInput(Vector2(0.0f,menu), Vector2(0.0f, v2ScreenDim.y-m_menuSize), m_menuSize); menu += m_menuSize;
		m_system.growth = m_growth.PlaceInput(Vector2(0.0f,menu), Vector2(0.0f, v2ScreenDim.y-m_menuSize), m_menuSize); menu += m_menuSize;
		m_system.randomizeSize = m_randSize.PlaceInput(Vector2(0.0f,menu), Vector2(0.0f, v2ScreenDim.y-m_menuSize), m_menuSize); menu += m_menuSize;
		menu += m_menuSize/2;

		m_system.lifeTime = m_lifeTime.PlaceInput(Vector2(0.0f,menu), Vector2(0.0f, v2ScreenDim.y-m_menuSize), m_menuSize); menu += m_menuSize;
		m_system.randomizeLifeTime = m_randLifeTime.PlaceInput(Vector2(0.0f,menu), Vector2(0.0f, v2ScreenDim.y-m_menuSize), m_menuSize); menu += m_menuSize;
		menu += m_menuSize/2;

		m_system.angleStart = m_angleStart.PlaceInput(Vector2(0.0f,menu), Vector2(0.0f, v2ScreenDim.y-m_menuSize), m_menuSize); menu += m_menuSize;
		m_system.angleDir = m_angle.PlaceInput(Vector2(0.0f,menu), Vector2(0.0f, v2ScreenDim.y-m_menuSize), m_menuSize); menu += m_menuSize;
		m_system.randAngle = m_randAngle.PlaceInput(Vector2(0.0f,menu), Vector2(0.0f, v2ScreenDim.y-m_menuSize), m_menuSize); menu += m_menuSize;
		m_system.randAngleStart = m_randAngleStart.PlaceInput(Vector2(0.0f,menu), Vector2(0.0f, v2ScreenDim.y-m_menuSize), m_menuSize); menu += m_menuSize;
		menu += m_menuSize/2;

		m_system.minSize = m_minSize.PlaceInput(Vector2(0.0f,menu), Vector2(0.0f, v2ScreenDim.y-m_menuSize), m_menuSize); menu += m_menuSize;
		m_system.maxSize = m_maxSize.PlaceInput(Vector2(0.0f,menu), Vector2(0.0f, v2ScreenDim.y-m_menuSize), m_menuSize); menu += m_menuSize;
		menu += m_menuSize/2;

		m_system.emissive.x = m_luminance[0].PlaceInput(Vector2(0.0f,menu), Vector2(0.0f, v2ScreenDim.y-m_menuSize), m_menuSize); menu += m_menuSize;
		m_system.emissive.y = m_luminance[1].PlaceInput(Vector2(0.0f,menu), Vector2(0.0f, v2ScreenDim.y-m_menuSize), m_menuSize); menu += m_menuSize;
		m_system.emissive.z = m_luminance[2].PlaceInput(Vector2(0.0f,menu), Vector2(0.0f, v2ScreenDim.y-m_menuSize), m_menuSize); menu += m_menuSize;
		menu += m_menuSize/2;

		m_manager->SetSystem(m_system);
	}
}
Exemple #7
0
void ProjectManager::PrepareProjectDir()
{
	const ETH_FILE_TO_COPY fileToCopy[] = 
	{
		{"data/default_nm.png", true},
		{"data/defaultVS.cg", true},
		{"data/dynaShadowVS.cg", true},
		{"data/hAmbientVS.cg", true},
		{"data/hPixelLightDiff.cg", true},
		{"data/hPixelLightSpec.cg", true},
		{"data/hPixelLightVS.cg", true},
		{"data/hVertexLightShader.cg", true},
		{"data/vAmbientVS.cg", true},
		{"data/vPixelLightDiff.cg", true},
		{"data/vPixelLightSpec.cg", true},
		{"data/vPixelLightVS.cg", true},
		{"data/vVertexLightShader.cg", true},
		{"data/particleVS.cg", true},
		{"data/shadow.dds", true},
		{"data/shadow.png", true},
		{"data/Verdana14_shadow.fnt", true},
		{"data/Verdana14_shadow_0.png", true},
		{"data/Verdana20.fnt", true},
		{"data/Verdana20_0.png", true},
		{"data/Verdana20_shadow.fnt", true},
		{"data/Verdana20_shadow.png", true},
		{"data/Verdana24.fnt", true},
		{"data/Verdana24_0.png", true},
		{"data/Verdana24_shadow.fnt", true},
		{"data/Verdana24_shadow.png", true},
		{"data/Verdana30.fnt", true},
		{"data/Verdana30_0.png", true},
		{"data/Verdana30_shadow.fnt", true},
		{"data/Verdana30_shadow.png", true},
		{"data/Verdana64.fnt", true},
		{"data/Verdana64_0.png", true},
		{"data/Verdana64_1.png", true},
		{"data/Verdana64_shadow.fnt", true},
		{"data/Verdana64_shadow_0.png", true},
		{"data/Verdana64_shadow_1.png", true},
		{"effects/readme.txt", true},
		{"entities/readme.txt", true},
		{"entities/normalmaps/readme.txt", true},
		{"particles/readme.txt", true},
		{"particles/particle.png", true},
		{"scenes/readme.txt", true},
		{"soundfx/readme.txt", true},
		{"app.enml", true},
		{"machine.exe", true},
		{"audiere.dll", true},
		{"cg.dll", true},
		{"cgD3D9.dll", true},
		{"d3dx9_42.dll", true},
		{utf8::Converter(_ETH_DEFAULT_MAIN_SCRIPT_FILE).str(), false},
		{"eth_util.angelscript", false},
		{"Collide.angelscript", true},
	};

	const string programPath = utf8::c(m_provider->GetFileIOHub()->GetProgramDirectory()).c_str();
	const string sProjectPath = GetCurrentProjectPath(true);
	const unsigned int size = sizeof(fileToCopy)/sizeof(ETH_FILE_TO_COPY);
	for (unsigned int t=0; t<size; t++)
	{
		const string sNewFolder = sProjectPath + fileToCopy[t].file;
		_mkdir(ETHGlobal::GetPathName(sNewFolder.c_str(), true).c_str());
		ETHGlobal::_MoveFile( utf8::c(programPath + fileToCopy[t].file).wstr(), utf8::c(sNewFolder).wstr(), fileToCopy[t].overwrite);
	}
}