hedgewars/uVisualGears.pas
changeset 2042 905c554d62e6
parent 2014 c028362c5d72
child 2044 8548f5be2d72
equal deleted inserted replaced
2041:9e0b5a6bcecf 2042:905c554d62e6
    42 		Timer: Longword;
    42 		Timer: Longword;
    43 		Angle, dAngle: real;
    43 		Angle, dAngle: real;
    44 		Kind: TVisualGearType;
    44 		Kind: TVisualGearType;
    45 		doStep: TVGearStepProcedure;
    45 		doStep: TVGearStepProcedure;
    46 		Tex: PTexture;
    46 		Tex: PTexture;
       
    47         Hedgehog: pointer;
       
    48         Text: shortstring
    47 		end;
    49 		end;
    48 
    50 
    49 function  AddVisualGear(X, Y: LongInt; Kind: TVisualGearType): PVisualGear;
    51 function  AddVisualGear(X, Y: LongInt; Kind: TVisualGearType): PVisualGear;
    50 procedure ProcessVisualGears(Steps: Longword);
    52 procedure ProcessVisualGears(Steps: Longword);
    51 procedure DrawVisualGears(Layer: LongWord);
    53 procedure DrawVisualGears(Layer: LongWord);
   238 Gear^.doStep:= @doStepTeamHealthSorterWork;
   240 Gear^.doStep:= @doStepTeamHealthSorterWork;
   239 currsorter:= Gear;
   241 currsorter:= Gear;
   240 //doStepTeamHealthSorterWork(Gear, Steps)
   242 //doStepTeamHealthSorterWork(Gear, Steps)
   241 end;
   243 end;
   242 
   244 
       
   245 procedure doStepSpeechBubbleWork(Gear: PVisualGear; Steps: Longword);
       
   246 var t: LongWord;
       
   247 begin
       
   248 for t:= 1 to Steps do
       
   249     begin
       
   250     dec(Gear^.Timer);
       
   251 
       
   252     if (PHedgehog(Gear^.Hedgehog)^.Gear <> nil) then
       
   253         begin
       
   254         Gear^.X:= PHedgehog(Gear^.Hedgehog)^.Gear^.X+int2hwFloat(Gear^.Tex^.w div 2  - Gear^.FrameTicks);
       
   255         Gear^.Y:= PHedgehog(Gear^.Hedgehog)^.Gear^.Y-int2hwFloat(16+Gear^.Tex^.h);
       
   256         end;
       
   257 
       
   258     if Gear^.Timer = 0 then
       
   259         begin
       
   260         CurrentHedgehog^.SpeechGear:= nil;
       
   261         DeleteVisualGear(Gear)
       
   262         end;
       
   263     end
       
   264 end;
       
   265 
       
   266 procedure doStepSpeechBubble(Gear: PVisualGear; Steps: Longword);
       
   267 begin
       
   268 if (CurrentHedgehog^.SpeechGear <> nil) then DeleteVisualGear(CurrentHedgehog^.SpeechGear);
       
   269 CurrentHedgehog^.SpeechGear:= Gear;
       
   270 
       
   271 Gear^.Timer:= max(Length(Gear^.Text)*150,3000);
       
   272 
       
   273 Gear^.Tex:= RenderSpeechBubbleTex(Gear^.Text, Gear^.FrameTicks, fnt16);
       
   274 
       
   275 case Gear^.FrameTicks of
       
   276     1: Gear^.FrameTicks:= SpritesData[sprSpeechTail].Width-28;
       
   277     2: Gear^.FrameTicks:= SpritesData[sprThoughtTail].Width-20;
       
   278     3: Gear^.FrameTicks:= SpritesData[sprShoutTail].Width-10;
       
   279     end;
       
   280 
       
   281 Gear^.doStep:= @doStepSpeechBubbleWork;
       
   282 
       
   283 Gear^.Y:= Gear^.Y - int2hwFloat(Gear^.Tex^.h)
       
   284 end;
       
   285 
   243 // ==================================================================
   286 // ==================================================================
   244 const doStepHandlers: array[TVisualGearType] of TVGearStepProcedure =
   287 const doStepHandlers: array[TVisualGearType] of TVGearStepProcedure =
   245 		(
   288 		(
   246 			@doStepFlake,
   289 			@doStepFlake,
   247 			@doStepCloud,
   290 			@doStepCloud,
   248 			@doStepExpl,
   291 			@doStepExpl,
   249 			@doStepExpl,
   292 			@doStepExpl,
   250 			@doStepFire,
   293 			@doStepFire,
   251 			@doStepSmallDamage,
   294 			@doStepSmallDamage,
   252 			@doStepTeamHealthSorter
   295 			@doStepTeamHealthSorter,
       
   296 			@doStepSpeechBubble
   253 		);
   297 		);
   254 
   298 
   255 function  AddVisualGear(X, Y: LongInt; Kind: TVisualGearType): PVisualGear;
   299 function  AddVisualGear(X, Y: LongInt; Kind: TVisualGearType): PVisualGear;
   256 var Result: PVisualGear;
   300 var Result: PVisualGear;
   257 	t: Longword;
   301 	t: Longword;
   262 		begin
   306 		begin
   263 		AddVisualGear:= nil;
   307 		AddVisualGear:= nil;
   264 		exit
   308 		exit
   265 		end;
   309 		end;
   266 
   310 
   267 if cReducedQuality and (Kind <> vgtTeamHealthSorter) then
   311 if cReducedQuality and (Kind <> vgtTeamHealthSorter) and (Kind <> vgtSpeechBubble) then
   268 	begin
   312 	begin
   269 	AddVisualGear:= nil;
   313 	AddVisualGear:= nil;
   270 	exit
   314 	exit
   271 	end;
   315 	end;
   272 
   316 
   380 		case Gear^.Kind of
   424 		case Gear^.Kind of
   381 			vgtExplPart: DrawSprite(sprExplPart, hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, 7 - Gear^.Frame);
   425 			vgtExplPart: DrawSprite(sprExplPart, hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, 7 - Gear^.Frame);
   382 			vgtExplPart2: DrawSprite(sprExplPart2, hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, 7 - Gear^.Frame);
   426 			vgtExplPart2: DrawSprite(sprExplPart2, hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, 7 - Gear^.Frame);
   383 			vgtFire: DrawSprite(sprFlame, hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, (RealTicks div 64 + Gear^.Frame) mod 8);
   427 			vgtFire: DrawSprite(sprFlame, hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, (RealTicks div 64 + Gear^.Frame) mod 8);
   384 			vgtSmallDamageTag: DrawCentered(hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, Gear^.Tex);
   428 			vgtSmallDamageTag: DrawCentered(hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, Gear^.Tex);
       
   429             vgtSpeechBubble: if Gear^.Tex <> nil then DrawCentered(hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, Gear^.Tex);
   385 			end;
   430 			end;
   386 		Gear:= Gear^.NextGear
   431 		Gear:= Gear^.NextGear
   387 		end
   432 		end
   388 	end
   433 	end
   389 end;
   434 end;