bool Model::ParseLine(const std::vector<ci_string> &token){ if (token.empty() == false){ if (token[0].empty() == false && token[0][0] == '#') return true; else if (token[0] == "name"){ assert(token.size() > 2); assert(token[1] == "="); mName = token[2]; } else if (token[0] == "position"){ assert(token.size() > 4); assert(token[1] == "="); mPosition.x = static_cast<float>(atof(token[2].c_str())); mPosition.y = static_cast<float>(atof(token[3].c_str())); mPosition.z = static_cast<float>(atof(token[4].c_str())); } else if (token[0] == "rotation"){ assert(token.size() > 4); assert(token[1] == "="); mRotationAxis.x = static_cast<float>(atof(token[2].c_str())); mRotationAxis.y = static_cast<float>(atof(token[3].c_str())); mRotationAxis.z = static_cast<float>(atof(token[4].c_str())); mRotationAngleInDegrees = static_cast<float>(atof(token[5].c_str())); glm::normalize(mRotationAxis); } else if (token[0] == "scaling"){ assert(token.size() > 4); assert(token[1] == "="); mScaling.x = static_cast<float>(atof(token[2].c_str())); mScaling.y = static_cast<float>(atof(token[3].c_str())); mScaling.z = static_cast<float>(atof(token[4].c_str())); } else if (token[0] == "animation"){ assert(token.size() > 2); assert(token[1] == "="); ci_string animName = token[2]; mAnimation = World::GetInstance()->FindAnimation(animName); } else if (token[0] == "particlesystem"){ assert(token.size() > 2); assert(token[1] == "="); assert(token[2] == "\"snow\"" || token[2] == "\"fountain\""); // only to hardcoded particle systems ParticleEmitter* emitter = new ParticleEmitter(vec3(0.0f, 0.0f, 0.0f), this); ParticleDescriptor* desc = new ParticleDescriptor(); if (token[2] == "\"snow\"") desc->SetSnowDescriptor(); else if (token[2] == "\"fountain\"") desc->SetFountainDescriptor(); mParticleSystem = new ParticleSystem(emitter, desc); World::GetInstance()->AddParticleSystem(mParticleSystem); } else return false; } return true; }
bool Model::ParseLine(const std::vector<ci_string> &token) { if (token.empty() == false) { if (token[0].empty() == false && token[0][0] == '#') { return true; } else if (token[0] == "name") { assert(token.size() > 2); assert(token[1] == "="); mName = token[2]; } else if (token[0] == "physics"){ assert(token.size() > 2); assert(token[1] == "="); auto physics_type = token[2]; if (physics_type == "none"){ mPhysicsType = None; } else if (physics_type == "dynamic"){ mPhysicsType = Dynamic; } else if (physics_type == "static"){ mPhysicsType = Static; } else if (physics_type == "kinematic"){ mPhysicsType = Kinematic; } else{ assert(!"physics type invalid!"); } } else if (token[0] == "position") { assert(token.size() > 4); assert(token[1] == "="); mPosition.x = static_cast<float>(atof(token[2].c_str())); mPosition.y = static_cast<float>(atof(token[3].c_str())); mPosition.z = static_cast<float>(atof(token[4].c_str())); } else if (token[0] == "rotation") { assert(token.size() > 4); assert(token[1] == "="); mRotationAxis.x = static_cast<float>(atof(token[2].c_str())); mRotationAxis.y = static_cast<float>(atof(token[3].c_str())); mRotationAxis.z = static_cast<float>(atof(token[4].c_str())); mRotationAngleInDegrees = static_cast<float>(atof(token[5].c_str())); glm::normalize(mRotationAxis); } else if (token[0] == "scaling") { assert(token.size() > 4); assert(token[1] == "="); mScaling.x = static_cast<float>(atof(token[2].c_str())); mScaling.y = static_cast<float>(atof(token[3].c_str())); mScaling.z = static_cast<float>(atof(token[4].c_str())); } else if (token[0] == "animation") { assert(token.size() > 2); assert(token[1] == "="); ci_string animName = token[2]; mAnimation = World::GetInstance()->FindAnimation(animName); } else if (token[0] == "particlesystem") { assert(token.size() > 2); assert(token[1] == "="); assert(token[2] == "\"fire\"" || token[2] == "\"fountain\""); // only to hardcoded particle systems ParticleEmitter* emitter; ParticleDescriptor* desc; if (token[2] == "\"fire\"") { emitter = new ParticleEmitter(vec3(-15.5f, 0.75f, 0.0f), this); //move fire desc = new ParticleDescriptor(); desc->SetFireDescriptor(); } else if (token[2] == "\"fountain\"") { emitter = new ParticleEmitter(vec3(-15.5f, 8.0f, 0.0f), this);//move smoke desc = new ParticleDescriptor(); desc->SetFountainDescriptor(); } mParticleSystem = new ParticleSystem(emitter, desc); World::GetInstance()->AddParticleSystem(mParticleSystem); } else { return false; } } return true; }