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; }
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); }
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); }
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, <Vector(fScale, fScale, 1.0f)); }
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(); } }