Exemple #1
0
RpAtomic* CFileLoader::SetRelatedModelInfoCB(RpAtomic* atomic, void* data)
{
    RpClump* clump = (RpClump*)data;

    CAtomicModelInfo* atomicModelInfo = (CAtomicModelInfo *)CModelInfo::GetModelInfo(relatedModelIndex)->AsAtomicModelInfoPtr();
    const char* frameNodeName = GetFrameNodeName(RwFrameGetParent(atomic));
    bool damaged;
    GetNameAndDamage(frameNodeName, (char *)&v10, (int)&damaged);
    CVisibilityPlugins::SetAtomicRenderCallback(atomic, 0);
    if (damaged)
    {
        CDamageAtomicModelInfo* damageModel = atomicModelInfo->AsDamageAtomicModelInfoPtr();
        damageModel->SetDamagedAtomic(atomic);
    }
    else
    {

    ((void (__thiscall *)(CAtomicModelInfo *, RpAtomic *))v5->__parent.__vmt[1].__destructor)(v5, v4);
    }
    RpClumpRemoveAtomic(clump, atomic);
    RwFrame* frame = RwFrameCreate();
    RpAtomicSetFrame(atomic, frame);
    CVisibilityPlugins::SetModelInfoIndex(atomic, relatedModelIndex);
    return atomic;
}
Exemple #2
0
void
MakeEnvmapCam(void)
{
	reflectionCam = RwCameraCreate();
	RwCameraSetFrame(reflectionCam, RwFrameCreate());
	RwCameraSetNearClipPlane(reflectionCam, 0.1f);
	RwCameraSetFarClipPlane(reflectionCam, 250.0f);
	RwV2d vw;
	vw.x = vw.y = 0.4f;
	RwCameraSetViewWindow(reflectionCam, &vw);
	RpWorldAddCamera(Scene.world, reflectionCam);
}
Exemple #3
0
bool CRealTimeShadow::Create(bool isBlurred, int gradientSteps, bool resampleRaster)
{
	m_light = RpLightCreate(1);
	if (!m_light)
	{
		return false;
	}
	RwRGBAReal color;
	color.red = 0.8f;
	color.green = 0.8f;
	color.blue = 0.8f;
	color.alpha = 0.0f;
	RpLightSetColor(m_light, &color);
	RwFrame* frame = RwFrameCreate();
	_rwObjectHasFrameSetFrame(m_light, frame);
	m_isBlurred = isBlurred;
	m_gradientSteps = gradientSteps;
	m_resampleRaster = resampleRaster;
	if (!isBlurred)
	{
		if (!m_cameraNonBlurred.Create(7))
		{
			Destroy();
			return false;
		}
	}
	else
	{
		if (!m_cameraBlurred.Create(6))
		{
			Destroy();
			return false;
		}
	}
	m_cameraNonBlurred.SetLight(m_light);
	return true;
}
Exemple #4
0
bool CFileLoader::LoadClumpFile(RwStream *stream, size_t model_id)
{
    char v2; // bl@1
    int v3; // ebp@1
    CVehicleModelInfo *v4; // esi@1
    RpClump *v5; // ebx@2
    RwFrame *v6; // ebp@2
    RpClump *v7; // eax@3
    RpClump *v8; // esi@3
    RwFrame *v9; // eax@4
    RpClump *v11; // edi@10
    CVehicleModelInfo *v12; // [sp+10h] [bp+10h]@1

    v3 = model_id;
    CVehicleModelInfo* v12 = static_cast<CVehicleModelInfo*>(CModelInfo::GetModelInfo(model_id));
    v4 = v12;
    v2 = (unsigned __int8)v12->__parent.__parent.__vmt->getType(v12) == 6;
    if ( HIBYTE(v12->__parent.__parent.flags) & 2 )
    {
        v5 = (RpClump *)RpClumpCreate();
        v6 = RwFrameCreate();
        v5->object.parent = v6;
        if ( !v7ed2d0(stream, 16, 0, 0) )
        {
        LABEL_6:
            ((void (__thiscall *)(CVehicleModelInfo *, RpClump *))v4->__parent.__parent.__vmt[1]._m04)(v4, v5);
            return 1;
        }
        while ( 1 )
        {
            v7 = RpClumpStreamRead(stream);
            v8 = v7;
            if ( !v7 )
            return 0;
            v9 = _rwFrameCloneAndLinkClones(v7->object.parent);
            v7f0b00(v6, v9);
            RpClumpForAllAtomics(v8, (int (__cdecl *)(_DWORD, _DWORD))dummy_537290, v5);
            RpClumpDestroy(v8);
            if ( !v7ed2d0(stream, 16, 0, 0) )
            {
                v4 = v12;
                goto LABEL_6;
            }
        }
    }
    if ( !v7ed2d0(stream, 16, 0, 0) )
    return 0;
    if ( v2 )
    {
    CCollisionPlugin__SetModelInfo(&v12->__parent.__parent);
    CVehicleModelInfo__UseCommonVehicleTexDicationary();
    }
    v11 = RpClumpStreamRead(stream);
    if ( v2 )
    {
    CCollisionPlugin__SetModelInfo(0);
    restoreTextureFindCallback();
    }
    if ( !v11 )
    return 0;
    ((void (__thiscall *)(CVehicleModelInfo *, RpClump *))v12->__parent.__parent.__vmt[1]._m04)(v12, v11);
    if ( v3 == 508 )
    v12->ucDoorCount = 2;
    return 1;
}