Tweeny Kullanmadan Animasyonlu Pencere

  • Konuyu açan Konuyu açan Tengrist
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 13
  • Gösterim Gösterim 867

Tengrist

Mapper
Mapper
Yardımsever Üye
MT Üye
Mesaj
1.702
Çözümler
44
Beğeni
1.681
Puan
1.329
Ticaret Puanı
0
Doğum günüme özel paylaşım. Kobra21 nickli macar kardeşime teşekkürler onun sayesinde paylaşıyorum. tweeny'i kullanamadığım client src si eski bir filesa bir müşterime eklemiştim. Arayan vardır diye paylaşıyorum.

pythonwindowmanagermodule.cpp:
Genişlet Daralt Kopyala
// arat

        else if (!stricmp(pszFlag, "rtl"))
            pWin->AddFlag(UI::CWindow::FLAG_RTL);
           
// Altına ekle


        else if (!stricmp(pszFlag, "animate"))
            pWin->AddFlag(UI::CWindow::FLAG_ANIMATED_BOARD);

pythonwindow.h:
Genişlet Daralt Kopyala
// Ara

FLAG_IS_BOARD_WITHOUT_ALPHA

// Altına mantıklı şekilde kendi bit’ini ver, BIT = bende << 15

#ifdef ENABLE_ANIMATED_BOARD
            FLAG_ANIMATED_BOARD = (1 << 15),
#endif

// Ara ya da sende nasıl varsa. (boşluklar / tab’lar yüzünden birebir aynı olmayabilir.)

virtual BOOL    IsWindow() { return TRUE; }

// Altına

#ifdef ENABLE_ANIMATED_BOARD
        virtual void SetScale(float fx, float fy);
#endif

// Ara ya da sende nasıl varsa. (boşluklar / tab’lar yüzünden birebir aynı olmayabilir.)

bool                m_bShow;

// Altına ekle

#ifdef ENABLE_ANIMATED_BOARD
        bool m_bAnimatingShow;
        bool m_bAnimatingHide;
        float m_fAnimScaleStart;
        float m_fAnimScaleEnd;
        float m_fAnimScale;
        uint32_t m_dwAnimDuration;
        uint32_t m_dwAnimStartTime;

        D3DXVECTOR2 m_v2Scale;
        D3DXMATRIX m_matScaling;

#endif

pythonwindow.cpp:
Genişlet Daralt Kopyala
// Ara

BOOL g_bOutlineBoxEnable = FALSE;

// Altına
// Bununla cubicOut fonksiyonunu işliyorsun

#ifdef ENABLE_ANIMATED_BOARD
float cubicOut(float t)
{
    float f = t - 1.0f;
    return f * f * f + 1.0f;
}
#endif

// Ara ya da sende nasıl varsa. (boşluklar / tab’lar yüzünden birebir aynı olmayabilir.)

CWindow::CWindow(PyObject* ppyObject) :
Burada --> m_bShow(false),

// Altına ekle

#ifdef ENABLE_ANIMATED_BOARD
        m_bAnimatingShow(false),
        m_bAnimatingHide(false),
        m_fAnimScaleStart(1.0f),
        m_fAnimScaleEnd(1.0f),
        m_fAnimScale(1.0f),
        m_dwAnimDuration(0),
        m_dwAnimStartTime(0),
#endif

// Ara

m_windowType = WINDOW_TYPE_WINDOW;

// Altına ekle

#ifdef ENABLE_ANIMATED_BOARD
        m_v2Scale = D3DXVECTOR2(1.0f, 1.0f);
        D3DXMatrixIdentity(&m_matScaling);
#endif

// Ara

    void CWindow::Show()
    {

// Buradaki m_bShow = true; kısmını değiştir

#ifdef ENABLE_ANIMATED_BOARD
        if (IsFlag(FLAG_ANIMATED_BOARD))
        {
            if (!this->m_bShow)
            {
                this->m_bShow = true;

                m_bAnimatingShow = true;
                m_bAnimatingHide = false;
                m_fAnimScaleStart = 0.0f;
                m_fAnimScaleEnd = 1.0f;
                m_fAnimScale = 0.0f;
                m_dwAnimDuration = 175;
                m_dwAnimStartTime = ELTimer_GetMSec();

                SetScale(0.0f, 0.0f);
            }
            else
            {
                this->m_bShow = true;
                SetScale(1.0f, 1.0f);
            }
        }
        else
        {
            m_bShow = true;
        }
#else
        m_bShow = true;
#endif


// Ara

    void CWindow::Hide()
    {
   
// Buradaki m_bShow = false; kısmını değiştir
// Şununla değiştir:

#ifdef ENABLE_ANIMATED_BOARD
        if (IsFlag(FLAG_ANIMATED_BOARD))
        {
            if (m_bShow)
            {
                m_bAnimatingHide = true;
                m_bAnimatingShow = false;
                m_fAnimScaleStart = 1.0f;
                m_fAnimScaleEnd = 0.0f;
                m_fAnimScale = 1.0f;
                m_dwAnimDuration = 120;
                m_dwAnimStartTime = ELTimer_GetMSec();
            }
            else
                m_bShow = false;
        }
        else
        {
            m_bShow = false;
        }
#else
        m_bShow = false;
#endif

// Ara void CWindow::Update()
// Bunun içinde OnUpdate(); satırını bul
// Onun altına ekle

#ifdef ENABLE_ANIMATED_BOARD
        if (IsFlag(FLAG_ANIMATED_BOARD))
        {
            if (m_bAnimatingShow || m_bAnimatingHide)
            {
                uint32_t now = ELTimer_GetMSec();
                uint32_t elapsed = now - m_dwAnimStartTime;

                float t = (float)elapsed / (float)m_dwAnimDuration;
                if (t > 1.0f)
                    t = 1.0f;

                float eased = cubicOut(t);
                m_fAnimScale = m_fAnimScaleStart + (m_fAnimScaleEnd - m_fAnimScaleStart) * eased;

                SetScale(m_fAnimScale, m_fAnimScale);

                if (t >= 1.0f)
                {
                    if (m_bAnimatingShow)
                    {
                        m_bAnimatingShow = false;
                        SetScale(1.0f, 1.0f);
                    }
                    if (m_bAnimatingHide)
                    {
                        m_bAnimatingHide = false;
                        SetScale(0.0f, 0.0f);
                        m_bShow = false;
                    }
                }
            }
        }
#endif

// Ara void CWindow::Render()
// Bunun içinde
//         if (!IsShow())
//            return;
// satırlarını bul
// Altına ekle

#ifdef ENABLE_ANIMATED_BOARD
        if (IsFlag(FLAG_ANIMATED_BOARD))
        {
            D3DXMATRIX oldMat;
            STATEMANAGER.GetTransform(D3DTS_WORLD, &oldMat);

            D3DXMATRIX newMat = oldMat * m_matScaling;
            STATEMANAGER.SetTransform(D3DTS_WORLD, &newMat);

            OnRender();

            std::for_each(m_pChildList.begin(), m_pChildList.end(), std::mem_fn(&CWindow::Render));

            STATEMANAGER.SetTransform(D3DTS_WORLD, &oldMat);

            return;
        }
#endif

// Dosyanın en sonuna şunu ekle

void UI::CWindow::SetScale(float fx, float fy)
{
#ifdef ENABLE_ANIMATED_BOARD
    m_v2Scale.x = fx;
    m_v2Scale.y = fy;
    UpdateRect();

    // Merkezden ölçekleme!
    float centerX = m_x + (m_lWidth / 2.0f);
    float centerY = m_y + (m_lHeight / 2.0f);

    D3DXMATRIX mat, matTrans, matTransBack;
    D3DXMatrixTranslation(&matTrans, -centerX, -centerY, 0.0f);
    D3DXMatrixScaling(&mat, fx, fy, 1.0f);
    D3DXMatrixTranslation(&matTransBack, centerX, centerY, 0.0f);

    m_matScaling = matTrans * mat * matTransBack;
#endif
}

Locale_inch'e sistemi ekleyi unutma. Py tarafında ise:

Nerede aktif olmasını istiyorsan


"animate" ekliyorsun.


ÖRNEK:


Uiinventory.py


uiscript içinde eklemen lazım animate:
Genişlet Daralt Kopyala
Uiinventory.py animate i ekleyeceksin virgüller ve "" dikkat et

window = {
    "name" : "InventoryWindow",

    "x" : SCREEN_WIDTH - 212,
    "y" : SCREEN_HEIGHT - 37 - 573,

    "style" : ("movable", "float", "window_without_alpha", "animate"),

uishop.py fixi:
Genişlet Daralt Kopyala
##Dosyanın en üst kısmında, son import satırının altına ekle:

ANIM_FIX = 0.2

##self.tooltipItem = 0 satırını iki kez ara.

##Biri def __init__(self): içinde,
##Diğeri def Destroy(self): içinde.

##Her birinin altına şu satırı ekle:

self.animfix = 0

##def Close(self): fonksiyonunda self.Hide() satırını bul.
##Onu aşağıdaki kodla değiştir tab ayarını kendine göre yaparsın:

# ANIMFIX
        if app.GetTime() >= self.animfix:
            self.animfix = app.GetTime() + ANIM_FIX
            self.Hide()

Bu sayede pencereyi kapatma (Close) çağrıları çok hızlı art arda tetiklenmeyecek, en az 0.2 saniye bekleme süresi (delay) eklenecek. Böylece animasyonun düzgün çalışması garanti altına alınmış oluyor.
 
Son düzenleme:
m_windowType = WINDOW_TYPE_WINDOW; bu kısım tam olarak nerede
 
örnek py tarafı varmı hocam peki bakabileceğimiz
 
m_windowType = WINDOW_TYPE_WINDOW; bu kısım tam olarak nerede
constructor ın içine
C++:
Genişlet Daralt Kopyala
m_rect.bottom = m_rect.left = m_rect.right = m_rect.top = 0;
m_limitBiasRect.bottom = m_limitBiasRect.left = m_limitBiasRect.right = m_limitBiasRect.top = 0;

şunun altına ekler misiniz eski bir filesa eklemiştim 2 3 sene önce
 
constructor ın içine
C++:
Genişlet Daralt Kopyala
m_rect.bottom = m_rect.left = m_rect.right = m_rect.top = 0;
m_limitBiasRect.bottom = m_limitBiasRect.left = m_limitBiasRect.right = m_limitBiasRect.top = 0;

şunun altına ekler misiniz eski bir filesa eklemiştim 2 3 sene önce
STATEMANAGER içinde hata veriyor

pythonwindow.cpp içine

#include "../eterLib/StateManager.h"

harici başka hata almadan sorunsuz ekledim teşekkürler

 
Son düzenleme:
fantazi olsun diye vb.nette ekranda random gezinecek ve ordan buraya kendi kendini küçülüp büyülten ve şekilden şekle girecek şekilde saçma bir şey yapmıştım can sıkıntısından :) işsizlik insana gerçekten neler yaptırıyor düşün artık :D bu arada macar sucuğu iyi diyolar henüz yemek nasip olmadı ama zjhxfgasghkd
 
Tweenyli olanı eklemek mi mantıklı bunu mu? altyapım marty 5.8 p23
İlk kullandığımda tweeny kütüphanesi paylaşılmamıştı, iki yöntemi de kullanabilirsiniz. Tweeny heralde v2019 altında kullanmak için bir şeyleri değiştirmek gerekiyordu diye hatrımda kalmış, bu 2013te bile derlenir. Performans olarak bir şikayet gelmedi 4 5 sene oldu heralde bunu kullanalı
 
@Tengrist
Selam kardeşim! Paylaşımın için çok teşekkürler, ellerine sağlık.

Kobra21 benim! :D Doğum günün kutlu olsun bu arada, nice senelere! Bunu en basit şekilde çözmeye çalıştım ama bir sorun vardı; minimap ve pazar penceresi sürekli zıplıyordu.

Paylaştığın için tekrar çok teşekkür ederim, gerçekten sağ ol. <3
 
@Tengrist
Selam kardeşim! Paylaşımın için çok teşekkürler, ellerine sağlık.

Kobra21 benim! :D Doğum günün kutlu olsun bu arada, nice senelere! Bunu en basit şekilde çözmeye çalıştım ama bir sorun vardı; minimap ve pazar penceresi sürekli zıplıyordu.

Paylaştığın için tekrar çok teşekkür ederim, gerçekten sağ ol. <3
Sistemi yarattığın için teşekkürler kardeşim 🙏❤️
 
Sevgili arkadaşlar bir sistem paylaşıp neden görüntü video paylaşmıyorsunuz çok merak ediyorum :D
Ne görüntüsü adam tweeny muadilini yapmış paylaşmış sen tweenyi ne onu bilmediğin için görüntü istiyorsunda bu şeye benziyor havayı paylaşmaya ya da toprağı 😂 görüntülülük bişey değil tweeny kuramayanlara alternatif çözüm
 
Geri
Üst