Beispiel #1
0
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;
}
Beispiel #2
0
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;
}