void ParticleEditor::refresh_state_ui() { per_state_info_.clear(); TwRemoveAllVars(state_window_); TwAddVarCB(state_window_, "State Index", TW_TYPE_INT32, TweakBarParticleSetState, TweakBarParticleGetState, nullptr, ""); TwAddButton(state_window_, "Remove State", TweakBarRemoveState, &state_index_, ""); Reflection::Metadata* stateMeta = FindType(ParticleDescription); ParticleCallbackInfo stateInfo; stateInfo.baseData = FindType(ParticleDescription); stateInfo.type = ParticleUiType::State; //once for particle for(auto& it : stateMeta->GetMembers()) { add_members(stateInfo, &it.second, state_window_, "state"); } //once for variance stateInfo.type = ParticleUiType::Variance; for(auto& it : stateMeta->GetMembers()) { add_members(stateInfo, &it.second, state_window_, "variance"); } }
void ParticleEditor::refresh_emitter_ui() { per_emitter_info_.clear(); indices_for_tweakbar_.clear(); TwRemoveAllVars(emitter_window_); TwAddVarCB(emitter_window_, "Emitter Index", TW_TYPE_INT32, TweakBarParticleSetEmitter, TweakBarParticleGetEmitter, nullptr, ""); TwAddButton(emitter_window_, "Remove Emitter", TweakBarRemoveEmitter, &emitter_index_, ""); TwAddButton(emitter_window_, "Add State", TweakBarAddState, nullptr, ""); Reflection::Metadata* emitterMeta = FindType(ParticleEmitter); ParticleCallbackInfo emitterInfo; emitterInfo.baseData = emitterMeta; emitterInfo.type = ParticleUiType::Emitter; //first typical bullshit for(auto& it : emitterMeta->GetMembers()) { add_members(emitterInfo, &it.second, emitter_window_); } //so here we have to add controls to toggle interpolation //either something interpolates or it doesn't no selective interpolation for certain states Reflection::Metadata* stateMeta = FindType(ParticleDescription); ParticleCallbackInfo stateInfo; stateInfo.baseData = FindType(ParticleDescription); stateInfo.type = ParticleUiType::State; per_emitter_info_.push_back(stateInfo); void* dataToSend = &per_emitter_info_.back(); int index = 0; for(auto& it : stateMeta->GetMembers()) { indices_for_tweakbar_.push_back(index); ++index; TwAddVarCB(emitter_window_, it.second.GetName().c_str(), TW_TYPE_STDSTRING, TweakBarParticleSetRegistered, TweakBarParticleGetRegistered, &indices_for_tweakbar_.back(), "group = 'registered vars'"); } refresh_state_ui(); }
void CommandAddRefs::read_input_files() { m_vout << "Reading input files...\n"; for (const std::string& file_name : m_input_filenames) { osmium::io::Reader reader(file_name, osmium::osm_entity_bits::object); while (osmium::memory::Buffer buffer = reader.read()) { for (auto it = buffer.begin<osmium::OSMObject>(); it != buffer.end<osmium::OSMObject>(); ++it) { if (it->type() == osmium::item_type::node) { m_node_ids.insert(it->id()); } else if (it->type() == osmium::item_type::way) { m_way_ids.insert(it->id()); add_nodes(static_cast<const osmium::Way&>(*it)); } else if (it->type() == osmium::item_type::relation) { m_relation_ids.insert(it->id()); add_members(static_cast<const osmium::Relation&>(*it)); } } } reader.close(); } }
void ParticleEditor::refresh_system_ui() { per_system_info_.clear(); TwRemoveAllVars(system_window_); TwAddVarCB(system_window_, "System Index", TW_TYPE_INT32, TweakBarParticleSetSystem, TweakBarParticleGetSystem, nullptr, ""); TwAddButton(system_window_, "Remove System", TweakBarRemoveSystem, &system_index_, ""); TwAddButton(system_window_, "Add Emitter", TweakBarAddEmitter, nullptr, ""); Reflection::Metadata* systemMeta = FindType(ParticleSystem); ParticleCallbackInfo systemInfo; systemInfo.baseData = FindType(ParticleSystem); systemInfo.type = ParticleUiType::System; for(auto& it : systemMeta->GetMembers()) { add_members(systemInfo, &it.second, system_window_); } refresh_emitter_ui(); }
void ParticleEditor::add_members(ParticleCallbackInfo& info, Reflection::Member* base, TwBar* bar, const std::string& group) { info.members.push_back(base); if(base->GetType() != FindType(Vector4)) { for(auto& it : base->GetType()->GetMembers()) { add_members(info, &it.second, bar, group); } } void* dataToSend = nullptr; switch(info.type) { case ParticleUiType::Emitter: per_emitter_info_.push_back(info); dataToSend = &per_emitter_info_.back(); break; case ParticleUiType::System: per_system_info_.push_back(info); dataToSend = &per_system_info_.back(); break; case ParticleUiType::State: case ParticleUiType::Variance: per_state_info_.push_back(info); dataToSend = &per_state_info_.back(); break; default: __debugbreak(); } std::string fullName = group + " "; Reflection::Metadata* type = base->GetType(); for(auto& it : info.members) { fullName.append(it->GetName() + " "); } TwType varType = FindTwType(type); std::string tweakVars = " group='" + group + "'"; if(varType == TW_TYPE_FLOAT || varType == TW_TYPE_COLOR4F) { tweakVars += " step=0.05 "; } if(varType == TW_TYPE_STDSTRING) { TwAddVarCB(bar, fullName.c_str(), FindTwType(type), TweakBarParticleSetString, TweakBarParticleGetString, dataToSend, tweakVars.c_str()); } else { TwAddVarCB(bar, fullName.c_str(), FindTwType(type), TweakBarParticleSet, TweakBarParticleGet, dataToSend, tweakVars.c_str()); } info.members.pop_back(); }