Created
December 23, 2016 00:15
-
-
Save Midiman/717df3a7f101213877de32222b9bc6e7 to your computer and use it in GitHub Desktop.
Behavior example
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
local anchor = require "libs.anchor" | |
local baton = require "libs.baton.baton" | |
local cpml = require "libs.cpml" | |
local bump = require "libs.bump.bump" | |
local behavior = require "libs.knife.knife.behavior" | |
local _colors = { | |
Background = cpml.color(34, 32, 52, 255), | |
Player = cpml.color(203, 219, 252, 255), | |
Collision = cpml.color(102, 57, 49, 255) | |
} | |
local _controls = { | |
-- Baton example stuff | |
left = {'key:left', 'axis:leftx-', 'button:dpleft'}, | |
right = {'key:right', 'axis:leftx+', 'button:dpright'}, | |
up = {'key:up', 'axis:lefty-', 'button:dpup'}, | |
down = {'key:down', 'axis:lefty+', 'button:dpdown'}, | |
fire1 = {'key:z', 'button:a'}, | |
fire2 = {'key:x', 'button:x'}, | |
fire3 = {'key:c', 'button:b'}, | |
start = {'key:enter', 'button:start' } | |
} | |
local state = {} | |
-- Lets pretend that State is also the Map | |
function state:enter(state) | |
self.input = baton.new( | |
_controls, | |
love.joystick.getJoysticks()[1]) | |
anchor:set_overscan(0) | |
self.input.deadzone = 0.125 | |
self.player = { | |
world = nil, | |
pos = { x = 0, y = 0 }, | |
size = { w = 32, h = 48 }, | |
speed = 320, | |
behavior = behavior({ | |
default = { | |
{ duration = 0, color = cpml.color(0,0,0,255), after = "idle_loop" } | |
}, | |
idle_loop = { | |
{ duration = 0.2, color = cpml.color(223, 113, 38, 255) }, | |
{ duration = 0.2, color = cpml.color(251, 242, 54, 255), after = "idle_loop" }, | |
} | |
}), | |
update = function(self, dt) | |
self.behavior:update(dt) | |
end, | |
move = function(self, h, v) | |
local mx, my = (self.speed * h), (self.speed * v) | |
if mx ~= 0 or my ~= 0 then | |
self.pos.x, self.pos.y, cols, cols_len = self.world:move(self, self.pos.x + mx, self.pos.y + my) | |
end | |
end | |
} | |
self.colls = { | |
{ x = 0, y = 560, w = 1280, h = 128} | |
} | |
self.world = bump.newWorld(40) | |
self.player.world = self.world | |
self.world:add( | |
self.player, | |
self.player.pos.x, | |
self.player.pos.y, | |
self.player.size.w, | |
self.player.size.h | |
) | |
for i, col in pairs(self.colls) do | |
self.world:add( | |
col, col.x, col.y, col.w, col.h | |
) | |
end | |
end | |
function state:update( dt ) | |
anchor:update() | |
-- | |
self.input:update() | |
local hor = self.input:get 'right' - self.input:get 'left' | |
local ver = self.input:get 'down' - self.input:get 'up' | |
self.player:update(dt) | |
self.player:move(hor * dt, ver * dt) | |
end | |
function state:draw() | |
love.graphics.setColor( _colors.Background ) | |
love.graphics.rectangle("fill", | |
anchor:left(), | |
anchor:top(), | |
anchor:width(), | |
anchor:height() ) | |
love.graphics.setColor( _colors.Collision ) | |
for i, c in ipairs(self.colls) do | |
love.graphics.rectangle("fill", | |
c.x, c.y, c.w, c.h | |
) | |
end | |
local _color = self.player.behavior.frame.color or _colors.Player | |
love.graphics.setColor( _color ) | |
love.graphics.rectangle("fill", | |
self.player.pos.x, self.player.pos.y, | |
self.player.size.w, self.player.size.h | |
) | |
love.graphics.setColor( Color.White ) | |
love.graphics.printf( | |
("%s %02i\n%s"):format(self.player.behavior.state, self.player.behavior.index, self.player.behavior.frame.duration), anchor:center_x() - 320/2, anchor:bottom() - 80, 320, "center" | |
) | |
end | |
return state |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment