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:
127
game.lua
Normal file
127
game.lua
Normal 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
|
||||
Reference in New Issue
Block a user