94 ar: array[0..MAXROPEPOINTS] of record |
94 ar: array[0..MAXROPEPOINTS] of record |
95 X, Y: hwFloat; |
95 X, Y: hwFloat; |
96 dLen: hwFloat; |
96 dLen: hwFloat; |
97 b: boolean; |
97 b: boolean; |
98 end; |
98 end; |
99 rounded: array[0..MAXROPEPOINTS] of TVertex2i; |
99 rounded: array[0..MAXROPEPOINTS + 2] of TVertex2i; |
100 end; |
100 end; |
101 |
101 |
102 procedure DeleteGear(Gear: PGear); forward; |
102 procedure DeleteGear(Gear: PGear); forward; |
103 procedure doMakeExplosion(X, Y, Radius: LongInt; Mask: LongWord); forward; |
103 procedure doMakeExplosion(X, Y, Radius: LongInt; Mask: LongWord); forward; |
104 procedure AmmoShove(Ammo: PGear; Damage, Power: LongInt); forward; |
104 procedure AmmoShove(Ammo: PGear; Damage, Power: LongInt); forward; |
1258 DrawSprite(sprVampiric, sx - 24, sy - 24, 0); |
1258 DrawSprite(sprVampiric, sx - 24, sy - 24, 0); |
1259 end; |
1259 end; |
1260 end; |
1260 end; |
1261 |
1261 |
1262 procedure DrawRopeLinesRQ(Gear: PGear); |
1262 procedure DrawRopeLinesRQ(Gear: PGear); |
1263 var i, cnt: LongInt; |
1263 begin |
1264 px, py: LongInt; |
|
1265 begin |
|
1266 // FIXME: store rounded coordinates in second points array |
|
1267 cnt:= 0; |
|
1268 with RopePoints do |
1264 with RopePoints do |
1269 if RopePoints.Count > 0 then |
1265 begin |
1270 begin |
1266 rounded[Count].X:= hwRound(Gear^.X); |
1271 i:= 0; |
1267 rounded[Count].Y:= hwRound(Gear^.Y); |
1272 cnt:= 0; |
1268 rounded[Count + 1].X:= hwRound(PHedgehog(Gear^.Hedgehog)^.Gear^.X); |
1273 px:= hwRound(ar[0].X) - 1; |
1269 rounded[Count + 1].Y:= hwRound(PHedgehog(Gear^.Hedgehog)^.Gear^.Y); |
1274 while i < Count do |
1270 end; |
1275 begin |
1271 |
1276 rounded[cnt].X:= hwRound(ar[i].X) + WorldDx; |
1272 if (RopePoints.Count > 0) or (Gear^.Elasticity.QWordValue > 0) then |
1277 rounded[cnt].Y:= hwRound(ar[i].Y) + WorldDy; |
|
1278 // prevent equal points |
|
1279 if (px <> rounded[cnt].X) or (py <> rounded[cnt].Y) then |
|
1280 begin |
|
1281 px:= rounded[cnt].X; |
|
1282 py:= rounded[cnt].Y; |
|
1283 inc(cnt) |
|
1284 end; |
|
1285 inc(i) |
|
1286 end; |
|
1287 rounded[cnt].X:= hwRound(Gear^.X) + WorldDx; |
|
1288 rounded[cnt].Y:= hwRound(Gear^.Y) + WorldDy; |
|
1289 inc(cnt); |
|
1290 rounded[cnt].X:= hwRound(PHedgehog(Gear^.Hedgehog)^.Gear^.X) + WorldDx; |
|
1291 rounded[cnt].Y:= hwRound(PHedgehog(Gear^.Hedgehog)^.Gear^.Y) + WorldDy; |
|
1292 end else |
|
1293 if Gear^.Elasticity.QWordValue > 0 then |
|
1294 begin |
|
1295 cnt:= 1; |
|
1296 rounded[0].X:= hwRound(Gear^.X) + WorldDx; |
|
1297 rounded[0].Y:= hwRound(Gear^.Y) + WorldDy; |
|
1298 rounded[1].X:= hwRound(PHedgehog(Gear^.Hedgehog)^.Gear^.X) + WorldDx; |
|
1299 rounded[1].Y:= hwRound(PHedgehog(Gear^.Hedgehog)^.Gear^.Y) + WorldDy; |
|
1300 end; |
|
1301 |
|
1302 if cnt > 0 then |
|
1303 begin |
1273 begin |
1304 glDisable(GL_TEXTURE_2D); |
1274 glDisable(GL_TEXTURE_2D); |
1305 glEnable(GL_LINE_SMOOTH); |
1275 glEnable(GL_LINE_SMOOTH); |
|
1276 |
|
1277 glPushMatrix; |
|
1278 |
|
1279 glTranslatef(WorldDx, WorldDy, 0); |
1306 |
1280 |
1307 glLineWidth(4.0); |
1281 glLineWidth(4.0); |
1308 |
1282 |
1309 glColor4ub($A0, $A0, $A0, $C0); |
1283 glColor4ub($B0, $B0, $B0, $D0); |
1310 |
1284 |
1311 glEnableClientState(GL_VERTEX_ARRAY); |
1285 glEnableClientState(GL_VERTEX_ARRAY); |
1312 glVertexPointer(2, GL_INT, 0, @RopePoints.rounded[0]); |
1286 glVertexPointer(2, GL_INT, 0, @RopePoints.rounded[0]); |
1313 glDrawArrays(GL_LINE_STRIP, 0, cnt + 1); |
1287 glDrawArrays(GL_LINE_STRIP, 0, RopePoints.Count + 2); |
1314 glColor4f(1, 1, 1, 1); |
1288 glColor4f(1, 1, 1, 1); |
|
1289 |
|
1290 glPopMatrix; |
|
1291 |
1315 glEnable(GL_TEXTURE_2D); |
1292 glEnable(GL_TEXTURE_2D); |
1316 glDisable(GL_LINE_SMOOTH); |
1293 glDisable(GL_LINE_SMOOTH) |
1317 end |
1294 end |
1318 end; |
1295 end; |
1319 |
1296 |
1320 procedure DrawRope(Gear: PGear); |
1297 procedure DrawRope(Gear: PGear); |
1321 var roplen: LongInt; |
1298 var roplen: LongInt; |