Yet another old-school stuff

Everything else that doesn't fall into one of the other PB categories.
User avatar
Psychophanta
Addict
Addict
Posts: 4974
Joined: Wed Jun 11, 2003 9:33 pm
Location: Lípetsk, Russian Federation
Contact:

Yet another old-school stuff

Post by Psychophanta »

Code: Select all

; Test and play yourself with it (better in PB5.7x versions)

If InitMouse()=0 Or InitSprite()=0 Or InitKeyboard()=0
  MessageRequester("Error","Can't access DirectX",0):End
EndIf
RX.u=1024;GetSystemMetrics_(#SM_CXSCREEN)
RY.u=768;GetSystemMetrics_(#SM_CYSCREEN)
OpenWindow(0,0,0,RX,RY,"aac",#PB_Window_BorderLess|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0),0,0,RX,RY,0,0,0,#PB_Screen_WaitSynchronization)
Macro mono(spri,vol,c1,c2,c3,c4,c5)
  CreateSprite(spri#,vol#,vol#)
  StartDrawing(SpriteOutput(spri#)):BackColor(0)
  For t.l=vol#/2-1 To 1 Step -1:Circle(vol#/2,vol#/2,t,RGB(c1#-t*2,c2#-t*2,c3#-t*2)):Next
  Line(vol#/2,0,1,vol#-1,$0):Line(0,vol#/2,vol#-1,1,$0):FillArea(vol#/2+1,vol#/2-1,0,c4#):FillArea(vol#/2-1,vol#/2+1,0,c5#)
  StopDrawing()
  RotateSprite(spri#,-45,#PB_Relative)
  r#spri#x.u=SpriteWidth(spri#)/2:r#spri#y.u=SpriteHeight(spri#)/2;<-centro
  r#spri#.u=(r#spri#x.u+r#spri#y.u)/2
  m#spri#.f=4*#PI*Pow(r#spri#.u,3)/3
EndMacro
Macro marco(spri)
  If p#spri#x.f<0 Or p#spri#x.f>RX:v#spri#x.f=-v#spri#x.f:EndIf
  If p#spri#y.f<0 Or p#spri#y.f>RY:v#spri#y.f=-v#spri#y.f:Else:v#spri#y.f+0.1; <- gravedad (opcional)
  EndIf
  p#spri#x.f+v#spri#x.f:p#spri#y.f+v#spri#y.f
EndMacro
Macro inic()
  p0x.f=5:p0y.f=RY/2
  p1x.f=100:p1y.f=RY/2
  p2x.f=435:p2y.f=RY/5
  p3x.f=290:p3y.f=RY/5
  v0x.f=0:v0y.f=0
  v1x.f=0:v1y.f=0
  v2x.f=0:v2y.f=0
  v3x.f=0:v3y.f=0
EndMacro
Macro clac(o,n,C_R=1.0)
  dx.f=p#o#x-p#n#x:dy.f=p#o#y-p#n#y
  d.f=Sqr(dx.f*dx.f+dy.f*dy.f)
  s.f=r#n#.u+r#o#.u-d.f
  If s.f>0
    dx.f/d.f:dy.f/d.f
    mt.f=m#n#.f+m#o#.f
    ds.f=s.f*m#o#.f/mt.f
    p#n#x-ds.f*dx.f:p#n#y-ds.f*dy.f
    ds.f=s.f-ds.f
    p#o#x+ds.f*dx.f:p#o#y+ds.f*dy.f
    VC.f=(dx.f*v#n#x.f+dy.f*v#n#y.f)
    V.f=(dx.f*v#o#x.f+dy.f*v#o#y.f)
    ur.f=C_R#*(V.f-VC.f)
    di.f=(m#n#.f*VC.f+m#o#.f*V.f-m#n#.f*ur.f)/mt.f-V.f
    v#o#x.f+di.f*dx.f:v#o#y.f+di.f*dy.f
    di.f+ur.f+ur.f/C_R#
    v#n#x.f+di.f*dx.f:v#n#y.f+di.f*dy.f
  EndIf
EndMacro

mono(0,65,220,220,220,$99AAAA,$AAAAAA)
mono(1,129,200,240,240,$99BB99,$99AAAA)
mono(2,45,220,220,220,$99AAAA,$AAAAAA)
mono(3,141,200,240,240,$99BB99,$99AAAA)
inic()

Repeat
  WindowEvent():ExamineKeyboard():ExamineMouse():ClearScreen(0)
  If KeyboardReleased(#PB_Key_Space):v1x.f=30:v2x.f=22
  ElseIf KeyboardReleased(#PB_Key_F1):inic()
  EndIf
  marco(0)
  marco(1)
  marco(2)
  marco(3)
  clac(3,2)
  clac(1,0)
  DisplayTransparentSprite(0,p0x.f-r0x.u,p0y.f-r0y.u)
  DisplayTransparentSprite(1,p1x.f-r1x.u,p1y.f-r1y.u)
  DisplayTransparentSprite(2,p2x.f-r2x.u,p2y.f-r2y.u)
  DisplayTransparentSprite(3,p3x.f-r3x.u,p3y.f-r3y.u)
  FlipBuffers():Delay(15)
Until KeyboardPushed(#PB_Key_Escape)
http://www.zeitgeistmovie.com

While world=business:world+mafia:Wend
Will never leave this forum until the absolute bugfree PB :mrgreen: