void ParticleDesc::parseOut(ParserGroup& g) { ParserGroup cg; colorTrack.parseOut(cg); g.addSubGroup("color_track", cg); ParserGroup ag; alphaTrack.parseOut(ag); g.addSubGroup("alpha_track", ag); ParserGroup sg; sizeTrack.parseOut(sg); g.addSubGroup("size_track", sg); texInfo.parseOut(g); ::parseOut(g, "name", mName); ::parseOut(g, "min_angle", minAngle); ::parseOut(g, "max_angle", maxAngle); ::parseOut(g, "min_spin", minSpin); ::parseOut(g, "max_spin", maxSpin); ::parseOut(g, "min_life", minLife); ::parseOut(g, "max_life", maxLife); ::parseOut(g, "draw_style", drawStyle); ::parseOut(g, "gravity_multiplier", gravityMultiplier); ::parseOut(g, "drag_factor", dragFactor); ::parseOut(g, "drag_function_by_velocity", dragFuncByVelocity); ::parseOut(g, "drag_function_by_size", dragFuncBySize); ::parseOut(g, "collition_type", collisionType); ::parseOut(g, "bounce", bounce); }
void CloudParticleSystem::parseFrom(const ParserGroup& pg, const util::SoundMaterialParser &materialParser) { defaultParseFrom(pg, *m_eds); m_eds->shape = pg.getValue("shape", ""); m_eds->randomDirection = static_cast<bool>(convertFromString<int>(pg.getValue("random_direction", ""), 0)); if(m_eds->shape == "sphere") { boost::shared_ptr<CloudParticleSystemShape> sphere(new CloudParticleSystemSphere); m_shape.swap(sphere); m_eds->sphereInnerRadius = convertFromString<float>(pg.getValue("sphere_inner_radius", ""), 0); m_eds->sphereOuterRadius = convertFromString<float>(pg.getValue("sphere_outer_radius", ""), 0); } else if(m_eds->shape == "box") { boost::shared_ptr<CloudParticleSystemShape> box(new CloudParticleSystemBox); m_shape.swap(box); m_eds->boxMin = convertVectorFromString(pg.getValue("box_min", "0,0,0")); m_eds->boxMax = convertVectorFromString(pg.getValue("box_max", "0,0,0")); } else if(m_eds->shape == "cylinder") { boost::shared_ptr<CloudParticleSystemShape> cyl(new CloudParticleSystemCylinder); m_shape.swap(cyl); m_eds->cylinderHeight = convertFromString<float>(pg.getValue("cylinder_height", ""), 0); m_eds->cylinderRadius = convertFromString<float>(pg.getValue("cylinder_radius", ""), 0); } else { assert(!"unkown or undefined shape type"); } }
void Parser::DebugPrint() { // Remove old fclose( fopen("ParserDebug.txt", "wb") ); for(group_map::iterator it = groups.begin(); it != groups.end(); ++it) { std::string group_name = (*it).first; ParserGroup group = (*it).second; WriteMessage("%s", group_name.c_str()); group.DebugPrint(); WriteMessage("\r\n"); } }
void PointArrayParticleSystem::parseFrom(const ParserGroup& pg, const util::SoundMaterialParser &materialParser) { defaultParseFrom(pg, *m_eds); m_eds->modelFile = pg.getValue("model", ""); m_eds->firstVertex = convertFromString<int>(pg.getValue("first_vertex", ""), 0); m_eds->lastVertex = convertFromString<int>(pg.getValue("last_vertex", ""), 0); m_eds->scale = convertVectorFromString(pg.getValue("scale", "1,1,1")); m_eds->rotation = convertVectorFromString(pg.getValue("rotation", "0,0,0")); m_eds->useNormalsAsDirection = static_cast<bool>(convertFromString<int>(pg.getValue("direction_from_normals", ""), 0)); m_eds->useBinormalsAsDirection = static_cast<bool>(convertFromString<int>(pg.getValue("direction_from_binormals", ""), 0)); m_eds->randomizeBetweenVertices = static_cast<bool>(convertFromString<int>(pg.getValue("positions_between_vertices", ""), 0)); m_eds->planePositions = static_cast<bool>(convertFromString<int>(pg.getValue("plane_positions", ""), 0)); }
void ParticleDesc::TextureInfo::parseIn(ParserGroup& prev) { ParserGroup& g = prev.getSubGroup("texture_info"); ::parseIn(g, "name", name); ::parseIn(g, "path", path); ::parseIn(g, "frames", nFrames); ::parseIn(g, "frame_width", columns); ::parseIn(g, "frame_height", rows); ::parseIn(g, "alpha_type", alphaType); ::parseIn(g, "start_frame", startFrame); ::parseIn(g, "frames_per_sec", fps); }
ParamUIData(Dialog& parent, int id, ParserGroup& parser, const std::vector<ParamDesc>& pd) : dlg(id, parent.getWindowHandle()), data(parser, dlg, pd, cmds), updateCommand(data) { for(unsigned int i = 0; i < pd.size(); i++) { if(pd[i].type == PARAM_INT) { int value = convertFromString<int>(parser.getValue(pd[i].name, ""), convertFromString<int>(pd[i].defaultValue, 0)); setDialogItemInt(dlg, pd[i].id1, value); } if(pd[i].type == PARAM_BOOL) { bool value = convertFromString<bool>(parser.getValue(pd[i].name, ""), convertFromString<bool>(pd[i].defaultValue, false)); enableCheck(dlg, pd[i].id1, value); } if(pd[i].type == PARAM_FLOAT) { float value = convertFromString<float>(parser.getValue(pd[i].name, ""), convertFromString<float>(pd[i].defaultValue, 0.f)); setDialogItemFloat(dlg, pd[i].id1, value); } if(pd[i].type == PARAM_VECTOR) { Vector value = convertVectorFromString(parser.getValue(pd[i].name, "0,0,0")); setDialogItemFloat(dlg, pd[i].id1, value.x); setDialogItemFloat(dlg, pd[i].id2, value.y); setDialogItemFloat(dlg, pd[i].id3, value.z); } if(pd[i].type == PARAM_ANIMATED_FLOAT) { boost::shared_ptr<ICommand> c(new AnimatedFloatCommand(dlg, parser.getSubGroup(pd[i].name))); cmds[pd[i].name] = c; dlg.getCommandList().addCommand(pd[i].id1, c.get()); } if(pd[i].type == PARAM_ANIMATED_VECTOR) { boost::shared_ptr<ICommand> c(new AnimatedVectorCommand(dlg, parser.getSubGroup(pd[i].name))); cmds[pd[i].name] = c; dlg.getCommandList().addCommand(pd[i].id1, c.get()); } if(pd[i].type == PARAM_STRING) { std::string str = parser.getValue(pd[i].name, pd[i].defaultValue); setDialogItemText(dlg, pd[i].id1, str); } if(pd[i].type == PARAM_FILE) { std::string str = parser.getValue(pd[i].name, ""); boost::shared_ptr<ICommand> c(new FileCommand(str, pd[i].ext, pd[i].path, dlg, pd[i].id2)); cmds[pd[i].name] = c; dlg.getCommandList().addCommand(pd[i].id1, c.get()); } if(pd[i].type == PARAM_SELECTION) { ComboBox_ResetContent(dlg.getItem(pd[i].id1)); std::string sel = parser.getValue(pd[i].name, ""); bool found = false; for(unsigned int j = 0; j < pd[i].selections.size(); j++) { ComboBox_AddString(dlg.getItem(pd[i].id1), pd[i].selections[j].c_str()); if(pd[i].selections[j] == sel) { ComboBox_SetCurSel(dlg.getItem(pd[i].id1), j); found = true; } } if(!found) ComboBox_SetCurSel(dlg.getItem(pd[i].id1), 0); } } dlg.getCommandList().addCommand(IDC_UPDATE, &updateCommand); }