Beispiel #1
0
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 ();
    }
}
Beispiel #2
0
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 );
}
Beispiel #3
0
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 );
    }
}
Beispiel #5
0
/* 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);
}
Beispiel #6
0
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 );
}
Beispiel #8
0
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 );
    }
}