예제 #1
0
static LTRESULT CreateStaticObjects(CClassMgr *pClassMgr)
{
    int i;
    ObjectCreateStruct theStruct;
    LPBASECLASS pObject;
    ClassDef *pClass;
    LTRESULT dResult;

    for (i=0; i < pClassMgr->m_nClassDatas; i++)
    {
        theStruct.Clear();

        pClass = pClassMgr->m_ClassDatas[i].m_pClass;

 
        if (pClass->m_ClassFlags & CF_STATIC)
        {       
            pObject = sm_AllocateObjectOfClass(pClass);
            dResult = sm_AddObjectToWorld(pObject, 
                pClass, &theStruct, INVALID_OBJECTID, 
                OBJECTCREATED_NORMAL, 
                &pClassMgr->m_ClassDatas[i].m_pStaticObject);
        }
    }


    return LT_OK;
}
예제 #2
0
파일: Speaker.cpp 프로젝트: Arc0re/lithtech
void Speaker::InitialUpdate()
{
    if (!g_pLTServer || !m_hObject) return;

	ObjectCreateStruct createstruct;
	createstruct.Clear();

	SAFE_STRCPY(createstruct.m_Filename, "Models\\1x1_square.abc");
	SAFE_STRCPY(createstruct.m_SkinNames[0], "Models\\1x1_square.dtx");

    g_pLTServer->Common()->SetObjectFilenames(m_hObject, &createstruct);
}
예제 #3
0
파일: Prop.cpp 프로젝트: rickyharis39/nolf2
void Prop::HandleDestroy(HOBJECT hDamager)
{
	if( (!m_pDisturb) || (!m_pDisturb->pPD) ) 
	{
		// Remove us since we don't have a destroyed model to switch to.
		g_pLTServer->RemoveObject( m_hObject );
		return;
	}

	// Kill sound if touching.

	if( m_eState == kState_PropTouching )
	{
		ClearTouchSoundIfDone( LTTRUE );
	}
	else if( m_eState == kState_PropHit )
	{
		ClearHitSoundIfDone( LTTRUE );
	}

	// Remove us if we don't have a destroyed model to switch to.
	if( m_pDisturb->pPD->sDestroyFilename.empty( ) )
	{
		g_pLTServer->RemoveObject( m_hObject );
		return;
	}

	ObjectCreateStruct createstruct;
	createstruct.Clear();

	SAFE_STRCPY(createstruct.m_Filename, m_pDisturb->pPD->sDestroyFilename.c_str( ));

	m_pDisturb->pPD->blrDestroySkinReader.CopyList(0, createstruct.m_SkinNames[0], MAX_CS_FILENAME_LEN+1);
	m_pDisturb->pPD->blrDestroyRenderStyleReader.CopyList(0, createstruct.m_RenderStyleNames[0], MAX_CS_FILENAME_LEN+1);

	g_pCommonLT->SetObjectFilenames(m_hObject, &createstruct);

	m_eState = kState_PropDestroyed;

	// Can't activate a destroyed prop.
	g_pCommonLT->SetObjectFlags(m_hObject, OFT_User, 0, USRFLG_CAN_ACTIVATE);

	m_damage.SetCanDamage(LTFALSE);
}
예제 #4
0
void CProjectileFX::CreateFlare(const LTVector & vPos, const LTRotation & rRot)
{
	if (!m_pClientDE || !m_hServerObject) return;

	ObjectCreateStruct createStruct;
	createStruct.Clear();

	if (!m_pProjectileFX->szFlareSprite[0]) return;

	SAFE_STRCPY(createStruct.m_Filename, m_pProjectileFX->szFlareSprite);
	createStruct.m_ObjectType = OT_SPRITE;
	createStruct.m_Flags = FLAG_VISIBLE;
	VEC_COPY(createStruct.m_Pos, vPos);
    createStruct.m_Rotation = rRot;

	m_hFlare = m_pClientDE->CreateObject(&createStruct);
	if (!m_hFlare) return;

    LTFLOAT fScale = m_pProjectileFX->fFlareScale;
	m_pClientDE->SetObjectScale(m_hFlare, &LTVector(fScale, fScale, 1.0f));
}
예제 #5
0
LTRESULT CLTCommonClient::SetObjectResource(HOBJECT pObj, EObjectResource eType, uint32 nIndex, const char* pszResource)
{
    FN_NAME(CLTCommonClient::SetObjectResource);
    CHECK_PARAMS2(pObj && (pObj->m_ObjectType == OT_MODEL || pObj->m_ObjectType == OT_SPRITE));

	ObjectCreateStruct ocs;
	ocs.Clear();

	if(pObj->m_ObjectType == OT_MODEL)
	{
		if(eType == eObjectResource_ObjectFile)
		{
			LTStrCpy(ocs.m_Filename, pszResource, MAX_CS_FILENAME_LEN);
		}
		else if(eType == eObjectResource_Texture)
		{
			assert(nIndex < MAX_MODEL_TEXTURES);
			LTStrCpy(ocs.m_SkinNames[nIndex], pszResource, MAX_CS_FILENAME_LEN);
		}
		else if(eType == eObjectResource_RenderStyle)
		{
			assert(nIndex  < MAX_MODEL_RENDERSTYLES);
			LTStrCpy(ocs.m_RenderStyleNames[nIndex], pszResource, MAX_CS_FILENAME_LEN);
		}

		return SetObjectFilenames(pObj, &ocs);
	}
	else
	{
		assert(eType == eObjectResource_ObjectFile);
		LTStrCpy(ocs.m_Filename, pszResource, MAX_CS_FILENAME_LEN);

		return SetObjectFilenames(pObj, &ocs);
	}

	//return the error code
	return LT_OK;
}
void CProjectile::DoProjectile()
{
	if (!m_pAmmoData || !m_pAmmoData->pProjectileFX) return;

	// Set up the model...

	ObjectCreateStruct createStruct;
	createStruct.Clear();

	SAFE_STRCPY(createStruct.m_Filename, m_pAmmoData->pProjectileFX->szModel);
	SAFE_STRCPY(createStruct.m_SkinNames[0], m_pAmmoData->pProjectileFX->szSkin);

    g_pLTServer->Common()->SetObjectFilenames(m_hObject, &createStruct);
    g_pLTServer->ScaleObject(m_hObject, &(m_pAmmoData->pProjectileFX->vModelScale));

    uint32 dwFlags = g_pLTServer->GetObjectFlags(m_hObject);
    g_pLTServer->SetObjectFlags(m_hObject, dwFlags | FLAG_VISIBLE);


	// Start your engines...

    m_fStartTime = g_pLTServer->GetTime();


	// Make the flash position the same as the fire position...

	m_vFlashPos	= m_vFirePos;


	// If we have a fired from object, make a link to it...

	if (m_hFiredFrom)
	{
        g_pLTServer->CreateInterObjectLink(m_hObject, m_hFiredFrom);
	}


	// Set our force ignore limit and mass...

	g_pLTServer->SetBlockingPriority(m_hObject, 0);
	g_pLTServer->SetForceIgnoreLimit(m_hObject, 0.0f);
    g_pLTServer->SetObjectMass(m_hObject, m_fMass);


	// Make sure we are pointing in the direction we are traveling...

    LTRotation rRot;
    g_pLTServer->AlignRotation(&rRot, &m_vDir, LTNULL);
    g_pLTServer->SetObjectRotation(m_hObject, &rRot);


	// Make sure we have the correct flags set...

    dwFlags = g_pLTServer->GetObjectFlags(m_hObject);
	dwFlags |= m_pAmmoData->pProjectileFX->dwObjectFlags;
    g_pLTServer->SetObjectFlags(m_hObject, dwFlags);


	// And away we go...

    LTVector vVel;
	vVel = m_vDir * m_fVelocity;
    g_pLTServer->SetVelocity(m_hObject, &vVel);


	// Special case of 0 life time...

	if (m_fLifeTime <= 0.0f)
	{
        Detonate(LTNULL);
	}
	else
	{
		AddSpecialFX();
	}
}