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); } }
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); } }