Ooops
January 15, 2021, 06:08:21 PM

Author Topic: [bmx] THeartSystem by Ked [ 1+ years ago ]  (Read 395 times)

Offline BlitzBot

  • Jr. Member
  • **
  • Posts: 1
[bmx] THeartSystem by Ked [ 1+ years ago ]
« on: June 29, 2017, 12:28:40 AM »
Title : THeartSystem
Author : Ked
Posted : 1+ years ago

Description : Type THeartSystem
Method Subtract(phase:Int)
Method Add(phase:Int)
Method AddHeart()
Method RemoveHeart()
Method RestoreAll()
Method Draw()
EndType

phase:Int is one of the constants at the top of the code

Functions:
CreateHeartSystem:THeartSystem(count:Int,x:Float,y:Float,url:Object) url:Object is the image path
FreeHeartSystem(system:THeartSystem)

Pretty simple to use. Only use a 48x48 heart (240x48 AnimImage). Hearts must have 4 parts.


Let me know of any bugs!


Code :
Code: BlitzMax
  1. SuperStrict
  2.  
  3. Const HEARTSYSTEM_ONEPIECE:Int=0
  4. Const HEARTSYSTEM_TWOPIECE:Int=1
  5. Const HEARTSYSTEM_THREEPIECE:Int=2
  6. Const HEARTSYSTEM_FOURPIECE:Int=4
  7.  
  8. Const HEARTSYSTEM_HALFHEART:Int=HEARTSYSTEM_TWOPIECE
  9. Const HEARTSYSTEM_WHOLEHEART:Int=HEARTSYSTEM_FOURPIECE
  10.  
  11. Type THeartSystem
  12.         Global _list:TList=New TList
  13.        
  14.         Field x:Float,y:Float
  15.         Field img:TImage
  16.        
  17.         Field totheartcount:Int
  18.         Field totpiececount:Int
  19.         Field curpiececount:Int
  20.        
  21.         Field fullhearts:Int
  22.         Field fullpieces:Int
  23.        
  24.         Field allsc:Float=0.5   'inactive hearts'
  25.         Field cursc:Float=0.5   'active heart'
  26.        
  27.         Field incr:Int=True
  28.        
  29.         Method New()
  30.                 _list.addlast Self
  31.         EndMethod
  32.        
  33.         Method Create:THeartSystem(count:Int,x:Float,y:Float,url:Object)
  34.                 img=LoadAnimImage(url,48,48,0,5,FILTEREDIMAGE)
  35.                 If Not img Return Null
  36.                 MidHandleImage img
  37.                
  38.                 Self.x=x
  39.                 Self.y=y
  40.                
  41.                 totheartcount=count
  42.                 totpiececount=(count*4)
  43.                 curpiececount=totpiececount
  44.                
  45.                 fullhearts=totheartcount
  46.                 fullpieces=0
  47.                
  48.                 Return Self
  49.         EndMethod
  50.        
  51.         Method Subtract(phase:Int)
  52.                 Select phase
  53.                         Case HEARTSYSTEM_ONEPIECE
  54.                                 curpiececount:-1
  55.                         Case HEARTSYSTEM_TWOPIECE
  56.                                 curpiececount:-2
  57.                         Case HEARTSYSTEM_THREEPIECE
  58.                                 curpiececount:-3
  59.                         Case HEARTSYSTEM_FOURPIECE
  60.                                 curpiececount:-4
  61.                        
  62.                         Default
  63.                                 curpiececount:-0
  64.                 EndSelect
  65.                 If curpiececount<0
  66.                         curpiececount=0
  67.                 EndIf
  68.                
  69.                 Local numoffullhearts:Int=0
  70.                 Local k:Int=0
  71.                 Local remaining:Int=0
  72.                 Repeat
  73.                         If k>=curpiececount
  74.                                 remaining=k-curpiececount
  75.                                 numoffullhearts:-1
  76.                                 Exit
  77.                         Else
  78.                                 numoffullhearts:+1
  79.                                 k:+4
  80.                         EndIf
  81.                 Forever
  82.                
  83.                 fullhearts=numoffullhearts
  84.                 fullpieces=4-remaining
  85.                 If fullpieces=4 fullhearts:+1 ; fullpieces=0
  86.         EndMethod
  87.        
  88.         Method Add(phase:Int)
  89.                 Select phase
  90.                         Case HEARTSYSTEM_ONEPIECE
  91.                                 curpiececount:+1
  92.                         Case HEARTSYSTEM_TWOPIECE
  93.                                 curpiececount:+2
  94.                         Case HEARTSYSTEM_THREEPIECE
  95.                                 curpiececount:+3
  96.                         Case HEARTSYSTEM_FOURPIECE
  97.                                 curpiececount:+4
  98.                        
  99.                         Default
  100.                                 curpiececount:+0
  101.                 EndSelect
  102.                 If curpiececount>totpiececount
  103.                         curpiececount=totpiececount
  104.                 EndIf
  105.                
  106.                 Local numoffullhearts:Int=0
  107.                 Local k:Int=0
  108.                 Local remaining:Int=0
  109.                 Repeat
  110.                         If k>=curpiececount
  111.                                 remaining=k-curpiececount
  112.                                 numoffullhearts:-1
  113.                                 Exit
  114.                         Else
  115.                                 numoffullhearts:+1
  116.                                 k:+4
  117.                         EndIf
  118.                 Forever
  119.                
  120.                 fullhearts=numoffullhearts
  121.                 fullpieces=4-remaining
  122.                 If fullpieces=4 fullhearts:+1 ; fullpieces=0
  123.         EndMethod
  124.        
  125.         Method RestoreAll()
  126.                 curpiececount=totpiececount
  127.                 fullhearts=totheartcount
  128.                 fullpieces=0
  129.         EndMethod
  130.        
  131.         Method AddHeart()
  132.                 totheartcount:+1
  133.                 totpiececount:+4
  134.                 curpiececount:+4
  135.                
  136.                 Local numoffullhearts:Int=0
  137.                 Local k:Int=0
  138.                 Local remaining:Int=0
  139.                 Repeat
  140.                         If k>=curpiececount
  141.                                 remaining=k-curpiececount
  142.                                 numoffullhearts:-1
  143.                                 Exit
  144.                         Else
  145.                                 numoffullhearts:+1
  146.                                 k:+4
  147.                         EndIf
  148.                 Forever
  149.                
  150.                 fullhearts=numoffullhearts
  151.                 fullpieces=4-remaining
  152.                 If fullpieces=4 fullhearts:+1 ; fullpieces=0
  153.         EndMethod
  154.        
  155.         Method RemoveHeart()
  156.                 totheartcount:-1
  157.                 If totheartcount<1 totheartcount=1
  158.                 totpiececount:-4
  159.                 If totpiececount<4 totpiececount=4
  160.                 If curpiececount>=4
  161.                         curpiececount:-4
  162.                         If curpiececount<0 curpiececount=0
  163.                 EndIf
  164.                
  165.                 Local numoffullhearts:Int=0
  166.                 Local k:Int=0
  167.                 Local remaining:Int=0
  168.                 Repeat
  169.                         If k>=curpiececount
  170.                                 remaining=k-curpiececount
  171.                                 numoffullhearts:-1
  172.                                 Exit
  173.                         Else
  174.                                 numoffullhearts:+1
  175.                                 k:+4
  176.                         EndIf
  177.                 Forever
  178.                
  179.                 fullhearts=numoffullhearts
  180.                 fullpieces=4-remaining
  181.                 If fullpieces=4 fullhearts:+1 ; fullpieces=0
  182.         EndMethod
  183.        
  184.         Method Draw()
  185.                 If incr=True
  186.                         cursc:+0.01
  187.                         If cursc>0.75
  188.                                 cursc=0.75
  189.                                 incr=False
  190.                         EndIf
  191.                 Else
  192.                         cursc:-0.01
  193.                         If cursc<0.5
  194.                                 cursc=0.5
  195.                                 incr=True
  196.                         EndIf
  197.                 EndIf
  198.                
  199.                 SetBlend ALPHABLEND
  200.                 SetScale allsc,allsc
  201.                 SetAlpha 1.0
  202.                 SetRotation 0
  203.                 SetColor 255,255,255
  204.                
  205.                 If fullhearts=totheartcount
  206.                         Local i:Int
  207.                         For i=0 To fullhearts-2
  208.                                 DrawImage img,(x+(i*(48*allsc))+(i*5))+((48*allsc)/2),(y+((48*allsc)/2)),0
  209.                         Next
  210.                        
  211.                         SetScale cursc,cursc
  212.                         DrawImage img,(x+(i*(48*allsc))+(i*5))+((48*allsc)/2),(y+((48*allsc)/2)),0
  213.                         SetScale allsc,allsc
  214.                 Else
  215.                         Local i:Int
  216.                         For i=0 To fullhearts-1
  217.                                 DrawImage img,(x+(i*(48*allsc))+(i*5))+((48*allsc)/2),(y+((48*allsc)/2)),0
  218.                         Next
  219.                
  220.                         If fullpieces
  221.                                 SetScale cursc,cursc
  222.                                 If fullpieces=1
  223.                                         DrawImage img,(x+(fullhearts*(48*allsc))+(fullhearts*5)+((48*allsc)/2)),(y+((48*allsc)/2)),3
  224.                                 ElseIf fullpieces=2
  225.                                         DrawImage img,(x+(fullhearts*(48*allsc))+(fullhearts*5)+((48*allsc)/2)),(y+((48*allsc)/2)),2
  226.                                 ElseIf fullpieces=3
  227.                                         DrawImage img,(x+(fullhearts*(48*allsc))+(fullhearts*5)+((48*allsc)/2)),(y+((48*allsc)/2)),1
  228.                                 EndIf
  229.                                
  230.                                 SetScale allsc,allsc
  231.                                 Local i:Int
  232.                                 For i=fullhearts+1 To totheartcount-1
  233.                                         DrawImage img,(x+(i*(48*allsc))+(i*5))+((48*allsc)/2),(y+((48*allsc)/2)),4
  234.                                 Next
  235.                         Else
  236.                                 Local i:Int=fullhearts-1
  237.                                
  238.                                 If i<>-1
  239.                                         SetScale cursc,cursc
  240.                                         DrawImage img,(x+(i*(48*allsc))+(i*5)+((48*allsc)/2)),(y+((48*allsc)/2)),0
  241.                                         SetScale allsc,allsc
  242.                                 EndIf
  243.                                        
  244.                                 For i=fullhearts To totheartcount-1
  245.                                         DrawImage img,(x+(i*(48*allsc))+(i*5))+((48*allsc)/2),(y+((48*allsc)/2)),4
  246.                                 Next
  247.                         EndIf
  248.                 EndIf
  249.         EndMethod
  250.        
  251.         Method Free()
  252.                 img=Null
  253.                 _list.remove Self
  254.         EndMethod
  255. EndType
  256.  
  257. Function CreateHeartSystem:THeartSystem(count:Int,x:Float,y:Float,url:Object)
  258.         Return New THeartSystem.Create(count,x,y,url)
  259. EndFunction
  260.  
  261. Function FreeHeartSystem(system:THeartSystem)
  262.         system.Free()
  263. EndFunction
  264.  
  265. Graphics 800,600
  266.  
  267. Global hsystem:THeartSystem=CreateHeartSystem(3,5,3,"zeldaheart.png")
  268.  
  269. SetClsColor 255,255,255
  270. Repeat
  271.         If AppTerminate() Exit
  272.         If KeyHit(KEY_ESCAPE) Exit
  273.        
  274.         Cls
  275.        
  276.         hsystem.Draw()
  277.        
  278.         If KeyHit(KEY_RIGHT)=True hsystem.Add(HEARTSYSTEM_TWOPIECE)
  279.         If KeyHit(KEY_LEFT)=True hsystem.Subtract(HEARTSYSTEM_TWOPIECE)
  280.         If KeyHit(KEY_UP)=True hsystem.AddHeart()
  281.         If KeyHit(KEY_DOWN)=True hsystem.RemoveHeart()
  282.        
  283.         Flip()
  284. Forever
  285. FreeHeartSystem(hsystem)
  286. End


Comments : none...

 

SimplePortal 2.3.6 © 2008-2014, SimplePortal