hedgewars/uVisualGears.pas
changeset 2428 6800f8aa0184
parent 2376 ece7b87f1334
child 2587 0dfa56a8513c
equal deleted inserted replaced
2427:241e3bb6a146 2428:6800f8aa0184
   171 		DeleteVisualGear(Gear)
   171 		DeleteVisualGear(Gear)
   172 	else
   172 	else
   173 		dec(Gear^.FrameTicks, Steps)
   173 		dec(Gear^.FrameTicks, Steps)
   174 end;
   174 end;
   175 
   175 
       
   176 procedure doStepHealth(Gear: PVisualGear; Steps: Longword);
       
   177 begin
       
   178 Gear^.X:= Gear^.X + Gear^.dX * Steps;
       
   179 Gear^.Y:= Gear^.Y - Gear^.dY * Steps;
       
   180 
       
   181 if Gear^.FrameTicks <= Steps then
       
   182 	DeleteVisualGear(Gear)
       
   183 else
       
   184 	dec(Gear^.FrameTicks, Steps);
       
   185 end;
       
   186 
   176 procedure doStepSteam(Gear: PVisualGear; Steps: Longword);
   187 procedure doStepSteam(Gear: PVisualGear; Steps: Longword);
   177 begin
   188 begin
   178 	Gear^.X:= Gear^.X + (cWindSpeed * 100 + Gear^.dX) * Steps;
   189 	Gear^.X:= Gear^.X + (cWindSpeed * 100 + Gear^.dX) * Steps;
   179 	Gear^.Y:= Gear^.Y - cDrownSpeed * Steps;
   190 	Gear^.Y:= Gear^.Y - cDrownSpeed * Steps;
   180 
   191 
   317 			@doStepFire,
   328 			@doStepFire,
   318 			@doStepSmallDamage,
   329 			@doStepSmallDamage,
   319 			@doStepTeamHealthSorter,
   330 			@doStepTeamHealthSorter,
   320 			@doStepSpeechBubble,
   331 			@doStepSpeechBubble,
   321 			@doStepBubble,
   332 			@doStepBubble,
   322 			@doStepSteam
   333 			@doStepSteam,
       
   334 			@doStepHealth
   323 		);
   335 		);
   324 
   336 
   325 function  AddVisualGear(X, Y: LongInt; Kind: TVisualGearType): PVisualGear;
   337 function  AddVisualGear(X, Y: LongInt; Kind: TVisualGearType): PVisualGear;
   326 var Result: PVisualGear;
   338 var Result: PVisualGear;
   327 	t: Longword;
   339 	t: Longword;
   393 				end;
   405 				end;
   394 	vgtSmallDamageTag: begin
   406 	vgtSmallDamageTag: begin
   395 				Result^.FrameTicks:= 1100
   407 				Result^.FrameTicks:= 1100
   396 				end;
   408 				end;
   397 	vgtBubble: begin
   409 	vgtBubble: begin
   398 				t:= random(1024);
       
   399 				sp:= _0_001 * (random(85) + 95);
       
   400 				dx.isNegative:= random(2) = 0;
   410 				dx.isNegative:= random(2) = 0;
   401 				dx.QWordValue:= random(100000000);
   411 				dx.QWordValue:= random(100000000);
   402 				dy:= sp;
   412 				dy:= _0_001 * (random(85) + 95);
   403 				dy.isNegative:= false;
   413 				dy.isNegative:= false;
   404 				FrameTicks:= 250 + random(1751);
   414 				FrameTicks:= 250 + random(1751);
   405 				Frame:= random(5)
   415 				Frame:= random(5)
   406 				end;
   416 				end;
   407 	vgtSteam: begin
   417 	vgtSteam: begin
   408 				t:= random(1024);
       
   409 				sp:= _0_001 * (random(95) + 70);
       
   410 				dx.isNegative:= random(2) = 0;
   418 				dx.isNegative:= random(2) = 0;
   411 				dx.QWordValue:= random(100000000);
   419 				dx.QWordValue:= random(100000000);
   412 				dy:= sp;
   420 				dy:= _0_001 * (random(85) + 95);
   413 				dy.isNegative:= false;
   421 				dy.isNegative:= false;
   414 				Frame:= 7 - random(3);
   422 				Frame:= 7 - random(3);
   415 				FrameTicks:= cExplFrameTicks * 2;
   423 				FrameTicks:= cExplFrameTicks * 2;
       
   424 				end;
       
   425 	vgtHealth: begin
       
   426 				dx:= _0_001 * random(45);
       
   427 				dx.isNegative:= random(2) = 0;
       
   428 				dy:= _0_001 * (random(20) + 25);
       
   429 				Frame:= 0;
       
   430 				FrameTicks:= random(750) + 1250;
   416 				end;
   431 				end;
   417 		end;
   432 		end;
   418 
   433 
   419 if VisualGearsList <> nil then
   434 if VisualGearsList <> nil then
   420 	begin
   435 	begin
   470 		end;
   485 		end;
   471 	1: while Gear <> nil do
   486 	1: while Gear <> nil do
   472 		begin
   487 		begin
   473         if not cReducedQuality then
   488         if not cReducedQuality then
   474             case Gear^.Kind of
   489             case Gear^.Kind of
   475                 vgtExplPart: DrawSprite(sprExplPart, hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, 7 - Gear^.Frame);
   490                 vgtExplPart: DrawSprite(sprExplPart, hwRound(Gear^.X) + WorldDx - 16, hwRound(Gear^.Y) + WorldDy - 16, 7 - Gear^.Frame);
   476                 vgtExplPart2: DrawSprite(sprExplPart2, hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, 7 - Gear^.Frame);
   491                 vgtExplPart2: DrawSprite(sprExplPart2, hwRound(Gear^.X) + WorldDx - 16, hwRound(Gear^.Y) + WorldDy - 16, 7 - Gear^.Frame);
   477                 vgtFire: DrawSprite(sprFlame, hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, (RealTicks div 64 + Gear^.Frame) mod 8);
   492                 vgtFire: DrawSprite(sprFlame, hwRound(Gear^.X) + WorldDx - 8, hwRound(Gear^.Y) + WorldDy, (RealTicks div 64 + Gear^.Frame) mod 8);
   478 				vgtBubble: DrawSprite(sprBubbles, hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, Gear^.Frame);//(RealTicks div 64 + Gear^.Frame) mod 8);
   493 				vgtBubble: DrawSprite(sprBubbles, hwRound(Gear^.X) + WorldDx - 8, hwRound(Gear^.Y) + WorldDy - 8, Gear^.Frame);//(RealTicks div 64 + Gear^.Frame) mod 8);
   479 				vgtSteam: DrawSprite(sprExplPart, hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, 7 - Gear^.Frame);
   494 				vgtSteam: DrawSprite(sprExplPart, hwRound(Gear^.X) + WorldDx - 16, hwRound(Gear^.Y) + WorldDy - 16, 7 - Gear^.Frame);
       
   495 				vgtHealth:  begin
       
   496 							case Gear^.Frame div 10 of
       
   497 								0:glColor4f(0, 1, 0, Gear^.FrameTicks / 1000);
       
   498 								1:glColor4f(1, 0, 0, Gear^.FrameTicks / 1000);
       
   499 							end;
       
   500 							DrawSprite(sprHealth, hwRound(Gear^.X) + WorldDx - 8, hwRound(Gear^.Y) + WorldDy - 8, 0);
       
   501 							glColor4f(1, 1, 1, 1);
       
   502 							end;
   480             end;
   503             end;
   481         case Gear^.Kind of
   504         case Gear^.Kind of
   482             vgtSmallDamageTag: DrawCentered(hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, Gear^.Tex);
   505             vgtSmallDamageTag: DrawCentered(hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, Gear^.Tex);
   483             vgtSpeechBubble: if Gear^.Tex <> nil then DrawCentered(hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, Gear^.Tex);
   506             vgtSpeechBubble: if Gear^.Tex <> nil then DrawCentered(hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, Gear^.Tex);
   484         end;
   507         end;