Ooops
November 25, 2020, 08:10:34 AM

### Author Topic: [bb] Area Collision Lib by David Bird(Birdie) [ 1+ years ago ]  (Read 629 times)

#### BlitzBot

• Jr. Member
• Posts: 1
##### [bb] Area Collision Lib by David Bird(Birdie) [ 1+ years ago ]
« on: June 29, 2017, 12:28:41 AM »
Title : Area Collision Lib
Author : David Bird(Birdie)
Posted : 1+ years ago

Description : As the title says..

Code :
Code: BlitzBasic
1. ;
2. ;       Area Collision Library
3. ;       David Bird
4. ;       enquire@davebird.fsnet.co.uk
5. ;
6. ;syntax
7.
9. ;SetCubeRegion(posx,posy,posz,size)
10. ;SetRectRegion(posx,posy,posz,width,height,depth)
11. ;PointInRegion(regType,checkx,checky,checkz)
14. ;FreeAllRegions()
15. ;FreeRegion(r.reg)
16. ;GetEntityRegion.reg(ent,x#,y#,z#,rd#=1)
18. ;GetPointRegion.reg(x#,y#,z#)
19.
20. Global AC_DEBUG=False ;set this this to true to show regions
21. Type reg
22.         Field typ       ;0-sphere 1-cube 2-rect
23.         Field piv
25.         Field sx#
26.         Field sy#
27.         Field sz#
28.         Field lpiv
29.         Field tx#
30.         Field ty#
31.         Field tz#
32.         Field debugent
33. End Type
34. Function SetAC_DEBUG(d=False)
35.         AC_DEBUG=d
36. End Function
37.
38. Function MoveRegion(r.reg,x#,y#,z#)
39.         MoveEntity rpiv,x,y,z
40. End Function
41.
42. Function TurnRegion(r.reg,x#,y#,z#,Glob=0)
43.         TurnEntity rpiv,x,y,z,glob
44. End Function
45.
46. Function PositionRegion(r.reg,x#,y#,z#,Glob=0)
47.         PositionEntity rpiv,x,y,z,Glob
48. End Function
49.
50. Function TranslateRegion(r.reg,x#,y#,z#,Glob=0)
51.         TranslateEntity rpiv,x,y,z,Glob
52. End Function
53.
55.         r.reg=New reg
56.         rpiv=CreatePivot(parent)
57.         rlpiv=CreatePivot()
58.         PositionEntity rpiv,x,y,z
59.         r
61.         r       yp=0                    ;only spheres unto now
62.         If AC_DEBUG=True Then
63.                 t=CreateSphere(10,rpiv)
64.                 EntityAlpha t,.25
65.                 EntityFX t,16
67.                 rdebugent=t
68.         End If
69.         Return r
70. End Function
71.
72. Function SetCubeRegion.reg(x#,y#,z#,size#,parent=0)
73.         r.reg=New reg
74.         rpiv=CreatePivot(parent)
75.         rlpiv=CreatePivot()
76.         PositionEntity rpiv,x,y,z
77.         rsx=size
78.         rsy=size
79.         rsz=size
80.         r       yp=1            ;only spheres unto now
81.         If AC_DEBUG=True Then
82.                 t=CreateCube(rpiv)
83.                 EntityAlpha t,.25
84.                 EntityFX t,16
85.                 ScaleEntity t,size,size,size
86.                 rdebugent=t
87.         End If
88.
89.         Return r
90. End Function
91.
92. Function SetRectRegion.reg(x#,y#,z#,w#,h#,d#,parent=0)
93.         r.reg=New reg
94.         rpiv=CreatePivot(parent)
95.         rlpiv=CreatePivot()
96.         PositionEntity rpiv,x,y,z
97.         rsx=w
98.         rsy=h
99.         rsz=d
100.         r       yp=1
101.         If AC_DEBUG=True Then
102.                 t=CreateCube(rpiv)
103.                 EntityAlpha t,.25
104.                 EntityFX t,16
105.                 ScaleEntity t,w,h,d
106.                 rdebugent=t
107.         End If
108.         Return r
109. End Function
110.
111. Function PointInRegion(r.reg,x#,y#,z#)
112.         typ=r   yp
113.         If typ=2 Then t=1
114.         Select typ
115.                 Case 0                                                          ;-point in sphere
116.                         dx#=EntityX(rpiv,True)-x
117.                         dy#=EntityY(rpiv,True)-y
118.                         dz#=EntityZ(rpiv,True)-z
122.                 Case 1                                                          ;- point in cube or rectangle
123.                         If x<EntityX(rpiv,True)+rsx And x>EntityX(rpiv,True)-rsx
124.                                 If y<EntityY(rpiv,True)+rsy And y>EntityY(rpiv,True)-rsy
125.                                         If z<EntityZ(rpiv,True)+rsz And z>EntityZ(rpiv,True)-rsz
126.                                                 Return True
127.                                         End If
128.                                 End If
129.                         End If
130.         End Select
131.         Return False
132. End Function
133.
134. Function EntityInRegion(ent,r.reg,rd#=1)
136. End Function
137.
138. Function SphereInRegion(r.reg,x#,y#,z#,rd#)
139.         typ=r   yp
140.         If typ=2 Then t=1
141.         Select typ
142.                 Case 0                                                          ;-Sphere in sphere
143.                         dx#=EntityX(rpiv,True)-x
144.                         dy#=EntityY(rpiv,True)-y
145.                         dz#=EntityZ(rpiv,True)-z
149.                 Case 1                                                          ;-Sphere in cube
150.                         dx#=EntityX(rpiv,True)-x
151.                         dy#=EntityY(rpiv,True)-y
152.                         dz#=EntityZ(rpiv,True)-z
160.                         If dx<EntityX(rpiv,True)+rsx And dx>EntityX(rpiv,True)-rsx
161.                                 If dy<EntityY(rpiv,True)+rsy And dy>EntityY(rpiv,True)-rsy
162.                                         If dz<EntityZ(rpiv,True)+rsz And dz>EntityZ(rpiv,True)-rsz
163.                                                 Return True
164.                                         End If
165.                                 End If
166.                         End If
167.         End Select
168.         Return False
169. End Function
170.
171. Function GetPointRegion.reg(x#,y#,z#)
172.         ;returns the first region that a point is within
173.         For r.reg=Each reg
174.                 If PointInRegion(r,x,y,z)=True Then Return r
175.         Next
176.         Return Null
177. End Function
178.
180.         ;returns the first region that a point is within
181.         For r.reg=Each reg
182.                 If SphereInRegion(r,x,y,z,rad)=True Then Return r
183.         Next
184.         Return Null
185. End Function
186.
187. Function GetEntityRegion.reg(ent,rd#=1)
188.         ;returns the first region that a point is within
189.         For r.reg=Each reg
190.                 If EntityInRegion(ent,r,rd)=True Then Return r
191.         Next
192.         Return Null
193. End Function
194.
195. Function FreeAllRegions()
196.         For r.reg=Each reg
197.                 If rpiv<>0 Then FreeEntity rpiv
198.                 If rlpiv<>0 Then FreeEntity rlpiv
199.                 Delete r
200.         Next
201. End Function
202.
203. Function FreeRegion(r.reg)
204.                 If rpiv<>0 Then FreeEntity rpiv
205.                 If rlpiv<>0 Then FreeEntity rlpiv
206.                 Delete r
207. End Function
208.
209. Function UpdateRegions()
210.         For r.reg=Each reg
211.                 r       x=EntityX(rpiv,True)-EntityX(rlpiv,True)
212.                 r       y=EntityY(rpiv,True)-EntityY(rlpiv,True)
213.                 r       z=EntityZ(rpiv,True)-EntityZ(rlpiv,True)
214.                 PositionEntity rlpiv,EntityX(rpiv,True),EntityY(rpiv,True),EntityZ(rpiv,True)
215.         Next
216. End Function
217.
218. ;only used in debug
219. Function HideRegions()
220.         For r.reg=Each reg
221.                 HideEntity rdebugent
222.         Next
223. End Function
224.
225. Function ShowRegions()
226.         For r.reg=Each reg
227.                 ShowEntity rdebugent
228.         Next
229. End Function