Page 1 of 1

Little delirium - Lotus demo

Posted: Mon Mar 28, 2011 9:30 pm
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   

Re: Little delirium - Lotus demo

Posted: Mon Mar 28, 2011 10:27 pm
by idle
looks good

Re: Little delirium - Lotus demo

Posted: Tue Mar 29, 2011 9:23 am
by Kwai chang caine
Splendid :shock:
Thanks for sharing 8)