void PlaceholderLevel::Init()
{
    m_foreground = new Foreground();
    m_foreground->Init();

    AddObject(m_foreground);

    CreateTitleScreenObject();

    m_currentLevel = new Level();
    m_nextLevel = new Level();

    InitLevel(m_currentLevel);
    InitLevel(m_nextLevel);

    m_movingBackground = new MovingBackground();
    m_movingBackground->Init();

    AddObject(m_movingBackground);

    m_background = new Background();
    m_background->Init();

    AddObject(m_background);

    ResetLevelsPosition();

    // Testing particle systems:
    InitParticleSystem();
}
예제 #2
0
static DJEffectParticle* GetParticle()
{
	DJEffectParticle *pPart = g_pEffectPool;
	if (g_pEffectPool)
	{
		g_pEffectPool = g_pEffectPool->pNext;
	}
	else
	{
		InitParticleSystem(100);
		pPart = g_pEffectPool;
		g_pEffectPool = g_pEffectPool->pNext;
	}
	DJAssert(pPart != NULL);
	return pPart;
}
예제 #3
0
bool Application::LoadProject(std::string a_file)
{
  ClearProject();

  std::ifstream fs;
  fs.open(a_file);
  if (!fs.good())
  {
    printf("Failed to open file '%s'!\n", a_file.c_str());
    return false;
  }

  Json::Value root;
  fs >> root;

  Json::Value node = root["State"];
  if (!node.isNull())
  {
    Json::Value val = node["useUpdaterColor"];
    if (!val.isNull()) m_projData.parSysOpts[0].useUpdaterColor = val.asBool();

    val = node["useUpdaterRelativeForce"];
    if (!val.isNull()) m_projData.parSysOpts[0].useUpdaterRelativeForce = val.asBool();

    val = node["useUpdaterSize"];
    if (!val.isNull()) m_projData.parSysOpts[0].useUpdaterSize = val.asBool();
  }

  InitParticleSystem();

  node = root["Emitters"];
  if (!node.isNull())
  {
    for (int i = 0; i < (int)node.size(); ++i)
    {
      EDataItem e;
      Json::Value val = node[i]["ID"];
      if (!val.isNull()) e.first.ID = val.asInt();

      val = node[i]["type"];
      if (!val.isNull()) e.first.type = val.asInt();

      val = node[i]["on"];
      if (!val.isNull()) e.first.on = val.asBool();

      val = node[i]["posGenMethod"];
      if (!val.isNull()) e.first.posGenMethod = val.asInt();

      val = node[i]["velGenMethod"];
      if (!val.isNull()) e.first.velGenMethod = val.asInt();

      val = node[i]["relativeForce"];
      if (!val.isNull()) e.first.relativeForce = val.asFloat();

      val = node[i]["velocity"];
      if (!val.isNull()) e.first.velocity = val.asFloat();

      val = node[i]["rate"];
      if (!val.isNull()) e.first.rate = val.asFloat();

      val = node[i]["life"];
      if (!val.isNull()) e.first.life = val.asFloat();

      val = node[i]["transform"];
      if (!val.isNull())
      {
        std::vector<float> t;
        Dg::StringToNumberList(val.asString(), ',', std::dec, t);
        if (t.size() == 7) memcpy(e.first.transform, t.data(), 7 * sizeof(float));
      }

      val = node[i]["boxDim"];
      if (!val.isNull())
      {
        std::vector<float> t;
        Dg::StringToNumberList(val.asString(), ',', std::dec, t);
        if (t.size() == 3) memcpy(e.first.boxDim, t.data(), 3 * sizeof(float));
      }

      val = node[i]["velCone"];
      if (!val.isNull())
      {
        std::vector<float> t;
        Dg::StringToNumberList(val.asString(), ',', std::dec, t);
        if (t.size() == 3) memcpy(e.first.velCone, t.data(), 3 * sizeof(float));
      }

      val = node[i]["colors"];
      if (!val.isNull())
      {
        std::vector<float> t;
        Dg::StringToNumberList(val.asString(), ',', std::dec, t);
        if (t.size() == 8) memcpy(e.first.colors, t.data(), 8 * sizeof(float));
      }

      val = node[i]["sizes"];
      if (!val.isNull())
      {
        std::vector<float> t;
        Dg::StringToNumberList(val.asString(), ',', std::dec, t);
        if (t.size() == 2) memcpy(e.first.sizes, t.data(), 2 * sizeof(float));
      }

      memcpy(&e.second, &e.first, sizeof(EmitterData));
      m_projData.eData.push_back(e);
      m_IDManager.MarkAsUsed(e.first.ID);
      EmitterFactory eFact;
      m_particleSystem.AddEmitter(e.first.ID, eFact(e.first));
      m_projData.emitterFocus = 0;
    }
  }

  node = root["Attractors"];
  if (!node.isNull())
  {
    for (int i = 0; i < (int)node.size(); ++i)
    {
      ADataItem a;
      Json::Value val;
      val = node[i]["ID"];
      if (!val.isNull()) a.first.ID = val.asInt();

      val = node[i]["attenuationMethod"];
      if (!val.isNull()) a.first.attenuationMethod = val.asInt();

      val = node[i]["maxAppliedAccelMag"];
      if (!val.isNull()) a.first.maxAppliedAccelMag = val.asFloat();

      val = node[i]["show"];
      if (!val.isNull()) a.first.show = val.asBool();

      val = node[i]["strength"];
      if (!val.isNull()) a.first.strength = val.asFloat();

      val = node[i]["type"];
      if (!val.isNull()) a.first.type = val.asInt();

      val = node[i]["transform"];
      if (!val.isNull())
      {
        std::vector<float> t;
        Dg::StringToNumberList(val.asString(), ',', std::dec, t);
        if (t.size() == 6) memcpy(a.first.transform, t.data(), 6 * sizeof(float));
      }

      memcpy(&a.second, &a.first, sizeof(AttractorData));
      m_projData.aData.push_back(a);
      m_IDManager.MarkAsUsed(a.first.ID);
      AttractorFactory aFact;
      m_particleSystem.AddUpdater(a.first.ID, aFact(a.first));
      m_projData.attrFocus = 0;
    }
  }

  UpdateProjectTitle(a_file);
  m_projData.dirty = false;

  return true;
}