# HG changeset patch # User unc0rr # Date 1159122554 0 # Node ID 4822f6face351a86fad64ef40a3ba549bc2a8231 # Parent d8870bbf960e1f3449dfbbc7e0b26cbe0ac6bab6 Ammo menu now works! diff -r d8870bbf960e -r 4822f6face35 hedgewars/CCHandlers.inc --- a/hedgewars/CCHandlers.inc Sat Sep 23 19:26:07 2006 +0000 +++ b/hedgewars/CCHandlers.inc Sun Sep 24 18:29:14 2006 +0000 @@ -306,7 +306,6 @@ caSlot^:= slot; caAmmo^:= 0; end; - TargetPoint.X:= NoPointX; end; ApplyAmmoChanges(Hedgehogs[CurrHedgehog]) end @@ -315,6 +314,11 @@ procedure chPut(var s: shortstring); begin if CheckNoTeamOrHH then exit; +if bShowAmmoMenu then + begin + bSelected:= true; + exit + end; with CurrentTeam.Hedgehogs[CurrentTeam.CurrHedgehog].Gear^ do if (State and gstHHChooseTarget) <> 0 then begin @@ -375,6 +379,7 @@ with CurrentTeam^ do with Hedgehogs[CurrHedgehog] do begin + bSelected:= false; if bShowAmmoMenu then bShowAmmoMenu:= false else if ((Gear.State and (gstAttacking or gstAttacked)) <> 0) or (AttacksNum > 0) or ((Gear.State and gstHHDriven) = 0) then else bShowAmmoMenu:= true diff -r d8870bbf960e -r 4822f6face35 hedgewars/uConsts.pas --- a/hedgewars/uConsts.pas Sat Sep 23 19:26:07 2006 +0000 +++ b/hedgewars/uConsts.pas Sun Sep 24 18:29:14 2006 +0000 @@ -48,7 +48,7 @@ sprMineOn, sprCase, sprFAid, sprDynamite, sprPower, sprClusterBomb, sprClusterParticle, sprFlame, sprHorizont, sprSky, sprAMBorders, sprAMSlot, sprAMSlotName, sprAMAmmos, - sprAMSlotKeys); + sprAMSlotKeys, sprAMSelection); TGearType = (gtCloud, gtAmmo_Bomb, gtHedgehog, gtAmmo_Grenade, gtHealthTag, gtGrave, gtUFO, gtShotgunShot, gtPickHammer, gtRope, gtSmokeTrace, gtExplosion, gtMine, gtCase, gtDEagleShot, gtDynamite, @@ -256,7 +256,8 @@ (FileName: 'Slot'; Path: ptAmmoMenu; Width: 202; Height: 33; hasAlpha: false),// sprAMSlot (FileName: 'AmmoName'; Path: ptAmmoMenu; Width: 202; Height: 33; hasAlpha: false),// sprAMSlotName (FileName: 'Ammos'; Path: ptAmmoMenu; Width: 32; Height: 32; hasAlpha: false),// sprAMAmmos - (FileName: 'SlotKeys'; Path: ptAmmoMenu; Width: 32; Height: 32; hasAlpha: false) // sprAMSlotKeys + (FileName: 'SlotKeys'; Path: ptAmmoMenu; Width: 32; Height: 32; hasAlpha: false),// sprAMSlotKeys + (FileName: 'Selection'; Path: ptAmmoMenu; Width: 32; Height: 32; hasAlpha: false) // sprAMSelection ); Soundz: array[TSound] of record FileName: String[31]; diff -r d8870bbf960e -r 4822f6face35 hedgewars/uGame.pas --- a/hedgewars/uGame.pas Sat Sep 23 19:26:07 2006 +0000 +++ b/hedgewars/uGame.pas Sun Sep 24 18:29:14 2006 +0000 @@ -94,9 +94,7 @@ else ProcessGears end; inc(i) - end; - -MoveCamera + end end; end. diff -r d8870bbf960e -r 4822f6face35 hedgewars/uTeams.pas --- a/hedgewars/uTeams.pas Sat Sep 23 19:26:07 2006 +0000 +++ b/hedgewars/uTeams.pas Sun Sep 24 18:29:14 2006 +0000 @@ -243,6 +243,8 @@ procedure ApplyAmmoChanges(var Hedgehog: THedgehog); var s: shortstring; begin +TargetPoint.X:= NoPointX; + with Hedgehog do begin if Ammo[CurSlot, CurAmmo].Count = 0 then diff -r d8870bbf960e -r 4822f6face35 hedgewars/uWorld.pas --- a/hedgewars/uWorld.pas Sat Sep 23 19:26:07 2006 +0000 +++ b/hedgewars/uWorld.pas Sun Sep 24 18:29:14 2006 +0000 @@ -41,7 +41,6 @@ procedure InitWorld; procedure DrawWorld(Lag: integer; Surface: PSDL_Surface); procedure AddCaption(s: string; Color: Longword; Group: TCapGroup); -procedure MoveCamera; {$IFDEF COUNTTICKS} var cntTicks: LongWord; @@ -49,9 +48,10 @@ var FollowGear: PGear = nil; WindBarWidth: integer = 0; bShowAmmoMenu: boolean = false; + bSelected: boolean = false; implementation -uses uStore, uMisc, uTeams, uIO, uConsole, uKeys; +uses uStore, uMisc, uTeams, uIO, uConsole, uKeys, uLocale; const RealTicks: Longword = 0; Frames: Longword = 0; FPS: Longword = 0; @@ -67,7 +67,7 @@ var cWaterSprCount: integer; Captions: array[0..Pred(cMaxCaptions)] of TCaptionStr; - AMxLeft, AMxCurr: integer; + AMxLeft, AMxCurr, SlotsNum: integer; procedure InitWorld; begin @@ -85,15 +85,19 @@ procedure ShowAmmoMenu(Surface: PSDL_Surface); const MENUSPEED = 15; var x, y, i, t: integer; + Slot, Pos: integer; begin if (TurnTimeLeft = 0) or KbdKeyPressed then bShowAmmoMenu:= false; if bShowAmmoMenu and (AMxCurr > AMxLeft) then dec(AMxCurr, MENUSPEED); if (not bShowAmmoMenu) and (AMxCurr < cScreenWidth) then inc(AMxCurr, MENUSPEED); if CurrentTeam = nil then exit; +Slot:= 0; +Pos:= -1; with CurrentTeam.Hedgehogs[CurrentTeam.CurrHedgehog] do begin if Ammo = nil then exit; + SlotsNum:= 0; x:= AMxCurr; y:= cScreenHeight - 40; dec(y); @@ -105,21 +109,48 @@ 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, Surface); DrawSprite(sprAMSlotKeys, x + 2, y + 1, i, Surface); t:= 0; while (t <= cMaxSlotAmmoIndex) and (Ammo[i, t].Count > 0) do begin DrawSprite(sprAMAmmos, x + t * 33 + 35, y + 1, integer(Ammo[i, t].AmmoType), Surface); + 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, Surface); + Pos:= t; + end; inc(t) end end; dec(y, 1); - DrawSprite(sprAMBorders, x, y, 0, Surface) - end + DrawSprite(sprAMBorders, x, y, 0, Surface); + + if (Pos >= 0) then + if Ammo[Slot, Pos].Count > 0 then + begin + DXOutText(AMxCurr + 10, cScreenHeight - 68, fnt16, trAmmo[Ammoz[Ammo[Slot, Pos].AmmoType].NameId], Surface); + if Ammo[Slot, Pos].Count < 10 then + DXOutText(AMxCurr + 175, cScreenHeight - 68, fnt16, chr(Ammo[Slot, Pos].Count + 48) + 'x', Surface); + if bSelected then + begin + CurSlot:= Slot; + CurAmmo:= Pos; + ApplyAmmoChanges(CurrentTeam.Hedgehogs[CurrentTeam.CurrHedgehog]); + bShowAmmoMenu:= false + end; + end; + end; + +bSelected:= false; +DrawSprite(sprArrow, CursorPoint.X, CursorPoint.Y, (RealTicks shr 6) mod 8, Surface) end; +procedure MoveCamera; forward; + procedure DrawWorld(Lag: integer; Surface: PSDL_Surface); var i, t: integer; r: TSDL_Rect; @@ -139,6 +170,8 @@ end; begin +MoveCamera; + // Sky inc(RealTicks, Lag); if WorldDy > 0 then @@ -406,6 +439,17 @@ if ((CursorPoint.X = prevPoint.X)and(CursorPoint.Y = prevpoint.Y)) then exit; +if AMxCurr < cScreenWidth then + begin + if CursorPoint.X < AMxCurr + 35 then CursorPoint.X:= AMxCurr + 35; + if CursorPoint.X > AMxCurr + 200 then CursorPoint.X:= AMxCurr + 200; + if CursorPoint.Y < cScreenHeight - 75 - SlotsNum * 33 then CursorPoint.Y:= cScreenHeight - 75 - SlotsNum * 33; + if CursorPoint.Y > cScreenHeight - 76 then CursorPoint.Y:= cScreenHeight - 76; + prevPoint:= CursorPoint; + SDL_WarpMouse(CursorPoint.X, CursorPoint.Y); + exit + end; + if isCursorVisible then begin if (not CurrentTeam.ExtDriven)and(GameTicks >= PrevSentPointTime + cSendCursorPosTime) then diff -r d8870bbf960e -r 4822f6face35 share/hedgewars/Data/Graphics/AmmoMenu/CMakeLists.txt --- a/share/hedgewars/Data/Graphics/AmmoMenu/CMakeLists.txt Sat Sep 23 19:26:07 2006 +0000 +++ b/share/hedgewars/Data/Graphics/AmmoMenu/CMakeLists.txt Sun Sep 24 18:29:14 2006 +0000 @@ -1,5 +1,8 @@ install(FILES AmmoName.png + Ammos.png BrdrLines.png + Selection.png Slot.png + SlotKeys.png DESTINATION ${SHAREPATH}Data/Graphics/AmmoMenu) \ No newline at end of file diff -r d8870bbf960e -r 4822f6face35 share/hedgewars/Data/Graphics/AmmoMenu/Selection.png Binary file share/hedgewars/Data/Graphics/AmmoMenu/Selection.png has changed