Spaß mit Früchten (war: C++ programm)



  • Sone schrieb:

    Und Funktionen sollten eh nie die 10 Zeilen überschreiten.

    Das ist eine so unrealistische Faustregel, dass man sie komplett ignorieren darf.

    Bei mir stimmts.
    Alle Funktionen (außer vielleicht main, aber das ist faulheit), habe nur 10 Zeilen Code (ohne Whitespace, Kommentare). Außerdem habe ich das so in der Art schon im Forum gelesen.



  • Nathan schrieb:

    Sone schrieb:

    Und Funktionen sollten eh nie die 10 Zeilen überschreiten.

    Das ist eine so unrealistische Faustregel, dass man sie komplett ignorieren darf.

    Bei mir stimmts.
    Alle Funktionen (außer vielleicht main, aber das ist faulheit), habe nur 10 Zeilen Code (ohne Whitespace, Kommentare). Außerdem habe ich das so in der Art schon im Forum gelesen.

    Hmm. Und wo genau? Bei deinen Projekten? Wie groß sind die?



  • So ungefähr 2700 zeilen code insgesamt, also relativ klein.
    Und ab und zu gibt es da schon funktionen mit 20 zeilen.



  • Nathan schrieb:

    So ungefähr 2700 zeilen code insgesamt, also relativ klein.
    Und ab und zu gibt es da schon funktionen mit 20 zeilen.

    Hmm. Nicht schlecht. Guck mal hier bei mir: https://sourceforge.net/p/linacsim/code/ci/master/tree/

    Bspw.

    void LinacSimFrameListener::zoom( Ogre::Real longer )
    {
        if( mActive
        &&  longer != 0 )
        {
            auto const w = std::abs(mCamera->getPosition().x),
                       h = std::abs(mCamera->getPosition().y);
    
            Ogre::Real const distance = std::sqrt( w*w + h*h );
    
            if( longer > 0 )
                mCamera->move({ -w * longer / distance,
                                (longer + distance) * h / distance - h,
                                0 });
            else
            {
                longer =- longer;
    
                auto y = h - (distance-longer)/distance * h,
                     x = w - (distance-longer)/distance * w;
    
                if( h - y >= 0
                &&  distance - longer >= 25 )
                    mCamera->move({ x, -y, 0 });
            }
        }
    }
    

    Wie kürzt du das ab? 🙂



  • Und Funktionen sollten eh nie die 10 Zeilen überschreiten.

    ...das ist mir neu, wie schauts mit Win.Prozeduren z.b:

    LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
    {
    
    	static HRGN hRgnClip;
    	static int cxClient, cyClient;
    	double fAngle, fRadius;
    	HCURSOR hCursor;
    	HDC hdc;
    	HRGN hRgnTemp[6];
    	int i;
    	PAINTSTRUCT ps;
    
    	switch(iMsg)
    	{
    		case WM_SIZE:
    
    			cxClient = LOWORD(lParam);
    			cyClient = HIWORD(lParam);
    
    			hCursor = SetCursor(LoadCursor(NULL, IDC_WAIT));
    			ShowCursor(TRUE);
    
    			if(hRgnClip) DeleteObject(hRgnClip);
    
    			hRgnTemp[0] = CreateEllipticRgn(0, cyClient/3, cxClient/2, 2*cyClient/3);
    			hRgnTemp[1] = CreateEllipticRgn(cxClient/2, cyClient/3, cxClient, 2*cyClient/3);
    			hRgnTemp[2] = CreateEllipticRgn(cxClient/3, 0, 2*cxClient/3, cyClient/2);
    			hRgnTemp[3] = CreateEllipticRgn(cxClient/3, cyClient/2, 2*cxClient/3, cyClient);
    			hRgnTemp[4] = CreateRectRgn(0, 0, 1, 1);
    			hRgnTemp[5] = CreateRectRgn(0, 0, 1, 1);
    
    			hRgnClip	= CreateRectRgn(0, 0, 1, 1);
    
    			CombineRgn(hRgnTemp[4], hRgnTemp[0], hRgnTemp[1], RGN_OR);
    			CombineRgn(hRgnTemp[5], hRgnTemp[2], hRgnTemp[3], RGN_OR);
    			CombineRgn(hRgnClip, hRgnTemp[4], hRgnTemp[5], RGN_XOR);
    
    			for(i = 0; i < 6; i++)
    
    				DeleteObject(hRgnTemp[i]);
    
    			SetCursor(hCursor);
    			ShowCursor(FALSE);
    
    			return 0;
    
    		case WM_PAINT:
    
    			hdc = BeginPaint(hwnd, &ps);
    
    			SetViewportOrgEx(hdc, cxClient/2, cyClient/2, NULL);
    			SelectClipRgn(hdc, hRgnClip);
    
    			fRadius = _hypot(cxClient/2.0, cyClient/2.0);
    
    			for(fAngle = 0.0; fAngle < TWO_PI; fAngle += TWO_PI / 360)
    			{
    
    				MoveToEx(hdc, 0, 0, NULL);
    				LineTo(hdc, (int)(fRadius * cos (fAngle)+ 0.5), (int)(-fRadius * sin (fAngle) + 0.5));
    
    			}
    
    			EndPaint(hwnd, &ps);
    
    			return 0;
    
    		case WM_DESTROY:
    
    			DeleteObject(hRgnClip);
    			PostQuitMessage(0);
    
    			return 0;
    
    	}
    
    	return DefWindowProc(hwnd, iMsg, wParam, lParam);
    
    }
    

    soll ich Messer in der Hand nehmen und genau auf einzelne 5 Zeilen zerschneiden ?



  • c2010 schrieb:

    Und Funktionen sollten eh nie die 10 Zeilen überschreiten.

    ...das ist mir neu, wie schauts mit Win.Prozeduren z.b:

    LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    	HDC hdc;
    	PAINTSTRUCT ps;
    	RECT rect;
    
        switch (message)
        {
        	case WM_PAINT:
    
        		hdc = BeginPaint(hwnd, &ps);
        		GetClientRect(hwnd, &rect);
        		DrawText(hdc,
    					TEXT("Hello Windows !"),
    					-1,
    					&rect,
    					DT_SINGLELINE|DT_CENTER|DT_VCENTER);
    
    			EndPaint(hwnd, &ps);
    			return 0;
    
            case WM_DESTROY:
                PostQuitMessage (0);
                return 0;
    
        }
    
        return DefWindowProc (hwnd, message, wParam, lParam);
    }
    

    soll ich Messer in der Hand nehmen und genau auf einzelne 5 Zeilen zerschneiden ?

    Auslagern?

    LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
        switch (message)
        {
        	case WM_PAINT:
                paint();
    			return 0;
    
            case WM_DESTROY:
                PostQuitMessage (0);
                return 0;
        }
    
        return DefWindowProc (hwnd, message, wParam, lParam);
    }
    
    void paint( HWND hwnd,  )
    {
    	HDC hdc;
    	PAINTSTRUCT ps;
    	RECT rect;
    
        hdc = BeginPaint(hwnd, &ps);
        GetClientRect(hwnd, &rect);
        DrawText(hdc,
                TEXT("Hello Windows !"),
                -1,
                &rect,
                DT_SINGLELINE|DT_CENTER|DT_VCENTER);
    
        EndPaint(hwnd, &ps);
    }
    


  • @c210
    Nee, mit Switch ist das was anderes.
    Meine Windows virtual keycode to win::key (enum class) funktion ist auch... ein wenig mehr als 10 zeilen.
    Aber das paint auslagern solltest schon.

    @Sone:
    Eine Zeile geht bei mir bis zum Semikolon, also nicht dieses optische Gedöns:

    handle_.reset(CreateWindowA(def_wnd_class().lpszClassName, title.c_str(),
                                    static_cast<UINT>(style),
                                    x, y,
                                    width, height,
                                    nullptr, nullptr,
                                    GetModuleHandle(nullptr),
                                    nullptr));
    

    Das ist bei mir 1 Zeile.
    Also ist deine Funktion knapp drüber, aber das ist imo in Ordnung.
    Es ist ja wegen z.T. wegen den Zwischenvariablen.
    Mehr dazu steht auch hier:
    http://programmers.stackexchange.com/questions/133404/what-is-the-ideal-length-of-a-method



  • Jetzt hat er was "passenderes" gefunden.

    Auslagern, nach wie vor.



  • Mein Edit kam dir glaube ich zuvor.



  • Nathan schrieb:

    Mein Edit kam dir glaube ich zuvor.

    Ups, ich bezog mich auf c2010. Nicht auf dich, oder was meinst du? 😕



  • Ich hatte mir die MessageProc nicht angesehen und deshalb gesagt, dass die so bleiben kann, weil switch und so.
    Dann habe ich gesehen, dass der da viel reingepackt hat und habe gesagt er solls auslagern.



  • Sone schrieb:

    Nathan schrieb:

    So ungefähr 2700 zeilen code insgesamt, also relativ klein.
    Und ab und zu gibt es da schon funktionen mit 20 zeilen.

    Hmm. Nicht schlecht. Guck mal hier bei mir: https://sourceforge.net/p/linacsim/code/ci/master/tree/

    Bspw.

    void LinacSimFrameListener::zoom( Ogre::Real longer )
    {
        if( mActive
        &&  longer != 0 )
        {
            auto const w = std::abs(mCamera->getPosition().x),
                       h = std::abs(mCamera->getPosition().y);
    
            Ogre::Real const distance = std::sqrt( w*w + h*h );
    
            if( longer > 0 )
                mCamera->move({ -w * longer / distance,
                                (longer + distance) * h / distance - h,
                                0 });
            else
            {
                longer =- longer;
    
                auto y = h - (distance-longer)/distance * h,
                     x = w - (distance-longer)/distance * w;
    
                if( h - y >= 0
                &&  distance - longer >= 25 )
                    mCamera->move({ x, -y, 0 });
            }
        }
    }
    

    Wie kürzt du das ab? 🙂

    Auch schau es mir mal genau an. Dauert aber ein ganzes Weilchen...



  • Volkard, nicht vergessen: Ich mach es noch schöner.
    Sprich: Ich werde Kommentare hinzufügen und viel mehr Dokumentation.
    ➡ http://www.c-plusplus.net/forum/316139

    Aber vielen Dank dass du mal draufschaust 🙂 👍 👍



  • HN versuche einzusetzen da wo es am besten geht und gibt dem Code die bessere Übersichtlichkeit.
    Das mit Auslagern usw...das ist mir alles bekannt.



  • Nathan schrieb:

    Und Funktionen sollten eh nie die 10 Zeilen überschreiten.

    wo hastn diese "weisheit" her?
    das ist käse.
    http://www.welt.de/img/wissen_ipad/crop101879751/7578726492-ci3x2l-w620/schimmelkaese-DW-Wissenschaft-Frankfurt-Main-Archiv.jpg



  • kaesedetector schrieb:

    Nathan schrieb:

    Und Funktionen sollten eh nie die 10 Zeilen überschreiten.

    wo hastn diese "weisheit" her?
    das ist käse.
    http://www.welt.de/img/wissen_ipad/crop101879751/7578726492-ci3x2l-w620/schimmelkaese-DW-Wissenschaft-Frankfurt-Main-Archiv.jpg

    Orthographie nicht vergessen.

    Und Käse ist das nicht unbedingt. Auf keinen Fall der Tipp, die Funktion so klein zu halten wie möglich.
    Der ist wichtig.



  • @Sone:

    @Nathan: Progge in Code::Blocks & NET Beans.

    Boah, du mieser Progger. Schon ein paar H@ck$ geproggt?

    🙂 bin noch in lern phase. Ich finde die IDE's für anfang ausreichend, meine Favorit IDEs: Intel oder Embarcadero.



  • Sone schrieb:

    Nathan schrieb:

    So ungefähr 2700 zeilen code insgesamt, also relativ klein.
    Und ab und zu gibt es da schon funktionen mit 20 zeilen.

    Hmm. Nicht schlecht. Guck mal hier bei mir: https://sourceforge.net/p/linacsim/code/ci/master/tree/

    Bspw.

    void LinacSimFrameListener::zoom( Ogre::Real longer )
    {
        if( mActive
        &&  longer != 0 )
        {
            auto const w = std::abs(mCamera->getPosition().x),
                       h = std::abs(mCamera->getPosition().y);
    
            Ogre::Real const distance = std::sqrt( w*w + h*h );
    
            if( longer > 0 )
                mCamera->move({ -w * longer / distance,
                                (longer + distance) * h / distance - h,
                                0 });
            else
            {
                longer =- longer;
    
                auto y = h - (distance-longer)/distance * h,
                     x = w - (distance-longer)/distance * w;
    
                if( h - y >= 0
                &&  distance - longer >= 25 )
                    mCamera->move({ x, -y, 0 });
            }
        }
    }
    

    Wie kürzt du das ab? 🙂

    //Ausgangspunkt:
    void LinacSimFrameListener::zoom( Ogre::Real longer )
    {
        if( mActive
        &&  longer != 0 )
        {
            auto const w = std::abs(mCamera->getPosition().x),
                       h = std::abs(mCamera->getPosition().y);
    
            Ogre::Real const distance = std::sqrt( w*w + h*h );
    
            if( longer > 0 )
                mCamera->move({ -w * longer / distance,
                                (longer + distance) * h / distance - h,
                                0 });
            else
            {
                longer =- longer;
    
                auto y = h - (distance-longer)/distance * h,
                     x = w - (distance-longer)/distance * w;
    
                if( h - y >= 0
                &&  distance - longer >= 25 )
                    mCamera->move({ x, -y, 0 });
            }
        }
    }
    
    //Autsch, ich muss mit Stg+Mausrad die Schrift kleiner machen, um die ganze Funktion zu sehen. 
    //Ich mach nämlich auch gerne kleine Funktionen. Offenbar nicht so große.
    
    //Ich versuche mal, zu vereinfachen, bzw den Code erstmal zu kapieren.
    //Erstmal stört das Ändern der Übergabevariablen longer ungemein. 
    
    void LinacSimFrameListener::zoom( Ogre::Real longer )
    {
        if( mActive
        &&  longer != 0 )
        {
            auto const w = std::abs(mCamera->getPosition().x),
                       h = std::abs(mCamera->getPosition().y);
    
            Ogre::Real const distance = std::sqrt( w*w + h*h );
    
            if( longer > 0 )
                mCamera->move({ -w * longer / distance,
                                (longer + distance) * h / distance - h,
                                0 });
            else
            {
                //longer =- longer;
    
                auto y = h - (distance+longer)/distance * h,
                     x = w - (distance+longer)/distance * w;
    
                if( h - y >= 0
                &&  distance + longer >= 25 )
                    mCamera->move({ x, -y, 0 });
            }
        }
    }
    
    //Solche Änderungen mache ich jetzt. Sachen, die die Funktion offensichtlich 
    //nicht ändern. Hier die Negierung von longer augfhegoben und stattdessen im 
    //Folgenden das Vorzeichen von longer immer umgedreht. 
    
    //Anscheinende wird beim move mit x was Einfaches gemnacht und mit y 
    //was Kompliziertes. Da muß Mathe ran. 
    
    (longer + distance) * h / distance - h
    =
    h * (longer + distance) / distance - h
    =
    h * (longer/distance + distance/distance) - h
    =
    h * (longer/distance + 1) - h
    =
    h * (longer/distance) + h*1 - h
    = 
    h * (longer/distance)
    
    //Aha, es wird doch. Gleich einbauen. 
    
    void LinacSimFrameListener::zoom( Ogre::Real longer )
    {
        if( mActive
        &&  longer != 0 )
        {
            auto const w = std::abs(mCamera->getPosition().x),
                       h = std::abs(mCamera->getPosition().y);
    
            Ogre::Real const distance = std::sqrt( w*w + h*h );
    
            if( longer > 0 )
                mCamera->move({ -w * longer / distance,
                                h * (longer/distance),
                                0 });
            else
            {
                auto y = h - (distance+longer)/distance * h,
                     x = w - (distance+longer)/distance * w;
    
                if( h - y >= 0
                &&  distance + longer >= 25 )
                    mCamera->move({ x, -y, 0 });
            }
        }
    }
    
    //Jetzt x und y anschauen. 
                auto y = h - (distance+longer)/distance * h,
                     x = w - (distance+longer)/distance * w;
    //also
                auto y = h - (distance/distance+longer/distance) * h,
                     x = w - (distance/distance+longer/distance) * w;
    //also
                auto y = h - (1+longer/distance) * h,
                     x = w - (1+longer/distance) * w;
    //also
                auto y = h - (1*h + longer/distance*h),
                     x = w - (1*h + longer/distance*w);
    //also
                auto y = h - 1*h - longer/distance*h,
                     x = w - 1*h - longer/distance*w;
    //also
                auto y = - longer/distance*h,
                     x = - longer/distance*w;
    //und einbauen...
    
    void LinacSimFrameListener::zoom( Ogre::Real longer )
    {
        if( mActive
        &&  longer != 0 )
        {
            auto const w = std::abs(mCamera->getPosition().x),
                       h = std::abs(mCamera->getPosition().y);
    
            Ogre::Real const distance = std::sqrt( w*w + h*h );
    
            if( longer > 0 )
                mCamera->move({ -w * longer / distance,
                                h * (longer/distance),
                                0 });
            else
            {
                auto y = - longer/distance*h,
                     x = - longer/distance*w;
    
                if( h - y >= 0
                &&  distance + longer >= 25 )
                    mCamera->move({ x, -y, 0 });
            }
        }
    }
    
    //Och, eigentlich gefällt mir das - vor longer nicht. 
    //Ich negiere x und y und drehe im Folgenden deren Vorzeichen um. 
    
    void LinacSimFrameListener::zoom( Ogre::Real longer )
    {
        if( mActive
        &&  longer != 0 )
        {
            auto const w = std::abs(mCamera->getPosition().x),
                       h = std::abs(mCamera->getPosition().y);
    
            Ogre::Real const distance = std::sqrt( w*w + h*h );
    
            if( longer > 0 )
                mCamera->move({ -w * longer / distance,
                                h * (longer/distance),
                                0 });
            else
            {
                auto y = longer/distance*h,
                     x = longer/distance*w;
    
                if( h + y >= 0
                &&  distance + longer >= 25 )
                    mCamera->move({ -x, y, 0 });
            }
        }
    }
    
    //x und y wollen raus. Das geht übrigens nur wegen dem ersten Sritt, wo 
    //ich das longer=-longer weggemacht habe. Ist nicht gut, wenn Variablen in der 
    //Funktion ohne schwere Not ihre Bedeutung ändern. 
    
    void LinacSimFrameListener::zoom( Ogre::Real longer )
    {
        if( mActive
        &&  longer != 0 )
        {
            auto const w = std::abs(mCamera->getPosition().x),
                       h = std::abs(mCamera->getPosition().y);
    
            Ogre::Real const distance = std::sqrt( w*w + h*h );
    
            auto y = longer/distance*h,
                 x = longer/distance*w;
    
            if( longer > 0 )
                mCamera->move({ -w * longer / distance,
                                h * (longer/distance),
                                0 });
            else
            {
    
                if( h + y >= 0
                &&  distance + longer >= 25 )
                    mCamera->move({ -x, y, 0 });
            }
        }
    }
    
    //Klar, daß sie im ersten move verwendet werden. 
    
    void LinacSimFrameListener::zoom( Ogre::Real longer )
    {
        if( mActive
        &&  longer != 0 )
        {
            auto const w = std::abs(mCamera->getPosition().x),
                       h = std::abs(mCamera->getPosition().y);
    
            Ogre::Real const distance = std::sqrt( w*w + h*h );
    
            auto y = longer/distance*h,
                 x = longer/distance*w;
    
            if( longer > 0 )
                mCamera->move({ -x, y, 0 });
            else
            {
    
                if( h + y >= 0
                &&  distance + longer >= 25 )
                    mCamera->move({ -x, y, 0 });
            }
        }
    }
    
    //Oh, ich habe ein DejaVu
    
    //Erste Zeile: Nicht testen und reinverschachteln, sondern testen und beenden!
    void LinacSimFrameListener::zoom( Ogre::Real longer )
    {
        if( !mActive || longer == 0 )
            return;
    
        auto const w = std::abs(mCamera->getPosition().x),
                   h = std::abs(mCamera->getPosition().y);
    
        Ogre::Real const distance = std::sqrt( w*w + h*h );
    
        auto y = longer/distance*h,
             x = longer/distance*w;
    
        if( longer > 0 )
            mCamera->move({ -x, y, 0 });
        else
        {
    
            if( h + y >= 0
            &&  distance + longer >= 25 )
                mCamera->move({ -x, y, 0 });
        }
    }
    
    //Und jetzt den selben Trick unten. 
    //Nicht testen und reinverschachteln, sondern testen und beenden!
    
    void LinacSimFrameListener::zoom( Ogre::Real longer )
    {
        if( !mActive || longer == 0 )
            return;
    
        auto const w = std::abs(mCamera->getPosition().x),
                   h = std::abs(mCamera->getPosition().y);
    
        Ogre::Real const distance = std::sqrt( w*w + h*h );
    
        auto y = longer/distance*h,
             x = longer/distance*w;
    
        if( longer > 0 )
            mCamera->move({ -x, y, 0 });
        else
        {
    
            if( h + y < 0 || distance + longer < 25 )
                return;
            mCamera->move({ -x, y, 0 });
        }
    }
    
    //Das Schubst auch die Tu-Was-Zeilen nach unten. Perfekt, sie sind ja gleich. 
    
    void LinacSimFrameListener::zoom( Ogre::Real longer )
    {
        if( !mActive || longer == 0 )
            return;
    
        auto const w = std::abs(mCamera->getPosition().x),
                   h = std::abs(mCamera->getPosition().y);
    
        Ogre::Real const distance = std::sqrt( w*w + h*h );
    
        auto y = longer/distance*h,
             x = longer/distance*w;
    
        if( longer > 0 )
            ;
        else
        {
    
            if( h + y < 0 || distance + longer < 25 )
                return;
        }
        mCamera->move({ -x, y, 0 });
    }
    
    //if umdrehen
    
    void LinacSimFrameListener::zoom( Ogre::Real longer )
    {
        if( !mActive || longer == 0 )
            return;
    
        auto const w = std::abs(mCamera->getPosition().x),
                   h = std::abs(mCamera->getPosition().y);
    
        Ogre::Real const distance = std::sqrt( w*w + h*h );
    
        auto y = longer/distance*h,
             x = longer/distance*w;
    
        if( longer <= 0 )
        {
            if( h + y < 0 || distance + longer < 25 )
                return;
        }
        mCamera->move({ -x, y, 0 });
    }
    
    //Das
    h + y < 0
    //erweckt gleich auch mal mein Interesse. 
    h + y < 0
    
    h + longer/distance*h < 0
    
    longer/distance*h < -h   //durch h teilen
    
    longer/distance < -1    //mal distance
    
    longer < -distance    //mal distance
    
    //versteh ich nicht. Mal einbauen. 
    
    void LinacSimFrameListener::zoom( Ogre::Real longer )
    {
        if( !mActive || longer == 0 )
            return;
    
        auto const w = std::abs(mCamera->getPosition().x),
                   h = std::abs(mCamera->getPosition().y);
    
        Ogre::Real const distance = std::sqrt( w*w + h*h );
    
        auto y = longer/distance*h,
             x = longer/distance*w;
    
        if( longer <= 0 )
        {
            if( longer < -distance  || distance + longer < 25 )
                return;
        }
        mCamera->move({ -x, y, 0 });
    }
    
    //also
    
    void LinacSimFrameListener::zoom( Ogre::Real longer )
    {
        if( !mActive || longer == 0 )
            return;
    
        auto const w = std::abs(mCamera->getPosition().x),
                   h = std::abs(mCamera->getPosition().y);
    
        Ogre::Real const distance = std::sqrt( w*w + h*h );
    
        auto y = longer/distance*h,
             x = longer/distance*w;
    
        if( longer <= 0 )
        {
            if( longer < -distance  || longer < 25-distance )
                return;
        }
        mCamera->move({ -x, y, 0 });
    }
    
    //also
    
    void LinacSimFrameListener::zoom( Ogre::Real longer )
    {
        if( !mActive || longer == 0 )
            return;
    
        auto const w = std::abs(mCamera->getPosition().x),
                   h = std::abs(mCamera->getPosition().y);
    
        Ogre::Real const distance = std::sqrt( w*w + h*h );
    
        auto y = longer/distance*h,
             x = longer/distance*w;
    
        if( longer <= 0 )
        {
            if( longer < 0-distance  || longer < 25-distance )
                return;
        }
        mCamera->move({ -x, y, 0 });
    }
    
    //Hmm. 
    // wenn longer kleiner 25-distance, dann ist longer auch sicher kleiner 0-distance. 
    //einbauen...
    
    void LinacSimFrameListener::zoom( Ogre::Real longer )
    {
        if( !mActive || longer == 0 )
            return;
    
        auto const w = std::abs(mCamera->getPosition().x),
                   h = std::abs(mCamera->getPosition().y);
    
        Ogre::Real const distance = std::sqrt( w*w + h*h );
    
        auto y = longer/distance*h,
             x = longer/distance*w;
    
        if( longer <= 0 )
        {
            if( longer < -distance )
                return;
        }
        mCamera->move({ -x, y, 0 });
    }
    
    //also distance ist ja immer nichtnegativ...
    //Dann kann longer nur kleiner als -distance sein, wenn longer <=0. 
    //einbauen...
    
    void LinacSimFrameListener::zoom( Ogre::Real longer )
    {
        if( !mActive || longer == 0 )
            return;
    
        auto const w = std::abs(mCamera->getPosition().x),
                   h = std::abs(mCamera->getPosition().y);
        Ogre::Real const distance = std::sqrt( w*w + h*h );
    
        auto y = longer/distance*h,
             x = longer/distance*w;
    
        if( longer < -distance )
                return;
    
        mCamera->move({ -x, y, 0 });
    }
    
    //So, Strg+Mausrad und Schrift wieder groß machen und anschauen...
    
    //Jo, mehr als 10 Zeilen.
    

    Alle Code-Transformationen ohne, daß ich weiß, was die Funktion macht. Bestimmt haben sich Fehler eingeschlichen. Normalerweise werden bei so Transformationen eher Fehler augfgedeckt, weil der COde einfacher wird. Oftmals kapiert man erst, was man geschrieben hatte und dann fällt einem ein, daß es noch einfacher oder schneller geht.



  • Sone schrieb:

    Volkard, nicht vergessen: Ich mach es noch schöner.

    Das wäre toll.

    Sone schrieb:

    Sprich: Ich werde Kommentare hinzufügen und viel mehr Dokumentation.

    Wozu? Mach doch den Code lesbar. Ich weiß immernochnicht, was longer bedeutet.
    Jo, Kommentar wäre gut, was die Funktion überhaupt machen soll. Das WIE muss aber im Allgemeinen nicht erklärt werden.



  • Naja, wenn ich für jede Funktion so ein Refactoring erstelle, wäre das Wahnsinn.

    Ich setze mich mal kurz ran und mach es selbst, warte kurz.


Anmelden zum Antworten