# HG changeset patch # User unc0rr # Date 1228484909 0 # Node ID 3bc916b419cdad6ae82af63d1f93749ce5369b55 # Parent 3fee15104c1d6bd25b9b270281de0489083b26b2 Don't hide ammo menu when user clicks on not yet available weapon diff -r 3fee15104c1d -r 3bc916b419cd hedgewars/uWorld.pas --- a/hedgewars/uWorld.pas Thu Dec 04 21:59:25 2008 +0000 +++ b/hedgewars/uWorld.pas Fri Dec 05 13:48:29 2008 +0000 @@ -95,63 +95,67 @@ Slot:= 0; Pos:= -1; with CurrentHedgehog^ do - begin - if Ammo = nil then exit; - SlotsNum:= 0; - x:= cScreenWidth - 210 + AMxShift; - y:= cScreenHeight - 40; - dec(y); - DrawSprite(sprAMBorders, x, y, 0); - dec(y); - DrawSprite(sprAMBorders, x, y, 1); - dec(y, 33); - DrawSprite(sprAMSlotName, x, y, 0); - for i:= cMaxSlotIndex downto 0 do - if Ammo^[i, 0].Count > 0 then - begin - if (CursorPoint.Y >= y - 33) and (CursorPoint.Y < y) then Slot:= i; - dec(y, 33); - inc(SlotsNum); - DrawSprite(sprAMSlot, x, y, 0); - DrawSprite(sprAMSlotKeys, x + 2, y + 1, i); - t:= 0; - while (t <= cMaxSlotAmmoIndex) and (Ammo^[i, t].Count > 0) do - begin - l:= Ammoz[Ammo^[i, t].AmmoType].SkipTurns - CurrentTeam^.Clan^.TurnNumber; + begin + if Ammo = nil then exit; + SlotsNum:= 0; + x:= cScreenWidth - 210 + AMxShift; + y:= cScreenHeight - 40; + dec(y); + DrawSprite(sprAMBorders, x, y, 0); + dec(y); + DrawSprite(sprAMBorders, x, y, 1); + dec(y, 33); + DrawSprite(sprAMSlotName, x, y, 0); + for i:= cMaxSlotIndex downto 0 do + if Ammo^[i, 0].Count > 0 then + begin + if (CursorPoint.Y >= y - 33) and (CursorPoint.Y < y) then Slot:= i; + dec(y, 33); + inc(SlotsNum); + DrawSprite(sprAMSlot, x, y, 0); + DrawSprite(sprAMSlotKeys, x + 2, y + 1, i); + t:= 0; + while (t <= cMaxSlotAmmoIndex) and (Ammo^[i, t].Count > 0) do + begin + l:= Ammoz[Ammo^[i, t].AmmoType].SkipTurns - CurrentTeam^.Clan^.TurnNumber; + + if l >= 0 then + begin + DrawSprite(sprAMAmmosBW, x + t * 33 + 35, y + 1, LongInt(Ammo^[i, t].AmmoType)); + DrawSprite(sprTurnsLeft, x + t * 33 + 51, y + 17, l); + end else + DrawSprite(sprAMAmmos, x + t * 33 + 35, y + 1, LongInt(Ammo^[i, t].AmmoType)); - if l >= 0 then - begin - DrawSprite(sprAMAmmosBW, x + t * 33 + 35, y + 1, LongInt(Ammo^[i, t].AmmoType)); - DrawSprite(sprTurnsLeft, x + t * 33 + 51, y + 17, l); - end else - DrawSprite(sprAMAmmos, x + t * 33 + 35, y + 1, LongInt(Ammo^[i, t].AmmoType)); + if (Slot = i) + and (CursorPoint.X >= x + t * 33 + 35) + and (CursorPoint.X < x + t * 33 + 68) then + begin + if (l < 0) then DrawSprite(sprAMSelection, x + t * 33 + 35, y + 1, 0); + Pos:= t; + end; + inc(t) + end + end; + dec(y, 1); + DrawSprite(sprAMBorders, x, y, 0); - if (Slot = i) and (CursorPoint.X >= x + t * 33 + 35) and (CursorPoint.X < x + t * 33 + 68) then - begin - DrawSprite(sprAMSelection, x + t * 33 + 35, y + 1, 0); - Pos:= t; - end; - inc(t) - end - end; - dec(y, 1); - DrawSprite(sprAMBorders, x, y, 0); - - if (Pos >= 0) then - if Ammo^[Slot, Pos].Count > 0 then - begin - DrawTexture(cScreenWidth - 200 + AMxShift, cScreenHeight - 68, Ammoz[Ammo^[Slot, Pos].AmmoType].NameTex); - if Ammo^[Slot, Pos].Count < AMMO_INFINITE then - DrawTexture(cScreenWidth + AMxShift - 35, cScreenHeight - 68, CountTexz[Ammo^[Slot, Pos].Count]); - if bSelected then - begin - bShowAmmoMenu:= false; - SetWeapon(Ammo^[Slot, Pos].AmmoType); - bSelected:= false; - exit - end; - end; - end; + if (Pos >= 0) then + if Ammo^[Slot, Pos].Count > 0 then + begin + DrawTexture(cScreenWidth - 200 + AMxShift, cScreenHeight - 68, Ammoz[Ammo^[Slot, Pos].AmmoType].NameTex); + + if Ammo^[Slot, Pos].Count < AMMO_INFINITE then + DrawTexture(cScreenWidth + AMxShift - 35, cScreenHeight - 68, CountTexz[Ammo^[Slot, Pos].Count]); + + if bSelected and (Ammoz[Ammo^[Slot, Pos].AmmoType].SkipTurns - CurrentTeam^.Clan^.TurnNumber < 0) then + begin + bShowAmmoMenu:= false; + SetWeapon(Ammo^[Slot, Pos].AmmoType); + bSelected:= false; + exit + end; + end; + end; bSelected:= false; if AMxShift = 0 then DrawSprite(sprArrow, CursorPoint.X, CursorPoint.Y, (RealTicks shr 6) mod 8)