Example #1
0
LTBOOL CPropTypeMgr::Init(const char* szAttributeFile)
{
    if (g_pPropTypeMgr || !szAttributeFile) return LTFALSE;
    if (!Parse(szAttributeFile)) return LTFALSE;

	g_pPropTypeMgr = this;


	// Read in the properties for each prop type record...

	int nNum = 0;
	sprintf(s_aTagName, "%s%d", PTMGR_TAG, nNum);

	while (m_buteMgr.Exist(s_aTagName))
	{
		PROPTYPE* pPropType = debug_new(PROPTYPE);

		if (pPropType && pPropType->Init(m_buteMgr, s_aTagName, nNum))
		{
			pPropType->nId = nNum;
			m_PropTypeList.AddTail(pPropType);
		}
		else
		{
			debug_delete(pPropType);
            return LTFALSE;
		}

		nNum++;
		sprintf(s_aTagName, "%s%d", PTMGR_TAG, nNum);
	}


    return LTTRUE;
}
Example #2
0
bool PropType::ReadProp(ObjectCreateStruct *pData)
{
	if (!pData) 
		return false;

	// Type

	GenericProp genProp;

    if (g_pLTServer->GetPropGeneric("Type", &genProp) == LT_OK)
	{
		if (genProp.m_String[0])
		{
			m_sPropType = genProp.m_String;
		}
	}

	
	// Model
	PROPTYPE* pPropType = g_pPropTypeMgr->GetPropType(( char* )m_sPropType.c_str( ));
	if (!pPropType || pPropType->sFilename.empty( )) 
		return false;

	pPropType->SetupModel( pData );

	return true;
}
Example #3
0
void PickupItem::CheckForOverrideModel(ObjectCreateStruct *pStruct)
{
	// See if we have an override model prop-type, if so get the model
	// information and set it in pStruct

	if (!m_hstrModelOverride) return;

	const char* pName = g_pLTServer->GetStringData(m_hstrModelOverride);
	if (pName)
	{
		PROPTYPE* pPropType = g_pPropTypeMgr->GetPropType((char*)pName);

		if (pPropType && !pPropType->sFilename.empty())
		{
			pPropType->SetupModel(pStruct);
		}
	}
}
Example #4
0
bool PropType::Setup( )
{
	PROPTYPE* pPropType = g_pPropTypeMgr->GetPropType(( char* )m_sPropType.c_str( ));
	if( !pPropType )
		return false;

	ObjectCreateStruct ocs;
	pPropType->SetupModel( &ocs );

	// Disturbance

	PROP_DISTURB* pDisturb = pPropType->pDisturb;
	if(pDisturb != LTNULL)
	{
		if(m_pDisturb == LTNULL)
		{
			m_pDisturb = debug_new(PropDisturbStruct);
			m_dwFlags |= FLAG_TOUCH_NOTIFY;
		}

		if ( !pDisturb->sTouchSound.empty( ))
		{
		    m_pDisturb->sTouchSoundName = pDisturb->sTouchSound;
		}

		m_pDisturb->pPD = pDisturb;

		m_damage.SetDestroyedStimulus(pDisturb->fStimRadius, pDisturb->nDestroyAlarmLevel);
	}

	m_vObjectColor	= pPropType->vObjectColor;
	m_bMoveToFloor	= pPropType->bMoveToFloor;
	m_fAlpha		= pPropType->fAlpha;

	// Only use the prop type scale if the scale wasn't set in DEdit...

	if (m_vScale.x == 1.0 && m_vScale.y == 1.0 && m_vScale.z == 1.0)
	{
		m_vScale = pPropType->vScale;
	}

	m_dwFlags = (pPropType->bVisible ? (m_dwFlags | FLAG_VISIBLE) : (m_dwFlags & ~FLAG_VISIBLE));
	m_dwFlags = (pPropType->bSolid ? (m_dwFlags | FLAG_SOLID) : (m_dwFlags & ~FLAG_SOLID));
	m_dwFlags = (pPropType->bGravity ? (m_dwFlags | FLAG_GRAVITY) : (m_dwFlags & ~FLAG_GRAVITY));
	m_dwFlags = (pPropType->bShadow	? (m_dwFlags | FLAG_SHADOW) : (m_dwFlags & ~FLAG_SHADOW));

	if (pPropType->bRayHit)
	{
		// Set touch notify so projectiles can impact with us...
		m_dwFlags |= FLAG_TOUCH_NOTIFY;
		m_dwFlags |= FLAG_RAYHIT;
	}
	else
	{
		m_dwFlags &= ~FLAG_TOUCH_NOTIFY;
		m_dwFlags &= ~FLAG_RAYHIT;
	}

	if(pPropType->bActivateable)
	{
		m_dwUsrFlgs |= USRFLG_CAN_ACTIVATE;
		
		// Since we are activateable try and set our activate type...

		if( !pPropType->sActivateType.empty() )
		{
			m_ActivateTypeHandler.SetActivateType( pPropType->sActivateType.c_str() );
		}
	}

	m_bTouchable = pPropType->bTouchable;

	m_damage.SetArmorPoints(0.0f);
	m_damage.SetMaxArmorPoints(0.0f);
    m_damage.SetCanHeal(LTFALSE);
    m_damage.SetCanRepair(LTFALSE);
    m_damage.SetApplyDamagePhysics(LTFALSE);
	m_damage.m_bRemoveOnDeath = LTFALSE;

	if (pPropType->nHitPoints >= 0)
	{
        m_damage.SetMaxHitPoints((LTFLOAT)pPropType->nHitPoints);
        m_damage.SetHitPoints((LTFLOAT)pPropType->nHitPoints);
	}
	else
	{
		m_damage.SetMaxHitPoints(1.0f);
		m_damage.SetHitPoints(1.0f);
        m_damage.SetNeverDestroy( LTTRUE );
	}

	// Set the debris type...

	if (!pPropType->sDebrisType.empty( ))
	{
		DEBRIS* pDebris = g_pDebrisMgr->GetDebris(pPropType->sDebrisType.c_str( ));
		if (pDebris)
		{
			m_damage.m_nDebrisId = pDebris->nId;
		}
	}

	if( LT_OK != g_pCommonLT->SetObjectFilenames(m_hObject, &ocs))
		return false;

	// Let the prop do some setup.
	if( !Prop::Setup( ))
		return false;

	return true;
}