void CClientObject::SetOrientation ( const CVector& vecPosition, const CVector& vecRotationRadians ) { if ( m_vecPosition != vecPosition ) { // Store the position in our datastruct m_vecPosition = vecPosition; // Update our streaming position UpdateStreamPosition ( vecPosition ); } // Update our internal data m_vecPosition = vecPosition; m_vecRotation = vecRotationRadians; // Eventually move the object if ( m_pObject ) { m_pObject->Teleport ( vecPosition.fX, vecPosition.fY, vecPosition.fZ ); m_pObject->SetOrientation ( vecRotationRadians.fX, vecRotationRadians.fY, vecRotationRadians.fZ ); #ifndef MTA_BUILDINGS m_pObject->ProcessCollision (); #endif m_pObject->SetupLighting (); } }
void CClientMarker::SetPosition ( const CVector& vecPosition ) { if ( m_pMarker ) m_pMarker->SetPosition ( vecPosition ); if ( m_pCollision ) m_pCollision->SetPosition ( vecPosition ); // Update our streaming position UpdateStreamPosition ( vecPosition ); }
bool CClientMarker::SetMatrix ( const CMatrix & matrix ) { if ( m_pMarker ) m_pMarker->SetMatrix ( const_cast < CMatrix & > ( matrix ) ); if ( m_pCollision ) m_pCollision->SetPosition ( matrix.vPos ); // Update our streaming position UpdateStreamPosition ( matrix.vPos ); return true; }
void CClientPickup::SetPosition ( const CVector& vecPosition ) { // Different from our current position? if ( m_vecPosition != vecPosition ) { // Set the new position and recreate it m_vecPosition = vecPosition; ReCreate (); // Update our streaming position UpdateStreamPosition ( vecPosition ); } }
/* It executes the Water Cycle Algorithm for function minimization Parameters: s: search space Evaluate: pointer to the function used to evaluate particles arg: list of additional arguments */ void runWCA(SearchSpace *s, prtFun Evaluate, ...) { va_list arg, argtmp; int t, i, *flow = NULL; double c = 2; /* c = [1,2]. The author recommends 2 as the best value */ Agent *tmp = NULL; va_start(arg, Evaluate); va_copy(argtmp, arg); if (!s) { fprintf(stderr, "\nSearch space not allocated @runWCA.\n"); exit(-1); } EvaluateSearchSpace(s, _WCA_, Evaluate, arg); /* Initial evaluation of the search space */ qsort(s->a, s->m, sizeof(Agent **), SortAgent); /* Sorts all raindrops according to their fitness. First position gets the sea. */ flow = FlowIntensity(s); for (t = 1; t <= s->iterations; t++) { fprintf(stderr, "\nRunning iteration %d/%d ... ", t, s->iterations); va_copy(arg, argtmp); UpdateStreamPosition(s, flow, c); UpdateRiverPosition(s, c); for (i = 0; i < s->m; i++) { CheckAgentLimits(s, s->a[i]); } EvaluateSearchSpace(s, _WCA_, Evaluate, arg); /* Initial evaluation of the search space */ qsort(s->a, s->m, sizeof(Agent **), SortAgent); /* Sorts all raindrops according to their fitness. First position gets the sea. */ RainingProcess(s, flow); s->dmax = s->dmax - (s->dmax / s->iterations); fprintf(stderr, "OK (minimum fitness value %lf)", s->gfit); } free(flow); va_end(arg); }
void CClientObject::StreamedInPulse ( void ) { // Some things to do if low LOD object if ( m_bIsLowLod ) { // Manually update attaching in case other object is streamed out DoAttaching (); // Be hidden if all HighLodObjects are fully visible m_IsHiddenLowLod = true; if ( m_HighLodObjectList.empty () ) m_IsHiddenLowLod = false; for ( std::vector < CClientObject* >::iterator iter = m_HighLodObjectList.begin () ; iter != m_HighLodObjectList.end () ; ++iter ) { CObject* pObject = (*iter)->m_pObject; if ( !pObject || !pObject->IsFullyVisible () ) { m_IsHiddenLowLod = false; break; } } UpdateVisibility (); } // Are we not a static object (allowed to move by physics) if ( !m_bIsStatic ) { // Grab our actual position (as GTA moves it too) CVector vecPosition = *m_pObject->GetPosition (); // Has it moved without MTA knowing? if ( vecPosition != m_vecPosition ) { m_vecPosition = vecPosition; // Update our streaming position UpdateStreamPosition ( m_vecPosition ); } } }
CClientPickup::CClientPickup ( CClientManager* pManager, ElementID ID, unsigned short usModel, CVector vecPosition ) : ClassInit ( this ), CClientStreamElement ( pManager->GetPickupStreamer (), ID ) { // Initialize m_pManager = pManager; m_pPickupManager = pManager->GetPickupManager (); m_usModel = usModel; m_bVisible = true; m_pPickup = NULL; m_pObject = NULL; m_pCollision = NULL; // Add us to pickup manager's list m_pPickupManager->m_List.push_back ( this ); SetTypeName ( "pickup" ); m_ucType = CClientPickup::WEAPON; m_ucWeaponType = CClientPickup::WEAPON_BRASSKNUCKLE; m_fAmount = 0.0f; m_usAmmo = 0; // Make sure our streamer knows where we are to start with UpdateStreamPosition ( m_vecPosition = vecPosition ); }
void CClientObject::SetPosition ( const CVector& vecPosition ) { // Move the object if ( m_pObject ) { CVector vecRot; GetRotationRadians ( vecRot ); m_pObject->Teleport ( vecPosition.fX, vecPosition.fY, vecPosition.fZ ); #ifndef MTA_BUILDINGS m_pObject->ProcessCollision (); #endif m_pObject->SetupLighting (); SetRotationRadians ( vecRot ); } if ( m_vecPosition != vecPosition ) { // Store the position in our datastruct m_vecPosition = vecPosition; // Update our streaming position UpdateStreamPosition ( vecPosition ); } }