• Welcome to Dark Bit Factory & Gravity.
 

Double Twisters

Started by Shockwave, August 15, 2009

Previous topic - Next topic

0 Members and 0 Guests are viewing this topic.

Shockwave

I put this together because I wanted to show people how to make this very simple but great looking effect.

Exe attached.


'

' EXAMPLE USING TWO FAKE LIGHT SOURCED TWISTERS
' SHOWING HOW TO CODE THIS VERY SIMPLE BUT NICE EFFECT.

' BY SHOCKWAVE, WWW.DBFINTERACTIVE.COM

'===============================================================================

    #INCLUDE "TINYPTC_EXT.BI"
    #INCLUDE "WINDOWS.BI"
   
'===============================================================================
'   THE PICTURE;
'===============================================================================

'   FIXED SIZE ARRAYS DECLARE ALL VARIABLES;

    OPTION STATIC
    OPTION EXPLICIT
   
'===============================================================================
'   LETS SET UP TINYPTC.
'===============================================================================

    CONST XRES = 800:' WIDTH OF YOUR SCREEN
    CONST YRES = 600:' HEIGHT OF YOUR SCREEN
'===============================================================================
'   SCREEN BUFFER;
'===============================================================================

    DIM SHARED AS UINTEGER BUFFER ( XRES * YRES )
    DECLARE SUB DRAW_SLICE(BYVAL XP AS INTEGER ,BYVAL YP AS INTEGER, BYVAL SLICE AS INTEGER, BYVAL TC AS UINTEGER)
    DECLARE SUB DRAWSECTION(BYVAL PASS AS DOUBLE, BYVAL XPASS AS INTEGER ,BYVAL YPASS AS INTEGER,BYVAL PLUS AS DOUBLE)
    DECLARE SUB TWISTERS()
    DIM SHARED AS DOUBLE OPX1(YRES)
    DIM SHARED AS DOUBLE R2D
    R2D=3.13/720
    DIM SHARED AS DOUBLE RADDEG
    RADDEG=3.14/360

'===============================================================================
'   ACTUALLY OPEN THE SCREEN;
'===============================================================================

    PTC_ALLOWCLOSE(0)
    PTC_SETDIALOG(1,"DOUBLE TWISTERS"+CHR$(13)+"",0,1)               
    IF (PTC_OPEN("BY SHOCKWAVE/CODIGOS",XRES,YRES)=0) THEN
    END-1
    END IF   
    SLEEP 5
   
    DIM SHARED AS DOUBLE T1,T2,DV,DOLD
   

'===============================================================================
'  MAIN LOOP (UNTIL ESC OR LEFT MOUSE)
'===============================================================================


WHILE(GETASYNCKEYSTATE(VK_ESCAPE)<> -32767 and PTC_GETLEFTBUTTON=FALSE) 
    DOLD=TIMER
    TWISTERS()
    PTC_UPDATE@BUFFER(0)
    'CLEAR THE SCREEN
    SLEEP 1
    ERASE BUFFER
    DV=(((TIMER-DOLD)*10)+1)
    T1=T1+DV
    T2=T2+DV*3
WEND

    EXITPROCESS(0)

END


SUB TWISTERS()
    DIM Y AS INTEGER
    DIM AS DOUBLE PX1,PX2,Q
   
   
    FOR Y=0 TO YRES-1
        Q=150*SIN((Y+T1)*.01)
        PX1=200+129*SIN((Y+T1)*R2D)
        PX2=200+ 30*COS((Y+T1+720)*R2D)

        IF PX1>OPX1(Y) THEN
                DRAWSECTION(Y-T2-Q,PX1,Y,1)
                DRAWSECTION(Y+T2+Q,PX2,Y,.6)
        ELSE
                DRAWSECTION(Y+T2+Q,PX2,Y,.6)
                DRAWSECTION(Y-T2-Q,PX1,Y,1)
        END IF
        OPX1(Y)=PX1   
    NEXT
   
   
END SUB


SUB DRAWSECTION(BYVAL PASS AS DOUBLE, BYVAL XPASS AS INTEGER ,BYVAL YPASS AS INTEGER,BYVAL PLUS AS DOUBLE)
    DIM AS INTEGER X1,X2,X3,X4,TC,CL
    X1=(120*SIN( PASS     *RADDEG))+XPASS
    X2=(120*SIN((PASS+180) *RADDEG))+XPASS
    X3=(120*SIN((PASS+360)*RADDEG))+XPASS
    X4=(120*SIN((PASS+540)*RADDEG))+XPASS
   
   
    IF X2>X1 THEN
        CL=X2-X1       
        DRAW_SLICE(X1+XPASS,YPASS,X2-X1,RGB(CL*.9,CL*.8,CL*PLUS))
    END IF

    IF X3>X2 THEN
        CL=X3-X2       
        DRAW_SLICE(X2+XPASS,YPASS,X3-X2,RGB(CL*PLUS,CL*.9,CL*.8))
    END IF

    IF X4>X3 THEN
        CL=X4-X3       
        DRAW_SLICE(X3+XPASS,YPASS,X4-X3,RGB(CL*.9,CL*.8,CL*PLUS))
    END IF

    IF X1>X4 THEN
        CL=X1-X4       
        DRAW_SLICE(X4+XPASS,YPASS,X1-X4,RGB(CL*PLUS,CL*.9,CL*.8))
    END IF

   


END SUB


SUB DRAW_SLICE(BYVAL XP AS INTEGER , BYVAL YP AS INTEGER, BYVAL SLICE AS INTEGER, BYVAL TC AS UINTEGER)
    DIM PP AS UINTEGER PTR
        PP=@BUFFER(XP+(YP*XRES))
        '-----------------------------------------------------------------------
        ASM
            MOV EAX,dword ptr[TC]
            MOV ECX, [SLICE]
            MOV EDI, [PP]
            REP STOSD
        END ASM
        '-----------------------------------------------------------------------
END SUB


Adding a texture to this is elementary, if there is call for it I'll add one.
Shockwave ^ Codigos
Challenge Trophies Won:

Dr.Death

Nice work shocky you never stop helping people out with your little code tricks.
Freebasic just keeps on amazing me too  :goodpost:
Proud member of DAWN

TinDragon

Looks nice tho not sure about the cream color  :D

Shockwave

Yep, the colours suck.
Shockwave ^ Codigos
Challenge Trophies Won:

va!n

Shockwave i love you :P your sources are really great! K++
- hp EliteBook 8540p, 4 GB RAM, Windows 8.1 x64
- Asus P5Q, Intel Q8200, 6 GB DDR2, Radeon 4870, Windows 8.1 x64
http://www.secretly.de
Challenge Trophies Won: