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