Little delirium - Lotus demo

Share your advanced PureBasic knowledge/code with the community.
User avatar
djes
Addict
Addict
Posts: 1806
Joined: Sat Feb 19, 2005 2:46 pm
Location: Pas-de-Calais, France

Little delirium - Lotus demo

Post by djes »

Code: Select all

;********************************
;*
;* LOTUS DEMO
;* djes 28/03/2011
;*
;********************************

Procedure FilterCallback(x, y, SourceColor, TargetColor)
  r.l = (0.5 * Sqr((x - 64) * (x - 256) + (y - 256) * (y - 256) )) 
  v.l = (0.5 * Sqr((x - 256) * (x - 64) + (y - 256) * (y - 64) )) 
  b.l = (0.5 * Sqr((x - 256) * (x - 256) + (y - 64) * (y - 256) )) 
  a.l = (256 * (512 - Sqr((x - 256) * (x - 256) + (y - 256) * (y - 256) ))) 
  u%255
  ProcedureReturn RGBA(r, v, b, a)
EndProcedure

If InitSprite() = 0 Or InitKeyboard() = 0
  MessageRequester("Error", "Sprite system can't be initialized", 0)
  End
EndIf

If InitSprite3D() = 0
  MessageRequester("Error", "Sprite3D system can't be initialized correctly", 0)
  End
EndIf

If OpenWindow(0, 0, 0, 512, 512, "Un écran dans une fenêtre...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  
  If OpenWindowedScreen(WindowID(0), 0, 0, 512, 512, 0, 0, 0)

    If CreateImage(0, 512, 512, 32) And StartDrawing(ImageOutput(0))
 
      DrawingMode(#PB_2DDrawing_AlphaChannel)
      Box(0, 0, 512, 512, $00000000)
      DrawingMode(#PB_2DDrawing_CustomFilter)      
      CustomFilterCallback(@FilterCallback())     
      Circle( 256, 256, 256 )
      StopDrawing()
      
    EndIf
    
    If StartDrawing(ScreenOutput())      
      DrawImage(ImageID(0), 0, 0)
      StopDrawing()     
    EndIf
    
    GrabSprite(0, 0, 0, 512, 512, #PB_Sprite_Texture|#PB_Sprite_AlphaBlending)
    
    For u = 0 To 31
      CreateSprite3D(u, 0)
    Next u
     
    Sprite3DQuality(#PB_Sprite3D_BilinearFiltering)
   
    i.f = 0
    bl_src = 2
    bl_dst = 6
    
    Repeat
      
      Event = WindowEvent()
      
      Select Event 
        Case #PB_Event_Gadget
          If EventGadget() = 0
            End
          EndIf
        
        Case #PB_Event_CloseWindow
          End 
      EndSelect
     
      FlipBuffers()
      
      ClearScreen(RGB(0,50,128))
      
      
      If Start3D()
        
        Sprite3DBlendingMode(bl_src, bl_dst) 
  
        For u = 0 To 31
          w = 512 * Sin(i + u * 5)
          h = 512 * Sin(i + u * 5)
          ZoomSprite3D(u, w, h)
          RotateSprite3D(u, i * 100 + u * 5, 0)
          DisplaySprite3D(u, 256 - w / 2 - 8 * Sin(i * u), 256 - h / 2 - 8 * Cos(i * u), 127)
        Next u    
        
        Stop3D()
      EndIf
      
      ExamineKeyboard()
      
      If KeyboardReleased(#PB_Key_Up)
        bl_src + 1
      EndIf
      If KeyboardReleased(#PB_Key_Down)
        bl_src - 1
      EndIf
      If KeyboardReleased(#PB_Key_Left)
        bl_dst + 1
      EndIf
      If KeyboardReleased(#PB_Key_Right)
        bl_dst - 1
      EndIf
        
      i+0.01
    Until KeyboardPushed(#PB_Key_Escape)
  
  Else
    MessageRequester("Erreur", "Can't open a screen !", 0)
    End
  EndIf  

Else
  MessageRequester("Error", "Can't open a window !", 0)
EndIf
  
  
End   
User avatar
idle
Always Here
Always Here
Posts: 5915
Joined: Fri Sep 21, 2007 5:52 am
Location: New Zealand

Re: Little delirium - Lotus demo

Post by idle »

looks good
Windows 11, Manjaro, Raspberry Pi OS
Image
User avatar
Kwai chang caine
Always Here
Always Here
Posts: 5494
Joined: Sun Nov 05, 2006 11:42 pm
Location: Lyon - France

Re: Little delirium - Lotus demo

Post by Kwai chang caine »

Splendid :shock:
Thanks for sharing 8)
ImageThe happiness is a road...
Not a destination
Post Reply