From 2e463dff8ccb0e2431a255b8623fab9cb455ce61 Mon Sep 17 00:00:00 2001 From: Arslaan Pathan Date: Sun, 15 Jun 2025 09:23:23 +1200 Subject: Add jump stuff and gravity! --- assets/scripts/local2P.lua | 66 +++++++++++++++++++++++++++++++++++----------- 1 file changed, 50 insertions(+), 16 deletions(-) (limited to 'assets/scripts/local2P.lua') diff --git a/assets/scripts/local2P.lua b/assets/scripts/local2P.lua index df20f61..c8e0aa5 100644 --- a/assets/scripts/local2P.lua +++ b/assets/scripts/local2P.lua @@ -1,10 +1,24 @@ ---@diagnostic disable: undefined-global -jumpMultiplier = 7 + +function SafeInitCharacter(character, default_x, default_y) + character.x = character.x or default_x + character.y = character.y or default_y + character.y_velocity = character.y_velocity or 1 + character.current_sprite = character.asset_dir .. "/sprites/idle.png" +end + +function Setup() + SafeInitCharacter(player1Character, 250, 250) + SafeInitCharacter(player2Character, WIDTH - 250 - (250 / 2), 250) +end + +gravity = 1.2 -- POSITIVE gravity +floor_y = HEIGHT - 250 function HandleP1Input() - if Input.isKeyPressedOnce("W") then - player1Character.y = player1Character.y - player1Character.speed * jumpMultiplier; + if Input.isKeyPressedOnce("W") and player1Character.y == floor_y then + player1Character.y_velocity = player1Character.jump_strength * -1.0; end if Input.isKeyDown("D") then player1Character.x = player1Character.x + player1Character.speed; @@ -15,8 +29,8 @@ function HandleP1Input() end function HandleP2Input() - if Input.isKeyPressedOnce("UP") then - player2Character.y = player2Character.y - player2Character.speed * jumpMultiplier; + if Input.isKeyPressedOnce("UP") and player2Character.y == floor_y then + player2Character.y_velocity = player2Character.jump_strength * -1.0; end if Input.isKeyDown("RIGHT") then player2Character.x = player2Character.x + player2Character.speed; @@ -26,20 +40,40 @@ function HandleP2Input() end end -function Setup() - player1Character.x = 250; - player2Character.x = WIDTH - 250 - (250 / 2) - player1Character.y = 250; - player2Character.y = 250; +function Update() + -- P1 physics + player1Character.y_velocity = player1Character.y_velocity + gravity + player1Character.y = player1Character.y + player1Character.y_velocity - player1Character.current_sprite = player1Character.asset_dir .. "/sprites/idle.png" - player2Character.current_sprite = player2Character.asset_dir .. "/sprites/idle.png" -end + if player1Character.y > floor_y then + player1Character.y = floor_y + player1Character.y_velocity = 0 + end + + -- P2 physics + player2Character.y_velocity = player2Character.y_velocity + gravity + player2Character.y = player2Character.y + player2Character.y_velocity + + if player2Character.y > floor_y then + player2Character.y = floor_y + player2Character.y_velocity = 0 + end + + -- Render + queueTextureForRender( + player1Character.current_sprite, + math.floor(player1Character.x), + math.floor(player1Character.y) + ) + + queueTextureForRender( + player2Character.current_sprite, + math.floor(player2Character.x), + math.floor(player2Character.y) + ) -function Update() - queueTextureForRender(player1Character.current_sprite, player1Character.x, player1Character.y) - queueTextureForRender(player2Character.current_sprite, player2Character.x, player2Character.y) + -- Input HandleP1Input() HandleP2Input() end -- cgit v1.2.3