hedgewars/uGears.pas
changeset 2365 12b5373f4058
parent 2363 5304fa032d9b
child 2366 b38efe489615
equal deleted inserted replaced
2364:272977d2df53 2365:12b5373f4058
    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;