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

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

#### 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 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()
31.         EndMethod
32.
33.         Method Create:THeartSystem(count:Int,x:Float,y:Float,url:Object)
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.
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.
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.
279.         If KeyHit(KEY_LEFT)=True hsystem.Subtract(HEARTSYSTEM_TWOPIECE)