From: Ketmar Dark Date: Mon, 5 Jun 2017 15:26:18 +0000 (+0300) Subject: refactored player controls processing code X-Git-Url: http://deadsoftware.ru/gitweb?p=d2df-sdl.git;a=commitdiff_plain;h=4cd716955ad8f4e1c883f924b827c3244cee4af6 refactored player controls processing code --- diff --git a/src/game/g_game.pas b/src/game/g_game.pas index cc40728..baf0f63 100644 --- a/src/game/g_game.pas +++ b/src/game/g_game.pas @@ -1226,6 +1226,40 @@ begin result := false; end; +procedure processPlayerControls (plr: TPlayer; var ctrl: TPlayerControl; var MoveButton: Byte; p2hack: Boolean=false); +var + time: Word; +begin + if (plr = nil) then exit; + if (p2hack) then time := 1000 else time := 1; + with ctrl do + begin + if isKeyPressed(KeyLeft, KeyLeft2) and (not isKeyPressed(KeyRight, KeyRight2)) then MoveButton := 1 // Íàæàòà òîëüêî "Âëåâî" + else if (not isKeyPressed(KeyLeft, KeyLeft2)) and isKeyPressed(KeyRight, KeyRight2) then MoveButton := 2 // Íàæàòà òîëüêî "Âïðàâî" + else if (not isKeyPressed(KeyLeft, KeyLeft2)) and (not isKeyPressed(KeyRight, KeyRight2)) then MoveButton := 0; // Íå íàæàòû íè "Âëåâî", íè "Âïðàâî" + + // Ñåé÷àñ èëè ðàíüøå áûëè íàæàòû "Âëåâî"/"Âïðàâî" => ïåðåäàåì èãðîêó: + if MoveButton = 1 then plr.PressKey(KEY_LEFT, time) + else if MoveButton = 2 then plr.PressKey(KEY_RIGHT, time); + + // Ðàíüøå áûëà íàæàòà "Âïðàâî", à ñåé÷àñ "Âëåâî" => áåæèì âïðàâî, ñìîòðèì âëåâî: + if (MoveButton = 2) and isKeyPressed(KeyLeft, KeyLeft2) then plr.SetDirection(D_LEFT) + // Ðàíüøå áûëà íàæàòà "Âëåâî", à ñåé÷àñ "Âïðàâî" => áåæèì âëåâî, ñìîòðèì âïðàâî: + else if (MoveButton = 1) and isKeyPressed(KeyRight, KeyRight2) then plr.SetDirection(D_RIGHT) + // ×òî-òî áûëî íàæàòî è íå èçìåíèëîñü => êóäà áåæèì, òóäà è ñìîòðèì: + else if MoveButton <> 0 then plr.SetDirection(TDirection(MoveButton-1)); + + // Îñòàëüíûå êëàâèøè: + if isKeyPressed(KeyJump, KeyJump2) then plr.PressKey(KEY_JUMP, time); + if isKeyPressed(KeyUp, KeyUp2) then plr.PressKey(KEY_UP, time); + if isKeyPressed(KeyDown, KeyDown2) then plr.PressKey(KEY_DOWN, time); + if isKeyPressed(KeyFire, KeyFire2) then plr.PressKey(KEY_FIRE); + if isKeyPressed(KeyNextWeapon, KeyNextWeapon2) then plr.PressKey(KEY_NEXTWEAPON); + if isKeyPressed(KeyPrevWeapon, KeyPrevWeapon2) then plr.PressKey(KEY_PREVWEAPON); + if isKeyPressed(KeyOpen, KeyOpen2) then plr.PressKey(KEY_OPEN); + end; +end; + procedure g_Game_Update(); var Msg: g_gui.TMessage; @@ -1465,93 +1499,13 @@ begin if gPlayer2 <> nil then gPlayer2.ReleaseKeys(); if (not gConsoleShow) and (not gChatShow) and (g_ActiveWindow = nil) then begin - // Ïåðâûé èãðîê: - if gPlayer1 <> nil then - with gGameControls.P1Control do - begin - if isKeyPressed(KeyLeft, KeyLeft2) and (not isKeyPressed(KeyRight, KeyRight2)) then - P1MoveButton := 1 // Íàæàòà òîëüêî "Âëåâî" - else - if (not isKeyPressed(KeyLeft, KeyLeft2)) and isKeyPressed(KeyRight, KeyRight2) then - P1MoveButton := 2 // Íàæàòà òîëüêî "Âïðàâî" - else - if (not isKeyPressed(KeyLeft, KeyLeft2)) and (not isKeyPressed(KeyRight, KeyRight2)) then - P1MoveButton := 0; // Íå íàæàòû íè "Âëåâî", íè "Âïðàâî" - - // Ñåé÷àñ èëè ðàíüøå áûëè íàæàòû "Âëåâî"/"Âïðàâî" => ïåðåäàåì èãðîêó: - if P1MoveButton = 1 then - gPlayer1.PressKey(KEY_LEFT) - else - if P1MoveButton = 2 then - gPlayer1.PressKey(KEY_RIGHT); - - // Ðàíüøå áûëà íàæàòà "Âïðàâî", à ñåé÷àñ "Âëåâî" => áåæèì âïðàâî, ñìîòðèì âëåâî: - if (P1MoveButton = 2) and isKeyPressed(KeyLeft, KeyLeft2) then - gPlayer1.SetDirection(D_LEFT) - else - // Ðàíüøå áûëà íàæàòà "Âëåâî", à ñåé÷àñ "Âïðàâî" => áåæèì âëåâî, ñìîòðèì âïðàâî: - if (P1MoveButton = 1) and isKeyPressed(KeyRight, KeyRight2) then - gPlayer1.SetDirection(D_RIGHT) - else - // ×òî-òî áûëî íàæàòî è íå èçìåíèëîñü => êóäà áåæèì, òóäà è ñìîòðèì: - if P1MoveButton <> 0 then - gPlayer1.SetDirection(TDirection(P1MoveButton-1)); - - // Îñòàëüíûå êëàâèøè: - if isKeyPressed(KeyJump, KeyJump2) then gPlayer1.PressKey(KEY_JUMP); - if isKeyPressed(KeyUp, KeyUp2) then gPlayer1.PressKey(KEY_UP); - if isKeyPressed(KeyDown, KeyDown2) then gPlayer1.PressKey(KEY_DOWN); - if isKeyPressed(KeyFire, KeyFire2) then gPlayer1.PressKey(KEY_FIRE); - if isKeyPressed(KeyNextWeapon, KeyNextWeapon2) then gPlayer1.PressKey(KEY_NEXTWEAPON); - if isKeyPressed(KeyPrevWeapon, KeyPrevWeapon2) then gPlayer1.PressKey(KEY_PREVWEAPON); - if isKeyPressed(KeyOpen, KeyOpen2) then gPlayer1.PressKey(KEY_OPEN); - end; - // Âòîðîé èãðîê: - if gPlayer2 <> nil then - with gGameControls.P2Control do - begin - if isKeyPressed(KeyLeft, KeyLeft2) and (not isKeyPressed(KeyRight, KeyRight2)) then - P2MoveButton := 1 // Íàæàòà òîëüêî "Âëåâî" - else - if (not isKeyPressed(KeyLeft, KeyLeft2)) and isKeyPressed(KeyRight, KeyRight2) then - P2MoveButton := 2 // Íàæàòà òîëüêî "Âïðàâî" - else - if (not isKeyPressed(KeyLeft, KeyLeft2)) and (not isKeyPressed(KeyRight, KeyRight2)) then - P2MoveButton := 0; // Íå íàæàòû íè "Âëåâî", íè "Âïðàâî" - - // Ñåé÷àñ èëè ðàíüøå áûëè íàæàòû "Âëåâî"/"Âïðàâî" => ïåðåäàåì èãðîêó: - if P2MoveButton = 1 then - gPlayer2.PressKey(KEY_LEFT, 1000) - else - if P2MoveButton = 2 then - gPlayer2.PressKey(KEY_RIGHT, 1000); - - // Ðàíüøå áûëà íàæàòà "Âïðàâî", à ñåé÷àñ "Âëåâî" => áåæèì âïðàâî, ñìîòðèì âëåâî: - if (P2MoveButton = 2) and isKeyPressed(KeyLeft, KeyLeft2) then - gPlayer2.SetDirection(D_LEFT) - else - // Ðàíüøå áûëà íàæàòà "Âëåâî", à ñåé÷àñ "Âïðàâî" => áåæèì âëåâî, ñìîòðèì âïðàâî: - if (P2MoveButton = 1) and isKeyPressed(KeyRight, KeyRight2) then - gPlayer2.SetDirection(D_RIGHT) - else - // ×òî-òî áûëî íàæàòî è íå èçìåíèëîñü => êóäà áåæèì, òóäà è ñìîòðèì: - if P2MoveButton <> 0 then - gPlayer2.SetDirection(TDirection(P2MoveButton-1)); - - // Îñòàëüíûå êëàâèøè: - if isKeyPressed(KeyJump, KeyJump2) then gPlayer2.PressKey(KEY_JUMP, 1000); - if isKeyPressed(KeyUp, KeyUp2) then gPlayer2.PressKey(KEY_UP, 1000); - if isKeyPressed(KeyDown, KeyDown2) then gPlayer2.PressKey(KEY_DOWN, 1000); - if isKeyPressed(KeyFire, KeyFire2) then gPlayer2.PressKey(KEY_FIRE); - if isKeyPressed(KeyNextWeapon, KeyNextWeapon2) then gPlayer2.PressKey(KEY_NEXTWEAPON); - if isKeyPressed(KeyPrevWeapon, KeyPrevWeapon2) then gPlayer2.PressKey(KEY_PREVWEAPON); - if isKeyPressed(KeyOpen, KeyOpen2) then gPlayer2.PressKey(KEY_OPEN); - end; + processPlayerControls(gPlayer1, gGameControls.P1Control, P1MoveButton); + processPlayerControls(gPlayer2, gGameControls.P2Control, P2MoveButton, true); end // if not console else - if g_Game_IsNet and (gPlayer1 <> nil) then - gPlayer1.PressKey(KEY_CHAT, 10000); - + begin + if g_Game_IsNet and (gPlayer1 <> nil) then gPlayer1.PressKey(KEY_CHAT, 10000); + end; end; // if server // Íàáëþäàòåëü