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

127
game.lua Normal file
View File

@@ -0,0 +1,127 @@
-- Chuchu by Makaron
-- The main game screen of Chuchu
Boipus = require('deps.boipushy')
Physics = require('deps.physics')
assets = require('deps.cargo').init('data')
-- my own libs
crates = require('crate')
GRAVITY = 512
PLAN_SIZE = {
marginX = 120,
marginY = 120,
w = 512,
h = 512
}
local player = {
maxSpeed = {
x = 100,
y = 100
}
}
local magnet = {
w = 50,
h = 50,
collider = nil,
side = 'LEFT'
}
local velocity = {0, 0}
local current = { }
local Chu = {}
function Chu.new(x, y, debug)
obj = {}
obj.x = x
obj.y = y
if debug == nil then debug = false end
obj.debug = debug
world = Physics(0, GRAVITY)
world:addClass('Player')
world:addClass('GamePlan')
world:addClass('Crate')
obj.gamePlan = world:addChain(true, {
x - PLAN_SIZE.marginX, y - PLAN_SIZE.marginY,
x + PLAN_SIZE.w + PLAN_SIZE.marginX, y - PLAN_SIZE.marginY,
x + PLAN_SIZE.w + PLAN_SIZE.marginX, y + PLAN_SIZE.h + PLAN_SIZE.marginY,
x - PLAN_SIZE.marginX, y + PLAN_SIZE.h + PLAN_SIZE.marginY
}):setClass('GamePlan')
magnet.collider = world:addRectangle(x + 50, y + 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(x + 120, y + 400)
crates:spawn(x + 150, y + 400)
return setmetatable(obj, {
__index = Chu
})
end
function Chu: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]]--
if input:pressed('detach') then
velocity = {0, 0}
local attached = crates:getAttached()
for key in pairs(attached) do
crates:detach(key)
end
elseif 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
magnet.collider:setLinearVelocity(velocity[1], velocity[2])
end
function Chu:draw()
world:draw()
if self.debug then
love.graphics.setColor(255, 0, 0, .5)
love.graphics.rectangle('line', self.x, self.y, PLAN_SIZE.w, PLAN_SIZE.h)
end
end
return Chu