put the game screen itself on its own, so the UI can be separeted, also, also, huh, game plain plan ?? how do we say it

This commit is contained in:
2021-05-09 17:10:50 +02:00
parent 9be6801ba1
commit d56f796ec3
2 changed files with 133 additions and 120 deletions

126
main.lua
View File

@@ -1,137 +1,23 @@
-- Chuchu by Makaron
Boipus = require('deps.boipushy')
Physics = require('deps.physics')
assets = require('deps.cargo').init('data')
-- my own libs
crates = require('crate')
DEBUG_MODE = true
-- my own libs
Chu = require 'game'
GRAVITY = 512
SIDES = {
LEFT = {
10, 10, 200, 10, 200, 500, 10, 500
},
RIGHT = {
310, 10, 502, 10, 502, 502, 310, 502
},
WIDTH = 190
}
local player = {
maxSpeed = {
x = 100,
y = 100
}
}
local magnet = {
w = 50,
h = 50,
collider = nil,
side = 'LEFT'
}
local side = {
left = nil,
right = nil
}
local velocity = {0, 0}
local current = { }
local game = nil
function love.load()
if DEBUG_MODE then love.window.setMode(1024, 900)
else love.window.setMode(512, 512) end
world = Physics(0, 0)
world:addClass('Player')
world:addClass('Side')
world:addClass('Crate')
side.left = world:addChain(true, SIDES.LEFT):setClass('Side')
side.right = world:addChain(true, SIDES.RIGHT):setClass('Side')
magnet.collider = world:addRectangle(50, 50, magnet.w, magnet.h):setClass('Player')
magnet.collider:setRestitution(0)
input = Boipus()
-- Controls
-- Keyboard and mouse
input:bind(love.keyboard.getKeyFromScancode('w'), 'moveUp')
input:bind(love.keyboard.getKeyFromScancode('a'), 'moveLeft')
input:bind(love.keyboard.getKeyFromScancode('d'), 'moveRight')
input:bind(love.keyboard.getKeyFromScancode('s'), 'moveDown')
input:bind(love.keyboard.getKeyFromScancode('space'), 'switch')
input:bind(love.keyboard.getKeyFromScancode('lshift'), 'detach')
crates:init(world, magnet)
crates:spawn(120, 400)
crates:spawn(150, 400)
-- Gamepad
--[[input:bind('dpup', 'moveUp')
input:bind('dpleft', 'moveLeft')
input:bind('dpright', 'moveRight')
input:bind('dpdown', 'moveDown')]]--
game = Chu.new(200, 200, DEBUG_MODE)
end
function love.update(dt)
world:update(dt)
crates:update(dt)
-- this is temp, ofc, it's ugly af
if input:pressed('switch') then
velocity = {0, 0}
-- first, let's take care of the attached crates
for key in pairs(crates:getAttached()) do
mirrorCollider(crates.attached[key].collider, magnet.side)
end
mirrorCollider(magnet.collider, magnet.side)
if magnet.side == 'LEFT' then
magnet.side = 'RIGHT'
else
magnet.side = 'LEFT'
end
elseif input:pressed('detach') then
velocity = {0, 0}
local attached = crates:getAttached()
for key in pairs(attached) do
crates:detach(key)
end
else
if input:down('moveUp') or input:down('moveLeft') or input:down('moveRight') or input:down('moveDown') then
if input:down('moveUp') then velocity[2] = -player.maxSpeed.y
elseif input:down('moveDown') then velocity[2] = player.maxSpeed.y
else velocity[2] = 0 end
if input:down('moveLeft') then velocity[1] = -player.maxSpeed.x
elseif input:down('moveRight') then velocity[1] = player.maxSpeed.x
else velocity[1] = 0 end
else
velocity = {0, 0}
end
end
magnet.collider:setLinearVelocity(velocity[1], velocity[2])
game:update(dt)
end
function love.draw()
world:draw()
game:draw()
if DEBUG_MODE then love.graphics.print('DEBUG MODE IS ENABLED', 850, 10) end
end
function mirrorCollider(collider, side)
current.x, current.y = collider:getPosition()
if side == 'LEFT' then
current.x = current.x - SIDES.LEFT[1]
current.x = SIDES.RIGHT[1] + SIDES.WIDTH - current.x
else
current.x = current.x - SIDES.RIGHT[1]
current.x = SIDES.LEFT[1] + SIDES.WIDTH - current.x
end
collider:setPosition(current.x, current.y)
end