# HG changeset patch # User palewolf # Date 1269894755 0 # Node ID cb5f04cc9d766ee4dbe6db026434f40ff99c9a66 # Parent f2a3d861b23abb9d3f0d69b9c38fab19810d61e8 - Add HH dX/dY to Birdy disappearing animation - Feather amount is proportional fo fuel left diff -r f2a3d861b23a -r cb5f04cc9d76 hedgewars/GSHandlers.inc --- a/hedgewars/GSHandlers.inc Mon Mar 29 20:27:54 2010 +0000 +++ b/hedgewars/GSHandlers.inc Mon Mar 29 20:32:35 2010 +0000 @@ -2796,7 +2796,7 @@ //////////////////////////////////////////////////////////////////////////////// procedure doStepBirdyFly(Gear: PGear); var HHGear: PGear; - fuel: LongInt; + fuel, i: LongInt; move: hwFloat; begin HHGear:= CurrentHedgehog^.Gear; @@ -2831,10 +2831,11 @@ end; if Gear^.Health < 0 then Gear^.Health:= 0; -if (GameTicks and $3F) = 0 then +if (GameTicks and $7F) = 0 then begin - if Gear^.Health < 500 then - AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtFeather); + if Gear^.Health < 1000 then + for i:= ((1000-Gear^.Health) div 250) downto 0 do + AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtFeather); if Gear^.Tex <> nil then FreeTexture(Gear^.Tex); Gear^.Tex:= RenderStringTex(trmsg[sidFuel] + ': ' + inttostr(round(Gear^.Health / 20)) + '%', cWhiteColor, fntSmall) end; @@ -2873,21 +2874,12 @@ Active:= true; State:= State or gstMoving end; - if Gear^.Tag = -1 then + Gear^.State:= Gear^.State or gstAnimation or gstTmpFlag; + if HHGear^.dY < _0 then begin - Gear^.dX:= Gear^.X + int2hwFloat(LAND_WIDTH + 1024); - Gear^.dY:= int2hwFloat(256); - Gear^.X:= int2hwFloat(-LAND_WIDTH -1024); - Gear^.Y:= Gear^.Y + int2hwFloat(-256); - end - else - begin - Gear^.dX:= Gear^.X - int2hwFloat(LAND_WIDTH + 1024); - Gear^.dY:= int2hwFloat(256); - Gear^.X:= int2hwFloat(+LAND_WIDTH +1024); - Gear^.Y:= Gear^.Y + int2hwFloat(-256); + Gear^.dX:= HHGear^.dX; + Gear^.dY:= HHGear^.dY; end; - Gear^.State:= Gear^.State or gstAnimation or gstTmpFlag; Gear^.Timer:= 0; Gear^.doStep:= @doStepBirdyDisappear; CurAmmoGear:= nil; diff -r f2a3d861b23a -r cb5f04cc9d76 hedgewars/HHHandlers.inc --- a/hedgewars/HHHandlers.inc Mon Mar 29 20:27:54 2010 +0000 +++ b/hedgewars/HHHandlers.inc Mon Mar 29 20:32:35 2010 +0000 @@ -194,16 +194,7 @@ amJetpack: CurAmmoGear:= AddGear(hwRound(X), hwRound(Y), gtJetpack, 0, _0, _0, 0); amBirdy: begin PlaySound(sndWhistle); - if Gear^.dX.isNegative then - begin - CurAmmoGear:= AddGear(hwRound(X), hwRound(Y) - 32, gtBirdy, 0, int2hwFloat(LAND_WIDTH + 1024 - hwRound(X)), int2hwFloat(-256), 0); - CurAmmoGear^.Tag:= -1; - end - else - begin - CurAmmoGear:= AddGear(hwRound(X), hwRound(Y) - 32, gtBirdy, 0, int2hwFloat(-LAND_WIDTH - 1024 + hwRound(X)), int2hwFloat(-256), 0); - CurAmmoGear^.Tag:= 1; - end; + CurAmmoGear:= AddGear(hwRound(X), hwRound(Y) - 32, gtBirdy, 0, _0, _0, 0); end; amLowGravity: begin PlaySound(sndLowGravity); diff -r f2a3d861b23a -r cb5f04cc9d76 hedgewars/uGears.pas --- a/hedgewars/uGears.pas Mon Mar 29 20:27:54 2010 +0000 +++ b/hedgewars/uGears.pas Mon Mar 29 20:32:35 2010 +0000 @@ -1611,6 +1611,7 @@ procedure DrawGears; var Gear, HHGear: PGear; i: Longword; + startX, endX, startY, endY: LongInt; begin Gear:= GearsList; while Gear<>nil do @@ -1717,9 +1718,27 @@ if Gear^.State and gstAnimation = gstAnimation then begin if Gear^.State and gstTmpFlag = 0 then // Appearing - DrawTextureF(SpritesData[sprBirdy].Texture, 1, hwRound(Gear^.X) + WorldDx + hwRound(Gear^.dX) - trunc(hwRound(Gear^.dX) * (-power(2, -10 * LongInt(Gear^.Timer)/2000) + 1)), hwRound(Gear^.Y) + WorldDy + hwRound(Gear^.dY) - trunc(hwRound(Gear^.dY) * sqrt(1 - power((LongInt(Gear^.Timer)/2000)-1, 2))), ((Gear^.Pos shr 6) or (RealTicks shr 8)) mod 2, Gear^.Tag, 75, 75) + begin + endX:= hwRound(Gear^.X); + endY:= hwRound(Gear^.Y); + if Gear^.Tag < 0 then + startX:= max(LAND_WIDTH + 1024, endX + 2048) + else + startX:= max(-LAND_WIDTH - 1024, endX - 2048); + startY:= endY - 256; + DrawTextureF(SpritesData[sprBirdy].Texture, 1, startX + WorldDx + trunc((endX - startX) * (-power(2, -10 * LongInt(Gear^.Timer)/2000) + 1)), startY + WorldDy + trunc((endY - startY) * sqrt(1 - power((LongInt(Gear^.Timer)/2000)-1, 2))), ((Gear^.Pos shr 6) or (RealTicks shr 8)) mod 2, Gear^.Tag, 75, 75); + end else // Disappearing - DrawTextureF(SpritesData[sprBirdy].Texture, 1, hwRound(Gear^.X) + WorldDx + hwRound(Gear^.dX) - trunc(hwRound(Gear^.dX) * power(2, 10 * (LongInt(Gear^.Timer)/2000 - 1))), hwRound(Gear^.Y) + WorldDy + hwRound(Gear^.dY) - trunc(-hwRound(Gear^.dY) * cos(LongInt(Gear^.Timer)/2000 * (Pi/2)) + hwRound(Gear^.dY)), ((Gear^.Pos shr 6) or (RealTicks shr 8)) mod 2, Gear^.Tag, 75, 75); + begin + startX:= hwRound(Gear^.X); + startY:= hwRound(Gear^.Y); + if Gear^.Tag > 0 then + endX:= max(LAND_WIDTH + 1024, startX + 2048) + else + endX:= max(-LAND_WIDTH - 1024, startX - 2048); + endY:= startY + 256; + DrawTextureF(SpritesData[sprBirdy].Texture, 1, startX + WorldDx + trunc((endX - startX) * power(2, 10 * (LongInt(Gear^.Timer)/2000 - 1))) + hwRound(Gear^.dX * Gear^.Timer), startY + WorldDy + trunc((endY - startY) * cos(LongInt(Gear^.Timer)/2000 * (Pi/2)) - (endY - startY)) + hwRound(Gear^.dY * Gear^.Timer), ((Gear^.Pos shr 6) or (RealTicks shr 8)) mod 2, Gear^.Tag, 75, 75); + end; end else DrawTextureF(SpritesData[sprBirdy].Texture, 1, hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, ((Gear^.Pos shr 6) or (RealTicks shr 8)) mod 2, Gear^.Tag, 75, 75);