November 25, 2020, 04:27:55 AM

Author Topic: [bb] 2d in 3d by Warner [ 1+ years ago ]  (Read 766 times)

Offline BlitzBot

  • Jr. Member
  • **
  • Posts: 1
[bb] 2d in 3d by Warner [ 1+ years ago ]
« on: June 29, 2017, 12:28:43 AM »
Title : 2d in 3d
Author : Warner
Posted : 1+ years ago

Description : Simulate 2d with 3d. Allows Rotate/Scale/Alpha on images. Uses b3d like 'entity' system.
This engine I wrote for a project. Cleaned it up for posting it here. The example below needs to generate images onto disk before running.
It will ask permission to do so, and it will ask to delete them when the program closes down.
* If you change graphics resolution, generated images will not fit anymore. Use the download version below instead for that. *
A complete download with examples etc. can be found here: <a href="http://abcbasic.comyr.com/2Din3D.zip" target="_blank">http://abcbasic.comyr.com/2Din3D.zip[/url]


Code :
Code: BlitzBasic
  1. ;-------------------------------------------------------------------------------------------------------------------------------------
  2. ;                                                                                                                       FILE:DEMO
  3. ;-------------------------------------------------------------------------------------------------------------------------------------
  4.  
  5. ;       all include files are marked with the "FILE:" tag.
  6. ;       since the lib can only LOAD images, images are generated on the fly using "SaveImage"
  7. ;   in the function CreateImages()
  8. ;
  9. ;       First part is demo
  10. ;       For manual, see end of file
  11.  
  12. ;-------------------------------------------------------------------------------------------------------------------------------------
  13. ;                                                                                                                       Setup Graphics
  14. ;-------------------------------------------------------------------------------------------------------------------------------------
  15.  
  16.         Graphics3D 800,600, 0, 2
  17.         SetBuffer BackBuffer()
  18.         ;init engine                   
  19.         SetupGraphics()
  20.        
  21.         CreateImages()
  22.        
  23.         cursor = LoadImage("cursor.bmp")
  24.         MidHandle cursor
  25.  
  26. ;-------------------------------------------------------------------------------------------------------------------------------------
  27. ;                                                                                                                       Globals
  28. ;-------------------------------------------------------------------------------------------------------------------------------------
  29.  
  30.         Global background.TObject
  31.         Global alien.TObject
  32.         Global turret.TObject
  33.         Global projectile.TObject
  34.  
  35. ;-------------------------------------------------------------------------------------------------------------------------------------
  36. ;                                                                                                                       Setup scene
  37. ;-------------------------------------------------------------------------------------------------------------------------------------
  38.                
  39.         ;load background
  40.         background.TObject = LoadObject("background.bmp")
  41.         Position background, 400, 300
  42.  
  43.         ;create lists  
  44.         Global AlienList.TList = CreateList()
  45.         Global TurretList.TList = CreateList()
  46.         Global ProjectileList.TList = CreateList()
  47.  
  48. ;-------------------------------------------------------------------------------------------------------------------------------------
  49. ;                                                                                                                       Main Loop
  50. ;-------------------------------------------------------------------------------------------------------------------------------------
  51.        
  52.         Repeat
  53.  
  54.                 ;RMB = create new alien
  55.                 If MouseHit(2) Then
  56.                
  57.                         ;create and add to list
  58.                         alien = LoadObject("alien.bmp", 3, 64, 64)             
  59.                         AddToList(AlienList, alien)
  60.  
  61.                         ;place at mouse                
  62.                         msX = MouseX() * 800 / GraphicsWidth()
  63.                         msY = MouseY() * 600 / GraphicsHeight()
  64.                         Position alien, msX, msY
  65.                        
  66.                 End If                 
  67.  
  68.                 ;LMB = create new turret               
  69.                 If MouseHit(1) Then
  70.                
  71.                         ;create and add to list
  72.                         turret = LoadObject("turret.bmp", 4, 64, 64)
  73.                         AddToList(TurretList, turret)
  74.                        
  75.                         ;place at mouse
  76.                         msX = MouseX() * 800 / GraphicsWidth()
  77.                         msY = MouseY() * 600 / GraphicsHeight()
  78.                         Position turret, msX, msy
  79.                        
  80.                 End If
  81.  
  82. ;------------------------------------------------------------------------------------------------------------------------------------
  83. ;                                                                                                                               Turrets
  84. ;------------------------------------------------------------------------------------------------------------------------------------
  85.                                
  86.                 ;aim all Turrets to closest alien
  87.                 For i = 0 To ListCount(TurretList) - 1
  88.                         turret = GetListObject(TurretList, i)
  89.                                                
  90.                         ;find closest and aim
  91.                         max# = 10000.0
  92.                         For j = 0 To ListCount(AlienList) - 1
  93.                                 alien = GetListObject(AlienList, j)                    
  94.                                 dist# = Distance(alien, turret)
  95.                                 If dist < max Then
  96.                                         PointAt turret, alien
  97.                                         max = dist
  98.                                 End If
  99.                         Next
  100.  
  101.                         ;shooting control
  102.                         turretintVar[1] = turretintVar[1] + 1
  103.                         If turretintVar[1] > 250 Then turretintVar[1] = 0
  104.                         If turretintVar[1] = 0 Then
  105.                         ;when the time is there, start shooting
  106.                        
  107.                                 ;create new projectile
  108.                                 projectile = LoadObject("projectile.bmp")
  109.                        
  110.                                 ;store direction (based on turret rotation)    
  111.                                 projectilefloatVar[0] = Cos(-turret
  112. otation) * 5
  113.                                 projectilefloatVar[1] = Sin(-turret
  114. otation) * 5
  115.                                
  116.                                 ;position projectile at torret
  117.                                 Position projectile, turretx, turrety
  118.                                
  119.                                 ;add to list
  120.                                 AddToList(ProjectileList, projectile)                          
  121.                         End If
  122.                        
  123.                 Next
  124.  
  125. ;------------------------------------------------------------------------------------------------------------------------------------
  126. ;                                                                                                                               Projectiles
  127. ;------------------------------------------------------------------------------------------------------------------------------------
  128.                
  129.                 ;move all projectiles
  130.                 For i = 0 To ListCount(ProjectileList) - 1
  131.                
  132.                         ;move projectile in direction it was fired
  133.                         projectile = GetListObject(ProjectileList, i)
  134.                         Move projectile, projectilefloatVar[0], projectilefloatVar[1]
  135.  
  136.                         ;reset remove flag                     
  137.                         remove = 0
  138.                        
  139.                         ;check if any of the aliens was hit
  140.                         For j = 0 To ListCount(AlienList) - 1
  141.                                 alien = GetListObject(AlienList, j)
  142.                                 ;measure distance to determine impact
  143.                                 If Distance(alien, projectile) < (alien
  144. adius + projectile
  145. adius)/2 Then
  146.                                         ;remove alien
  147.                                         RemoveFromList(AlienList, alien)
  148.                                         Free alien
  149.                                         ;set remove flag
  150.                                         remove = 1
  151.                                         ;exit loop
  152.                                         Exit
  153.                                 End If
  154.                         Next
  155.  
  156.                         ;when projectile gets out of screen, set remove flag
  157.                         If projectilex < 0 Then remove = 1
  158.                         If projectiley < 0 Then remove = 1
  159.                         If projectilex > 800 Then remove = 1
  160.                         If projectiley > 600 Then remove = 1
  161.  
  162.                         ;remove projectile if flag was set                     
  163.                         If remove Then
  164.                                 RemoveFromList(ProjectileList, projectile)
  165.                                 Free projectile
  166.                         End If
  167.                 Next
  168.  
  169. ;------------------------------------------------------------------------------------------------------------------------------------
  170. ;                                                                                                                               Aliens
  171. ;------------------------------------------------------------------------------------------------------------------------------------
  172.  
  173.                 ;alien eating animation control
  174.                
  175.                 time = time + 1
  176.  
  177.                 ;move all aliens               
  178.                 For i = 0 To ListCount(AlienList) - 1
  179.  
  180.                         alien = GetListObject(AlienList, i)
  181.  
  182.                         ;find closest turret           
  183.                         max# = 10000
  184.                         turret = Null
  185.                        
  186.                         For j = 0 To ListCount(TurretList) - 1
  187.                                 turr.TObject = GetListObject(TurretList, j)
  188.                                
  189.                                 dist# = distance(turr, alien)
  190.                                 If dist < max Then
  191.                                         max = dist
  192.                                         turret = turr
  193.                                 End If
  194.                         Next
  195.                                
  196.                         ;if a turret was found
  197.                         If turret <> Null
  198.                                                                                                
  199.                                 ;point alien at turret
  200.                                 PointAt alien, turret
  201.                                
  202.                                 ;get distance          
  203.                                 dist# = Distance( turret, alien )
  204.                                
  205.                                 ;if too far away, move closer
  206.                                 If dist > 50 Then
  207.                                         Move alien, 1, 0
  208.                                 End If
  209.  
  210.                                 ;if close enough, start eating animation
  211.                                 If dist < 50 Then
  212.                                         If time > 19 Then time = 0
  213.                                         Frame alien, time / 10 + 1
  214.                                        
  215.                                         ;each object has 255 intVars you can use
  216.                                         turretintVar[0] = turretintVar[0] + 1
  217.                                 Else
  218.                                         Frame alien, 0
  219.                                 End If
  220.                                
  221.                                 ;move turret animation while it is eaten
  222.                                 Frame turret, turretintVar[0] / 40
  223.                                 ;if eaten completely, remove object from list and destroy it
  224.                                 If turretintVar[0] >= 160 Then RemoveFromList(TurretList, turret): Free turret
  225.                                
  226.                         ;if no turret was found
  227.                         Else
  228.                        
  229.                                 ;turn alien back into position and move along
  230.                                 Frame alien, 0
  231.                                 Turn alien, Sgn(270 - alien
  232. otation)
  233.                                 Move alien, 1, 0
  234.                                
  235.                         End If
  236.                        
  237.                         If alienx > 800 Then
  238.                                 RemoveFromList AlienList, alien
  239.                                 Free alien
  240.                         End If
  241.                        
  242.                 Next                   
  243.  
  244. ;------------------------------------------------------------------------------------------------------------------------------------
  245. ;                                                                                                                               Rendering
  246. ;------------------------------------------------------------------------------------------------------------------------------------
  247.  
  248.                 ;render all TObjects
  249.                 Render()                       
  250.                
  251.                 Text 0,  0, "You have " + ListCount(TurretList) + " turrets"
  252.                 Text 0, 20, "There are " + ListCount(AlienList) + " aliens"
  253.                
  254.                 Text 0, 40, "Use LMB to place turrets, use RMB to place aliens"
  255.                 Text 0, 60, "ESC=END"
  256.                
  257.                 DrawImage cursor, MouseX(), MouseY()
  258.                
  259.                 Flip
  260.                                
  261.         Until KeyHit(1)
  262.        
  263.         DestroyImages()
  264.        
  265.         End
  266.        
  267.        
  268.        
  269. ;------------------------------------------------------------------------------------------------------------------------------------
  270. ;                                                                                                                               FILE:2DENGINE
  271. ;------------------------------------------------------------------------------------------------------------------------------------
  272.  
  273. Type TTexture
  274.         Field name$
  275.         Field tex
  276.         Field ww#
  277.         Field hh#
  278. End Type
  279.  
  280. Global orgQuad
  281.  
  282. ;-------------------------------------------------------------------------------------------------------------------------------------
  283. ;                                                                                                                       SetupGraphics()
  284. ;-------------------------------------------------------------------------------------------------------------------------------------
  285. Function SetupGraphics()
  286.  
  287.         ;maak orthographic camera
  288.         cam = CreateCamera() ;create camera
  289.         CameraProjMode cam, 2 ;no perspective rendering
  290.         PositionEntity cam, 0, 0, -512 ;camera to back
  291.         CameraZoom cam, 0.313 ;800x600
  292.         AmbientLight 255, 255, 255 ;fullbright
  293.  
  294. End Function
  295.  
  296. ;-------------------------------------------------------------------------------------------------------------------------------------
  297. ;                                                                                                                       GetSprite()
  298. ;-------------------------------------------------------------------------------------------------------------------------------------
  299. Global returnTexture%
  300. Global returnRadius#
  301. Global returnWidth#
  302. Global returnHeight#
  303. Function GetSprite(name$, numframes=1, framewidth=0, frameheight=0)
  304.  
  305.         name$ = Lower$(Trim$(name$))
  306.  
  307.         tex = 0
  308.         For tx.TTexture = Each TTexture
  309.                 If tx
  310. ame$ = name$ Then
  311.                         ww = txww
  312.                         hh = txhh
  313.                         tex = tx        ex
  314.                         Exit
  315.                 End If
  316.         Next
  317.  
  318.         If tex = 0 Then
  319.                 ;get image properties
  320.                 im = LoadImage(name$)
  321.                
  322.                 ;if not defined, autodetect width/height
  323.                 If framewidth = 0  Then ww = ImageWidth(im)  Else ww = framewidth
  324.                 If frameheight = 0 Then hh = ImageHeight(im) Else hh = frameheight
  325.                        
  326.                 FreeImage im
  327.        
  328.                 ;load image as texture - flag 4=transparent    
  329.                 If numframes > 1 Then
  330.                         tex = LoadAnimTexture(name$, 4, ww, hh, 0, numframes)
  331.                 Else
  332.                         tex = LoadTexture(name$, 4)
  333.                 End If
  334.                
  335.                 If tex = 0 Then RuntimeError "Could not load texture: " + tex
  336.                
  337.                 tx.TTexture = New TTexture
  338.                 tx
  339. ame$ = name$
  340.                 tx      ex = tex
  341.                 txww = ww
  342.                 txhh = hh
  343.         End If
  344.                
  345.         ;create quad with image size
  346.         If orgQuad = 0 Then orgQuad = CreateQuad(1, 1): HideEntity orgQuad
  347.         quad = CopyEntity(orgQuad)
  348.         ScaleEntity quad, ww, hh, 1
  349.         EntityTexture quad, tex ;apply texture
  350.  
  351.         ;return biggest radius 
  352.         returnRadius# = Max(ww, hh)
  353.         ;return width&height   
  354.         returnWidth = ww
  355.         returnHeight = hh
  356.                
  357.         ;return newly created quad and texture
  358.         returnTexture = tex
  359.         Return quad
  360.        
  361. End Function
  362.  
  363. ;-------------------------------------------------------------------------------------------------------------------------------------
  364. ;                                                                                                                       CreateQuad()
  365. ;-------------------------------------------------------------------------------------------------------------------------------------
  366. Function CreateQuad(ww#, hh#)
  367.        
  368.         ww# = ww# / 250.0
  369.         hh# = hh# / 250.0
  370.  
  371.         mesh = CreateMesh()
  372.         surf = CreateSurface(mesh)
  373.        
  374.         AddVertex surf, -ww,  hh, 0, 0.0, 0.0
  375.         AddVertex surf,  ww,  hh, 0, 1.0, 0.0
  376.         AddVertex surf,  ww, -hh, 0, 1.0, 1.0
  377.         AddVertex surf, -ww, -hh, 0, 0.0, 1.0
  378.        
  379.         AddTriangle surf, 0, 1, 2
  380.         AddTriangle surf, 0, 2, 3
  381.        
  382.         Return mesh
  383.        
  384. End Function
  385.  
  386. ;-------------------------------------------------------------------------------------------------------------------------------------
  387. ;                                                                                                                       Max()
  388. ;-------------------------------------------------------------------------------------------------------------------------------------
  389. Function Max#(a#, b#)
  390.         If a > b Then Return a Else Return b
  391. End Function
  392.  
  393.  
  394. ;-------------------------------------------------------------------------------------------------------------------------------------
  395. ;                                                                                                                       FILE:ENTITYENGINE
  396. ;-------------------------------------------------------------------------------------------------------------------------------------
  397.  
  398. ;object definition
  399. Type TObject
  400.         Field x#
  401.         Field y#
  402.         Field rotation
  403.         Field alpha#   
  404.         Field show%
  405.        
  406.         Field width#
  407.         Field height#
  408.        
  409.         Field scaleX#
  410.         Field scaleY#
  411.        
  412.         Field entity
  413.         Field texture
  414.         Field framecount%      
  415.         Field radius#
  416.        
  417.         Field intVar%[255]
  418.         Field floatVar#[255]
  419.        
  420.         Field parent.TList
  421. End Type
  422.  
  423. ;-------------------------------------------------------------------------------------------------------------------------------------
  424. ;                                                                                                                       LoadObject()
  425. ;-------------------------------------------------------------------------------------------------------------------------------------
  426. ;load object from image
  427. Function LoadObject.TObject(file$, numframes=1, framewidth=0, frameheight=0)
  428.  
  429.         If FileType(file$) <> 1 Then RuntimeError "could not find file: " + file$
  430.        
  431.         obj.TObject = New TObject
  432.         objx = 0
  433.         objy = 0
  434.         objalpha = 1.0
  435.         objshow = True
  436.        
  437.         objentity = GetSprite(file$, numframes, framewidth, frameheight)
  438.         obj     exture = returnTexture
  439.         obj
  440. adius = returnRadius
  441.        
  442.         objwidth = returnWidth
  443.         objheight = returnHeight
  444.         objscaleX = 1
  445.         objscaleY = 1
  446.        
  447.         objframecount = numframes
  448.        
  449.         If objentity = 0 Then RuntimeError "could not load sprite: " + file$
  450.        
  451.         Return obj
  452.        
  453. End Function
  454.  
  455.  
  456. ;-------------------------------------------------------------------------------------------------------------------------------------
  457. ;                                                                                                                       PointAt()
  458. ;-------------------------------------------------------------------------------------------------------------------------------------
  459. ;point one object towards the other
  460. Function PointAt(obj.TObject, obj2.TObject)
  461.  
  462.         obj
  463. otation = 270 - ATan2(obj2y - objy, obj2x - objx)
  464.  
  465. End Function
  466.  
  467. ;-------------------------------------------------------------------------------------------------------------------------------------
  468. ;                                                                                                                       Distance()
  469. ;-------------------------------------------------------------------------------------------------------------------------------------
  470. ;return distance between two objects
  471. Function Distance#(obj.TObject, obj2.TObject)
  472.  
  473.         x# = (objx - obj2x)
  474.         y# = (objy - obj2y)
  475.        
  476.         Return Sqr(x*x+y*y)
  477.        
  478. End Function
  479.  
  480. ;-------------------------------------------------------------------------------------------------------------------------------------
  481. ;                                                                                                                       PointDistance()
  482. ;-------------------------------------------------------------------------------------------------------------------------------------
  483. ;return distance between objects and point
  484. Function PointDistance#(obj.TObject, x#, y#)
  485.  
  486.         x# = (objx - x)
  487.         y# = (objy - y)
  488.        
  489.         Return Sqr(x*x+y*y)
  490.        
  491. End Function
  492.  
  493. ;-------------------------------------------------------------------------------------------------------------------------------------
  494. ;                                                                                                                       Move()
  495. ;-------------------------------------------------------------------------------------------------------------------------------------
  496. ;move object
  497. Function Move(obj.TObject, x#, y#)
  498.  
  499.         objx = objx - Sin(obj
  500. otation) * x + Sin(obj
  501. otation + 90) * y
  502.         objy = objy - Cos(obj
  503. otation) * x + Cos(obj
  504. otation + 90) * y
  505.  
  506. End Function
  507.  
  508. ;-------------------------------------------------------------------------------------------------------------------------------------
  509. ;                                                                                                                       Frame()
  510. ;-------------------------------------------------------------------------------------------------------------------------------------
  511. ;select animation frame
  512. Function Frame(obj.TObject, frame#)
  513.  
  514.         frame = Floor(frame)
  515.  
  516.         While frame < 0
  517.                 frame = frame + objframecount
  518.         Wend
  519.         frame = frame Mod objframecount
  520.        
  521.         EntityTexture objentity, obj    exture, frame
  522.  
  523. End Function
  524.  
  525. ;-------------------------------------------------------------------------------------------------------------------------------------
  526. ;                                                                                                                       Position()
  527. ;-------------------------------------------------------------------------------------------------------------------------------------
  528. ;set position
  529. Function Position(obj.TObject, x#, y#)
  530.  
  531.         objx = x
  532.         objy = y
  533.        
  534. End Function
  535.  
  536. ;-------------------------------------------------------------------------------------------------------------------------------------
  537. ;                                                                                                                       Rotate()
  538. ;-------------------------------------------------------------------------------------------------------------------------------------
  539. ;set rotation
  540. Function Rotate(obj.TObject, angle#)
  541.  
  542.         obj
  543. otation = angle
  544.        
  545. End Function
  546.  
  547. ;-------------------------------------------------------------------------------------------------------------------------------------
  548. ;                                                                                                                       Turn()
  549. ;-------------------------------------------------------------------------------------------------------------------------------------
  550. ;turn object
  551. Function Turn(obj.TObject, angle#)
  552.  
  553.         obj
  554. otation = obj
  555. otation + angle
  556.        
  557. End Function
  558.  
  559. ;-------------------------------------------------------------------------------------------------------------------------------------
  560. ;                                                                                                                       Scale()
  561. ;-------------------------------------------------------------------------------------------------------------------------------------
  562. ;scale object
  563. Function Scale(obj.TObject, scaleX#, scaleY#)
  564.  
  565.         ScaleEntity objentity, objwidth * scaleX, objheight * scaleY, 1
  566.         objscaleX = scaleX
  567.         objscaleY = scaleY
  568.  
  569. End Function
  570.  
  571. ;-------------------------------------------------------------------------------------------------------------------------------------
  572. ;                                                                                                                       SetOrder()
  573. ;-------------------------------------------------------------------------------------------------------------------------------------
  574. ;set z-order
  575. Function SetOrder(obj.TObject, order#)
  576.         PositionEntity objentity, EntityX(objentity), EntityY(objentity), -order
  577. End Function
  578.  
  579. ;-------------------------------------------------------------------------------------------------------------------------------------
  580. ;                                                                                                                       Hide()
  581. ;-------------------------------------------------------------------------------------------------------------------------------------
  582. ;hide object
  583. Function Hide(obj.TObject)
  584.         objshow = False
  585.         HideEntity objentity
  586. End Function
  587.  
  588. ;-------------------------------------------------------------------------------------------------------------------------------------
  589. ;                                                                                                                       Show()
  590. ;-------------------------------------------------------------------------------------------------------------------------------------
  591. ;show object
  592. Function Show(obj.TObject)
  593.         objshow = True
  594.         ShowEntity objentity
  595. End Function
  596.  
  597. ;-------------------------------------------------------------------------------------------------------------------------------------
  598. ;                                                                                                                       Alpha()
  599. ;-------------------------------------------------------------------------------------------------------------------------------------
  600. Function Alpha(obj.TObject, a#)
  601.         objalpha = a
  602. End Function
  603.  
  604. ;-------------------------------------------------------------------------------------------------------------------------------------
  605. ;                                                                                                                       Free()
  606. ;-------------------------------------------------------------------------------------------------------------------------------------
  607. ;remove entity
  608. Function Free(obj.TObject)
  609.         FreeEntity objentity
  610.         Delete obj
  611. End Function
  612.  
  613.  
  614. ;-------------------------------------------------------------------------------------------------------------------------------------
  615. ;                                                                                                                       Render()
  616. ;-------------------------------------------------------------------------------------------------------------------------------------
  617. ;render all
  618. Function Render()
  619.  
  620.         UpdateObjects()        
  621.         RenderWorld
  622.  
  623. End Function
  624.  
  625. ;-------------------------------------------------------------------------------------------------------------------------------------
  626. ;                                                                                                                       UpdateObjects()
  627. ;-------------------------------------------------------------------------------------------------------------------------------------
  628. Function UpdateObjects()
  629.  
  630.         For obj.TObject = Each TObject
  631.                 RotateEntity objentity, 0, 0, obj
  632. otation
  633.                 PositionEntity objentity, (objx - 400) * 3.2 / 400, -(objy - 300) * 2.4 / 300, EntityZ(objentity)
  634.                 EntityAlpha objentity, objalpha
  635.         Next
  636.        
  637. End Function
  638.  
  639. ;-------------------------------------------------------------------------------------------------------------------------------------
  640. ;                                                                                                                       FILE:TLISTS
  641. ;-------------------------------------------------------------------------------------------------------------------------------------
  642.  
  643. ;list type definition
  644. Type TList
  645.         Field index
  646.         Field size
  647.         Field bank
  648. End Type
  649.  
  650. ;-------------------------------------------------------------------------------------------------------------------------------------
  651. ;                                                                                                                       CreateList()
  652. ;-------------------------------------------------------------------------------------------------------------------------------------
  653. Function CreateList.TList()
  654.         l.TList = New TList
  655.         lsize = 1
  656.         lank = CreateBank(4)
  657.         lindex = 0
  658.         Return l
  659. End Function
  660.  
  661. ;-------------------------------------------------------------------------------------------------------------------------------------
  662. ;                                                                                                                       AddToList()
  663. ;-------------------------------------------------------------------------------------------------------------------------------------
  664. Function AddToList(l.TList, obj.TObject)
  665.  
  666.         If l = Null Then RuntimeError "Invalid list"
  667.         If obj = Null Then RuntimeError "Invalid/Null object"
  668.  
  669.         index = lindex 
  670.         size = lsize
  671.         bank = lank
  672.        
  673.         If index >= size Then
  674.                 newbank = CreateBank(size*4 * 2)
  675.                 CopyBank bank, 0, newbank, 0, size*4
  676.                 FreeBank bank
  677.                 bank = newbank
  678.                 size = size * 2
  679.         End If
  680.        
  681.         PokeInt bank, index * 4, Handle(obj)
  682.         index = index + 1
  683.        
  684.         lindex = index
  685.         lsize = size
  686.         lank = bank
  687.        
  688.         objparent = l
  689.        
  690. End Function
  691.  
  692. ;-------------------------------------------------------------------------------------------------------------------------------------
  693. ;                                                                                                                       RemoveFromList()
  694. ;-------------------------------------------------------------------------------------------------------------------------------------
  695. Function RemoveFromList(l.TList, obj.TObject)
  696.  
  697.         If l = Null Then RuntimeError "Invalid list"
  698.         If obj = Null Then Return
  699.  
  700.         index = lindex 
  701.         size = lsize
  702.         bank = lank
  703.  
  704.         found = -1     
  705.         For i = 0 To index
  706.                 getObject.TObject = Object.TObject(PeekInt(bank, i * 4))
  707.                 If getObject = obj Then
  708.                         found = i
  709.                         Exit
  710.                 End If
  711.         Next
  712.        
  713.         If found > -1 Then
  714.                 If found < index Then CopyBank bank, (found + 1) * 4, bank, found * 4, (index-found-1) * 4
  715.                 index = index - 1
  716.         End If
  717.        
  718.         lindex = index
  719.         lsize = size
  720.         lank = bank   
  721.        
  722. End Function
  723.  
  724. ;-------------------------------------------------------------------------------------------------------------------------------------
  725. ;                                                                                                                       ListCount()
  726. ;-------------------------------------------------------------------------------------------------------------------------------------
  727. Function ListCount(l.TList)
  728.  
  729.         Return lindex
  730.        
  731. End Function
  732.  
  733. ;-------------------------------------------------------------------------------------------------------------------------------------
  734. ;                                                                                                                       GetListObject()
  735. ;-------------------------------------------------------------------------------------------------------------------------------------
  736. Function GetListObject.TObject(l.TList, i)
  737.  
  738.         If l = Null Then RuntimeError "Invalid list"
  739.         If lindex = 0 Then Return Null
  740.         Return Object.TObject(PeekInt(lank, i*4))
  741.        
  742. End Function
  743.  
  744. ;-------------------------------------------------------------------------------------------------------------------------------------
  745. ;                                                                                                                       FILE:IMAGES
  746. ;-------------------------------------------------------------------------------------------------------------------------------------
  747.  
  748. ;-------------------------------------------------------------------------------------------------------------------------------------
  749. ;                                                                                                                       CreateImages()
  750. ;-------------------------------------------------------------------------------------------------------------------------------------
  751. Function CreateImages()
  752.  
  753.         Locate 0, 0
  754.         Cls
  755.         Print "cursor.bmp"
  756.         Print "alien.bmp"
  757.         Print "background.bmp"
  758.         Print "projectile.bmp"
  759.         Print "turret.bmp"
  760.         Print
  761.         a$ = Input("you want to create all these image files (y/n) ?")
  762.         a$ = Lower$(Trim$(a$))
  763.         If a$ <> "y" Then RuntimeError "cannot proceed.." :End
  764.  
  765.         CreateCursorImage()
  766.         CreateAlienImage()
  767.         CreateBackgroundImage()
  768.         CreateProjectileImage()
  769.         CreateTurretImage()
  770.        
  771. End Function
  772.  
  773. Function DestroyImages()
  774.  
  775.         Locate 0, 0
  776.         Cls
  777.         Print "cursor.bmp"
  778.         Print "alien.bmp"
  779.         Print "background.bmp"
  780.         Print "projectile.bmp"
  781.         Print "turret.bmp"
  782.         Print
  783.         a$ = Input("you want to delete all these image files (y/n) ?")
  784.         a$ = Lower$(Trim$(a$))
  785.         If a$ <> "y" Then Return
  786.         If FileType("cursor.bmp") = 1 Then DeleteFile "cursor.bmp"
  787.         If FileType("alien.bmp") = 1 Then DeleteFile "alien.bmp"
  788.         If FileType("background.bmp") = 1 Then DeleteFile "background.bmp"
  789.         If FileType("projectile.bmp") = 1 Then DeleteFile "projectile.bmp"
  790.         If FileType("turret.bmp") = 1 Then DeleteFile "turret.bmp"
  791. End Function
  792.  
  793. Function CreateCursorImage()
  794.         im = CreateImage(32, 32)
  795.         Cls
  796.         Rect 15, 0, 3, 32
  797.         Rect 0, 15, 32, 3
  798.         GrabImage im, 0, 0
  799.         SaveImage im, "cursor.bmp"
  800.         FreeImage im
  801. End Function
  802.  
  803. Function CreateAlienImage()
  804.         im = CreateImage(128, 128)
  805.         Cls
  806.         sc = 5
  807.         For i = 0 To 1
  808.         For j = 0 To 1
  809.                 Color 64, 128, 255
  810.                 Oval i*64,j*64,64,64, 1
  811.                 mx = i *64+32
  812.                 my = j*64+32
  813.                 Color 8, 12, 64
  814.                 Oval mx-sc, my-sc+8, sc*2,sc*2, 1
  815.                
  816.                 Oval mx-16, my - 14, 4, 4
  817.                 Oval mx+12, my - 14, 4, 4
  818.                 sc = sc + 2
  819.         Next
  820.         Next
  821.         GrabImage im, 0, 0
  822.         SaveImage im, "alien.bmp"
  823.         FreeImage im
  824. End Function
  825.  
  826. Function CreateBackgroundImage()
  827.         im = CreateImage(800, 600)
  828.         Cls
  829.         Color 0, 0, 255
  830.         Rect 0, 0, 800, 300
  831.         Color 0, 255, 0
  832.         Rect 0, 300, 800, 300
  833.         GrabImage im,0,0
  834.         SaveImage im, "background.bmp"
  835.         FreeImage im
  836.         Color 255,255,255
  837. End Function
  838.  
  839. Function CreateProjectileImage()
  840.         Cls
  841.         For i = 16 To 0 Step -1
  842.                 c = i * 16
  843.                 Color c, c, c
  844.                 Oval 16-i,16-i,i*2,i*2
  845.         Next
  846.         im = CreateImage(32,32)
  847.         GrabImage im, 0, 0
  848.         SaveImage im, "projectile.bmp"
  849.         FreeImage im
  850. End Function
  851.  
  852. Function CreateTurretImage()
  853.         im = CreateImage(128, 128)
  854.         Cls
  855.         sc = 0
  856.         For j = 0 To 1
  857.         For i = 0 To 1
  858.                 Color 255, 0, 0
  859.                 Oval i*64,j*64,64,64
  860.                 For ic = 1 To sc
  861.                         x = Rand(54) + i * 64
  862.                         y = Rand(54) + j * 64
  863.                         Color 0, 0, 0
  864.                         Oval x, y, 10, 10
  865.                 Next
  866.                 sc = sc + 35
  867.                 Color 255,255,255
  868.                 Rect i * 64 + 30, j * 64, 4, 32
  869.         Next
  870.         Next
  871.         GrabImage im,0,0
  872.         SaveImage im, "turret.bmp"
  873.         FreeImage im
  874.         Color 255,255,255
  875. End Function
  876.  
  877.  
  878.  
  879. ;-------------------------------------------------------------------------------------------------------------------------------------
  880. ;                                                                                                                               Manual
  881. ;-------------------------------------------------------------------------------------------------------------------------------------
  882. ;
  883. ;NB: where "object" is "TObject instance"
  884. ;
  885. ;LoadObject( file$ )
  886. ;       Loads and returns an object from an image file
  887. ;
  888. ;LoadObject( file$, numFrames%, frameWidth%, frameHeight% )
  889. ;       Loads and returns an object from an image that contains animation
  890. ;      
  891. ;PointAt( object1, object2 )
  892. ;       Points an object towards another object
  893. ;
  894. ;Distance( object1, object2 )
  895. ;       Returns the distance between two objects
  896. ;
  897. ;PointDistance( object1, x#, y# )
  898. ;       Returns the distance between a point and an object
  899. ;
  900. ;Move( object, x#, y# )
  901. ;       Moves the object in the direction it is aimed (x=forward)
  902. ;
  903. ;Frame( object, frame% )
  904. ;       Selects the animation frame on the object
  905. ;
  906. ;Position( object, x#, y# )
  907. ;       Places the object on a specific x,y location (screen=allways 800x600)
  908. ;
  909. ;Rotate( object, angle# )
  910. ;       Rotates an object to a specific angle
  911. ;
  912. ;Scale( object, scaleX#, scaleY#)
  913. ;       Scales an object
  914. ;
  915. ;Turn( object, angle# )
  916. ;       Turns an object with a relative angle
  917. ;
  918. ;SetOrder( object, order )
  919. ;       Sets the Z-order for the object
  920. ;
  921. ;Alpha( object, alpha# )
  922. ;       Sets the transparency of an object
  923. ;
  924. ;Hide( object )
  925. ;       Hides the object
  926. ;
  927. ;Show( object )
  928. ;       Shows an (previously hidden) object
  929. ;
  930. ;Free( object )
  931. ;       Removes an object
  932. ;
  933. ;Render
  934. ;       Renders all objects
  935. ;
  936. ;CreateList()
  937. ;       Create (and returns) a new TList
  938. ;
  939. ;AddToList( list, object )
  940. ;       Add object to TList
  941. ;
  942. ;RemoveFromList( list, object)
  943. ;       Remove object from TList
  944. ;


Comments : none...

 

SimplePortal 2.3.6 © 2008-2014, SimplePortal