--- a/hedgewars/uTeams.pas Tue Jun 12 17:20:27 2012 +0400
+++ b/hedgewars/uTeams.pas Sun Jun 24 20:31:26 2012 +0400
@@ -35,6 +35,7 @@
procedure RestoreTeamsFromSave;
function CheckForWin: boolean;
procedure TeamGoneEffect(var Team: TTeam);
+procedure SwitchCurrentHedgehog(newHog: PHedgehog);
implementation
uses uLocale, uAmmos, uChat, uVariables, uUtils, uIO, uCaptions, uCommands, uDebug, uScript,
@@ -184,7 +185,7 @@
end
until (CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog].Gear <> nil);
-CurrentHedgehog:= @(CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog]);
+SwitchCurrentHedgehog(@(CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog]));
{$IFDEF USE_TOUCH_INTERFACE}
if (Ammoz[CurrentHedgehog^.CurAmmoType].Ammo.Propz and ammoprop_NoCrosshair) = 0 then
begin
@@ -488,7 +489,7 @@
with CurrentTeam^ do
begin
SplitBySpace(id, s);
- CurrentHedgehog:= @Hedgehogs[HedgehogsNumber];
+ SwitchCurrentHedgehog(@Hedgehogs[HedgehogsNumber]);
val(id, CurrentHedgehog^.BotLevel, c);
Gear:= AddGear(0, 0, gtHedgehog, 0, _0, _0, 0);
SplitBySpace(s, id);
@@ -618,6 +619,21 @@
RecountAllTeamsHealth();
end;
+procedure SwitchCurrentHedgehog(newHog: PHedgehog);
+var oldCI, newCI: boolean;
+ oldHH: PHedgehog;
+begin
+ oldCI:= (CurrentHedgehog <> nil) and (CurrentHedgehog^.Gear <> nil) and (CurrentHedgehog^.Gear^.CollisionIndex >= 0);
+ newCI:= (newHog^.Gear <> nil) and (newHog^.Gear^.CollisionIndex >= 0);
+ if oldCI then DeleteCI(CurrentHedgehog^.Gear);
+ if newCI then DeleteCI(newHog^.Gear);
+ oldHH:= CurrentHedgehog;
+ CurrentHedgehog:= newHog;
+ if oldCI then AddGearCI(oldHH^.Gear);
+ if newCI then AddGearCI(newHog^.Gear)
+end;
+
+
procedure initModule;
begin
RegisterVariable('addhh', @chAddHH, false);