//Deprecated. Converts color phases to color ramp void Particles2D::set_color_phases(int p_phases) { //Create color ramp if we have 2 or more phases. //Otherwise first phase phase will be assigned to default color. if(p_phases > 1 && color_ramp.is_null()) { color_ramp = Ref<ColorRamp>(memnew (ColorRamp())); } if(color_ramp.is_valid()) { color_ramp->get_points().resize(p_phases); } }
LTBOOL CPolyGridFX::CreateObject(ILTClient *pClientDE) { ColorRamp colorRamps[] = { ColorRamp(LTVector(m_vColor1.x, m_vColor1.y, m_vColor1.z), 0), ColorRamp(LTVector(m_vColor2.x, m_vColor2.y, m_vColor2.z), 256) }; if (!CSpecialFX::CreateObject(pClientDE)) return LTFALSE; if (!g_pGameClientShell) return LTFALSE; CGameSettings* pSettings = g_pInterfaceMgr->GetSettings(); if (!pSettings) return LTFALSE; LTVector vPos; g_pLTClient->GetObjectPos(m_hServerObject, &vPos); LTRotation rRot; g_pLTClient->GetObjectRotation(m_hServerObject, &rRot); // Setup the PolyGrid... ObjectCreateStruct createStruct; INIT_OBJECTCREATESTRUCT(createStruct); createStruct.m_ObjectType = OT_POLYGRID; createStruct.m_Flags = FLAG_VISIBLE; createStruct.m_Pos = vPos; createStruct.m_Rotation = rRot; uint32 dwSizeX = 2; uint32 dwSizeY = 2; if ((m_dwNumPoliesX >= 2) && (m_dwNumPoliesY >= 2)) { dwSizeX = m_dwNumPoliesX; dwSizeY = m_dwNumPoliesY; if (m_nSurfaceType == PGSURFACE_PLASMA_FOUR_RING) { // Make sure dwSize is a factor of 2 if using four ring plasma... dwSizeX = FindClosestPowerOf2(dwSizeX); dwSizeY = FindClosestPowerOf2(dwSizeY); //make sure they are at least 2 wide if(dwSizeX < 2) dwSizeX = 2; if(dwSizeY < 2) dwSizeY = 2; } } uint32 nFlags = 0; if(m_bFresnel) nFlags |= PG_FRESNEL; if(!m_bBackfaceCull) nFlags |= PG_NOBACKFACECULL; if(m_bRenderEarly) nFlags |= PG_RENDERBEFORETRANSLUCENTS; if(m_bNormalMapSprite) nFlags |= PG_NORMALMAPSPRITE; //load in the dampening buffer if applicable LoadDampenImage(dwSizeX, dwSizeY); //see if we need to setup a cutout mask CPolyGridBuffer<bool> CutoutMask; if(m_DampenBuffer.GetWidth() > 0) { bool bUseCutout = false; //resize our buffer CutoutMask.Resize(dwSizeX, dwSizeY); //now run through and translate the dampening image to the cutout uint8* pImage = m_DampenBuffer.GetBuffer(); uint8* pEnd = pImage + dwSizeY * dwSizeX; bool* pCutout = CutoutMask.GetBuffer(); while(pImage < pEnd) { if(*pImage == 0) { *pCutout = false; bUseCutout = true; } else { *pCutout = true; } ++pCutout; ++pImage; } } m_hObject = m_pClientDE->CreateObject(&createStruct); m_pClientDE->SetupPolyGrid(m_hObject, dwSizeX, dwSizeY, nFlags, CutoutMask.GetBuffer()); //update our sizes m_dwNumPoliesX = dwSizeX; m_dwNumPoliesY = dwSizeY; // Set alpha value... LTFLOAT r, g, b, a; m_pClientDE->GetObjectColor(m_hObject, &r, &g, &b, &a); m_pClientDE->SetObjectColor(m_hObject, r, g, b, m_fAlpha); if (m_sSurfaceSprite.size( )) { m_pClientDE->SetPolyGridTexture(m_hObject, m_sSurfaceSprite.c_str( )); m_pClientDE->SetPolyGridTextureInfo(m_hObject, m_fXPan, m_fYPan, m_fXScaleMin, m_fYScaleMin, m_fBaseReflection, m_fVolumeIOR); } if (m_sSurfaceEnvMap.size( )) { m_pClientDE->SetPolyGridEnvMap(m_hObject, m_sSurfaceEnvMap.c_str()); } m_pClientDE->SetObjectPos(m_hObject, &vPos); m_pClientDE->Physics()->SetObjectDims(m_hObject, &m_vDims, 0); SetPolyGridPalette(colorRamps, sizeof(colorRamps)/sizeof(colorRamps[0])); //handle initializing our appropriate updaters switch(m_nSurfaceType) { case PGSURFACE_PLASMA_NORMAL: case PGSURFACE_PLASMA_FOUR_RING: PrecalculatePlasma(); break; case PGSURFACE_WAVE_PROP: InitWaveProp(); break; default: PrecalculatePlasma(); break; } // Set blend modes if applicable... uint32 dwFlags = 0; LTBOOL bFog = LTTRUE; if (m_bAdditive) { dwFlags |= FLAG2_ADDITIVE; bFog = LTFALSE; } else if (m_bMultiply) { dwFlags |= FLAG2_MULTIPLY; bFog = LTFALSE; } g_pCommonLT->SetObjectFlags(m_hObject, OFT_Flags2, dwFlags, dwFlags); //handle any startup frames that we want HandleStartupFrames(); return LTTRUE; }