SSphericalLimitInfo CPhysxSkeleton::GetJointParameterInfo(CXMLTreeNode _XMLObjects)
{
  SSphericalLimitInfo l_sInfo;

  bool l_bTwistLimitLow = _XMLObjects.ExistsProperty("TwistLimitLow");
  bool l_bTwistLimitHigh = _XMLObjects.ExistsProperty("TwistLimitHigh");

  l_sInfo.JointSpring = _XMLObjects.ExistsProperty("JointSpring");
  l_sInfo.TwistSpring = _XMLObjects.ExistsProperty("TwistSpring");
  l_sInfo.SwingSpring = _XMLObjects.ExistsProperty("SwingSpring");
  l_sInfo.SwingLimit = _XMLObjects.ExistsProperty("SwingLimit");

  if (l_sInfo.JointSpring)
  {
    Vect2f l_vJointSpring = _XMLObjects.GetVect2fProperty("JointSpring",v2fZERO,false);
    l_sInfo.JointSpringValue = l_vJointSpring.x;
    l_sInfo.JointSpringDamper = l_vJointSpring.y;
  }

  if (l_sInfo.TwistSpring)
  {
    Vect2f l_vTwistSpring = _XMLObjects.GetVect2fProperty("TwistSpring",v2fZERO,false);
    l_sInfo.TwistSpringValue = l_vTwistSpring.x;
    l_sInfo.TwistSpringDamper = l_vTwistSpring.y;
  }

  if (l_sInfo.SwingSpring)
  {
    Vect2f l_vSwingSpring = _XMLObjects.GetVect2fProperty("SwingSpring",v2fZERO,false);
    l_sInfo.SwingSpringValue = l_vSwingSpring.x;
    l_sInfo.SwingSpringDamper = l_vSwingSpring.y;
  }

  if (l_sInfo.SwingLimit)
  {
    Vect2f l_vSwingLimit = _XMLObjects.GetVect2fProperty("SwingLimit",v2fZERO,false);
    l_sInfo.SwingValue = l_vSwingLimit.x;
    l_sInfo.SwingRestitution = l_vSwingLimit.y;
  }

  if (l_bTwistLimitLow && l_bTwistLimitHigh)
  {
    l_sInfo.TwistLimit = true;
    Vect2f l_vTwistLimitLow = _XMLObjects.GetVect2fProperty("TwistLimitLow",v2fZERO,false);
    Vect2f l_vTwistLimitHigh = _XMLObjects.GetVect2fProperty("TwistLimitHigh",v2fZERO,false);

    l_sInfo.TwistLowValue = l_vTwistLimitLow.x;
    l_sInfo.TwistLowRestitution = l_vTwistLimitLow.y;
    l_sInfo.TwistHighValue = l_vTwistLimitHigh.x;
    l_sInfo.TwistHighRestitution = l_vTwistLimitHigh.y;
  }
  else
  {
    l_sInfo.TwistLimit = false;
  }
  
  return l_sInfo;
}
示例#2
0
bool CSceneRendererStep::InitMaterialEffects(CXMLTreeNode& _treeMaterialEffects)
{
  if(!_treeMaterialEffects.Exists())
    return false;

  m_szParticleEffect = _treeMaterialEffects.GetPszISOProperty("particle_effect","",false);

  if(_treeMaterialEffects.ExistsProperty("static_mesh_effect") && _treeMaterialEffects.ExistsProperty("animated_model_effect"))
  {
    m_szStaticMeshEffect = _treeMaterialEffects.GetPszISOProperty("static_mesh_effect","",false);
    m_szAnimatedModelEffect = _treeMaterialEffects.GetPszISOProperty("animated_model_effect","",false);
    

    m_bUseMap = false;

  }else{

    m_bUseMap = true;

    int l_iNumRenderTargets = _treeMaterialEffects.GetNumChildren();

    for(int l_iIndex = 0; l_iIndex < l_iNumRenderTargets;l_iIndex++)
    {
      CXMLTreeNode l_pMaterialEffect = _treeMaterialEffects(l_iIndex);

      if(string(l_pMaterialEffect.GetName()) == "material_effect")
      {
        int l_iMaterialType = l_pMaterialEffect.GetIntProperty("material_type",0,false);
        string l_szEffectName = l_pMaterialEffect.GetPszISOProperty("effect","",false);

        if(l_szEffectName != "")
        {
          m_mapMaterialEffects[l_iMaterialType] = l_szEffectName;
        }else{
          LOGGER->AddNewLog(ELL_WARNING,"CSceneRendererStep::InitMaterialEffects material type %d amb effecte null",l_iMaterialType);
        }

      }else if(!l_pMaterialEffect.IsComment())
      {
        LOGGER->AddNewLog(ELL_WARNING,"CSceneRendererStep::InitMaterialEffects element no reconegut %s",l_pMaterialEffect.GetName());
      }

    }
  }

  return true;
}
示例#3
0
bool CPostSceneRendererStep::Init(CXMLTreeNode& _treePostSceneRenderer, const string& _szDefaultRenderTarget, bool _bNeedsEffect)
{
    string l_szEffect = _treePostSceneRenderer.GetPszISOProperty("effect","",!_bNeedsEffect);

    if(!CRendererStep::Init(_treePostSceneRenderer, _szDefaultRenderTarget))
    {
        LOGGER->AddNewLog(ELL_ERROR,"CPostSceneRendererStep::Init PostSceneRenderer sense nom");
        SetOk(false);
    } else if(l_szEffect == "" && _bNeedsEffect)
    {
        LOGGER->AddNewLog(ELL_ERROR,"CPostSceneRendererStep::Init PostSceneRenderer sense effect");
        SetOk(false);
    } else {

        LOGGER->AddNewLog(ELL_INFORMATION,"CPostSceneRendererStep::Init iniciant %s",GetName().c_str());

        CRendererStep::Init(_treePostSceneRenderer, _szDefaultRenderTarget);

        CXMLTreeNode l_treeSamplers = _treePostSceneRenderer.GetChild("input_samplers");
        CXMLTreeNode l_treeRenderTargets = _treePostSceneRenderer.GetChild("render_targets");

        if(!InitInputSamplers(l_treeSamplers))
        {
            LOGGER->AddNewLog(ELL_ERROR,"CPostSceneRendererStep::Init error inicialitzant input_samplers");
            SetOk(false);
        } else {

            m_szEffect = l_szEffect;

            m_bUseTime = _treePostSceneRenderer.GetBoolProperty("use_time",false,false);

            if(m_bUseTime)
            {
                m_bUseDeltaTime = _treePostSceneRenderer.GetBoolProperty("use_delta_time",false,false);
            }
            else
            {
                m_bUseDeltaTime = false;
            }

            m_bUseCenter = _treePostSceneRenderer.GetBoolProperty("use_center",false,false);

            string l_szAlignment = _treePostSceneRenderer.GetPszISOProperty("alignment","",false);
            if(l_szAlignment == "center")
            {
                m_Alignment = CENTER;
            }

            Vect2f l_fPos = _treePostSceneRenderer.GetVect2fProperty("position",Vect2f(0),false);

            m_iPos.x = (int) (l_fPos.x * RENDER_MANAGER->GetScreenWidth());
            m_iPos.y = (int) (l_fPos.y * RENDER_MANAGER->GetScreenHeight());

            if(_treePostSceneRenderer.ExistsProperty("size"))
            {
                float l_fSizeX = _treePostSceneRenderer.GetFloatProperty("size",1.0,false);

                if(_treePostSceneRenderer.GetBoolProperty("absolute_size",false,false))
                {
                    m_iSize.x = (int) l_fSizeX;
                    m_iSize.y = m_iSize.x;
                }
                else
                {
                    m_iSize.x = (int) (l_fSizeX * RENDER_MANAGER->GetScreenWidth());
                    m_iSize.y = m_iSize.x;
                }

                if(_treePostSceneRenderer.ExistsProperty("aspect_ratio"))
                {
                    bool l_bAspectRatio = _treePostSceneRenderer.GetBoolProperty("aspect_ratio",true,false);

                    if(l_bAspectRatio)
                    {
                        m_iSize.y = (int)(m_iSize.x * RENDER_MANAGER->GetScreenHeight()/(float)RENDER_MANAGER->GetScreenWidth());
                    }
                }

            } else if(_treePostSceneRenderer.ExistsProperty("size_x"))
            {
                float l_fSizeX = _treePostSceneRenderer.GetFloatProperty("size_x",1.0,false);
                float l_fSizeY = _treePostSceneRenderer.GetFloatProperty("size_y",1.0,false);

                if(_treePostSceneRenderer.GetBoolProperty("absolute_size",false,false))
                {
                    m_iSize.x = (int) l_fSizeX;
                    m_iSize.y = (int) l_fSizeY;
                }
                else
                {
                    m_iSize.x = (int) (l_fSizeX * RENDER_MANAGER->GetScreenWidth());
                    m_iSize.y = (int) (l_fSizeY * RENDER_MANAGER->GetScreenHeight());
                }

            } else
            {
                m_iSize.x = RENDER_MANAGER->GetScreenWidth();
                m_iSize.y = RENDER_MANAGER->GetScreenHeight();
            }

            SetOk(true);
        }
    }

    return IsOk();
}