Cheap 2D Water ripples

Advanced game related topics
User avatar
Kukulkan
Addict
Addict
Posts: 1352
Joined: Mon Jun 06, 2005 2:35 pm
Location: germany
Contact:

Re: Cheap 2D Water ripples

Post by Kukulkan »

Hello wilbert,

it is better (no longer crashing) but it steals the mouse from the whole desktop and I can see nothing if I click the mouse or move it. Pressing ESC releases the mouse and program closes. Maybe my graphics card (Intel HD 630 Kabby Lake GT2) with MESA Graphics and OpenGL 3.0 is not supported by PB?

I'm currently on KDE Neon LTS 5.12 (64 bit) with PDE Plasma 5.12.5.
wilbert
PureBasic Expert
PureBasic Expert
Posts: 3870
Joined: Sun Aug 08, 2004 5:21 am
Location: Netherlands

Re: Cheap 2D Water ripples

Post by wilbert »

Don't know what is causing the problems :?

Here's a variation for Canvas.
Performance of course isn't as good as Screen but the effect is more or less the same.
If more speed is required, it could be converted to asm.

Code: Select all

DisableDebugger
#X=400:#Y=300
#Dampening=0.995 ;change this value to make the wave last longer (closer to 1)

Dim Buffer.f(#X*2-1,#Y-1)

If OpenWindow(0, 0, 0,#X, #Y, "2D Waves", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  CanvasGadget(0, 0, 0, #X, #Y, #PB_Canvas_Container)  
  ButtonGadget(1, 10, 10, 80, 30, "Clean up")
  CloseGadgetList()
  AddWindowTimer(0, 0, 32)
  
  Repeat
    Event = WaitWindowEvent()
    
    If Event = #PB_Event_Timer
      StartDrawing(CanvasOutput(0))
      
      For k=1 To #X-2
        i=k+#X
        For j=1 To #Y-2
          Buffer(i,j)=((Buffer(k-1,j)+Buffer(k+1,j)+Buffer(k,j-1)+Buffer(k,j+1))*0.5-Buffer(i,j))*#Dampening                
        Next
      Next
      
      For i=1 To #X-2
        k=i+#X
        For j=1 To #Y-2
          Buffer(i,j)=((Buffer(k-1,j)+Buffer(k+1,j)+Buffer(k,j-1)+Buffer(k,j+1))*0.5-Buffer(i,j))*#Dampening                
          Plot(i,j,$010101*Int(Buffer(i,j)*10))
        Next
      Next
      
      StopDrawing()
      
    ElseIf Event = #PB_Event_Gadget
      Select EventGadget() 
        Case 0
          If EventType() = #PB_EventType_LeftButtonDown Or (EventType() = #PB_EventType_MouseMove And GetGadgetAttribute(0, #PB_Canvas_Buttons) & #PB_Canvas_LeftButton)
            Buffer(GetGadgetAttribute(0, #PB_Canvas_MouseX), GetGadgetAttribute(0, #PB_Canvas_MouseY))=20
          EndIf
        Case 1
          FillMemory(@Buffer(0,0), #X*#Y<<3)
      EndSelect
      
    EndIf
  Until Event = #PB_Event_CloseWindow
EndIf
Last edited by wilbert on Wed May 09, 2018 5:39 pm, edited 1 time in total.
Windows (x64)
Raspberry Pi OS (Arm64)
User avatar
Kukulkan
Addict
Addict
Posts: 1352
Joined: Mon Jun 06, 2005 2:35 pm
Location: germany
Contact:

Re: Cheap 2D Water ripples

Post by Kukulkan »

Hi wilbert,

this version is working! I had to remove #PB_Canvas_Container, because 5.46 LTS does not know this flag, but now it's working. Thank you!

@Fig: Great effect :-)
User avatar
Kuron
Addict
Addict
Posts: 1626
Joined: Sat Oct 17, 2009 10:51 pm
Location: Pacific Northwest

Re: Cheap 2D Water ripples

Post by Kuron »

Fig wrote:Did you left click, Kuron ? I don't know if your reading system can render what's going on with ripples on screen...
It produces concentric circles with a height map in greyish color. (more than 50 grey of shade ^^)

Yes, I did left-click. Not sure if I am doing something wrong or it just doesn't like me. Sounds interesting, though. :mrgreen:
Best wishes to the PB community. Thank you for the memories. ♥️
zefiro_flashparty
User
User
Posts: 74
Joined: Fri Mar 04, 2005 7:46 pm
Location: argentina

Re: Cheap 2D Water ripples

Post by zefiro_flashparty »

:mrgreen:
I'll see if I can do something similar with a background photo,
expanding with box, the pixels to create the magnifying effect ;D
Amd Vishera fx8350 ,16Gbram, Gtx650 ti, 2gb,Win 10pro. 13tbs. 8)
Post Reply