Files
chuchu/main.lua
2021-05-08 17:36:09 +02:00

144 lines
3.9 KiB
Lua

-- Chuchu by Makaron
Boipus = require('deps.boipushy')
Physics = require('deps.physics')
assets = require('deps.cargo').init('data')
-- my own libs
crates = require('crate')
local CONST_GRAVITY = 512
local CONST_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 tempAttached = nil
function mirrorCollider(collider, side)
current.x, current.y = collider:getPosition()
if side == 'LEFT' then
current.x = current.x - CONST_SIDES.LEFT[1]
current.x = CONST_SIDES.RIGHT[1] + CONST_SIDES.WIDTH - current.x
else
current.x = current.x - CONST_SIDES.RIGHT[1]
current.x = CONST_SIDES.LEFT[1] + CONST_SIDES.WIDTH - current.x
end
collider:setPosition(current.x, current.y)
end
function love.load()
love.window.setMode(512, 512)
world = Physics(0, 0)
world:addClass('Player')
world:addClass('Side')
world:addClass('Crate')
side.left = world:addChain(true, CONST_SIDES.LEFT):setClass('Side')
side.right = world:addChain(true, CONST_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')
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')]]--
end
function love.update(dt)
world:update(dt)
crates:update(dt)
--[[ if input:down('moveUp') then magnet.collider:applyLinearImpulse(0, -player.maxSpeed.y) end
if input:down('moveLeft') then magnet.collider:applyLinearImpulse(-player.maxSpeed.x, 0) end
if input:down('moveRight') then magnet.collider:applyLinearImpulse(player.maxSpeed.x, 0) end
if input:down('moveDown') then magnet.collider:applyLinearImpulse(0, player.maxSpeed.y) end ]]--
-- 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
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])
end
function love.draw()
--[[love.graphics.clear(255, 255, 255)
love.graphics.setColor(0, 0, 0, 1)
love.graphics.polygon('line', CONST_SIDES.LEFT)
love.graphics.rectangle('line', magnet.x, magnet.y, 32, 32) ]]--
world:draw()
current.x, current.y = magnet.collider:getPosition()
love.graphics.print('Pos X: ' .. current.x .. ', Pos Y: ' .. current.y)
-- love.graphics.print('Key code: ' .. key)
--love.graphics.draw(assets.sprites.crane)
end